ETH Price: $3,705.54 (+4.03%)

Token

ERC-20: HOURS (HOURS)
 

Overview

Max Total Supply

1,000,000,000 HOURS

Holders

10

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
6,242,449.23 HOURS

Value
$0.00
0x49a7ebd400fb6ab8f59a56375c03d7e9cff059ff
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
HOURS

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-20
*/

/**
db   db  .d88b.  db    db d8888b. .d8888.      
88   88 .8P  Y8. 88    88 88  `8D 88'  YP      
88ooo88 88    88 88    88 88oobY' `8bo.        
88~~~88 88    88 88    88 88`8b     `Y8b.      
88   88 `8b  d8' 88b  d88 88 `88. db   8D      
YP   YP  `Y88P'  ~Y8888P' 88   YD `8888Y'      
                                          
*/

// SPDX-License-Identifier: Unlicensed


pragma solidity 0.8.16;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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



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

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such an operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 *
 * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing
 * all math on `uint256` and `int256` and then downcasting.
 */
library SafeCast {
    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     *
     * Counterpart to Solidity's `uint224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     *
     * Counterpart to Solidity's `uint96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     * greater than largest int128).
     *
     * Counterpart to Solidity's `int128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     *
     * _Available since v3.1._
     */
    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     * greater than largest int64).
     *
     * Counterpart to Solidity's `int64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     *
     * _Available since v3.1._
     */
    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     * greater than largest int32).
     *
     * Counterpart to Solidity's `int32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     *
     * _Available since v3.1._
     */
    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     * greater than largest int16).
     *
     * Counterpart to Solidity's `int16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     *
     * _Available since v3.1._
     */
    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     * greater than largest int8).
     *
     * Counterpart to Solidity's `int8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     *
     * _Available since v3.1._
     */
    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}


contract LockToken is Ownable {
    bool public isOpen = false;
    mapping(address => bool) private _whiteList;
    modifier open(address from, address to) {
        require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
        _;
    }

    constructor() {
        _whiteList[msg.sender] = true;
        _whiteList[address(this)] = true;
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function includeToWhiteList(address[] memory _users) external onlyOwner {
        for(uint8 i = 0; i < _users.length; i++) {
            _whiteList[_users[i]] = true;
        }
    }
}


contract HOURS is ERC20, Ownable, LockToken {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private inSwapAndLiquify;
    bool public buyBackEnabled = true;

    bool public swapAndLiquifyEnabled = true;
    
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;

    uint256 public maxSellTransactionAmount = 7500000 * (10**9);
    uint256 public maxBuyTransactionAmount = 7500000 * (10**9);
    uint256 public swapTokensAtAmount = 30000 * (10**9);
    
    uint256 private buyBackUpperLimit = 1 * 10**17; // equal to 0.1 bnb
    uint256 private _buyBackDivisor = 20;
   
    uint256 public liquidityBuyFee = 1;
    uint256 public buyBackBuyFee = 1;
    uint256 public marketingBuyFee = 1;
    uint256 public communityBuyFee = 1;
    uint256 public operationsBuyFee = 1;
    uint256 public devBuyFee = 2;
    uint256 public totalBuyFees = 7;

    uint256 public liquiditySellFee = 1;
    uint256 public buyBackSellFee = 1;
    uint256 public marketingSellFee = 1;
    uint256 public communitySellFee = 1;
    uint256 public operationsSellFee = 1;
    uint256 public devSellFee = 1;
    uint256 public totalSellFees = 6;
 
    address payable private marketingWallet = payable(0x975A16a73daea0549c863451d7F2Edd01Cae6f91);
    address payable private communityWallet = payable(0x337dc2cB1AC95eff400C2C31BBadE234F9420efD);
    address payable private operationsWallet = payable(0x4A4226e5642c81c739a97591f06D1bee1dEfE7d9);
    address payable private devWallet = payable(0xA79357A68E07c57446e28bd25De14912A2EF3c09);

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

    // 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 BuyBackEnabledUpdated(bool enabled);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapEthForTokens(uint256 amountIn, address[] path);
    event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

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

    constructor() ERC20("HOURS", "HOURS") {
    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(communityWallet, true);
        excludeFromFees(operationsWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(address(this), true);
        
        // exclude from max tx
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[marketingWallet] = true;
        _isExcludedFromMaxTx[communityWallet] = true;
        _isExcludedFromMaxTx[operationsWallet] = true;
        _isExcludedFromMaxTx[devWallet] = true;
        
        /*
            internal function  that is only called here,
            and CANNOT be called ever again
        */
        _createTokens(owner(), 1000000000 * (10**9));
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) open(from, to) 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(automatedMarketMakerPairs[from] && (!_isExcludedFromMaxTx[from]) && (!_isExcludedFromMaxTx[to])){
            require(amount <= maxBuyTransactionAmount, "amount exceeds the maxBuyTransactionAmount.");
        }

        if(automatedMarketMakerPairs[to] && (!_isExcludedFromMaxTx[from]) && (!_isExcludedFromMaxTx[to])){
            require(amount <= maxSellTransactionAmount, "amount exceeds the maxSellTransactionAmount.");
        }
        

    	uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
       
        if(!inSwapAndLiquify && automatedMarketMakerPairs[to] && swapAndLiquifyEnabled) {
            if(overMinTokenBalance) {
                contractTokenBalance = swapTokensAtAmount;
                swapAndLiquify(contractTokenBalance);
            }
            
            uint256 balance = address(this).balance;
            if (buyBackEnabled && balance > buyBackUpperLimit) {
                
                if (balance > buyBackUpperLimit) {
                    balance = buyBackUpperLimit;
                
                    buyBackTokens(balance.div(_buyBackDivisor));
                }
            }
        }

         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 fees = amount.mul(totalBuyFees).div(100);
            if(automatedMarketMakerPairs[to]) {
                fees = amount.mul(totalSellFees).div(100);
            }
        	amount = amount.sub(fees);
            super._transfer(from, address(this), fees); // get total fee first
            
        }

        super._transfer(from, to, amount);

    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 liquidityTokens = contractTokenBalance.mul(liquiditySellFee).div(totalSellFees);
        uint256 walletTokens = contractTokenBalance.sub(liquidityTokens);
        // split the contract balance into halves
        uint256 half = liquidityTokens.div(2);
        uint256 otherHalf = liquidityTokens.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half, address(this));

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        swapAndSendToWallets(walletTokens);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendToWallets(uint256 _swapTokens) private {
        uint256 balanceBeforeSwap = address(this).balance;
        swapTokensForEth(_swapTokens, address(this));
        uint256 balanceAfterSwap = address(this).balance.sub(balanceBeforeSwap);
        uint256 marketingShare = balanceAfterSwap.mul(marketingSellFee).div(totalSellFees.sub(liquiditySellFee));
        uint256 communityShare = balanceAfterSwap.mul(communitySellFee).div(totalSellFees.sub(liquiditySellFee));
        uint256 opsShare = balanceAfterSwap.mul(operationsSellFee).div(totalSellFees.sub(liquiditySellFee));
        uint256 devShare = balanceAfterSwap.mul(devSellFee).div(totalSellFees.sub(liquiditySellFee));
        marketingWallet.transfer(marketingShare);
        communityWallet.transfer(communityShare);
        operationsWallet.transfer(opsShare);
        devWallet.transfer(devShare);

    }

    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
            owner(),
            block.timestamp
        );
    }
    
     function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapEthForTokens(amount);
	    }
    }
    
    function swapEthForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadWallet, // Burn address
            block.timestamp.add(300)
        );
        
        emit SwapEthForTokens(amount, path);
    }

    function swapTokensForEth(uint256 tokenAmount, address _to) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

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

    function setBuyFees(uint256 _liqFee, uint256 _bbackFee, uint256 _markFee, uint256 _commFee, uint256 _opsFee, uint256 _devFee) public onlyOwner {  
        liquidityBuyFee = _liqFee;
        buyBackBuyFee = _bbackFee;
        marketingBuyFee = _markFee;
        communityBuyFee = _commFee;
        operationsBuyFee = _opsFee;
        devBuyFee = _devFee;
        totalBuyFees = liquidityBuyFee.add(buyBackBuyFee).add(marketingBuyFee).add(communityBuyFee).add(operationsBuyFee).add(devBuyFee); 
        require(totalBuyFees <= 20, "fees too high");
    }

    function setSellFees(uint256 _liqFee, uint256 _bbackFee, uint256 _markFee, uint256 _commFee, uint256 _opsFee, uint256 _devFee) public onlyOwner {  
        liquiditySellFee = _liqFee;
        buyBackSellFee = _bbackFee;
        marketingSellFee = _markFee;
        communitySellFee = _commFee;
        operationsSellFee = _opsFee;
        devSellFee = _devFee;
        totalSellFees = liquiditySellFee.add(buyBackSellFee).add(marketingSellFee).add(communitySellFee).add(operationsSellFee).add(devSellFee);
        require(totalSellFees <= 20, "fees too high"); 
    }

    function updateWallets(address payable _markWallet, address payable _commWallet, address payable _opsWallet, address payable _devWallet) public onlyOwner {  
        marketingWallet = _markWallet;
        communityWallet = _commWallet;
        operationsWallet = _opsWallet;
        devWallet = _devWallet;
    }

    function setMaxSellTx(uint256 _maxSellTxAmount) public onlyOwner {
        maxSellTransactionAmount = _maxSellTxAmount;
        require(maxSellTransactionAmount >= totalSupply().div(200), "value too low");
    }
    
    function setMaxBuyTx(uint256 _maxBuyTxAmount) public onlyOwner {
        maxBuyTransactionAmount = _maxBuyTxAmount;
        require(maxBuyTransactionAmount >= totalSupply().div(200), "value too low");
    }

      function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
    
    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }
    
    function SetBuyBackUpperLimit(uint256 newLimit) external onlyOwner {
        buyBackUpperLimit = newLimit;
    }

    function SetSwapTokensAtAmount(uint256 newLimit) external onlyOwner {
        swapTokensAtAmount = newLimit;
    }
    
    function buyBackDivisor() public view returns (uint256) {
        return _buyBackDivisor;
    }
    
    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }
    
    function setBuyBackDivisor(uint256 _newValue) external onlyOwner() {
        require(_newValue > 0, "cannot be set as zero");
        _buyBackDivisor = _newValue;
    }
    
    function setExcludeFromMaxTx(address _address, bool value) public onlyOwner { 
        _isExcludedFromMaxTx[_address] = value;
    }

    function setExcludeFromAll(address _address) public onlyOwner {
        _isExcludedFromMaxTx[_address] = true;
        _isExcludedFromFees[_address] = true;
    }

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

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function isExcludedFromMaxTx(address account) public view returns(bool) {
        return _isExcludedFromMaxTx[account];
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    receive() external payable {

  	}
    
}

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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","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":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapEthForTokens","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"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"SetBuyBackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"SetSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communitySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","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":"devBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_users","type":"address[]"}],"name":"includeToWhiteList","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","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":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operationsBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setBuyBackDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_bbackFee","type":"uint256"},{"internalType":"uint256","name":"_markFee","type":"uint256"},{"internalType":"uint256","name":"_commFee","type":"uint256"},{"internalType":"uint256","name":"_opsFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setExcludeFromAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyTxAmount","type":"uint256"}],"name":"setMaxBuyTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTxAmount","type":"uint256"}],"name":"setMaxSellTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_bbackFee","type":"uint256"},{"internalType":"uint256","name":"_markFee","type":"uint256"},{"internalType":"uint256","name":"_commFee","type":"uint256"},{"internalType":"uint256","name":"_opsFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_markWallet","type":"address"},{"internalType":"address payable","name":"_commWallet","type":"address"},{"internalType":"address payable","name":"_opsWallet","type":"address"},{"internalType":"address payable","name":"_devWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526005805460ff60a01b191690556007805461010160a81b61ffff60a81b19909116178155600880546001600160a01b031990811661dead17909155661aa535d3d0c0006009819055600a55651b48eb57e000600b5567016345785d8a0000600c556014600d8190556001600e819055600f819055601081905560118190556012819055600260135592905560158290556016829055601782905560188290556019829055601a919091556006601b55601c8054821673975a16a73daea0549c863451d7f2edd01cae6f91179055601d8054821673337dc2cb1ac95eff400c2c31bbade234f9420efd179055601e80548216734a4226e5642c81c739a97591f06d1bee1defe7d9179055601f805490911673a79357a68e07c57446e28bd25de14912a2ef3c091790553480156200013957600080fd5b50604080518082018252600580825264484f55525360d81b6020808401829052845180860190955291845290830152906003620001778382620008d9565b506004620001868282620008d9565b505050620001a36200019d620004c860201b60201c565b620004cc565b3360009081526006602090815260408083208054600160ff19918216811790925530855282852080549091169091179055805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9392849263c45a015592600480830193928290030181865afa15801562000222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002489190620009a5565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc9190620009a5565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200030a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003309190620009a5565b600780546001600160a01b0319166001600160a01b038581169190911790915581166080529050620003648160016200051e565b620003836200037b6005546001600160a01b031690565b60016200060e565b601c546200039c906001600160a01b031660016200060e565b601d54620003b5906001600160a01b031660016200060e565b601e54620003ce906001600160a01b031660016200060e565b601f54620003e7906001600160a01b031660016200060e565b620003f43060016200060e565b6001602160006200040d6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526021909352818320805485166001908117909155601c54821684528284208054861682179055601d54821684528284208054861682179055601e54821684528284208054861682179055601f54909116835291208054909216179055620004c0620004b16005546001600160a01b031690565b670de0b6b3a76400006200074b565b5050620009ff565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503620005ba5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200066a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620005b1565b6001600160a01b038216600090815260208052604090205481151560ff909116151503620006ee5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401620005b1565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007a35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005b1565b8060026000828254620007b79190620009d7565b90915550506001600160a01b03821660009081526020819052604081208054839290620007e6908490620009d7565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200086057607f821691505b6020821081036200088157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200083057600081815260208120601f850160051c81016020861015620008b05750805b601f850160051c820191505b81811015620008d157828155600101620008bc565b505050505050565b81516001600160401b03811115620008f557620008f562000835565b6200090d816200090684546200084b565b8462000887565b602080601f8311600181146200094557600084156200092c5750858301515b600019600386901b1c1916600185901b178555620008d1565b600085815260208120601f198616915b82811015620009765788860151825594840194600190910190840162000955565b5085821015620009955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009b857600080fd5b81516001600160a01b0381168114620009d057600080fd5b9392505050565b80820180821115620009f957634e487b7160e01b600052601160045260246000fd5b92915050565b608051612bfd62000a22600039600081816105d701526110ce0152612bfd6000f3fe6080604052600436106103905760003560e01c8063743e540d116101dc578063bdc653ef11610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610a68578063f74c9f4714610a88578063fb17e6dc14610aa8578063fb201b1d14610ac857600080fd5b8063dd62ed3e146109e0578063e2f4560514610a26578063e7f444b314610a3c578063efcc1b2f14610a5257600080fd5b8063c2b3e1c2116100dc578063c2b3e1c214610974578063c49b9a8014610994578063ccb61358146109b4578063d0a39814146109ca57600080fd5b8063bdc653ef14610929578063c02466681461093e578063c05e8fa11461095e57600080fd5b8063a457c2d71161017a578063b45e83f811610149578063b45e83f8146108ad578063b62496f5146108c3578063b9e93700146108f3578063ba876bb91461090957600080fd5b8063a457c2d714610837578063a9059cbb14610857578063a946163014610877578063afc168751461089757600080fd5b80638da5cb5b116101b65780638da5cb5b146107cf5780638ee10823146107ed57806395d89b41146108025780639a7a23d61461081757600080fd5b8063743e540d146107795780637506cbd81461079957806385141a77146107af57600080fd5b806339509351116102c15780635b89029c1161025f578063680789521161022e57806368078952146107025780636be638551461071857806370a082311461072e578063715018a61461076457600080fd5b80635b89029c146106685780636053a0e314610688578063658c27a9146106a957806365b8dbc0146106e257600080fd5b806349bd5a5e1161029b57806349bd5a5e146105c55780634a74bb02146105f95780634fbee1931461061a5780635aa821a91461065257600080fd5b8063395093511461056457806347535d7b1461058457806349928a50146105a557600080fd5b80630b6bb6f51161032e57806323b872dd1161030857806323b872dd146104f257806329370cc614610512578063313ce56714610532578063330f829d1461054e57600080fd5b80630b6bb6f5146104855780631694505e146104a557806318160ddd146104dd57600080fd5b806306fdde031161036a57806306fdde03146103fd578063095ea7b31461041f578063099d0d301461044f57806309e89af71461046557600080fd5b806301143fea1461039c57806302259e9e146103c5578063068dde72146103db57600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b260135481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b506103b260095481565b3480156103e757600080fd5b506103fb6103f63660046125d4565b610add565b005b34801561040957600080fd5b50610412610b5d565b6040516103bc91906125ed565b34801561042b57600080fd5b5061043f61043a366004612660565b610bef565b60405190151581526020016103bc565b34801561045b57600080fd5b506103b260155481565b34801561047157600080fd5b506103fb6104803660046125d4565b610c06565b34801561049157600080fd5b506103fb6104a03660046126a2565b610c35565b3480156104b157600080fd5b506007546104c5906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b3480156104e957600080fd5b506002546103b2565b3480156104fe57600080fd5b5061043f61050d366004612767565b610cd1565b34801561051e57600080fd5b506103fb61052d3660046127b8565b610d7b565b34801561053e57600080fd5b50604051600981526020016103bc565b34801561055a57600080fd5b506103b260185481565b34801561057057600080fd5b5061043f61057f366004612660565b610dfd565b34801561059057600080fd5b5060055461043f90600160a01b900460ff1681565b3480156105b157600080fd5b506103fb6105c03660046127d3565b610e39565b3480156105d157600080fd5b506104c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561060557600080fd5b5060075461043f90600160b01b900460ff1681565b34801561062657600080fd5b5061043f6106353660046127d3565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561065e57600080fd5b506103b2600a5481565b34801561067457600080fd5b506103fb6106833660046127f0565b610e9d565b34801561069457600080fd5b5060075461043f90600160a81b900460ff1681565b3480156106b557600080fd5b5061043f6106c43660046127d3565b6001600160a01b031660009081526021602052604090205460ff1690565b3480156106ee57600080fd5b506103fb6106fd3660046127d3565b610ef2565b34801561070e57600080fd5b506103b260105481565b34801561072457600080fd5b506103b260165481565b34801561073a57600080fd5b506103b26107493660046127d3565b6001600160a01b031660009081526020819052604090205490565b34801561077057600080fd5b506103fb610fe3565b34801561078557600080fd5b506103fb610794366004612825565b611019565b3480156107a557600080fd5b506103b260195481565b3480156107bb57600080fd5b506008546104c5906001600160a01b031681565b3480156107db57600080fd5b506005546001600160a01b03166104c5565b3480156107f957600080fd5b50600d546103b2565b34801561080e57600080fd5b50610412611093565b34801561082357600080fd5b506103fb6108323660046127f0565b6110a2565b34801561084357600080fd5b5061043f610852366004612660565b61118b565b34801561086357600080fd5b5061043f610872366004612660565b611224565b34801561088357600080fd5b506103fb6108923660046125d4565b611231565b3480156108a357600080fd5b506103b260115481565b3480156108b957600080fd5b506103b2601a5481565b3480156108cf57600080fd5b5061043f6108de3660046127d3565b60226020526000908152604090205460ff1681565b3480156108ff57600080fd5b506103b260145481565b34801561091557600080fd5b506103fb610924366004612881565b6112b8565b34801561093557600080fd5b50600c546103b2565b34801561094a57600080fd5b506103fb6109593660046127f0565b611367565b34801561096a57600080fd5b506103b2600f5481565b34801561098057600080fd5b506103fb61098f3660046125d4565b611470565b3480156109a057600080fd5b506103fb6109af3660046127b8565b61149f565b3480156109c057600080fd5b506103b2600e5481565b3480156109d657600080fd5b506103b2601b5481565b3480156109ec57600080fd5b506103b26109fb3660046128c4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3257600080fd5b506103b2600b5481565b348015610a4857600080fd5b506103b260175481565b348015610a5e57600080fd5b506103b260125481565b348015610a7457600080fd5b506103fb610a833660046127d3565b611516565b348015610a9457600080fd5b506103fb610aa3366004612881565b6115ae565b348015610ab457600080fd5b506103fb610ac33660046125d4565b61164d565b348015610ad457600080fd5b506103fb6116cb565b6005546001600160a01b03163314610b105760405162461bcd60e51b8152600401610b07906128fd565b60405180910390fd5b60008111610b585760405162461bcd60e51b815260206004820152601560248201527463616e6e6f7420626520736574206173207a65726f60581b6044820152606401610b07565b600d55565b606060038054610b6c90612932565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9890612932565b8015610be55780601f10610bba57610100808354040283529160200191610be5565b820191906000526020600020905b815481529060010190602001808311610bc857829003601f168201915b5050505050905090565b6000610bfc33848461170a565b5060015b92915050565b6005546001600160a01b03163314610c305760405162461bcd60e51b8152600401610b07906128fd565b600b55565b6005546001600160a01b03163314610c5f5760405162461bcd60e51b8152600401610b07906128fd565b60005b81518160ff161015610ccd57600160066000848460ff1681518110610c8957610c8961296c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610cc581612998565b915050610c62565b5050565b6000610cde84848461182e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d635760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b07565b610d70853385840361170a565b506001949350505050565b6005546001600160a01b03163314610da55760405162461bcd60e51b8152600401610b07906128fd565b60078054821515600160a81b0260ff60a81b199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610df290831515815260200190565b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bfc918590610e349086906129b7565b61170a565b6005546001600160a01b03163314610e635760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b031660009081526021602090815260408083208054600160ff199182168117909255928052922080549091169091179055565b6005546001600160a01b03163314610ec75760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f1c5760405162461bcd60e51b8152600401610b07906128fd565b6007546001600160a01b0390811690821603610f865760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610b07565b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461100d5760405162461bcd60e51b8152600401610b07906128fd565b6110176000611c54565b565b6005546001600160a01b031633146110435760405162461bcd60e51b8152600401610b07906128fd565b601c80546001600160a01b039586166001600160a01b031991821617909155601d805494861694821694909417909355601e805492851692841692909217909155601f8054919093169116179055565b606060048054610b6c90612932565b6005546001600160a01b031633146110cc5760405162461bcd60e51b8152600401610b07906128fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111815760405162461bcd60e51b815260206004820152604560248201527f5468652050616e63616b655377617020706169722063616e6e6f74206265207260448201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572606482015264506169727360d81b608482015260a401610b07565b610ccd8282611ca6565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561120d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b07565b61121a338585840361170a565b5060019392505050565b6000610bfc33848461182e565b6005546001600160a01b0316331461125b5760405162461bcd60e51b8152600401610b07906128fd565b600a81905561127460c861126e60025490565b90611d90565b600a5410156112b55760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610b07565b50565b6005546001600160a01b031633146112e25760405162461bcd60e51b8152600401610b07906128fd565b60158690556016859055601784905560188390556019829055601a81905561131a81611314848187818a818e8e611da3565b90611da3565b601b8190556014101561135f5760405162461bcd60e51b815260206004820152600d60248201526c0cccacae640e8dede40d0d2ced609b1b6044820152606401610b07565b505050505050565b6005546001600160a01b031633146113915760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b038216600090815260208052604090205481151560ff9091161515036114135760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610b07565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461149a5760405162461bcd60e51b8152600401610b07906128fd565b600c55565b6005546001600160a01b031633146114c95760405162461bcd60e51b8152600401610b07906128fd565b60078054821515600160b01b0260ff60b01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610df290831515815260200190565b6005546001600160a01b031633146115405760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b0381166115a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b07565b6112b581611c54565b6005546001600160a01b031633146115d85760405162461bcd60e51b8152600401610b07906128fd565b600e869055600f859055601084905560118390556012829055601381905561160a81611314848187818a818e8e611da3565b6014818155101561135f5760405162461bcd60e51b815260206004820152600d60248201526c0cccacae640e8dede40d0d2ced609b1b6044820152606401610b07565b6005546001600160a01b031633146116775760405162461bcd60e51b8152600401610b07906128fd565b600981905561168a60c861126e60025490565b60095410156112b55760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610b07565b6005546001600160a01b031633146116f55760405162461bcd60e51b8152600401610b07906128fd565b6005805460ff60a01b1916600160a01b179055565b6001600160a01b03831661176c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b07565b6001600160a01b0382166117cd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b07565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60055483908390600160a01b900460ff168061186257506001600160a01b03821660009081526006602052604090205460ff165b8061188557506001600160a01b03811660009081526006602052604090205460ff165b6118bc5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b07565b6001600160a01b0385166118e25760405162461bcd60e51b8152600401610b07906129ca565b6001600160a01b0384166119085760405162461bcd60e51b8152600401610b0790612a0f565b826000036119215761191c85856000611daf565b611c4d565b6001600160a01b03851660009081526022602052604090205460ff16801561196257506001600160a01b03851660009081526021602052604090205460ff16155b801561198757506001600160a01b03841660009081526021602052604090205460ff16155b156119f257600a548311156119f25760405162461bcd60e51b815260206004820152602b60248201527f616d6f756e74206578636565647320746865206d61784275795472616e73616360448201526a3a34b7b720b6b7bab73a1760a91b6064820152608401610b07565b6001600160a01b03841660009081526022602052604090205460ff168015611a3357506001600160a01b03851660009081526021602052604090205460ff16155b8015611a5857506001600160a01b03841660009081526021602052604090205460ff16155b15611ac457600954831115611ac45760405162461bcd60e51b815260206004820152602c60248201527f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160448201526b31ba34b7b720b6b7bab73a1760a11b6064820152608401610b07565b30600090815260208190526040902054600b546007549082101590600160a01b900460ff16158015611b0e57506001600160a01b03861660009081526022602052604090205460ff165b8015611b235750600754600160b01b900460ff165b15611b84578015611b3c57600b549150611b3c82611f04565b6007544790600160a81b900460ff168015611b585750600c5481115b15611b8257600c54811115611b825750600c54600d54611b8290611b7d908390611d90565b611fdf565b505b6001600160a01b038716600090815260208052604090205460ff16158015611bc457506001600160a01b038616600090815260208052604090205460ff16155b15611c3f576000611be5606461126e6014548961201190919063ffffffff16565b6001600160a01b03881660009081526022602052604090205490915060ff1615611c2657611c23606461126e601b548961201190919063ffffffff16565b90505b611c30868261201d565b9550611c3d883083611daf565b505b611c4a878787611daf565b50505b5050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503611d3c5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b07565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000611d9c8284612a52565b9392505050565b6000611d9c82846129b7565b6001600160a01b038316611dd55760405162461bcd60e51b8152600401610b07906129ca565b6001600160a01b038216611dfb5760405162461bcd60e51b8152600401610b0790612a0f565b6001600160a01b03831660009081526020819052604090205481811015611e735760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b07565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611eaa9084906129b7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ef691815260200190565b60405180910390a350505050565b6007805460ff60a01b1916600160a01b179055601b54601554600091611f2f9161126e908590612011565b90506000611f3d838361201d565b90506000611f4c836002611d90565b90506000611f5a848361201d565b905047611f678330612029565b6000611f73478361201d565b9050611f7f83826121ac565b611f888561227a565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506007805460ff60a01b191690555050505050565b6007805460ff60a01b1916600160a01b17905580156120015761200181612437565b506007805460ff60a01b19169055565b6000611d9c8284612a74565b6000611d9c8284612a93565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061205e5761205e61296c565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156120b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120db9190612aa6565b816001815181106120ee576120ee61296c565b6001600160a01b0392831660209182029290920181019190915260075430600090815260018352604080822092909416815291522054831115612145576007546121459030906001600160a01b031660001961170a565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac9479061217e908690600090869088904290600401612b07565b600060405180830381600087803b15801561219857600080fd5b505af1158015611c4a573d6000803e3d6000fd5b6007546121c49030906001600160a01b03168461170a565b6007546001600160a01b031663f305d7198230856000806121ed6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612255573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c4d9190612b43565b476122858230612029565b6000612291478361201d565b905060006122bd6122af601554601b5461201d90919063ffffffff16565b60175461126e908590612011565b905060006122e96122db601554601b5461201d90919063ffffffff16565b60185461126e908690612011565b90506000612315612307601554601b5461201d90919063ffffffff16565b60195461126e908790612011565b90506000612341612333601554601b5461201d90919063ffffffff16565b601a5461126e908890612011565b601c546040519192506001600160a01b03169085156108fc029086906000818181858888f1935050505015801561237c573d6000803e3d6000fd5b50601d546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156123b7573d6000803e3d6000fd5b50601e546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156123f2573d6000803e3d6000fd5b50601f546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561242d573d6000803e3d6000fd5b5050505050505050565b6040805160028082526060820183526000926020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c59190612aa6565b816000815181106124d8576124d861296c565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061250c5761250c61296c565b6001600160a01b0392831660209182029290920101526007546008549082169163b6f9de959185916000918691166125464261012c611da3565b6040518663ffffffff1660e01b81526004016125659493929190612b71565b6000604051808303818588803b15801561257e57600080fd5b505af1158015612592573d6000803e3d6000fd5b50505050507f49572d4c9f88395e245870653f943bb96eced77a132c1b2d14dc524c4eaceea782826040516125c8929190612ba6565b60405180910390a15050565b6000602082840312156125e657600080fd5b5035919050565b600060208083528351808285015260005b8181101561261a578581018301518582016040015282016125fe565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146112b557600080fd5b803561265b8161263b565b919050565b6000806040838503121561267357600080fd5b823561267e8161263b565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156126b557600080fd5b823567ffffffffffffffff808211156126cd57600080fd5b818501915085601f8301126126e157600080fd5b8135818111156126f3576126f361268c565b8060051b604051601f19603f830116810181811085821117156127185761271861268c565b60405291825284820192508381018501918883111561273657600080fd5b938501935b8285101561275b5761274c85612650565b8452938501939285019261273b565b98975050505050505050565b60008060006060848603121561277c57600080fd5b83356127878161263b565b925060208401356127978161263b565b929592945050506040919091013590565b8035801515811461265b57600080fd5b6000602082840312156127ca57600080fd5b611d9c826127a8565b6000602082840312156127e557600080fd5b8135611d9c8161263b565b6000806040838503121561280357600080fd5b823561280e8161263b565b915061281c602084016127a8565b90509250929050565b6000806000806080858703121561283b57600080fd5b84356128468161263b565b935060208501356128568161263b565b925060408501356128668161263b565b915060608501356128768161263b565b939692955090935050565b60008060008060008060c0878903121561289a57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156128d757600080fd5b82356128e28161263b565b915060208301356128f28161263b565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061294657607f821691505b60208210810361296657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff81036129ae576129ae612982565b60010192915050565b80820180821115610c0057610c00612982565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082612a6f57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a8e57612a8e612982565b500290565b81810381811115610c0057610c00612982565b600060208284031215612ab857600080fd5b8151611d9c8161263b565b600081518084526020808501945080840160005b83811015612afc5781516001600160a01b031687529582019590820190600101612ad7565b509495945050505050565b85815284602082015260a060408201526000612b2660a0830186612ac3565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215612b5857600080fd5b8351925060208401519150604084015190509250925092565b848152608060208201526000612b8a6080830186612ac3565b6001600160a01b03949094166040830152506060015292915050565b828152604060208201526000612bbf6040830184612ac3565b94935050505056fea264697066735822122006d05624fd1f9a7281bde0ec304342c68c26c5df4aeff9424fa86b99554a81e564736f6c63430008100033

Deployed Bytecode

0x6080604052600436106103905760003560e01c8063743e540d116101dc578063bdc653ef11610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610a68578063f74c9f4714610a88578063fb17e6dc14610aa8578063fb201b1d14610ac857600080fd5b8063dd62ed3e146109e0578063e2f4560514610a26578063e7f444b314610a3c578063efcc1b2f14610a5257600080fd5b8063c2b3e1c2116100dc578063c2b3e1c214610974578063c49b9a8014610994578063ccb61358146109b4578063d0a39814146109ca57600080fd5b8063bdc653ef14610929578063c02466681461093e578063c05e8fa11461095e57600080fd5b8063a457c2d71161017a578063b45e83f811610149578063b45e83f8146108ad578063b62496f5146108c3578063b9e93700146108f3578063ba876bb91461090957600080fd5b8063a457c2d714610837578063a9059cbb14610857578063a946163014610877578063afc168751461089757600080fd5b80638da5cb5b116101b65780638da5cb5b146107cf5780638ee10823146107ed57806395d89b41146108025780639a7a23d61461081757600080fd5b8063743e540d146107795780637506cbd81461079957806385141a77146107af57600080fd5b806339509351116102c15780635b89029c1161025f578063680789521161022e57806368078952146107025780636be638551461071857806370a082311461072e578063715018a61461076457600080fd5b80635b89029c146106685780636053a0e314610688578063658c27a9146106a957806365b8dbc0146106e257600080fd5b806349bd5a5e1161029b57806349bd5a5e146105c55780634a74bb02146105f95780634fbee1931461061a5780635aa821a91461065257600080fd5b8063395093511461056457806347535d7b1461058457806349928a50146105a557600080fd5b80630b6bb6f51161032e57806323b872dd1161030857806323b872dd146104f257806329370cc614610512578063313ce56714610532578063330f829d1461054e57600080fd5b80630b6bb6f5146104855780631694505e146104a557806318160ddd146104dd57600080fd5b806306fdde031161036a57806306fdde03146103fd578063095ea7b31461041f578063099d0d301461044f57806309e89af71461046557600080fd5b806301143fea1461039c57806302259e9e146103c5578063068dde72146103db57600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b260135481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b506103b260095481565b3480156103e757600080fd5b506103fb6103f63660046125d4565b610add565b005b34801561040957600080fd5b50610412610b5d565b6040516103bc91906125ed565b34801561042b57600080fd5b5061043f61043a366004612660565b610bef565b60405190151581526020016103bc565b34801561045b57600080fd5b506103b260155481565b34801561047157600080fd5b506103fb6104803660046125d4565b610c06565b34801561049157600080fd5b506103fb6104a03660046126a2565b610c35565b3480156104b157600080fd5b506007546104c5906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b3480156104e957600080fd5b506002546103b2565b3480156104fe57600080fd5b5061043f61050d366004612767565b610cd1565b34801561051e57600080fd5b506103fb61052d3660046127b8565b610d7b565b34801561053e57600080fd5b50604051600981526020016103bc565b34801561055a57600080fd5b506103b260185481565b34801561057057600080fd5b5061043f61057f366004612660565b610dfd565b34801561059057600080fd5b5060055461043f90600160a01b900460ff1681565b3480156105b157600080fd5b506103fb6105c03660046127d3565b610e39565b3480156105d157600080fd5b506104c57f000000000000000000000000de03dfeae6c574a48705d0a86e828fc7454520ae81565b34801561060557600080fd5b5060075461043f90600160b01b900460ff1681565b34801561062657600080fd5b5061043f6106353660046127d3565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561065e57600080fd5b506103b2600a5481565b34801561067457600080fd5b506103fb6106833660046127f0565b610e9d565b34801561069457600080fd5b5060075461043f90600160a81b900460ff1681565b3480156106b557600080fd5b5061043f6106c43660046127d3565b6001600160a01b031660009081526021602052604090205460ff1690565b3480156106ee57600080fd5b506103fb6106fd3660046127d3565b610ef2565b34801561070e57600080fd5b506103b260105481565b34801561072457600080fd5b506103b260165481565b34801561073a57600080fd5b506103b26107493660046127d3565b6001600160a01b031660009081526020819052604090205490565b34801561077057600080fd5b506103fb610fe3565b34801561078557600080fd5b506103fb610794366004612825565b611019565b3480156107a557600080fd5b506103b260195481565b3480156107bb57600080fd5b506008546104c5906001600160a01b031681565b3480156107db57600080fd5b506005546001600160a01b03166104c5565b3480156107f957600080fd5b50600d546103b2565b34801561080e57600080fd5b50610412611093565b34801561082357600080fd5b506103fb6108323660046127f0565b6110a2565b34801561084357600080fd5b5061043f610852366004612660565b61118b565b34801561086357600080fd5b5061043f610872366004612660565b611224565b34801561088357600080fd5b506103fb6108923660046125d4565b611231565b3480156108a357600080fd5b506103b260115481565b3480156108b957600080fd5b506103b2601a5481565b3480156108cf57600080fd5b5061043f6108de3660046127d3565b60226020526000908152604090205460ff1681565b3480156108ff57600080fd5b506103b260145481565b34801561091557600080fd5b506103fb610924366004612881565b6112b8565b34801561093557600080fd5b50600c546103b2565b34801561094a57600080fd5b506103fb6109593660046127f0565b611367565b34801561096a57600080fd5b506103b2600f5481565b34801561098057600080fd5b506103fb61098f3660046125d4565b611470565b3480156109a057600080fd5b506103fb6109af3660046127b8565b61149f565b3480156109c057600080fd5b506103b2600e5481565b3480156109d657600080fd5b506103b2601b5481565b3480156109ec57600080fd5b506103b26109fb3660046128c4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3257600080fd5b506103b2600b5481565b348015610a4857600080fd5b506103b260175481565b348015610a5e57600080fd5b506103b260125481565b348015610a7457600080fd5b506103fb610a833660046127d3565b611516565b348015610a9457600080fd5b506103fb610aa3366004612881565b6115ae565b348015610ab457600080fd5b506103fb610ac33660046125d4565b61164d565b348015610ad457600080fd5b506103fb6116cb565b6005546001600160a01b03163314610b105760405162461bcd60e51b8152600401610b07906128fd565b60405180910390fd5b60008111610b585760405162461bcd60e51b815260206004820152601560248201527463616e6e6f7420626520736574206173207a65726f60581b6044820152606401610b07565b600d55565b606060038054610b6c90612932565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9890612932565b8015610be55780601f10610bba57610100808354040283529160200191610be5565b820191906000526020600020905b815481529060010190602001808311610bc857829003601f168201915b5050505050905090565b6000610bfc33848461170a565b5060015b92915050565b6005546001600160a01b03163314610c305760405162461bcd60e51b8152600401610b07906128fd565b600b55565b6005546001600160a01b03163314610c5f5760405162461bcd60e51b8152600401610b07906128fd565b60005b81518160ff161015610ccd57600160066000848460ff1681518110610c8957610c8961296c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610cc581612998565b915050610c62565b5050565b6000610cde84848461182e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d635760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b07565b610d70853385840361170a565b506001949350505050565b6005546001600160a01b03163314610da55760405162461bcd60e51b8152600401610b07906128fd565b60078054821515600160a81b0260ff60a81b199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610df290831515815260200190565b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bfc918590610e349086906129b7565b61170a565b6005546001600160a01b03163314610e635760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b031660009081526021602090815260408083208054600160ff199182168117909255928052922080549091169091179055565b6005546001600160a01b03163314610ec75760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f1c5760405162461bcd60e51b8152600401610b07906128fd565b6007546001600160a01b0390811690821603610f865760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610b07565b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461100d5760405162461bcd60e51b8152600401610b07906128fd565b6110176000611c54565b565b6005546001600160a01b031633146110435760405162461bcd60e51b8152600401610b07906128fd565b601c80546001600160a01b039586166001600160a01b031991821617909155601d805494861694821694909417909355601e805492851692841692909217909155601f8054919093169116179055565b606060048054610b6c90612932565b6005546001600160a01b031633146110cc5760405162461bcd60e51b8152600401610b07906128fd565b7f000000000000000000000000de03dfeae6c574a48705d0a86e828fc7454520ae6001600160a01b0316826001600160a01b0316036111815760405162461bcd60e51b815260206004820152604560248201527f5468652050616e63616b655377617020706169722063616e6e6f74206265207260448201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572606482015264506169727360d81b608482015260a401610b07565b610ccd8282611ca6565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561120d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b07565b61121a338585840361170a565b5060019392505050565b6000610bfc33848461182e565b6005546001600160a01b0316331461125b5760405162461bcd60e51b8152600401610b07906128fd565b600a81905561127460c861126e60025490565b90611d90565b600a5410156112b55760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610b07565b50565b6005546001600160a01b031633146112e25760405162461bcd60e51b8152600401610b07906128fd565b60158690556016859055601784905560188390556019829055601a81905561131a81611314848187818a818e8e611da3565b90611da3565b601b8190556014101561135f5760405162461bcd60e51b815260206004820152600d60248201526c0cccacae640e8dede40d0d2ced609b1b6044820152606401610b07565b505050505050565b6005546001600160a01b031633146113915760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b038216600090815260208052604090205481151560ff9091161515036114135760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610b07565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461149a5760405162461bcd60e51b8152600401610b07906128fd565b600c55565b6005546001600160a01b031633146114c95760405162461bcd60e51b8152600401610b07906128fd565b60078054821515600160b01b0260ff60b01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610df290831515815260200190565b6005546001600160a01b031633146115405760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b0381166115a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b07565b6112b581611c54565b6005546001600160a01b031633146115d85760405162461bcd60e51b8152600401610b07906128fd565b600e869055600f859055601084905560118390556012829055601381905561160a81611314848187818a818e8e611da3565b6014818155101561135f5760405162461bcd60e51b815260206004820152600d60248201526c0cccacae640e8dede40d0d2ced609b1b6044820152606401610b07565b6005546001600160a01b031633146116775760405162461bcd60e51b8152600401610b07906128fd565b600981905561168a60c861126e60025490565b60095410156112b55760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610b07565b6005546001600160a01b031633146116f55760405162461bcd60e51b8152600401610b07906128fd565b6005805460ff60a01b1916600160a01b179055565b6001600160a01b03831661176c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b07565b6001600160a01b0382166117cd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b07565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60055483908390600160a01b900460ff168061186257506001600160a01b03821660009081526006602052604090205460ff165b8061188557506001600160a01b03811660009081526006602052604090205460ff165b6118bc5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b07565b6001600160a01b0385166118e25760405162461bcd60e51b8152600401610b07906129ca565b6001600160a01b0384166119085760405162461bcd60e51b8152600401610b0790612a0f565b826000036119215761191c85856000611daf565b611c4d565b6001600160a01b03851660009081526022602052604090205460ff16801561196257506001600160a01b03851660009081526021602052604090205460ff16155b801561198757506001600160a01b03841660009081526021602052604090205460ff16155b156119f257600a548311156119f25760405162461bcd60e51b815260206004820152602b60248201527f616d6f756e74206578636565647320746865206d61784275795472616e73616360448201526a3a34b7b720b6b7bab73a1760a91b6064820152608401610b07565b6001600160a01b03841660009081526022602052604090205460ff168015611a3357506001600160a01b03851660009081526021602052604090205460ff16155b8015611a5857506001600160a01b03841660009081526021602052604090205460ff16155b15611ac457600954831115611ac45760405162461bcd60e51b815260206004820152602c60248201527f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160448201526b31ba34b7b720b6b7bab73a1760a11b6064820152608401610b07565b30600090815260208190526040902054600b546007549082101590600160a01b900460ff16158015611b0e57506001600160a01b03861660009081526022602052604090205460ff165b8015611b235750600754600160b01b900460ff165b15611b84578015611b3c57600b549150611b3c82611f04565b6007544790600160a81b900460ff168015611b585750600c5481115b15611b8257600c54811115611b825750600c54600d54611b8290611b7d908390611d90565b611fdf565b505b6001600160a01b038716600090815260208052604090205460ff16158015611bc457506001600160a01b038616600090815260208052604090205460ff16155b15611c3f576000611be5606461126e6014548961201190919063ffffffff16565b6001600160a01b03881660009081526022602052604090205490915060ff1615611c2657611c23606461126e601b548961201190919063ffffffff16565b90505b611c30868261201d565b9550611c3d883083611daf565b505b611c4a878787611daf565b50505b5050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503611d3c5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b07565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000611d9c8284612a52565b9392505050565b6000611d9c82846129b7565b6001600160a01b038316611dd55760405162461bcd60e51b8152600401610b07906129ca565b6001600160a01b038216611dfb5760405162461bcd60e51b8152600401610b0790612a0f565b6001600160a01b03831660009081526020819052604090205481811015611e735760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b07565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611eaa9084906129b7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ef691815260200190565b60405180910390a350505050565b6007805460ff60a01b1916600160a01b179055601b54601554600091611f2f9161126e908590612011565b90506000611f3d838361201d565b90506000611f4c836002611d90565b90506000611f5a848361201d565b905047611f678330612029565b6000611f73478361201d565b9050611f7f83826121ac565b611f888561227a565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506007805460ff60a01b191690555050505050565b6007805460ff60a01b1916600160a01b17905580156120015761200181612437565b506007805460ff60a01b19169055565b6000611d9c8284612a74565b6000611d9c8284612a93565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061205e5761205e61296c565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156120b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120db9190612aa6565b816001815181106120ee576120ee61296c565b6001600160a01b0392831660209182029290920181019190915260075430600090815260018352604080822092909416815291522054831115612145576007546121459030906001600160a01b031660001961170a565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac9479061217e908690600090869088904290600401612b07565b600060405180830381600087803b15801561219857600080fd5b505af1158015611c4a573d6000803e3d6000fd5b6007546121c49030906001600160a01b03168461170a565b6007546001600160a01b031663f305d7198230856000806121ed6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612255573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c4d9190612b43565b476122858230612029565b6000612291478361201d565b905060006122bd6122af601554601b5461201d90919063ffffffff16565b60175461126e908590612011565b905060006122e96122db601554601b5461201d90919063ffffffff16565b60185461126e908690612011565b90506000612315612307601554601b5461201d90919063ffffffff16565b60195461126e908790612011565b90506000612341612333601554601b5461201d90919063ffffffff16565b601a5461126e908890612011565b601c546040519192506001600160a01b03169085156108fc029086906000818181858888f1935050505015801561237c573d6000803e3d6000fd5b50601d546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156123b7573d6000803e3d6000fd5b50601e546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156123f2573d6000803e3d6000fd5b50601f546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561242d573d6000803e3d6000fd5b5050505050505050565b6040805160028082526060820183526000926020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c59190612aa6565b816000815181106124d8576124d861296c565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061250c5761250c61296c565b6001600160a01b0392831660209182029290920101526007546008549082169163b6f9de959185916000918691166125464261012c611da3565b6040518663ffffffff1660e01b81526004016125659493929190612b71565b6000604051808303818588803b15801561257e57600080fd5b505af1158015612592573d6000803e3d6000fd5b50505050507f49572d4c9f88395e245870653f943bb96eced77a132c1b2d14dc524c4eaceea782826040516125c8929190612ba6565b60405180910390a15050565b6000602082840312156125e657600080fd5b5035919050565b600060208083528351808285015260005b8181101561261a578581018301518582016040015282016125fe565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146112b557600080fd5b803561265b8161263b565b919050565b6000806040838503121561267357600080fd5b823561267e8161263b565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156126b557600080fd5b823567ffffffffffffffff808211156126cd57600080fd5b818501915085601f8301126126e157600080fd5b8135818111156126f3576126f361268c565b8060051b604051601f19603f830116810181811085821117156127185761271861268c565b60405291825284820192508381018501918883111561273657600080fd5b938501935b8285101561275b5761274c85612650565b8452938501939285019261273b565b98975050505050505050565b60008060006060848603121561277c57600080fd5b83356127878161263b565b925060208401356127978161263b565b929592945050506040919091013590565b8035801515811461265b57600080fd5b6000602082840312156127ca57600080fd5b611d9c826127a8565b6000602082840312156127e557600080fd5b8135611d9c8161263b565b6000806040838503121561280357600080fd5b823561280e8161263b565b915061281c602084016127a8565b90509250929050565b6000806000806080858703121561283b57600080fd5b84356128468161263b565b935060208501356128568161263b565b925060408501356128668161263b565b915060608501356128768161263b565b939692955090935050565b60008060008060008060c0878903121561289a57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156128d757600080fd5b82356128e28161263b565b915060208301356128f28161263b565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061294657607f821691505b60208210810361296657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff81036129ae576129ae612982565b60010192915050565b80820180821115610c0057610c00612982565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082612a6f57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a8e57612a8e612982565b500290565b81810381811115610c0057610c00612982565b600060208284031215612ab857600080fd5b8151611d9c8161263b565b600081518084526020808501945080840160005b83811015612afc5781516001600160a01b031687529582019590820190600101612ad7565b509495945050505050565b85815284602082015260a060408201526000612b2660a0830186612ac3565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215612b5857600080fd5b8351925060208401519150604084015190509250925092565b848152608060208201526000612b8a6080830186612ac3565b6001600160a01b03949094166040830152506060015292915050565b828152604060208201526000612bbf6040830184612ac3565b94935050505056fea264697066735822122006d05624fd1f9a7281bde0ec304342c68c26c5df4aeff9424fa86b99554a81e564736f6c63430008100033

Deployed Bytecode Sourcemap

38898:15370:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39809:28;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;39809:28:0;;;;;;;;39289:59;;;;;;;;;;;;;;;;52694:171;;;;;;;;;;-1:-1:-1;52694:171:0;;;;;:::i;:::-;;:::i;:::-;;5027:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7193:169::-;;;;;;;;;;-1:-1:-1;7193:169:0;;;;;:::i;:::-;;:::i;:::-;;;1694:14:1;;1687:22;1669:41;;1657:2;1642:18;7193:169:0;1529:187:1;39884:35:0;;;;;;;;;;;;;;;;52295:116;;;;;;;;;;-1:-1:-1;52295:116:0;;;;;:::i;:::-;;:::i;38703:186::-;;;;;;;;;;-1:-1:-1;38703:186:0;;;;;:::i;:::-;;:::i;38984:41::-;;;;;;;;;;-1:-1:-1;38984:41:0;;;;-1:-1:-1;;;;;38984:41:0;;;;;;-1:-1:-1;;;;;3170:32:1;;;3152:51;;3140:2;3125:18;38984:41:0;2979:230:1;6146:108:0;;;;;;;;;;-1:-1:-1;6234:12:0;;6146:108;;7844:492;;;;;;;;;;-1:-1:-1;7844:492:0;;;;;:::i;:::-;;:::i;52532:150::-;;;;;;;;;;-1:-1:-1;52532:150:0;;;;;:::i;:::-;;:::i;5989:92::-;;;;;;;;;;-1:-1:-1;5989:92:0;;6072:1;4167:36:1;;4155:2;4140:18;5989:92:0;4025:184:1;40008:35:0;;;;;;;;;;;;;;;;8745:215;;;;;;;;;;-1:-1:-1;8745:215:0;;;;;:::i;:::-;;:::i;38283:26::-;;;;;;;;;;-1:-1:-1;38283:26:0;;;;-1:-1:-1;;;38283:26:0;;;;;;53019:165;;;;;;;;;;-1:-1:-1;53019:165:0;;;;;:::i;:::-;;:::i;39032:38::-;;;;;;;;;;;;;;;39157:40;;;;;;;;;;-1:-1:-1;39157:40:0;;;;-1:-1:-1;;;39157:40:0;;;;;;53772:125;;;;;;;;;;-1:-1:-1;53772:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;53861:28:0;53837:4;53861:28;;;:19;:28;;;;;;;;;53772:125;39355:58;;;;;;;;;;;;;;;;52877:134;;;;;;;;;;-1:-1:-1;52877:134:0;;;;;:::i;:::-;;:::i;39115:33::-;;;;;;;;;;-1:-1:-1;39115:33:0;;;;-1:-1:-1;;;39115:33:0;;;;;;53909:127;;;;;;;;;;-1:-1:-1;53909:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;53999:29:0;53975:4;53999:29;;;:20;:29;;;;;;;;;53909:127;51436:307;;;;;;;;;;-1:-1:-1;51436:307:0;;;;;:::i;:::-;;:::i;39685:34::-;;;;;;;;;;;;;;;;39926:33;;;;;;;;;;;;;;;;6317:127;;;;;;;;;;-1:-1:-1;6317:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;6418:18:0;6391:7;6418:18;;;;;;;;;;;;6317:127;15637:94;;;;;;;;;;;;;:::i;50666:317::-;;;;;;;;;;-1:-1:-1;50666:317:0;;;;;:::i;:::-;;:::i;40050:36::-;;;;;;;;;;;;;;;;39210:70;;;;;;;;;;-1:-1:-1;39210:70:0;;;;-1:-1:-1;;;;;39210:70:0;;;14986:87;;;;;;;;;;-1:-1:-1;15059:6:0;;-1:-1:-1;;;;;15059:6:0;14986:87;;52423:97;;;;;;;;;;-1:-1:-1;52497:15:0;;52423:97;;5246:104;;;;;;;;;;;;;:::i;53192:254::-;;;;;;;;;;-1:-1:-1;53192:254:0;;;;;:::i;:::-;;:::i;9463:413::-;;;;;;;;;;-1:-1:-1;9463:413:0;;;;;:::i;:::-;;:::i;6657:175::-;;;;;;;;;;-1:-1:-1;6657:175:0;;;;;:::i;:::-;;:::i;51217:209::-;;;;;;;;;;-1:-1:-1;51217:209:0;;;;;:::i;:::-;;:::i;39726:34::-;;;;;;;;;;;;;;;;40093:29;;;;;;;;;;;;;;;;40892:58;;;;;;;;;;-1:-1:-1;40892:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39844:31;;;;;;;;;;;;;;;;50082:576;;;;;;;;;;-1:-1:-1;50082:576:0;;;;;:::i;:::-;;:::i;52053:108::-;;;;;;;;;;-1:-1:-1;52136:17:0;;52053:108;;51751:290;;;;;;;;;;-1:-1:-1;51751:290:0;;;;;:::i;:::-;;:::i;39646:32::-;;;;;;;;;;;;;;;;52173:114;;;;;;;;;;-1:-1:-1;52173:114:0;;;;;:::i;:::-;;:::i;54044:171::-;;;;;;;;;;-1:-1:-1;54044:171:0;;;;;:::i;:::-;;:::i;39605:34::-;;;;;;;;;;;;;;;;40129:32;;;;;;;;;;;;;;;;6895:151;;;;;;;;;;-1:-1:-1;6895:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;7011:18:0;;;6984:7;7011:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6895:151;39420:51;;;;;;;;;;;;;;;;39966:35;;;;;;;;;;;;;;;;39767;;;;;;;;;;;;;;;;15886:192;;;;;;;;;;-1:-1:-1;15886:192:0;;;;;:::i;:::-;;:::i;49513:561::-;;;;;;;;;;-1:-1:-1;49513:561:0;;;;;:::i;:::-;;:::i;50991:214::-;;;;;;;;;;-1:-1:-1;50991:214:0;;;;;:::i;:::-;;:::i;38623:72::-;;;;;;;;;;;;;:::i;52694:171::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;;;;;;;;;52792:1:::1;52780:9;:13;52772:47;;;::::0;-1:-1:-1;;;52772:47:0;;7186:2:1;52772:47:0::1;::::0;::::1;7168:21:1::0;7225:2;7205:18;;;7198:30;-1:-1:-1;;;7244:18:1;;;7237:51;7305:18;;52772:47:0::1;6984:345:1::0;52772:47:0::1;52830:15;:27:::0;52694:171::o;5027:100::-;5081:13;5114:5;5107:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5027:100;:::o;7193:169::-;7276:4;7293:39;3830:10;7316:7;7325:6;7293:8;:39::i;:::-;-1:-1:-1;7350:4:0;7193:169;;;;;:::o;52295:116::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;52374:18:::1;:29:::0;52295:116::o;38703:186::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;38790:7:::1;38786:96;38807:6;:13;38803:1;:17;;;38786:96;;;38866:4;38842:10;:21;38853:6;38860:1;38853:9;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;38842:21:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;38842:21:0;:28;;-1:-1:-1;;38842:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38822:3;::::1;::::0;::::1;:::i;:::-;;;;38786:96;;;;38703:186:::0;:::o;7844:492::-;7984:4;8001:36;8011:6;8019:9;8030:6;8001:9;:36::i;:::-;-1:-1:-1;;;;;8077:19:0;;8050:24;8077:19;;;:11;:19;;;;;;;;3830:10;8077:33;;;;;;;;8129:26;;;;8121:79;;;;-1:-1:-1;;;8121:79:0;;8365:2:1;8121:79:0;;;8347:21:1;8404:2;8384:18;;;8377:30;8443:34;8423:18;;;8416:62;-1:-1:-1;;;8494:18:1;;;8487:38;8542:19;;8121:79:0;8163:404:1;8121:79:0;8236:57;8245:6;3830:10;8286:6;8267:16;:25;8236:8;:57::i;:::-;-1:-1:-1;8324:4:0;;7844:492;-1:-1:-1;;;;7844:492:0:o;52532:150::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;52602:14:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;52602:25:0::1;-1:-1:-1::0;;;;52602:25:0;;::::1;;::::0;;52643:31:::1;::::0;::::1;::::0;::::1;::::0;52619:8;1694:14:1;1687:22;1669:41;;1657:2;1642:18;;1529:187;52643:31:0::1;;;;;;;;52532:150:::0;:::o;8745:215::-;3830:10;8833:4;8882:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8882:34:0;;;;;;;;;;8833:4;;8850:80;;8873:7;;8882:47;;8919:10;;8882:47;:::i;:::-;8850:8;:80::i;53019:165::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;53092:30:0::1;;::::0;;;:20:::1;:30;::::0;;;;;;;:37;;53125:4:::1;-1:-1:-1::0;;53092:37:0;;::::1;::::0;::::1;::::0;;;53140:29;;;;;:36;;;;::::1;::::0;;::::1;::::0;;53019:165::o;52877:134::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52965:30:0;;;::::1;;::::0;;;:20:::1;:30;::::0;;;;:38;;-1:-1:-1;;52965:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52877:134::o;51436:307::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;51545:15:::1;::::0;-1:-1:-1;;;;;51545:15:0;;::::1;51523:38:::0;;::::1;::::0;51515:86:::1;;;::::0;-1:-1:-1;;;51515:86:0;;8904:2:1;51515:86:0::1;::::0;::::1;8886:21:1::0;8943:2;8923:18;;;8916:30;8982:34;8962:18;;;8955:62;-1:-1:-1;;;9033:18:1;;;9026:33;9076:19;;51515:86:0::1;8702:399:1::0;51515:86:0::1;51659:15;::::0;51617:59:::1;::::0;-1:-1:-1;;;;;51659:15:0;;::::1;::::0;51617:59;::::1;::::0;::::1;::::0;51659:15:::1;::::0;51617:59:::1;51687:15;:48:::0;;-1:-1:-1;;;;;;51687:48:0::1;-1:-1:-1::0;;;;;51687:48:0;;;::::1;::::0;;;::::1;::::0;;51436:307::o;15637:94::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;15702:21:::1;15720:1;15702:9;:21::i;:::-;15637:94::o:0;50666:317::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;50833:15:::1;:29:::0;;-1:-1:-1;;;;;50833:29:0;;::::1;-1:-1:-1::0;;;;;;50833:29:0;;::::1;;::::0;;;50873:15:::1;:29:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;50913:16:::1;:29:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;50953:9:::1;:22:::0;;;;;::::1;::::0;::::1;;::::0;;50666:317::o;5246:104::-;5302:13;5335:7;5328:14;;;;;:::i;53192:254::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;53299:13:::1;-1:-1:-1::0;;;;;53291:21:0::1;:4;-1:-1:-1::0;;;;;53291:21:0::1;::::0;53283:103:::1;;;::::0;-1:-1:-1;;;53283:103:0;;9308:2:1;53283:103:0::1;::::0;::::1;9290:21:1::0;9347:2;9327:18;;;9320:30;9386:34;9366:18;;;9359:62;9457:34;9437:18;;;9430:62;-1:-1:-1;;;9508:19:1;;;9501:36;9554:19;;53283:103:0::1;9106:473:1::0;53283:103:0::1;53397:41;53426:4;53432:5;53397:28;:41::i;9463:413::-:0;3830:10;9556:4;9600:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9600:34:0;;;;;;;;;;9653:35;;;;9645:85;;;;-1:-1:-1;;;9645:85:0;;9786:2:1;9645:85:0;;;9768:21:1;9825:2;9805:18;;;9798:30;9864:34;9844:18;;;9837:62;-1:-1:-1;;;9915:18:1;;;9908:35;9960:19;;9645:85:0;9584:401:1;9645:85:0;9766:67;3830:10;9789:7;9817:15;9798:16;:34;9766:8;:67::i;:::-;-1:-1:-1;9864:4:0;;9463:413;-1:-1:-1;;;9463:413:0:o;6657:175::-;6743:4;6760:42;3830:10;6784:9;6795:6;6760:9;:42::i;51217:209::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;51291:23:::1;:41:::0;;;51378:22:::1;51396:3;51378:13;6234:12:::0;;;6146:108;51378:13:::1;:17:::0;::::1;:22::i;:::-;51351:23;;:49;;51343:75;;;::::0;-1:-1:-1;;;51343:75:0;;10192:2:1;51343:75:0::1;::::0;::::1;10174:21:1::0;10231:2;10211:18;;;10204:30;-1:-1:-1;;;10250:18:1;;;10243:43;10303:18;;51343:75:0::1;9990:337:1::0;51343:75:0::1;51217:209:::0;:::o;50082:576::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;50239:16:::1;:26:::0;;;50276:14:::1;:26:::0;;;50313:16:::1;:27:::0;;;50351:16:::1;:27:::0;;;50389:17:::1;:27:::0;;;50427:10:::1;:20:::0;;;50474:119:::1;50440:7:::0;50474:103:::1;50409:7:::0;50474:103;50370:8;50474:103;50332:8;50474:103;50258:7;50293:9;50474:20:::1;:36::i;:::-;:40:::0;::::1;:58::i;:119::-;50458:13;:135:::0;;;50629:2:::1;-1:-1:-1::0;50612:19:0::1;50604:45;;;::::0;-1:-1:-1;;;50604:45:0;;10534:2:1;50604:45:0::1;::::0;::::1;10516:21:1::0;10573:2;10553:18;;;10546:30;-1:-1:-1;;;10592:18:1;;;10585:43;10645:18;;50604:45:0::1;10332:337:1::0;50604:45:0::1;50082:576:::0;;;;;;:::o;51751:290::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51844:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;51836:95:::1;;;::::0;-1:-1:-1;;;51836:95:0;;10876:2:1;51836:95:0::1;::::0;::::1;10858:21:1::0;10915:2;10895:18;;;10888:30;10954:34;10934:18;;;10927:62;-1:-1:-1;;;11005:18:1;;;10998:40;11055:19;;51836:95:0::1;10674:406:1::0;51836:95:0::1;-1:-1:-1::0;;;;;51942:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;;;:39;;-1:-1:-1;;51942:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;51999:34;;1669:41:1;;;51999:34:0::1;::::0;1642:18:1;51999:34:0::1;;;;;;;51751:290:::0;;:::o;52173:114::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;52251:17:::1;:28:::0;52173:114::o;54044:171::-;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;54121:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;54121:32:0::1;-1:-1:-1::0;;;;54121:32:0;;::::1;;::::0;;54169:38:::1;::::0;::::1;::::0;::::1;::::0;54145:8;1694:14:1;1687:22;1669:41;;1657:2;1642:18;;1529:187;15886:192:0;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15975:22:0;::::1;15967:73;;;::::0;-1:-1:-1;;;15967:73:0;;11287:2:1;15967:73:0::1;::::0;::::1;11269:21:1::0;11326:2;11306:18;;;11299:30;11365:34;11345:18;;;11338:62;-1:-1:-1;;;11416:18:1;;;11409:36;11462:19;;15967:73:0::1;11085:402:1::0;15967:73:0::1;16051:19;16061:8;16051:9;:19::i;49513:561::-:0;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;49669:15:::1;:25:::0;;;49705:13:::1;:25:::0;;;49741:15:::1;:26:::0;;;49778:15:::1;:26:::0;;;49815:16:::1;:26:::0;;;49852:9:::1;:19:::0;;;49897:113:::1;49864:7:::0;49897:98:::1;49834:7:::0;49897:98;49796:8;49897:98;49759:8;49897:98;49687:7;49721:9;49897:19:::1;:34::i;:113::-;49882:12;:128:::0;;;-1:-1:-1;50030:18:0::1;50022:44;;;::::0;-1:-1:-1;;;50022:44:0;;10534:2:1;50022:44:0::1;::::0;::::1;10516:21:1::0;10573:2;10553:18;;;10546:30;-1:-1:-1;;;10592:18:1;;;10585:43;10645:18;;50022:44:0::1;10332:337:1::0;50991:214:0;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;51067:24:::1;:43:::0;;;51157:22:::1;51175:3;51157:13;6234:12:::0;;;6146:108;51157:22:::1;51129:24;;:50;;51121:76;;;::::0;-1:-1:-1;;;51121:76:0;;10192:2:1;51121:76:0::1;::::0;::::1;10174:21:1::0;10231:2;10211:18;;;10204:30;-1:-1:-1;;;10250:18:1;;;10243:43;10303:18;;51121:76:0::1;9990:337:1::0;38623:72:0;15059:6;;-1:-1:-1;;;;;15059:6:0;3830:10;15206:23;15198:68;;;;-1:-1:-1;;;15198:68:0;;;;;;;:::i;:::-;38674:6:::1;:13:::0;;-1:-1:-1;;;;38674:13:0::1;-1:-1:-1::0;;;38674:13:0::1;::::0;;38623:72::o;12236:380::-;-1:-1:-1;;;;;12372:19:0;;12364:68;;;;-1:-1:-1;;;12364:68:0;;11694:2:1;12364:68:0;;;11676:21:1;11733:2;11713:18;;;11706:30;11772:34;11752:18;;;11745:62;-1:-1:-1;;;11823:18:1;;;11816:34;11867:19;;12364:68:0;11492:400:1;12364:68:0;-1:-1:-1;;;;;12451:21:0;;12443:68;;;;-1:-1:-1;;;12443:68:0;;12099:2:1;12443:68:0;;;12081:21:1;12138:2;12118:18;;;12111:30;12177:34;12157:18;;;12150:62;-1:-1:-1;;;12228:18:1;;;12221:32;12270:19;;12443:68:0;11897:398:1;12443:68:0;-1:-1:-1;;;;;12524:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12576:32;;160:25:1;;;12576:32:0;;133:18:1;12576:32:0;;;;;;;12236:380;;;:::o;43284:2208::-;38425:6;;43384:4;;43390:2;;-1:-1:-1;;;38425:6:0;;;;;:26;;-1:-1:-1;;;;;;38435:16:0;;;;;;:10;:16;;;;;;;;38425:26;:44;;;-1:-1:-1;;;;;;38455:14:0;;;;;;:10;:14;;;;;;;;38425:44;38417:65;;;;-1:-1:-1;;;38417:65:0;;12502:2:1;38417:65:0;;;12484:21:1;12541:1;12521:18;;;12514:29;-1:-1:-1;;;12559:18:1;;;12552:38;12607:18;;38417:65:0;12300:331:1;38417:65:0;-1:-1:-1;;;;;43431:18:0;::::1;43423:68;;;;-1:-1:-1::0;;;43423:68:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43510:16:0;::::1;43502:64;;;;-1:-1:-1::0;;;43502:64:0::1;;;;;;;:::i;:::-;43582:6;43592:1;43582:11:::0;43579:92:::1;;43610:28;43626:4;43632:2;43636:1;43610:15;:28::i;:::-;43653:7;;43579:92;-1:-1:-1::0;;;;;43694:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;::::1;;:64:::0;::::1;;;-1:-1:-1::0;;;;;;43731:26:0;::::1;;::::0;;;:20:::1;:26;::::0;;;;;::::1;;43730:27;43694:64;:95;;;;-1:-1:-1::0;;;;;;43764:24:0;::::1;;::::0;;;:20:::1;:24;::::0;;;;;::::1;;43763:25;43694:95;43691:215;;;43823:23;;43813:6;:33;;43805:89;;;::::0;-1:-1:-1;;;43805:89:0;;13648:2:1;43805:89:0::1;::::0;::::1;13630:21:1::0;13687:2;13667:18;;;13660:30;13726:34;13706:18;;;13699:62;-1:-1:-1;;;13777:18:1;;;13770:41;13828:19;;43805:89:0::1;13446:407:1::0;43805:89:0::1;-1:-1:-1::0;;;;;43921:29:0;::::1;;::::0;;;:25:::1;:29;::::0;;;;;::::1;;:62:::0;::::1;;;-1:-1:-1::0;;;;;;43956:26:0;::::1;;::::0;;;:20:::1;:26;::::0;;;;;::::1;;43955:27;43921:62;:93;;;;-1:-1:-1::0;;;;;;43989:24:0;::::1;;::::0;;;:20:::1;:24;::::0;;;;;::::1;;43988:25;43921:93;43918:215;;;44048:24;;44038:6;:34;;44030:91;;;::::0;-1:-1:-1;;;44030:91:0;;14060:2:1;44030:91:0::1;::::0;::::1;14042:21:1::0;14099:2;14079:18;;;14072:30;14138:34;14118:18;;;14111:62;-1:-1:-1;;;14189:18:1;;;14182:42;14241:19;;44030:91:0::1;13858:408:1::0;44030:91:0::1;44201:4;44152:28;6418:18:::0;;;;;;;;;;;44279::::1;::::0;44321:16:::1;::::0;44255:42;;::::1;;::::0;-1:-1:-1;;;44321:16:0;::::1;;;44320:17;:50:::0;::::1;;;-1:-1:-1::0;;;;;;44341:29:0;::::1;;::::0;;;:25:::1;:29;::::0;;;;;::::1;;44320:50;:75;;;;-1:-1:-1::0;44374:21:0::1;::::0;-1:-1:-1;;;44374:21:0;::::1;;;44320:75;44317:633;;;44415:19;44412:155;;;44478:18;;44455:41;;44515:36;44530:20;44515:14;:36::i;:::-;44653:14;::::0;44613:21:::1;::::0;-1:-1:-1;;;44653:14:0;::::1;;;:45:::0;::::1;;;;44681:17;;44671:7;:27;44653:45;44649:290;;;44751:17;;44741:7;:27;44737:187;;;-1:-1:-1::0;44803:17:0::1;::::0;44887:15:::1;::::0;44861:43:::1;::::0;44875:28:::1;::::0;44803:17;;44875:11:::1;:28::i;:::-;44861:13;:43::i;:::-;44397:553;44317:633;-1:-1:-1::0;;;;;45052:25:0;::::1;;::::0;;;:19:::1;:25:::0;;;;;;::::1;;45051:26;:54:::0;::::1;;;-1:-1:-1::0;;;;;;45082:23:0;::::1;;::::0;;;:19:::1;:23:::0;;;;;;::::1;;45081:24;45051:54;45048:389;;;45122:12;45137:33;45166:3;45137:24;45148:12;;45137:6;:10;;:24;;;;:::i;:33::-;-1:-1:-1::0;;;;;45188:29:0;::::1;;::::0;;;:25:::1;:29;::::0;;;;;45122:48;;-1:-1:-1;45188:29:0::1;;45185:110;;;45245:34;45275:3;45245:25;45256:13;;45245:6;:10;;:25;;;;:::i;:34::-;45238:41;;45185:110;45315:16;:6:::0;45326:4;45315:10:::1;:16::i;:::-;45306:25;;45346:42;45362:4;45376;45383;45346:15;:42::i;:::-;45107:330;45048:389;45449:33;45465:4;45471:2;45475:6;45449:15;:33::i;:::-;43412:2080;;38493:1;43284:2208:::0;;;;;:::o;16086:173::-;16161:6;;;-1:-1:-1;;;;;16178:17:0;;;-1:-1:-1;;;;;;16178:17:0;;;;;;;16211:40;;16161:6;;;16178:17;16161:6;;16211:40;;16142:16;;16211:40;16131:128;16086:173;:::o;53454:306::-;-1:-1:-1;;;;;53545:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;53537:109;;;;-1:-1:-1;;;53537:109:0;;14473:2:1;53537:109:0;;;14455:21:1;14512:2;14492:18;;;14485:30;14551:34;14531:18;;;14524:62;14622:26;14602:18;;;14595:54;14666:19;;53537:109:0;14271:420:1;53537:109:0;-1:-1:-1;;;;;53657:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;53657:39:0;;;;;;;;;;53712:40;;53657:39;;:31;53712:40;;;53454:306;;:::o;27277:98::-;27335:7;27362:5;27366:1;27362;:5;:::i;:::-;27355:12;27277:98;-1:-1:-1;;;27277:98:0:o;26140:::-;26198:7;26225:5;26229:1;26225;:5;:::i;10366:733::-;-1:-1:-1;;;;;10506:20:0;;10498:70;;;;-1:-1:-1;;;10498:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10587:23:0;;10579:71;;;;-1:-1:-1;;;10579:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10747:17:0;;10723:21;10747:17;;;;;;;;;;;10783:23;;;;10775:74;;;;-1:-1:-1;;;10775:74:0;;15120:2:1;10775:74:0;;;15102:21:1;15159:2;15139:18;;;15132:30;15198:34;15178:18;;;15171:62;-1:-1:-1;;;15249:18:1;;;15242:36;15295:19;;10775:74:0;14918:402:1;10775:74:0;-1:-1:-1;;;;;10885:17:0;;;:9;:17;;;;;;;;;;;10905:22;;;10885:42;;10949:20;;;;;;;;:30;;10921:6;;10885:9;10949:30;;10921:6;;10949:30;:::i;:::-;;;;;;;;11014:9;-1:-1:-1;;;;;10997:35:0;11006:6;-1:-1:-1;;;;;10997:35:0;;11025:6;10997:35;;;;160:25:1;;148:2;133:18;;14:177;10997:35:0;;;;;;;;10487:612;10366:733;;;:::o;45500:1140::-;41650:16;:23;;-1:-1:-1;;;;41650:23:0;-1:-1:-1;;;41650:23:0;;;45658:13:::1;::::0;45636:16:::1;::::0;41650:23;;45611:61:::1;::::0;:42:::1;::::0;:20;;:24:::1;:42::i;:61::-;45585:87:::0;-1:-1:-1;45683:20:0::1;45706:41;:20:::0;45585:87;45706:24:::1;:41::i;:::-;45683:64:::0;-1:-1:-1;45809:12:0::1;45824:22;:15:::0;45844:1:::1;45824:19;:22::i;:::-;45809:37:::0;-1:-1:-1;45857:17:0::1;45877:25;:15:::0;45809:37;45877:19:::1;:25::i;:::-;45857:45:::0;-1:-1:-1;46205:21:0::1;46271:37;46288:4:::0;46302::::1;46271:16;:37::i;:::-;46369:18;46390:41;:21;46416:14:::0;46390:25:::1;:41::i;:::-;46369:62;;46481:35;46494:9;46505:10;46481:12;:35::i;:::-;46529:34;46550:12;46529:20;:34::i;:::-;46589:43;::::0;;15527:25:1;;;15583:2;15568:18;;15561:34;;;15611:18;;;15604:34;;;46589:43:0::1;::::0;15515:2:1;15500:18;46589:43:0::1;;;;;;;-1:-1:-1::0;;41696:16:0;:24;;-1:-1:-1;;;;41696:24:0;;;-1:-1:-1;;;;;45500:1140:0:o;48078:135::-;41650:16;:23;;-1:-1:-1;;;;41650:23:0;-1:-1:-1;;;41650:23:0;;;48149:10;;48145:61:::1;;48173:24;48190:6;48173:16;:24::i;:::-;-1:-1:-1::0;41696:16:0;:24;;-1:-1:-1;;;;41696:24:0;;;48078:135::o;26878:98::-;26936:7;26963:5;26967:1;26963;:5;:::i;26521:98::-;26579:7;26606:5;26610:1;26606;:5;:::i;48810:695::-;48973:16;;;48987:1;48973:16;;;;;;;;48949:21;;48973:16;;;;;;;;;;-1:-1:-1;48973:16:0;48949:40;;49018:4;49000;49005:1;49000:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49000:23:0;;;:7;;;;;;;;;;:23;;;;49044:15;;:22;;;-1:-1:-1;;;49044:22:0;;;;:15;;;;;:20;;:22;;;;;49000:7;;49044:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49034:4;49039:1;49034:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49034:32:0;;;:7;;;;;;;;;;:32;;;;49115:15;;49100:4;6984:7;7011:18;;;:11;:18;;;;;;49115:15;;;;7011:27;;;;;;49135:11;-1:-1:-1;49079:156:0;;;49193:15;;49161:62;;49178:4;;-1:-1:-1;;;;;49193:15:0;-1:-1:-1;;49161:8:0;:62::i;:::-;49273:15;;:214;;-1:-1:-1;;;49273:214:0;;-1:-1:-1;;;;;49273:15:0;;;;:66;;:214;;49354:11;;49273:15;;49424:4;;49443:3;;49461:15;;49273:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47552:513;47732:15;;47700:62;;47717:4;;-1:-1:-1;;;;;47732:15:0;47750:11;47700:8;:62::i;:::-;47805:15;;-1:-1:-1;;;;;47805:15:0;:31;47844:9;47877:4;47897:11;47805:15;;48009:7;15059:6;;-1:-1:-1;;;;;15059:6:0;;14986:87;48009:7;47805:252;;;;;;-1:-1:-1;;;;;;47805:252:0;;;-1:-1:-1;;;;;17623:15:1;;;47805:252:0;;;17605:34:1;17655:18;;;17648:34;;;;17698:18;;;17691:34;;;;17741:18;;;17734:34;17805:15;;;17784:19;;;17777:44;48031:15:0;17837:19:1;;;17830:35;17539:19;;47805:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;46648:896::-;46746:21;46778:44;46795:11;46816:4;46778:16;:44::i;:::-;46833:24;46860:44;:21;46886:17;46860:25;:44::i;:::-;46833:71;;46915:22;46940:79;46983:35;47001:16;;46983:13;;:17;;:35;;;;:::i;:::-;46961:16;;46940:38;;:16;;:20;:38::i;:79::-;46915:104;;47030:22;47055:79;47098:35;47116:16;;47098:13;;:17;;:35;;;;:::i;:::-;47076:16;;47055:38;;:16;;:20;:38::i;:79::-;47030:104;;47145:16;47164:80;47208:35;47226:16;;47208:13;;:17;;:35;;;;:::i;:::-;47185:17;;47164:39;;:16;;:20;:39::i;:80::-;47145:99;;47255:16;47274:73;47311:35;47329:16;;47311:13;;:17;;:35;;;;:::i;:::-;47295:10;;47274:32;;:16;;:20;:32::i;:73::-;47358:15;;:40;;47255:92;;-1:-1:-1;;;;;;47358:15:0;;:40;;;;;47383:14;;47358:15;:40;:15;:40;47383:14;47358:15;:40;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47409:15:0;;:40;;-1:-1:-1;;;;;47409:15:0;;;;:40;;;;;47434:14;;47409:15;:40;:15;:40;47434:14;47409:15;:40;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47460:16:0;;:35;;-1:-1:-1;;;;;47460:16:0;;;;:35;;;;;47486:8;;47460:16;:35;:16;:35;47486:8;47460:16;:35;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47506:9:0;;:28;;-1:-1:-1;;;;;47506:9:0;;;;:28;;;;;47525:8;;47506:9;:28;:9;:28;47525:8;47506:9;:28;;;;;;;;;;;;;;;;;;;;;46707:837;;;;;;46648:896;:::o;48225:577::-;48370:16;;;48384:1;48370:16;;;;;;;;48346:21;;48370:16;;;;;;;;-1:-1:-1;;48407:15:0;;:22;;;-1:-1:-1;;;48407:22:0;;;;48346:40;;-1:-1:-1;;;;;;48407:15:0;;;;:20;;-1:-1:-1;48407:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48397:4;48402:1;48397:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;48397:32:0;;;-1:-1:-1;;;;;48397:32:0;;;;;48458:4;48440;48445:1;48440:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48440:23:0;;;:7;;;;;;;;;:23;48500:15;;48662:10;;48500:15;;;;:66;;48574:6;;48500:15;;48643:4;;48662:10;48703:24;:15;48723:3;48703:19;:24::i;:::-;48500:238;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48764:30;48781:6;48789:4;48764:30;;;;;;;:::i;:::-;;;;;;;;48275:527;48225:577;:::o;196:180:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;381:548::-;493:4;522:2;551;540:9;533:21;583:6;577:13;626:6;621:2;610:9;606:18;599:34;651:1;661:140;675:6;672:1;669:13;661:140;;;770:14;;;766:23;;760:30;736:17;;;755:2;732:26;725:66;690:10;;661:140;;;665:3;850:1;845:2;836:6;825:9;821:22;817:31;810:42;920:2;913;909:7;904:2;896:6;892:15;888:29;877:9;873:45;869:54;861:62;;;;381:548;;;;:::o;934:131::-;-1:-1:-1;;;;;1009:31:1;;999:42;;989:70;;1055:1;1052;1045:12;1070:134;1138:20;;1167:31;1138:20;1167:31;:::i;:::-;1070:134;;;:::o;1209:315::-;1277:6;1285;1338:2;1326:9;1317:7;1313:23;1309:32;1306:52;;;1354:1;1351;1344:12;1306:52;1393:9;1380:23;1412:31;1437:5;1412:31;:::i;:::-;1462:5;1514:2;1499:18;;;;1486:32;;-1:-1:-1;;;1209:315:1:o;1721:127::-;1782:10;1777:3;1773:20;1770:1;1763:31;1813:4;1810:1;1803:15;1837:4;1834:1;1827:15;1853:1121;1937:6;1968:2;2011;1999:9;1990:7;1986:23;1982:32;1979:52;;;2027:1;2024;2017:12;1979:52;2067:9;2054:23;2096:18;2137:2;2129:6;2126:14;2123:34;;;2153:1;2150;2143:12;2123:34;2191:6;2180:9;2176:22;2166:32;;2236:7;2229:4;2225:2;2221:13;2217:27;2207:55;;2258:1;2255;2248:12;2207:55;2294:2;2281:16;2316:2;2312;2309:10;2306:36;;;2322:18;;:::i;:::-;2368:2;2365:1;2361:10;2400:2;2394:9;2463:2;2459:7;2454:2;2450;2446:11;2442:25;2434:6;2430:38;2518:6;2506:10;2503:22;2498:2;2486:10;2483:18;2480:46;2477:72;;;2529:18;;:::i;:::-;2565:2;2558:22;2615:18;;;2649:15;;;;-1:-1:-1;2691:11:1;;;2687:20;;;2719:19;;;2716:39;;;2751:1;2748;2741:12;2716:39;2775:11;;;;2795:148;2811:6;2806:3;2803:15;2795:148;;;2877:23;2896:3;2877:23;:::i;:::-;2865:36;;2828:12;;;;2921;;;;2795:148;;;2962:6;1853:1121;-1:-1:-1;;;;;;;;1853:1121:1:o;3214:456::-;3291:6;3299;3307;3360:2;3348:9;3339:7;3335:23;3331:32;3328:52;;;3376:1;3373;3366:12;3328:52;3415:9;3402:23;3434:31;3459:5;3434:31;:::i;:::-;3484:5;-1:-1:-1;3541:2:1;3526:18;;3513:32;3554:33;3513:32;3554:33;:::i;:::-;3214:456;;3606:7;;-1:-1:-1;;;3660:2:1;3645:18;;;;3632:32;;3214:456::o;3675:160::-;3740:20;;3796:13;;3789:21;3779:32;;3769:60;;3825:1;3822;3815:12;3840:180;3896:6;3949:2;3937:9;3928:7;3924:23;3920:32;3917:52;;;3965:1;3962;3955:12;3917:52;3988:26;4004:9;3988:26;:::i;4214:247::-;4273:6;4326:2;4314:9;4305:7;4301:23;4297:32;4294:52;;;4342:1;4339;4332:12;4294:52;4381:9;4368:23;4400:31;4425:5;4400:31;:::i;4674:315::-;4739:6;4747;4800:2;4788:9;4779:7;4775:23;4771:32;4768:52;;;4816:1;4813;4806:12;4768:52;4855:9;4842:23;4874:31;4899:5;4874:31;:::i;:::-;4924:5;-1:-1:-1;4948:35:1;4979:2;4964:18;;4948:35;:::i;:::-;4938:45;;4674:315;;;;;:::o;4994:703::-;5112:6;5120;5128;5136;5189:3;5177:9;5168:7;5164:23;5160:33;5157:53;;;5206:1;5203;5196:12;5157:53;5245:9;5232:23;5264:31;5289:5;5264:31;:::i;:::-;5314:5;-1:-1:-1;5371:2:1;5356:18;;5343:32;5384:33;5343:32;5384:33;:::i;:::-;5436:7;-1:-1:-1;5495:2:1;5480:18;;5467:32;5508:33;5467:32;5508:33;:::i;:::-;5560:7;-1:-1:-1;5619:2:1;5604:18;;5591:32;5632:33;5591:32;5632:33;:::i;:::-;4994:703;;;;-1:-1:-1;4994:703:1;;-1:-1:-1;;4994:703:1:o;5702:523::-;5806:6;5814;5822;5830;5838;5846;5899:3;5887:9;5878:7;5874:23;5870:33;5867:53;;;5916:1;5913;5906:12;5867:53;-1:-1:-1;;5939:23:1;;;6009:2;5994:18;;5981:32;;-1:-1:-1;6060:2:1;6045:18;;6032:32;;6111:2;6096:18;;6083:32;;-1:-1:-1;6162:3:1;6147:19;;6134:33;;-1:-1:-1;6214:3:1;6199:19;6186:33;;-1:-1:-1;5702:523:1;-1:-1:-1;5702:523:1:o;6230:388::-;6298:6;6306;6359:2;6347:9;6338:7;6334:23;6330:32;6327:52;;;6375:1;6372;6365:12;6327:52;6414:9;6401:23;6433:31;6458:5;6433:31;:::i;:::-;6483:5;-1:-1:-1;6540:2:1;6525:18;;6512:32;6553:33;6512:32;6553:33;:::i;:::-;6605:7;6595:17;;;6230:388;;;;;:::o;6623:356::-;6825:2;6807:21;;;6844:18;;;6837:30;6903:34;6898:2;6883:18;;6876:62;6970:2;6955:18;;6623:356::o;7334:380::-;7413:1;7409:12;;;;7456;;;7477:61;;7531:4;7523:6;7519:17;7509:27;;7477:61;7584:2;7576:6;7573:14;7553:18;7550:38;7547:161;;7630:10;7625:3;7621:20;7618:1;7611:31;7665:4;7662:1;7655:15;7693:4;7690:1;7683:15;7547:161;;7334:380;;;:::o;7719:127::-;7780:10;7775:3;7771:20;7768:1;7761:31;7811:4;7808:1;7801:15;7835:4;7832:1;7825:15;7851:127;7912:10;7907:3;7903:20;7900:1;7893:31;7943:4;7940:1;7933:15;7967:4;7964:1;7957:15;7983:175;8020:3;8064:4;8057:5;8053:16;8093:4;8084:7;8081:17;8078:43;;8101:18;;:::i;:::-;8150:1;8137:15;;7983:175;-1:-1:-1;;7983:175:1:o;8572:125::-;8637:9;;;8658:10;;;8655:36;;;8671:18;;:::i;12636:401::-;12838:2;12820:21;;;12877:2;12857:18;;;12850:30;12916:34;12911:2;12896:18;;12889:62;-1:-1:-1;;;12982:2:1;12967:18;;12960:35;13027:3;13012:19;;12636:401::o;13042:399::-;13244:2;13226:21;;;13283:2;13263:18;;;13256:30;13322:34;13317:2;13302:18;;13295:62;-1:-1:-1;;;13388:2:1;13373:18;;13366:33;13431:3;13416:19;;13042:399::o;14696:217::-;14736:1;14762;14752:132;;14806:10;14801:3;14797:20;14794:1;14787:31;14841:4;14838:1;14831:15;14869:4;14866:1;14859:15;14752:132;-1:-1:-1;14898:9:1;;14696:217::o;15649:168::-;15689:7;15755:1;15751;15747:6;15743:14;15740:1;15737:21;15732:1;15725:9;15718:17;15714:45;15711:71;;;15762:18;;:::i;:::-;-1:-1:-1;15802:9:1;;15649:168::o;15822:128::-;15889:9;;;15910:11;;;15907:37;;;15924:18;;:::i;15955:251::-;16025:6;16078:2;16066:9;16057:7;16053:23;16049:32;16046:52;;;16094:1;16091;16084:12;16046:52;16126:9;16120:16;16145:31;16170:5;16145:31;:::i;16211:461::-;16264:3;16302:5;16296:12;16329:6;16324:3;16317:19;16355:4;16384:2;16379:3;16375:12;16368:19;;16421:2;16414:5;16410:14;16442:1;16452:195;16466:6;16463:1;16460:13;16452:195;;;16531:13;;-1:-1:-1;;;;;16527:39:1;16515:52;;16587:12;;;;16622:15;;;;16563:1;16481:9;16452:195;;;-1:-1:-1;16663:3:1;;16211:461;-1:-1:-1;;;;;16211:461:1:o;16677:582::-;16976:6;16965:9;16958:25;17019:6;17014:2;17003:9;16999:18;16992:34;17062:3;17057:2;17046:9;17042:18;17035:31;16939:4;17083:57;17135:3;17124:9;17120:19;17112:6;17083:57;:::i;:::-;-1:-1:-1;;;;;17176:32:1;;;;17171:2;17156:18;;17149:60;-1:-1:-1;17240:3:1;17225:19;17218:35;17075:65;16677:582;-1:-1:-1;;;16677:582:1:o;17876:306::-;17964:6;17972;17980;18033:2;18021:9;18012:7;18008:23;18004:32;18001:52;;;18049:1;18046;18039:12;18001:52;18078:9;18072:16;18062:26;;18128:2;18117:9;18113:18;18107:25;18097:35;;18172:2;18161:9;18157:18;18151:25;18141:35;;17876:306;;;;;:::o;18187:510::-;18458:6;18447:9;18440:25;18501:3;18496:2;18485:9;18481:18;18474:31;18421:4;18522:57;18574:3;18563:9;18559:19;18551:6;18522:57;:::i;:::-;-1:-1:-1;;;;;18615:32:1;;;;18610:2;18595:18;;18588:60;-1:-1:-1;18679:2:1;18664:18;18657:34;18514:65;18187:510;-1:-1:-1;;18187:510:1:o;18702:332::-;18909:6;18898:9;18891:25;18952:2;18947;18936:9;18932:18;18925:30;18872:4;18972:56;19024:2;19013:9;19009:18;19001:6;18972:56;:::i;:::-;18964:64;18702:332;-1:-1:-1;;;;18702:332:1:o

Swarm Source

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