ETH Price: $2,472.91 (+7.31%)

Token

QuantumHeart (QTH)
 

Overview

Max Total Supply

100,000,000 QTH

Holders

991 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,440.6 QTH

Value
$0.00
0xfAD26eb3F1815f59719Bf98be7e2763353D5dAA5
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

MetaQuantum3.0 provides customers with simple and effective ways to buy physical and digital assets.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
QTH

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-02
*/

/**
 *Submitted for verification at Etherscan.io on 2022-03-01
*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.10;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 to 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 {}
}

library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

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

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

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

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

    bool private swapping;

    address public marketingWallet;
    address public donationWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public tradingActive = true;
    bool public swapEnabled = true;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) public _totalSold;

    uint256 private allowedToSell = 150000 * 10**18;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDonationFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDonationFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDonation;
    
    /******************/

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    event BuyBackTriggered(uint256 amount);

    constructor() ERC20("QuantumHeart", "QTH") {

        address newOwner = address(msg.sender);
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDonationFee = 1;
        
        uint256 _sellMarketingFee = 1;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDonationFee = 1;
        
        uint256 totalSupply = 100000000 * 1e18;
        
        maxTransactionAmount = 10000000 * 10**18; // 1% maxTransactionAmountTxn
        swapTokensAtAmount = 50000 * 10**18; // 0.05% swap wallet
        maxWallet = 5000000 * 10**18; // 5% max wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDonationFee = _buyDonationFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDonationFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDonationFee = _sellDonationFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDonationFee;
        
    	marketingWallet = address(0x2ff923694b14Cd32AC4cA5173D70390742D61Dda ); // set as marketing wallet
    	donationWallet = address(0xEb095Dacb470391365E80050a5b7dED1679DB2Da ); // set as donation wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(donationWallet, true);
        
        excludeFromMaxTransaction(newOwner, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(donationWallet, true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {

  	}
/**
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
  */   
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateSellLimit(uint256 newNum) external onlyOwner {
        
        allowedToSell = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _buyBackFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDonationFee = _buyBackFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDonationFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _buyBackFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDonationFee = _buyBackFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDonationFee;
        require(sellTotalFees <= 15, "Must keep fees at 30% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                        require(amount + _totalSold[from] <= allowedToSell, "cant sell more than 150k QTH");
                }
                else {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        
        
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }
        
        bool takeFee = !swapping;

        // if 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;
                tokensForDonation += fees * sellDonationFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;

                _totalSold[from] = _totalSold[from] + amount;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDonation += fees * buyDonationFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDonation;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // 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 ethForBuyBack = ethBalance.mul(tokensForDonation).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForBuyBack;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDonation = 0;
        
        (bool success,) = address(marketingWallet).call{value: ethForMarketing}("");
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        // keep leftover ETH for buyback
        (success,) = address(donationWallet).call{value: address(this).balance}("");
    }
    
    // useful for buybacks or to reclaim any BNB on the contract in a way that helps holders.
    function buyBackTokens(uint256 bnbAmountInWei) external onlyOwner {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmountInWei}(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
        emit BuyBackTriggered(bnbAmountInWei);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","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":[{"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":"donationWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_totalSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"bnbAmountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDonationFee","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":"donationWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDonationFee","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":"tokensForDonation","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":[{"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":"_buyBackFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedonationWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550691fc3842bd1f071c00000600d553480156200005557600080fd5b506040518060400160405280600c81526020017f5175616e74756d486561727400000000000000000000000000000000000000008152506040518060400160405280600381526020017f51544800000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000da92919062000d4a565b508060049080519060200190620000f392919062000d4a565b5050506000620001086200066b60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060003390506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001d88160016200067360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027e919062000e64565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030c919062000e64565b6040518363ffffffff1660e01b81526004016200032b92919062000ea7565b6020604051808303816000875af11580156200034b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000371919062000e64565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003b960a05160016200067360201b60201c565b620003ce60a05160016200077060201b60201c565b60006001905060006001905060006001905060006001905060006001905060006001905060006a52b7d2dcc80cd2e400000090506a084595161401484a000000600881905550690a968163f0a57b4000006009819055506a0422ca8b0a00a425000000600a8190555086600f819055508560108190555084601181905550601154601054600f5462000461919062000f0d565b6200046d919062000f0d565b600e819055508360138190555082601481905550816015819055506015546014546013546200049d919062000f0d565b620004a9919062000f0d565b601281905550732ff923694b14cd32ac4ca5173d70390742d61dda600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073eb095dacb470391365e80050a5b7ded1679db2da600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200056c8960016200081160201b60201c565b6200057f3060016200081160201b60201c565b6200059461dead60016200081160201b60201c565b620005c9600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200081160201b60201c565b620005dc8960016200067360201b60201c565b620005ef3060016200067360201b60201c565b62000624600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200067360201b60201c565b6200063961dead60016200067360201b60201c565b6200064b89826200095e60201b60201c565b6200065c8962000b0d60201b60201c565b50505050505050505062001236565b600033905090565b620006836200066b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000715576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070c9062000fcb565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b620008216200066b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008aa9062000fcb565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200095291906200100a565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c89062001077565b60405180910390fd5b620009e56000838362000ce260201b60201c565b62000a018160025462000ce760201b620025021790919060201c565b60028190555062000a5f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ce760201b620025021790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b019190620010aa565b60405180910390a35050565b62000b1d6200066b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000baf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ba69062000fcb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000c22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c19906200113d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000cf8919062000f0d565b90508381101562000d40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d3790620011af565b60405180910390fd5b8091505092915050565b82805462000d589062001200565b90600052602060002090601f01602090048101928262000d7c576000855562000dc8565b82601f1062000d9757805160ff191683800117855562000dc8565b8280016001018555821562000dc8579182015b8281111562000dc757825182559160200191906001019062000daa565b5b50905062000dd7919062000ddb565b5090565b5b8082111562000df657600081600090555060010162000ddc565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e2c8262000dff565b9050919050565b62000e3e8162000e1f565b811462000e4a57600080fd5b50565b60008151905062000e5e8162000e33565b92915050565b60006020828403121562000e7d5762000e7c62000dfa565b5b600062000e8d8482850162000e4d565b91505092915050565b62000ea18162000e1f565b82525050565b600060408201905062000ebe600083018562000e96565b62000ecd602083018462000e96565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f1a8262000ed4565b915062000f278362000ed4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f5f5762000f5e62000ede565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fb360208362000f6a565b915062000fc08262000f7b565b602082019050919050565b6000602082019050818103600083015262000fe68162000fa4565b9050919050565b60008115159050919050565b620010048162000fed565b82525050565b600060208201905062001021600083018462000ff9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200105f601f8362000f6a565b91506200106c8262001027565b602082019050919050565b60006020820190508181036000830152620010928162001050565b9050919050565b620010a48162000ed4565b82525050565b6000602082019050620010c1600083018462001099565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200112560268362000f6a565b91506200113282620010c7565b604082019050919050565b60006020820190508181036000830152620011588162001116565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001197601b8362000f6a565b9150620011a4826200115f565b602082019050919050565b60006020820190508181036000830152620011ca8162001188565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200121957607f821691505b6020821081141562001230576200122f620011d1565b5b50919050565b60805160a051615217620012946000396000818161117101526117ef015260008181610e2d015281816123080152818161243401528181613ac401528181613ba501528181613bcc01528181613c680152613c8f01526152176000f3fe6080604052600436106102e85760003560e01c80638da5cb5b11610190578063c8c8ebe4116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610b89578063f637434214610bb2578063f8b45b0514610bdd578063fc155d1d14610c08576102ef565b8063e2f4560514610b08578063e7b94df414610b33578063f11a24d314610b5e576102ef565b8063c8c8ebe4146109e2578063d257b34f14610a0d578063d85ba06314610a4a578063d8fc65e114610a75578063dbe47fe914610aa0578063dd62ed3e14610acb576102ef565b8063a457c2d711610149578063b62496f511610123578063b62496f514610928578063bbc0c74214610965578063c024666814610990578063c17b5b8c146109b9576102ef565b8063a457c2d714610885578063a9059cbb146108c2578063aacebbe3146108ff576102ef565b80638da5cb5b1461078957806392136913146107b4578063924de9b7146107df57806395d89b41146108085780639a7a23d614610833578063a2a5802a1461085c576102ef565b8063313ce5671161024f5780636ddd1713116102085780637571336a116101e25780637571336a146106e157806375f0a8741461070a5780637bce5a04146107355780638095d56414610760576102ef565b80636ddd17131461066257806370a082311461068d578063715018a6146106ca576102ef565b8063313ce5671461053c578063395093511461056757806349bd5a5e146105a45780634fbee193146105cf578063536bcd8a1461060c5780636a486a8e14610637576102ef565b80631a8145bb116102a15780631a8145bb146104185780631f3fed8f14610443578063233817041461046e57806323b872dd1461049757806327c8f835146104d45780632e351624146104ff576102ef565b806306fdde03146102f4578063095ea7b31461031f578063106b5da11461035c57806310d5de53146103855780631694505e146103c257806318160ddd146103ed576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610c31565b6040516103169190613e3a565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190613ef5565b610cc3565b6040516103539190613f50565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190613f6b565b610ce1565b005b34801561039157600080fd5b506103ac60048036038101906103a79190613f98565b610e0b565b6040516103b99190613f50565b60405180910390f35b3480156103ce57600080fd5b506103d7610e2b565b6040516103e49190614024565b60405180910390f35b3480156103f957600080fd5b50610402610e4f565b60405161040f919061404e565b60405180910390f35b34801561042457600080fd5b5061042d610e59565b60405161043a919061404e565b60405180910390f35b34801561044f57600080fd5b50610458610e5f565b604051610465919061404e565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190613f98565b610e65565b005b3480156104a357600080fd5b506104be60048036038101906104b99190614069565b610fbc565b6040516104cb9190613f50565b60405180910390f35b3480156104e057600080fd5b506104e9611095565b6040516104f691906140cb565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190613f98565b61109b565b604051610533919061404e565b60405180910390f35b34801561054857600080fd5b506105516110b3565b60405161055e9190614102565b60405180910390f35b34801561057357600080fd5b5061058e60048036038101906105899190613ef5565b6110bc565b60405161059b9190613f50565b60405180910390f35b3480156105b057600080fd5b506105b961116f565b6040516105c691906140cb565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190613f98565b611193565b6040516106039190613f50565b60405180910390f35b34801561061857600080fd5b506106216111e9565b60405161062e919061404e565b60405180910390f35b34801561064357600080fd5b5061064c6111ef565b604051610659919061404e565b60405180910390f35b34801561066e57600080fd5b506106776111f5565b6040516106849190613f50565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190613f98565b611208565b6040516106c1919061404e565b60405180910390f35b3480156106d657600080fd5b506106df611250565b005b3480156106ed57600080fd5b5061070860048036038101906107039190614149565b6113a8565b005b34801561071657600080fd5b5061071f61149a565b60405161072c91906140cb565b60405180910390f35b34801561074157600080fd5b5061074a6114c0565b604051610757919061404e565b60405180910390f35b34801561076c57600080fd5b5061078760048036038101906107829190614189565b6114c6565b005b34801561079557600080fd5b5061079e6115e0565b6040516107ab91906140cb565b60405180910390f35b3480156107c057600080fd5b506107c961160a565b6040516107d6919061404e565b60405180910390f35b3480156107eb57600080fd5b50610806600480360381019061080191906141dc565b611610565b005b34801561081457600080fd5b5061081d6116c4565b60405161082a9190613e3a565b60405180910390f35b34801561083f57600080fd5b5061085a60048036038101906108559190614149565b611756565b005b34801561086857600080fd5b50610883600480360381019061087e9190613f6b565b61188a565b005b34801561089157600080fd5b506108ac60048036038101906108a79190613ef5565b61193e565b6040516108b99190613f50565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e49190613ef5565b611a0b565b6040516108f69190613f50565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190613f98565b611a29565b005b34801561093457600080fd5b5061094f600480360381019061094a9190613f98565b611b80565b60405161095c9190613f50565b60405180910390f35b34801561097157600080fd5b5061097a611ba0565b6040516109879190613f50565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b29190614149565b611bb3565b005b3480156109c557600080fd5b506109e060048036038101906109db9190614189565b611cf3565b005b3480156109ee57600080fd5b506109f7611e0d565b604051610a04919061404e565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f6b565b611e13565b604051610a419190613f50565b60405180910390f35b348015610a5657600080fd5b50610a5f611f83565b604051610a6c919061404e565b60405180910390f35b348015610a8157600080fd5b50610a8a611f89565b604051610a97919061404e565b60405180910390f35b348015610aac57600080fd5b50610ab5611f8f565b604051610ac2919061404e565b60405180910390f35b348015610ad757600080fd5b50610af26004803603810190610aed9190614209565b611f95565b604051610aff919061404e565b60405180910390f35b348015610b1457600080fd5b50610b1d61201c565b604051610b2a919061404e565b60405180910390f35b348015610b3f57600080fd5b50610b48612022565b604051610b5591906140cb565b60405180910390f35b348015610b6a57600080fd5b50610b73612048565b604051610b80919061404e565b60405180910390f35b348015610b9557600080fd5b50610bb06004803603810190610bab9190613f98565b61204e565b005b348015610bbe57600080fd5b50610bc7612215565b604051610bd4919061404e565b60405180910390f35b348015610be957600080fd5b50610bf261221b565b604051610bff919061404e565b60405180910390f35b348015610c1457600080fd5b50610c2f6004803603810190610c2a9190613f6b565b612221565b005b606060038054610c4090614278565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6c90614278565b8015610cb95780601f10610c8e57610100808354040283529160200191610cb9565b820191906000526020600020905b815481529060010190602001808311610c9c57829003601f168201915b5050505050905090565b6000610cd7610cd0612560565b8484612568565b6001905092915050565b610ce9612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f906142f6565b60405180910390fd5b670de0b6b3a76400006103e86005610d8e610e4f565b610d989190614345565b610da291906143ce565b610dac91906143ce565b811015610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de590614471565b60405180910390fd5b670de0b6b3a764000081610e029190614345565b60088190555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60175481565b60165481565b610e6d612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef3906142f6565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f1d41bf4c00c76809cb5e7130cd2384157e2281d2d2fce10ef79dbf3fbdd7232f60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610fc9848484612733565b61108a84610fd5612560565b6110858560405180606001604052806028815260200161519560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061103b612560565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ba9092919063ffffffff16565b612568565b600190509392505050565b61dead81565b600c6020528060005260406000206000915090505481565b60006012905090565b60006111656110c9612560565b8461116085600160006110da612560565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461250290919063ffffffff16565b612568565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b60125481565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611258612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de906142f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113b0612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611436906142f6565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6114ce612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611554906142f6565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546115859190614491565b61158f9190614491565b600e81905550600f600e5411156115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290614533565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b611618612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e906142f6565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b6060600480546116d390614278565b80601f01602080910402602001604051908101604052809291908181526020018280546116ff90614278565b801561174c5780601f106117215761010080835404028352916020019161174c565b820191906000526020600020905b81548152906001019060200180831161172f57829003601f168201915b5050505050905090565b61175e612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e4906142f6565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611873906145c5565b60405180910390fd5b611886828261331e565b5050565b611892612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611918906142f6565b60405180910390fd5b670de0b6b3a7640000816119359190614345565b600d8190555050565b6000611a0161194b612560565b846119fc856040518060600160405280602581526020016151bd6025913960016000611975612560565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ba9092919063ffffffff16565b612568565b6001905092915050565b6000611a1f611a18612560565b8484612733565b6001905092915050565b611a31612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab7906142f6565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60009054906101000a900460ff1681565b611bbb612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c41906142f6565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ce79190613f50565b60405180910390a25050565b611cfb612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d81906142f6565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354611db29190614491565b611dbc9190614491565b601281905550600f6012541115611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff90614631565b60405180910390fd5b505050565b60085481565b6000611e1d612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea3906142f6565b60405180910390fd5b620186a06001611eba610e4f565b611ec49190614345565b611ece91906143ce565b821015611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f07906146c3565b60405180910390fd5b6103e86005611f1d610e4f565b611f279190614345565b611f3191906143ce565b821115611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6a90614755565b60405180910390fd5b8160098190555060019050919050565b600e5481565b60185481565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b612056612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc906142f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906147e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b612229612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122af906142f6565b60405180910390fd5b6000600267ffffffffffffffff8111156122d5576122d4614807565b5b6040519080825280602002602001820160405280156123035781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612371573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612395919061484b565b816000815181106123a9576123a8614878565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106123f8576123f7614878565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b815260040161249594939291906149a0565b6000604051808303818588803b1580156124ae57600080fd5b505af11580156124c2573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d684820568826040516124f6919061404e565b60405180910390a15050565b60008082846125119190614491565b905083811015612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d90614a38565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cf90614aca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263f90614b5c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612726919061404e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279a90614bee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280a90614c80565b60405180910390fd5b600081141561282d57612828838360006133bf565b6132b5565b6128356115e0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128a357506128736115e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128dc5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612916575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561292f5750600560149054906101000a900460ff16155b15612d4f57600b60009054906101000a900460ff16612a2957601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129e95750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f90614cec565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612acc5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b7357600854811115612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90614d7e565b60405180910390fd5b600a54612b2283611208565b82612b2d9190614491565b1115612b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6590614dea565b60405180910390fd5b612d4e565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c165750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cf457600854811115612c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5790614e7c565b60405180910390fd5b600d54600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612cae9190614491565b1115612cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce690614ee8565b60405180910390fd5b612d4d565b600a54612d0083611208565b82612d0b9190614491565b1115612d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4390614dea565b60405180910390fd5b5b5b5b6000612d5a30611208565b905060006009548210159050808015612d7f5750600b60019054906101000a900460ff165b8015612d985750600560149054906101000a900460ff16155b8015612dee5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e445750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e9a5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ede576001600560146101000a81548160ff021916908315150217905550612ec2613654565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f945750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f9e57600090505b600081156132a557601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561300157506000601254115b1561315c5761302e60646130206012548861391190919063ffffffff16565b61398c90919063ffffffff16565b9050601254601454826130419190614345565b61304b91906143ce565b6017600082825461305c9190614491565b92505081905550601254601554826130749190614345565b61307e91906143ce565b6018600082825461308f9190614491565b92505081905550601254601354826130a79190614345565b6130b191906143ce565b601660008282546130c29190614491565b9250508190555084600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131149190614491565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613281565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b757506000600e54115b15613280576131e460646131d6600e548861391190919063ffffffff16565b61398c90919063ffffffff16565b9050600e54601054826131f79190614345565b61320191906143ce565b601760008282546132129190614491565b92505081905550600e546011548261322a9190614345565b61323491906143ce565b601860008282546132459190614491565b92505081905550600e54600f548261325d9190614345565b61326791906143ce565b601660008282546132789190614491565b925050819055505b5b6000811115613296576132958730836133bf565b5b80856132a29190614f08565b94505b6132b08787876133bf565b505050505b505050565b6000838311158290613302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f99190613e3a565b60405180910390fd5b50600083856133119190614f08565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561342f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342690614bee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561349f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349690614c80565b60405180910390fd5b6134aa8383836139d6565b6135158160405180606001604052806026815260200161516f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ba9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135a8816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461250290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613647919061404e565b60405180910390a3505050565b600061365f30611208565b905060006018546016546017546136769190614491565b6136809190614491565b905060008214806136915750600081145b1561369d57505061390f565b6000600282601754856136b09190614345565b6136ba91906143ce565b6136c491906143ce565b905060006136db82856139db90919063ffffffff16565b905060004790506136eb82613a25565b600061370082476139db90919063ffffffff16565b9050600061372b8661371d6016548561391190919063ffffffff16565b61398c90919063ffffffff16565b90506000613756876137486018548661391190919063ffffffff16565b61398c90919063ffffffff16565b905060008183856137679190614f08565b6137719190614f08565b90506000601781905550600060168190555060006018819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516137d390614f6d565b60006040518083038185875af1925050503d8060008114613810576040519150601f19603f3d011682016040523d82523d6000602084013e613815565b606091505b505090506000881180156138295750600082115b15613876576138388883613c62565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878360175460405161386d93929190614f82565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516138bc90614f6d565b60006040518083038185875af1925050503d80600081146138f9576040519150601f19603f3d011682016040523d82523d6000602084013e6138fe565b606091505b505080915050505050505050505050505b565b6000808314156139245760009050613986565b600082846139329190614345565b905082848261394191906143ce565b14613981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139789061502b565b60405180910390fd5b809150505b92915050565b60006139ce83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d3e565b905092915050565b505050565b6000613a1d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132ba565b905092915050565b6000600267ffffffffffffffff811115613a4257613a41614807565b5b604051908082528060200260200182016040528015613a705781602001602082028036833780820191505090505b5090503081600081518110613a8857613a87614878565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b51919061484b565b81600181518110613b6557613b64614878565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bca307f000000000000000000000000000000000000000000000000000000000000000084612568565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c2c95949392919061504b565b600060405180830381600087803b158015613c4657600080fd5b505af1158015613c5a573d6000803e3d6000fd5b505050505050565b613c8d307f000000000000000000000000000000000000000000000000000000000000000084612568565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613cf4969594939291906150a5565b60606040518083038185885af1158015613d12573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d37919061511b565b5050505050565b60008083118290613d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d7c9190613e3a565b60405180910390fd5b5060008385613d9491906143ce565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ddb578082015181840152602081019050613dc0565b83811115613dea576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e0c82613da1565b613e168185613dac565b9350613e26818560208601613dbd565b613e2f81613df0565b840191505092915050565b60006020820190508181036000830152613e548184613e01565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e8c82613e61565b9050919050565b613e9c81613e81565b8114613ea757600080fd5b50565b600081359050613eb981613e93565b92915050565b6000819050919050565b613ed281613ebf565b8114613edd57600080fd5b50565b600081359050613eef81613ec9565b92915050565b60008060408385031215613f0c57613f0b613e5c565b5b6000613f1a85828601613eaa565b9250506020613f2b85828601613ee0565b9150509250929050565b60008115159050919050565b613f4a81613f35565b82525050565b6000602082019050613f656000830184613f41565b92915050565b600060208284031215613f8157613f80613e5c565b5b6000613f8f84828501613ee0565b91505092915050565b600060208284031215613fae57613fad613e5c565b5b6000613fbc84828501613eaa565b91505092915050565b6000819050919050565b6000613fea613fe5613fe084613e61565b613fc5565b613e61565b9050919050565b6000613ffc82613fcf565b9050919050565b600061400e82613ff1565b9050919050565b61401e81614003565b82525050565b60006020820190506140396000830184614015565b92915050565b61404881613ebf565b82525050565b6000602082019050614063600083018461403f565b92915050565b60008060006060848603121561408257614081613e5c565b5b600061409086828701613eaa565b93505060206140a186828701613eaa565b92505060406140b286828701613ee0565b9150509250925092565b6140c581613e81565b82525050565b60006020820190506140e060008301846140bc565b92915050565b600060ff82169050919050565b6140fc816140e6565b82525050565b600060208201905061411760008301846140f3565b92915050565b61412681613f35565b811461413157600080fd5b50565b6000813590506141438161411d565b92915050565b600080604083850312156141605761415f613e5c565b5b600061416e85828601613eaa565b925050602061417f85828601614134565b9150509250929050565b6000806000606084860312156141a2576141a1613e5c565b5b60006141b086828701613ee0565b93505060206141c186828701613ee0565b92505060406141d286828701613ee0565b9150509250925092565b6000602082840312156141f2576141f1613e5c565b5b600061420084828501614134565b91505092915050565b600080604083850312156142205761421f613e5c565b5b600061422e85828601613eaa565b925050602061423f85828601613eaa565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061429057607f821691505b602082108114156142a4576142a3614249565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142e0602083613dac565b91506142eb826142aa565b602082019050919050565b6000602082019050818103600083015261430f816142d3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061435082613ebf565b915061435b83613ebf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561439457614393614316565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143d982613ebf565b91506143e483613ebf565b9250826143f4576143f361439f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b600061445b602f83613dac565b9150614466826143ff565b604082019050919050565b6000602082019050818103600083015261448a8161444e565b9050919050565b600061449c82613ebf565b91506144a783613ebf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144dc576144db614316565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061451d601d83613dac565b9150614528826144e7565b602082019050919050565b6000602082019050818103600083015261454c81614510565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006145af603983613dac565b91506145ba82614553565b604082019050919050565b600060208201905081810360008301526145de816145a2565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b600061461b601d83613dac565b9150614626826145e5565b602082019050919050565b6000602082019050818103600083015261464a8161460e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006146ad603583613dac565b91506146b882614651565b604082019050919050565b600060208201905081810360008301526146dc816146a0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061473f603483613dac565b915061474a826146e3565b604082019050919050565b6000602082019050818103600083015261476e81614732565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147d1602683613dac565b91506147dc82614775565b604082019050919050565b60006020820190508181036000830152614800816147c4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061484581613e93565b92915050565b60006020828403121561486157614860613e5c565b5b600061486f84828501614836565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006148cc6148c76148c2846148a7565b613fc5565b613ebf565b9050919050565b6148dc816148b1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61491781613e81565b82525050565b6000614929838361490e565b60208301905092915050565b6000602082019050919050565b600061494d826148e2565b61495781856148ed565b9350614962836148fe565b8060005b8381101561499357815161497a888261491d565b975061498583614935565b925050600181019050614966565b5085935050505092915050565b60006080820190506149b560008301876148d3565b81810360208301526149c78186614942565b90506149d660408301856140bc565b6149e3606083018461403f565b95945050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a22601b83613dac565b9150614a2d826149ec565b602082019050919050565b60006020820190508181036000830152614a5181614a15565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ab4602483613dac565b9150614abf82614a58565b604082019050919050565b60006020820190508181036000830152614ae381614aa7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b46602283613dac565b9150614b5182614aea565b604082019050919050565b60006020820190508181036000830152614b7581614b39565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614bd8602583613dac565b9150614be382614b7c565b604082019050919050565b60006020820190508181036000830152614c0781614bcb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c6a602383613dac565b9150614c7582614c0e565b604082019050919050565b60006020820190508181036000830152614c9981614c5d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614cd6601683613dac565b9150614ce182614ca0565b602082019050919050565b60006020820190508181036000830152614d0581614cc9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d68603583613dac565b9150614d7382614d0c565b604082019050919050565b60006020820190508181036000830152614d9781614d5b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614dd4601383613dac565b9150614ddf82614d9e565b602082019050919050565b60006020820190508181036000830152614e0381614dc7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e66603683613dac565b9150614e7182614e0a565b604082019050919050565b60006020820190508181036000830152614e9581614e59565b9050919050565b7f63616e742073656c6c206d6f7265207468616e203135306b2051544800000000600082015250565b6000614ed2601c83613dac565b9150614edd82614e9c565b602082019050919050565b60006020820190508181036000830152614f0181614ec5565b9050919050565b6000614f1382613ebf565b9150614f1e83613ebf565b925082821015614f3157614f30614316565b5b828203905092915050565b600081905092915050565b50565b6000614f57600083614f3c565b9150614f6282614f47565b600082019050919050565b6000614f7882614f4a565b9150819050919050565b6000606082019050614f97600083018661403f565b614fa4602083018561403f565b614fb1604083018461403f565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615015602183613dac565b915061502082614fb9565b604082019050919050565b6000602082019050818103600083015261504481615008565b9050919050565b600060a082019050615060600083018861403f565b61506d60208301876148d3565b818103604083015261507f8186614942565b905061508e60608301856140bc565b61509b608083018461403f565b9695505050505050565b600060c0820190506150ba60008301896140bc565b6150c7602083018861403f565b6150d460408301876148d3565b6150e160608301866148d3565b6150ee60808301856140bc565b6150fb60a083018461403f565b979650505050505050565b60008151905061511581613ec9565b92915050565b60008060006060848603121561513457615133613e5c565b5b600061514286828701615106565b935050602061515386828701615106565b925050604061516486828701615106565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220270844cb18b7741751f95dcb651df74a9731e2465dae73ddbc7fb4ee6d7aec4664736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80638da5cb5b11610190578063c8c8ebe4116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610b89578063f637434214610bb2578063f8b45b0514610bdd578063fc155d1d14610c08576102ef565b8063e2f4560514610b08578063e7b94df414610b33578063f11a24d314610b5e576102ef565b8063c8c8ebe4146109e2578063d257b34f14610a0d578063d85ba06314610a4a578063d8fc65e114610a75578063dbe47fe914610aa0578063dd62ed3e14610acb576102ef565b8063a457c2d711610149578063b62496f511610123578063b62496f514610928578063bbc0c74214610965578063c024666814610990578063c17b5b8c146109b9576102ef565b8063a457c2d714610885578063a9059cbb146108c2578063aacebbe3146108ff576102ef565b80638da5cb5b1461078957806392136913146107b4578063924de9b7146107df57806395d89b41146108085780639a7a23d614610833578063a2a5802a1461085c576102ef565b8063313ce5671161024f5780636ddd1713116102085780637571336a116101e25780637571336a146106e157806375f0a8741461070a5780637bce5a04146107355780638095d56414610760576102ef565b80636ddd17131461066257806370a082311461068d578063715018a6146106ca576102ef565b8063313ce5671461053c578063395093511461056757806349bd5a5e146105a45780634fbee193146105cf578063536bcd8a1461060c5780636a486a8e14610637576102ef565b80631a8145bb116102a15780631a8145bb146104185780631f3fed8f14610443578063233817041461046e57806323b872dd1461049757806327c8f835146104d45780632e351624146104ff576102ef565b806306fdde03146102f4578063095ea7b31461031f578063106b5da11461035c57806310d5de53146103855780631694505e146103c257806318160ddd146103ed576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610c31565b6040516103169190613e3a565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190613ef5565b610cc3565b6040516103539190613f50565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190613f6b565b610ce1565b005b34801561039157600080fd5b506103ac60048036038101906103a79190613f98565b610e0b565b6040516103b99190613f50565b60405180910390f35b3480156103ce57600080fd5b506103d7610e2b565b6040516103e49190614024565b60405180910390f35b3480156103f957600080fd5b50610402610e4f565b60405161040f919061404e565b60405180910390f35b34801561042457600080fd5b5061042d610e59565b60405161043a919061404e565b60405180910390f35b34801561044f57600080fd5b50610458610e5f565b604051610465919061404e565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190613f98565b610e65565b005b3480156104a357600080fd5b506104be60048036038101906104b99190614069565b610fbc565b6040516104cb9190613f50565b60405180910390f35b3480156104e057600080fd5b506104e9611095565b6040516104f691906140cb565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190613f98565b61109b565b604051610533919061404e565b60405180910390f35b34801561054857600080fd5b506105516110b3565b60405161055e9190614102565b60405180910390f35b34801561057357600080fd5b5061058e60048036038101906105899190613ef5565b6110bc565b60405161059b9190613f50565b60405180910390f35b3480156105b057600080fd5b506105b961116f565b6040516105c691906140cb565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190613f98565b611193565b6040516106039190613f50565b60405180910390f35b34801561061857600080fd5b506106216111e9565b60405161062e919061404e565b60405180910390f35b34801561064357600080fd5b5061064c6111ef565b604051610659919061404e565b60405180910390f35b34801561066e57600080fd5b506106776111f5565b6040516106849190613f50565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190613f98565b611208565b6040516106c1919061404e565b60405180910390f35b3480156106d657600080fd5b506106df611250565b005b3480156106ed57600080fd5b5061070860048036038101906107039190614149565b6113a8565b005b34801561071657600080fd5b5061071f61149a565b60405161072c91906140cb565b60405180910390f35b34801561074157600080fd5b5061074a6114c0565b604051610757919061404e565b60405180910390f35b34801561076c57600080fd5b5061078760048036038101906107829190614189565b6114c6565b005b34801561079557600080fd5b5061079e6115e0565b6040516107ab91906140cb565b60405180910390f35b3480156107c057600080fd5b506107c961160a565b6040516107d6919061404e565b60405180910390f35b3480156107eb57600080fd5b50610806600480360381019061080191906141dc565b611610565b005b34801561081457600080fd5b5061081d6116c4565b60405161082a9190613e3a565b60405180910390f35b34801561083f57600080fd5b5061085a60048036038101906108559190614149565b611756565b005b34801561086857600080fd5b50610883600480360381019061087e9190613f6b565b61188a565b005b34801561089157600080fd5b506108ac60048036038101906108a79190613ef5565b61193e565b6040516108b99190613f50565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e49190613ef5565b611a0b565b6040516108f69190613f50565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190613f98565b611a29565b005b34801561093457600080fd5b5061094f600480360381019061094a9190613f98565b611b80565b60405161095c9190613f50565b60405180910390f35b34801561097157600080fd5b5061097a611ba0565b6040516109879190613f50565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b29190614149565b611bb3565b005b3480156109c557600080fd5b506109e060048036038101906109db9190614189565b611cf3565b005b3480156109ee57600080fd5b506109f7611e0d565b604051610a04919061404e565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613f6b565b611e13565b604051610a419190613f50565b60405180910390f35b348015610a5657600080fd5b50610a5f611f83565b604051610a6c919061404e565b60405180910390f35b348015610a8157600080fd5b50610a8a611f89565b604051610a97919061404e565b60405180910390f35b348015610aac57600080fd5b50610ab5611f8f565b604051610ac2919061404e565b60405180910390f35b348015610ad757600080fd5b50610af26004803603810190610aed9190614209565b611f95565b604051610aff919061404e565b60405180910390f35b348015610b1457600080fd5b50610b1d61201c565b604051610b2a919061404e565b60405180910390f35b348015610b3f57600080fd5b50610b48612022565b604051610b5591906140cb565b60405180910390f35b348015610b6a57600080fd5b50610b73612048565b604051610b80919061404e565b60405180910390f35b348015610b9557600080fd5b50610bb06004803603810190610bab9190613f98565b61204e565b005b348015610bbe57600080fd5b50610bc7612215565b604051610bd4919061404e565b60405180910390f35b348015610be957600080fd5b50610bf261221b565b604051610bff919061404e565b60405180910390f35b348015610c1457600080fd5b50610c2f6004803603810190610c2a9190613f6b565b612221565b005b606060038054610c4090614278565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6c90614278565b8015610cb95780601f10610c8e57610100808354040283529160200191610cb9565b820191906000526020600020905b815481529060010190602001808311610c9c57829003601f168201915b5050505050905090565b6000610cd7610cd0612560565b8484612568565b6001905092915050565b610ce9612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f906142f6565b60405180910390fd5b670de0b6b3a76400006103e86005610d8e610e4f565b610d989190614345565b610da291906143ce565b610dac91906143ce565b811015610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de590614471565b60405180910390fd5b670de0b6b3a764000081610e029190614345565b60088190555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60175481565b60165481565b610e6d612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef3906142f6565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f1d41bf4c00c76809cb5e7130cd2384157e2281d2d2fce10ef79dbf3fbdd7232f60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610fc9848484612733565b61108a84610fd5612560565b6110858560405180606001604052806028815260200161519560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061103b612560565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ba9092919063ffffffff16565b612568565b600190509392505050565b61dead81565b600c6020528060005260406000206000915090505481565b60006012905090565b60006111656110c9612560565b8461116085600160006110da612560565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461250290919063ffffffff16565b612568565b6001905092915050565b7f000000000000000000000000264d7fd228d6f0db8538a587a86e39a65ec1939281565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b60125481565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611258612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112de906142f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113b0612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611436906142f6565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6114ce612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611554906142f6565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f546115859190614491565b61158f9190614491565b600e81905550600f600e5411156115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290614533565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b611618612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e906142f6565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b6060600480546116d390614278565b80601f01602080910402602001604051908101604052809291908181526020018280546116ff90614278565b801561174c5780601f106117215761010080835404028352916020019161174c565b820191906000526020600020905b81548152906001019060200180831161172f57829003601f168201915b5050505050905090565b61175e612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e4906142f6565b60405180910390fd5b7f000000000000000000000000264d7fd228d6f0db8538a587a86e39a65ec1939273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611873906145c5565b60405180910390fd5b611886828261331e565b5050565b611892612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611918906142f6565b60405180910390fd5b670de0b6b3a7640000816119359190614345565b600d8190555050565b6000611a0161194b612560565b846119fc856040518060600160405280602581526020016151bd6025913960016000611975612560565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ba9092919063ffffffff16565b612568565b6001905092915050565b6000611a1f611a18612560565b8484612733565b6001905092915050565b611a31612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab7906142f6565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60009054906101000a900460ff1681565b611bbb612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c41906142f6565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ce79190613f50565b60405180910390a25050565b611cfb612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d81906142f6565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354611db29190614491565b611dbc9190614491565b601281905550600f6012541115611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff90614631565b60405180910390fd5b505050565b60085481565b6000611e1d612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea3906142f6565b60405180910390fd5b620186a06001611eba610e4f565b611ec49190614345565b611ece91906143ce565b821015611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f07906146c3565b60405180910390fd5b6103e86005611f1d610e4f565b611f279190614345565b611f3191906143ce565b821115611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6a90614755565b60405180910390fd5b8160098190555060019050919050565b600e5481565b60185481565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b612056612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc906142f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906147e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b612229612560565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122af906142f6565b60405180910390fd5b6000600267ffffffffffffffff8111156122d5576122d4614807565b5b6040519080825280602002602001820160405280156123035781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612371573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612395919061484b565b816000815181106123a9576123a8614878565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106123f8576123f7614878565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b815260040161249594939291906149a0565b6000604051808303818588803b1580156124ae57600080fd5b505af11580156124c2573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d684820568826040516124f6919061404e565b60405180910390a15050565b60008082846125119190614491565b905083811015612556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254d90614a38565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cf90614aca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263f90614b5c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612726919061404e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279a90614bee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280a90614c80565b60405180910390fd5b600081141561282d57612828838360006133bf565b6132b5565b6128356115e0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128a357506128736115e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128dc5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612916575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561292f5750600560149054906101000a900460ff16155b15612d4f57600b60009054906101000a900460ff16612a2957601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129e95750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f90614cec565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612acc5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b7357600854811115612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90614d7e565b60405180910390fd5b600a54612b2283611208565b82612b2d9190614491565b1115612b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6590614dea565b60405180910390fd5b612d4e565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c165750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cf457600854811115612c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5790614e7c565b60405180910390fd5b600d54600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612cae9190614491565b1115612cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce690614ee8565b60405180910390fd5b612d4d565b600a54612d0083611208565b82612d0b9190614491565b1115612d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4390614dea565b60405180910390fd5b5b5b5b6000612d5a30611208565b905060006009548210159050808015612d7f5750600b60019054906101000a900460ff165b8015612d985750600560149054906101000a900460ff16155b8015612dee5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e445750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e9a5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ede576001600560146101000a81548160ff021916908315150217905550612ec2613654565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f945750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f9e57600090505b600081156132a557601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561300157506000601254115b1561315c5761302e60646130206012548861391190919063ffffffff16565b61398c90919063ffffffff16565b9050601254601454826130419190614345565b61304b91906143ce565b6017600082825461305c9190614491565b92505081905550601254601554826130749190614345565b61307e91906143ce565b6018600082825461308f9190614491565b92505081905550601254601354826130a79190614345565b6130b191906143ce565b601660008282546130c29190614491565b9250508190555084600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131149190614491565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613281565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b757506000600e54115b15613280576131e460646131d6600e548861391190919063ffffffff16565b61398c90919063ffffffff16565b9050600e54601054826131f79190614345565b61320191906143ce565b601760008282546132129190614491565b92505081905550600e546011548261322a9190614345565b61323491906143ce565b601860008282546132459190614491565b92505081905550600e54600f548261325d9190614345565b61326791906143ce565b601660008282546132789190614491565b925050819055505b5b6000811115613296576132958730836133bf565b5b80856132a29190614f08565b94505b6132b08787876133bf565b505050505b505050565b6000838311158290613302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f99190613e3a565b60405180910390fd5b50600083856133119190614f08565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561342f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342690614bee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561349f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349690614c80565b60405180910390fd5b6134aa8383836139d6565b6135158160405180606001604052806026815260200161516f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ba9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135a8816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461250290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613647919061404e565b60405180910390a3505050565b600061365f30611208565b905060006018546016546017546136769190614491565b6136809190614491565b905060008214806136915750600081145b1561369d57505061390f565b6000600282601754856136b09190614345565b6136ba91906143ce565b6136c491906143ce565b905060006136db82856139db90919063ffffffff16565b905060004790506136eb82613a25565b600061370082476139db90919063ffffffff16565b9050600061372b8661371d6016548561391190919063ffffffff16565b61398c90919063ffffffff16565b90506000613756876137486018548661391190919063ffffffff16565b61398c90919063ffffffff16565b905060008183856137679190614f08565b6137719190614f08565b90506000601781905550600060168190555060006018819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516137d390614f6d565b60006040518083038185875af1925050503d8060008114613810576040519150601f19603f3d011682016040523d82523d6000602084013e613815565b606091505b505090506000881180156138295750600082115b15613876576138388883613c62565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878360175460405161386d93929190614f82565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516138bc90614f6d565b60006040518083038185875af1925050503d80600081146138f9576040519150601f19603f3d011682016040523d82523d6000602084013e6138fe565b606091505b505080915050505050505050505050505b565b6000808314156139245760009050613986565b600082846139329190614345565b905082848261394191906143ce565b14613981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139789061502b565b60405180910390fd5b809150505b92915050565b60006139ce83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d3e565b905092915050565b505050565b6000613a1d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132ba565b905092915050565b6000600267ffffffffffffffff811115613a4257613a41614807565b5b604051908082528060200260200182016040528015613a705781602001602082028036833780820191505090505b5090503081600081518110613a8857613a87614878565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b51919061484b565b81600181518110613b6557613b64614878565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bca307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612568565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c2c95949392919061504b565b600060405180830381600087803b158015613c4657600080fd5b505af1158015613c5a573d6000803e3d6000fd5b505050505050565b613c8d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612568565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613cf4969594939291906150a5565b60606040518083038185885af1158015613d12573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d37919061511b565b5050505050565b60008083118290613d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d7c9190613e3a565b60405180910390fd5b5060008385613d9491906143ce565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ddb578082015181840152602081019050613dc0565b83811115613dea576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e0c82613da1565b613e168185613dac565b9350613e26818560208601613dbd565b613e2f81613df0565b840191505092915050565b60006020820190508181036000830152613e548184613e01565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e8c82613e61565b9050919050565b613e9c81613e81565b8114613ea757600080fd5b50565b600081359050613eb981613e93565b92915050565b6000819050919050565b613ed281613ebf565b8114613edd57600080fd5b50565b600081359050613eef81613ec9565b92915050565b60008060408385031215613f0c57613f0b613e5c565b5b6000613f1a85828601613eaa565b9250506020613f2b85828601613ee0565b9150509250929050565b60008115159050919050565b613f4a81613f35565b82525050565b6000602082019050613f656000830184613f41565b92915050565b600060208284031215613f8157613f80613e5c565b5b6000613f8f84828501613ee0565b91505092915050565b600060208284031215613fae57613fad613e5c565b5b6000613fbc84828501613eaa565b91505092915050565b6000819050919050565b6000613fea613fe5613fe084613e61565b613fc5565b613e61565b9050919050565b6000613ffc82613fcf565b9050919050565b600061400e82613ff1565b9050919050565b61401e81614003565b82525050565b60006020820190506140396000830184614015565b92915050565b61404881613ebf565b82525050565b6000602082019050614063600083018461403f565b92915050565b60008060006060848603121561408257614081613e5c565b5b600061409086828701613eaa565b93505060206140a186828701613eaa565b92505060406140b286828701613ee0565b9150509250925092565b6140c581613e81565b82525050565b60006020820190506140e060008301846140bc565b92915050565b600060ff82169050919050565b6140fc816140e6565b82525050565b600060208201905061411760008301846140f3565b92915050565b61412681613f35565b811461413157600080fd5b50565b6000813590506141438161411d565b92915050565b600080604083850312156141605761415f613e5c565b5b600061416e85828601613eaa565b925050602061417f85828601614134565b9150509250929050565b6000806000606084860312156141a2576141a1613e5c565b5b60006141b086828701613ee0565b93505060206141c186828701613ee0565b92505060406141d286828701613ee0565b9150509250925092565b6000602082840312156141f2576141f1613e5c565b5b600061420084828501614134565b91505092915050565b600080604083850312156142205761421f613e5c565b5b600061422e85828601613eaa565b925050602061423f85828601613eaa565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061429057607f821691505b602082108114156142a4576142a3614249565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142e0602083613dac565b91506142eb826142aa565b602082019050919050565b6000602082019050818103600083015261430f816142d3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061435082613ebf565b915061435b83613ebf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561439457614393614316565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143d982613ebf565b91506143e483613ebf565b9250826143f4576143f361439f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b600061445b602f83613dac565b9150614466826143ff565b604082019050919050565b6000602082019050818103600083015261448a8161444e565b9050919050565b600061449c82613ebf565b91506144a783613ebf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144dc576144db614316565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061451d601d83613dac565b9150614528826144e7565b602082019050919050565b6000602082019050818103600083015261454c81614510565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006145af603983613dac565b91506145ba82614553565b604082019050919050565b600060208201905081810360008301526145de816145a2565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b600061461b601d83613dac565b9150614626826145e5565b602082019050919050565b6000602082019050818103600083015261464a8161460e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006146ad603583613dac565b91506146b882614651565b604082019050919050565b600060208201905081810360008301526146dc816146a0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061473f603483613dac565b915061474a826146e3565b604082019050919050565b6000602082019050818103600083015261476e81614732565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147d1602683613dac565b91506147dc82614775565b604082019050919050565b60006020820190508181036000830152614800816147c4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061484581613e93565b92915050565b60006020828403121561486157614860613e5c565b5b600061486f84828501614836565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006148cc6148c76148c2846148a7565b613fc5565b613ebf565b9050919050565b6148dc816148b1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61491781613e81565b82525050565b6000614929838361490e565b60208301905092915050565b6000602082019050919050565b600061494d826148e2565b61495781856148ed565b9350614962836148fe565b8060005b8381101561499357815161497a888261491d565b975061498583614935565b925050600181019050614966565b5085935050505092915050565b60006080820190506149b560008301876148d3565b81810360208301526149c78186614942565b90506149d660408301856140bc565b6149e3606083018461403f565b95945050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a22601b83613dac565b9150614a2d826149ec565b602082019050919050565b60006020820190508181036000830152614a5181614a15565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ab4602483613dac565b9150614abf82614a58565b604082019050919050565b60006020820190508181036000830152614ae381614aa7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b46602283613dac565b9150614b5182614aea565b604082019050919050565b60006020820190508181036000830152614b7581614b39565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614bd8602583613dac565b9150614be382614b7c565b604082019050919050565b60006020820190508181036000830152614c0781614bcb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c6a602383613dac565b9150614c7582614c0e565b604082019050919050565b60006020820190508181036000830152614c9981614c5d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614cd6601683613dac565b9150614ce182614ca0565b602082019050919050565b60006020820190508181036000830152614d0581614cc9565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d68603583613dac565b9150614d7382614d0c565b604082019050919050565b60006020820190508181036000830152614d9781614d5b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614dd4601383613dac565b9150614ddf82614d9e565b602082019050919050565b60006020820190508181036000830152614e0381614dc7565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e66603683613dac565b9150614e7182614e0a565b604082019050919050565b60006020820190508181036000830152614e9581614e59565b9050919050565b7f63616e742073656c6c206d6f7265207468616e203135306b2051544800000000600082015250565b6000614ed2601c83613dac565b9150614edd82614e9c565b602082019050919050565b60006020820190508181036000830152614f0181614ec5565b9050919050565b6000614f1382613ebf565b9150614f1e83613ebf565b925082821015614f3157614f30614316565b5b828203905092915050565b600081905092915050565b50565b6000614f57600083614f3c565b9150614f6282614f47565b600082019050919050565b6000614f7882614f4a565b9150819050919050565b6000606082019050614f97600083018661403f565b614fa4602083018561403f565b614fb1604083018461403f565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615015602183613dac565b915061502082614fb9565b604082019050919050565b6000602082019050818103600083015261504481615008565b9050919050565b600060a082019050615060600083018861403f565b61506d60208301876148d3565b818103604083015261507f8186614942565b905061508e60608301856140bc565b61509b608083018461403f565b9695505050505050565b600060c0820190506150ba60008301896140bc565b6150c7602083018861403f565b6150d460408301876148d3565b6150e160608301866148d3565b6150ee60808301856140bc565b6150fb60a083018461403f565b979650505050505050565b60008151905061511581613ec9565b92915050565b60008060006060848603121561513457615133613e5c565b5b600061514286828701615106565b935050602061515386828701615106565b925050604061516486828701615106565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220270844cb18b7741751f95dcb651df74a9731e2465dae73ddbc7fb4ee6d7aec4664736f6c634300080a0033

Deployed Bytecode Sourcemap

29505:15271:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7661:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9828:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34913:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30785:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29578:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8781:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30559:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30519;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37304:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10479:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29681:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30105:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8623:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11243:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29636:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37495:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30476:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30365:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30006:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8952:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22126:148;;;;;;;;;;;;;:::i;:::-;;35286:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29773:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30249;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35643:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21484:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30400:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35530:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7880:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36636:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35152:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11964:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9292:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37084:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31007:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29967:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36446:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36042:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29852:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34520:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30215:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30599:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30323:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9530:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29894:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29810:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30286:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22429:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30438:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29934:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44198:575;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7661:100;7715:13;7748:5;7741:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7661:100;:::o;9828:169::-;9911:4;9928:39;9937:12;:10;:12::i;:::-;9951:7;9960:6;9928:8;:39::i;:::-;9985:4;9978:11;;9828:169;;;;:::o;34913:231::-;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35029:4:::1;35023;35019:1;35003:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35002:31;;;;:::i;:::-;34992:6;:41;;34984:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35129:6;35119;:17;;;;:::i;:::-;35096:20;:40;;;;34913:231:::0;:::o;30785:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29578:51::-;;;:::o;8781:108::-;8842:7;8869:12;;8862:19;;8781:108;:::o;30559:33::-;;;;:::o;30519:::-;;;;:::o;37304:177::-;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37421:14:::1;;;;;;;;;;;37388:48;;37410:9;37388:48;;;;;;;;;;;;37464:9;37447:14;;:26;;;;;;;;;;;;;;;;;;37304:177:::0;:::o;10479:355::-;10619:4;10636:36;10646:6;10654:9;10665:6;10636:9;:36::i;:::-;10683:121;10692:6;10700:12;:10;:12::i;:::-;10714:89;10752:6;10714:89;;;;;;;;;;;;;;;;;:11;:19;10726:6;10714:19;;;;;;;;;;;;;;;:33;10734:12;:10;:12::i;:::-;10714:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10683:8;:121::i;:::-;10822:4;10815:11;;10479:355;;;;;:::o;29681:53::-;29727:6;29681:53;:::o;30105:45::-;;;;;;;;;;;;;;;;;:::o;8623:93::-;8681:5;8706:2;8699:9;;8623:93;:::o;11243:218::-;11331:4;11348:83;11357:12;:10;:12::i;:::-;11371:7;11380:50;11419:10;11380:11;:25;11392:12;:10;:12::i;:::-;11380:25;;;;;;;;;;;;;;;:34;11406:7;11380:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11348:8;:83::i;:::-;11449:4;11442:11;;11243:218;;;;:::o;29636:38::-;;;:::o;37495:125::-;37560:4;37584:19;:28;37604:7;37584:28;;;;;;;;;;;;;;;;;;;;;;;;;37577:35;;37495:125;;;:::o;30476:30::-;;;;:::o;30365:28::-;;;;:::o;30006:30::-;;;;;;;;;;;;;:::o;8952:127::-;9026:7;9053:9;:18;9063:7;9053:18;;;;;;;;;;;;;;;;9046:25;;8952:127;;;:::o;22126:148::-;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22233:1:::1;22196:40;;22217:6;;;;;;;;;;;22196:40;;;;;;;;;;;;22264:1;22247:6;;:19;;;;;;;;;;;;;;;;;;22126:148::o:0;35286:144::-;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35418:4:::1;35376:31;:39;35408:6;35376:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35286:144:::0;;:::o;29773:30::-;;;;;;;;;;;;;:::o;30249:::-;;;;:::o;35643:387::-;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35781:13:::1;35763:15;:31;;;;35823:13;35805:15;:31;;;;35864:11;35847:14;:28;;;;35937:14;;35919:15;;35901;;:33;;;;:::i;:::-;:50;;;;:::i;:::-;35886:12;:65;;;;35986:2;35970:12;;:18;;35962:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35643:387:::0;;;:::o;21484:79::-;21522:7;21549:6;;;;;;;;;;;21542:13;;21484:79;:::o;30400:31::-;;;;:::o;35530:101::-;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35616:7:::1;35602:11;;:21;;;;;;;;;;;;;;;;;;35530:101:::0;:::o;7880:104::-;7936:13;7969:7;7962:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7880:104;:::o;36636:244::-;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36743:13:::1;36735:21;;:4;:21;;;;36727:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;36831:41;36860:4;36866:5;36831:28;:41::i;:::-;36636:244:::0;;:::o;35152:122::-;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35259:6:::1;35249;:17;;;;:::i;:::-;35233:13;:33;;;;35152:122:::0;:::o;11964:269::-;12057:4;12074:129;12083:12;:10;:12::i;:::-;12097:7;12106:96;12145:15;12106:96;;;;;;;;;;;;;;;;;:11;:25;12118:12;:10;:12::i;:::-;12106:25;;;;;;;;;;;;;;;:34;12132:7;12106:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12074:8;:129::i;:::-;12221:4;12214:11;;11964:269;;;;:::o;9292:175::-;9378:4;9395:42;9405:12;:10;:12::i;:::-;9419:9;9430:6;9395:9;:42::i;:::-;9455:4;9448:11;;9292:175;;;;:::o;37084:208::-;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37221:15:::1;;;;;;;;;;;37178:59;;37201:18;37178:59;;;;;;;;;;;;37266:18;37248:15;;:36;;;;;;;;;;;;;;;;;;37084:208:::0;:::o;31007:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29967:32::-;;;;;;;;;;;;;:::o;36446:182::-;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36562:8:::1;36531:19;:28;36551:7;36531:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36602:7;36586:34;;;36611:8;36586:34;;;;;;:::i;:::-;;;;;;;;36446:182:::0;;:::o;36042:396::-;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36182:13:::1;36163:16;:32;;;;36225:13;36206:16;:32;;;;36267:11;36249:15;:29;;;;36343:15;;36324:16;;36305;;:35;;;;:::i;:::-;:53;;;;:::i;:::-;36289:13;:69;;;;36394:2;36377:13;;:19;;36369:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36042:396:::0;;;:::o;29852:35::-;;;;:::o;34520:381::-;34601:4;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34657:6:::1;34653:1;34637:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34624:9;:39;;34616:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34772:4;34768:1;34752:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34739:9;:37;;34731:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34864:9;34843:18;:30;;;;34890:4;34883:11;;34520:381:::0;;;:::o;30215:27::-;;;;:::o;30599:32::-;;;;:::o;30323:29::-;;;;:::o;9530:151::-;9619:7;9646:11;:18;9658:5;9646:18;;;;;;;;;;;;;;;:27;9665:7;9646:27;;;;;;;;;;;;;;;;9639:34;;9530:151;;;;:::o;29894:33::-;;;;:::o;29810:29::-;;;;;;;;;;;;;:::o;30286:30::-;;;;:::o;22429:244::-;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22538:1:::1;22518:22;;:8;:22;;;;22510:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22628:8;22599:38;;22620:6;;;;;;;;;;;22599:38;;;;;;;;;;;;22657:8;22648:6;;:17;;;;;;;;;;;;;;;;;;22429:244:::0;:::o;30438:31::-;;;;:::o;29934:24::-;;;;:::o;44198:575::-;21706:12;:10;:12::i;:::-;21696:22;;:6;;;;;;;;;;;:22;;;21688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44333:21:::1;44371:1;44357:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44333:40;;44394:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44384:4;44389:1;44384:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;44445:4;44427;44432:1;44427:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;44489:15;:66;;;44563:14;44593:1;44642:4;44669:6;44691:15;44489:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;44733:32;44750:14;44733:32;;;;;;:::i;:::-;;;;;;;;44264:509;44198:575:::0;:::o;16528:181::-;16586:7;16606:9;16622:1;16618;:5;;;;:::i;:::-;16606:17;;16647:1;16642;:6;;16634:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16700:1;16693:8;;;16528:181;;;;:::o;297:98::-;350:7;377:10;370:17;;297:98;:::o;15150:380::-;15303:1;15286:19;;:5;:19;;;;15278:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15384:1;15365:21;;:7;:21;;;;15357:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15468:6;15438:11;:18;15450:5;15438:18;;;;;;;;;;;;;;;:27;15457:7;15438:27;;;;;;;;;;;;;;;:36;;;;15506:7;15490:32;;15499:5;15490:32;;;15515:6;15490:32;;;;;;:::i;:::-;;;;;;;;15150:380;;;:::o;37682:3670::-;37830:1;37814:18;;:4;:18;;;;37806:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37907:1;37893:16;;:2;:16;;;;37885:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37984:1;37974:6;:11;37971:92;;;38002:28;38018:4;38024:2;38028:1;38002:15;:28::i;:::-;38045:7;;37971:92;38107:7;:5;:7::i;:::-;38099:15;;:4;:15;;;;:49;;;;;38141:7;:5;:7::i;:::-;38135:13;;:2;:13;;;;38099:49;:86;;;;;38183:1;38169:16;;:2;:16;;;;38099:86;:128;;;;;38220:6;38206:21;;:2;:21;;;;38099:128;:158;;;;;38249:8;;;;;;;;;;;38248:9;38099:158;38077:1290;;;38295:13;;;;;;;;;;;38291:148;;38340:19;:25;38360:4;38340:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38369:19;:23;38389:2;38369:23;;;;;;;;;;;;;;;;;;;;;;;;;38340:52;38332:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38291:148;38508:25;:31;38534:4;38508:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38544:31;:35;38576:2;38544:35;;;;;;;;;;;;;;;;;;;;;;;;;38543:36;38508:71;38504:848;;;38626:20;;38616:6;:30;;38608:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;38765:9;;38748:13;38758:2;38748:9;:13::i;:::-;38739:6;:22;;;;:::i;:::-;:35;;38731:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38504:848;;;38892:25;:29;38918:2;38892:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38926:31;:37;38958:4;38926:37;;;;;;;;;;;;;;;;;;;;;;;;;38925:38;38892:71;38888:464;;;39010:20;;39000:6;:30;;38992:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39153:13;;39133:10;:16;39144:4;39133:16;;;;;;;;;;;;;;;;39124:6;:25;;;;:::i;:::-;:42;;39116:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;38888:464;;;39299:9;;39282:13;39292:2;39282:9;:13::i;:::-;39273:6;:22;;;;:::i;:::-;:35;;39265:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38888:464;38504:848;38077:1290;39401:28;39432:24;39450:4;39432:9;:24::i;:::-;39401:55;;39477:12;39516:18;;39492:20;:42;;39477:57;;39565:7;:35;;;;;39589:11;;;;;;;;;;;39565:35;:61;;;;;39618:8;;;;;;;;;;;39617:9;39565:61;:110;;;;;39644:25;:31;39670:4;39644:31;;;;;;;;;;;;;;;;;;;;;;;;;39643:32;39565:110;:153;;;;;39693:19;:25;39713:4;39693:25;;;;;;;;;;;;;;;;;;;;;;;;;39692:26;39565:153;:194;;;;;39736:19;:23;39756:2;39736:23;;;;;;;;;;;;;;;;;;;;;;;;;39735:24;39565:194;39547:338;;;39797:4;39786:8;;:15;;;;;;;;;;;;;;;;;;39830:10;:8;:10::i;:::-;39868:5;39857:8;;:16;;;;;;;;;;;;;;;;;;39547:338;39905:12;39921:8;;;;;;;;;;;39920:9;39905:24;;40030:19;:25;40050:4;40030:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40059:19;:23;40079:2;40059:23;;;;;;;;;;;;;;;;;;;;;;;;;40030:52;40027:99;;;40109:5;40099:15;;40027:99;40146:12;40250:7;40247:1052;;;40301:25;:29;40327:2;40301:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40350:1;40334:13;;:17;40301:50;40297:833;;;40378:34;40408:3;40378:25;40389:13;;40378:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40371:41;;40479:13;;40460:16;;40453:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40431:18;;:61;;;;;;;:::i;:::-;;;;;;;;40557:13;;40539:15;;40532:4;:22;;;;:::i;:::-;:38;;;;:::i;:::-;40511:17;;:59;;;;;;;:::i;:::-;;;;;;;;40637:13;;40618:16;;40611:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40589:18;;:61;;;;;;;:::i;:::-;;;;;;;;40709:6;40690:10;:16;40701:4;40690:16;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;40671:10;:16;40682:4;40671:16;;;;;;;;;;;;;;;:44;;;;40297:833;;;40776:25;:31;40802:4;40776:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40826:1;40811:12;;:16;40776:51;40773:357;;;40852:33;40881:3;40852:24;40863:12;;40852:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40845:40;;40948:12;;40930:15;;40923:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40901:18;;:59;;;;;;;:::i;:::-;;;;;;;;41024:12;;41007:14;;41000:4;:21;;;;:::i;:::-;:36;;;;:::i;:::-;40979:17;;:57;;;;;;;:::i;:::-;;;;;;;;41102:12;;41084:15;;41077:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41055:18;;:59;;;;;;;:::i;:::-;;;;;;;;40773:357;40297:833;41168:1;41161:4;:8;41158:93;;;41193:42;41209:4;41223;41230;41193:15;:42::i;:::-;41158:93;41283:4;41273:14;;;;;:::i;:::-;;;40247:1052;41311:33;41327:4;41333:2;41337:6;41311:15;:33::i;:::-;37795:3557;;;;37682:3670;;;;:::o;17431:192::-;17517:7;17550:1;17545;:6;;17553:12;17537:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17577:9;17593:1;17589;:5;;;;:::i;:::-;17577:17;;17614:1;17607:8;;;17431:192;;;;;:::o;36888:188::-;37005:5;36971:25;:31;36997:4;36971:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37062:5;37028:40;;37056:4;37028:40;;;;;;;;;;;;36888:188;;:::o;12723:573::-;12881:1;12863:20;;:6;:20;;;;12855:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12965:1;12944:23;;:9;:23;;;;12936:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13020:47;13041:6;13049:9;13060:6;13020:20;:47::i;:::-;13100:71;13122:6;13100:71;;;;;;;;;;;;;;;;;:9;:17;13110:6;13100:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13080:9;:17;13090:6;13080:17;;;;;;;;;;;;;;;:91;;;;13205:32;13230:6;13205:9;:20;13215:9;13205:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13182:9;:20;13192:9;13182:20;;;;;;;;;;;;;;;:55;;;;13270:9;13253:35;;13262:6;13253:35;;;13281:6;13253:35;;;;;;:::i;:::-;;;;;;;;12723:573;;;:::o;42510:1581::-;42549:23;42575:24;42593:4;42575:9;:24::i;:::-;42549:50;;42610:25;42680:17;;42659:18;;42638;;:39;;;;:::i;:::-;:59;;;;:::i;:::-;42610:87;;42740:1;42721:15;:20;:46;;;;42766:1;42745:17;:22;42721:46;42718:60;;;42770:7;;;;42718:60;42847:23;42932:1;42912:17;42891:18;;42873:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42847:86;;42944:26;42973:36;42993:15;42973;:19;;:36;;;;:::i;:::-;42944:65;;43030:25;43058:21;43030:49;;43092:36;43109:18;43092:16;:36::i;:::-;43150:18;43171:44;43197:17;43171:21;:25;;:44;;;;:::i;:::-;43150:65;;43236:23;43262:57;43301:17;43262:34;43277:18;;43262:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;43236:83;;43330:21;43354:56;43392:17;43354:33;43369:17;;43354:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;43330:80;;43441:23;43498:13;43480:15;43467:10;:28;;;;:::i;:::-;:44;;;;:::i;:::-;43441:70;;43563:1;43542:18;:22;;;;43596:1;43575:18;:22;;;;43628:1;43608:17;:21;;;;43651:12;43676:15;;;;;;;;;;;43668:29;;43705:15;43668:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43650:75;;;43757:1;43739:15;:19;:42;;;;;43780:1;43762:15;:19;43739:42;43736:210;;;43797:46;43810:15;43827;43797:12;:46::i;:::-;43863:71;43878:18;43898:15;43915:18;;43863:71;;;;;;;;:::i;:::-;;;;;;;;43736:210;44029:14;;;;;;;;;;;44021:28;;44057:21;44021:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44008:75;;;;;42538:1553;;;;;;;;;;42510:1581;:::o;17882:471::-;17940:7;18190:1;18185;:6;18181:47;;;18215:1;18208:8;;;;18181:47;18240:9;18256:1;18252;:5;;;;:::i;:::-;18240:17;;18285:1;18280;18276;:5;;;;:::i;:::-;:10;18268:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18344:1;18337:8;;;17882:471;;;;;:::o;18829:132::-;18887:7;18914:39;18918:1;18921;18914:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18907:46;;18829:132;;;;:::o;16133:125::-;;;;:::o;16992:136::-;17050:7;17077:43;17081:1;17084;17077:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17070:50;;16992:136;;;;:::o;41360:601::-;41488:21;41526:1;41512:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41488:40;;41557:4;41539;41544:1;41539:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41583:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41573:4;41578:1;41573:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41618:62;41635:4;41650:15;41668:11;41618:8;:62::i;:::-;41719:15;:66;;;41800:11;41826:1;41870:4;41897;41917:15;41719:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41415:546;41360:601;:::o;41985:517::-;42133:62;42150:4;42165:15;42183:11;42133:8;:62::i;:::-;42238:15;:31;;;42277:9;42310:4;42330:11;42356:1;42399;29727:6;42468:15;42238:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41985:517;;:::o;19457:278::-;19543:7;19575:1;19571;:5;19578:12;19563:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19602:9;19618:1;19614;:5;;;;:::i;:::-;19602:17;;19726:1;19719:8;;;19457:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:::-;3888:6;3937:2;3925:9;3916:7;3912:23;3908:32;3905:119;;;3943:79;;:::i;:::-;3905:119;4063:1;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4034:117;3829:329;;;;:::o;4164:60::-;4192:3;4213:5;4206:12;;4164:60;;;:::o;4230:142::-;4280:9;4313:53;4331:34;4340:24;4358:5;4340:24;:::i;:::-;4331:34;:::i;:::-;4313:53;:::i;:::-;4300:66;;4230:142;;;:::o;4378:126::-;4428:9;4461:37;4492:5;4461:37;:::i;:::-;4448:50;;4378:126;;;:::o;4510:153::-;4587:9;4620:37;4651:5;4620:37;:::i;:::-;4607:50;;4510:153;;;:::o;4669:185::-;4783:64;4841:5;4783:64;:::i;:::-;4778:3;4771:77;4669:185;;:::o;4860:276::-;4980:4;5018:2;5007:9;5003:18;4995:26;;5031:98;5126:1;5115:9;5111:17;5102:6;5031:98;:::i;:::-;4860:276;;;;:::o;5142:118::-;5229:24;5247:5;5229:24;:::i;:::-;5224:3;5217:37;5142:118;;:::o;5266:222::-;5359:4;5397:2;5386:9;5382:18;5374:26;;5410:71;5478:1;5467:9;5463:17;5454:6;5410:71;:::i;:::-;5266:222;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:305::-;12561:3;12580:20;12598:1;12580:20;:::i;:::-;12575:25;;12614:20;12632:1;12614:20;:::i;:::-;12609:25;;12768:1;12700:66;12696:74;12693:1;12690:81;12687:107;;;12774:18;;:::i;:::-;12687:107;12818:1;12815;12811:9;12804:16;;12521:305;;;;:::o;12832:179::-;12972:31;12968:1;12960:6;12956:14;12949:55;12832:179;:::o;13017:366::-;13159:3;13180:67;13244:2;13239:3;13180:67;:::i;:::-;13173:74;;13256:93;13345:3;13256:93;:::i;:::-;13374:2;13369:3;13365:12;13358:19;;13017:366;;;:::o;13389:419::-;13555:4;13593:2;13582:9;13578:18;13570:26;;13642:9;13636:4;13632:20;13628:1;13617:9;13613:17;13606:47;13670:131;13796:4;13670:131;:::i;:::-;13662:139;;13389:419;;;:::o;13814:244::-;13954:34;13950:1;13942:6;13938:14;13931:58;14023:27;14018:2;14010:6;14006:15;13999:52;13814:244;:::o;14064:366::-;14206:3;14227:67;14291:2;14286:3;14227:67;:::i;:::-;14220:74;;14303:93;14392:3;14303:93;:::i;:::-;14421:2;14416:3;14412:12;14405:19;;14064:366;;;:::o;14436:419::-;14602:4;14640:2;14629:9;14625:18;14617:26;;14689:9;14683:4;14679:20;14675:1;14664:9;14660:17;14653:47;14717:131;14843:4;14717:131;:::i;:::-;14709:139;;14436:419;;;:::o;14861:179::-;15001:31;14997:1;14989:6;14985:14;14978:55;14861:179;:::o;15046:366::-;15188:3;15209:67;15273:2;15268:3;15209:67;:::i;:::-;15202:74;;15285:93;15374:3;15285:93;:::i;:::-;15403:2;15398:3;15394:12;15387:19;;15046:366;;;:::o;15418:419::-;15584:4;15622:2;15611:9;15607:18;15599:26;;15671:9;15665:4;15661:20;15657:1;15646:9;15642:17;15635:47;15699:131;15825:4;15699:131;:::i;:::-;15691:139;;15418:419;;;:::o;15843:240::-;15983:34;15979:1;15971:6;15967:14;15960:58;16052:23;16047:2;16039:6;16035:15;16028:48;15843:240;:::o;16089:366::-;16231:3;16252:67;16316:2;16311:3;16252:67;:::i;:::-;16245:74;;16328:93;16417:3;16328:93;:::i;:::-;16446:2;16441:3;16437:12;16430:19;;16089:366;;;:::o;16461:419::-;16627:4;16665:2;16654:9;16650:18;16642:26;;16714:9;16708:4;16704:20;16700:1;16689:9;16685:17;16678:47;16742:131;16868:4;16742:131;:::i;:::-;16734:139;;16461:419;;;:::o;16886:239::-;17026:34;17022:1;17014:6;17010:14;17003:58;17095:22;17090:2;17082:6;17078:15;17071:47;16886:239;:::o;17131:366::-;17273:3;17294:67;17358:2;17353:3;17294:67;:::i;:::-;17287:74;;17370:93;17459:3;17370:93;:::i;:::-;17488:2;17483:3;17479:12;17472:19;;17131:366;;;:::o;17503:419::-;17669:4;17707:2;17696:9;17692:18;17684:26;;17756:9;17750:4;17746:20;17742:1;17731:9;17727:17;17720:47;17784:131;17910:4;17784:131;:::i;:::-;17776:139;;17503:419;;;:::o;17928:225::-;18068:34;18064:1;18056:6;18052:14;18045:58;18137:8;18132:2;18124:6;18120:15;18113:33;17928:225;:::o;18159:366::-;18301:3;18322:67;18386:2;18381:3;18322:67;:::i;:::-;18315:74;;18398:93;18487:3;18398:93;:::i;:::-;18516:2;18511:3;18507:12;18500:19;;18159:366;;;:::o;18531:419::-;18697:4;18735:2;18724:9;18720:18;18712:26;;18784:9;18778:4;18774:20;18770:1;18759:9;18755:17;18748:47;18812:131;18938:4;18812:131;:::i;:::-;18804:139;;18531:419;;;:::o;18956:180::-;19004:77;19001:1;18994:88;19101:4;19098:1;19091:15;19125:4;19122:1;19115:15;19142:143;19199:5;19230:6;19224:13;19215:22;;19246:33;19273:5;19246:33;:::i;:::-;19142:143;;;;:::o;19291:351::-;19361:6;19410:2;19398:9;19389:7;19385:23;19381:32;19378:119;;;19416:79;;:::i;:::-;19378:119;19536:1;19561:64;19617:7;19608:6;19597:9;19593:22;19561:64;:::i;:::-;19551:74;;19507:128;19291:351;;;;:::o;19648:180::-;19696:77;19693:1;19686:88;19793:4;19790:1;19783:15;19817:4;19814:1;19807:15;19834:85;19879:7;19908:5;19897:16;;19834:85;;;:::o;19925:158::-;19983:9;20016:61;20034:42;20043:32;20069:5;20043:32;:::i;:::-;20034:42;:::i;:::-;20016:61;:::i;:::-;20003:74;;19925:158;;;:::o;20089:147::-;20184:45;20223:5;20184:45;:::i;:::-;20179:3;20172:58;20089:147;;:::o;20242:114::-;20309:6;20343:5;20337:12;20327:22;;20242:114;;;:::o;20362:184::-;20461:11;20495:6;20490:3;20483:19;20535:4;20530:3;20526:14;20511:29;;20362:184;;;;:::o;20552:132::-;20619:4;20642:3;20634:11;;20672:4;20667:3;20663:14;20655:22;;20552:132;;;:::o;20690:108::-;20767:24;20785:5;20767:24;:::i;:::-;20762:3;20755:37;20690:108;;:::o;20804:179::-;20873:10;20894:46;20936:3;20928:6;20894:46;:::i;:::-;20972:4;20967:3;20963:14;20949:28;;20804:179;;;;:::o;20989:113::-;21059:4;21091;21086:3;21082:14;21074:22;;20989:113;;;:::o;21138:732::-;21257:3;21286:54;21334:5;21286:54;:::i;:::-;21356:86;21435:6;21430:3;21356:86;:::i;:::-;21349:93;;21466:56;21516:5;21466:56;:::i;:::-;21545:7;21576:1;21561:284;21586:6;21583:1;21580:13;21561:284;;;21662:6;21656:13;21689:63;21748:3;21733:13;21689:63;:::i;:::-;21682:70;;21775:60;21828:6;21775:60;:::i;:::-;21765:70;;21621:224;21608:1;21605;21601:9;21596:14;;21561:284;;;21565:14;21861:3;21854:10;;21262:608;;;21138:732;;;;:::o;21876:720::-;22111:4;22149:3;22138:9;22134:19;22126:27;;22163:79;22239:1;22228:9;22224:17;22215:6;22163:79;:::i;:::-;22289:9;22283:4;22279:20;22274:2;22263:9;22259:18;22252:48;22317:108;22420:4;22411:6;22317:108;:::i;:::-;22309:116;;22435:72;22503:2;22492:9;22488:18;22479:6;22435:72;:::i;:::-;22517;22585:2;22574:9;22570:18;22561:6;22517:72;:::i;:::-;21876:720;;;;;;;:::o;22602:177::-;22742:29;22738:1;22730:6;22726:14;22719:53;22602:177;:::o;22785:366::-;22927:3;22948:67;23012:2;23007:3;22948:67;:::i;:::-;22941:74;;23024:93;23113:3;23024:93;:::i;:::-;23142:2;23137:3;23133:12;23126:19;;22785:366;;;:::o;23157:419::-;23323:4;23361:2;23350:9;23346:18;23338:26;;23410:9;23404:4;23400:20;23396:1;23385:9;23381:17;23374:47;23438:131;23564:4;23438:131;:::i;:::-;23430:139;;23157:419;;;:::o;23582:223::-;23722:34;23718:1;23710:6;23706:14;23699:58;23791:6;23786:2;23778:6;23774:15;23767:31;23582:223;:::o;23811:366::-;23953:3;23974:67;24038:2;24033:3;23974:67;:::i;:::-;23967:74;;24050:93;24139:3;24050:93;:::i;:::-;24168:2;24163:3;24159:12;24152:19;;23811:366;;;:::o;24183:419::-;24349:4;24387:2;24376:9;24372:18;24364:26;;24436:9;24430:4;24426:20;24422:1;24411:9;24407:17;24400:47;24464:131;24590:4;24464:131;:::i;:::-;24456:139;;24183:419;;;:::o;24608:221::-;24748:34;24744:1;24736:6;24732:14;24725:58;24817:4;24812:2;24804:6;24800:15;24793:29;24608:221;:::o;24835:366::-;24977:3;24998:67;25062:2;25057:3;24998:67;:::i;:::-;24991:74;;25074:93;25163:3;25074:93;:::i;:::-;25192:2;25187:3;25183:12;25176:19;;24835:366;;;:::o;25207:419::-;25373:4;25411:2;25400:9;25396:18;25388:26;;25460:9;25454:4;25450:20;25446:1;25435:9;25431:17;25424:47;25488:131;25614:4;25488:131;:::i;:::-;25480:139;;25207:419;;;:::o;25632:224::-;25772:34;25768:1;25760:6;25756:14;25749:58;25841:7;25836:2;25828:6;25824:15;25817:32;25632:224;:::o;25862:366::-;26004:3;26025:67;26089:2;26084:3;26025:67;:::i;:::-;26018:74;;26101:93;26190:3;26101:93;:::i;:::-;26219:2;26214:3;26210:12;26203:19;;25862:366;;;:::o;26234:419::-;26400:4;26438:2;26427:9;26423:18;26415:26;;26487:9;26481:4;26477:20;26473:1;26462:9;26458:17;26451:47;26515:131;26641:4;26515:131;:::i;:::-;26507:139;;26234:419;;;:::o;26659:222::-;26799:34;26795:1;26787:6;26783:14;26776:58;26868:5;26863:2;26855:6;26851:15;26844:30;26659:222;:::o;26887:366::-;27029:3;27050:67;27114:2;27109:3;27050:67;:::i;:::-;27043:74;;27126:93;27215:3;27126:93;:::i;:::-;27244:2;27239:3;27235:12;27228:19;;26887:366;;;:::o;27259:419::-;27425:4;27463:2;27452:9;27448:18;27440:26;;27512:9;27506:4;27502:20;27498:1;27487:9;27483:17;27476:47;27540:131;27666:4;27540:131;:::i;:::-;27532:139;;27259:419;;;:::o;27684:172::-;27824:24;27820:1;27812:6;27808:14;27801:48;27684:172;:::o;27862:366::-;28004:3;28025:67;28089:2;28084:3;28025:67;:::i;:::-;28018:74;;28101:93;28190:3;28101:93;:::i;:::-;28219:2;28214:3;28210:12;28203:19;;27862:366;;;:::o;28234:419::-;28400:4;28438:2;28427:9;28423:18;28415:26;;28487:9;28481:4;28477:20;28473:1;28462:9;28458:17;28451:47;28515:131;28641:4;28515:131;:::i;:::-;28507:139;;28234:419;;;:::o;28659:240::-;28799:34;28795:1;28787:6;28783:14;28776:58;28868:23;28863:2;28855:6;28851:15;28844:48;28659:240;:::o;28905:366::-;29047:3;29068:67;29132:2;29127:3;29068:67;:::i;:::-;29061:74;;29144:93;29233:3;29144:93;:::i;:::-;29262:2;29257:3;29253:12;29246:19;;28905:366;;;:::o;29277:419::-;29443:4;29481:2;29470:9;29466:18;29458:26;;29530:9;29524:4;29520:20;29516:1;29505:9;29501:17;29494:47;29558:131;29684:4;29558:131;:::i;:::-;29550:139;;29277:419;;;:::o;29702:169::-;29842:21;29838:1;29830:6;29826:14;29819:45;29702:169;:::o;29877:366::-;30019:3;30040:67;30104:2;30099:3;30040:67;:::i;:::-;30033:74;;30116:93;30205:3;30116:93;:::i;:::-;30234:2;30229:3;30225:12;30218:19;;29877:366;;;:::o;30249:419::-;30415:4;30453:2;30442:9;30438:18;30430:26;;30502:9;30496:4;30492:20;30488:1;30477:9;30473:17;30466:47;30530:131;30656:4;30530:131;:::i;:::-;30522:139;;30249:419;;;:::o;30674:241::-;30814:34;30810:1;30802:6;30798:14;30791:58;30883:24;30878:2;30870:6;30866:15;30859:49;30674:241;:::o;30921:366::-;31063:3;31084:67;31148:2;31143:3;31084:67;:::i;:::-;31077:74;;31160:93;31249:3;31160:93;:::i;:::-;31278:2;31273:3;31269:12;31262:19;;30921:366;;;:::o;31293:419::-;31459:4;31497:2;31486:9;31482:18;31474:26;;31546:9;31540:4;31536:20;31532:1;31521:9;31517:17;31510:47;31574:131;31700:4;31574:131;:::i;:::-;31566:139;;31293:419;;;:::o;31718:178::-;31858:30;31854:1;31846:6;31842:14;31835:54;31718:178;:::o;31902:366::-;32044:3;32065:67;32129:2;32124:3;32065:67;:::i;:::-;32058:74;;32141:93;32230:3;32141:93;:::i;:::-;32259:2;32254:3;32250:12;32243:19;;31902:366;;;:::o;32274:419::-;32440:4;32478:2;32467:9;32463:18;32455:26;;32527:9;32521:4;32517:20;32513:1;32502:9;32498:17;32491:47;32555:131;32681:4;32555:131;:::i;:::-;32547:139;;32274:419;;;:::o;32699:191::-;32739:4;32759:20;32777:1;32759:20;:::i;:::-;32754:25;;32793:20;32811:1;32793:20;:::i;:::-;32788:25;;32832:1;32829;32826:8;32823:34;;;32837:18;;:::i;:::-;32823:34;32882:1;32879;32875:9;32867:17;;32699:191;;;;:::o;32896:147::-;32997:11;33034:3;33019:18;;32896:147;;;;:::o;33049:114::-;;:::o;33169:398::-;33328:3;33349:83;33430:1;33425:3;33349:83;:::i;:::-;33342:90;;33441:93;33530:3;33441:93;:::i;:::-;33559:1;33554:3;33550:11;33543:18;;33169:398;;;:::o;33573:379::-;33757:3;33779:147;33922:3;33779:147;:::i;:::-;33772:154;;33943:3;33936:10;;33573:379;;;:::o;33958:442::-;34107:4;34145:2;34134:9;34130:18;34122:26;;34158:71;34226:1;34215:9;34211:17;34202:6;34158:71;:::i;:::-;34239:72;34307:2;34296:9;34292:18;34283:6;34239:72;:::i;:::-;34321;34389:2;34378:9;34374:18;34365:6;34321:72;:::i;:::-;33958:442;;;;;;:::o;34406:220::-;34546:34;34542:1;34534:6;34530:14;34523:58;34615:3;34610:2;34602:6;34598:15;34591:28;34406:220;:::o;34632:366::-;34774:3;34795:67;34859:2;34854:3;34795:67;:::i;:::-;34788:74;;34871:93;34960:3;34871:93;:::i;:::-;34989:2;34984:3;34980:12;34973:19;;34632:366;;;:::o;35004:419::-;35170:4;35208:2;35197:9;35193:18;35185:26;;35257:9;35251:4;35247:20;35243:1;35232:9;35228:17;35221:47;35285:131;35411:4;35285:131;:::i;:::-;35277:139;;35004:419;;;:::o;35429:831::-;35692:4;35730:3;35719:9;35715:19;35707:27;;35744:71;35812:1;35801:9;35797:17;35788:6;35744:71;:::i;:::-;35825:80;35901:2;35890:9;35886:18;35877:6;35825:80;:::i;:::-;35952:9;35946:4;35942:20;35937:2;35926:9;35922:18;35915:48;35980:108;36083:4;36074:6;35980:108;:::i;:::-;35972:116;;36098:72;36166:2;36155:9;36151:18;36142:6;36098:72;:::i;:::-;36180:73;36248:3;36237:9;36233:19;36224:6;36180:73;:::i;:::-;35429:831;;;;;;;;:::o;36266:807::-;36515:4;36553:3;36542:9;36538:19;36530:27;;36567:71;36635:1;36624:9;36620:17;36611:6;36567:71;:::i;:::-;36648:72;36716:2;36705:9;36701:18;36692:6;36648:72;:::i;:::-;36730:80;36806:2;36795:9;36791:18;36782:6;36730:80;:::i;:::-;36820;36896:2;36885:9;36881:18;36872:6;36820:80;:::i;:::-;36910:73;36978:3;36967:9;36963:19;36954:6;36910:73;:::i;:::-;36993;37061:3;37050:9;37046:19;37037:6;36993:73;:::i;:::-;36266:807;;;;;;;;;:::o;37079:143::-;37136:5;37167:6;37161:13;37152:22;;37183:33;37210:5;37183:33;:::i;:::-;37079:143;;;;:::o;37228:663::-;37316:6;37324;37332;37381:2;37369:9;37360:7;37356:23;37352:32;37349:119;;;37387:79;;:::i;:::-;37349:119;37507:1;37532:64;37588:7;37579:6;37568:9;37564:22;37532:64;:::i;:::-;37522:74;;37478:128;37645:2;37671:64;37727:7;37718:6;37707:9;37703:22;37671:64;:::i;:::-;37661:74;;37616:129;37784:2;37810:64;37866:7;37857:6;37846:9;37842:22;37810:64;:::i;:::-;37800:74;;37755:129;37228:663;;;;;:::o

Swarm Source

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