ETH Price: $3,332.01 (+4.17%)

Token

Sosig (SOSIG)
 

Overview

Max Total Supply

420,690,690,690 SOSIG

Holders

25

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
Token

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 6 of 6: Token.sol
pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT

import "./Ownable.sol";
import "./ERC20.sol";
import "./IDEX.sol";

interface IAntiSnipe {
    function process(address) external;
    function confirm(address, address) external;
}

contract Token is Ownable, ERC20 {
    uint8 constant DECIMALS = 18;
    uint256 public INITIAL_SUPPLY = 420_690_690_690 * 10 ** DECIMALS;

    IDEXRouter router;
    IAntiSnipe antiSnipe;

    uint256 public maxHoldingAmount;
    address public uniswapV2Pair;

    mapping(address => bool) public blacklists;

    constructor(string memory NAME, string memory SYMBOL, address routerAddress) ERC20(NAME, SYMBOL) {
        router = IDEXRouter(routerAddress);
        _mint(owner(), INITIAL_SUPPLY);
    }

    function setAntiSnipe(address _antiSnipe) external onlyOwner {
        antiSnipe = IAntiSnipe(_antiSnipe);
    }

    function blacklist(address _address, bool _isBlacklisting) external onlyOwner {
        blacklists[_address] = _isBlacklisting;
    }

    function setRule(address _pair, uint256 _maxHoldingAmount) external onlyOwner {
        uniswapV2Pair = _pair;
        maxHoldingAmount = _maxHoldingAmount;
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) override internal virtual {
        require(!blacklists[to] && !blacklists[from], "blacklisted");

        if (uniswapV2Pair == address(0)) {
            require(from == owner() || to == owner(), "trading is not started");
            return;
        }

        if (maxHoldingAmount > 0 && from == uniswapV2Pair && to != address(antiSnipe)) {
            require(super.balanceOf(to) + amount <= maxHoldingAmount, "holding violation");
        }

        antiSnipe.confirm(from, to);
    }

    function punishSniper(address sniper) public {
        require(msg.sender == address(antiSnipe), "Not the antisnipe");
        _transfer(sniper, address(antiSnipe), balanceOf(sniper));
        antiSnipe.process(sniper);
    }

    receive() external payable {}
}

File 1 of 6: Address.sol
pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT

/**
 * @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
     *
     * Furthermore, `isContract` will also return true if the target contract within
     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
     * which only has an effect at the end of a transaction.
     * ====
     *
     * [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://consensys.net/diligence/blog/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.8.0/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 2 of 6: Context.sol
pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT

/**
 * @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 3 of 6: ERC20.sol
pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT

import "./Context.sol";

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]


// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/token/ERC20/[email protected]


// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;



/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

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

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

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

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

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

File 4 of 6: IDEX.sol
pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT

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

	function feeTo() external view returns (address);

	function feeToSetter() external view returns (address);

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

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

	function allPairsLength() external view returns (uint);

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

	function setFeeTo(address) external;

	function setFeeToSetter(address) external;
}

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

	function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	function removeLiquidityETHSupportingFeeOnTransferTokens(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline
	) external returns (uint amountETH);

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

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

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

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

interface IDEXPair {
    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 5 of 6: Ownable.sol
pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT

import "./Context.sol";

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"NAME","type":"string"},{"internalType":"string","name":"SYMBOL","type":"string"},{"internalType":"address","name":"routerAddress","type":"address"}],"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":"INITIAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","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":[{"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":[],"name":"maxHoldingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sniper","type":"address"}],"name":"punishSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_antiSnipe","type":"address"}],"name":"setAntiSnipe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"uint256","name":"_maxHoldingAmount","type":"uint256"}],"name":"setRule","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526012600a62000014919062000936565b6461f31e828262000026919062000987565b6006553480156200003657600080fd5b506040516200343d3803806200343d83398181016040528101906200005c919062000bca565b82826200007e620000726200011160201b60201c565b6200011960201b60201c565b81600490816200008f919062000ea5565b508060059081620000a1919062000ea5565b50505080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000108620000f9620001dd60201b60201c565b6006546200020660201b60201c565b5050506200120c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000278576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200026f9062000fed565b60405180910390fd5b6200028c600083836200037f60201b60201c565b8060036000828254620002a091906200100f565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002f891906200100f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200035f91906200105b565b60405180910390a36200037b600083836200074e60201b60201c565b5050565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015620004245750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b62000466576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200045d90620010c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036200058957620004cd620001dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148062000541575062000512620001dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b62000583576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057a906200113a565b60405180910390fd5b62000749565b6000600954118015620005e95750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015620006445750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15620006b5576009548162000664846200075360201b620008d31760201c565b6200067091906200100f565b1115620006b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ab90620011ac565b60405180910390fd5b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380d12e5884846040518363ffffffff1660e01b815260040162000714929190620011df565b600060405180830381600087803b1580156200072f57600080fd5b505af115801562000744573d6000803e3d6000fd5b505050505b505050565b505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200082a578086048111156200080257620008016200079c565b5b6001851615620008125780820291505b80810290506200082285620007cb565b9450620007e2565b94509492505050565b60008262000845576001905062000918565b8162000855576000905062000918565b81600181146200086e57600281146200087957620008af565b600191505062000918565b60ff8411156200088e576200088d6200079c565b5b8360020a915084821115620008a857620008a76200079c565b5b5062000918565b5060208310610133831016604e8410600b8410161715620008e95782820a905083811115620008e357620008e26200079c565b5b62000918565b620008f88484846001620007d8565b925090508184048111156200091257620009116200079c565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000943826200091f565b9150620009508362000929565b92506200097f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000833565b905092915050565b600062000994826200091f565b9150620009a1836200091f565b9250828202620009b1816200091f565b91508282048414831517620009cb57620009ca6200079c565b5b5092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000a3b82620009f0565b810181811067ffffffffffffffff8211171562000a5d5762000a5c62000a01565b5b80604052505050565b600062000a72620009d2565b905062000a80828262000a30565b919050565b600067ffffffffffffffff82111562000aa35762000aa262000a01565b5b62000aae82620009f0565b9050602081019050919050565b60005b8381101562000adb57808201518184015260208101905062000abe565b60008484015250505050565b600062000afe62000af88462000a85565b62000a66565b90508281526020810184848401111562000b1d5762000b1c620009eb565b5b62000b2a84828562000abb565b509392505050565b600082601f83011262000b4a5762000b49620009e6565b5b815162000b5c84826020860162000ae7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b928262000b65565b9050919050565b62000ba48162000b85565b811462000bb057600080fd5b50565b60008151905062000bc48162000b99565b92915050565b60008060006060848603121562000be65762000be5620009dc565b5b600084015167ffffffffffffffff81111562000c075762000c06620009e1565b5b62000c158682870162000b32565b935050602084015167ffffffffffffffff81111562000c395762000c38620009e1565b5b62000c478682870162000b32565b925050604062000c5a8682870162000bb3565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000cb757607f821691505b60208210810362000ccd5762000ccc62000c6f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cf8565b62000d43868362000cf8565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000d8662000d8062000d7a846200091f565b62000d5b565b6200091f565b9050919050565b6000819050919050565b62000da28362000d65565b62000dba62000db18262000d8d565b84845462000d05565b825550505050565b600090565b62000dd162000dc2565b62000dde81848462000d97565b505050565b5b8181101562000e065762000dfa60008262000dc7565b60018101905062000de4565b5050565b601f82111562000e555762000e1f8162000cd3565b62000e2a8462000ce8565b8101602085101562000e3a578190505b62000e5262000e498562000ce8565b83018262000de3565b50505b505050565b600082821c905092915050565b600062000e7a6000198460080262000e5a565b1980831691505092915050565b600062000e95838362000e67565b9150826002028217905092915050565b62000eb08262000c64565b67ffffffffffffffff81111562000ecc5762000ecb62000a01565b5b62000ed8825462000c9e565b62000ee582828562000e0a565b600060209050601f83116001811462000f1d576000841562000f08578287015190505b62000f14858262000e87565b86555062000f84565b601f19841662000f2d8662000cd3565b60005b8281101562000f575784890151825560018201915060208501945060208101905062000f30565b8683101562000f77578489015162000f73601f89168262000e67565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fd5601f8362000f8c565b915062000fe28262000f9d565b602082019050919050565b60006020820190508181036000830152620010088162000fc6565b9050919050565b60006200101c826200091f565b915062001029836200091f565b92508282019050808211156200104457620010436200079c565b5b92915050565b62001055816200091f565b82525050565b60006020820190506200107260008301846200104a565b92915050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000620010b0600b8362000f8c565b9150620010bd8262001078565b602082019050919050565b60006020820190508181036000830152620010e381620010a1565b9050919050565b7f74726164696e67206973206e6f74207374617274656400000000000000000000600082015250565b60006200112260168362000f8c565b91506200112f82620010ea565b602082019050919050565b60006020820190508181036000830152620011558162001113565b9050919050565b7f686f6c64696e672076696f6c6174696f6e000000000000000000000000000000600082015250565b60006200119460118362000f8c565b9150620011a1826200115c565b602082019050919050565b60006020820190508181036000830152620011c78162001185565b9050919050565b620011d98162000b85565b82525050565b6000604082019050620011f66000830185620011ce565b620012056020830184620011ce565b9392505050565b612221806200121c6000396000f3fe6080604052600436106101395760003560e01c806370a08231116100ab57806395d89b411161006f57806395d89b4114610435578063a457c2d714610460578063a9059cbb1461049d578063dd62ed3e146104da578063f2fde38b14610517578063f97f33ce1461054057610140565b806370a0823114610362578063715018a61461039f57806385791c97146103b657806389f9a1d3146103df5780638da5cb5b1461040a57610140565b806323b872dd116100fd57806323b872dd1461023e5780632ff2e9dc1461027b578063313ce567146102a657806339509351146102d1578063404e51291461030e57806349bd5a5e1461033757610140565b806303f88ea81461014557806306fdde031461016e578063095ea7b31461019957806316c02129146101d657806318160ddd1461021357610140565b3661014057005b600080fd5b34801561015157600080fd5b5061016c60048036038101906101679190611774565b610569565b005b34801561017a57600080fd5b506101836105bd565b6040516101909190611844565b60405180910390f35b3480156101a557600080fd5b506101c060048036038101906101bb9190611774565b61064f565b6040516101cd9190611881565b60405180910390f35b3480156101e257600080fd5b506101fd60048036038101906101f8919061189c565b61066d565b60405161020a9190611881565b60405180910390f35b34801561021f57600080fd5b5061022861068d565b60405161023591906118d8565b60405180910390f35b34801561024a57600080fd5b50610265600480360381019061026091906118f3565b610697565b6040516102729190611881565b60405180910390f35b34801561028757600080fd5b5061029061078f565b60405161029d91906118d8565b60405180910390f35b3480156102b257600080fd5b506102bb610795565b6040516102c89190611962565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190611774565b61079e565b6040516103059190611881565b60405180910390f35b34801561031a57600080fd5b50610335600480360381019061033091906119a9565b61084a565b005b34801561034357600080fd5b5061034c6108ad565b60405161035991906119f8565b60405180910390f35b34801561036e57600080fd5b506103896004803603810190610384919061189c565b6108d3565b60405161039691906118d8565b60405180910390f35b3480156103ab57600080fd5b506103b461091c565b005b3480156103c257600080fd5b506103dd60048036038101906103d8919061189c565b610930565b005b3480156103eb57600080fd5b506103f461097c565b60405161040191906118d8565b60405180910390f35b34801561041657600080fd5b5061041f610982565b60405161042c91906119f8565b60405180910390f35b34801561044157600080fd5b5061044a6109ab565b6040516104579190611844565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190611774565b610a3d565b6040516104949190611881565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf9190611774565b610b28565b6040516104d19190611881565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc9190611a13565b610b46565b60405161050e91906118d8565b60405180910390f35b34801561052357600080fd5b5061053e6004803603810190610539919061189c565b610bcd565b005b34801561054c57600080fd5b506105676004803603810190610562919061189c565b610c50565b005b610571610da5565b81600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806009819055505050565b6060600480546105cc90611a82565b80601f01602080910402602001604051908101604052809291908181526020018280546105f890611a82565b80156106455780601f1061061a57610100808354040283529160200191610645565b820191906000526020600020905b81548152906001019060200180831161062857829003601f168201915b5050505050905090565b600061066361065c610e23565b8484610e2b565b6001905092915050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600354905090565b60006106a4848484610ff4565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106ef610e23565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076690611b25565b60405180910390fd5b6107838561077b610e23565b858403610e2b565b60019150509392505050565b60065481565b60006012905090565b60006108406107ab610e23565b8484600260006107b9610e23565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461083b9190611b74565b610e2b565b6001905092915050565b610852610da5565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610924610da5565b61092e6000611276565b565b610938610da5565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546109ba90611a82565b80601f01602080910402602001604051908101604052809291908181526020018280546109e690611a82565b8015610a335780601f10610a0857610100808354040283529160200191610a33565b820191906000526020600020905b815481529060010190602001808311610a1657829003601f168201915b5050505050905090565b60008060026000610a4c610e23565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0090611c1a565b60405180910390fd5b610b1d610b14610e23565b85858403610e2b565b600191505092915050565b6000610b3c610b35610e23565b8484610ff4565b6001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610bd5610da5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b90611cac565b60405180910390fd5b610c4d81611276565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790611d18565b60405180910390fd5b610d1581600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d10846108d3565b610ff4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9e6152b826040518263ffffffff1660e01b8152600401610d7091906119f8565b600060405180830381600087803b158015610d8a57600080fd5b505af1158015610d9e573d6000803e3d6000fd5b5050505050565b610dad610e23565b73ffffffffffffffffffffffffffffffffffffffff16610dcb610982565b73ffffffffffffffffffffffffffffffffffffffff1614610e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1890611d84565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190611e16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0090611ea8565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fe791906118d8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a90611f3a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990611fcc565b60405180910390fd5b6110dd83838361133a565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b9061205e565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111f99190611b74565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161125d91906118d8565b60405180910390a36112708484846116d6565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113de5750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61141d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611414906120ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361152a5761147b610982565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806114e657506114b7610982565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c90612136565b60405180910390fd5b6116d1565b60006009541180156115895750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156115e35750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561164157600954816115f5846108d3565b6115ff9190611b74565b1115611640576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611637906121a2565b60405180910390fd5b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380d12e5884846040518363ffffffff1660e01b815260040161169e9291906121c2565b600060405180830381600087803b1580156116b857600080fd5b505af11580156116cc573d6000803e3d6000fd5b505050505b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061170b826116e0565b9050919050565b61171b81611700565b811461172657600080fd5b50565b60008135905061173881611712565b92915050565b6000819050919050565b6117518161173e565b811461175c57600080fd5b50565b60008135905061176e81611748565b92915050565b6000806040838503121561178b5761178a6116db565b5b600061179985828601611729565b92505060206117aa8582860161175f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117ee5780820151818401526020810190506117d3565b60008484015250505050565b6000601f19601f8301169050919050565b6000611816826117b4565b61182081856117bf565b93506118308185602086016117d0565b611839816117fa565b840191505092915050565b6000602082019050818103600083015261185e818461180b565b905092915050565b60008115159050919050565b61187b81611866565b82525050565b60006020820190506118966000830184611872565b92915050565b6000602082840312156118b2576118b16116db565b5b60006118c084828501611729565b91505092915050565b6118d28161173e565b82525050565b60006020820190506118ed60008301846118c9565b92915050565b60008060006060848603121561190c5761190b6116db565b5b600061191a86828701611729565b935050602061192b86828701611729565b925050604061193c8682870161175f565b9150509250925092565b600060ff82169050919050565b61195c81611946565b82525050565b60006020820190506119776000830184611953565b92915050565b61198681611866565b811461199157600080fd5b50565b6000813590506119a38161197d565b92915050565b600080604083850312156119c0576119bf6116db565b5b60006119ce85828601611729565b92505060206119df85828601611994565b9150509250929050565b6119f281611700565b82525050565b6000602082019050611a0d60008301846119e9565b92915050565b60008060408385031215611a2a57611a296116db565b5b6000611a3885828601611729565b9250506020611a4985828601611729565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a9a57607f821691505b602082108103611aad57611aac611a53565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611b0f6028836117bf565b9150611b1a82611ab3565b604082019050919050565b60006020820190508181036000830152611b3e81611b02565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b7f8261173e565b9150611b8a8361173e565b9250828201905080821115611ba257611ba1611b45565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611c046025836117bf565b9150611c0f82611ba8565b604082019050919050565b60006020820190508181036000830152611c3381611bf7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611c966026836117bf565b9150611ca182611c3a565b604082019050919050565b60006020820190508181036000830152611cc581611c89565b9050919050565b7f4e6f742074686520616e7469736e697065000000000000000000000000000000600082015250565b6000611d026011836117bf565b9150611d0d82611ccc565b602082019050919050565b60006020820190508181036000830152611d3181611cf5565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611d6e6020836117bf565b9150611d7982611d38565b602082019050919050565b60006020820190508181036000830152611d9d81611d61565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611e006024836117bf565b9150611e0b82611da4565b604082019050919050565b60006020820190508181036000830152611e2f81611df3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e926022836117bf565b9150611e9d82611e36565b604082019050919050565b60006020820190508181036000830152611ec181611e85565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611f246025836117bf565b9150611f2f82611ec8565b604082019050919050565b60006020820190508181036000830152611f5381611f17565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611fb66023836117bf565b9150611fc182611f5a565b604082019050919050565b60006020820190508181036000830152611fe581611fa9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006120486026836117bf565b915061205382611fec565b604082019050919050565b600060208201905081810360008301526120778161203b565b9050919050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b60006120b4600b836117bf565b91506120bf8261207e565b602082019050919050565b600060208201905081810360008301526120e3816120a7565b9050919050565b7f74726164696e67206973206e6f74207374617274656400000000000000000000600082015250565b60006121206016836117bf565b915061212b826120ea565b602082019050919050565b6000602082019050818103600083015261214f81612113565b9050919050565b7f686f6c64696e672076696f6c6174696f6e000000000000000000000000000000600082015250565b600061218c6011836117bf565b915061219782612156565b602082019050919050565b600060208201905081810360008301526121bb8161217f565b9050919050565b60006040820190506121d760008301856119e9565b6121e460208301846119e9565b939250505056fea2646970667358221220895c2d23e1e31301e48438de2ae1a5e1ad23afce06a542a6b1830ba743fc5cbf64736f6c63430008120033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000005536f7369670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005534f534947000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101395760003560e01c806370a08231116100ab57806395d89b411161006f57806395d89b4114610435578063a457c2d714610460578063a9059cbb1461049d578063dd62ed3e146104da578063f2fde38b14610517578063f97f33ce1461054057610140565b806370a0823114610362578063715018a61461039f57806385791c97146103b657806389f9a1d3146103df5780638da5cb5b1461040a57610140565b806323b872dd116100fd57806323b872dd1461023e5780632ff2e9dc1461027b578063313ce567146102a657806339509351146102d1578063404e51291461030e57806349bd5a5e1461033757610140565b806303f88ea81461014557806306fdde031461016e578063095ea7b31461019957806316c02129146101d657806318160ddd1461021357610140565b3661014057005b600080fd5b34801561015157600080fd5b5061016c60048036038101906101679190611774565b610569565b005b34801561017a57600080fd5b506101836105bd565b6040516101909190611844565b60405180910390f35b3480156101a557600080fd5b506101c060048036038101906101bb9190611774565b61064f565b6040516101cd9190611881565b60405180910390f35b3480156101e257600080fd5b506101fd60048036038101906101f8919061189c565b61066d565b60405161020a9190611881565b60405180910390f35b34801561021f57600080fd5b5061022861068d565b60405161023591906118d8565b60405180910390f35b34801561024a57600080fd5b50610265600480360381019061026091906118f3565b610697565b6040516102729190611881565b60405180910390f35b34801561028757600080fd5b5061029061078f565b60405161029d91906118d8565b60405180910390f35b3480156102b257600080fd5b506102bb610795565b6040516102c89190611962565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190611774565b61079e565b6040516103059190611881565b60405180910390f35b34801561031a57600080fd5b50610335600480360381019061033091906119a9565b61084a565b005b34801561034357600080fd5b5061034c6108ad565b60405161035991906119f8565b60405180910390f35b34801561036e57600080fd5b506103896004803603810190610384919061189c565b6108d3565b60405161039691906118d8565b60405180910390f35b3480156103ab57600080fd5b506103b461091c565b005b3480156103c257600080fd5b506103dd60048036038101906103d8919061189c565b610930565b005b3480156103eb57600080fd5b506103f461097c565b60405161040191906118d8565b60405180910390f35b34801561041657600080fd5b5061041f610982565b60405161042c91906119f8565b60405180910390f35b34801561044157600080fd5b5061044a6109ab565b6040516104579190611844565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190611774565b610a3d565b6040516104949190611881565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf9190611774565b610b28565b6040516104d19190611881565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc9190611a13565b610b46565b60405161050e91906118d8565b60405180910390f35b34801561052357600080fd5b5061053e6004803603810190610539919061189c565b610bcd565b005b34801561054c57600080fd5b506105676004803603810190610562919061189c565b610c50565b005b610571610da5565b81600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806009819055505050565b6060600480546105cc90611a82565b80601f01602080910402602001604051908101604052809291908181526020018280546105f890611a82565b80156106455780601f1061061a57610100808354040283529160200191610645565b820191906000526020600020905b81548152906001019060200180831161062857829003601f168201915b5050505050905090565b600061066361065c610e23565b8484610e2b565b6001905092915050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600354905090565b60006106a4848484610ff4565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106ef610e23565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076690611b25565b60405180910390fd5b6107838561077b610e23565b858403610e2b565b60019150509392505050565b60065481565b60006012905090565b60006108406107ab610e23565b8484600260006107b9610e23565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461083b9190611b74565b610e2b565b6001905092915050565b610852610da5565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610924610da5565b61092e6000611276565b565b610938610da5565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546109ba90611a82565b80601f01602080910402602001604051908101604052809291908181526020018280546109e690611a82565b8015610a335780601f10610a0857610100808354040283529160200191610a33565b820191906000526020600020905b815481529060010190602001808311610a1657829003601f168201915b5050505050905090565b60008060026000610a4c610e23565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0090611c1a565b60405180910390fd5b610b1d610b14610e23565b85858403610e2b565b600191505092915050565b6000610b3c610b35610e23565b8484610ff4565b6001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610bd5610da5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b90611cac565b60405180910390fd5b610c4d81611276565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790611d18565b60405180910390fd5b610d1581600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d10846108d3565b610ff4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9e6152b826040518263ffffffff1660e01b8152600401610d7091906119f8565b600060405180830381600087803b158015610d8a57600080fd5b505af1158015610d9e573d6000803e3d6000fd5b5050505050565b610dad610e23565b73ffffffffffffffffffffffffffffffffffffffff16610dcb610982565b73ffffffffffffffffffffffffffffffffffffffff1614610e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1890611d84565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190611e16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0090611ea8565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fe791906118d8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a90611f3a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990611fcc565b60405180910390fd5b6110dd83838361133a565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b9061205e565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111f99190611b74565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161125d91906118d8565b60405180910390a36112708484846116d6565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113de5750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61141d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611414906120ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361152a5761147b610982565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806114e657506114b7610982565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c90612136565b60405180910390fd5b6116d1565b60006009541180156115895750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156115e35750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561164157600954816115f5846108d3565b6115ff9190611b74565b1115611640576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611637906121a2565b60405180910390fd5b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380d12e5884846040518363ffffffff1660e01b815260040161169e9291906121c2565b600060405180830381600087803b1580156116b857600080fd5b505af11580156116cc573d6000803e3d6000fd5b505050505b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061170b826116e0565b9050919050565b61171b81611700565b811461172657600080fd5b50565b60008135905061173881611712565b92915050565b6000819050919050565b6117518161173e565b811461175c57600080fd5b50565b60008135905061176e81611748565b92915050565b6000806040838503121561178b5761178a6116db565b5b600061179985828601611729565b92505060206117aa8582860161175f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117ee5780820151818401526020810190506117d3565b60008484015250505050565b6000601f19601f8301169050919050565b6000611816826117b4565b61182081856117bf565b93506118308185602086016117d0565b611839816117fa565b840191505092915050565b6000602082019050818103600083015261185e818461180b565b905092915050565b60008115159050919050565b61187b81611866565b82525050565b60006020820190506118966000830184611872565b92915050565b6000602082840312156118b2576118b16116db565b5b60006118c084828501611729565b91505092915050565b6118d28161173e565b82525050565b60006020820190506118ed60008301846118c9565b92915050565b60008060006060848603121561190c5761190b6116db565b5b600061191a86828701611729565b935050602061192b86828701611729565b925050604061193c8682870161175f565b9150509250925092565b600060ff82169050919050565b61195c81611946565b82525050565b60006020820190506119776000830184611953565b92915050565b61198681611866565b811461199157600080fd5b50565b6000813590506119a38161197d565b92915050565b600080604083850312156119c0576119bf6116db565b5b60006119ce85828601611729565b92505060206119df85828601611994565b9150509250929050565b6119f281611700565b82525050565b6000602082019050611a0d60008301846119e9565b92915050565b60008060408385031215611a2a57611a296116db565b5b6000611a3885828601611729565b9250506020611a4985828601611729565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a9a57607f821691505b602082108103611aad57611aac611a53565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611b0f6028836117bf565b9150611b1a82611ab3565b604082019050919050565b60006020820190508181036000830152611b3e81611b02565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b7f8261173e565b9150611b8a8361173e565b9250828201905080821115611ba257611ba1611b45565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611c046025836117bf565b9150611c0f82611ba8565b604082019050919050565b60006020820190508181036000830152611c3381611bf7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611c966026836117bf565b9150611ca182611c3a565b604082019050919050565b60006020820190508181036000830152611cc581611c89565b9050919050565b7f4e6f742074686520616e7469736e697065000000000000000000000000000000600082015250565b6000611d026011836117bf565b9150611d0d82611ccc565b602082019050919050565b60006020820190508181036000830152611d3181611cf5565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611d6e6020836117bf565b9150611d7982611d38565b602082019050919050565b60006020820190508181036000830152611d9d81611d61565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611e006024836117bf565b9150611e0b82611da4565b604082019050919050565b60006020820190508181036000830152611e2f81611df3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e926022836117bf565b9150611e9d82611e36565b604082019050919050565b60006020820190508181036000830152611ec181611e85565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611f246025836117bf565b9150611f2f82611ec8565b604082019050919050565b60006020820190508181036000830152611f5381611f17565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611fb66023836117bf565b9150611fc182611f5a565b604082019050919050565b60006020820190508181036000830152611fe581611fa9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006120486026836117bf565b915061205382611fec565b604082019050919050565b600060208201905081810360008301526120778161203b565b9050919050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b60006120b4600b836117bf565b91506120bf8261207e565b602082019050919050565b600060208201905081810360008301526120e3816120a7565b9050919050565b7f74726164696e67206973206e6f74207374617274656400000000000000000000600082015250565b60006121206016836117bf565b915061212b826120ea565b602082019050919050565b6000602082019050818103600083015261214f81612113565b9050919050565b7f686f6c64696e672076696f6c6174696f6e000000000000000000000000000000600082015250565b600061218c6011836117bf565b915061219782612156565b602082019050919050565b600060208201905081810360008301526121bb8161217f565b9050919050565b60006040820190506121d760008301856119e9565b6121e460208301846119e9565b939250505056fea2646970667358221220895c2d23e1e31301e48438de2ae1a5e1ad23afce06a542a6b1830ba743fc5cbf64736f6c63430008120033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000005536f7369670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005534f534947000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : NAME (string): Sosig
Arg [1] : SYMBOL (string): SOSIG
Arg [2] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 536f736967000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 534f534947000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

254:1848:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1045:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5714:100:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7881:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;530:42:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6834:108:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8536:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;329:64:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6676:93:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9437:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;902:135:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;493:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7005:127:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1814:103:4;;;;;;;;;;;;;:::i;:::-;;780:114:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;455:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1166:87:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5933:104:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10155:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7345:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7583:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2072:201:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1833:229:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1045:165;1052:13:4;:11;:13::i;:::-;1150:5:5::1;1134:13;;:21;;;;;;;;;;;;;;;;;;1185:17;1166:16;:36;;;;1045:165:::0;;:::o;5714:100:2:-;5768:13;5801:5;5794:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5714:100;:::o;7881:169::-;7964:4;7981:39;7990:12;:10;:12::i;:::-;8004:7;8013:6;7981:8;:39::i;:::-;8038:4;8031:11;;7881:169;;;;:::o;530:42:5:-;;;;;;;;;;;;;;;;;;;;;;:::o;6834:108:2:-;6895:7;6922:12;;6915:19;;6834:108;:::o;8536:492::-;8676:4;8693:36;8703:6;8711:9;8722:6;8693:9;:36::i;:::-;8742:24;8769:11;:19;8781:6;8769:19;;;;;;;;;;;;;;;:33;8789:12;:10;:12::i;:::-;8769:33;;;;;;;;;;;;;;;;8742:60;;8841:6;8821:16;:26;;8813:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8928:57;8937:6;8945:12;:10;:12::i;:::-;8978:6;8959:16;:25;8928:8;:57::i;:::-;9016:4;9009:11;;;8536:492;;;;;:::o;329:64:5:-;;;;:::o;6676:93:2:-;6734:5;6759:2;6752:9;;6676:93;:::o;9437:215::-;9525:4;9542:80;9551:12;:10;:12::i;:::-;9565:7;9611:10;9574:11;:25;9586:12;:10;:12::i;:::-;9574:25;;;;;;;;;;;;;;;:34;9600:7;9574:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9542:8;:80::i;:::-;9640:4;9633:11;;9437:215;;;;:::o;902:135:5:-;1052:13:4;:11;:13::i;:::-;1014:15:5::1;991:10;:20;1002:8;991:20;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;902:135:::0;;:::o;493:28::-;;;;;;;;;;;;;:::o;7005:127:2:-;7079:7;7106:9;:18;7116:7;7106:18;;;;;;;;;;;;;;;;7099:25;;7005:127;;;:::o;1814:103:4:-;1052:13;:11;:13::i;:::-;1879:30:::1;1906:1;1879:18;:30::i;:::-;1814:103::o:0;780:114:5:-;1052:13:4;:11;:13::i;:::-;875:10:5::1;852:9;;:34;;;;;;;;;;;;;;;;;;780:114:::0;:::o;455:31::-;;;;:::o;1166:87:4:-;1212:7;1239:6;;;;;;;;;;;1232:13;;1166:87;:::o;5933:104:2:-;5989:13;6022:7;6015:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5933:104;:::o;10155:413::-;10248:4;10265:24;10292:11;:25;10304:12;:10;:12::i;:::-;10292:25;;;;;;;;;;;;;;;:34;10318:7;10292:34;;;;;;;;;;;;;;;;10265:61;;10365:15;10345:16;:35;;10337:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10458:67;10467:12;:10;:12::i;:::-;10481:7;10509:15;10490:16;:34;10458:8;:67::i;:::-;10556:4;10549:11;;;10155:413;;;;:::o;7345:175::-;7431:4;7448:42;7458:12;:10;:12::i;:::-;7472:9;7483:6;7448:9;:42::i;:::-;7508:4;7501:11;;7345:175;;;;:::o;7583:151::-;7672:7;7699:11;:18;7711:5;7699:18;;;;;;;;;;;;;;;:27;7718:7;7699:27;;;;;;;;;;;;;;;;7692:34;;7583:151;;;;:::o;2072:201:4:-;1052:13;:11;:13::i;:::-;2181:1:::1;2161:22;;:8;:22;;::::0;2153:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2237:28;2256:8;2237:18;:28::i;:::-;2072:201:::0;:::o;1833:229:5:-;1919:9;;;;;;;;;;;1897:32;;:10;:32;;;1889:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;1962:56;1972:6;1988:9;;;;;;;;;;;2000:17;2010:6;2000:9;:17::i;:::-;1962:9;:56::i;:::-;2029:9;;;;;;;;;;;:17;;;2047:6;2029:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1833:229;:::o;1331:132:4:-;1406:12;:10;:12::i;:::-;1395:23;;:7;:5;:7::i;:::-;:23;;;1387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1331:132::o;602:98:1:-;655:7;682:10;675:17;;602:98;:::o;13839:380:2:-;13992:1;13975:19;;:5;:19;;;13967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14073:1;14054:21;;:7;:21;;;14046:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14157:6;14127:11;:18;14139:5;14127:18;;;;;;;;;;;;;;;:27;14146:7;14127:27;;;;;;;;;;;;;;;:36;;;;14195:7;14179:32;;14188:5;14179:32;;;14204:6;14179:32;;;;;;:::i;:::-;;;;;;;;13839:380;;;:::o;11058:733::-;11216:1;11198:20;;:6;:20;;;11190:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11300:1;11279:23;;:9;:23;;;11271:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11355:47;11376:6;11384:9;11395:6;11355:20;:47::i;:::-;11415:21;11439:9;:17;11449:6;11439:17;;;;;;;;;;;;;;;;11415:41;;11492:6;11475:13;:23;;11467:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11613:6;11597:13;:22;11577:9;:17;11587:6;11577:17;;;;;;;;;;;;;;;:42;;;;11665:6;11641:9;:20;11651:9;11641:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11706:9;11689:35;;11698:6;11689:35;;;11717:6;11689:35;;;;;;:::i;:::-;;;;;;;;11737:46;11757:6;11765:9;11776:6;11737:19;:46::i;:::-;11179:612;11058:733;;;:::o;2433:191:4:-;2507:16;2526:6;;;;;;;;;;;2507:25;;2552:8;2543:6;;:17;;;;;;;;;;;;;;;;;;2607:8;2576:40;;2597:8;2576:40;;;;;;;;;;;;2496:128;2433:191;:::o;1218:607:5:-;1370:10;:14;1381:2;1370:14;;;;;;;;;;;;;;;;;;;;;;;;;1369:15;:36;;;;;1389:10;:16;1400:4;1389:16;;;;;;;;;;;;;;;;;;;;;;;;;1388:17;1369:36;1361:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;1463:1;1438:27;;:13;;;;;;;;;;;:27;;;1434:148;;1498:7;:5;:7::i;:::-;1490:15;;:4;:15;;;:32;;;;1515:7;:5;:7::i;:::-;1509:13;;:2;:13;;;1490:32;1482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1564:7;;1434:148;1617:1;1598:16;;:20;:45;;;;;1630:13;;;;;;;;;;;1622:21;;:4;:21;;;1598:45;:73;;;;;1661:9;;;;;;;;;;;1647:24;;:2;:24;;;;1598:73;1594:184;;;1728:16;;1718:6;1696:19;1712:2;1696:15;:19::i;:::-;:28;;;;:::i;:::-;:48;;1688:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;1594:184;1790:9;;;;;;;;;;;:17;;;1808:4;1814:2;1790:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1218:607;;;;:::o;15548:124:2:-;;;;:::o;88:117:6:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:99::-;1729:6;1763:5;1757:12;1747:22;;1677:99;;;:::o;1782:169::-;1866:11;1900:6;1895:3;1888:19;1940:4;1935:3;1931:14;1916:29;;1782:169;;;;:::o;1957:246::-;2038:1;2048:113;2062:6;2059:1;2056:13;2048:113;;;2147:1;2142:3;2138:11;2132:18;2128:1;2123:3;2119:11;2112:39;2084:2;2081:1;2077:10;2072:15;;2048:113;;;2195:1;2186:6;2181:3;2177:16;2170:27;2019:184;1957:246;;;:::o;2209:102::-;2250:6;2301:2;2297:7;2292:2;2285:5;2281:14;2277:28;2267:38;;2209:102;;;:::o;2317:377::-;2405:3;2433:39;2466:5;2433:39;:::i;:::-;2488:71;2552:6;2547:3;2488:71;:::i;:::-;2481:78;;2568:65;2626:6;2621:3;2614:4;2607:5;2603:16;2568:65;:::i;:::-;2658:29;2680:6;2658:29;:::i;:::-;2653:3;2649:39;2642:46;;2409:285;2317:377;;;;:::o;2700:313::-;2813:4;2851:2;2840:9;2836:18;2828:26;;2900:9;2894:4;2890:20;2886:1;2875:9;2871:17;2864:47;2928:78;3001:4;2992:6;2928:78;:::i;:::-;2920:86;;2700:313;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:116::-;5258:21;5273:5;5258:21;:::i;:::-;5251:5;5248:32;5238:60;;5294:1;5291;5284:12;5238:60;5188:116;:::o;5310:133::-;5353:5;5391:6;5378:20;5369:29;;5407:30;5431:5;5407:30;:::i;:::-;5310:133;;;;:::o;5449:468::-;5514:6;5522;5571:2;5559:9;5550:7;5546:23;5542:32;5539:119;;;5577:79;;:::i;:::-;5539:119;5697:1;5722:53;5767:7;5758:6;5747:9;5743:22;5722:53;:::i;:::-;5712:63;;5668:117;5824:2;5850:50;5892:7;5883:6;5872:9;5868:22;5850:50;:::i;:::-;5840:60;;5795:115;5449:468;;;;;:::o;5923:118::-;6010:24;6028:5;6010:24;:::i;:::-;6005:3;5998:37;5923:118;;:::o;6047:222::-;6140:4;6178:2;6167:9;6163:18;6155:26;;6191:71;6259:1;6248:9;6244:17;6235:6;6191:71;:::i;:::-;6047:222;;;;:::o;6275:474::-;6343:6;6351;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:53;6596:7;6587:6;6576:9;6572:22;6551:53;:::i;:::-;6541:63;;6497:117;6653:2;6679:53;6724:7;6715:6;6704:9;6700:22;6679:53;:::i;:::-;6669:63;;6624:118;6275:474;;;;;:::o;6755:180::-;6803:77;6800:1;6793:88;6900:4;6897:1;6890:15;6924:4;6921:1;6914:15;6941:320;6985:6;7022:1;7016:4;7012:12;7002:22;;7069:1;7063:4;7059:12;7090:18;7080:81;;7146:4;7138:6;7134:17;7124:27;;7080:81;7208:2;7200:6;7197:14;7177:18;7174:38;7171:84;;7227:18;;:::i;:::-;7171:84;6992:269;6941:320;;;:::o;7267:227::-;7407:34;7403:1;7395:6;7391:14;7384:58;7476:10;7471:2;7463:6;7459:15;7452:35;7267:227;:::o;7500:366::-;7642:3;7663:67;7727:2;7722:3;7663:67;:::i;:::-;7656:74;;7739:93;7828:3;7739:93;:::i;:::-;7857:2;7852:3;7848:12;7841:19;;7500:366;;;:::o;7872:419::-;8038:4;8076:2;8065:9;8061:18;8053:26;;8125:9;8119:4;8115:20;8111:1;8100:9;8096:17;8089:47;8153:131;8279:4;8153:131;:::i;:::-;8145:139;;7872:419;;;:::o;8297:180::-;8345:77;8342:1;8335:88;8442:4;8439:1;8432:15;8466:4;8463:1;8456:15;8483:191;8523:3;8542:20;8560:1;8542:20;:::i;:::-;8537:25;;8576:20;8594:1;8576:20;:::i;:::-;8571:25;;8619:1;8616;8612:9;8605:16;;8640:3;8637:1;8634:10;8631:36;;;8647:18;;:::i;:::-;8631:36;8483:191;;;;:::o;8680:224::-;8820:34;8816:1;8808:6;8804:14;8797:58;8889:7;8884:2;8876:6;8872:15;8865:32;8680:224;:::o;8910:366::-;9052:3;9073:67;9137:2;9132:3;9073:67;:::i;:::-;9066:74;;9149:93;9238:3;9149:93;:::i;:::-;9267:2;9262:3;9258:12;9251:19;;8910:366;;;:::o;9282:419::-;9448:4;9486:2;9475:9;9471:18;9463:26;;9535:9;9529:4;9525:20;9521:1;9510:9;9506:17;9499:47;9563:131;9689:4;9563:131;:::i;:::-;9555:139;;9282:419;;;:::o;9707:225::-;9847:34;9843:1;9835:6;9831:14;9824:58;9916:8;9911:2;9903:6;9899:15;9892:33;9707:225;:::o;9938:366::-;10080:3;10101:67;10165:2;10160:3;10101:67;:::i;:::-;10094:74;;10177:93;10266:3;10177:93;:::i;:::-;10295:2;10290:3;10286:12;10279:19;;9938:366;;;:::o;10310:419::-;10476:4;10514:2;10503:9;10499:18;10491:26;;10563:9;10557:4;10553:20;10549:1;10538:9;10534:17;10527:47;10591:131;10717:4;10591:131;:::i;:::-;10583:139;;10310:419;;;:::o;10735:167::-;10875:19;10871:1;10863:6;10859:14;10852:43;10735:167;:::o;10908:366::-;11050:3;11071:67;11135:2;11130:3;11071:67;:::i;:::-;11064:74;;11147:93;11236:3;11147:93;:::i;:::-;11265:2;11260:3;11256:12;11249:19;;10908:366;;;:::o;11280:419::-;11446:4;11484:2;11473:9;11469:18;11461:26;;11533:9;11527:4;11523:20;11519:1;11508:9;11504:17;11497:47;11561:131;11687:4;11561:131;:::i;:::-;11553:139;;11280:419;;;:::o;11705:182::-;11845:34;11841:1;11833:6;11829:14;11822:58;11705:182;:::o;11893:366::-;12035:3;12056:67;12120:2;12115:3;12056:67;:::i;:::-;12049:74;;12132:93;12221:3;12132:93;:::i;:::-;12250:2;12245:3;12241:12;12234:19;;11893:366;;;:::o;12265:419::-;12431:4;12469:2;12458:9;12454:18;12446:26;;12518:9;12512:4;12508:20;12504:1;12493:9;12489:17;12482:47;12546:131;12672:4;12546:131;:::i;:::-;12538:139;;12265:419;;;:::o;12690:223::-;12830:34;12826:1;12818:6;12814:14;12807:58;12899:6;12894:2;12886:6;12882:15;12875:31;12690:223;:::o;12919:366::-;13061:3;13082:67;13146:2;13141:3;13082:67;:::i;:::-;13075:74;;13158:93;13247:3;13158:93;:::i;:::-;13276:2;13271:3;13267:12;13260:19;;12919:366;;;:::o;13291:419::-;13457:4;13495:2;13484:9;13480:18;13472:26;;13544:9;13538:4;13534:20;13530:1;13519:9;13515:17;13508:47;13572:131;13698:4;13572:131;:::i;:::-;13564:139;;13291:419;;;:::o;13716:221::-;13856:34;13852:1;13844:6;13840:14;13833:58;13925:4;13920:2;13912:6;13908:15;13901:29;13716:221;:::o;13943:366::-;14085:3;14106:67;14170:2;14165:3;14106:67;:::i;:::-;14099:74;;14182:93;14271:3;14182:93;:::i;:::-;14300:2;14295:3;14291:12;14284:19;;13943:366;;;:::o;14315:419::-;14481:4;14519:2;14508:9;14504:18;14496:26;;14568:9;14562:4;14558:20;14554:1;14543:9;14539:17;14532:47;14596:131;14722:4;14596:131;:::i;:::-;14588:139;;14315:419;;;:::o;14740:224::-;14880:34;14876:1;14868:6;14864:14;14857:58;14949:7;14944:2;14936:6;14932:15;14925:32;14740:224;:::o;14970:366::-;15112:3;15133:67;15197:2;15192:3;15133:67;:::i;:::-;15126:74;;15209:93;15298:3;15209:93;:::i;:::-;15327:2;15322:3;15318:12;15311:19;;14970:366;;;:::o;15342:419::-;15508:4;15546:2;15535:9;15531:18;15523:26;;15595:9;15589:4;15585:20;15581:1;15570:9;15566:17;15559:47;15623:131;15749:4;15623:131;:::i;:::-;15615:139;;15342:419;;;:::o;15767:222::-;15907:34;15903:1;15895:6;15891:14;15884:58;15976:5;15971:2;15963:6;15959:15;15952:30;15767:222;:::o;15995:366::-;16137:3;16158:67;16222:2;16217:3;16158:67;:::i;:::-;16151:74;;16234:93;16323:3;16234:93;:::i;:::-;16352:2;16347:3;16343:12;16336:19;;15995:366;;;:::o;16367:419::-;16533:4;16571:2;16560:9;16556:18;16548:26;;16620:9;16614:4;16610:20;16606:1;16595:9;16591:17;16584:47;16648:131;16774:4;16648:131;:::i;:::-;16640:139;;16367:419;;;:::o;16792:225::-;16932:34;16928:1;16920:6;16916:14;16909:58;17001:8;16996:2;16988:6;16984:15;16977:33;16792:225;:::o;17023:366::-;17165:3;17186:67;17250:2;17245:3;17186:67;:::i;:::-;17179:74;;17262:93;17351:3;17262:93;:::i;:::-;17380:2;17375:3;17371:12;17364:19;;17023:366;;;:::o;17395:419::-;17561:4;17599:2;17588:9;17584:18;17576:26;;17648:9;17642:4;17638:20;17634:1;17623:9;17619:17;17612:47;17676:131;17802:4;17676:131;:::i;:::-;17668:139;;17395:419;;;:::o;17820:161::-;17960:13;17956:1;17948:6;17944:14;17937:37;17820:161;:::o;17987:366::-;18129:3;18150:67;18214:2;18209:3;18150:67;:::i;:::-;18143:74;;18226:93;18315:3;18226:93;:::i;:::-;18344:2;18339:3;18335:12;18328:19;;17987:366;;;:::o;18359:419::-;18525:4;18563:2;18552:9;18548:18;18540:26;;18612:9;18606:4;18602:20;18598:1;18587:9;18583:17;18576:47;18640:131;18766:4;18640:131;:::i;:::-;18632:139;;18359:419;;;:::o;18784:172::-;18924:24;18920:1;18912:6;18908:14;18901:48;18784:172;:::o;18962:366::-;19104:3;19125:67;19189:2;19184:3;19125:67;:::i;:::-;19118:74;;19201:93;19290:3;19201:93;:::i;:::-;19319:2;19314:3;19310:12;19303:19;;18962:366;;;:::o;19334:419::-;19500:4;19538:2;19527:9;19523:18;19515:26;;19587:9;19581:4;19577:20;19573:1;19562:9;19558:17;19551:47;19615:131;19741:4;19615:131;:::i;:::-;19607:139;;19334:419;;;:::o;19759:167::-;19899:19;19895:1;19887:6;19883:14;19876:43;19759:167;:::o;19932:366::-;20074:3;20095:67;20159:2;20154:3;20095:67;:::i;:::-;20088:74;;20171:93;20260:3;20171:93;:::i;:::-;20289:2;20284:3;20280:12;20273:19;;19932:366;;;:::o;20304:419::-;20470:4;20508:2;20497:9;20493:18;20485:26;;20557:9;20551:4;20547:20;20543:1;20532:9;20528:17;20521:47;20585:131;20711:4;20585:131;:::i;:::-;20577:139;;20304:419;;;:::o;20729:332::-;20850:4;20888:2;20877:9;20873:18;20865:26;;20901:71;20969:1;20958:9;20954:17;20945:6;20901:71;:::i;:::-;20982:72;21050:2;21039:9;21035:18;21026:6;20982:72;:::i;:::-;20729:332;;;;;:::o

Swarm Source

ipfs://895c2d23e1e31301e48438de2ae1a5e1ad23afce06a542a6b1830ba743fc5cbf
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.