ETH Price: $3,457.73 (+1.74%)

Token

COSMOS (COSMOS)
 

Overview

Max Total Supply

1,000,000,000 COSMOS

Holders

49

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
7,519,999.06 COSMOS

Value
$0.00
0x9b798b1e2383ecc80787f3f156b1e07046fead77
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:
COSMOS

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-26
*/

/**
*/

// 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 COSMOS 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 = 8000000 * (10**9);
    uint256 public maxBuyTransactionAmount = 8000000 * (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 = 1;
    uint256 public totalBuyFees = 6;

    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(0x7eeEcB80E318154a7994847b3A87C2EF9F8b015e);
    address payable private communityWallet = payable(0xc08865Dc23A94EFA326F8bbb37c29EF5aD4AEcbf);
    address payable private operationsWallet = payable(0x3F607Df0235672517FcbBC338Ad4e34e71ef9dF6);
    address payable private devWallet = payable(0xB136a4804d9b6190fdbc2448994ec53C97E5B886);

    // 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("COSMOS", "COSMOS") {
    	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 <= 99, "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"}]

60a06040526005805460ff60a01b191690556007805461010160a81b61ffff60a81b19909116179055600880546001600160a01b031990811661dead17909155661c6bf5263400006009819055600a55651b48eb57e000600b5567016345785d8a0000600c556014600d8190556001600e819055600f819055601081905560118190556012819055601381905560069182905560158190556016819055601781905560188190556019819055601a55601b55601c80548216737eeecb80e318154a7994847b3a87c2ef9f8b015e179055601d8054821673c08865dc23a94efa326f8bbb37c29ef5ad4aecbf179055601e80548216733f607df0235672517fcbbc338ad4e34e71ef9df6179055601f805490911673b136a4804d9b6190fdbc2448994ec53c97e5b8861790553480156200013757600080fd5b50604080518082018252600680825265434f534d4f5360d01b6020808401829052845180860190955291845290830152906003620001768382620008d8565b506004620001858282620008d8565b505050620001a26200019c620004c760201b60201c565b620004cb565b3360009081526006602090815260408083208054600160ff19918216811790925530855282852080549091169091179055805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9392849263c45a015592600480830193928290030181865afa15801562000221573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002479190620009a4565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000295573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bb9190620009a4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f9190620009a4565b600780546001600160a01b0319166001600160a01b038581169190911790915581166080529050620003638160016200051d565b620003826200037a6005546001600160a01b031690565b60016200060d565b601c546200039b906001600160a01b031660016200060d565b601d54620003b4906001600160a01b031660016200060d565b601e54620003cd906001600160a01b031660016200060d565b601f54620003e6906001600160a01b031660016200060d565b620003f33060016200060d565b6001602160006200040c6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526021909352818320805485166001908117909155601c54821684528284208054861682179055601d54821684528284208054861682179055601e54821684528284208054861682179055601f54909116835291208054909216179055620004bf620004b06005546001600160a01b031690565b670de0b6b3a76400006200074a565b5050620009fe565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503620005b95760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620006695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620005b0565b6001600160a01b038216600090815260208052604090205481151560ff909116151503620006ed5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401620005b0565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007a25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005b0565b8060026000828254620007b69190620009d6565b90915550506001600160a01b03821660009081526020819052604081208054839290620007e5908490620009d6565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200085f57607f821691505b6020821081036200088057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200082f57600081815260208120601f850160051c81016020861015620008af5750805b601f850160051c820191505b81811015620008d057828155600101620008bb565b505050505050565b81516001600160401b03811115620008f457620008f462000834565b6200090c816200090584546200084a565b8462000886565b602080601f8311600181146200094457600084156200092b5750858301515b600019600386901b1c1916600185901b178555620008d0565b600085815260208120601f198616915b82811015620009755788860151825594840194600190910190840162000954565b5085821015620009945787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009b757600080fd5b81516001600160a01b0381168114620009cf57600080fd5b9392505050565b80820180821115620009f857634e487b7160e01b600052601160045260246000fd5b92915050565b608051612bfd62000a21600039600081816105d701526110ce0152612bfd6000f3fe6080604052600436106103905760003560e01c8063743e540d116101dc578063bdc653ef11610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610a68578063f74c9f4714610a88578063fb17e6dc14610aa8578063fb201b1d14610ac857600080fd5b8063dd62ed3e146109e0578063e2f4560514610a26578063e7f444b314610a3c578063efcc1b2f14610a5257600080fd5b8063c2b3e1c2116100dc578063c2b3e1c214610974578063c49b9a8014610994578063ccb61358146109b4578063d0a39814146109ca57600080fd5b8063bdc653ef14610929578063c02466681461093e578063c05e8fa11461095e57600080fd5b8063a457c2d71161017a578063b45e83f811610149578063b45e83f8146108ad578063b62496f5146108c3578063b9e93700146108f3578063ba876bb91461090957600080fd5b8063a457c2d714610837578063a9059cbb14610857578063a946163014610877578063afc168751461089757600080fd5b80638da5cb5b116101b65780638da5cb5b146107cf5780638ee10823146107ed57806395d89b41146108025780639a7a23d61461081757600080fd5b8063743e540d146107795780637506cbd81461079957806385141a77146107af57600080fd5b806339509351116102c15780635b89029c1161025f578063680789521161022e57806368078952146107025780636be638551461071857806370a082311461072e578063715018a61461076457600080fd5b80635b89029c146106685780636053a0e314610688578063658c27a9146106a957806365b8dbc0146106e257600080fd5b806349bd5a5e1161029b57806349bd5a5e146105c55780634a74bb02146105f95780634fbee1931461061a5780635aa821a91461065257600080fd5b8063395093511461056457806347535d7b1461058457806349928a50146105a557600080fd5b80630b6bb6f51161032e57806323b872dd1161030857806323b872dd146104f257806329370cc614610512578063313ce56714610532578063330f829d1461054e57600080fd5b80630b6bb6f5146104855780631694505e146104a557806318160ddd146104dd57600080fd5b806306fdde031161036a57806306fdde03146103fd578063095ea7b31461041f578063099d0d301461044f57806309e89af71461046557600080fd5b806301143fea1461039c57806302259e9e146103c5578063068dde72146103db57600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b260135481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b506103b260095481565b3480156103e757600080fd5b506103fb6103f63660046125d4565b610add565b005b34801561040957600080fd5b50610412610b5d565b6040516103bc91906125ed565b34801561042b57600080fd5b5061043f61043a366004612660565b610bef565b60405190151581526020016103bc565b34801561045b57600080fd5b506103b260155481565b34801561047157600080fd5b506103fb6104803660046125d4565b610c06565b34801561049157600080fd5b506103fb6104a03660046126a2565b610c35565b3480156104b157600080fd5b506007546104c5906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b3480156104e957600080fd5b506002546103b2565b3480156104fe57600080fd5b5061043f61050d366004612767565b610cd1565b34801561051e57600080fd5b506103fb61052d3660046127b8565b610d7b565b34801561053e57600080fd5b50604051600981526020016103bc565b34801561055a57600080fd5b506103b260185481565b34801561057057600080fd5b5061043f61057f366004612660565b610dfd565b34801561059057600080fd5b5060055461043f90600160a01b900460ff1681565b3480156105b157600080fd5b506103fb6105c03660046127d3565b610e39565b3480156105d157600080fd5b506104c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561060557600080fd5b5060075461043f90600160b01b900460ff1681565b34801561062657600080fd5b5061043f6106353660046127d3565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561065e57600080fd5b506103b2600a5481565b34801561067457600080fd5b506103fb6106833660046127f0565b610e9d565b34801561069457600080fd5b5060075461043f90600160a81b900460ff1681565b3480156106b557600080fd5b5061043f6106c43660046127d3565b6001600160a01b031660009081526021602052604090205460ff1690565b3480156106ee57600080fd5b506103fb6106fd3660046127d3565b610ef2565b34801561070e57600080fd5b506103b260105481565b34801561072457600080fd5b506103b260165481565b34801561073a57600080fd5b506103b26107493660046127d3565b6001600160a01b031660009081526020819052604090205490565b34801561077057600080fd5b506103fb610fe3565b34801561078557600080fd5b506103fb610794366004612825565b611019565b3480156107a557600080fd5b506103b260195481565b3480156107bb57600080fd5b506008546104c5906001600160a01b031681565b3480156107db57600080fd5b506005546001600160a01b03166104c5565b3480156107f957600080fd5b50600d546103b2565b34801561080e57600080fd5b50610412611093565b34801561082357600080fd5b506103fb6108323660046127f0565b6110a2565b34801561084357600080fd5b5061043f610852366004612660565b61118b565b34801561086357600080fd5b5061043f610872366004612660565b611224565b34801561088357600080fd5b506103fb6108923660046125d4565b611231565b3480156108a357600080fd5b506103b260115481565b3480156108b957600080fd5b506103b2601a5481565b3480156108cf57600080fd5b5061043f6108de3660046127d3565b60226020526000908152604090205460ff1681565b3480156108ff57600080fd5b506103b260145481565b34801561091557600080fd5b506103fb610924366004612881565b6112b8565b34801561093557600080fd5b50600c546103b2565b34801561094a57600080fd5b506103fb6109593660046127f0565b611367565b34801561096a57600080fd5b506103b2600f5481565b34801561098057600080fd5b506103fb61098f3660046125d4565b611470565b3480156109a057600080fd5b506103fb6109af3660046127b8565b61149f565b3480156109c057600080fd5b506103b2600e5481565b3480156109d657600080fd5b506103b2601b5481565b3480156109ec57600080fd5b506103b26109fb3660046128c4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3257600080fd5b506103b2600b5481565b348015610a4857600080fd5b506103b260175481565b348015610a5e57600080fd5b506103b260125481565b348015610a7457600080fd5b506103fb610a833660046127d3565b611516565b348015610a9457600080fd5b506103fb610aa3366004612881565b6115ae565b348015610ab457600080fd5b506103fb610ac33660046125d4565b61164d565b348015610ad457600080fd5b506103fb6116cb565b6005546001600160a01b03163314610b105760405162461bcd60e51b8152600401610b07906128fd565b60405180910390fd5b60008111610b585760405162461bcd60e51b815260206004820152601560248201527463616e6e6f7420626520736574206173207a65726f60581b6044820152606401610b07565b600d55565b606060038054610b6c90612932565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9890612932565b8015610be55780601f10610bba57610100808354040283529160200191610be5565b820191906000526020600020905b815481529060010190602001808311610bc857829003601f168201915b5050505050905090565b6000610bfc33848461170a565b5060015b92915050565b6005546001600160a01b03163314610c305760405162461bcd60e51b8152600401610b07906128fd565b600b55565b6005546001600160a01b03163314610c5f5760405162461bcd60e51b8152600401610b07906128fd565b60005b81518160ff161015610ccd57600160066000848460ff1681518110610c8957610c8961296c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610cc581612998565b915050610c62565b5050565b6000610cde84848461182e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d635760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b07565b610d70853385840361170a565b506001949350505050565b6005546001600160a01b03163314610da55760405162461bcd60e51b8152600401610b07906128fd565b60078054821515600160a81b0260ff60a81b199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610df290831515815260200190565b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bfc918590610e349086906129b7565b61170a565b6005546001600160a01b03163314610e635760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b031660009081526021602090815260408083208054600160ff199182168117909255928052922080549091169091179055565b6005546001600160a01b03163314610ec75760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f1c5760405162461bcd60e51b8152600401610b07906128fd565b6007546001600160a01b0390811690821603610f865760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610b07565b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461100d5760405162461bcd60e51b8152600401610b07906128fd565b6110176000611c54565b565b6005546001600160a01b031633146110435760405162461bcd60e51b8152600401610b07906128fd565b601c80546001600160a01b039586166001600160a01b031991821617909155601d805494861694821694909417909355601e805492851692841692909217909155601f8054919093169116179055565b606060048054610b6c90612932565b6005546001600160a01b031633146110cc5760405162461bcd60e51b8152600401610b07906128fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111815760405162461bcd60e51b815260206004820152604560248201527f5468652050616e63616b655377617020706169722063616e6e6f74206265207260448201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572606482015264506169727360d81b608482015260a401610b07565b610ccd8282611ca6565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561120d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b07565b61121a338585840361170a565b5060019392505050565b6000610bfc33848461182e565b6005546001600160a01b0316331461125b5760405162461bcd60e51b8152600401610b07906128fd565b600a81905561127460c861126e60025490565b90611d90565b600a5410156112b55760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610b07565b50565b6005546001600160a01b031633146112e25760405162461bcd60e51b8152600401610b07906128fd565b60158690556016859055601784905560188390556019829055601a81905561131a81611314848187818a818e8e611da3565b90611da3565b601b8190556063101561135f5760405162461bcd60e51b815260206004820152600d60248201526c0cccacae640e8dede40d0d2ced609b1b6044820152606401610b07565b505050505050565b6005546001600160a01b031633146113915760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b038216600090815260208052604090205481151560ff9091161515036114135760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610b07565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461149a5760405162461bcd60e51b8152600401610b07906128fd565b600c55565b6005546001600160a01b031633146114c95760405162461bcd60e51b8152600401610b07906128fd565b60078054821515600160b01b0260ff60b01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610df290831515815260200190565b6005546001600160a01b031633146115405760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b0381166115a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b07565b6112b581611c54565b6005546001600160a01b031633146115d85760405162461bcd60e51b8152600401610b07906128fd565b600e869055600f859055601084905560118390556012829055601381905561160a81611314848187818a818e8e611da3565b6014818155101561135f5760405162461bcd60e51b815260206004820152600d60248201526c0cccacae640e8dede40d0d2ced609b1b6044820152606401610b07565b6005546001600160a01b031633146116775760405162461bcd60e51b8152600401610b07906128fd565b600981905561168a60c861126e60025490565b60095410156112b55760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610b07565b6005546001600160a01b031633146116f55760405162461bcd60e51b8152600401610b07906128fd565b6005805460ff60a01b1916600160a01b179055565b6001600160a01b03831661176c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b07565b6001600160a01b0382166117cd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b07565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60055483908390600160a01b900460ff168061186257506001600160a01b03821660009081526006602052604090205460ff165b8061188557506001600160a01b03811660009081526006602052604090205460ff165b6118bc5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b07565b6001600160a01b0385166118e25760405162461bcd60e51b8152600401610b07906129ca565b6001600160a01b0384166119085760405162461bcd60e51b8152600401610b0790612a0f565b826000036119215761191c85856000611daf565b611c4d565b6001600160a01b03851660009081526022602052604090205460ff16801561196257506001600160a01b03851660009081526021602052604090205460ff16155b801561198757506001600160a01b03841660009081526021602052604090205460ff16155b156119f257600a548311156119f25760405162461bcd60e51b815260206004820152602b60248201527f616d6f756e74206578636565647320746865206d61784275795472616e73616360448201526a3a34b7b720b6b7bab73a1760a91b6064820152608401610b07565b6001600160a01b03841660009081526022602052604090205460ff168015611a3357506001600160a01b03851660009081526021602052604090205460ff16155b8015611a5857506001600160a01b03841660009081526021602052604090205460ff16155b15611ac457600954831115611ac45760405162461bcd60e51b815260206004820152602c60248201527f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160448201526b31ba34b7b720b6b7bab73a1760a11b6064820152608401610b07565b30600090815260208190526040902054600b546007549082101590600160a01b900460ff16158015611b0e57506001600160a01b03861660009081526022602052604090205460ff165b8015611b235750600754600160b01b900460ff165b15611b84578015611b3c57600b549150611b3c82611f04565b6007544790600160a81b900460ff168015611b585750600c5481115b15611b8257600c54811115611b825750600c54600d54611b8290611b7d908390611d90565b611fdf565b505b6001600160a01b038716600090815260208052604090205460ff16158015611bc457506001600160a01b038616600090815260208052604090205460ff16155b15611c3f576000611be5606461126e6014548961201190919063ffffffff16565b6001600160a01b03881660009081526022602052604090205490915060ff1615611c2657611c23606461126e601b548961201190919063ffffffff16565b90505b611c30868261201d565b9550611c3d883083611daf565b505b611c4a878787611daf565b50505b5050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503611d3c5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b07565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000611d9c8284612a52565b9392505050565b6000611d9c82846129b7565b6001600160a01b038316611dd55760405162461bcd60e51b8152600401610b07906129ca565b6001600160a01b038216611dfb5760405162461bcd60e51b8152600401610b0790612a0f565b6001600160a01b03831660009081526020819052604090205481811015611e735760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b07565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611eaa9084906129b7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ef691815260200190565b60405180910390a350505050565b6007805460ff60a01b1916600160a01b179055601b54601554600091611f2f9161126e908590612011565b90506000611f3d838361201d565b90506000611f4c836002611d90565b90506000611f5a848361201d565b905047611f678330612029565b6000611f73478361201d565b9050611f7f83826121ac565b611f888561227a565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506007805460ff60a01b191690555050505050565b6007805460ff60a01b1916600160a01b17905580156120015761200181612437565b506007805460ff60a01b19169055565b6000611d9c8284612a74565b6000611d9c8284612a93565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061205e5761205e61296c565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156120b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120db9190612aa6565b816001815181106120ee576120ee61296c565b6001600160a01b0392831660209182029290920181019190915260075430600090815260018352604080822092909416815291522054831115612145576007546121459030906001600160a01b031660001961170a565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac9479061217e908690600090869088904290600401612b07565b600060405180830381600087803b15801561219857600080fd5b505af1158015611c4a573d6000803e3d6000fd5b6007546121c49030906001600160a01b03168461170a565b6007546001600160a01b031663f305d7198230856000806121ed6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612255573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c4d9190612b43565b476122858230612029565b6000612291478361201d565b905060006122bd6122af601554601b5461201d90919063ffffffff16565b60175461126e908590612011565b905060006122e96122db601554601b5461201d90919063ffffffff16565b60185461126e908690612011565b90506000612315612307601554601b5461201d90919063ffffffff16565b60195461126e908790612011565b90506000612341612333601554601b5461201d90919063ffffffff16565b601a5461126e908890612011565b601c546040519192506001600160a01b03169085156108fc029086906000818181858888f1935050505015801561237c573d6000803e3d6000fd5b50601d546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156123b7573d6000803e3d6000fd5b50601e546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156123f2573d6000803e3d6000fd5b50601f546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561242d573d6000803e3d6000fd5b5050505050505050565b6040805160028082526060820183526000926020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c59190612aa6565b816000815181106124d8576124d861296c565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061250c5761250c61296c565b6001600160a01b0392831660209182029290920101526007546008549082169163b6f9de959185916000918691166125464261012c611da3565b6040518663ffffffff1660e01b81526004016125659493929190612b71565b6000604051808303818588803b15801561257e57600080fd5b505af1158015612592573d6000803e3d6000fd5b50505050507f49572d4c9f88395e245870653f943bb96eced77a132c1b2d14dc524c4eaceea782826040516125c8929190612ba6565b60405180910390a15050565b6000602082840312156125e657600080fd5b5035919050565b600060208083528351808285015260005b8181101561261a578581018301518582016040015282016125fe565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146112b557600080fd5b803561265b8161263b565b919050565b6000806040838503121561267357600080fd5b823561267e8161263b565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156126b557600080fd5b823567ffffffffffffffff808211156126cd57600080fd5b818501915085601f8301126126e157600080fd5b8135818111156126f3576126f361268c565b8060051b604051601f19603f830116810181811085821117156127185761271861268c565b60405291825284820192508381018501918883111561273657600080fd5b938501935b8285101561275b5761274c85612650565b8452938501939285019261273b565b98975050505050505050565b60008060006060848603121561277c57600080fd5b83356127878161263b565b925060208401356127978161263b565b929592945050506040919091013590565b8035801515811461265b57600080fd5b6000602082840312156127ca57600080fd5b611d9c826127a8565b6000602082840312156127e557600080fd5b8135611d9c8161263b565b6000806040838503121561280357600080fd5b823561280e8161263b565b915061281c602084016127a8565b90509250929050565b6000806000806080858703121561283b57600080fd5b84356128468161263b565b935060208501356128568161263b565b925060408501356128668161263b565b915060608501356128768161263b565b939692955090935050565b60008060008060008060c0878903121561289a57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156128d757600080fd5b82356128e28161263b565b915060208301356128f28161263b565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061294657607f821691505b60208210810361296657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff81036129ae576129ae612982565b60010192915050565b80820180821115610c0057610c00612982565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082612a6f57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a8e57612a8e612982565b500290565b81810381811115610c0057610c00612982565b600060208284031215612ab857600080fd5b8151611d9c8161263b565b600081518084526020808501945080840160005b83811015612afc5781516001600160a01b031687529582019590820190600101612ad7565b509495945050505050565b85815284602082015260a060408201526000612b2660a0830186612ac3565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215612b5857600080fd5b8351925060208401519150604084015190509250925092565b848152608060208201526000612b8a6080830186612ac3565b6001600160a01b03949094166040830152506060015292915050565b828152604060208201526000612bbf6040830184612ac3565b94935050505056fea2646970667358221220a5ef658c076822609c63fff8e23d2b199466a9e26dacc12e8850f0333cb7ff9064736f6c63430008100033

Deployed Bytecode

0x6080604052600436106103905760003560e01c8063743e540d116101dc578063bdc653ef11610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610a68578063f74c9f4714610a88578063fb17e6dc14610aa8578063fb201b1d14610ac857600080fd5b8063dd62ed3e146109e0578063e2f4560514610a26578063e7f444b314610a3c578063efcc1b2f14610a5257600080fd5b8063c2b3e1c2116100dc578063c2b3e1c214610974578063c49b9a8014610994578063ccb61358146109b4578063d0a39814146109ca57600080fd5b8063bdc653ef14610929578063c02466681461093e578063c05e8fa11461095e57600080fd5b8063a457c2d71161017a578063b45e83f811610149578063b45e83f8146108ad578063b62496f5146108c3578063b9e93700146108f3578063ba876bb91461090957600080fd5b8063a457c2d714610837578063a9059cbb14610857578063a946163014610877578063afc168751461089757600080fd5b80638da5cb5b116101b65780638da5cb5b146107cf5780638ee10823146107ed57806395d89b41146108025780639a7a23d61461081757600080fd5b8063743e540d146107795780637506cbd81461079957806385141a77146107af57600080fd5b806339509351116102c15780635b89029c1161025f578063680789521161022e57806368078952146107025780636be638551461071857806370a082311461072e578063715018a61461076457600080fd5b80635b89029c146106685780636053a0e314610688578063658c27a9146106a957806365b8dbc0146106e257600080fd5b806349bd5a5e1161029b57806349bd5a5e146105c55780634a74bb02146105f95780634fbee1931461061a5780635aa821a91461065257600080fd5b8063395093511461056457806347535d7b1461058457806349928a50146105a557600080fd5b80630b6bb6f51161032e57806323b872dd1161030857806323b872dd146104f257806329370cc614610512578063313ce56714610532578063330f829d1461054e57600080fd5b80630b6bb6f5146104855780631694505e146104a557806318160ddd146104dd57600080fd5b806306fdde031161036a57806306fdde03146103fd578063095ea7b31461041f578063099d0d301461044f57806309e89af71461046557600080fd5b806301143fea1461039c57806302259e9e146103c5578063068dde72146103db57600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b260135481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b506103b260095481565b3480156103e757600080fd5b506103fb6103f63660046125d4565b610add565b005b34801561040957600080fd5b50610412610b5d565b6040516103bc91906125ed565b34801561042b57600080fd5b5061043f61043a366004612660565b610bef565b60405190151581526020016103bc565b34801561045b57600080fd5b506103b260155481565b34801561047157600080fd5b506103fb6104803660046125d4565b610c06565b34801561049157600080fd5b506103fb6104a03660046126a2565b610c35565b3480156104b157600080fd5b506007546104c5906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b3480156104e957600080fd5b506002546103b2565b3480156104fe57600080fd5b5061043f61050d366004612767565b610cd1565b34801561051e57600080fd5b506103fb61052d3660046127b8565b610d7b565b34801561053e57600080fd5b50604051600981526020016103bc565b34801561055a57600080fd5b506103b260185481565b34801561057057600080fd5b5061043f61057f366004612660565b610dfd565b34801561059057600080fd5b5060055461043f90600160a01b900460ff1681565b3480156105b157600080fd5b506103fb6105c03660046127d3565b610e39565b3480156105d157600080fd5b506104c57f000000000000000000000000ee8f6e017269188c18ecac61165096ec4e0e2eb881565b34801561060557600080fd5b5060075461043f90600160b01b900460ff1681565b34801561062657600080fd5b5061043f6106353660046127d3565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561065e57600080fd5b506103b2600a5481565b34801561067457600080fd5b506103fb6106833660046127f0565b610e9d565b34801561069457600080fd5b5060075461043f90600160a81b900460ff1681565b3480156106b557600080fd5b5061043f6106c43660046127d3565b6001600160a01b031660009081526021602052604090205460ff1690565b3480156106ee57600080fd5b506103fb6106fd3660046127d3565b610ef2565b34801561070e57600080fd5b506103b260105481565b34801561072457600080fd5b506103b260165481565b34801561073a57600080fd5b506103b26107493660046127d3565b6001600160a01b031660009081526020819052604090205490565b34801561077057600080fd5b506103fb610fe3565b34801561078557600080fd5b506103fb610794366004612825565b611019565b3480156107a557600080fd5b506103b260195481565b3480156107bb57600080fd5b506008546104c5906001600160a01b031681565b3480156107db57600080fd5b506005546001600160a01b03166104c5565b3480156107f957600080fd5b50600d546103b2565b34801561080e57600080fd5b50610412611093565b34801561082357600080fd5b506103fb6108323660046127f0565b6110a2565b34801561084357600080fd5b5061043f610852366004612660565b61118b565b34801561086357600080fd5b5061043f610872366004612660565b611224565b34801561088357600080fd5b506103fb6108923660046125d4565b611231565b3480156108a357600080fd5b506103b260115481565b3480156108b957600080fd5b506103b2601a5481565b3480156108cf57600080fd5b5061043f6108de3660046127d3565b60226020526000908152604090205460ff1681565b3480156108ff57600080fd5b506103b260145481565b34801561091557600080fd5b506103fb610924366004612881565b6112b8565b34801561093557600080fd5b50600c546103b2565b34801561094a57600080fd5b506103fb6109593660046127f0565b611367565b34801561096a57600080fd5b506103b2600f5481565b34801561098057600080fd5b506103fb61098f3660046125d4565b611470565b3480156109a057600080fd5b506103fb6109af3660046127b8565b61149f565b3480156109c057600080fd5b506103b2600e5481565b3480156109d657600080fd5b506103b2601b5481565b3480156109ec57600080fd5b506103b26109fb3660046128c4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a3257600080fd5b506103b2600b5481565b348015610a4857600080fd5b506103b260175481565b348015610a5e57600080fd5b506103b260125481565b348015610a7457600080fd5b506103fb610a833660046127d3565b611516565b348015610a9457600080fd5b506103fb610aa3366004612881565b6115ae565b348015610ab457600080fd5b506103fb610ac33660046125d4565b61164d565b348015610ad457600080fd5b506103fb6116cb565b6005546001600160a01b03163314610b105760405162461bcd60e51b8152600401610b07906128fd565b60405180910390fd5b60008111610b585760405162461bcd60e51b815260206004820152601560248201527463616e6e6f7420626520736574206173207a65726f60581b6044820152606401610b07565b600d55565b606060038054610b6c90612932565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9890612932565b8015610be55780601f10610bba57610100808354040283529160200191610be5565b820191906000526020600020905b815481529060010190602001808311610bc857829003601f168201915b5050505050905090565b6000610bfc33848461170a565b5060015b92915050565b6005546001600160a01b03163314610c305760405162461bcd60e51b8152600401610b07906128fd565b600b55565b6005546001600160a01b03163314610c5f5760405162461bcd60e51b8152600401610b07906128fd565b60005b81518160ff161015610ccd57600160066000848460ff1681518110610c8957610c8961296c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610cc581612998565b915050610c62565b5050565b6000610cde84848461182e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d635760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b07565b610d70853385840361170a565b506001949350505050565b6005546001600160a01b03163314610da55760405162461bcd60e51b8152600401610b07906128fd565b60078054821515600160a81b0260ff60a81b199091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610df290831515815260200190565b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bfc918590610e349086906129b7565b61170a565b6005546001600160a01b03163314610e635760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b031660009081526021602090815260408083208054600160ff199182168117909255928052922080549091169091179055565b6005546001600160a01b03163314610ec75760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f1c5760405162461bcd60e51b8152600401610b07906128fd565b6007546001600160a01b0390811690821603610f865760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610b07565b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461100d5760405162461bcd60e51b8152600401610b07906128fd565b6110176000611c54565b565b6005546001600160a01b031633146110435760405162461bcd60e51b8152600401610b07906128fd565b601c80546001600160a01b039586166001600160a01b031991821617909155601d805494861694821694909417909355601e805492851692841692909217909155601f8054919093169116179055565b606060048054610b6c90612932565b6005546001600160a01b031633146110cc5760405162461bcd60e51b8152600401610b07906128fd565b7f000000000000000000000000ee8f6e017269188c18ecac61165096ec4e0e2eb86001600160a01b0316826001600160a01b0316036111815760405162461bcd60e51b815260206004820152604560248201527f5468652050616e63616b655377617020706169722063616e6e6f74206265207260448201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572606482015264506169727360d81b608482015260a401610b07565b610ccd8282611ca6565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561120d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b07565b61121a338585840361170a565b5060019392505050565b6000610bfc33848461182e565b6005546001600160a01b0316331461125b5760405162461bcd60e51b8152600401610b07906128fd565b600a81905561127460c861126e60025490565b90611d90565b600a5410156112b55760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610b07565b50565b6005546001600160a01b031633146112e25760405162461bcd60e51b8152600401610b07906128fd565b60158690556016859055601784905560188390556019829055601a81905561131a81611314848187818a818e8e611da3565b90611da3565b601b8190556063101561135f5760405162461bcd60e51b815260206004820152600d60248201526c0cccacae640e8dede40d0d2ced609b1b6044820152606401610b07565b505050505050565b6005546001600160a01b031633146113915760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b038216600090815260208052604090205481151560ff9091161515036114135760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610b07565b6001600160a01b03821660008181526020808052604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461149a5760405162461bcd60e51b8152600401610b07906128fd565b600c55565b6005546001600160a01b031633146114c95760405162461bcd60e51b8152600401610b07906128fd565b60078054821515600160b01b0260ff60b01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610df290831515815260200190565b6005546001600160a01b031633146115405760405162461bcd60e51b8152600401610b07906128fd565b6001600160a01b0381166115a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b07565b6112b581611c54565b6005546001600160a01b031633146115d85760405162461bcd60e51b8152600401610b07906128fd565b600e869055600f859055601084905560118390556012829055601381905561160a81611314848187818a818e8e611da3565b6014818155101561135f5760405162461bcd60e51b815260206004820152600d60248201526c0cccacae640e8dede40d0d2ced609b1b6044820152606401610b07565b6005546001600160a01b031633146116775760405162461bcd60e51b8152600401610b07906128fd565b600981905561168a60c861126e60025490565b60095410156112b55760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610b07565b6005546001600160a01b031633146116f55760405162461bcd60e51b8152600401610b07906128fd565b6005805460ff60a01b1916600160a01b179055565b6001600160a01b03831661176c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b07565b6001600160a01b0382166117cd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b07565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60055483908390600160a01b900460ff168061186257506001600160a01b03821660009081526006602052604090205460ff165b8061188557506001600160a01b03811660009081526006602052604090205460ff165b6118bc5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b07565b6001600160a01b0385166118e25760405162461bcd60e51b8152600401610b07906129ca565b6001600160a01b0384166119085760405162461bcd60e51b8152600401610b0790612a0f565b826000036119215761191c85856000611daf565b611c4d565b6001600160a01b03851660009081526022602052604090205460ff16801561196257506001600160a01b03851660009081526021602052604090205460ff16155b801561198757506001600160a01b03841660009081526021602052604090205460ff16155b156119f257600a548311156119f25760405162461bcd60e51b815260206004820152602b60248201527f616d6f756e74206578636565647320746865206d61784275795472616e73616360448201526a3a34b7b720b6b7bab73a1760a91b6064820152608401610b07565b6001600160a01b03841660009081526022602052604090205460ff168015611a3357506001600160a01b03851660009081526021602052604090205460ff16155b8015611a5857506001600160a01b03841660009081526021602052604090205460ff16155b15611ac457600954831115611ac45760405162461bcd60e51b815260206004820152602c60248201527f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160448201526b31ba34b7b720b6b7bab73a1760a11b6064820152608401610b07565b30600090815260208190526040902054600b546007549082101590600160a01b900460ff16158015611b0e57506001600160a01b03861660009081526022602052604090205460ff165b8015611b235750600754600160b01b900460ff165b15611b84578015611b3c57600b549150611b3c82611f04565b6007544790600160a81b900460ff168015611b585750600c5481115b15611b8257600c54811115611b825750600c54600d54611b8290611b7d908390611d90565b611fdf565b505b6001600160a01b038716600090815260208052604090205460ff16158015611bc457506001600160a01b038616600090815260208052604090205460ff16155b15611c3f576000611be5606461126e6014548961201190919063ffffffff16565b6001600160a01b03881660009081526022602052604090205490915060ff1615611c2657611c23606461126e601b548961201190919063ffffffff16565b90505b611c30868261201d565b9550611c3d883083611daf565b505b611c4a878787611daf565b50505b5050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503611d3c5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610b07565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000611d9c8284612a52565b9392505050565b6000611d9c82846129b7565b6001600160a01b038316611dd55760405162461bcd60e51b8152600401610b07906129ca565b6001600160a01b038216611dfb5760405162461bcd60e51b8152600401610b0790612a0f565b6001600160a01b03831660009081526020819052604090205481811015611e735760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b07565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611eaa9084906129b7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ef691815260200190565b60405180910390a350505050565b6007805460ff60a01b1916600160a01b179055601b54601554600091611f2f9161126e908590612011565b90506000611f3d838361201d565b90506000611f4c836002611d90565b90506000611f5a848361201d565b905047611f678330612029565b6000611f73478361201d565b9050611f7f83826121ac565b611f888561227a565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506007805460ff60a01b191690555050505050565b6007805460ff60a01b1916600160a01b17905580156120015761200181612437565b506007805460ff60a01b19169055565b6000611d9c8284612a74565b6000611d9c8284612a93565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061205e5761205e61296c565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156120b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120db9190612aa6565b816001815181106120ee576120ee61296c565b6001600160a01b0392831660209182029290920181019190915260075430600090815260018352604080822092909416815291522054831115612145576007546121459030906001600160a01b031660001961170a565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac9479061217e908690600090869088904290600401612b07565b600060405180830381600087803b15801561219857600080fd5b505af1158015611c4a573d6000803e3d6000fd5b6007546121c49030906001600160a01b03168461170a565b6007546001600160a01b031663f305d7198230856000806121ed6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612255573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c4d9190612b43565b476122858230612029565b6000612291478361201d565b905060006122bd6122af601554601b5461201d90919063ffffffff16565b60175461126e908590612011565b905060006122e96122db601554601b5461201d90919063ffffffff16565b60185461126e908690612011565b90506000612315612307601554601b5461201d90919063ffffffff16565b60195461126e908790612011565b90506000612341612333601554601b5461201d90919063ffffffff16565b601a5461126e908890612011565b601c546040519192506001600160a01b03169085156108fc029086906000818181858888f1935050505015801561237c573d6000803e3d6000fd5b50601d546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156123b7573d6000803e3d6000fd5b50601e546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156123f2573d6000803e3d6000fd5b50601f546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561242d573d6000803e3d6000fd5b5050505050505050565b6040805160028082526060820183526000926020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c59190612aa6565b816000815181106124d8576124d861296c565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061250c5761250c61296c565b6001600160a01b0392831660209182029290920101526007546008549082169163b6f9de959185916000918691166125464261012c611da3565b6040518663ffffffff1660e01b81526004016125659493929190612b71565b6000604051808303818588803b15801561257e57600080fd5b505af1158015612592573d6000803e3d6000fd5b50505050507f49572d4c9f88395e245870653f943bb96eced77a132c1b2d14dc524c4eaceea782826040516125c8929190612ba6565b60405180910390a15050565b6000602082840312156125e657600080fd5b5035919050565b600060208083528351808285015260005b8181101561261a578581018301518582016040015282016125fe565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146112b557600080fd5b803561265b8161263b565b919050565b6000806040838503121561267357600080fd5b823561267e8161263b565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156126b557600080fd5b823567ffffffffffffffff808211156126cd57600080fd5b818501915085601f8301126126e157600080fd5b8135818111156126f3576126f361268c565b8060051b604051601f19603f830116810181811085821117156127185761271861268c565b60405291825284820192508381018501918883111561273657600080fd5b938501935b8285101561275b5761274c85612650565b8452938501939285019261273b565b98975050505050505050565b60008060006060848603121561277c57600080fd5b83356127878161263b565b925060208401356127978161263b565b929592945050506040919091013590565b8035801515811461265b57600080fd5b6000602082840312156127ca57600080fd5b611d9c826127a8565b6000602082840312156127e557600080fd5b8135611d9c8161263b565b6000806040838503121561280357600080fd5b823561280e8161263b565b915061281c602084016127a8565b90509250929050565b6000806000806080858703121561283b57600080fd5b84356128468161263b565b935060208501356128568161263b565b925060408501356128668161263b565b915060608501356128768161263b565b939692955090935050565b60008060008060008060c0878903121561289a57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156128d757600080fd5b82356128e28161263b565b915060208301356128f28161263b565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061294657607f821691505b60208210810361296657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff81036129ae576129ae612982565b60010192915050565b80820180821115610c0057610c00612982565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082612a6f57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a8e57612a8e612982565b500290565b81810381811115610c0057610c00612982565b600060208284031215612ab857600080fd5b8151611d9c8161263b565b600081518084526020808501945080840160005b83811015612afc5781516001600160a01b031687529582019590820190600101612ad7565b509495945050505050565b85815284602082015260a060408201526000612b2660a0830186612ac3565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215612b5857600080fd5b8351925060208401519150604084015190509250925092565b848152608060208201526000612b8a6080830186612ac3565b6001600160a01b03949094166040830152506060015292915050565b828152604060208201526000612bbf6040830184612ac3565b94935050505056fea2646970667358221220a5ef658c076822609c63fff8e23d2b199466a9e26dacc12e8850f0333cb7ff9064736f6c63430008100033

Deployed Bytecode Sourcemap

38560:15373:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39472:28;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;39472:28:0;;;;;;;;38952:59;;;;;;;;;;;;;;;;52359:171;;;;;;;;;;-1:-1:-1;52359:171:0;;;;;:::i;:::-;;:::i;:::-;;4689:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6855:169::-;;;;;;;;;;-1:-1:-1;6855:169:0;;;;;:::i;:::-;;:::i;:::-;;;1694:14:1;;1687:22;1669:41;;1657:2;1642:18;6855:169:0;1529:187:1;39547:35:0;;;;;;;;;;;;;;;;51960:116;;;;;;;;;;-1:-1:-1;51960:116:0;;;;;:::i;:::-;;:::i;38365:186::-;;;;;;;;;;-1:-1:-1;38365:186:0;;;;;:::i;:::-;;:::i;38647:41::-;;;;;;;;;;-1:-1:-1;38647:41:0;;;;-1:-1:-1;;;;;38647:41:0;;;;;;-1:-1:-1;;;;;3170:32:1;;;3152:51;;3140:2;3125:18;38647:41:0;2979:230:1;5808:108:0;;;;;;;;;;-1:-1:-1;5896:12:0;;5808:108;;7506:492;;;;;;;;;;-1:-1:-1;7506:492:0;;;;;:::i;:::-;;:::i;52197:150::-;;;;;;;;;;-1:-1:-1;52197:150:0;;;;;:::i;:::-;;:::i;5651:92::-;;;;;;;;;;-1:-1:-1;5651:92:0;;5734:1;4167:36:1;;4155:2;4140:18;5651:92:0;4025:184:1;39671:35:0;;;;;;;;;;;;;;;;8407:215;;;;;;;;;;-1:-1:-1;8407:215:0;;;;;:::i;:::-;;:::i;37945:26::-;;;;;;;;;;-1:-1:-1;37945:26:0;;;;-1:-1:-1;;;37945:26:0;;;;;;52684:165;;;;;;;;;;-1:-1:-1;52684:165:0;;;;;:::i;:::-;;:::i;38695:38::-;;;;;;;;;;;;;;;38820:40;;;;;;;;;;-1:-1:-1;38820:40:0;;;;-1:-1:-1;;;38820:40:0;;;;;;53437:125;;;;;;;;;;-1:-1:-1;53437:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;53526:28:0;53502:4;53526:28;;;:19;:28;;;;;;;;;53437:125;39018:58;;;;;;;;;;;;;;;;52542:134;;;;;;;;;;-1:-1:-1;52542:134:0;;;;;:::i;:::-;;:::i;38778:33::-;;;;;;;;;;-1:-1:-1;38778:33:0;;;;-1:-1:-1;;;38778:33:0;;;;;;53574:127;;;;;;;;;;-1:-1:-1;53574:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;53664:29:0;53640:4;53664:29;;;:20;:29;;;;;;;;;53574:127;51101:307;;;;;;;;;;-1:-1:-1;51101:307:0;;;;;:::i;:::-;;:::i;39348:34::-;;;;;;;;;;;;;;;;39589:33;;;;;;;;;;;;;;;;5979:127;;;;;;;;;;-1:-1:-1;5979:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;6080:18:0;6053:7;6080:18;;;;;;;;;;;;5979:127;15299:94;;;;;;;;;;;;;:::i;50331:317::-;;;;;;;;;;-1:-1:-1;50331:317:0;;;;;:::i;:::-;;:::i;39713:36::-;;;;;;;;;;;;;;;;38873:70;;;;;;;;;;-1:-1:-1;38873:70:0;;;;-1:-1:-1;;;;;38873:70:0;;;14648:87;;;;;;;;;;-1:-1:-1;14721:6:0;;-1:-1:-1;;;;;14721:6:0;14648:87;;52088:97;;;;;;;;;;-1:-1:-1;52162:15:0;;52088:97;;4908:104;;;;;;;;;;;;;:::i;52857:254::-;;;;;;;;;;-1:-1:-1;52857:254:0;;;;;:::i;:::-;;:::i;9125:413::-;;;;;;;;;;-1:-1:-1;9125:413:0;;;;;:::i;:::-;;:::i;6319:175::-;;;;;;;;;;-1:-1:-1;6319:175:0;;;;;:::i;:::-;;:::i;50882:209::-;;;;;;;;;;-1:-1:-1;50882:209:0;;;;;:::i;:::-;;:::i;39389:34::-;;;;;;;;;;;;;;;;39756:29;;;;;;;;;;;;;;;;40555:58;;;;;;;;;;-1:-1:-1;40555:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39507:31;;;;;;;;;;;;;;;;49747:576;;;;;;;;;;-1:-1:-1;49747:576:0;;;;;:::i;:::-;;:::i;51718:108::-;;;;;;;;;;-1:-1:-1;51801:17:0;;51718:108;;51416:290;;;;;;;;;;-1:-1:-1;51416:290:0;;;;;:::i;:::-;;:::i;39309:32::-;;;;;;;;;;;;;;;;51838:114;;;;;;;;;;-1:-1:-1;51838:114:0;;;;;:::i;:::-;;:::i;53709:171::-;;;;;;;;;;-1:-1:-1;53709:171:0;;;;;:::i;:::-;;:::i;39268:34::-;;;;;;;;;;;;;;;;39792:32;;;;;;;;;;;;;;;;6557:151;;;;;;;;;;-1:-1:-1;6557:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6673:18:0;;;6646:7;6673:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6557:151;39083:51;;;;;;;;;;;;;;;;39629:35;;;;;;;;;;;;;;;;39430;;;;;;;;;;;;;;;;15548:192;;;;;;;;;;-1:-1:-1;15548:192:0;;;;;:::i;:::-;;:::i;49178:561::-;;;;;;;;;;-1:-1:-1;49178:561:0;;;;;:::i;:::-;;:::i;50656:214::-;;;;;;;;;;-1:-1:-1;50656:214:0;;;;;:::i;:::-;;:::i;38285:72::-;;;;;;;;;;;;;:::i;52359:171::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;;;;;;;;;52457:1:::1;52445:9;:13;52437:47;;;::::0;-1:-1:-1;;;52437:47:0;;7186:2:1;52437: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;;52437:47:0::1;6984:345:1::0;52437:47:0::1;52495:15;:27:::0;52359:171::o;4689:100::-;4743:13;4776:5;4769:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4689:100;:::o;6855:169::-;6938:4;6955:39;3492:10;6978:7;6987:6;6955:8;:39::i;:::-;-1:-1:-1;7012:4:0;6855:169;;;;;:::o;51960:116::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;52039:18:::1;:29:::0;51960:116::o;38365:186::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;38452:7:::1;38448:96;38469:6;:13;38465:1;:17;;;38448:96;;;38528:4;38504:10;:21;38515:6;38522:1;38515:9;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;38504:21:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;38504:21:0;:28;;-1:-1:-1;;38504:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38484:3;::::1;::::0;::::1;:::i;:::-;;;;38448:96;;;;38365:186:::0;:::o;7506:492::-;7646:4;7663:36;7673:6;7681:9;7692:6;7663:9;:36::i;:::-;-1:-1:-1;;;;;7739:19:0;;7712:24;7739:19;;;:11;:19;;;;;;;;3492:10;7739:33;;;;;;;;7791:26;;;;7783:79;;;;-1:-1:-1;;;7783:79:0;;8365:2:1;7783: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;;7783:79:0;8163:404:1;7783:79:0;7898:57;7907:6;3492:10;7948:6;7929:16;:25;7898:8;:57::i;:::-;-1:-1:-1;7986:4:0;;7506:492;-1:-1:-1;;;;7506:492:0:o;52197:150::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;52267:14:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;52267:25:0::1;-1:-1:-1::0;;;;52267:25:0;;::::1;;::::0;;52308:31:::1;::::0;::::1;::::0;::::1;::::0;52284:8;1694:14:1;1687:22;1669:41;;1657:2;1642:18;;1529:187;52308:31:0::1;;;;;;;;52197:150:::0;:::o;8407:215::-;3492:10;8495:4;8544:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8544:34:0;;;;;;;;;;8495:4;;8512:80;;8535:7;;8544:47;;8581:10;;8544:47;:::i;:::-;8512:8;:80::i;52684:165::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52757:30:0::1;;::::0;;;:20:::1;:30;::::0;;;;;;;:37;;52790:4:::1;-1:-1:-1::0;;52757:37:0;;::::1;::::0;::::1;::::0;;;52805:29;;;;;:36;;;;::::1;::::0;;::::1;::::0;;52684:165::o;52542:134::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52630:30:0;;;::::1;;::::0;;;:20:::1;:30;::::0;;;;:38;;-1:-1:-1;;52630:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52542:134::o;51101:307::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;51210:15:::1;::::0;-1:-1:-1;;;;;51210:15:0;;::::1;51188:38:::0;;::::1;::::0;51180:86:::1;;;::::0;-1:-1:-1;;;51180:86:0;;8904:2:1;51180: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;;51180:86:0::1;8702:399:1::0;51180:86:0::1;51324:15;::::0;51282:59:::1;::::0;-1:-1:-1;;;;;51324:15:0;;::::1;::::0;51282:59;::::1;::::0;::::1;::::0;51324:15:::1;::::0;51282:59:::1;51352:15;:48:::0;;-1:-1:-1;;;;;;51352:48:0::1;-1:-1:-1::0;;;;;51352:48:0;;;::::1;::::0;;;::::1;::::0;;51101:307::o;15299:94::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;15364:21:::1;15382:1;15364:9;:21::i;:::-;15299:94::o:0;50331:317::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;50498:15:::1;:29:::0;;-1:-1:-1;;;;;50498:29:0;;::::1;-1:-1:-1::0;;;;;;50498:29:0;;::::1;;::::0;;;50538:15:::1;:29:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;50578:16:::1;:29:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;50618:9:::1;:22:::0;;;;;::::1;::::0;::::1;;::::0;;50331:317::o;4908:104::-;4964:13;4997:7;4990:14;;;;;:::i;52857:254::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;52964:13:::1;-1:-1:-1::0;;;;;52956:21:0::1;:4;-1:-1:-1::0;;;;;52956:21:0::1;::::0;52948:103:::1;;;::::0;-1:-1:-1;;;52948:103:0;;9308:2:1;52948: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;;52948:103:0::1;9106:473:1::0;52948:103:0::1;53062:41;53091:4;53097:5;53062:28;:41::i;9125:413::-:0;3492:10;9218:4;9262:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9262:34:0;;;;;;;;;;9315:35;;;;9307:85;;;;-1:-1:-1;;;9307:85:0;;9786:2:1;9307: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;;9307:85:0;9584:401:1;9307:85:0;9428:67;3492:10;9451:7;9479:15;9460:16;:34;9428:8;:67::i;:::-;-1:-1:-1;9526:4:0;;9125:413;-1:-1:-1;;;9125:413:0:o;6319:175::-;6405:4;6422:42;3492:10;6446:9;6457:6;6422:9;:42::i;50882:209::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;50956:23:::1;:41:::0;;;51043:22:::1;51061:3;51043:13;5896:12:::0;;;5808:108;51043:13:::1;:17:::0;::::1;:22::i;:::-;51016:23;;:49;;51008:75;;;::::0;-1:-1:-1;;;51008:75:0;;10192:2:1;51008: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;;51008:75:0::1;9990:337:1::0;51008:75:0::1;50882:209:::0;:::o;49747:576::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;49904:16:::1;:26:::0;;;49941:14:::1;:26:::0;;;49978:16:::1;:27:::0;;;50016:16:::1;:27:::0;;;50054:17:::1;:27:::0;;;50092:10:::1;:20:::0;;;50139:119:::1;50105:7:::0;50139:103:::1;50074:7:::0;50139:103;50035:8;50139:103;49997:8;50139:103;49923:7;49958:9;50139:20:::1;:36::i;:::-;:40:::0;::::1;:58::i;:119::-;50123:13;:135:::0;;;50294:2:::1;-1:-1:-1::0;50277:19:0::1;50269:45;;;::::0;-1:-1:-1;;;50269:45:0;;10534:2:1;50269: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;;50269:45:0::1;10332:337:1::0;50269:45:0::1;49747:576:::0;;;;;;:::o;51416:290::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51509:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;51501:95:::1;;;::::0;-1:-1:-1;;;51501:95:0;;10876:2:1;51501: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;;51501:95:0::1;10674:406:1::0;51501:95:0::1;-1:-1:-1::0;;;;;51607:28:0;::::1;;::::0;;;:19:::1;:28:::0;;;;;;;;:39;;-1:-1:-1;;51607:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;51664:34;;1669:41:1;;;51664:34:0::1;::::0;1642:18:1;51664:34:0::1;;;;;;;51416:290:::0;;:::o;51838:114::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;51916:17:::1;:28:::0;51838:114::o;53709:171::-;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;53786:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;53786:32:0::1;-1:-1:-1::0;;;;53786:32:0;;::::1;;::::0;;53834:38:::1;::::0;::::1;::::0;::::1;::::0;53810:8;1694:14:1;1687:22;1669:41;;1657:2;1642:18;;1529:187;15548:192:0;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15637:22:0;::::1;15629:73;;;::::0;-1:-1:-1;;;15629:73:0;;11287:2:1;15629: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;;15629:73:0::1;11085:402:1::0;15629:73:0::1;15713:19;15723:8;15713:9;:19::i;49178:561::-:0;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;49334:15:::1;:25:::0;;;49370:13:::1;:25:::0;;;49406:15:::1;:26:::0;;;49443:15:::1;:26:::0;;;49480:16:::1;:26:::0;;;49517:9:::1;:19:::0;;;49562:113:::1;49529:7:::0;49562:98:::1;49499:7:::0;49562:98;49461:8;49562:98;49424:8;49562:98;49352:7;49386:9;49562:19:::1;:34::i;:113::-;49547:12;:128:::0;;;-1:-1:-1;49695:18:0::1;49687:44;;;::::0;-1:-1:-1;;;49687:44:0;;10534:2:1;49687: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;;49687:44:0::1;10332:337:1::0;50656:214:0;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;50732:24:::1;:43:::0;;;50822:22:::1;50840:3;50822:13;5896:12:::0;;;5808:108;50822:22:::1;50794:24;;:50;;50786:76;;;::::0;-1:-1:-1;;;50786:76:0;;10192:2:1;50786: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;;50786:76:0::1;9990:337:1::0;38285:72:0;14721:6;;-1:-1:-1;;;;;14721:6:0;3492:10;14868:23;14860:68;;;;-1:-1:-1;;;14860:68:0;;;;;;;:::i;:::-;38336:6:::1;:13:::0;;-1:-1:-1;;;;38336:13:0::1;-1:-1:-1::0;;;38336:13:0::1;::::0;;38285:72::o;11898:380::-;-1:-1:-1;;;;;12034:19:0;;12026:68;;;;-1:-1:-1;;;12026:68:0;;11694:2:1;12026: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;;12026:68:0;11492:400:1;12026:68:0;-1:-1:-1;;;;;12113:21:0;;12105:68;;;;-1:-1:-1;;;12105:68:0;;12099:2:1;12105: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;;12105:68:0;11897:398:1;12105:68:0;-1:-1:-1;;;;;12186:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12238:32;;160:25:1;;;12238:32:0;;133:18:1;12238:32:0;;;;;;;11898:380;;;:::o;42949:2208::-;38087:6;;43049:4;;43055:2;;-1:-1:-1;;;38087:6:0;;;;;:26;;-1:-1:-1;;;;;;38097:16:0;;;;;;:10;:16;;;;;;;;38087:26;:44;;;-1:-1:-1;;;;;;38117:14:0;;;;;;:10;:14;;;;;;;;38087:44;38079:65;;;;-1:-1:-1;;;38079:65:0;;12502:2:1;38079:65:0;;;12484:21:1;12541:1;12521:18;;;12514:29;-1:-1:-1;;;12559:18:1;;;12552:38;12607:18;;38079:65:0;12300:331:1;38079:65:0;-1:-1:-1;;;;;43096:18:0;::::1;43088:68;;;;-1:-1:-1::0;;;43088:68:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43175:16:0;::::1;43167:64;;;;-1:-1:-1::0;;;43167:64:0::1;;;;;;;:::i;:::-;43247:6;43257:1;43247:11:::0;43244:92:::1;;43275:28;43291:4;43297:2;43301:1;43275:15;:28::i;:::-;43318:7;;43244:92;-1:-1:-1::0;;;;;43359:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;::::1;;:64:::0;::::1;;;-1:-1:-1::0;;;;;;43396:26:0;::::1;;::::0;;;:20:::1;:26;::::0;;;;;::::1;;43395:27;43359:64;:95;;;;-1:-1:-1::0;;;;;;43429:24:0;::::1;;::::0;;;:20:::1;:24;::::0;;;;;::::1;;43428:25;43359:95;43356:215;;;43488:23;;43478:6;:33;;43470:89;;;::::0;-1:-1:-1;;;43470:89:0;;13648:2:1;43470: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;;43470:89:0::1;13446:407:1::0;43470:89:0::1;-1:-1:-1::0;;;;;43586:29:0;::::1;;::::0;;;:25:::1;:29;::::0;;;;;::::1;;:62:::0;::::1;;;-1:-1:-1::0;;;;;;43621:26:0;::::1;;::::0;;;:20:::1;:26;::::0;;;;;::::1;;43620:27;43586:62;:93;;;;-1:-1:-1::0;;;;;;43654:24:0;::::1;;::::0;;;:20:::1;:24;::::0;;;;;::::1;;43653:25;43586:93;43583:215;;;43713:24;;43703:6;:34;;43695:91;;;::::0;-1:-1:-1;;;43695:91:0;;14060:2:1;43695: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;;43695:91:0::1;13858:408:1::0;43695:91:0::1;43866:4;43817:28;6080:18:::0;;;;;;;;;;;43944::::1;::::0;43986:16:::1;::::0;43920:42;;::::1;;::::0;-1:-1:-1;;;43986:16:0;::::1;;;43985:17;:50:::0;::::1;;;-1:-1:-1::0;;;;;;44006:29:0;::::1;;::::0;;;:25:::1;:29;::::0;;;;;::::1;;43985:50;:75;;;;-1:-1:-1::0;44039:21:0::1;::::0;-1:-1:-1;;;44039:21:0;::::1;;;43985:75;43982:633;;;44080:19;44077:155;;;44143:18;;44120:41;;44180:36;44195:20;44180:14;:36::i;:::-;44318:14;::::0;44278:21:::1;::::0;-1:-1:-1;;;44318:14:0;::::1;;;:45:::0;::::1;;;;44346:17;;44336:7;:27;44318:45;44314:290;;;44416:17;;44406:7;:27;44402:187;;;-1:-1:-1::0;44468:17:0::1;::::0;44552:15:::1;::::0;44526:43:::1;::::0;44540:28:::1;::::0;44468:17;;44540:11:::1;:28::i;:::-;44526:13;:43::i;:::-;44062:553;43982:633;-1:-1:-1::0;;;;;44717:25:0;::::1;;::::0;;;:19:::1;:25:::0;;;;;;::::1;;44716:26;:54:::0;::::1;;;-1:-1:-1::0;;;;;;44747:23:0;::::1;;::::0;;;:19:::1;:23:::0;;;;;;::::1;;44746:24;44716:54;44713:389;;;44787:12;44802:33;44831:3;44802:24;44813:12;;44802:6;:10;;:24;;;;:::i;:33::-;-1:-1:-1::0;;;;;44853:29:0;::::1;;::::0;;;:25:::1;:29;::::0;;;;;44787:48;;-1:-1:-1;44853:29:0::1;;44850:110;;;44910:34;44940:3;44910:25;44921:13;;44910:6;:10;;:25;;;;:::i;:34::-;44903:41;;44850:110;44980:16;:6:::0;44991:4;44980:10:::1;:16::i;:::-;44971:25;;45011:42;45027:4;45041;45048;45011:15;:42::i;:::-;44772:330;44713:389;45114:33;45130:4;45136:2;45140:6;45114:15;:33::i;:::-;43077:2080;;38155:1;42949:2208:::0;;;;;:::o;15748:173::-;15823:6;;;-1:-1:-1;;;;;15840:17:0;;;-1:-1:-1;;;;;;15840:17:0;;;;;;;15873:40;;15823:6;;;15840:17;15823:6;;15873:40;;15804:16;;15873:40;15793:128;15748:173;:::o;53119:306::-;-1:-1:-1;;;;;53210:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;53202:109;;;;-1:-1:-1;;;53202:109:0;;14473:2:1;53202: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;;53202:109:0;14271:420:1;53202:109:0;-1:-1:-1;;;;;53322:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;53322:39:0;;;;;;;;;;53377:40;;53322:39;;:31;53377:40;;;53119:306;;:::o;26939:98::-;26997:7;27024:5;27028:1;27024;:5;:::i;:::-;27017:12;26939:98;-1:-1:-1;;;26939:98:0:o;25802:::-;25860:7;25887:5;25891:1;25887;:5;:::i;10028:733::-;-1:-1:-1;;;;;10168:20:0;;10160:70;;;;-1:-1:-1;;;10160:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10249:23:0;;10241:71;;;;-1:-1:-1;;;10241:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10409:17:0;;10385:21;10409:17;;;;;;;;;;;10445:23;;;;10437:74;;;;-1:-1:-1;;;10437:74:0;;15120:2:1;10437: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;;10437:74:0;14918:402:1;10437:74:0;-1:-1:-1;;;;;10547:17:0;;;:9;:17;;;;;;;;;;;10567:22;;;10547:42;;10611:20;;;;;;;;:30;;10583:6;;10547:9;10611:30;;10583:6;;10611:30;:::i;:::-;;;;;;;;10676:9;-1:-1:-1;;;;;10659:35:0;10668:6;-1:-1:-1;;;;;10659:35:0;;10687:6;10659:35;;;;160:25:1;;148:2;133:18;;14:177;10659:35:0;;;;;;;;10149:612;10028:733;;;:::o;45165:1140::-;41313:16;:23;;-1:-1:-1;;;;41313:23:0;-1:-1:-1;;;41313:23:0;;;45323:13:::1;::::0;45301:16:::1;::::0;41313:23;;45276:61:::1;::::0;:42:::1;::::0;:20;;:24:::1;:42::i;:61::-;45250:87:::0;-1:-1:-1;45348:20:0::1;45371:41;:20:::0;45250:87;45371:24:::1;:41::i;:::-;45348:64:::0;-1:-1:-1;45474:12:0::1;45489:22;:15:::0;45509:1:::1;45489:19;:22::i;:::-;45474:37:::0;-1:-1:-1;45522:17:0::1;45542:25;:15:::0;45474:37;45542:19:::1;:25::i;:::-;45522:45:::0;-1:-1:-1;45870:21:0::1;45936:37;45953:4:::0;45967::::1;45936:16;:37::i;:::-;46034:18;46055:41;:21;46081:14:::0;46055:25:::1;:41::i;:::-;46034:62;;46146:35;46159:9;46170:10;46146:12;:35::i;:::-;46194:34;46215:12;46194:20;:34::i;:::-;46254:43;::::0;;15527:25:1;;;15583:2;15568:18;;15561:34;;;15611:18;;;15604:34;;;46254:43:0::1;::::0;15515:2:1;15500:18;46254:43:0::1;;;;;;;-1:-1:-1::0;;41359:16:0;:24;;-1:-1:-1;;;;41359:24:0;;;-1:-1:-1;;;;;45165:1140:0:o;47743:135::-;41313:16;:23;;-1:-1:-1;;;;41313:23:0;-1:-1:-1;;;41313:23:0;;;47814:10;;47810:61:::1;;47838:24;47855:6;47838:16;:24::i;:::-;-1:-1:-1::0;41359:16:0;:24;;-1:-1:-1;;;;41359:24:0;;;47743:135::o;26540:98::-;26598:7;26625:5;26629:1;26625;:5;:::i;26183:98::-;26241:7;26268:5;26272:1;26268;:5;:::i;48475:695::-;48638:16;;;48652:1;48638:16;;;;;;;;48614:21;;48638:16;;;;;;;;;;-1:-1:-1;48638:16:0;48614:40;;48683:4;48665;48670:1;48665:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48665:23:0;;;:7;;;;;;;;;;:23;;;;48709:15;;:22;;;-1:-1:-1;;;48709:22:0;;;;:15;;;;;:20;;:22;;;;;48665:7;;48709:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48699:4;48704:1;48699:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48699:32:0;;;:7;;;;;;;;;;:32;;;;48780:15;;48765:4;6646:7;6673:18;;;:11;:18;;;;;;48780:15;;;;6673:27;;;;;;48800:11;-1:-1:-1;48744:156:0;;;48858:15;;48826:62;;48843:4;;-1:-1:-1;;;;;48858:15:0;-1:-1:-1;;48826:8:0;:62::i;:::-;48938:15;;:214;;-1:-1:-1;;;48938:214:0;;-1:-1:-1;;;;;48938:15:0;;;;:66;;:214;;49019:11;;48938:15;;49089:4;;49108:3;;49126:15;;48938:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47217:513;47397:15;;47365:62;;47382:4;;-1:-1:-1;;;;;47397:15:0;47415:11;47365:8;:62::i;:::-;47470:15;;-1:-1:-1;;;;;47470:15:0;:31;47509:9;47542:4;47562:11;47470:15;;47674:7;14721:6;;-1:-1:-1;;;;;14721:6:0;;14648:87;47674:7;47470:252;;;;;;-1:-1:-1;;;;;;47470:252:0;;;-1:-1:-1;;;;;17623:15:1;;;47470:252:0;;;17605:34:1;17655:18;;;17648:34;;;;17698:18;;;17691:34;;;;17741:18;;;17734:34;17805:15;;;17784:19;;;17777:44;47696:15:0;17837:19:1;;;17830:35;17539:19;;47470:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;46313:896::-;46411:21;46443:44;46460:11;46481:4;46443:16;:44::i;:::-;46498:24;46525:44;:21;46551:17;46525:25;:44::i;:::-;46498:71;;46580:22;46605:79;46648:35;46666:16;;46648:13;;:17;;:35;;;;:::i;:::-;46626:16;;46605:38;;:16;;:20;:38::i;:79::-;46580:104;;46695:22;46720:79;46763:35;46781:16;;46763:13;;:17;;:35;;;;:::i;:::-;46741:16;;46720:38;;:16;;:20;:38::i;:79::-;46695:104;;46810:16;46829:80;46873:35;46891:16;;46873:13;;:17;;:35;;;;:::i;:::-;46850:17;;46829:39;;:16;;:20;:39::i;:80::-;46810:99;;46920:16;46939:73;46976:35;46994:16;;46976:13;;:17;;:35;;;;:::i;:::-;46960:10;;46939:32;;:16;;:20;:32::i;:73::-;47023:15;;:40;;46920:92;;-1:-1:-1;;;;;;47023:15:0;;:40;;;;;47048:14;;47023:15;:40;:15;:40;47048:14;47023:15;:40;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47074:15:0;;:40;;-1:-1:-1;;;;;47074:15:0;;;;:40;;;;;47099:14;;47074:15;:40;:15;:40;47099:14;47074:15;:40;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47125:16:0;;:35;;-1:-1:-1;;;;;47125:16:0;;;;:35;;;;;47151:8;;47125:16;:35;:16;:35;47151:8;47125:16;:35;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47171:9:0;;:28;;-1:-1:-1;;;;;47171:9:0;;;;:28;;;;;47190:8;;47171:9;:28;:9;:28;47190:8;47171:9;:28;;;;;;;;;;;;;;;;;;;;;46372:837;;;;;;46313:896;:::o;47890:577::-;48035:16;;;48049:1;48035:16;;;;;;;;48011:21;;48035:16;;;;;;;;-1:-1:-1;;48072:15:0;;:22;;;-1:-1:-1;;;48072:22:0;;;;48011:40;;-1:-1:-1;;;;;;48072:15:0;;;;:20;;-1:-1:-1;48072:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48062:4;48067:1;48062:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;48062:32:0;;;-1:-1:-1;;;;;48062:32:0;;;;;48123:4;48105;48110:1;48105:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48105:23:0;;;:7;;;;;;;;;:23;48165:15;;48327:10;;48165:15;;;;:66;;48239:6;;48165:15;;48308:4;;48327:10;48368:24;:15;48388:3;48368:19;:24::i;:::-;48165:238;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48429:30;48446:6;48454:4;48429:30;;;;;;;:::i;:::-;;;;;;;;47940:527;47890: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://a5ef658c076822609c63fff8e23d2b199466a9e26dacc12e8850f0333cb7ff90
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.