ETH Price: $3,269.70 (+4.54%)
 

Overview

Max Total Supply

1,000,000 FAM

Holders

54

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,595.766985646113131702 FAM

Value
$0.00
0x0d39cc2c61c0c585d066217359dd45b2af2479ec
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:
FAMSOCIAL

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-07
*/

/*
https://fam-social.com/
https://t.me/famsocial
*/

// SPDX-License-Identifier: MIT

// File: contracts/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

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

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

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

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

// File: contracts/IUniswapV2Router02.sol

pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

// File: contracts/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// File: contracts/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// File: contracts/Address.sol

// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage)
        private
        pure
    {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

// File: contracts/Context.sol

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

pragma solidity ^0.8.0;

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

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

// File: contracts/Ownable.sol

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

// File: contracts/SafeMath.sol

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/IERC20.sol

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: contracts/old.sol

pragma solidity 0.8.17;

contract Blacklist {
    struct AntiBot {
        bool antiBotStatus;
        mapping(address => uint256) _userFirstTry;
        mapping(address => uint256) _userLastTry;
        mapping(address => bool) _blacklistedUsers;
    }
    AntiBot antiBot;
}

abstract contract Configuration is IERC20 {
    string public _name = "FAMSOCIAL";
    string public _symbol = "FAM";
    uint8 public _decimals = 18;
    uint256 public _totalSupply = 1000000 * 10**_decimals; // 1 million total supply
    address public developerAddress =
        0x885d9F7e6b1913DF7743E473bB9101c01A607926; // Developer Address
    uint256 public maxTransactionAmount = _totalSupply / 100; // 1% of the total supply
    uint256 public maxWalletBalance = _totalSupply / 100; // 1% of the total supply
    address public uniswapV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    uint256 public numberOfTokensToSwapToLiquidity = _totalSupply / 1000; // 0.1% of the total supply
    uint8 public _liquidityFee = 3; // 3%
    uint8 public _developerFee = 2; // 2%
    bool public _FeeOnBuy = true;
    bool public _FeeOnSell = true;
    bool public _FeeOnTransfer = false;
}

contract FAMSOCIAL is Context, Configuration, Ownable, Blacklist {
    using SafeMath for uint256;
    using Address for address;
    mapping(address => bool) public whitelist;
    bool public isWhitelistingEnabled = false;

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

    mapping(address => bool) private _isExcludedFromFee;

    bool private inSwapAndLiquify;
    bool private swapAndLiquifyEnabled = true;

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

    uint256 public launchingTime;
    bool public tradeStarted;

    IUniswapV2Router02 public _uniswapV2Router =
        IUniswapV2Router02(uniswapV2Router);
    address public uniswapV2Pair =
        IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );

    constructor() {
        whitelist[_msgSender()] = true;
        whitelist[address(this)] = true;
        whitelist[developerAddress] = true;
        whitelist[uniswapV2Router] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[developerAddress] = true;
        _isExcludedFromFee[uniswapV2Router] = true;
        _approve(_msgSender(), address(uniswapV2Router), ~uint256(0));
        _approve(address(this), address(uniswapV2Router), ~uint256(0));
        antiBot.antiBotStatus = true;
        _totalOwned[_msgSender()] = _totalSupply; //mint all to msg.sender
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _totalOwned[account];
    }

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool res)
    {
        if (isWhitelistingEnabled == true) {
            require(
                (whitelist[_msgSender()] == true &&
                    whitelist[recipient] == true),
                "Transaction not allowed"
            );
            _transfer(_msgSender(), recipient, amount);
            return res = true;
        }
        if (isWhitelistingEnabled == false) {
            _transfer(_msgSender(), recipient, amount);
            return res = true;
        }
    }

    function allowance(address owner, address spender)
        public
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    // once enabled, can never be turned off
    function EnableTrading() external onlyOwner {
        tradeStarted = true;
        launchingTime = block.number;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool res) {
        if (isWhitelistingEnabled == true) {
            require(
                (whitelist[sender] == true && whitelist[recipient] == true),
                "Transaction not allowed"
            );
            _transfer(sender, recipient, amount);
            _approve(
                sender,
                _msgSender(),
                _allowances[sender][_msgSender()].sub(
                    amount,
                    "ERC20: transfer amount exceeds allowance"
                )
            );
            return res = true;
        }
        if (isWhitelistingEnabled == false) {
            _transfer(sender, recipient, amount);
            _approve(
                sender,
                _msgSender(),
                _allowances[sender][_msgSender()].sub(
                    amount,
                    "ERC20: transfer amount exceeds allowance"
                )
            );
            return res = true;
        }
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function toggleWhitelisting() external onlyOwner {
        isWhitelistingEnabled = !isWhitelistingEnabled;
    }

    // Add multiple addresses to the whitelist
    function addWhitelistAddresses(address[] calldata addresses)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < addresses.length; i++) {
            whitelist[addresses[i]] = true;
        }
    }

    // Add a single address to the whitelist
    function addWhitelistAddress(address addr) external onlyOwner {
        whitelist[addr] = true;
    }

    // Remove multiple addresses from the whitelist
    function removeWhitelistAddresses(address[] calldata addresses)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < addresses.length; i++) {
            whitelist[addresses[i]] = false;
        }
    }

    // Remove a single address from the whitelist
    function removeWhitelistAddress(address addr) external onlyOwner {
        whitelist[addr] = false;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        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);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(tradeStarted, "Wait for trading to start");
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            !antiBot._blacklistedUsers[to] && !antiBot._blacklistedUsers[from],
            "You are not allowed"
        );

        if (
            amount > maxTransactionAmount &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            revert("Transfer is bigger than max tx amount");
        }
        if (
            maxWalletBalance > 0 &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to] &&
            to != uniswapV2Pair
        ) {
            uint256 recipientBalance = balanceOf(to);
            require(
                recipientBalance + amount <= maxWalletBalance,
                "Your balance is too high"
            );
        }
        if (antiBot.antiBotStatus == true) {
            if (
                to != owner() &&
                to != address(_uniswapV2Router) &&
                to != uniswapV2Pair
            ) {
                require(
                    antiBot._userLastTry[tx.origin] < block.number,
                    "You cannot do more than 1 transaction per block"
                );
                antiBot._userLastTry[tx.origin] = block.number;
            }
        }
        if (
            block.number <= (launchingTime + 2) &&
            to != address(_uniswapV2Router) &&
            to != uniswapV2Pair
        ) {
            antiBot._blacklistedUsers[to] = true;
        }

        bool takeFee = _FeeOnTransfer;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        } else {
            if (from == uniswapV2Pair) {
                takeFee = _FeeOnBuy;
            } else if (to == uniswapV2Pair) {
                takeFee = _FeeOnSell;
            }
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function _beforeTransfer(address sender) internal {
        uint256 contractTokenBalance = balanceOf(address(this));
        checkLiqBal(contractTokenBalance, sender);
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) {
            _beforeTransfer(sender);

            _transferStandard(sender, recipient, amount);
        } else {
            _beforeTransfer(sender);

            _transferWithFee(sender, recipient, amount);
        }
    }

    function _transferWithFee(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 fromBalance = _totalOwned[sender];
        require(
            fromBalance >= tAmount,
            "ERC20: transfer amount exceeds balance"
        );

        uint256 devFee = (tAmount * _developerFee) / 100;
        uint256 liqFee = (tAmount * _liquidityFee) / 100;

        uint256 tTransferAmount = tAmount - devFee - liqFee;

        unchecked {
            _totalOwned[sender] = fromBalance - tTransferAmount;
            _totalOwned[recipient] += tTransferAmount;
            _totalOwned[address(this)] += liqFee;
            _totalOwned[developerAddress] += devFee;
        }

        emit Transfer(sender, recipient, tTransferAmount);
        emit Transfer(sender, developerAddress, devFee);
        emit Transfer(sender, address(this), liqFee);
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 fromBalance = _totalOwned[sender];
        require(
            fromBalance >= tAmount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _totalOwned[sender] = fromBalance - tAmount;
            _totalOwned[recipient] += tAmount;
        }

        emit Transfer(sender, recipient, tAmount);
    }

    function _getCurrentSupply() private view returns (uint256) {
        uint256 tSupply = _totalSupply;
        return tSupply;
    }

    function isExcludedFromFee(address _address) public view returns (bool) {
        return _isExcludedFromFee[_address];
    }

    function excludeFromFee(address _address) public onlyOwner {
        _isExcludedFromFee[_address] = true;
    }

    function includeInFee(address _address) public onlyOwner {
        _isExcludedFromFee[_address] = false;
    }

    function setDeveloperAddress(address _dev) external onlyOwner {
        developerAddress = _dev;
    }

    function setFeesStatus(
        bool FeeOnBuy,
        bool FeeOnsell,
        bool FeeOnTransfer
    ) external onlyOwner {
        _FeeOnBuy = FeeOnBuy;
        _FeeOnSell = FeeOnsell;
        _FeeOnTransfer = FeeOnTransfer;
    }

    function checkFeesStatus() public view onlyOwner returns (bool[] memory) {
        bool[] memory result = new bool[](3);
        result[0] = _FeeOnBuy;
        result[1] = _FeeOnSell;
        result[2] = _FeeOnTransfer;
        return result;
    }

    function checkLiqBal(uint256 contractTokenBalance, address sender)
        internal
    {
        if (contractTokenBalance >= maxTransactionAmount)
            contractTokenBalance = maxTransactionAmount;

        bool isOverRequiredTokenBalance = (contractTokenBalance >=
            numberOfTokensToSwapToLiquidity);
        if (
            isOverRequiredTokenBalance &&
            swapAndLiquifyEnabled &&
            !inSwapAndLiquify &&
            (sender != uniswapV2Pair)
        ) {
            startSwappingForLiquidity(contractTokenBalance);
        }
    }

    function startSwappingForLiquidity(uint256 amount) private lockTheSwap {
        uint256 half = amount.div(2);
        uint256 otherHalf = amount.sub(half);
        uint256 initialBalance = address(this).balance;
        _swapTokens(half);
        uint256 newBalance = address(this).balance.sub(initialBalance);
        _createLiquidity(otherHalf, newBalance);
    }

    function _swapTokens(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _createLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);

        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function blackListWallets(address _wallet, bool _status) public onlyOwner {
        antiBot._blacklistedUsers[_wallet] = _status; // true or false
    }

    // change the minimum amount of tokens to sell for ETH, swap add liquidity
    function setMinimunAmountOfTokenToSwapToLiquidity(uint256 _minAmount)
        external
        onlyOwner
        returns (bool)
    {
        numberOfTokensToSwapToLiquidity = _minAmount;
        return true;
    }

    function setMaxTransactionAmount(uint256 _amount) external onlyOwner {
        maxTransactionAmount = _amount * (10**_decimals);
    }

    function updateMaxWalletBalance(uint256 _newMaxBalance) external onlyOwner {
        maxWalletBalance = _newMaxBalance * (10**_decimals);
    }

    // disable Transfer antiBotStatus ANTI BOT - cannot be reenabled
    function disableAntiBot() external onlyOwner returns (bool) {
        antiBot.antiBotStatus = false;
        return true;
    }

    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":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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_FeeOnBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_FeeOnSell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_FeeOnTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developerFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addWhitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addWhitelistAddresses","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"blackListWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkFeesStatus","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"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":"developerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableAntiBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"includeInFee","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":"_address","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelistingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBalance","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":"numberOfTokensToSwapToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeWhitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeWhitelistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dev","type":"address"}],"name":"setDeveloperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"FeeOnBuy","type":"bool"},{"internalType":"bool","name":"FeeOnsell","type":"bool"},{"internalType":"bool","name":"FeeOnTransfer","type":"bool"}],"name":"setFeesStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAmount","type":"uint256"}],"name":"setMinimunAmountOfTokenToSwapToLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleWhitelisting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"res","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":"res","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":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxBalance","type":"uint256"}],"name":"updateMaxWalletBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600960809081526811905354d3d0d2505360ba1b60a0526000906200002a9082620006a6565b5060408051808201909152600381526246414d60e81b6020820152600190620000549082620006a6565b506002805460ff191660129081179091556200007290600a62000887565b6200008190620f42406200089f565b6003819055600480546001600160a01b03191673885d9f7e6b1913df7743e473bb9101c01a607926179055620000ba90606490620008b9565b6005556064600354620000ce9190620008b9565b600655600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905560035462000109906103e890620008b9565b6008556009805464ffffffffff19166301010203179055600f805460ff191690556013805461ff001916610100908117909155600754601580546001600160a01b039283168402610100600160a81b031990911617908190556040805163c45a015560e01b81529051939091049091169163c45a0155916004818101926020929091908290030181865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc9190620008dc565b6001600160a01b031663c9c6539630601560019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002559190620008dc565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c99190620008dc565b601680546001600160a01b0319166001600160a01b0392909216919091179055348015620002f657600080fd5b50620003023362000475565b336000818152600e602090815260408083208054600160ff199182168117909255308086528386208054831684179055600480546001600160a01b039081168852858820805485168617905560078054821689528689208054861687179055600954650100000000009004821689526012909752858820805485168617905591875284872080548416851790555481168652838620805483168417905593549093168452922080549091169091179055620003cc906007546001600160a01b0316600019620004d5565b600754620003e89030906001600160a01b0316600019620004d5565b600a805460ff1916600117905560035460106000620004043390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6003546040516200046791815260200190565b60405180910390a362000907565b600980546001600160a01b0383811665010000000000818102600160281b600160c81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166200053d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620005a05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000534565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200062c57607f821691505b6020821081036200064d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006a157600081815260208120601f850160051c810160208610156200067c5750805b601f850160051c820191505b818110156200069d5782815560010162000688565b5050505b505050565b81516001600160401b03811115620006c257620006c262000601565b620006da81620006d3845462000617565b8462000653565b602080601f831160018114620007125760008415620006f95750858301515b600019600386901b1c1916600185901b1785556200069d565b600085815260208120601f198616915b82811015620007435788860151825594840194600190910190840162000722565b5085821015620007625787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007c9578160001904821115620007ad57620007ad62000772565b80851615620007bb57918102915b93841c93908002906200078d565b509250929050565b600082620007e25750600162000881565b81620007f15750600062000881565b81600181146200080a5760028114620008155762000835565b600191505062000881565b60ff84111562000829576200082962000772565b50506001821b62000881565b5060208310610133831016604e8410600b84101617156200085a575081810a62000881565b62000866838362000788565b80600019048211156200087d576200087d62000772565b0290505b92915050565b60006200089860ff841683620007d1565b9392505050565b808202811582820484141762000881576200088162000772565b600082620008d757634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620008ef57600080fd5b81516001600160a01b03811681146200089857600080fd5b6124f680620009176000396000f3fe6080604052600436106102e85760003560e01c806370a0823111610190578063b09f1266116100dc578063d28d885211610095578063e3d5fdb61161006f578063e3d5fdb6146108f9578063ea2f0b3714610919578063f2fde38b14610939578063fbefa4131461095957600080fd5b8063d28d88521461087e578063dcc345f214610893578063dd62ed3e146108b357600080fd5b8063b09f1266146107dd578063b7ecbaae146107f2578063b83921a614610812578063bbde77c114610832578063c8c8ebe414610848578063caccd7f71461085e57600080fd5b80638ebe4fe5116101495780639b19251a116101235780639b19251a1461074b578063a22b557c1461077b578063a457c2d71461079d578063a9059cbb146107bd57600080fd5b80638ebe4fe5146106f657806394a7ef151461071657806395d89b411461073657600080fd5b806370a082311461062a578063715018a61461066057806386746510146106755780638c52c6c81461068f5780638d2efcb9146106af5780638da5cb5b146106d157600080fd5b80632a1cb2e81161024f578063437823ec116102085780634e363b65116101e25780634e363b65146105925780635342acb4146105b2578063583e0568146105eb5780636bc87c3a1461061057600080fd5b8063437823ec1461053357806348de478e1461055357806349bd5a5e1461057257600080fd5b80632a1cb2e814610486578063313ce567146104a757806332424aa3146104cd57806337aa30ee146104e757806339509351146104fd5780633eaaf86b1461051d57600080fd5b806318160ddd116102a157806318160ddd146103e2578063188b1bf1146103f75780631d97b7cd146104175780631e293c101461042c57806323b872dd1461044c57806329d42dbd1461046c57600080fd5b806306fdde03146102f457806307ce9de41461031f578063095ea7b3146103445780630b76dbec146103645780630e256a5e146103885780631694505e146103aa57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061030961096e565b6040516103169190611efe565b60405180910390f35b34801561032b57600080fd5b50610334610a00565b6040519015158152602001610316565b34801561035057600080fd5b5061033461035f366004611f61565b610a1a565b34801561037057600080fd5b5061037a60085481565b604051908152602001610316565b34801561039457600080fd5b506103a86103a3366004611f8d565b610a31565b005b3480156103b657600080fd5b506007546103ca906001600160a01b031681565b6040516001600160a01b039091168152602001610316565b3480156103ee57600080fd5b5060035461037a565b34801561040357600080fd5b506103a8610412366004612002565b610ab0565b34801561042357600080fd5b506103a8610ad9565b34801561043857600080fd5b506103a8610447366004612002565b610af4565b34801561045857600080fd5b5061033461046736600461201b565b610b1d565b34801561047857600080fd5b506015546103349060ff1681565b34801561049257600080fd5b50600954610334906301000000900460ff1681565b3480156104b357600080fd5b5060025460ff165b60405160ff9091168152602001610316565b3480156104d957600080fd5b506002546104bb9060ff1681565b3480156104f357600080fd5b5061037a60145481565b34801561050957600080fd5b50610334610518366004611f61565b610c4a565b34801561052957600080fd5b5061037a60035481565b34801561053f57600080fd5b506103a861054e36600461205c565b610c80565b34801561055f57600080fd5b506009546104bb90610100900460ff1681565b34801561057e57600080fd5b506016546103ca906001600160a01b031681565b34801561059e57600080fd5b506103346105ad366004612002565b610cac565b3480156105be57600080fd5b506103346105cd36600461205c565b6001600160a01b031660009081526012602052604090205460ff1690565b3480156105f757600080fd5b506015546103ca9061010090046001600160a01b031681565b34801561061c57600080fd5b506009546104bb9060ff1681565b34801561063657600080fd5b5061037a61064536600461205c565b6001600160a01b031660009081526010602052604090205490565b34801561066c57600080fd5b506103a8610cc4565b34801561068157600080fd5b50600f546103349060ff1681565b34801561069b57600080fd5b506103a86106aa366004612089565b610cd8565b3480156106bb57600080fd5b506106c4610d0b565b60405161031691906120be565b3480156106dd57600080fd5b50600954600160281b90046001600160a01b03166103ca565b34801561070257600080fd5b506009546103349062010000900460ff1681565b34801561072257600080fd5b506103a861073136600461205c565b610dda565b34801561074257600080fd5b50610309610e06565b34801561075757600080fd5b5061033461076636600461205c565b600e6020526000908152604090205460ff1681565b34801561078757600080fd5b5060095461033490640100000000900460ff1681565b3480156107a957600080fd5b506103346107b8366004611f61565b610e15565b3480156107c957600080fd5b506103346107d8366004611f61565b610e64565b3480156107e957600080fd5b50610309610f29565b3480156107fe57600080fd5b506103a861080d36600461205c565b610fb7565b34801561081e57600080fd5b506103a861082d366004611f8d565b610fe0565b34801561083e57600080fd5b5061037a60065481565b34801561085457600080fd5b5061037a60055481565b34801561086a57600080fd5b506004546103ca906001600160a01b031681565b34801561088a57600080fd5b5061030961105a565b34801561089f57600080fd5b506103a86108ae36600461205c565b611067565b3480156108bf57600080fd5b5061037a6108ce366004612104565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561090557600080fd5b506103a861091436600461213d565b611091565b34801561092557600080fd5b506103a861093436600461205c565b6110e3565b34801561094557600080fd5b506103a861095436600461205c565b61110c565b34801561096557600080fd5b506103a8611185565b60606000805461097d90612180565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990612180565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b6000610a0a6111a1565b50600a805460ff19169055600190565b6000610a27338484611203565b5060015b92915050565b610a396111a1565b60005b81811015610aab576001600e6000858585818110610a5c57610a5c6121ba565b9050602002016020810190610a71919061205c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610aa3816121e6565b915050610a3c565b505050565b610ab86111a1565b600254610ac99060ff16600a6122e3565b610ad390826122f2565b60065550565b610ae16111a1565b6015805460ff1916600117905543601455565b610afc6111a1565b600254610b0d9060ff16600a6122e3565b610b1790826122f2565b60055550565b600f5460009060ff161515600103610c29576001600160a01b0384166000908152600e602052604090205460ff1615156001148015610b7957506001600160a01b0383166000908152600e602052604090205460ff1615156001145b610bc45760405162461bcd60e51b8152602060048201526017602482015276151c985b9cd858dd1a5bdb881b9bdd08185b1b1bddd959604a1b60448201526064015b60405180910390fd5b610bcf848484611327565b610c218433610c1c85604051806060016040528060288152602001612454602891396001600160a01b038a16600090815260116020908152604080832033845290915290205491906118d0565b611203565b506001610c43565b600f5460ff161515600003610c4357610bcf848484611327565b9392505050565b3360008181526011602090815260408083206001600160a01b03871684529091528120549091610a27918590610c1c90866118fc565b610c886111a1565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6000610cb66111a1565b50600881905560015b919050565b610ccc6111a1565b610cd66000611908565b565b610ce06111a1565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6060610d156111a1565b6040805160038082526080820190925260009160208201606080368337019050509050600960029054906101000a900460ff1681600081518110610d5b57610d5b6121ba565b602002602001019015159081151581525050600960039054906101000a900460ff1681600181518110610d9057610d906121ba565b602002602001019015159081151581525050600960049054906101000a900460ff1681600281518110610dc557610dc56121ba565b91151560209283029190910190910152905090565b610de26111a1565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b60606001805461097d90612180565b6000610a273384610c1c8560405180606001604052806025815260200161249c602591393360009081526011602090815260408083206001600160a01b038d16845290915290205491906118d0565b600f5460009060ff161515600103610f1157336000908152600e602052604090205460ff1615156001148015610eb757506001600160a01b0383166000908152600e602052604090205460ff1615156001145b610efd5760405162461bcd60e51b8152602060048201526017602482015276151c985b9cd858dd1a5bdb881b9bdd08185b1b1bddd959604a1b6044820152606401610bbb565b610f09335b8484611327565b506001610a2b565b600f5460ff161515600003610a2b57610f0933610f02565b60018054610f3690612180565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6290612180565b8015610faf5780601f10610f8457610100808354040283529160200191610faf565b820191906000526020600020905b815481529060010190602001808311610f9257829003601f168201915b505050505081565b610fbf6111a1565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b610fe86111a1565b60005b81811015610aab576000600e600085858581811061100b5761100b6121ba565b9050602002016020810190611020919061205c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611052816121e6565b915050610feb565b60008054610f3690612180565b61106f6111a1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6110996111a1565b600980549115156401000000000264ff000000001993151563010000000263ff0000001995151562010000029590951663ffff000019909316929092179390931791909116179055565b6110eb6111a1565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6111146111a1565b6001600160a01b0381166111795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bbb565b61118281611908565b50565b61118d6111a1565b600f805460ff19811660ff90911615179055565b6009546001600160a01b03600160281b909104163314610cd65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bbb565b6001600160a01b0383166112655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bbb565b6001600160a01b0382166112c65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bbb565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60155460ff166113795760405162461bcd60e51b815260206004820152601960248201527f5761697420666f722074726164696e6720746f207374617274000000000000006044820152606401610bbb565b6001600160a01b0383166113dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bbb565b6001600160a01b03821661143f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bbb565b600081116114a15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bbb565b6001600160a01b0382166000908152600d602052604090205460ff161580156114e357506001600160a01b0383166000908152600d602052604090205460ff16155b6115255760405162461bcd60e51b8152602060048201526013602482015272165bdd48185c99481b9bdd08185b1b1bddd959606a1b6044820152606401610bbb565b6005548111801561154f57506001600160a01b03831660009081526012602052604090205460ff16155b801561157457506001600160a01b03821660009081526012602052604090205460ff16155b156115cf5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220697320626967676572207468616e206d617820747820616044820152641b5bdd5b9d60da1b6064820152608401610bbb565b60006006541180156115fa57506001600160a01b03831660009081526012602052604090205460ff16155b801561161f57506001600160a01b03821660009081526012602052604090205460ff16155b801561163957506016546001600160a01b03838116911614155b156116b4576001600160a01b0382166000908152601060205260409020546006546116648383612309565b11156116b25760405162461bcd60e51b815260206004820152601860248201527f596f75722062616c616e636520697320746f6f206869676800000000000000006044820152606401610bbb565b505b600a5460ff1615156001036117a3576009546001600160a01b03838116600160281b90920416148015906116fb57506015546001600160a01b038381166101009092041614155b801561171557506016546001600160a01b03838116911614155b156117a357326000908152600c602052604090205443116117905760405162461bcd60e51b815260206004820152602f60248201527f596f752063616e6e6f7420646f206d6f7265207468616e2031207472616e736160448201526e6374696f6e2070657220626c6f636b60881b6064820152608401610bbb565b326000908152600c602052604090204390555b6014546117b1906002612309565b43111580156117d357506015546001600160a01b038381166101009092041614155b80156117ed57506016546001600160a01b03838116911614155b15611816576001600160a01b0382166000908152600d60205260409020805460ff191660011790555b6009546001600160a01b03841660009081526012602052604090205460ff640100000000909204821691168061186457506001600160a01b03831660009081526012602052604090205460ff165b15611871575060006118be565b6016546001600160a01b0390811690851603611899575060095462010000900460ff166118be565b6016546001600160a01b03908116908416036118be57506009546301000000900460ff165b6118ca84848484611968565b50505050565b600081848411156118f45760405162461bcd60e51b8152600401610bbb9190611efe565b505050900390565b6000610c438284612309565b600980546001600160a01b03838116600160281b81810265010000000000600160c81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80611986576119768461199a565b6119818484846119b8565b6118ca565b61198f8461199a565b6118ca848484611a4d565b306000908152601060205260409020546119b48183611bc8565b5050565b6001600160a01b038316600090815260106020526040902054818110156119f15760405162461bcd60e51b8152600401610bbb9061231c565b6001600160a01b03808516600081815260106020526040808220868603905592861680825290839020805486019055915160008051602061247c83398151915290611a3f9086815260200190565b60405180910390a350505050565b6001600160a01b03831660009081526010602052604090205481811015611a865760405162461bcd60e51b8152600401610bbb9061231c565b600954600090606490611aa190610100900460ff16856122f2565b611aab9190612362565b600954909150600090606490611ac49060ff16866122f2565b611ace9190612362565b9050600081611add8487612384565b611ae79190612384565b6001600160a01b03808916600081815260106020526040808220858a0390558a841680835281832080548701905530835281832080548901905560045490941682529081902080548801905551929350909160008051602061247c83398151915290611b569085815260200190565b60405180910390a36004546040518481526001600160a01b039182169189169060008051602061247c8339815191529060200160405180910390a360405182815230906001600160a01b0389169060008051602061247c8339815191529060200160405180910390a350505050505050565b6005548210611bd75760055491505b60085482108015908190611bf25750601354610100900460ff165b8015611c01575060135460ff16155b8015611c1b57506016546001600160a01b03838116911614155b15610aab57610aab836013805460ff191660011790556000611c3e826002611c81565b90506000611c4c8383611c8d565b905047611c5883611c99565b6000611c644783611c8d565b9050611c708382611e16565b50506013805460ff19169055505050565b6000610c438284612362565b6000610c438284612384565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611cce57611cce6121ba565b60200260200101906001600160a01b031690816001600160a01b031681525050601560019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d659190612397565b81600181518110611d7857611d786121ba565b6001600160a01b039283166020918202929092010152601554611da391309161010090041684611203565b60155460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790611de09085906000908690309042906004016123b4565b600060405180830381600087803b158015611dfa57600080fd5b505af1158015611e0e573d6000803e3d6000fd5b505050505050565b601554611e3390309061010090046001600160a01b031684611203565b6015546001600160a01b036101009091041663f305d719823085600080611e6a6009546001600160a01b03600160281b9091041690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611ed2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ef79190612425565b5050505050565b600060208083528351808285015260005b81811015611f2b57858101830151858201604001528201611f0f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461118257600080fd5b60008060408385031215611f7457600080fd5b8235611f7f81611f4c565b946020939093013593505050565b60008060208385031215611fa057600080fd5b823567ffffffffffffffff80821115611fb857600080fd5b818501915085601f830112611fcc57600080fd5b813581811115611fdb57600080fd5b8660208260051b8501011115611ff057600080fd5b60209290920196919550909350505050565b60006020828403121561201457600080fd5b5035919050565b60008060006060848603121561203057600080fd5b833561203b81611f4c565b9250602084013561204b81611f4c565b929592945050506040919091013590565b60006020828403121561206e57600080fd5b8135610c4381611f4c565b80358015158114610cbf57600080fd5b6000806040838503121561209c57600080fd5b82356120a781611f4c565b91506120b560208401612079565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156120f85783511515835292840192918401916001016120da565b50909695505050505050565b6000806040838503121561211757600080fd5b823561212281611f4c565b9150602083013561213281611f4c565b809150509250929050565b60008060006060848603121561215257600080fd5b61215b84612079565b925061216960208501612079565b915061217760408501612079565b90509250925092565b600181811c9082168061219457607f821691505b6020821081036121b457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016121f8576121f86121d0565b5060010190565b600181815b8085111561223a578160001904821115612220576122206121d0565b8085161561222d57918102915b93841c9390800290612204565b509250929050565b60008261225157506001610a2b565b8161225e57506000610a2b565b8160018114612274576002811461227e5761229a565b6001915050610a2b565b60ff84111561228f5761228f6121d0565b50506001821b610a2b565b5060208310610133831016604e8410600b84101617156122bd575081810a610a2b565b6122c783836121ff565b80600019048211156122db576122db6121d0565b029392505050565b6000610c4360ff841683612242565b8082028115828204841417610a2b57610a2b6121d0565b80820180821115610a2b57610a2b6121d0565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60008261237f57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610a2b57610a2b6121d0565b6000602082840312156123a957600080fd5b8151610c4381611f4c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124045784516001600160a01b0316835293830193918301916001016123df565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561243a57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220670d829701d7981ff816d92dbe1100bbe0b9215b5b3479ae6a53fa47c4f7744a64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c806370a0823111610190578063b09f1266116100dc578063d28d885211610095578063e3d5fdb61161006f578063e3d5fdb6146108f9578063ea2f0b3714610919578063f2fde38b14610939578063fbefa4131461095957600080fd5b8063d28d88521461087e578063dcc345f214610893578063dd62ed3e146108b357600080fd5b8063b09f1266146107dd578063b7ecbaae146107f2578063b83921a614610812578063bbde77c114610832578063c8c8ebe414610848578063caccd7f71461085e57600080fd5b80638ebe4fe5116101495780639b19251a116101235780639b19251a1461074b578063a22b557c1461077b578063a457c2d71461079d578063a9059cbb146107bd57600080fd5b80638ebe4fe5146106f657806394a7ef151461071657806395d89b411461073657600080fd5b806370a082311461062a578063715018a61461066057806386746510146106755780638c52c6c81461068f5780638d2efcb9146106af5780638da5cb5b146106d157600080fd5b80632a1cb2e81161024f578063437823ec116102085780634e363b65116101e25780634e363b65146105925780635342acb4146105b2578063583e0568146105eb5780636bc87c3a1461061057600080fd5b8063437823ec1461053357806348de478e1461055357806349bd5a5e1461057257600080fd5b80632a1cb2e814610486578063313ce567146104a757806332424aa3146104cd57806337aa30ee146104e757806339509351146104fd5780633eaaf86b1461051d57600080fd5b806318160ddd116102a157806318160ddd146103e2578063188b1bf1146103f75780631d97b7cd146104175780631e293c101461042c57806323b872dd1461044c57806329d42dbd1461046c57600080fd5b806306fdde03146102f457806307ce9de41461031f578063095ea7b3146103445780630b76dbec146103645780630e256a5e146103885780631694505e146103aa57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061030961096e565b6040516103169190611efe565b60405180910390f35b34801561032b57600080fd5b50610334610a00565b6040519015158152602001610316565b34801561035057600080fd5b5061033461035f366004611f61565b610a1a565b34801561037057600080fd5b5061037a60085481565b604051908152602001610316565b34801561039457600080fd5b506103a86103a3366004611f8d565b610a31565b005b3480156103b657600080fd5b506007546103ca906001600160a01b031681565b6040516001600160a01b039091168152602001610316565b3480156103ee57600080fd5b5060035461037a565b34801561040357600080fd5b506103a8610412366004612002565b610ab0565b34801561042357600080fd5b506103a8610ad9565b34801561043857600080fd5b506103a8610447366004612002565b610af4565b34801561045857600080fd5b5061033461046736600461201b565b610b1d565b34801561047857600080fd5b506015546103349060ff1681565b34801561049257600080fd5b50600954610334906301000000900460ff1681565b3480156104b357600080fd5b5060025460ff165b60405160ff9091168152602001610316565b3480156104d957600080fd5b506002546104bb9060ff1681565b3480156104f357600080fd5b5061037a60145481565b34801561050957600080fd5b50610334610518366004611f61565b610c4a565b34801561052957600080fd5b5061037a60035481565b34801561053f57600080fd5b506103a861054e36600461205c565b610c80565b34801561055f57600080fd5b506009546104bb90610100900460ff1681565b34801561057e57600080fd5b506016546103ca906001600160a01b031681565b34801561059e57600080fd5b506103346105ad366004612002565b610cac565b3480156105be57600080fd5b506103346105cd36600461205c565b6001600160a01b031660009081526012602052604090205460ff1690565b3480156105f757600080fd5b506015546103ca9061010090046001600160a01b031681565b34801561061c57600080fd5b506009546104bb9060ff1681565b34801561063657600080fd5b5061037a61064536600461205c565b6001600160a01b031660009081526010602052604090205490565b34801561066c57600080fd5b506103a8610cc4565b34801561068157600080fd5b50600f546103349060ff1681565b34801561069b57600080fd5b506103a86106aa366004612089565b610cd8565b3480156106bb57600080fd5b506106c4610d0b565b60405161031691906120be565b3480156106dd57600080fd5b50600954600160281b90046001600160a01b03166103ca565b34801561070257600080fd5b506009546103349062010000900460ff1681565b34801561072257600080fd5b506103a861073136600461205c565b610dda565b34801561074257600080fd5b50610309610e06565b34801561075757600080fd5b5061033461076636600461205c565b600e6020526000908152604090205460ff1681565b34801561078757600080fd5b5060095461033490640100000000900460ff1681565b3480156107a957600080fd5b506103346107b8366004611f61565b610e15565b3480156107c957600080fd5b506103346107d8366004611f61565b610e64565b3480156107e957600080fd5b50610309610f29565b3480156107fe57600080fd5b506103a861080d36600461205c565b610fb7565b34801561081e57600080fd5b506103a861082d366004611f8d565b610fe0565b34801561083e57600080fd5b5061037a60065481565b34801561085457600080fd5b5061037a60055481565b34801561086a57600080fd5b506004546103ca906001600160a01b031681565b34801561088a57600080fd5b5061030961105a565b34801561089f57600080fd5b506103a86108ae36600461205c565b611067565b3480156108bf57600080fd5b5061037a6108ce366004612104565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561090557600080fd5b506103a861091436600461213d565b611091565b34801561092557600080fd5b506103a861093436600461205c565b6110e3565b34801561094557600080fd5b506103a861095436600461205c565b61110c565b34801561096557600080fd5b506103a8611185565b60606000805461097d90612180565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990612180565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b6000610a0a6111a1565b50600a805460ff19169055600190565b6000610a27338484611203565b5060015b92915050565b610a396111a1565b60005b81811015610aab576001600e6000858585818110610a5c57610a5c6121ba565b9050602002016020810190610a71919061205c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610aa3816121e6565b915050610a3c565b505050565b610ab86111a1565b600254610ac99060ff16600a6122e3565b610ad390826122f2565b60065550565b610ae16111a1565b6015805460ff1916600117905543601455565b610afc6111a1565b600254610b0d9060ff16600a6122e3565b610b1790826122f2565b60055550565b600f5460009060ff161515600103610c29576001600160a01b0384166000908152600e602052604090205460ff1615156001148015610b7957506001600160a01b0383166000908152600e602052604090205460ff1615156001145b610bc45760405162461bcd60e51b8152602060048201526017602482015276151c985b9cd858dd1a5bdb881b9bdd08185b1b1bddd959604a1b60448201526064015b60405180910390fd5b610bcf848484611327565b610c218433610c1c85604051806060016040528060288152602001612454602891396001600160a01b038a16600090815260116020908152604080832033845290915290205491906118d0565b611203565b506001610c43565b600f5460ff161515600003610c4357610bcf848484611327565b9392505050565b3360008181526011602090815260408083206001600160a01b03871684529091528120549091610a27918590610c1c90866118fc565b610c886111a1565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6000610cb66111a1565b50600881905560015b919050565b610ccc6111a1565b610cd66000611908565b565b610ce06111a1565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6060610d156111a1565b6040805160038082526080820190925260009160208201606080368337019050509050600960029054906101000a900460ff1681600081518110610d5b57610d5b6121ba565b602002602001019015159081151581525050600960039054906101000a900460ff1681600181518110610d9057610d906121ba565b602002602001019015159081151581525050600960049054906101000a900460ff1681600281518110610dc557610dc56121ba565b91151560209283029190910190910152905090565b610de26111a1565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b60606001805461097d90612180565b6000610a273384610c1c8560405180606001604052806025815260200161249c602591393360009081526011602090815260408083206001600160a01b038d16845290915290205491906118d0565b600f5460009060ff161515600103610f1157336000908152600e602052604090205460ff1615156001148015610eb757506001600160a01b0383166000908152600e602052604090205460ff1615156001145b610efd5760405162461bcd60e51b8152602060048201526017602482015276151c985b9cd858dd1a5bdb881b9bdd08185b1b1bddd959604a1b6044820152606401610bbb565b610f09335b8484611327565b506001610a2b565b600f5460ff161515600003610a2b57610f0933610f02565b60018054610f3690612180565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6290612180565b8015610faf5780601f10610f8457610100808354040283529160200191610faf565b820191906000526020600020905b815481529060010190602001808311610f9257829003601f168201915b505050505081565b610fbf6111a1565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b610fe86111a1565b60005b81811015610aab576000600e600085858581811061100b5761100b6121ba565b9050602002016020810190611020919061205c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611052816121e6565b915050610feb565b60008054610f3690612180565b61106f6111a1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6110996111a1565b600980549115156401000000000264ff000000001993151563010000000263ff0000001995151562010000029590951663ffff000019909316929092179390931791909116179055565b6110eb6111a1565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6111146111a1565b6001600160a01b0381166111795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bbb565b61118281611908565b50565b61118d6111a1565b600f805460ff19811660ff90911615179055565b6009546001600160a01b03600160281b909104163314610cd65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bbb565b6001600160a01b0383166112655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bbb565b6001600160a01b0382166112c65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bbb565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60155460ff166113795760405162461bcd60e51b815260206004820152601960248201527f5761697420666f722074726164696e6720746f207374617274000000000000006044820152606401610bbb565b6001600160a01b0383166113dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bbb565b6001600160a01b03821661143f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bbb565b600081116114a15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bbb565b6001600160a01b0382166000908152600d602052604090205460ff161580156114e357506001600160a01b0383166000908152600d602052604090205460ff16155b6115255760405162461bcd60e51b8152602060048201526013602482015272165bdd48185c99481b9bdd08185b1b1bddd959606a1b6044820152606401610bbb565b6005548111801561154f57506001600160a01b03831660009081526012602052604090205460ff16155b801561157457506001600160a01b03821660009081526012602052604090205460ff16155b156115cf5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220697320626967676572207468616e206d617820747820616044820152641b5bdd5b9d60da1b6064820152608401610bbb565b60006006541180156115fa57506001600160a01b03831660009081526012602052604090205460ff16155b801561161f57506001600160a01b03821660009081526012602052604090205460ff16155b801561163957506016546001600160a01b03838116911614155b156116b4576001600160a01b0382166000908152601060205260409020546006546116648383612309565b11156116b25760405162461bcd60e51b815260206004820152601860248201527f596f75722062616c616e636520697320746f6f206869676800000000000000006044820152606401610bbb565b505b600a5460ff1615156001036117a3576009546001600160a01b03838116600160281b90920416148015906116fb57506015546001600160a01b038381166101009092041614155b801561171557506016546001600160a01b03838116911614155b156117a357326000908152600c602052604090205443116117905760405162461bcd60e51b815260206004820152602f60248201527f596f752063616e6e6f7420646f206d6f7265207468616e2031207472616e736160448201526e6374696f6e2070657220626c6f636b60881b6064820152608401610bbb565b326000908152600c602052604090204390555b6014546117b1906002612309565b43111580156117d357506015546001600160a01b038381166101009092041614155b80156117ed57506016546001600160a01b03838116911614155b15611816576001600160a01b0382166000908152600d60205260409020805460ff191660011790555b6009546001600160a01b03841660009081526012602052604090205460ff640100000000909204821691168061186457506001600160a01b03831660009081526012602052604090205460ff165b15611871575060006118be565b6016546001600160a01b0390811690851603611899575060095462010000900460ff166118be565b6016546001600160a01b03908116908416036118be57506009546301000000900460ff165b6118ca84848484611968565b50505050565b600081848411156118f45760405162461bcd60e51b8152600401610bbb9190611efe565b505050900390565b6000610c438284612309565b600980546001600160a01b03838116600160281b81810265010000000000600160c81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80611986576119768461199a565b6119818484846119b8565b6118ca565b61198f8461199a565b6118ca848484611a4d565b306000908152601060205260409020546119b48183611bc8565b5050565b6001600160a01b038316600090815260106020526040902054818110156119f15760405162461bcd60e51b8152600401610bbb9061231c565b6001600160a01b03808516600081815260106020526040808220868603905592861680825290839020805486019055915160008051602061247c83398151915290611a3f9086815260200190565b60405180910390a350505050565b6001600160a01b03831660009081526010602052604090205481811015611a865760405162461bcd60e51b8152600401610bbb9061231c565b600954600090606490611aa190610100900460ff16856122f2565b611aab9190612362565b600954909150600090606490611ac49060ff16866122f2565b611ace9190612362565b9050600081611add8487612384565b611ae79190612384565b6001600160a01b03808916600081815260106020526040808220858a0390558a841680835281832080548701905530835281832080548901905560045490941682529081902080548801905551929350909160008051602061247c83398151915290611b569085815260200190565b60405180910390a36004546040518481526001600160a01b039182169189169060008051602061247c8339815191529060200160405180910390a360405182815230906001600160a01b0389169060008051602061247c8339815191529060200160405180910390a350505050505050565b6005548210611bd75760055491505b60085482108015908190611bf25750601354610100900460ff165b8015611c01575060135460ff16155b8015611c1b57506016546001600160a01b03838116911614155b15610aab57610aab836013805460ff191660011790556000611c3e826002611c81565b90506000611c4c8383611c8d565b905047611c5883611c99565b6000611c644783611c8d565b9050611c708382611e16565b50506013805460ff19169055505050565b6000610c438284612362565b6000610c438284612384565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611cce57611cce6121ba565b60200260200101906001600160a01b031690816001600160a01b031681525050601560019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d659190612397565b81600181518110611d7857611d786121ba565b6001600160a01b039283166020918202929092010152601554611da391309161010090041684611203565b60155460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790611de09085906000908690309042906004016123b4565b600060405180830381600087803b158015611dfa57600080fd5b505af1158015611e0e573d6000803e3d6000fd5b505050505050565b601554611e3390309061010090046001600160a01b031684611203565b6015546001600160a01b036101009091041663f305d719823085600080611e6a6009546001600160a01b03600160281b9091041690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611ed2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ef79190612425565b5050505050565b600060208083528351808285015260005b81811015611f2b57858101830151858201604001528201611f0f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461118257600080fd5b60008060408385031215611f7457600080fd5b8235611f7f81611f4c565b946020939093013593505050565b60008060208385031215611fa057600080fd5b823567ffffffffffffffff80821115611fb857600080fd5b818501915085601f830112611fcc57600080fd5b813581811115611fdb57600080fd5b8660208260051b8501011115611ff057600080fd5b60209290920196919550909350505050565b60006020828403121561201457600080fd5b5035919050565b60008060006060848603121561203057600080fd5b833561203b81611f4c565b9250602084013561204b81611f4c565b929592945050506040919091013590565b60006020828403121561206e57600080fd5b8135610c4381611f4c565b80358015158114610cbf57600080fd5b6000806040838503121561209c57600080fd5b82356120a781611f4c565b91506120b560208401612079565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156120f85783511515835292840192918401916001016120da565b50909695505050505050565b6000806040838503121561211757600080fd5b823561212281611f4c565b9150602083013561213281611f4c565b809150509250929050565b60008060006060848603121561215257600080fd5b61215b84612079565b925061216960208501612079565b915061217760408501612079565b90509250925092565b600181811c9082168061219457607f821691505b6020821081036121b457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016121f8576121f86121d0565b5060010190565b600181815b8085111561223a578160001904821115612220576122206121d0565b8085161561222d57918102915b93841c9390800290612204565b509250929050565b60008261225157506001610a2b565b8161225e57506000610a2b565b8160018114612274576002811461227e5761229a565b6001915050610a2b565b60ff84111561228f5761228f6121d0565b50506001821b610a2b565b5060208310610133831016604e8410600b84101617156122bd575081810a610a2b565b6122c783836121ff565b80600019048211156122db576122db6121d0565b029392505050565b6000610c4360ff841683612242565b8082028115828204841417610a2b57610a2b6121d0565b80820180821115610a2b57610a2b6121d0565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60008261237f57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610a2b57610a2b6121d0565b6000602082840312156123a957600080fd5b8151610c4381611f4c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124045784516001600160a01b0316835293830193918301916001016123df565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561243a57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220670d829701d7981ff816d92dbe1100bbe0b9215b5b3479ae6a53fa47c4f7744a64736f6c63430008110033

Deployed Bytecode Sourcemap

34934:14916:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36640:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49680:130;;;;;;;;;;;;;:::i;:::-;;;732:14:1;;725:22;707:41;;695:2;680:18;49680:130:0;567:187:1;37961:193:0;;;;;;;;;;-1:-1:-1;37961:193:0;;;;;:::i;:::-;;:::i;34632:68::-;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;34632:68:0;1215:177:1;40347:225:0;;;;;;;;;;-1:-1:-1;40347:225:0;;;;;:::i;:::-;;:::i;:::-;;34550:75;;;;;;;;;;-1:-1:-1;34550:75:0;;;;-1:-1:-1;;;;;34550:75:0;;;;;;-1:-1:-1;;;;;2181:32:1;;;2163:51;;2151:2;2136:18;34550:75:0;2017:203:1;36917:100:0;;;;;;;;;;-1:-1:-1;36997:12:0;;36917:100;;49457:145;;;;;;;;;;-1:-1:-1;49457:145:0;;;;;:::i;:::-;;:::i;38208:121::-;;;;;;;;;;;;;:::i;49313:136::-;;;;;;;;;;-1:-1:-1;49313:136:0;;;;;:::i;:::-;;:::i;38337:1116::-;;;;;;;;;;-1:-1:-1;38337:1116:0;;;;;:::i;:::-;;:::i;35600:24::-;;;;;;;;;;-1:-1:-1;35600:24:0;;;;;;;;34856:29;;;;;;;;;;-1:-1:-1;34856:29:0;;;;;;;;;;;36826:83;;;;;;;;;;-1:-1:-1;36892:9:0;;;;36826:83;;;3043:4:1;3031:17;;;3013:36;;3001:2;2986:18;36826:83:0;2871:184:1;34143:27:0;;;;;;;;;;-1:-1:-1;34143:27:0;;;;;;;;35565:28;;;;;;;;;;;;;;;;39461:300;;;;;;;;;;-1:-1:-1;39461:300:0;;;;;:::i;:::-;;:::i;34177:53::-;;;;;;;;;;;;;;;;46151:113;;;;;;;;;;-1:-1:-1;46151:113:0;;;;;:::i;:::-;;:::i;34778:30::-;;;;;;;;;;-1:-1:-1;34778:30:0;;;;;;;;;;;35729:173;;;;;;;;;;-1:-1:-1;35729:173:0;;;;-1:-1:-1;;;;;35729:173:0;;;49084:221;;;;;;;;;;-1:-1:-1;49084:221:0;;;;;:::i;:::-;;:::i;46017:126::-;;;;;;;;;;-1:-1:-1;46017:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;46107:28:0;46083:4;46107:28;;;:18;:28;;;;;;;;;46017:126;35633:89;;;;;;;;;;-1:-1:-1;35633:89:0;;;;;;;-1:-1:-1;;;;;35633:89:0;;;34735:30;;;;;;;;;;-1:-1:-1;34735:30:0;;;;;;;;37025:121;;;;;;;;;;-1:-1:-1;37025:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;37118:20:0;37091:7;37118:20;;;:11;:20;;;;;;;37025:121;22758:103;;;;;;;;;;;;;:::i;35119:41::-;;;;;;;;;;-1:-1:-1;35119:41:0;;;;;;;;48842:154;;;;;;;;;;-1:-1:-1;48842:154:0;;;;;:::i;:::-;;:::i;46752:254::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22110:87::-;;;;;;;;;;-1:-1:-1;22183:6:0;;-1:-1:-1;;;22183:6:0;;-1:-1:-1;;;;;22183:6:0;22110:87;;34821:28;;;;;;;;;;-1:-1:-1;34821:28:0;;;;;;;;;;;40626:103;;;;;;;;;;-1:-1:-1;40626:103:0;;;;;:::i;:::-;;:::i;36731:87::-;;;;;;;;;;;;;:::i;35071:41::-;;;;;;;;;;-1:-1:-1;35071:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34892:34;;;;;;;;;;-1:-1:-1;34892:34:0;;;;;;;;;;;39769:400;;;;;;;;;;-1:-1:-1;39769:400:0;;;;;:::i;:::-;;:::i;37154:607::-;;;;;;;;;;-1:-1:-1;37154:607:0;;;;;:::i;:::-;;:::i;34107:29::-;;;;;;;;;;;;;:::i;41078:107::-;;;;;;;;;;-1:-1:-1;41078:107:0;;;;;:::i;:::-;;:::i;40790:229::-;;;;;;;;;;-1:-1:-1;40790:229:0;;;;;:::i;:::-;;:::i;34465:52::-;;;;;;;;;;;;;;;;34376:56;;;;;;;;;;;;;;;;34263:85;;;;;;;;;;-1:-1:-1;34263:85:0;;;;-1:-1:-1;;;;;34263:85:0;;;34067:33;;;;;;;;;;;;;:::i;46392:104::-;;;;;;;;;;-1:-1:-1;46392:104:0;;;;;:::i;:::-;;:::i;37769:184::-;;;;;;;;;;-1:-1:-1;37769:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;37918:18:0;;;37886:7;37918:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;37769:184;46504:240;;;;;;;;;;-1:-1:-1;46504:240:0;;;;;:::i;:::-;;:::i;46272:112::-;;;;;;;;;;-1:-1:-1;46272:112:0;;;;;:::i;:::-;;:::i;23016:238::-;;;;;;;;;;-1:-1:-1;23016:238:0;;;;;:::i;:::-;;:::i;40177:114::-;;;;;;;;;;;;;:::i;36640:83::-;36677:13;36710:5;36703:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36640:83;:::o;49680:130::-;49734:4;21996:13;:11;:13::i;:::-;-1:-1:-1;49751:7:0::1;:29:::0;;-1:-1:-1;;49751:29:0::1;::::0;;;49680:130;:::o;37961:193::-;38063:4;38085:39;20741:10;38108:7;38117:6;38085:8;:39::i;:::-;-1:-1:-1;38142:4:0;37961:193;;;;;:::o;40347:225::-;21996:13;:11;:13::i;:::-;40466:9:::1;40461:104;40481:20:::0;;::::1;40461:104;;;40549:4;40523:9;:23;40533:9;;40543:1;40533:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40523:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40523:23:0;:30;;-1:-1:-1;;40523:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40503:3;::::1;::::0;::::1;:::i;:::-;;;;40461:104;;;;40347:225:::0;;:::o;49457:145::-;21996:13;:11;:13::i;:::-;49584:9:::1;::::0;49580:13:::1;::::0;49584:9:::1;;49580:2;:13;:::i;:::-;49562:32;::::0;:14;:32:::1;:::i;:::-;49543:16;:51:::0;-1:-1:-1;49457:145:0:o;38208:121::-;21996:13;:11;:13::i;:::-;38263:12:::1;:19:::0;;-1:-1:-1;;38263:19:0::1;38278:4;38263:19;::::0;;38309:12:::1;38293:13;:28:::0;38208:121::o;49313:136::-;21996:13;:11;:13::i;:::-;49431:9:::1;::::0;49427:13:::1;::::0;49431:9:::1;;49427:2;:13;:::i;:::-;49416:25;::::0;:7;:25:::1;:::i;:::-;49393:20;:48:::0;-1:-1:-1;49313:136:0:o;38337:1116::-;38494:21;;38469:8;;38494:21;;:29;;:21;:29;38490:552;;-1:-1:-1;;;;;38567:17:0;;;;;;:9;:17;;;;;;;;:25;;:17;:25;:57;;;;-1:-1:-1;;;;;;38596:20:0;;;;;;:9;:20;;;;;;;;:28;;:20;:28;38567:57;38540:144;;;;-1:-1:-1;;;38540:144:0;;7939:2:1;38540:144:0;;;7921:21:1;7978:2;7958:18;;;7951:30;-1:-1:-1;;;7997:18:1;;;7990:53;8060:18;;38540:144:0;;;;;;;;;38699:36;38709:6;38717:9;38728:6;38699:9;:36::i;:::-;38750:248;38777:6;20741:10;38833:150;38893:6;38833:150;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38833:19:0;;;;;;:11;:19;;;;;;;;20741:10;38833:33;;;;;;;;;;:37;:150::i;:::-;38750:8;:248::i;:::-;-1:-1:-1;39026:4:0;39013:17;;38490:552;39056:21;;;;:30;;:21;:30;39052:394;;39103:36;39113:6;39121:9;39132:6;39103:9;:36::i;39052:394::-;38337:1116;;;;;:::o;39461:300::-;20741:10;39576:4;39670:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;39670:34:0;;;;;;;;;;39576:4;;39598:133;;39648:7;;39670:50;;39709:10;39670:38;:50::i;46151:113::-;21996:13;:11;:13::i;:::-;-1:-1:-1;;;;;46221:28:0::1;;::::0;;;:18:::1;:28;::::0;;;;:35;;-1:-1:-1;;46221:35:0::1;46252:4;46221:35;::::0;;46151:113::o;49084:221::-;49209:4;21996:13;:11;:13::i;:::-;-1:-1:-1;49231:31:0::1;:44:::0;;;49293:4:::1;22020:1;49084:221:::0;;;:::o;22758:103::-;21996:13;:11;:13::i;:::-;22823:30:::1;22850:1;22823:18;:30::i;:::-;22758:103::o:0;48842:154::-;21996:13;:11;:13::i;:::-;-1:-1:-1;;;;;48927:34:0;;;::::1;;::::0;;;:25;:34:::1;::::0;;;;:44;;-1:-1:-1;;48927:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48842:154::o;46752:254::-;46810:13;21996;:11;:13::i;:::-;46859::::1;::::0;;46870:1:::1;46859:13:::0;;;;;::::1;::::0;;;46836:20:::1;::::0;46859:13:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;46859:13:0::1;46836:36;;46895:9;;;;;;;;;;;46883:6;46890:1;46883:9;;;;;;;;:::i;:::-;;;;;;:21;;;;;;;;;::::0;::::1;46927:10;;;;;;;;;;;46915:6;46922:1;46915:9;;;;;;;;:::i;:::-;;;;;;:22;;;;;;;;;::::0;::::1;46960:14;;;;;;;;;;;46948:6;46955:1;46948:9;;;;;;;;:::i;:::-;:26:::0;::::1;;:9;::::0;;::::1;::::0;;;;;;;:26;46992:6;-1:-1:-1;46752:254:0;:::o;40626:103::-;21996:13;:11;:13::i;:::-;-1:-1:-1;;;;;40699:15:0::1;;::::0;;;:9:::1;:15;::::0;;;;:22;;-1:-1:-1;;40699:22:0::1;40717:4;40699:22;::::0;;40626:103::o;36731:87::-;36770:13;36803:7;36796:14;;;;;:::i;39769:400::-;39889:4;39911:228;20741:10;39961:7;39983:145;40040:15;39983:145;;;;;;;;;;;;;;;;;20741:10;39983:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;39983:34:0;;;;;;;;;;;;:38;:145::i;37154:607::-;37289:21;;37259:8;;37289:21;;:29;;:21;:29;37285:322;;20741:10;37362:23;;;;:9;:23;;;;;;;;:31;;:23;:31;:84;;;;-1:-1:-1;;;;;;37418:20:0;;;;;;:9;:20;;;;;;;;:28;;:20;:28;37362:84;37335:171;;;;-1:-1:-1;;;37335:171:0;;7939:2:1;37335:171:0;;;7921:21:1;7978:2;7958:18;;;7951:30;-1:-1:-1;;;7997:18:1;;;7990:53;8060:18;;37335:171:0;7737:347:1;37335:171:0;37521:42;20741:10;37531:12;37545:9;37556:6;37521:9;:42::i;:::-;-1:-1:-1;37591:4:0;37578:17;;37285:322;37621:21;;;;:30;;:21;:30;37617:137;;37668:42;20741:10;37678:12;20661:98;34107:29;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41078:107::-;21996:13;:11;:13::i;:::-;-1:-1:-1;;;;;41154:15:0::1;41172:5;41154:15:::0;;;:9:::1;:15;::::0;;;;:23;;-1:-1:-1;;41154:23:0::1;::::0;;41078:107::o;40790:229::-;21996:13;:11;:13::i;:::-;40912:9:::1;40907:105;40927:20:::0;;::::1;40907:105;;;40995:5;40969:9;:23;40979:9;;40989:1;40979:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40969:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40969:23:0;:31;;-1:-1:-1;;40969:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40949:3;::::1;::::0;::::1;:::i;:::-;;;;40907:105;;34067:33:::0;;;;;;;:::i;46392:104::-;21996:13;:11;:13::i;:::-;46465:16:::1;:23:::0;;-1:-1:-1;;;;;;46465:23:0::1;-1:-1:-1::0;;;;;46465:23:0;;;::::1;::::0;;;::::1;::::0;;46392:104::o;46504:240::-;21996:13;:11;:13::i;:::-;46642:9:::1;:20:::0;;46706:30;::::1;;::::0;::::1;-1:-1:-1::0;;46673:22:0;::::1;;::::0;::::1;-1:-1:-1::0;;46642:20:0;::::1;;::::0;::::1;46673:22:::0;;;;-1:-1:-1;;46673:22:0;;;;;;;;;;::::1;46706:30:::0;;;::::1;;::::0;;46504:240::o;46272:112::-;21996:13;:11;:13::i;:::-;-1:-1:-1;;;;;46340:28:0::1;46371:5;46340:28:::0;;;:18:::1;:28;::::0;;;;:36;;-1:-1:-1;;46340:36:0::1;::::0;;46272:112::o;23016:238::-;21996:13;:11;:13::i;:::-;-1:-1:-1;;;;;23119:22:0;::::1;23097:110;;;::::0;-1:-1:-1;;;23097:110:0;;8423:2:1;23097:110:0::1;::::0;::::1;8405:21:1::0;8462:2;8442:18;;;8435:30;8501:34;8481:18;;;8474:62;-1:-1:-1;;;8552:18:1;;;8545:36;8598:19;;23097:110:0::1;8221:402:1::0;23097:110:0::1;23218:28;23237:8;23218:18;:28::i;:::-;23016:238:::0;:::o;40177:114::-;21996:13;:11;:13::i;:::-;40262:21:::1;::::0;;-1:-1:-1;;40237:46:0;::::1;40262:21;::::0;;::::1;40261:22;40237:46;::::0;;40177:114::o;22275:132::-;22183:6;;-1:-1:-1;;;;;;;;22183:6:0;;;;20741:10;22339:23;22331:68;;;;-1:-1:-1;;;22331:68:0;;8830:2:1;22331:68:0;;;8812:21:1;;;8849:18;;;8842:30;8908:34;8888:18;;;8881:62;8960:18;;22331:68:0;8628:356:1;41193:371:0;-1:-1:-1;;;;;41320:19:0;;41312:68;;;;-1:-1:-1;;;41312:68:0;;9191:2:1;41312:68:0;;;9173:21:1;9230:2;9210:18;;;9203:30;9269:34;9249:18;;;9242:62;-1:-1:-1;;;9320:18:1;;;9313:34;9364:19;;41312:68:0;8989:400:1;41312:68:0;-1:-1:-1;;;;;41399:21:0;;41391:68;;;;-1:-1:-1;;;41391:68:0;;9596:2:1;41391:68:0;;;9578:21:1;9635:2;9615:18;;;9608:30;9674:34;9654:18;;;9647:62;-1:-1:-1;;;9725:18:1;;;9718:32;9767:19;;41391:68:0;9394:398:1;41391:68:0;-1:-1:-1;;;;;41472:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;41524:32;;1361:25:1;;;41524:32:0;;1334:18:1;41524:32:0;;;;;;;41193:371;;;:::o;41572:2273::-;41694:12;;;;41686:50;;;;-1:-1:-1;;;41686:50:0;;9999:2:1;41686:50:0;;;9981:21:1;10038:2;10018:18;;;10011:30;10077:27;10057:18;;;10050:55;10122:18;;41686:50:0;9797:349:1;41686:50:0;-1:-1:-1;;;;;41755:18:0;;41747:68;;;;-1:-1:-1;;;41747:68:0;;10353:2:1;41747:68:0;;;10335:21:1;10392:2;10372:18;;;10365:30;10431:34;10411:18;;;10404:62;-1:-1:-1;;;10482:18:1;;;10475:35;10527:19;;41747:68:0;10151:401:1;41747:68:0;-1:-1:-1;;;;;41834:16:0;;41826:64;;;;-1:-1:-1;;;41826:64:0;;10759:2:1;41826:64:0;;;10741:21:1;10798:2;10778:18;;;10771:30;10837:34;10817:18;;;10810:62;-1:-1:-1;;;10888:18:1;;;10881:33;10931:19;;41826:64:0;10557:399:1;41826:64:0;41918:1;41909:6;:10;41901:64;;;;-1:-1:-1;;;41901:64:0;;11163:2:1;41901:64:0;;;11145:21:1;11202:2;11182:18;;;11175:30;11241:34;11221:18;;;11214:62;-1:-1:-1;;;11292:18:1;;;11285:39;11341:19;;41901:64:0;10961:405:1;41901:64:0;-1:-1:-1;;;;;41999:29:0;;;;;;:25;:29;;;;;;;;41998:30;:66;;;;-1:-1:-1;;;;;;42033:31:0;;;;;;:25;:31;;;;;;;;42032:32;41998:66;41976:135;;;;-1:-1:-1;;;41976:135:0;;11573:2:1;41976:135:0;;;11555:21:1;11612:2;11592:18;;;11585:30;-1:-1:-1;;;11631:18:1;;;11624:49;11690:18;;41976:135:0;11371:343:1;41976:135:0;42151:20;;42142:6;:29;:71;;;;-1:-1:-1;;;;;;42189:24:0;;;;;;:18;:24;;;;;;;;42188:25;42142:71;:111;;;;-1:-1:-1;;;;;;42231:22:0;;;;;;:18;:22;;;;;;;;42230:23;42142:111;42124:215;;;42280:47;;-1:-1:-1;;;42280:47:0;;11921:2:1;42280:47:0;;;11903:21:1;11960:2;11940:18;;;11933:30;11999:34;11979:18;;;11972:62;-1:-1:-1;;;12050:18:1;;;12043:35;12095:19;;42280:47:0;11719:401:1;42124:215:0;42386:1;42367:16;;:20;:62;;;;-1:-1:-1;;;;;;42405:24:0;;;;;;:18;:24;;;;;;;;42404:25;42367:62;:102;;;;-1:-1:-1;;;;;;42447:22:0;;;;;;:18;:22;;;;;;;;42446:23;42367:102;:138;;;;-1:-1:-1;42492:13:0;;-1:-1:-1;;;;;42486:19:0;;;42492:13;;42486:19;;42367:138;42349:381;;;-1:-1:-1;;;;;37118:20:0;;42532:24;37118:20;;;:11;:20;;;;;;42642:16;;42613:25;42632:6;37118:20;42613:25;:::i;:::-;:45;;42587:131;;;;-1:-1:-1;;;42587:131:0;;12457:2:1;42587:131:0;;;12439:21:1;12496:2;12476:18;;;12469:30;12535:26;12515:18;;;12508:54;12579:18;;42587:131:0;12255:348:1;42587:131:0;42517:213;42349:381;42744:7;:21;;;:29;;:21;:29;42740:471;;22183:6;;-1:-1:-1;;;;;42812:13:0;;;-1:-1:-1;;;22183:6:0;;;;42812:13;;;;:65;;-1:-1:-1;42860:16:0;;-1:-1:-1;;;;;42846:31:0;;;42860:16;;;;;42846:31;;42812:65;:105;;;;-1:-1:-1;42904:13:0;;-1:-1:-1;;;;;42898:19:0;;;42904:13;;42898:19;;42812:105;42790:410;;;43003:9;42982:31;;;;:20;:31;;;;;;43016:12;-1:-1:-1;42952:167:0;;;;-1:-1:-1;;;42952:167:0;;12810:2:1;42952:167:0;;;12792:21:1;12849:2;12829:18;;;12822:30;12888:34;12868:18;;;12861:62;-1:-1:-1;;;12939:18:1;;;12932:45;12994:19;;42952:167:0;12608:411:1;42952:167:0;43159:9;43138:31;;;;:20;:31;;;;;43172:12;43138:46;;42790:410;43256:13;;:17;;43272:1;43256:17;:::i;:::-;43239:12;:35;;:83;;;;-1:-1:-1;43305:16:0;;-1:-1:-1;;;;;43291:31:0;;;43305:16;;;;;43291:31;;43239:83;:119;;;;-1:-1:-1;43345:13:0;;-1:-1:-1;;;;;43339:19:0;;;43345:13;;43339:19;;43239:119;43221:212;;;-1:-1:-1;;;;;43385:29:0;;;;;;:25;:29;;;;;:36;;-1:-1:-1;;43385:36:0;43417:4;43385:36;;;43221:212;43460:14;;-1:-1:-1;;;;;43491:24:0;;43445:12;43491:24;;;:18;:24;;;;;;43460:14;;;;;;;;43491:24;;:50;;-1:-1:-1;;;;;;43519:22:0;;;;;;:18;:22;;;;;;;;43491:50;43487:297;;;-1:-1:-1;43568:5:0;43487:297;;;43618:13;;-1:-1:-1;;;;;43618:13:0;;;43610:21;;;;43606:167;;-1:-1:-1;43662:9:0;;;;;;;43606:167;;;43703:13;;-1:-1:-1;;;;;43703:13:0;;;43697:19;;;;43693:80;;-1:-1:-1;43747:10:0;;;;;;;43693:80;43796:41;43811:4;43817:2;43821:6;43829:7;43796:14;:41::i;:::-;41675:2170;41572:2273;;;:::o;28900:240::-;29020:7;29081:12;29073:6;;;;29065:29;;;;-1:-1:-1;;;29065:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;29116:5:0;;;28900:240::o;26621:98::-;26679:7;26706:5;26710:1;26706;:5;:::i;23414:191::-;23507:6;;;-1:-1:-1;;;;;23524:17:0;;;-1:-1:-1;;;23524:17:0;;;-1:-1:-1;;;;;;23524:17:0;;;;;;23557:40;;23507:6;;;;;;;;23557:40;;23488:16;;23557:40;23477:128;23414:191;:::o;44037:399::-;44193:7;44188:241;;44217:23;44233:6;44217:15;:23::i;:::-;44257:44;44275:6;44283:9;44294:6;44257:17;:44::i;:::-;44188:241;;;44334:23;44350:6;44334:15;:23::i;:::-;44374:43;44391:6;44399:9;44410:6;44374:16;:43::i;43853:176::-;43963:4;43914:28;37118:20;;;:11;:20;;;;;;43980:41;37118:20;44014:6;43980:11;:41::i;:::-;43903:126;43853:176;:::o;45373:494::-;-1:-1:-1;;;;;45527:19:0;;45505;45527;;;:11;:19;;;;;;45579:22;;;;45557:110;;;;-1:-1:-1;;;45557:110:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45703:19:0;;;;;;;:11;:19;;;;;;45725:21;;;45703:43;;45761:22;;;;;;;;;;:33;;;;;;45823:36;;-1:-1:-1;;;;;;;;;;;45823:36:0;;;45739:7;1361:25:1;;1349:2;1334:18;;1215:177;45823:36:0;;;;;;;;45494:373;45373:494;;;:::o;44444:921::-;-1:-1:-1;;;;;44597:19:0;;44575;44597;;;:11;:19;;;;;;44649:22;;;;44627:110;;;;-1:-1:-1;;;44627:110:0;;;;;;;:::i;:::-;44778:13;;44750:14;;44795:3;;44768:23;;44778:13;;;;;44768:7;:23;:::i;:::-;44767:31;;;;:::i;:::-;44837:13;;44750:48;;-1:-1:-1;44809:14:0;;44854:3;;44827:23;;44837:13;;44827:7;:23;:::i;:::-;44826:31;;;;:::i;:::-;44809:48;-1:-1:-1;44870:23:0;44809:48;44896:16;44906:6;44896:7;:16;:::i;:::-;:25;;;;:::i;:::-;-1:-1:-1;;;;;44959:19:0;;;;;;;:11;:19;;;;;;44981:29;;;44959:51;;45025:22;;;;;;;;;:41;;;;;;45101:4;45081:26;;;;;:36;;;;;;45144:16;;;;;45132:29;;;;;;:39;;;;;;45200:44;44870:51;;-1:-1:-1;45025:22:0;;-1:-1:-1;;;;;;;;;;;45200:44:0;;;44870:51;1361:25:1;;1349:2;1334:18;;1215:177;45200:44:0;;;;;;;;45277:16;;45260:42;;1361:25:1;;;-1:-1:-1;;;;;45277:16:0;;;;45260:42;;;-1:-1:-1;;;;;;;;;;;45260:42:0;1349:2:1;1334:18;45260:42:0;;;;;;;45318:39;;1361:25:1;;;45343:4:0;;-1:-1:-1;;;;;45318:39:0;;;-1:-1:-1;;;;;;;;;;;45318:39:0;1349:2:1;1334:18;45318:39:0;;;;;;;44564:801;;;;44444:921;;;:::o;47014:586::-;47143:20;;47119;:44;47115:106;;47201:20;;47178:43;;47115:106;47306:31;;47269:68;;;;;;;47367:64;;-1:-1:-1;47410:21:0;;;;;;;47367:64;:98;;;;-1:-1:-1;47449:16:0;;;;47448:17;47367:98;:140;;;;-1:-1:-1;47493:13:0;;-1:-1:-1;;;;;47483:23:0;;;47493:13;;47483:23;;47367:140;47349:244;;;47534:47;47560:20;35479:16;:23;;-1:-1:-1;;35479:23:0;35498:4;35479:23;;;:16;47705:13:::1;:6:::0;47716:1:::1;47705:10;:13::i;:::-;47690:28:::0;-1:-1:-1;47729:17:0::1;47749:16;:6:::0;47690:28;47749:10:::1;:16::i;:::-;47729:36:::0;-1:-1:-1;47801:21:0::1;47833:17;47845:4:::0;47833:11:::1;:17::i;:::-;47861:18;47882:41;:21;47908:14:::0;47882:25:::1;:41::i;:::-;47861:62;;47934:39;47951:9;47962:10;47934:16;:39::i;:::-;-1:-1:-1::0;;35525:16:0;:24;;-1:-1:-1;;35525:24:0;;;-1:-1:-1;;;47608:373:0:o;27758:98::-;27816:7;27843:5;27847:1;27843;:5;:::i;27002:98::-;27060:7;27087:5;27091:1;27087;:5;:::i;47989:469::-;48074:16;;;48088:1;48074:16;;;;;;;;48050:21;;48074:16;;;;;;;;;;-1:-1:-1;48074:16:0;48050:40;;48119:4;48101;48106:1;48101:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;48101:23:0;;;-1:-1:-1;;;;;48101:23:0;;;;;48145:16;;;;;;;;;-1:-1:-1;;;;;48145:16:0;-1:-1:-1;;;;;48145:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48135:4;48140:1;48135:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48135:33:0;;;:7;;;;;;;;;:33;48211:16;;48179:63;;48196:4;;48211:16;;;;48230:11;48179:8;:63::i;:::-;48253:16;;:197;;-1:-1:-1;;;48253:197:0;;:16;;;;-1:-1:-1;;;;;48253:16:0;;:67;;:197;;48335:11;;48361:1;;48377:4;;48404;;48424:15;;48253:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48039:419;47989:469;:::o;48466:368::-;48583:16;;48551:63;;48568:4;;48583:16;;;-1:-1:-1;;;;;48583:16:0;48602:11;48551:8;:63::i;:::-;48627:16;;-1:-1:-1;;;;;48627:16:0;;;;;:32;48667:9;48700:4;48720:11;48746:1;;48778:7;22183:6;;-1:-1:-1;;;;;;;;22183:6:0;;;;;22110:87;48778:7;48627:199;;;;;;-1:-1:-1;;;;;;48627:199:0;;;-1:-1:-1;;;;;15386:15:1;;;48627:199:0;;;15368:34:1;15418:18;;;15411:34;;;;15461:18;;;15454:34;;;;15504:18;;;15497:34;15568:15;;;15547:19;;;15540:44;48800:15:0;15600:19:1;;;15593:35;15302:19;;48627:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48466:368;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1397:615::-;1483:6;1491;1544:2;1532:9;1523:7;1519:23;1515:32;1512:52;;;1560:1;1557;1550:12;1512:52;1600:9;1587:23;1629:18;1670:2;1662:6;1659:14;1656:34;;;1686:1;1683;1676:12;1656:34;1724:6;1713:9;1709:22;1699:32;;1769:7;1762:4;1758:2;1754:13;1750:27;1740:55;;1791:1;1788;1781:12;1740:55;1831:2;1818:16;1857:2;1849:6;1846:14;1843:34;;;1873:1;1870;1863:12;1843:34;1926:7;1921:2;1911:6;1908:1;1904:14;1900:2;1896:23;1892:32;1889:45;1886:65;;;1947:1;1944;1937:12;1886:65;1978:2;1970:11;;;;;2000:6;;-1:-1:-1;1397:615:1;;-1:-1:-1;;;;1397:615:1:o;2225:180::-;2284:6;2337:2;2325:9;2316:7;2312:23;2308:32;2305:52;;;2353:1;2350;2343:12;2305:52;-1:-1:-1;2376:23:1;;2225:180;-1:-1:-1;2225:180:1:o;2410:456::-;2487:6;2495;2503;2556:2;2544:9;2535:7;2531:23;2527:32;2524:52;;;2572:1;2569;2562:12;2524:52;2611:9;2598:23;2630:31;2655:5;2630:31;:::i;:::-;2680:5;-1:-1:-1;2737:2:1;2722:18;;2709:32;2750:33;2709:32;2750:33;:::i;:::-;2410:456;;2802:7;;-1:-1:-1;;;2856:2:1;2841:18;;;;2828:32;;2410:456::o;3060:247::-;3119:6;3172:2;3160:9;3151:7;3147:23;3143:32;3140:52;;;3188:1;3185;3178:12;3140:52;3227:9;3214:23;3246:31;3271:5;3246:31;:::i;3546:160::-;3611:20;;3667:13;;3660:21;3650:32;;3640:60;;3696:1;3693;3686:12;3711:315;3776:6;3784;3837:2;3825:9;3816:7;3812:23;3808:32;3805:52;;;3853:1;3850;3843:12;3805:52;3892:9;3879:23;3911:31;3936:5;3911:31;:::i;:::-;3961:5;-1:-1:-1;3985:35:1;4016:2;4001:18;;3985:35;:::i;:::-;3975:45;;3711:315;;;;;:::o;4031:642::-;4196:2;4248:21;;;4318:13;;4221:18;;;4340:22;;;4167:4;;4196:2;4419:15;;;;4393:2;4378:18;;;4167:4;4462:185;4476:6;4473:1;4470:13;4462:185;;;4551:13;;4544:21;4537:29;4525:42;;4622:15;;;;4587:12;;;;4498:1;4491:9;4462:185;;;-1:-1:-1;4664:3:1;;4031:642;-1:-1:-1;;;;;;4031:642:1:o;4678:388::-;4746:6;4754;4807:2;4795:9;4786:7;4782:23;4778:32;4775:52;;;4823:1;4820;4813:12;4775:52;4862:9;4849:23;4881:31;4906:5;4881:31;:::i;:::-;4931:5;-1:-1:-1;4988:2:1;4973:18;;4960:32;5001:33;4960:32;5001:33;:::i;:::-;5053:7;5043:17;;;4678:388;;;;;:::o;5071:316::-;5139:6;5147;5155;5208:2;5196:9;5187:7;5183:23;5179:32;5176:52;;;5224:1;5221;5214:12;5176:52;5247:26;5263:9;5247:26;:::i;:::-;5237:36;;5292:35;5323:2;5312:9;5308:18;5292:35;:::i;:::-;5282:45;;5346:35;5377:2;5366:9;5362:18;5346:35;:::i;:::-;5336:45;;5071:316;;;;;:::o;5392:380::-;5471:1;5467:12;;;;5514;;;5535:61;;5589:4;5581:6;5577:17;5567:27;;5535:61;5642:2;5634:6;5631:14;5611:18;5608:38;5605:161;;5688:10;5683:3;5679:20;5676:1;5669:31;5723:4;5720:1;5713:15;5751:4;5748:1;5741:15;5605:161;;5392:380;;;:::o;5777:127::-;5838:10;5833:3;5829:20;5826:1;5819:31;5869:4;5866:1;5859:15;5893:4;5890:1;5883:15;5909:127;5970:10;5965:3;5961:20;5958:1;5951:31;6001:4;5998:1;5991:15;6025:4;6022:1;6015:15;6041:135;6080:3;6101:17;;;6098:43;;6121:18;;:::i;:::-;-1:-1:-1;6168:1:1;6157:13;;6041:135::o;6181:422::-;6270:1;6313:5;6270:1;6327:270;6348:7;6338:8;6335:21;6327:270;;;6407:4;6403:1;6399:6;6395:17;6389:4;6386:27;6383:53;;;6416:18;;:::i;:::-;6466:7;6456:8;6452:22;6449:55;;;6486:16;;;;6449:55;6565:22;;;;6525:15;;;;6327:270;;;6331:3;6181:422;;;;;:::o;6608:806::-;6657:5;6687:8;6677:80;;-1:-1:-1;6728:1:1;6742:5;;6677:80;6776:4;6766:76;;-1:-1:-1;6813:1:1;6827:5;;6766:76;6858:4;6876:1;6871:59;;;;6944:1;6939:130;;;;6851:218;;6871:59;6901:1;6892:10;;6915:5;;;6939:130;6976:3;6966:8;6963:17;6960:43;;;6983:18;;:::i;:::-;-1:-1:-1;;7039:1:1;7025:16;;7054:5;;6851:218;;7153:2;7143:8;7140:16;7134:3;7128:4;7125:13;7121:36;7115:2;7105:8;7102:16;7097:2;7091:4;7088:12;7084:35;7081:77;7078:159;;;-1:-1:-1;7190:19:1;;;7222:5;;7078:159;7269:34;7294:8;7288:4;7269:34;:::i;:::-;7339:6;7335:1;7331:6;7327:19;7318:7;7315:32;7312:58;;;7350:18;;:::i;:::-;7388:20;;6608:806;-1:-1:-1;;;6608:806:1:o;7419:140::-;7477:5;7506:47;7547:4;7537:8;7533:19;7527:4;7506:47;:::i;7564:168::-;7637:9;;;7668;;7685:15;;;7679:22;;7665:37;7655:71;;7706:18;;:::i;12125:125::-;12190:9;;;12211:10;;;12208:36;;;12224:18;;:::i;13024:402::-;13226:2;13208:21;;;13265:2;13245:18;;;13238:30;13304:34;13299:2;13284:18;;13277:62;-1:-1:-1;;;13370:2:1;13355:18;;13348:36;13416:3;13401:19;;13024:402::o;13431:217::-;13471:1;13497;13487:132;;13541:10;13536:3;13532:20;13529:1;13522:31;13576:4;13573:1;13566:15;13604:4;13601:1;13594:15;13487:132;-1:-1:-1;13633:9:1;;13431:217::o;13653:128::-;13720:9;;;13741:11;;;13738:37;;;13755:18;;:::i;13786:251::-;13856:6;13909:2;13897:9;13888:7;13884:23;13880:32;13877:52;;;13925:1;13922;13915:12;13877:52;13957:9;13951:16;13976:31;14001:5;13976:31;:::i;14042:980::-;14304:4;14352:3;14341:9;14337:19;14383:6;14372:9;14365:25;14409:2;14447:6;14442:2;14431:9;14427:18;14420:34;14490:3;14485:2;14474:9;14470:18;14463:31;14514:6;14549;14543:13;14580:6;14572;14565:22;14618:3;14607:9;14603:19;14596:26;;14657:2;14649:6;14645:15;14631:29;;14678:1;14688:195;14702:6;14699:1;14696:13;14688:195;;;14767:13;;-1:-1:-1;;;;;14763:39:1;14751:52;;14858:15;;;;14823:12;;;;14799:1;14717:9;14688:195;;;-1:-1:-1;;;;;;;14939:32:1;;;;14934:2;14919:18;;14912:60;-1:-1:-1;;;15003:3:1;14988:19;14981:35;14900:3;14042:980;-1:-1:-1;;;14042:980:1:o;15639:306::-;15727:6;15735;15743;15796:2;15784:9;15775:7;15771:23;15767:32;15764:52;;;15812:1;15809;15802:12;15764:52;15841:9;15835:16;15825:26;;15891:2;15880:9;15876:18;15870:25;15860:35;;15935:2;15924:9;15920:18;15914:25;15904:35;;15639:306;;;;;:::o

Swarm Source

ipfs://670d829701d7981ff816d92dbe1100bbe0b9215b5b3479ae6a53fa47c4f7744a
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.