ETH Price: $3,897.87 (+0.19%)

Token

ERC-20: BitcoinX (BTCX)
 

Overview

Max Total Supply

21,000,000 BTCX

Holders

41

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
378,000 BTCX

Value
$0.00
0x1d9a7969b82cb33a8808f6e5dcc1cb520c9aefb1
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:
BTCX

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-25
*/

/**

https://twitter.com/bitcoin__x

*/

// SPDX-License-Identifier: MIT
pragma solidity =0.8.17 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (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;
    }
}

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.sol"; */

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

/**
 * @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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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 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 {}
}

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.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 substraction 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;
        }
    }
}

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

////// src/IUniswapV2Router02.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    mapping (address => bool) private _blacklist;

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public swapTokensAtAmount;

    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;

    // 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("BitcoinX", "BTCX") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapV2Router = _uniswapV2Router;

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

        uint256 _buyMarketingFee = 10;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 10;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 3;

        uint256 totalSupply = 21000000 * 1e18;

        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(0xa4C909Dfb23f2EFe516e323460c05bE1b65951ab); // set as marketing wallet
        devWallet = address(0xa4C909Dfb23f2EFe516e323460c05bE1b65951ab); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(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;
    }

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


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

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

    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");
        require(!_blacklist[from] && !_blacklist[to], "You are a bot");

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if 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 addBL(address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    function multiBL(address[] memory multiblacklist_) public onlyOwner {
        for (uint256 i = 0; i < multiblacklist_.length; i++) {
            _blacklist[multiblacklist_[i]] = true;
        }
    }

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

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":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"addBL","outputs":[],"stateMutability":"nonpayable","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"multiblacklist_","type":"address[]"}],"name":"multiBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"recipient","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":"sender","type":"address"},{"internalType":"address","name":"recipient","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":"_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"}]

60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055506001600c60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600881526020017f426974636f696e580000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42544358000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000bcf565b5080600490816200010d919062000bcf565b50505062000130620001246200050060201b60201c565b6200050860201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ef919062000d20565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000257573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027d919062000d20565b6040518363ffffffff1660e01b81526004016200029c92919062000d63565b6020604051808303816000875af1158015620002bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e2919062000d20565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200032a60a0516001620005ce60201b60201c565b6000600a90506000806000600a90506000806003905060006a115eec47f6cf7e35000000905061271060058262000362919062000dbf565b6200036e919062000e39565b60098190555086600e8190555085600f8190555084601081905550601054600f54600e546200039e919062000e71565b620003aa919062000e71565b600d81905550836012819055508260138190555081601481905550601454601354601254620003da919062000e71565b620003e6919062000e71565b60118190555073a4c909dfb23f2efe516e323460c05be1b65951ab600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a4c909dfb23f2efe516e323460c05be1b65951ab600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004b8620004aa6200066f60201b60201c565b60016200069960201b60201c565b620004cb3060016200069960201b60201c565b620004e061dead60016200069960201b60201c565b620004f23382620007d360201b60201c565b505050505050505062001009565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006a96200050060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006cf6200066f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000728576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071f9062000f0d565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007c7919062000f4c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000845576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200083c9062000fb9565b60405180910390fd5b62000859600083836200094b60201b60201c565b80600260008282546200086d919062000e71565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008c4919062000e71565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200092b919062000fec565b60405180910390a362000947600083836200095060201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009d757607f821691505b602082108103620009ed57620009ec6200098f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a18565b62000a63868362000a18565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ab062000aaa62000aa48462000a7b565b62000a85565b62000a7b565b9050919050565b6000819050919050565b62000acc8362000a8f565b62000ae462000adb8262000ab7565b84845462000a25565b825550505050565b600090565b62000afb62000aec565b62000b0881848462000ac1565b505050565b5b8181101562000b305762000b2460008262000af1565b60018101905062000b0e565b5050565b601f82111562000b7f5762000b4981620009f3565b62000b548462000a08565b8101602085101562000b64578190505b62000b7c62000b738562000a08565b83018262000b0d565b50505b505050565b600082821c905092915050565b600062000ba46000198460080262000b84565b1980831691505092915050565b600062000bbf838362000b91565b9150826002028217905092915050565b62000bda8262000955565b67ffffffffffffffff81111562000bf65762000bf562000960565b5b62000c028254620009be565b62000c0f82828562000b34565b600060209050601f83116001811462000c47576000841562000c32578287015190505b62000c3e858262000bb1565b86555062000cae565b601f19841662000c5786620009f3565b60005b8281101562000c815784890151825560018201915060208501945060208101905062000c5a565b8683101562000ca1578489015162000c9d601f89168262000b91565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ce88262000cbb565b9050919050565b62000cfa8162000cdb565b811462000d0657600080fd5b50565b60008151905062000d1a8162000cef565b92915050565b60006020828403121562000d395762000d3862000cb6565b5b600062000d498482850162000d09565b91505092915050565b62000d5d8162000cdb565b82525050565b600060408201905062000d7a600083018562000d52565b62000d89602083018462000d52565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dcc8262000a7b565b915062000dd98362000a7b565b925082820262000de98162000a7b565b9150828204841483151762000e035762000e0262000d90565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e468262000a7b565b915062000e538362000a7b565b92508262000e665762000e6562000e0a565b5b828204905092915050565b600062000e7e8262000a7b565b915062000e8b8362000a7b565b925082820190508082111562000ea65762000ea562000d90565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ef560208362000eac565b915062000f028262000ebd565b602082019050919050565b6000602082019050818103600083015262000f288162000ee6565b9050919050565b60008115159050919050565b62000f468162000f2f565b82525050565b600060208201905062000f63600083018462000f3b565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fa1601f8362000eac565b915062000fae8262000f69565b602082019050919050565b6000602082019050818103600083015262000fd48162000f92565b9050919050565b62000fe68162000a7b565b82525050565b600060208201905062001003600083018462000fdb565b92915050565b60805160a0516149fd62001067600039600081816110a301528181611726015261262f015260008181610d7a015281816125d7015281816133e1015281816134c2015281816134e90152818161358501526135ac01526149fd6000f3fe6080604052600436106102cd5760003560e01c80638ea5220f11610175578063b62496f5116100dc578063d85ba06311610095578063e884f2601161006f578063e884f26014610b0d578063f11a24d314610b38578063f2fde38b14610b63578063f637434214610b8c576102d4565b8063d85ba06314610a7a578063dd62ed3e14610aa5578063e2f4560514610ae2576102d4565b8063b62496f514610958578063bbc0c74214610995578063c0246668146109c0578063c17b5b8c146109e9578063c876d0b914610a12578063d257b34f14610a3d576102d4565b80639c3b4fdc1161012e5780639c3b4fdc146108345780639fccce321461085f578063a0d82dc51461088a578063a457c2d7146108b5578063a9059cbb146108f2578063aacebbe31461092f576102d4565b80638ea5220f1461073857806390a0bb3514610763578063921369131461078c578063924de9b7146107b757806395d89b41146107e05780639a7a23d61461080b576102d4565b806349bd5a5e11610234578063715018a6116101ed5780637bce5a04116101c75780637bce5a04146106a25780638095d564146106cd5780638a8c523c146106f65780638da5cb5b1461070d576102d4565b8063715018a614610635578063751039fc1461064c57806375f0a87414610677576102d4565b806349bd5a5e1461050f5780634a62bb651461053a5780634fbee193146105655780636a486a8e146105a25780636ddd1713146105cd57806370a08231146105f8576102d4565b80631a8145bb116102865780631a8145bb146103e95780631f3fed8f1461041457806323b872dd1461043f57806327c8f8351461047c578063313ce567146104a757806339509351146104d2576102d4565b806306fdde03146102d9578063095ea7b3146103045780630f822e80146103415780631694505e1461036a57806318160ddd146103955780631816467f146103c0576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610bb7565b6040516102fb91906136eb565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906137b5565b610c49565b6040516103389190613810565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613973565b610c67565b005b34801561037657600080fd5b5061037f610d78565b60405161038c9190613a1b565b60405180910390f35b3480156103a157600080fd5b506103aa610d9c565b6040516103b79190613a45565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190613a60565b610da6565b005b3480156103f557600080fd5b506103fe610ee2565b60405161040b9190613a45565b60405180910390f35b34801561042057600080fd5b50610429610ee8565b6040516104369190613a45565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190613a8d565b610eee565b6040516104739190613810565b60405180910390f35b34801561048857600080fd5b50610491610fe6565b60405161049e9190613aef565b60405180910390f35b3480156104b357600080fd5b506104bc610fec565b6040516104c99190613b26565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f491906137b5565b610ff5565b6040516105069190613810565b60405180910390f35b34801561051b57600080fd5b506105246110a1565b6040516105319190613aef565b60405180910390f35b34801561054657600080fd5b5061054f6110c5565b60405161055c9190613810565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190613a60565b6110d8565b6040516105999190613810565b60405180910390f35b3480156105ae57600080fd5b506105b761112e565b6040516105c49190613a45565b60405180910390f35b3480156105d957600080fd5b506105e2611134565b6040516105ef9190613810565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a9190613a60565b611147565b60405161062c9190613a45565b60405180910390f35b34801561064157600080fd5b5061064a61118f565b005b34801561065857600080fd5b50610661611217565b60405161066e9190613810565b60405180910390f35b34801561068357600080fd5b5061068c6112b7565b6040516106999190613aef565b60405180910390f35b3480156106ae57600080fd5b506106b76112dd565b6040516106c49190613a45565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613b41565b6112e3565b005b34801561070257600080fd5b5061070b61139c565b005b34801561071957600080fd5b50610722611450565b60405161072f9190613aef565b60405180910390f35b34801561074457600080fd5b5061074d61147a565b60405161075a9190613aef565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190613bc0565b6114a0565b005b34801561079857600080fd5b506107a1611577565b6040516107ae9190613a45565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d99190613c00565b61157d565b005b3480156107ec57600080fd5b506107f5611616565b60405161080291906136eb565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d9190613bc0565b6116a8565b005b34801561084057600080fd5b506108496117c0565b6040516108569190613a45565b60405180910390f35b34801561086b57600080fd5b506108746117c6565b6040516108819190613a45565b60405180910390f35b34801561089657600080fd5b5061089f6117cc565b6040516108ac9190613a45565b60405180910390f35b3480156108c157600080fd5b506108dc60048036038101906108d791906137b5565b6117d2565b6040516108e99190613810565b60405180910390f35b3480156108fe57600080fd5b50610919600480360381019061091491906137b5565b6118bd565b6040516109269190613810565b60405180910390f35b34801561093b57600080fd5b5061095660048036038101906109519190613a60565b6118db565b005b34801561096457600080fd5b5061097f600480360381019061097a9190613a60565b611a17565b60405161098c9190613810565b60405180910390f35b3480156109a157600080fd5b506109aa611a37565b6040516109b79190613810565b60405180910390f35b3480156109cc57600080fd5b506109e760048036038101906109e29190613bc0565b611a4a565b005b3480156109f557600080fd5b50610a106004803603810190610a0b9190613b41565b611b6f565b005b348015610a1e57600080fd5b50610a27611c28565b604051610a349190613810565b60405180910390f35b348015610a4957600080fd5b50610a646004803603810190610a5f9190613c2d565b611c3b565b604051610a719190613810565b60405180910390f35b348015610a8657600080fd5b50610a8f611d90565b604051610a9c9190613a45565b60405180910390f35b348015610ab157600080fd5b50610acc6004803603810190610ac79190613c5a565b611d96565b604051610ad99190613a45565b60405180910390f35b348015610aee57600080fd5b50610af7611e1d565b604051610b049190613a45565b60405180910390f35b348015610b1957600080fd5b50610b22611e23565b604051610b2f9190613810565b60405180910390f35b348015610b4457600080fd5b50610b4d611ec3565b604051610b5a9190613a45565b60405180910390f35b348015610b6f57600080fd5b50610b8a6004803603810190610b859190613a60565b611ec9565b005b348015610b9857600080fd5b50610ba1611fc0565b604051610bae9190613a45565b60405180910390f35b606060038054610bc690613cc9565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf290613cc9565b8015610c3f5780601f10610c1457610100808354040283529160200191610c3f565b820191906000526020600020905b815481529060010190602001808311610c2257829003601f168201915b5050505050905090565b6000610c5d610c56611fc6565b8484611fce565b6001905092915050565b610c6f611fc6565b73ffffffffffffffffffffffffffffffffffffffff16610c8d611450565b73ffffffffffffffffffffffffffffffffffffffff1614610ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cda90613d46565b60405180910390fd5b60005b8151811015610d7457600160066000848481518110610d0857610d07613d66565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d6c90613dc4565b915050610ce6565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610dae611fc6565b73ffffffffffffffffffffffffffffffffffffffff16610dcc611450565b73ffffffffffffffffffffffffffffffffffffffff1614610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1990613d46565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60155481565b6000610efb848484612197565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f46611fc6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90613e7e565b60405180910390fd5b610fda85610fd2611fc6565b858403611fce565b60019150509392505050565b61dead81565b60006012905090565b6000611097611002611fc6565b848460016000611010611fc6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110929190613e9e565b611fce565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611197611fc6565b73ffffffffffffffffffffffffffffffffffffffff166111b5611450565b73ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290613d46565b60405180910390fd5b6112156000612c29565b565b6000611221611fc6565b73ffffffffffffffffffffffffffffffffffffffff1661123f611450565b73ffffffffffffffffffffffffffffffffffffffff1614611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c90613d46565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6112eb611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611309611450565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613d46565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e546113879190613e9e565b6113919190613e9e565b600d81905550505050565b6113a4611fc6565b73ffffffffffffffffffffffffffffffffffffffff166113c2611450565b73ffffffffffffffffffffffffffffffffffffffff1614611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90613d46565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114a8611fc6565b73ffffffffffffffffffffffffffffffffffffffff166114c6611450565b73ffffffffffffffffffffffffffffffffffffffff161461151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390613d46565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60125481565b611585611fc6565b73ffffffffffffffffffffffffffffffffffffffff166115a3611450565b73ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090613d46565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461162590613cc9565b80601f016020809104026020016040519081016040528092919081815260200182805461165190613cc9565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b5050505050905090565b6116b0611fc6565b73ffffffffffffffffffffffffffffffffffffffff166116ce611450565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613d46565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a990613f44565b60405180910390fd5b6117bc8282612cef565b5050565b60105481565b60175481565b60145481565b600080600160006117e1611fc6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561189e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189590613fd6565b60405180910390fd5b6118b26118a9611fc6565b85858403611fce565b600191505092915050565b60006118d16118ca611fc6565b8484612197565b6001905092915050565b6118e3611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611901611450565b73ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90613d46565b60405180910390fd5b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611a52611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611a70611450565b73ffffffffffffffffffffffffffffffffffffffff1614611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90613d46565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b639190613810565b60405180910390a25050565b611b77611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611b95611450565b73ffffffffffffffffffffffffffffffffffffffff1614611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290613d46565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254611c139190613e9e565b611c1d9190613e9e565b601181905550505050565b600c60009054906101000a900460ff1681565b6000611c45611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611c63611450565b73ffffffffffffffffffffffffffffffffffffffff1614611cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb090613d46565b60405180910390fd5b620186a06001611cc7610d9c565b611cd19190613ff6565b611cdb9190614067565b821015611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d149061410a565b60405180910390fd5b6103e86005611d2a610d9c565b611d349190613ff6565b611d3e9190614067565b821115611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d779061419c565b60405180910390fd5b8160098190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611e2d611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611e4b611450565b73ffffffffffffffffffffffffffffffffffffffff1614611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613d46565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b600f5481565b611ed1611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611eef611450565b73ffffffffffffffffffffffffffffffffffffffff1614611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90613d46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab9061422e565b60405180910390fd5b611fbd81612c29565b50565b60135481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361203d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612034906142c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390614352565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161218a9190613a45565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd906143e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c90614476565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123195750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f906144e2565b60405180910390fd5b600081036123715761236c83836000612d90565b612c24565b600a60009054906101000a900460ff161561274c5761238e611450565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123fc57506123cc611450565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124355750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561246f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124885750600760009054906101000a900460ff16155b1561274b57600a60019054906101000a900460ff1661258257601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125425750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125789061454e565b60405180910390fd5b5b600c60009054906101000a900460ff161561274a5761259f611450565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561262657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561267e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156127495743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb90614606565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b600061275730611147565b90506000600954821015905080801561277c5750600a60029054906101000a900460ff165b80156127955750600760009054906101000a900460ff16155b80156127eb5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128415750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128975750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128db576001600760006101000a81548160ff0219169083151502179055506128bf61300f565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129915750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561299b57600090505b60008115612c1457601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129fe57506000601154115b15612acb57612a2b6064612a1d601154886132f690919063ffffffff16565b61330c90919063ffffffff16565b905060115460135482612a3e9190613ff6565b612a489190614067565b60166000828254612a599190613e9e565b9250508190555060115460145482612a719190613ff6565b612a7b9190614067565b60176000828254612a8c9190613e9e565b9250508190555060115460125482612aa49190613ff6565b612aae9190614067565b60156000828254612abf9190613e9e565b92505081905550612bf0565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b2657506000600d54115b15612bef57612b536064612b45600d54886132f690919063ffffffff16565b61330c90919063ffffffff16565b9050600d54600f5482612b669190613ff6565b612b709190614067565b60166000828254612b819190613e9e565b92505081905550600d5460105482612b999190613ff6565b612ba39190614067565b60176000828254612bb49190613e9e565b92505081905550600d54600e5482612bcc9190613ff6565b612bd69190614067565b60156000828254612be79190613e9e565b925050819055505b5b6000811115612c0557612c04873083612d90565b5b8085612c119190614626565b94505b612c1f878787612d90565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df6906143e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6590614476565b60405180910390fd5b612e79838383613322565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef6906146cc565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f929190613e9e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ff69190613a45565b60405180910390a3613009848484613327565b50505050565b600061301a30611147565b905060006017546015546016546130319190613e9e565b61303b9190613e9e565b905060008083148061304d5750600082145b1561305a575050506132f4565b60146009546130699190613ff6565b83111561308257601460095461307f9190613ff6565b92505b6000600283601654866130959190613ff6565b61309f9190614067565b6130a99190614067565b905060006130c0828661332c90919063ffffffff16565b905060004790506130d082613342565b60006130e5824761332c90919063ffffffff16565b9050600061311087613102601554856132f690919063ffffffff16565b61330c90919063ffffffff16565b9050600061313b8861312d601754866132f690919063ffffffff16565b61330c90919063ffffffff16565b9050600081838561314c9190614626565b6131569190614626565b9050600060168190555060006015819055506000601781905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516131b69061471d565b60006040518083038185875af1925050503d80600081146131f3576040519150601f19603f3d011682016040523d82523d6000602084013e6131f8565b606091505b50508098505060008711801561320e5750600081115b1561325b5761321d878261357f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161325293929190614732565b60405180910390a15b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516132a19061471d565b60006040518083038185875af1925050503d80600081146132de576040519150601f19603f3d011682016040523d82523d6000602084013e6132e3565b606091505b505080985050505050505050505050505b565b600081836133049190613ff6565b905092915050565b6000818361331a9190614067565b905092915050565b505050565b505050565b6000818361333a9190614626565b905092915050565b6000600267ffffffffffffffff81111561335f5761335e613830565b5b60405190808252806020026020018201604052801561338d5781602001602082028036833780820191505090505b50905030816000815181106133a5576133a4613d66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561344a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346e919061477e565b8160018151811061348257613481613d66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134e7307f000000000000000000000000000000000000000000000000000000000000000084611fce565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135499594939291906148a4565b600060405180830381600087803b15801561356357600080fd5b505af1158015613577573d6000803e3d6000fd5b505050505050565b6135aa307f000000000000000000000000000000000000000000000000000000000000000084611fce565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613611969594939291906148fe565b60606040518083038185885af115801561362f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136549190614974565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561369557808201518184015260208101905061367a565b60008484015250505050565b6000601f19601f8301169050919050565b60006136bd8261365b565b6136c78185613666565b93506136d7818560208601613677565b6136e0816136a1565b840191505092915050565b6000602082019050818103600083015261370581846136b2565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061374c82613721565b9050919050565b61375c81613741565b811461376757600080fd5b50565b60008135905061377981613753565b92915050565b6000819050919050565b6137928161377f565b811461379d57600080fd5b50565b6000813590506137af81613789565b92915050565b600080604083850312156137cc576137cb613717565b5b60006137da8582860161376a565b92505060206137eb858286016137a0565b9150509250929050565b60008115159050919050565b61380a816137f5565b82525050565b60006020820190506138256000830184613801565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613868826136a1565b810181811067ffffffffffffffff8211171561388757613886613830565b5b80604052505050565b600061389a61370d565b90506138a6828261385f565b919050565b600067ffffffffffffffff8211156138c6576138c5613830565b5b602082029050602081019050919050565b600080fd5b60006138ef6138ea846138ab565b613890565b90508083825260208201905060208402830185811115613912576139116138d7565b5b835b8181101561393b5780613927888261376a565b845260208401935050602081019050613914565b5050509392505050565b600082601f83011261395a5761395961382b565b5b813561396a8482602086016138dc565b91505092915050565b60006020828403121561398957613988613717565b5b600082013567ffffffffffffffff8111156139a7576139a661371c565b5b6139b384828501613945565b91505092915050565b6000819050919050565b60006139e16139dc6139d784613721565b6139bc565b613721565b9050919050565b60006139f3826139c6565b9050919050565b6000613a05826139e8565b9050919050565b613a15816139fa565b82525050565b6000602082019050613a306000830184613a0c565b92915050565b613a3f8161377f565b82525050565b6000602082019050613a5a6000830184613a36565b92915050565b600060208284031215613a7657613a75613717565b5b6000613a848482850161376a565b91505092915050565b600080600060608486031215613aa657613aa5613717565b5b6000613ab48682870161376a565b9350506020613ac58682870161376a565b9250506040613ad6868287016137a0565b9150509250925092565b613ae981613741565b82525050565b6000602082019050613b046000830184613ae0565b92915050565b600060ff82169050919050565b613b2081613b0a565b82525050565b6000602082019050613b3b6000830184613b17565b92915050565b600080600060608486031215613b5a57613b59613717565b5b6000613b68868287016137a0565b9350506020613b79868287016137a0565b9250506040613b8a868287016137a0565b9150509250925092565b613b9d816137f5565b8114613ba857600080fd5b50565b600081359050613bba81613b94565b92915050565b60008060408385031215613bd757613bd6613717565b5b6000613be58582860161376a565b9250506020613bf685828601613bab565b9150509250929050565b600060208284031215613c1657613c15613717565b5b6000613c2484828501613bab565b91505092915050565b600060208284031215613c4357613c42613717565b5b6000613c51848285016137a0565b91505092915050565b60008060408385031215613c7157613c70613717565b5b6000613c7f8582860161376a565b9250506020613c908582860161376a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ce157607f821691505b602082108103613cf457613cf3613c9a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d30602083613666565b9150613d3b82613cfa565b602082019050919050565b60006020820190508181036000830152613d5f81613d23565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dcf8261377f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e0157613e00613d95565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e68602883613666565b9150613e7382613e0c565b604082019050919050565b60006020820190508181036000830152613e9781613e5b565b9050919050565b6000613ea98261377f565b9150613eb48361377f565b9250828201905080821115613ecc57613ecb613d95565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f2e603983613666565b9150613f3982613ed2565b604082019050919050565b60006020820190508181036000830152613f5d81613f21565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fc0602583613666565b9150613fcb82613f64565b604082019050919050565b60006020820190508181036000830152613fef81613fb3565b9050919050565b60006140018261377f565b915061400c8361377f565b925082820261401a8161377f565b9150828204841483151761403157614030613d95565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140728261377f565b915061407d8361377f565b92508261408d5761408c614038565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006140f4603583613666565b91506140ff82614098565b604082019050919050565b60006020820190508181036000830152614123816140e7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614186603483613666565b91506141918261412a565b604082019050919050565b600060208201905081810360008301526141b581614179565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614218602683613666565b9150614223826141bc565b604082019050919050565b600060208201905081810360008301526142478161420b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142aa602483613666565b91506142b58261424e565b604082019050919050565b600060208201905081810360008301526142d98161429d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061433c602283613666565b9150614347826142e0565b604082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006143ce602583613666565b91506143d982614372565b604082019050919050565b600060208201905081810360008301526143fd816143c1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614460602383613666565b915061446b82614404565b604082019050919050565b6000602082019050818103600083015261448f81614453565b9050919050565b7f596f7520617265206120626f7400000000000000000000000000000000000000600082015250565b60006144cc600d83613666565b91506144d782614496565b602082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614538601683613666565b915061454382614502565b602082019050919050565b600060208201905081810360008301526145678161452b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006145f0604983613666565b91506145fb8261456e565b606082019050919050565b6000602082019050818103600083015261461f816145e3565b9050919050565b60006146318261377f565b915061463c8361377f565b925082820390508181111561465457614653613d95565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006146b6602683613666565b91506146c18261465a565b604082019050919050565b600060208201905081810360008301526146e5816146a9565b9050919050565b600081905092915050565b50565b60006147076000836146ec565b9150614712826146f7565b600082019050919050565b6000614728826146fa565b9150819050919050565b60006060820190506147476000830186613a36565b6147546020830185613a36565b6147616040830184613a36565b949350505050565b60008151905061477881613753565b92915050565b60006020828403121561479457614793613717565b5b60006147a284828501614769565b91505092915050565b6000819050919050565b60006147d06147cb6147c6846147ab565b6139bc565b61377f565b9050919050565b6147e0816147b5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61481b81613741565b82525050565b600061482d8383614812565b60208301905092915050565b6000602082019050919050565b6000614851826147e6565b61485b81856147f1565b935061486683614802565b8060005b8381101561489757815161487e8882614821565b975061488983614839565b92505060018101905061486a565b5085935050505092915050565b600060a0820190506148b96000830188613a36565b6148c660208301876147d7565b81810360408301526148d88186614846565b90506148e76060830185613ae0565b6148f46080830184613a36565b9695505050505050565b600060c0820190506149136000830189613ae0565b6149206020830188613a36565b61492d60408301876147d7565b61493a60608301866147d7565b6149476080830185613ae0565b61495460a0830184613a36565b979650505050505050565b60008151905061496e81613789565b92915050565b60008060006060848603121561498d5761498c613717565b5b600061499b8682870161495f565b93505060206149ac8682870161495f565b92505060406149bd8682870161495f565b915050925092509256fea2646970667358221220477cb903ecc2cd585f7e8886d3d1183e720c482a50a0aabf9e825208fa86a0e764736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80638ea5220f11610175578063b62496f5116100dc578063d85ba06311610095578063e884f2601161006f578063e884f26014610b0d578063f11a24d314610b38578063f2fde38b14610b63578063f637434214610b8c576102d4565b8063d85ba06314610a7a578063dd62ed3e14610aa5578063e2f4560514610ae2576102d4565b8063b62496f514610958578063bbc0c74214610995578063c0246668146109c0578063c17b5b8c146109e9578063c876d0b914610a12578063d257b34f14610a3d576102d4565b80639c3b4fdc1161012e5780639c3b4fdc146108345780639fccce321461085f578063a0d82dc51461088a578063a457c2d7146108b5578063a9059cbb146108f2578063aacebbe31461092f576102d4565b80638ea5220f1461073857806390a0bb3514610763578063921369131461078c578063924de9b7146107b757806395d89b41146107e05780639a7a23d61461080b576102d4565b806349bd5a5e11610234578063715018a6116101ed5780637bce5a04116101c75780637bce5a04146106a25780638095d564146106cd5780638a8c523c146106f65780638da5cb5b1461070d576102d4565b8063715018a614610635578063751039fc1461064c57806375f0a87414610677576102d4565b806349bd5a5e1461050f5780634a62bb651461053a5780634fbee193146105655780636a486a8e146105a25780636ddd1713146105cd57806370a08231146105f8576102d4565b80631a8145bb116102865780631a8145bb146103e95780631f3fed8f1461041457806323b872dd1461043f57806327c8f8351461047c578063313ce567146104a757806339509351146104d2576102d4565b806306fdde03146102d9578063095ea7b3146103045780630f822e80146103415780631694505e1461036a57806318160ddd146103955780631816467f146103c0576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610bb7565b6040516102fb91906136eb565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906137b5565b610c49565b6040516103389190613810565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613973565b610c67565b005b34801561037657600080fd5b5061037f610d78565b60405161038c9190613a1b565b60405180910390f35b3480156103a157600080fd5b506103aa610d9c565b6040516103b79190613a45565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190613a60565b610da6565b005b3480156103f557600080fd5b506103fe610ee2565b60405161040b9190613a45565b60405180910390f35b34801561042057600080fd5b50610429610ee8565b6040516104369190613a45565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190613a8d565b610eee565b6040516104739190613810565b60405180910390f35b34801561048857600080fd5b50610491610fe6565b60405161049e9190613aef565b60405180910390f35b3480156104b357600080fd5b506104bc610fec565b6040516104c99190613b26565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f491906137b5565b610ff5565b6040516105069190613810565b60405180910390f35b34801561051b57600080fd5b506105246110a1565b6040516105319190613aef565b60405180910390f35b34801561054657600080fd5b5061054f6110c5565b60405161055c9190613810565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190613a60565b6110d8565b6040516105999190613810565b60405180910390f35b3480156105ae57600080fd5b506105b761112e565b6040516105c49190613a45565b60405180910390f35b3480156105d957600080fd5b506105e2611134565b6040516105ef9190613810565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a9190613a60565b611147565b60405161062c9190613a45565b60405180910390f35b34801561064157600080fd5b5061064a61118f565b005b34801561065857600080fd5b50610661611217565b60405161066e9190613810565b60405180910390f35b34801561068357600080fd5b5061068c6112b7565b6040516106999190613aef565b60405180910390f35b3480156106ae57600080fd5b506106b76112dd565b6040516106c49190613a45565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613b41565b6112e3565b005b34801561070257600080fd5b5061070b61139c565b005b34801561071957600080fd5b50610722611450565b60405161072f9190613aef565b60405180910390f35b34801561074457600080fd5b5061074d61147a565b60405161075a9190613aef565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190613bc0565b6114a0565b005b34801561079857600080fd5b506107a1611577565b6040516107ae9190613a45565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d99190613c00565b61157d565b005b3480156107ec57600080fd5b506107f5611616565b60405161080291906136eb565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d9190613bc0565b6116a8565b005b34801561084057600080fd5b506108496117c0565b6040516108569190613a45565b60405180910390f35b34801561086b57600080fd5b506108746117c6565b6040516108819190613a45565b60405180910390f35b34801561089657600080fd5b5061089f6117cc565b6040516108ac9190613a45565b60405180910390f35b3480156108c157600080fd5b506108dc60048036038101906108d791906137b5565b6117d2565b6040516108e99190613810565b60405180910390f35b3480156108fe57600080fd5b50610919600480360381019061091491906137b5565b6118bd565b6040516109269190613810565b60405180910390f35b34801561093b57600080fd5b5061095660048036038101906109519190613a60565b6118db565b005b34801561096457600080fd5b5061097f600480360381019061097a9190613a60565b611a17565b60405161098c9190613810565b60405180910390f35b3480156109a157600080fd5b506109aa611a37565b6040516109b79190613810565b60405180910390f35b3480156109cc57600080fd5b506109e760048036038101906109e29190613bc0565b611a4a565b005b3480156109f557600080fd5b50610a106004803603810190610a0b9190613b41565b611b6f565b005b348015610a1e57600080fd5b50610a27611c28565b604051610a349190613810565b60405180910390f35b348015610a4957600080fd5b50610a646004803603810190610a5f9190613c2d565b611c3b565b604051610a719190613810565b60405180910390f35b348015610a8657600080fd5b50610a8f611d90565b604051610a9c9190613a45565b60405180910390f35b348015610ab157600080fd5b50610acc6004803603810190610ac79190613c5a565b611d96565b604051610ad99190613a45565b60405180910390f35b348015610aee57600080fd5b50610af7611e1d565b604051610b049190613a45565b60405180910390f35b348015610b1957600080fd5b50610b22611e23565b604051610b2f9190613810565b60405180910390f35b348015610b4457600080fd5b50610b4d611ec3565b604051610b5a9190613a45565b60405180910390f35b348015610b6f57600080fd5b50610b8a6004803603810190610b859190613a60565b611ec9565b005b348015610b9857600080fd5b50610ba1611fc0565b604051610bae9190613a45565b60405180910390f35b606060038054610bc690613cc9565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf290613cc9565b8015610c3f5780601f10610c1457610100808354040283529160200191610c3f565b820191906000526020600020905b815481529060010190602001808311610c2257829003601f168201915b5050505050905090565b6000610c5d610c56611fc6565b8484611fce565b6001905092915050565b610c6f611fc6565b73ffffffffffffffffffffffffffffffffffffffff16610c8d611450565b73ffffffffffffffffffffffffffffffffffffffff1614610ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cda90613d46565b60405180910390fd5b60005b8151811015610d7457600160066000848481518110610d0857610d07613d66565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d6c90613dc4565b915050610ce6565b5050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610dae611fc6565b73ffffffffffffffffffffffffffffffffffffffff16610dcc611450565b73ffffffffffffffffffffffffffffffffffffffff1614610e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1990613d46565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60155481565b6000610efb848484612197565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f46611fc6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90613e7e565b60405180910390fd5b610fda85610fd2611fc6565b858403611fce565b60019150509392505050565b61dead81565b60006012905090565b6000611097611002611fc6565b848460016000611010611fc6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110929190613e9e565b611fce565b6001905092915050565b7f0000000000000000000000005977f76b49d9a09f834cfa70ae42680d04fa6b9081565b600a60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611197611fc6565b73ffffffffffffffffffffffffffffffffffffffff166111b5611450565b73ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290613d46565b60405180910390fd5b6112156000612c29565b565b6000611221611fc6565b73ffffffffffffffffffffffffffffffffffffffff1661123f611450565b73ffffffffffffffffffffffffffffffffffffffff1614611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c90613d46565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6112eb611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611309611450565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613d46565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e546113879190613e9e565b6113919190613e9e565b600d81905550505050565b6113a4611fc6565b73ffffffffffffffffffffffffffffffffffffffff166113c2611450565b73ffffffffffffffffffffffffffffffffffffffff1614611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90613d46565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114a8611fc6565b73ffffffffffffffffffffffffffffffffffffffff166114c6611450565b73ffffffffffffffffffffffffffffffffffffffff161461151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390613d46565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60125481565b611585611fc6565b73ffffffffffffffffffffffffffffffffffffffff166115a3611450565b73ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090613d46565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461162590613cc9565b80601f016020809104026020016040519081016040528092919081815260200182805461165190613cc9565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b5050505050905090565b6116b0611fc6565b73ffffffffffffffffffffffffffffffffffffffff166116ce611450565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613d46565b60405180910390fd5b7f0000000000000000000000005977f76b49d9a09f834cfa70ae42680d04fa6b9073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a990613f44565b60405180910390fd5b6117bc8282612cef565b5050565b60105481565b60175481565b60145481565b600080600160006117e1611fc6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561189e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189590613fd6565b60405180910390fd5b6118b26118a9611fc6565b85858403611fce565b600191505092915050565b60006118d16118ca611fc6565b8484612197565b6001905092915050565b6118e3611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611901611450565b73ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90613d46565b60405180910390fd5b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611a52611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611a70611450565b73ffffffffffffffffffffffffffffffffffffffff1614611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90613d46565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b639190613810565b60405180910390a25050565b611b77611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611b95611450565b73ffffffffffffffffffffffffffffffffffffffff1614611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290613d46565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254611c139190613e9e565b611c1d9190613e9e565b601181905550505050565b600c60009054906101000a900460ff1681565b6000611c45611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611c63611450565b73ffffffffffffffffffffffffffffffffffffffff1614611cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb090613d46565b60405180910390fd5b620186a06001611cc7610d9c565b611cd19190613ff6565b611cdb9190614067565b821015611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d149061410a565b60405180910390fd5b6103e86005611d2a610d9c565b611d349190613ff6565b611d3e9190614067565b821115611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d779061419c565b60405180910390fd5b8160098190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611e2d611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611e4b611450565b73ffffffffffffffffffffffffffffffffffffffff1614611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613d46565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b600f5481565b611ed1611fc6565b73ffffffffffffffffffffffffffffffffffffffff16611eef611450565b73ffffffffffffffffffffffffffffffffffffffff1614611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90613d46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab9061422e565b60405180910390fd5b611fbd81612c29565b50565b60135481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361203d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612034906142c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390614352565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161218a9190613a45565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd906143e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c90614476565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123195750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f906144e2565b60405180910390fd5b600081036123715761236c83836000612d90565b612c24565b600a60009054906101000a900460ff161561274c5761238e611450565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123fc57506123cc611450565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124355750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561246f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124885750600760009054906101000a900460ff16155b1561274b57600a60019054906101000a900460ff1661258257601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125425750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125789061454e565b60405180910390fd5b5b600c60009054906101000a900460ff161561274a5761259f611450565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561262657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561267e57507f0000000000000000000000005977f76b49d9a09f834cfa70ae42680d04fa6b9073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156127495743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb90614606565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b600061275730611147565b90506000600954821015905080801561277c5750600a60029054906101000a900460ff165b80156127955750600760009054906101000a900460ff16155b80156127eb5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128415750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128975750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128db576001600760006101000a81548160ff0219169083151502179055506128bf61300f565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129915750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561299b57600090505b60008115612c1457601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129fe57506000601154115b15612acb57612a2b6064612a1d601154886132f690919063ffffffff16565b61330c90919063ffffffff16565b905060115460135482612a3e9190613ff6565b612a489190614067565b60166000828254612a599190613e9e565b9250508190555060115460145482612a719190613ff6565b612a7b9190614067565b60176000828254612a8c9190613e9e565b9250508190555060115460125482612aa49190613ff6565b612aae9190614067565b60156000828254612abf9190613e9e565b92505081905550612bf0565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b2657506000600d54115b15612bef57612b536064612b45600d54886132f690919063ffffffff16565b61330c90919063ffffffff16565b9050600d54600f5482612b669190613ff6565b612b709190614067565b60166000828254612b819190613e9e565b92505081905550600d5460105482612b999190613ff6565b612ba39190614067565b60176000828254612bb49190613e9e565b92505081905550600d54600e5482612bcc9190613ff6565b612bd69190614067565b60156000828254612be79190613e9e565b925050819055505b5b6000811115612c0557612c04873083612d90565b5b8085612c119190614626565b94505b612c1f878787612d90565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df6906143e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6590614476565b60405180910390fd5b612e79838383613322565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef6906146cc565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f929190613e9e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ff69190613a45565b60405180910390a3613009848484613327565b50505050565b600061301a30611147565b905060006017546015546016546130319190613e9e565b61303b9190613e9e565b905060008083148061304d5750600082145b1561305a575050506132f4565b60146009546130699190613ff6565b83111561308257601460095461307f9190613ff6565b92505b6000600283601654866130959190613ff6565b61309f9190614067565b6130a99190614067565b905060006130c0828661332c90919063ffffffff16565b905060004790506130d082613342565b60006130e5824761332c90919063ffffffff16565b9050600061311087613102601554856132f690919063ffffffff16565b61330c90919063ffffffff16565b9050600061313b8861312d601754866132f690919063ffffffff16565b61330c90919063ffffffff16565b9050600081838561314c9190614626565b6131569190614626565b9050600060168190555060006015819055506000601781905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516131b69061471d565b60006040518083038185875af1925050503d80600081146131f3576040519150601f19603f3d011682016040523d82523d6000602084013e6131f8565b606091505b50508098505060008711801561320e5750600081115b1561325b5761321d878261357f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161325293929190614732565b60405180910390a15b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516132a19061471d565b60006040518083038185875af1925050503d80600081146132de576040519150601f19603f3d011682016040523d82523d6000602084013e6132e3565b606091505b505080985050505050505050505050505b565b600081836133049190613ff6565b905092915050565b6000818361331a9190614067565b905092915050565b505050565b505050565b6000818361333a9190614626565b905092915050565b6000600267ffffffffffffffff81111561335f5761335e613830565b5b60405190808252806020026020018201604052801561338d5781602001602082028036833780820191505090505b50905030816000815181106133a5576133a4613d66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561344a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061346e919061477e565b8160018151811061348257613481613d66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134e7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611fce565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135499594939291906148a4565b600060405180830381600087803b15801561356357600080fd5b505af1158015613577573d6000803e3d6000fd5b505050505050565b6135aa307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611fce565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613611969594939291906148fe565b60606040518083038185885af115801561362f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136549190614974565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561369557808201518184015260208101905061367a565b60008484015250505050565b6000601f19601f8301169050919050565b60006136bd8261365b565b6136c78185613666565b93506136d7818560208601613677565b6136e0816136a1565b840191505092915050565b6000602082019050818103600083015261370581846136b2565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061374c82613721565b9050919050565b61375c81613741565b811461376757600080fd5b50565b60008135905061377981613753565b92915050565b6000819050919050565b6137928161377f565b811461379d57600080fd5b50565b6000813590506137af81613789565b92915050565b600080604083850312156137cc576137cb613717565b5b60006137da8582860161376a565b92505060206137eb858286016137a0565b9150509250929050565b60008115159050919050565b61380a816137f5565b82525050565b60006020820190506138256000830184613801565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613868826136a1565b810181811067ffffffffffffffff8211171561388757613886613830565b5b80604052505050565b600061389a61370d565b90506138a6828261385f565b919050565b600067ffffffffffffffff8211156138c6576138c5613830565b5b602082029050602081019050919050565b600080fd5b60006138ef6138ea846138ab565b613890565b90508083825260208201905060208402830185811115613912576139116138d7565b5b835b8181101561393b5780613927888261376a565b845260208401935050602081019050613914565b5050509392505050565b600082601f83011261395a5761395961382b565b5b813561396a8482602086016138dc565b91505092915050565b60006020828403121561398957613988613717565b5b600082013567ffffffffffffffff8111156139a7576139a661371c565b5b6139b384828501613945565b91505092915050565b6000819050919050565b60006139e16139dc6139d784613721565b6139bc565b613721565b9050919050565b60006139f3826139c6565b9050919050565b6000613a05826139e8565b9050919050565b613a15816139fa565b82525050565b6000602082019050613a306000830184613a0c565b92915050565b613a3f8161377f565b82525050565b6000602082019050613a5a6000830184613a36565b92915050565b600060208284031215613a7657613a75613717565b5b6000613a848482850161376a565b91505092915050565b600080600060608486031215613aa657613aa5613717565b5b6000613ab48682870161376a565b9350506020613ac58682870161376a565b9250506040613ad6868287016137a0565b9150509250925092565b613ae981613741565b82525050565b6000602082019050613b046000830184613ae0565b92915050565b600060ff82169050919050565b613b2081613b0a565b82525050565b6000602082019050613b3b6000830184613b17565b92915050565b600080600060608486031215613b5a57613b59613717565b5b6000613b68868287016137a0565b9350506020613b79868287016137a0565b9250506040613b8a868287016137a0565b9150509250925092565b613b9d816137f5565b8114613ba857600080fd5b50565b600081359050613bba81613b94565b92915050565b60008060408385031215613bd757613bd6613717565b5b6000613be58582860161376a565b9250506020613bf685828601613bab565b9150509250929050565b600060208284031215613c1657613c15613717565b5b6000613c2484828501613bab565b91505092915050565b600060208284031215613c4357613c42613717565b5b6000613c51848285016137a0565b91505092915050565b60008060408385031215613c7157613c70613717565b5b6000613c7f8582860161376a565b9250506020613c908582860161376a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ce157607f821691505b602082108103613cf457613cf3613c9a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d30602083613666565b9150613d3b82613cfa565b602082019050919050565b60006020820190508181036000830152613d5f81613d23565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dcf8261377f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e0157613e00613d95565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e68602883613666565b9150613e7382613e0c565b604082019050919050565b60006020820190508181036000830152613e9781613e5b565b9050919050565b6000613ea98261377f565b9150613eb48361377f565b9250828201905080821115613ecc57613ecb613d95565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f2e603983613666565b9150613f3982613ed2565b604082019050919050565b60006020820190508181036000830152613f5d81613f21565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fc0602583613666565b9150613fcb82613f64565b604082019050919050565b60006020820190508181036000830152613fef81613fb3565b9050919050565b60006140018261377f565b915061400c8361377f565b925082820261401a8161377f565b9150828204841483151761403157614030613d95565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140728261377f565b915061407d8361377f565b92508261408d5761408c614038565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006140f4603583613666565b91506140ff82614098565b604082019050919050565b60006020820190508181036000830152614123816140e7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614186603483613666565b91506141918261412a565b604082019050919050565b600060208201905081810360008301526141b581614179565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614218602683613666565b9150614223826141bc565b604082019050919050565b600060208201905081810360008301526142478161420b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142aa602483613666565b91506142b58261424e565b604082019050919050565b600060208201905081810360008301526142d98161429d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061433c602283613666565b9150614347826142e0565b604082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006143ce602583613666565b91506143d982614372565b604082019050919050565b600060208201905081810360008301526143fd816143c1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614460602383613666565b915061446b82614404565b604082019050919050565b6000602082019050818103600083015261448f81614453565b9050919050565b7f596f7520617265206120626f7400000000000000000000000000000000000000600082015250565b60006144cc600d83613666565b91506144d782614496565b602082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614538601683613666565b915061454382614502565b602082019050919050565b600060208201905081810360008301526145678161452b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006145f0604983613666565b91506145fb8261456e565b606082019050919050565b6000602082019050818103600083015261461f816145e3565b9050919050565b60006146318261377f565b915061463c8361377f565b925082820390508181111561465457614653613d95565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006146b6602683613666565b91506146c18261465a565b604082019050919050565b600060208201905081810360008301526146e5816146a9565b9050919050565b600081905092915050565b50565b60006147076000836146ec565b9150614712826146f7565b600082019050919050565b6000614728826146fa565b9150819050919050565b60006060820190506147476000830186613a36565b6147546020830185613a36565b6147616040830184613a36565b949350505050565b60008151905061477881613753565b92915050565b60006020828403121561479457614793613717565b5b60006147a284828501614769565b91505092915050565b6000819050919050565b60006147d06147cb6147c6846147ab565b6139bc565b61377f565b9050919050565b6147e0816147b5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61481b81613741565b82525050565b600061482d8383614812565b60208301905092915050565b6000602082019050919050565b6000614851826147e6565b61485b81856147f1565b935061486683614802565b8060005b8381101561489757815161487e8882614821565b975061488983614839565b92505060018101905061486a565b5085935050505092915050565b600060a0820190506148b96000830188613a36565b6148c660208301876147d7565b81810360408301526148d88186614846565b90506148e76060830185613ae0565b6148f46080830184613a36565b9695505050505050565b600060c0820190506149136000830189613ae0565b6149206020830188613a36565b61492d60408301876147d7565b61493a60608301866147d7565b6149476080830185613ae0565b61495460a0830184613a36565b979650505050505050565b60008151905061496e81613789565b92915050565b60008060006060848603121561498d5761498c613717565b5b600061499b8682870161495f565b93505060206149ac8682870161495f565b92505060406149bd8682870161495f565b915050925092509256fea2646970667358221220477cb903ecc2cd585f7e8886d3d1183e720c482a50a0aabf9e825208fa86a0e764736f6c63430008110033

Deployed Bytecode Sourcemap

32191:14184:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9602:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11769:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43283:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32265:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10722:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39199:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33295:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33255;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12420:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32368:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10564:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13321:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32323:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32623:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39364:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33110:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32703:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10893:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2837:103;;;;;;;;;;;;;:::i;:::-;;36484:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32511:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33003;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37574:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36320:112;;;;;;;;;;;;;:::i;:::-;;2186:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32548:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43151:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33145:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37466:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9821:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38452:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33077:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33335:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33221:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14039:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11233:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38960:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33662:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32663:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38262:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37914:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32921:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36871:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32969:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11471:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32581:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36666:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33040:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3095:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33183:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9602:100;9656:13;9689:5;9682:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9602:100;:::o;11769:169::-;11852:4;11869:39;11878:12;:10;:12::i;:::-;11892:7;11901:6;11869:8;:39::i;:::-;11926:4;11919:11;;11769:169;;;;:::o;43283:203::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43367:9:::1;43362:117;43386:15;:22;43382:1;:26;43362:117;;;43463:4;43430:10;:30;43441:15;43457:1;43441:18;;;;;;;;:::i;:::-;;;;;;;;43430:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;43410:3;;;;;:::i;:::-;;;;43362:117;;;;43283:203:::0;:::o;32265:51::-;;;:::o;10722:108::-;10783:7;10810:12;;10803:19;;10722:108;:::o;39199:157::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39306:9:::1;;;;;;;;;;;39278:38;;39295:9;39278:38;;;;;;;;;;;;39339:9;39327;;:21;;;;;;;;;;;;;;;;;;39199:157:::0;:::o;33295:33::-;;;;:::o;33255:::-;;;;:::o;12420:492::-;12560:4;12577:36;12587:6;12595:9;12606:6;12577:9;:36::i;:::-;12626:24;12653:11;:19;12665:6;12653:19;;;;;;;;;;;;;;;:33;12673:12;:10;:12::i;:::-;12653:33;;;;;;;;;;;;;;;;12626:60;;12725:6;12705:16;:26;;12697:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12812:57;12821:6;12829:12;:10;:12::i;:::-;12862:6;12843:16;:25;12812:8;:57::i;:::-;12900:4;12893:11;;;12420:492;;;;;:::o;32368:53::-;32414:6;32368:53;:::o;10564:93::-;10622:5;10647:2;10640:9;;10564:93;:::o;13321:215::-;13409:4;13426:80;13435:12;:10;:12::i;:::-;13449:7;13495:10;13458:11;:25;13470:12;:10;:12::i;:::-;13458:25;;;;;;;;;;;;;;;:34;13484:7;13458:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13426:8;:80::i;:::-;13524:4;13517:11;;13321:215;;;;:::o;32323:38::-;;;:::o;32623:33::-;;;;;;;;;;;;;:::o;39364:126::-;39430:4;39454:19;:28;39474:7;39454:28;;;;;;;;;;;;;;;;;;;;;;;;;39447:35;;39364:126;;;:::o;33110:28::-;;;;:::o;32703:31::-;;;;;;;;;;;;;:::o;10893:127::-;10967:7;10994:9;:18;11004:7;10994:18;;;;;;;;;;;;;;;;10987:25;;10893:127;;;:::o;2837:103::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2902:30:::1;2929:1;2902:18;:30::i;:::-;2837:103::o:0;36484:121::-;36536:4;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36570:5:::1;36553:14;;:22;;;;;;;;;;;;;;;;;;36593:4;36586:11;;36484:121:::0;:::o;32511:30::-;;;;;;;;;;;;;:::o;33003:::-;;;;:::o;37574:332::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37742:13:::1;37724:15;:31;;;;37784:13;37766:15;:31;;;;37820:7;37808:9;:19;;;;37889:9;;37871:15;;37853;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;37838:12;:60;;;;37574:332:::0;;;:::o;36320:112::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36391:4:::1;36375:13;;:20;;;;;;;;;;;;;;;;;;36420:4;36406:11;;:18;;;;;;;;;;;;;;;;;;36320:112::o:0;2186:87::-;2232:7;2259:6;;;;;;;;;;;2252:13;;2186:87;:::o;32548:24::-;;;;;;;;;;;;;:::o;43151:123::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43253:13:::1;43231:10;:19;43242:7;43231:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;43151:123:::0;;:::o;33145:31::-;;;;:::o;37466:100::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37551:7:::1;37537:11;;:21;;;;;;;;;;;;;;;;;;37466:100:::0;:::o;9821:104::-;9877:13;9910:7;9903:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9821:104;:::o;38452:304::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38596:13:::1;38588:21;;:4;:21;;::::0;38566:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38707:41;38736:4;38742:5;38707:28;:41::i;:::-;38452:304:::0;;:::o;33077:24::-;;;;:::o;33335:27::-;;;;:::o;33221:25::-;;;;:::o;14039:413::-;14132:4;14149:24;14176:11;:25;14188:12;:10;:12::i;:::-;14176:25;;;;;;;;;;;;;;;:34;14202:7;14176:34;;;;;;;;;;;;;;;;14149:61;;14249:15;14229:16;:35;;14221:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14342:67;14351:12;:10;:12::i;:::-;14365:7;14393:15;14374:16;:34;14342:8;:67::i;:::-;14440:4;14433:11;;;14039:413;;;;:::o;11233:175::-;11319:4;11336:42;11346:12;:10;:12::i;:::-;11360:9;11371:6;11336:9;:42::i;:::-;11396:4;11389:11;;11233:175;;;;:::o;38960:231::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39120:15:::1;;;;;;;;;;;39077:59;;39100:18;39077:59;;;;;;;;;;;;39165:18;39147:15;;:36;;;;;;;;;;;;;;;;;;38960:231:::0;:::o;33662:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;32663:33::-;;;;;;;;;;;;;:::o;38262:182::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38378:8:::1;38347:19;:28;38367:7;38347:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38418:7;38402:34;;;38427:8;38402:34;;;;;;:::i;:::-;;;;;;;;38262:182:::0;;:::o;37914:340::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38084:13:::1;38065:16;:32;;;;38127:13;38108:16;:32;;;;38164:7;38151:10;:20;;;;38236:10;;38217:16;;38198;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;38182:13;:64;;;;37914:340:::0;;;:::o;32921:39::-;;;;;;;;;;;;;:::o;36871:497::-;36979:4;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37058:6:::1;37053:1;37037:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37036:28;;;;:::i;:::-;37023:9;:41;;37001:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;37213:4;37208:1;37192:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37191:26;;;;:::i;:::-;37178:9;:39;;37156:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;37329:9;37308:18;:30;;;;37356:4;37349:11;;36871:497:::0;;;:::o;32969:27::-;;;;:::o;11471:151::-;11560:7;11587:11;:18;11599:5;11587:18;;;;;;;;;;;;;;;:27;11606:7;11587:27;;;;;;;;;;;;;;;;11580:34;;11471:151;;;;:::o;32581:33::-;;;;:::o;36666:135::-;36726:4;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36766:5:::1;36743:20;;:28;;;;;;;;;;;;;;;;;;36789:4;36782:11;;36666:135:::0;:::o;33040:30::-;;;;:::o;3095:201::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3204:1:::1;3184:22;;:8;:22;;::::0;3176:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3260:28;3279:8;3260:18;:28::i;:::-;3095:201:::0;:::o;33183:31::-;;;;:::o;859:98::-;912:7;939:10;932:17;;859:98;:::o;17733:380::-;17886:1;17869:19;;:5;:19;;;17861:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17967:1;17948:21;;:7;:21;;;17940:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18051:6;18021:11;:18;18033:5;18021:18;;;;;;;;;;;;;;;:27;18040:7;18021:27;;;;;;;;;;;;;;;:36;;;;18089:7;18073:32;;18082:5;18073:32;;;18098:6;18073:32;;;;;;:::i;:::-;;;;;;;;17733:380;;;:::o;39548:3595::-;39696:1;39680:18;;:4;:18;;;39672:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39773:1;39759:16;;:2;:16;;;39751:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39835:10;:16;39846:4;39835:16;;;;;;;;;;;;;;;;;;;;;;;;;39834:17;:36;;;;;39856:10;:14;39867:2;39856:14;;;;;;;;;;;;;;;;;;;;;;;;;39855:15;39834:36;39826:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39915:1;39905:6;:11;39901:93;;39933:28;39949:4;39955:2;39959:1;39933:15;:28::i;:::-;39976:7;;39901:93;40010:14;;;;;;;;;;;40006:1292;;;40071:7;:5;:7::i;:::-;40063:15;;:4;:15;;;;:49;;;;;40105:7;:5;:7::i;:::-;40099:13;;:2;:13;;;;40063:49;:86;;;;;40147:1;40133:16;;:2;:16;;;;40063:86;:128;;;;;40184:6;40170:21;;:2;:21;;;;40063:128;:158;;;;;40213:8;;;;;;;;;;;40212:9;40063:158;40041:1246;;;40261:13;;;;;;;;;;;40256:223;;40333:19;:25;40353:4;40333:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40362:19;:23;40382:2;40362:23;;;;;;;;;;;;;;;;;;;;;;;;;40333:52;40299:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;40256:223;40635:20;;;;;;;;;;;40631:641;;;40716:7;:5;:7::i;:::-;40710:13;;:2;:13;;;;:72;;;;;40766:15;40752:30;;:2;:30;;;;40710:72;:129;;;;;40825:13;40811:28;;:2;:28;;;;40710:129;40680:573;;;41003:12;40928:28;:39;40957:9;40928:39;;;;;;;;;;;;;;;;:87;40890:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;41217:12;41175:28;:39;41204:9;41175:39;;;;;;;;;;;;;;;:54;;;;40680:573;40631:641;40041:1246;40006:1292;41310:28;41341:24;41359:4;41341:9;:24::i;:::-;41310:55;;41378:12;41417:18;;41393:20;:42;;41378:57;;41466:7;:35;;;;;41490:11;;;;;;;;;;;41466:35;:61;;;;;41519:8;;;;;;;;;;;41518:9;41466:61;:110;;;;;41545:25;:31;41571:4;41545:31;;;;;;;;;;;;;;;;;;;;;;;;;41544:32;41466:110;:153;;;;;41594:19;:25;41614:4;41594:25;;;;;;;;;;;;;;;;;;;;;;;;;41593:26;41466:153;:194;;;;;41637:19;:23;41657:2;41637:23;;;;;;;;;;;;;;;;;;;;;;;;;41636:24;41466:194;41448:326;;;41698:4;41687:8;;:15;;;;;;;;;;;;;;;;;;41719:10;:8;:10::i;:::-;41757:5;41746:8;;:16;;;;;;;;;;;;;;;;;;41448:326;41786:12;41802:8;;;;;;;;;;;41801:9;41786:24;;41912:19;:25;41932:4;41912:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41941:19;:23;41961:2;41941:23;;;;;;;;;;;;;;;;;;;;;;;;;41912:52;41908:100;;;41991:5;41981:15;;41908:100;42020:12;42125:7;42121:969;;;42177:25;:29;42203:2;42177:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;42226:1;42210:13;;:17;42177:50;42173:768;;;42255:34;42285:3;42255:25;42266:13;;42255:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42248:41;;42358:13;;42338:16;;42331:4;:23;;;;:::i;:::-;42330:41;;;;:::i;:::-;42308:18;;:63;;;;;;;:::i;:::-;;;;;;;;42428:13;;42414:10;;42407:4;:17;;;;:::i;:::-;42406:35;;;;:::i;:::-;42390:12;;:51;;;;;;;:::i;:::-;;;;;;;;42510:13;;42490:16;;42483:4;:23;;;;:::i;:::-;42482:41;;;;:::i;:::-;42460:18;;:63;;;;;;;:::i;:::-;;;;;;;;42173:768;;;42585:25;:31;42611:4;42585:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42635:1;42620:12;;:16;42585:51;42581:360;;;42664:33;42693:3;42664:24;42675:12;;42664:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42657:40;;42765:12;;42746:15;;42739:4;:22;;;;:::i;:::-;42738:39;;;;:::i;:::-;42716:18;;:61;;;;;;;:::i;:::-;;;;;;;;42833:12;;42820:9;;42813:4;:16;;;;:::i;:::-;42812:33;;;;:::i;:::-;42796:12;;:49;;;;;;;:::i;:::-;;;;;;;;42913:12;;42894:15;;42887:4;:22;;;;:::i;:::-;42886:39;;;;:::i;:::-;42864:18;;:61;;;;;;;:::i;:::-;;;;;;;;42581:360;42173:768;42968:1;42961:4;:8;42957:91;;;42990:42;43006:4;43020;43027;42990:15;:42::i;:::-;42957:91;43074:4;43064:14;;;;;:::i;:::-;;;42121:969;43102:33;43118:4;43124:2;43128:6;43102:15;:33::i;:::-;39661:3482;;;;39548:3595;;;;:::o;3456:191::-;3530:16;3549:6;;;;;;;;;;;3530:25;;3575:8;3566:6;;:17;;;;;;;;;;;;;;;;;;3630:8;3599:40;;3620:8;3599:40;;;;;;;;;;;;3519:128;3456:191;:::o;38764:188::-;38881:5;38847:25;:31;38873:4;38847:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38938:5;38904:40;;38932:4;38904:40;;;;;;;;;;;;38764:188;;:::o;14942:743::-;15100:1;15082:20;;:6;:20;;;15074:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15184:1;15163:23;;:9;:23;;;15155:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15249:47;15270:6;15278:9;15289:6;15249:20;:47::i;:::-;15309:21;15333:9;:17;15343:6;15333:17;;;;;;;;;;;;;;;;15309:41;;15386:6;15369:13;:23;;15361:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15507:6;15491:13;:22;15471:9;:17;15481:6;15471:17;;;;;;;;;;;;;;;:42;;;;15559:6;15535:9;:20;15545:9;15535:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15600:9;15583:35;;15592:6;15583:35;;;15611:6;15583:35;;;;;;:::i;:::-;;;;;;;;15631:46;15651:6;15659:9;15670:6;15631:19;:46::i;:::-;15063:622;14942:743;;;:::o;44616:1756::-;44655:23;44681:24;44699:4;44681:9;:24::i;:::-;44655:50;;44716:25;44812:12;;44778:18;;44744;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;44716:108;;44835:12;44883:1;44864:15;:20;:46;;;;44909:1;44888:17;:22;44864:46;44860:85;;;44927:7;;;;;44860:85;45000:2;44979:18;;:23;;;;:::i;:::-;44961:15;:41;44957:115;;;45058:2;45037:18;;:23;;;;:::i;:::-;45019:41;;44957:115;45133:23;45246:1;45213:17;45178:18;;45160:15;:36;;;;:::i;:::-;45159:71;;;;:::i;:::-;:88;;;;:::i;:::-;45133:114;;45258:26;45287:36;45307:15;45287;:19;;:36;;;;:::i;:::-;45258:65;;45336:25;45364:21;45336:49;;45398:36;45415:18;45398:16;:36::i;:::-;45447:18;45468:44;45494:17;45468:21;:25;;:44;;;;:::i;:::-;45447:65;;45525:23;45551:81;45604:17;45551:34;45566:18;;45551:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;45525:107;;45643:17;45663:51;45696:17;45663:28;45678:12;;45663:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;45643:71;;45727:23;45784:9;45766:15;45753:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;45727:66;;45827:1;45806:18;:22;;;;45860:1;45839:18;:22;;;;45887:1;45872:12;:16;;;;45923:9;;;;;;;;;;;45915:23;;45946:9;45915:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45901:59;;;;;45995:1;45977:15;:19;:42;;;;;46018:1;46000:15;:19;45977:42;45973:278;;;46036:46;46049:15;46066;46036:12;:46::i;:::-;46102:137;46135:18;46172:15;46206:18;;46102:137;;;;;;;;:::i;:::-;;;;;;;;45973:278;46285:15;;;;;;;;;;;46277:29;;46328:21;46277:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46263:101;;;;;44644:1728;;;;;;;;;;44616:1756;:::o;23186:98::-;23244:7;23275:1;23271;:5;;;;:::i;:::-;23264:12;;23186:98;;;;:::o;23585:::-;23643:7;23674:1;23670;:5;;;;:::i;:::-;23663:12;;23585:98;;;;:::o;18713:125::-;;;;:::o;19442:124::-;;;;:::o;22829:98::-;22887:7;22918:1;22914;:5;;;;:::i;:::-;22907:12;;22829:98;;;;:::o;43494:589::-;43620:21;43658:1;43644:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43620:40;;43689:4;43671;43676:1;43671:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43715:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43705:4;43710:1;43705:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43750:62;43767:4;43782:15;43800:11;43750:8;:62::i;:::-;43851:15;:66;;;43932:11;43958:1;44002:4;44029;44049:15;43851:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43549:534;43494:589;:::o;44091:517::-;44239:62;44256:4;44271:15;44289:11;44239:8;:62::i;:::-;44344:15;:31;;;44383:9;44416:4;44436:11;44462:1;44505;32414:6;44574:15;44344:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44091: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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:117::-;3555:1;3552;3545:12;3569:180;3617:77;3614:1;3607:88;3714:4;3711:1;3704:15;3738:4;3735:1;3728:15;3755:281;3838:27;3860:4;3838:27;:::i;:::-;3830:6;3826:40;3968:6;3956:10;3953:22;3932:18;3920:10;3917:34;3914:62;3911:88;;;3979:18;;:::i;:::-;3911:88;4019:10;4015:2;4008:22;3798:238;3755:281;;:::o;4042:129::-;4076:6;4103:20;;:::i;:::-;4093:30;;4132:33;4160:4;4152:6;4132:33;:::i;:::-;4042:129;;;:::o;4177:311::-;4254:4;4344:18;4336:6;4333:30;4330:56;;;4366:18;;:::i;:::-;4330:56;4416:4;4408:6;4404:17;4396:25;;4476:4;4470;4466:15;4458:23;;4177:311;;;:::o;4494:117::-;4603:1;4600;4593:12;4634:710;4730:5;4755:81;4771:64;4828:6;4771:64;:::i;:::-;4755:81;:::i;:::-;4746:90;;4856:5;4885:6;4878:5;4871:21;4919:4;4912:5;4908:16;4901:23;;4972:4;4964:6;4960:17;4952:6;4948:30;5001:3;4993:6;4990:15;4987:122;;;5020:79;;:::i;:::-;4987:122;5135:6;5118:220;5152:6;5147:3;5144:15;5118:220;;;5227:3;5256:37;5289:3;5277:10;5256:37;:::i;:::-;5251:3;5244:50;5323:4;5318:3;5314:14;5307:21;;5194:144;5178:4;5173:3;5169:14;5162:21;;5118:220;;;5122:21;4736:608;;4634:710;;;;;:::o;5367:370::-;5438:5;5487:3;5480:4;5472:6;5468:17;5464:27;5454:122;;5495:79;;:::i;:::-;5454:122;5612:6;5599:20;5637:94;5727:3;5719:6;5712:4;5704:6;5700:17;5637:94;:::i;:::-;5628:103;;5444:293;5367:370;;;;:::o;5743:539::-;5827:6;5876:2;5864:9;5855:7;5851:23;5847:32;5844:119;;;5882:79;;:::i;:::-;5844:119;6030:1;6019:9;6015:17;6002:31;6060:18;6052:6;6049:30;6046:117;;;6082:79;;:::i;:::-;6046:117;6187:78;6257:7;6248:6;6237:9;6233:22;6187:78;:::i;:::-;6177:88;;5973:302;5743:539;;;;:::o;6288:60::-;6316:3;6337:5;6330:12;;6288:60;;;:::o;6354:142::-;6404:9;6437:53;6455:34;6464:24;6482:5;6464:24;:::i;:::-;6455:34;:::i;:::-;6437:53;:::i;:::-;6424:66;;6354:142;;;:::o;6502:126::-;6552:9;6585:37;6616:5;6585:37;:::i;:::-;6572:50;;6502:126;;;:::o;6634:153::-;6711:9;6744:37;6775:5;6744:37;:::i;:::-;6731:50;;6634:153;;;:::o;6793:185::-;6907:64;6965:5;6907:64;:::i;:::-;6902:3;6895:77;6793:185;;:::o;6984:276::-;7104:4;7142:2;7131:9;7127:18;7119:26;;7155:98;7250:1;7239:9;7235:17;7226:6;7155:98;:::i;:::-;6984:276;;;;:::o;7266:118::-;7353:24;7371:5;7353:24;:::i;:::-;7348:3;7341:37;7266:118;;:::o;7390:222::-;7483:4;7521:2;7510:9;7506:18;7498:26;;7534:71;7602:1;7591:9;7587:17;7578:6;7534:71;:::i;:::-;7390:222;;;;:::o;7618:329::-;7677:6;7726:2;7714:9;7705:7;7701:23;7697:32;7694:119;;;7732:79;;:::i;:::-;7694:119;7852:1;7877:53;7922:7;7913:6;7902:9;7898:22;7877:53;:::i;:::-;7867:63;;7823:117;7618:329;;;;:::o;7953:619::-;8030:6;8038;8046;8095:2;8083:9;8074:7;8070:23;8066:32;8063:119;;;8101:79;;:::i;:::-;8063:119;8221:1;8246:53;8291:7;8282:6;8271:9;8267:22;8246:53;:::i;:::-;8236:63;;8192:117;8348:2;8374:53;8419:7;8410:6;8399:9;8395:22;8374:53;:::i;:::-;8364:63;;8319:118;8476:2;8502:53;8547:7;8538:6;8527:9;8523:22;8502:53;:::i;:::-;8492:63;;8447:118;7953:619;;;;;:::o;8578:118::-;8665:24;8683:5;8665:24;:::i;:::-;8660:3;8653:37;8578:118;;:::o;8702:222::-;8795:4;8833:2;8822:9;8818:18;8810:26;;8846:71;8914:1;8903:9;8899:17;8890:6;8846:71;:::i;:::-;8702:222;;;;:::o;8930:86::-;8965:7;9005:4;8998:5;8994:16;8983:27;;8930:86;;;:::o;9022:112::-;9105:22;9121:5;9105:22;:::i;:::-;9100:3;9093:35;9022:112;;:::o;9140:214::-;9229:4;9267:2;9256:9;9252:18;9244:26;;9280:67;9344:1;9333:9;9329:17;9320:6;9280:67;:::i;:::-;9140:214;;;;:::o;9360:619::-;9437:6;9445;9453;9502:2;9490:9;9481:7;9477:23;9473:32;9470:119;;;9508:79;;:::i;:::-;9470:119;9628:1;9653:53;9698:7;9689:6;9678:9;9674:22;9653:53;:::i;:::-;9643:63;;9599:117;9755:2;9781:53;9826:7;9817:6;9806:9;9802:22;9781:53;:::i;:::-;9771:63;;9726:118;9883:2;9909:53;9954:7;9945:6;9934:9;9930:22;9909:53;:::i;:::-;9899:63;;9854:118;9360:619;;;;;:::o;9985:116::-;10055:21;10070:5;10055:21;:::i;:::-;10048:5;10045:32;10035:60;;10091:1;10088;10081:12;10035:60;9985:116;:::o;10107:133::-;10150:5;10188:6;10175:20;10166:29;;10204:30;10228:5;10204:30;:::i;:::-;10107:133;;;;:::o;10246:468::-;10311:6;10319;10368:2;10356:9;10347:7;10343:23;10339:32;10336:119;;;10374:79;;:::i;:::-;10336:119;10494:1;10519:53;10564:7;10555:6;10544:9;10540:22;10519:53;:::i;:::-;10509:63;;10465:117;10621:2;10647:50;10689:7;10680:6;10669:9;10665:22;10647:50;:::i;:::-;10637:60;;10592:115;10246:468;;;;;:::o;10720:323::-;10776:6;10825:2;10813:9;10804:7;10800:23;10796:32;10793:119;;;10831:79;;:::i;:::-;10793:119;10951:1;10976:50;11018:7;11009:6;10998:9;10994:22;10976:50;:::i;:::-;10966:60;;10922:114;10720:323;;;;:::o;11049:329::-;11108:6;11157:2;11145:9;11136:7;11132:23;11128:32;11125:119;;;11163:79;;:::i;:::-;11125:119;11283:1;11308:53;11353:7;11344:6;11333:9;11329:22;11308:53;:::i;:::-;11298:63;;11254:117;11049:329;;;;:::o;11384:474::-;11452:6;11460;11509:2;11497:9;11488:7;11484:23;11480:32;11477:119;;;11515:79;;:::i;:::-;11477:119;11635:1;11660:53;11705:7;11696:6;11685:9;11681:22;11660:53;:::i;:::-;11650:63;;11606:117;11762:2;11788:53;11833:7;11824:6;11813:9;11809:22;11788:53;:::i;:::-;11778:63;;11733:118;11384:474;;;;;:::o;11864:180::-;11912:77;11909:1;11902:88;12009:4;12006:1;11999:15;12033:4;12030:1;12023:15;12050:320;12094:6;12131:1;12125:4;12121:12;12111:22;;12178:1;12172:4;12168:12;12199:18;12189:81;;12255:4;12247:6;12243:17;12233:27;;12189:81;12317:2;12309:6;12306:14;12286:18;12283:38;12280:84;;12336:18;;:::i;:::-;12280:84;12101:269;12050:320;;;:::o;12376:182::-;12516:34;12512:1;12504:6;12500:14;12493:58;12376:182;:::o;12564:366::-;12706:3;12727:67;12791:2;12786:3;12727:67;:::i;:::-;12720:74;;12803:93;12892:3;12803:93;:::i;:::-;12921:2;12916:3;12912:12;12905:19;;12564:366;;;:::o;12936:419::-;13102:4;13140:2;13129:9;13125:18;13117:26;;13189:9;13183:4;13179:20;13175:1;13164:9;13160:17;13153:47;13217:131;13343:4;13217:131;:::i;:::-;13209:139;;12936:419;;;:::o;13361:180::-;13409:77;13406:1;13399:88;13506:4;13503:1;13496:15;13530:4;13527:1;13520:15;13547:180;13595:77;13592:1;13585:88;13692:4;13689:1;13682:15;13716:4;13713:1;13706:15;13733:233;13772:3;13795:24;13813:5;13795:24;:::i;:::-;13786:33;;13841:66;13834:5;13831:77;13828:103;;13911:18;;:::i;:::-;13828:103;13958:1;13951:5;13947:13;13940:20;;13733:233;;;:::o;13972:227::-;14112:34;14108:1;14100:6;14096:14;14089:58;14181:10;14176:2;14168:6;14164:15;14157:35;13972:227;:::o;14205:366::-;14347:3;14368:67;14432:2;14427:3;14368:67;:::i;:::-;14361:74;;14444:93;14533:3;14444:93;:::i;:::-;14562:2;14557:3;14553:12;14546:19;;14205:366;;;:::o;14577:419::-;14743:4;14781:2;14770:9;14766:18;14758:26;;14830:9;14824:4;14820:20;14816:1;14805:9;14801:17;14794:47;14858:131;14984:4;14858:131;:::i;:::-;14850:139;;14577:419;;;:::o;15002:191::-;15042:3;15061:20;15079:1;15061:20;:::i;:::-;15056:25;;15095:20;15113:1;15095:20;:::i;:::-;15090:25;;15138:1;15135;15131:9;15124:16;;15159:3;15156:1;15153:10;15150:36;;;15166:18;;:::i;:::-;15150:36;15002:191;;;;:::o;15199:244::-;15339:34;15335:1;15327:6;15323:14;15316:58;15408:27;15403:2;15395:6;15391:15;15384:52;15199:244;:::o;15449:366::-;15591:3;15612:67;15676:2;15671:3;15612:67;:::i;:::-;15605:74;;15688:93;15777:3;15688:93;:::i;:::-;15806:2;15801:3;15797:12;15790:19;;15449:366;;;:::o;15821:419::-;15987:4;16025:2;16014:9;16010:18;16002:26;;16074:9;16068:4;16064:20;16060:1;16049:9;16045:17;16038:47;16102:131;16228:4;16102:131;:::i;:::-;16094:139;;15821:419;;;:::o;16246:224::-;16386:34;16382:1;16374:6;16370:14;16363:58;16455:7;16450:2;16442:6;16438:15;16431:32;16246:224;:::o;16476:366::-;16618:3;16639:67;16703:2;16698:3;16639:67;:::i;:::-;16632:74;;16715:93;16804:3;16715:93;:::i;:::-;16833:2;16828:3;16824:12;16817:19;;16476:366;;;:::o;16848:419::-;17014:4;17052:2;17041:9;17037:18;17029:26;;17101:9;17095:4;17091:20;17087:1;17076:9;17072:17;17065:47;17129:131;17255:4;17129:131;:::i;:::-;17121:139;;16848:419;;;:::o;17273:410::-;17313:7;17336:20;17354:1;17336:20;:::i;:::-;17331:25;;17370:20;17388:1;17370:20;:::i;:::-;17365:25;;17425:1;17422;17418:9;17447:30;17465:11;17447:30;:::i;:::-;17436:41;;17626:1;17617:7;17613:15;17610:1;17607:22;17587:1;17580:9;17560:83;17537:139;;17656:18;;:::i;:::-;17537:139;17321:362;17273:410;;;;:::o;17689:180::-;17737:77;17734:1;17727:88;17834:4;17831:1;17824:15;17858:4;17855:1;17848:15;17875:185;17915:1;17932:20;17950:1;17932:20;:::i;:::-;17927:25;;17966:20;17984:1;17966:20;:::i;:::-;17961:25;;18005:1;17995:35;;18010:18;;:::i;:::-;17995:35;18052:1;18049;18045:9;18040:14;;17875:185;;;;:::o;18066:240::-;18206:34;18202:1;18194:6;18190:14;18183:58;18275:23;18270:2;18262:6;18258:15;18251:48;18066:240;:::o;18312:366::-;18454:3;18475:67;18539:2;18534:3;18475:67;:::i;:::-;18468:74;;18551:93;18640:3;18551:93;:::i;:::-;18669:2;18664:3;18660:12;18653:19;;18312:366;;;:::o;18684:419::-;18850:4;18888:2;18877:9;18873:18;18865:26;;18937:9;18931:4;18927:20;18923:1;18912:9;18908:17;18901:47;18965:131;19091:4;18965:131;:::i;:::-;18957:139;;18684:419;;;:::o;19109:239::-;19249:34;19245:1;19237:6;19233:14;19226:58;19318:22;19313:2;19305:6;19301:15;19294:47;19109:239;:::o;19354:366::-;19496:3;19517:67;19581:2;19576:3;19517:67;:::i;:::-;19510:74;;19593:93;19682:3;19593:93;:::i;:::-;19711:2;19706:3;19702:12;19695:19;;19354:366;;;:::o;19726:419::-;19892:4;19930:2;19919:9;19915:18;19907:26;;19979:9;19973:4;19969:20;19965:1;19954:9;19950:17;19943:47;20007:131;20133:4;20007:131;:::i;:::-;19999:139;;19726:419;;;:::o;20151:225::-;20291:34;20287:1;20279:6;20275:14;20268:58;20360:8;20355:2;20347:6;20343:15;20336:33;20151:225;:::o;20382:366::-;20524:3;20545:67;20609:2;20604:3;20545:67;:::i;:::-;20538:74;;20621:93;20710:3;20621:93;:::i;:::-;20739:2;20734:3;20730:12;20723:19;;20382:366;;;:::o;20754:419::-;20920:4;20958:2;20947:9;20943:18;20935:26;;21007:9;21001:4;20997:20;20993:1;20982:9;20978:17;20971:47;21035:131;21161:4;21035:131;:::i;:::-;21027:139;;20754:419;;;:::o;21179:223::-;21319:34;21315:1;21307:6;21303:14;21296:58;21388:6;21383:2;21375:6;21371:15;21364:31;21179:223;:::o;21408:366::-;21550:3;21571:67;21635:2;21630:3;21571:67;:::i;:::-;21564:74;;21647:93;21736:3;21647:93;:::i;:::-;21765:2;21760:3;21756:12;21749:19;;21408:366;;;:::o;21780:419::-;21946:4;21984:2;21973:9;21969:18;21961:26;;22033:9;22027:4;22023:20;22019:1;22008:9;22004:17;21997:47;22061:131;22187:4;22061:131;:::i;:::-;22053:139;;21780:419;;;:::o;22205:221::-;22345:34;22341:1;22333:6;22329:14;22322:58;22414:4;22409:2;22401:6;22397:15;22390:29;22205:221;:::o;22432:366::-;22574:3;22595:67;22659:2;22654:3;22595:67;:::i;:::-;22588:74;;22671:93;22760:3;22671:93;:::i;:::-;22789:2;22784:3;22780:12;22773:19;;22432:366;;;:::o;22804:419::-;22970:4;23008:2;22997:9;22993:18;22985:26;;23057:9;23051:4;23047:20;23043:1;23032:9;23028:17;23021:47;23085:131;23211:4;23085:131;:::i;:::-;23077:139;;22804:419;;;:::o;23229:224::-;23369:34;23365:1;23357:6;23353:14;23346:58;23438:7;23433:2;23425:6;23421:15;23414:32;23229:224;:::o;23459:366::-;23601:3;23622:67;23686:2;23681:3;23622:67;:::i;:::-;23615:74;;23698:93;23787:3;23698:93;:::i;:::-;23816:2;23811:3;23807:12;23800:19;;23459:366;;;:::o;23831:419::-;23997:4;24035:2;24024:9;24020:18;24012:26;;24084:9;24078:4;24074:20;24070:1;24059:9;24055:17;24048:47;24112:131;24238:4;24112:131;:::i;:::-;24104:139;;23831:419;;;:::o;24256:222::-;24396:34;24392:1;24384:6;24380:14;24373:58;24465:5;24460:2;24452:6;24448:15;24441:30;24256:222;:::o;24484:366::-;24626:3;24647:67;24711:2;24706:3;24647:67;:::i;:::-;24640:74;;24723:93;24812:3;24723:93;:::i;:::-;24841:2;24836:3;24832:12;24825:19;;24484:366;;;:::o;24856:419::-;25022:4;25060:2;25049:9;25045:18;25037:26;;25109:9;25103:4;25099:20;25095:1;25084:9;25080:17;25073:47;25137:131;25263:4;25137:131;:::i;:::-;25129:139;;24856:419;;;:::o;25281:163::-;25421:15;25417:1;25409:6;25405:14;25398:39;25281:163;:::o;25450:366::-;25592:3;25613:67;25677:2;25672:3;25613:67;:::i;:::-;25606:74;;25689:93;25778:3;25689:93;:::i;:::-;25807:2;25802:3;25798:12;25791:19;;25450:366;;;:::o;25822:419::-;25988:4;26026:2;26015:9;26011:18;26003:26;;26075:9;26069:4;26065:20;26061:1;26050:9;26046:17;26039:47;26103:131;26229:4;26103:131;:::i;:::-;26095:139;;25822:419;;;:::o;26247:172::-;26387:24;26383:1;26375:6;26371:14;26364:48;26247:172;:::o;26425:366::-;26567:3;26588:67;26652:2;26647:3;26588:67;:::i;:::-;26581:74;;26664:93;26753:3;26664:93;:::i;:::-;26782:2;26777:3;26773:12;26766:19;;26425:366;;;:::o;26797:419::-;26963:4;27001:2;26990:9;26986:18;26978:26;;27050:9;27044:4;27040:20;27036:1;27025:9;27021:17;27014:47;27078:131;27204:4;27078:131;:::i;:::-;27070:139;;26797:419;;;:::o;27222:297::-;27362:34;27358:1;27350:6;27346:14;27339:58;27431:34;27426:2;27418:6;27414:15;27407:59;27500:11;27495:2;27487:6;27483:15;27476:36;27222:297;:::o;27525:366::-;27667:3;27688:67;27752:2;27747:3;27688:67;:::i;:::-;27681:74;;27764:93;27853:3;27764:93;:::i;:::-;27882:2;27877:3;27873:12;27866:19;;27525:366;;;:::o;27897:419::-;28063:4;28101:2;28090:9;28086:18;28078:26;;28150:9;28144:4;28140:20;28136:1;28125:9;28121:17;28114:47;28178:131;28304:4;28178:131;:::i;:::-;28170:139;;27897:419;;;:::o;28322:194::-;28362:4;28382:20;28400:1;28382:20;:::i;:::-;28377:25;;28416:20;28434:1;28416:20;:::i;:::-;28411:25;;28460:1;28457;28453:9;28445:17;;28484:1;28478:4;28475:11;28472:37;;;28489:18;;:::i;:::-;28472:37;28322:194;;;;:::o;28522:225::-;28662:34;28658:1;28650:6;28646:14;28639:58;28731:8;28726:2;28718:6;28714:15;28707:33;28522:225;:::o;28753:366::-;28895:3;28916:67;28980:2;28975:3;28916:67;:::i;:::-;28909:74;;28992:93;29081:3;28992:93;:::i;:::-;29110:2;29105:3;29101:12;29094:19;;28753:366;;;:::o;29125:419::-;29291:4;29329:2;29318:9;29314:18;29306:26;;29378:9;29372:4;29368:20;29364:1;29353:9;29349:17;29342:47;29406:131;29532:4;29406:131;:::i;:::-;29398:139;;29125:419;;;:::o;29550:147::-;29651:11;29688:3;29673:18;;29550:147;;;;:::o;29703:114::-;;:::o;29823:398::-;29982:3;30003:83;30084:1;30079:3;30003:83;:::i;:::-;29996:90;;30095:93;30184:3;30095:93;:::i;:::-;30213:1;30208:3;30204:11;30197:18;;29823:398;;;:::o;30227:379::-;30411:3;30433:147;30576:3;30433:147;:::i;:::-;30426:154;;30597:3;30590:10;;30227:379;;;:::o;30612:442::-;30761:4;30799:2;30788:9;30784:18;30776:26;;30812:71;30880:1;30869:9;30865:17;30856:6;30812:71;:::i;:::-;30893:72;30961:2;30950:9;30946:18;30937:6;30893:72;:::i;:::-;30975;31043:2;31032:9;31028:18;31019:6;30975:72;:::i;:::-;30612:442;;;;;;:::o;31060:143::-;31117:5;31148:6;31142:13;31133:22;;31164:33;31191:5;31164:33;:::i;:::-;31060:143;;;;:::o;31209:351::-;31279:6;31328:2;31316:9;31307:7;31303:23;31299:32;31296:119;;;31334:79;;:::i;:::-;31296:119;31454:1;31479:64;31535:7;31526:6;31515:9;31511:22;31479:64;:::i;:::-;31469:74;;31425:128;31209:351;;;;:::o;31566:85::-;31611:7;31640:5;31629:16;;31566:85;;;:::o;31657:158::-;31715:9;31748:61;31766:42;31775:32;31801:5;31775:32;:::i;:::-;31766:42;:::i;:::-;31748:61;:::i;:::-;31735:74;;31657:158;;;:::o;31821:147::-;31916:45;31955:5;31916:45;:::i;:::-;31911:3;31904:58;31821:147;;:::o;31974:114::-;32041:6;32075:5;32069:12;32059:22;;31974:114;;;:::o;32094:184::-;32193:11;32227:6;32222:3;32215:19;32267:4;32262:3;32258:14;32243:29;;32094:184;;;;:::o;32284:132::-;32351:4;32374:3;32366:11;;32404:4;32399:3;32395:14;32387:22;;32284:132;;;:::o;32422:108::-;32499:24;32517:5;32499:24;:::i;:::-;32494:3;32487:37;32422:108;;:::o;32536:179::-;32605:10;32626:46;32668:3;32660:6;32626:46;:::i;:::-;32704:4;32699:3;32695:14;32681:28;;32536:179;;;;:::o;32721:113::-;32791:4;32823;32818:3;32814:14;32806:22;;32721:113;;;:::o;32870:732::-;32989:3;33018:54;33066:5;33018:54;:::i;:::-;33088:86;33167:6;33162:3;33088:86;:::i;:::-;33081:93;;33198:56;33248:5;33198:56;:::i;:::-;33277:7;33308:1;33293:284;33318:6;33315:1;33312:13;33293:284;;;33394:6;33388:13;33421:63;33480:3;33465:13;33421:63;:::i;:::-;33414:70;;33507:60;33560:6;33507:60;:::i;:::-;33497:70;;33353:224;33340:1;33337;33333:9;33328:14;;33293:284;;;33297:14;33593:3;33586:10;;32994:608;;;32870:732;;;;:::o;33608:831::-;33871:4;33909:3;33898:9;33894:19;33886:27;;33923:71;33991:1;33980:9;33976:17;33967:6;33923:71;:::i;:::-;34004:80;34080:2;34069:9;34065:18;34056:6;34004:80;:::i;:::-;34131:9;34125:4;34121:20;34116:2;34105:9;34101:18;34094:48;34159:108;34262:4;34253:6;34159:108;:::i;:::-;34151:116;;34277:72;34345:2;34334:9;34330:18;34321:6;34277:72;:::i;:::-;34359:73;34427:3;34416:9;34412:19;34403:6;34359:73;:::i;:::-;33608:831;;;;;;;;:::o;34445:807::-;34694:4;34732:3;34721:9;34717:19;34709:27;;34746:71;34814:1;34803:9;34799:17;34790:6;34746:71;:::i;:::-;34827:72;34895:2;34884:9;34880:18;34871:6;34827:72;:::i;:::-;34909:80;34985:2;34974:9;34970:18;34961:6;34909:80;:::i;:::-;34999;35075:2;35064:9;35060:18;35051:6;34999:80;:::i;:::-;35089:73;35157:3;35146:9;35142:19;35133:6;35089:73;:::i;:::-;35172;35240:3;35229:9;35225:19;35216:6;35172:73;:::i;:::-;34445:807;;;;;;;;;:::o;35258:143::-;35315:5;35346:6;35340:13;35331:22;;35362:33;35389:5;35362:33;:::i;:::-;35258:143;;;;:::o;35407:663::-;35495:6;35503;35511;35560:2;35548:9;35539:7;35535:23;35531:32;35528:119;;;35566:79;;:::i;:::-;35528:119;35686:1;35711:64;35767:7;35758:6;35747:9;35743:22;35711:64;:::i;:::-;35701:74;;35657:128;35824:2;35850:64;35906:7;35897:6;35886:9;35882:22;35850:64;:::i;:::-;35840:74;;35795:129;35963:2;35989:64;36045:7;36036:6;36025:9;36021:22;35989:64;:::i;:::-;35979:74;;35934:129;35407:663;;;;;:::o

Swarm Source

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