ETH Price: $3,356.72 (-3.41%)

Contract

0x508B27902C6c14972a10a4e413B9cFA449e9ceDB
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

AISignal (aisig) (@$0.0007)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer214651152024-12-23 12:14:233 days ago1734956063IN
0x508B2790...449e9ceDB
0 ETH0.000452598.6526474
Transfer214650892024-12-23 12:08:593 days ago1734955739IN
0x508B2790...449e9ceDB
0 ETH0.000418498.00068862
Transfer214650792024-12-23 12:06:593 days ago1734955619IN
0x508B2790...449e9ceDB
0 ETH0.000467688.9411003
Transfer214650732024-12-23 12:05:353 days ago1734955535IN
0x508B2790...449e9ceDB
0 ETH0.000370927.09129852
Transfer214650452024-12-23 11:59:593 days ago1734955199IN
0x508B2790...449e9ceDB
0 ETH0.000327146.25440392
Transfer214649962024-12-23 11:49:593 days ago1734954599IN
0x508B2790...449e9ceDB
0 ETH0.000515387.4281089
Transfer214648502024-12-23 11:20:473 days ago1734952847IN
0x508B2790...449e9ceDB
0 ETH0.000356646.82150657
Transfer214648422024-12-23 11:19:113 days ago1734952751IN
0x508B2790...449e9ceDB
0 ETH0.000368057.03804674
Transfer214648352024-12-23 11:17:473 days ago1734952667IN
0x508B2790...449e9ceDB
0 ETH0.0004816.93266249
Approve214558122024-12-22 5:00:594 days ago1734843659IN
0x508B2790...449e9ceDB
0 ETH0.000263885.66549584
Approve214528462024-12-21 19:03:114 days ago1734807791IN
0x508B2790...449e9ceDB
0 ETH0.0005362611.52814961
Approve214518092024-12-21 15:34:114 days ago1734795251IN
0x508B2790...449e9ceDB
0 ETH0.000472810.16401083
Approve214375892024-12-19 15:54:116 days ago1734623651IN
0x508B2790...449e9ceDB
0 ETH0.0014294930.6903069
Approve214373902024-12-19 15:14:116 days ago1734621251IN
0x508B2790...449e9ceDB
0 ETH0.0011205824.05826487
Approve214373902024-12-19 15:14:116 days ago1734621251IN
0x508B2790...449e9ceDB
0 ETH0.0011205824.05826487
Approve214373902024-12-19 15:14:116 days ago1734621251IN
0x508B2790...449e9ceDB
0 ETH0.0011205824.05826487
Approve214373902024-12-19 15:14:116 days ago1734621251IN
0x508B2790...449e9ceDB
0 ETH0.0011205824.05826487
Approve214373902024-12-19 15:14:116 days ago1734621251IN
0x508B2790...449e9ceDB
0 ETH0.0011205824.05826487
Approve214373902024-12-19 15:14:116 days ago1734621251IN
0x508B2790...449e9ceDB
0 ETH0.0011205824.05826487
Approve214373902024-12-19 15:14:116 days ago1734621251IN
0x508B2790...449e9ceDB
0 ETH0.0011205824.05826487
Approve214373902024-12-19 15:14:116 days ago1734621251IN
0x508B2790...449e9ceDB
0 ETH0.0011205824.05826487
Approve214278212024-12-18 7:06:598 days ago1734505619IN
0x508B2790...449e9ceDB
0 ETH0.0005428811.67037708
Approve214276362024-12-18 6:29:358 days ago1734503375IN
0x508B2790...449e9ceDB
0 ETH0.000451579.70746408
Approve214194452024-12-17 3:04:239 days ago1734404663IN
0x508B2790...449e9ceDB
0 ETH0.0004973310.69134379
Approve214188942024-12-17 1:13:239 days ago1734398003IN
0x508B2790...449e9ceDB
0 ETH0.000435789.35610851
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
214715012024-12-24 9:41:232 days ago1735033283
0x508B2790...449e9ceDB
0 ETH
214558142024-12-22 5:01:234 days ago1734843683
0x508B2790...449e9ceDB
0 ETH
214558072024-12-22 4:59:594 days ago1734843599
0x508B2790...449e9ceDB
0 ETH
214558072024-12-22 4:59:594 days ago1734843599
0x508B2790...449e9ceDB
0 ETH
214558072024-12-22 4:59:594 days ago1734843599
0x508B2790...449e9ceDB
0 ETH
214558072024-12-22 4:59:594 days ago1734843599
0x508B2790...449e9ceDB
0 ETH
214558072024-12-22 4:59:594 days ago1734843599
0x508B2790...449e9ceDB
0 ETH
214558072024-12-22 4:59:594 days ago1734843599
0x508B2790...449e9ceDB
0 ETH
214558072024-12-22 4:59:594 days ago1734843599
0x508B2790...449e9ceDB
0 ETH
214558072024-12-22 4:59:594 days ago1734843599
0x508B2790...449e9ceDB
0 ETH
214535382024-12-21 21:22:594 days ago1734816179
0x508B2790...449e9ceDB
0 ETH
214535382024-12-21 21:22:594 days ago1734816179
0x508B2790...449e9ceDB
0 ETH
214535382024-12-21 21:22:594 days ago1734816179
0x508B2790...449e9ceDB
0 ETH
214535382024-12-21 21:22:594 days ago1734816179
0x508B2790...449e9ceDB
0 ETH
214535382024-12-21 21:22:594 days ago1734816179
0x508B2790...449e9ceDB
0 ETH
214535382024-12-21 21:22:594 days ago1734816179
0x508B2790...449e9ceDB
0 ETH
214535382024-12-21 21:22:594 days ago1734816179
0x508B2790...449e9ceDB
0 ETH
214535382024-12-21 21:22:594 days ago1734816179
0x508B2790...449e9ceDB
0 ETH
214535232024-12-21 21:19:594 days ago1734815999
0x508B2790...449e9ceDB
0 ETH
214535232024-12-21 21:19:594 days ago1734815999
0x508B2790...449e9ceDB
0 ETH
214535232024-12-21 21:19:594 days ago1734815999
0x508B2790...449e9ceDB
0 ETH
214535232024-12-21 21:19:594 days ago1734815999
0x508B2790...449e9ceDB
0 ETH
214535232024-12-21 21:19:594 days ago1734815999
0x508B2790...449e9ceDB
0 ETH
214535232024-12-21 21:19:594 days ago1734815999
0x508B2790...449e9ceDB
0 ETH
214535232024-12-21 21:19:594 days ago1734815999
0x508B2790...449e9ceDB
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AISignalToken

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 20000 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-11
*/

//SPDX-License-Identifier: MIT

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

    function WETH() external pure returns (address);

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);
}

contract ERC20 is IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(msg.sender, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

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

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

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

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

pragma solidity ^0.8.17;

/// @notice Simple single owner authorization mixin.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)
///
/// @dev Note:
/// This implementation does NOT auto-initialize the owner to `msg.sender`.
/// You MUST call the `_initializeOwner` in the constructor / initializer.
///
/// While the ownable portion follows
/// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,
/// the nomenclature for the 2-step ownership handover may be unique to this codebase.
abstract contract Ownable {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The caller is not authorized to call the function.
    error Unauthorized();

    /// @dev The `newOwner` cannot be the zero address.
    error NewOwnerIsZeroAddress();

    /// @dev The `pendingOwner` does not have a valid handover request.
    error NoHandoverRequest();

    /// @dev Cannot double-initialize.
    error AlreadyInitialized();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           EVENTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The ownership is transferred from `oldOwner` to `newOwner`.
    /// This event is intentionally kept the same as OpenZeppelin's Ownable to be
    /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),
    /// despite it not being as lightweight as a single argument event.
    event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);

    /// @dev An ownership handover to `pendingOwner` has been requested.
    event OwnershipHandoverRequested(address indexed pendingOwner);

    /// @dev The ownership handover to `pendingOwner` has been canceled.
    event OwnershipHandoverCanceled(address indexed pendingOwner);

    /// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`.
    uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =
        0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;

    /// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =
        0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;

    /// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`.
    uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =
        0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STORAGE                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The owner slot is given by:
    /// `bytes32(~uint256(uint32(bytes4(keccak256("_OWNER_SLOT_NOT")))))`.
    /// It is intentionally chosen to be a high value
    /// to avoid collision with lower slots.
    /// The choice of manual storage layout is to enable compatibility
    /// with both regular and upgradeable contracts.
    bytes32 internal constant _OWNER_SLOT =
        0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927;

    /// The ownership handover slot of `newOwner` is given by:
    /// ```
    ///     mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))
    ///     let handoverSlot := keccak256(0x00, 0x20)
    /// ```
    /// It stores the expiry timestamp of the two-step ownership handover.
    uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                     INTERNAL FUNCTIONS                     */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Override to return true to make `_initializeOwner` prevent double-initialization.
    function _guardInitializeOwner() internal pure virtual returns (bool guard) {}

    /// @dev Initializes the owner directly without authorization guard.
    /// This function must be called upon initialization,
    /// regardless of whether the contract is upgradeable or not.
    /// This is to enable generalization to both regular and upgradeable contracts,
    /// and to save gas in case the initial owner is not the caller.
    /// For performance reasons, this function will not check if there
    /// is an existing owner.
    function _initializeOwner(address newOwner) internal virtual {
        if (_guardInitializeOwner()) {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                if sload(ownerSlot) {
                    mstore(0x00, 0x0dc149f0) // `AlreadyInitialized()`.
                    revert(0x1c, 0x04)
                }
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Store the new value.
                sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
            }
        } else {
            /// @solidity memory-safe-assembly
            assembly {
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Store the new value.
                sstore(_OWNER_SLOT, newOwner)
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
            }
        }
    }

    /// @dev Sets the owner directly without authorization guard.
    function _setOwner(address newOwner) internal virtual {
        if (_guardInitializeOwner()) {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
                // Store the new value.
                sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
            }
        } else {
            /// @solidity memory-safe-assembly
            assembly {
                let ownerSlot := _OWNER_SLOT
                // Clean the upper 96 bits.
                newOwner := shr(96, shl(96, newOwner))
                // Emit the {OwnershipTransferred} event.
                log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
                // Store the new value.
                sstore(ownerSlot, newOwner)
            }
        }
    }

    /// @dev Throws if the sender is not the owner.
    function _checkOwner() internal view virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // If the caller is not the stored owner, revert.
            if iszero(eq(caller(), sload(_OWNER_SLOT))) {
                mstore(0x00, 0x82b42900) // `Unauthorized()`.
                revert(0x1c, 0x04)
            }
        }
    }

    /// @dev Returns how long a two-step ownership handover is valid for in seconds.
    /// Override to return a different value if needed.
    /// Made internal to conserve bytecode. Wrap it in a public function if needed.
    function _ownershipHandoverValidFor() internal view virtual returns (uint64) {
        return 48 * 3600;
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                  PUBLIC UPDATE FUNCTIONS                   */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Allows the owner to transfer the ownership to `newOwner`.
    function transferOwnership(address newOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            if iszero(shl(96, newOwner)) {
                mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`.
                revert(0x1c, 0x04)
            }
        }
        _setOwner(newOwner);
    }

    /// @dev Allows the owner to renounce their ownership.
    function renounceOwnership() public payable virtual onlyOwner {
        _setOwner(address(0));
    }

    /// @dev Request a two-step ownership handover to the caller.
    /// The request will automatically expire in 48 hours (172800 seconds) by default.
    function requestOwnershipHandover() public payable virtual {
        unchecked {
            uint256 expires = block.timestamp + _ownershipHandoverValidFor();
            /// @solidity memory-safe-assembly
            assembly {
                // Compute and set the handover slot to `expires`.
                mstore(0x0c, _HANDOVER_SLOT_SEED)
                mstore(0x00, caller())
                sstore(keccak256(0x0c, 0x20), expires)
                // Emit the {OwnershipHandoverRequested} event.
                log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())
            }
        }
    }

    /// @dev Cancels the two-step ownership handover to the caller, if any.
    function cancelOwnershipHandover() public payable virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, caller())
            sstore(keccak256(0x0c, 0x20), 0)
            // Emit the {OwnershipHandoverCanceled} event.
            log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())
        }
    }

    /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.
    /// Reverts if there is no existing ownership handover requested by `pendingOwner`.
    function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute and set the handover slot to 0.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            let handoverSlot := keccak256(0x0c, 0x20)
            // If the handover does not exist, or has expired.
            if gt(timestamp(), sload(handoverSlot)) {
                mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`.
                revert(0x1c, 0x04)
            }
            // Set the handover slot to 0.
            sstore(handoverSlot, 0)
        }
        _setOwner(pendingOwner);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                   PUBLIC READ FUNCTIONS                    */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the owner of the contract.
    function owner() public view virtual returns (address result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(_OWNER_SLOT)
        }
    }

    /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.
    function ownershipHandoverExpiresAt(address pendingOwner)
        public
        view
        virtual
        returns (uint256 result)
    {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the handover slot.
            mstore(0x0c, _HANDOVER_SLOT_SEED)
            mstore(0x00, pendingOwner)
            // Load the handover slot.
            result := sload(keccak256(0x0c, 0x20))
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         MODIFIERS                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Marks a function as only callable by the owner.
    modifier onlyOwner() virtual {
        _checkOwner();
        _;
    }
}

contract AISignalToken is ERC20, Ownable {

    event TradingIsLive();
    event TotalSupplyReached();
    event StakingInitiated(address);
    event NewAutoSwapThreshold(uint256);
    event TokenBurned(address,uint256);

    address private immutable marketingWallet;
    address public immutable presale;
    address public staking;
    bool public live;
    bool public set;
    uint64 private start;
    uint64 private timeend;
    uint256 private max;

    bool private swapping;
    uint256 private swapTokensAtAmount;
    
    address private immutable deadAddress = address(0xdead);
    uint256 private immutable maxSwap;
    
    mapping (address => bool) private isExcluded;
    mapping (address => bool) private isPair;
    mapping (uint256 => uint256) private blockSwaps;

    IUniswapV2Router02 private immutable uniswapV2Router;

    constructor (
        address _presale,
        uint256 _totalSup,
        uint8 _lpAllo,
        address _team
    ) ERC20("AISignal","aisig") { 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        address uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
        presale = _presale;
        max = _totalSup;
        maxSwap = _totalSup * 25 / 1000; //2.5%
        swapTokensAtAmount = max / 20000; //0.005%
        marketingWallet = _team;
        exclude(uniswapV2Pair, true);
        isPair[uniswapV2Pair] = true;
        exclude(address(this),true);
        _mint(_presale, _totalSup * _lpAllo / 100);
        _initializeOwner(msg.sender);
    }

    error token__notLive();
    error token__maxHolding();
    error token__invalidPool();
    error token__swapping();

    /// @dev initiates trading and specifies the main liquidity pool.
    function beginTrading() external onlyOwner {
        require(!live, "Already begun");
        start = uint64(block.timestamp);
        timeend = start + uint64(15 minutes);
        live = true;
        emit TradingIsLive();
    }

    function beginStaking(address _staking) external {
        require(msg.sender == marketingWallet, "Unauthorized");
        staking = _staking;
        exclude(staking, true);
        emit StakingInitiated(_staking);
    }

    /// @dev marketingWallet changes the threshold at which the contract autoswaps
    function editSwapThreshold(uint256 amount) external {
        require(msg.sender == marketingWallet, "Unauthorized");
        require(amount > max / 20000000 && amount < maxSwap); //%.000005 - %2.5
        swapTokensAtAmount = amount;
        emit NewAutoSwapThreshold(amount);
    }

    function manualswap(uint256 amount) external {
        require(msg.sender == marketingWallet, "Unauthorized");
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        if(!swapping){
            swapping = true;
            swapTokensForEth(amount);
            swapping = false;
        }else{
            revert token__swapping();
        }
    }

    /// @dev used by presale contract to mint tokens to claimants in order to avoid presale contract holding more than 2.5% supply
    function presaleDon(address recip, uint256 value ) external returns (bool){
        require(msg.sender == presale, "unauthorized");
        require(set == false, "no more minting");
        require(totalSupply() + value <= max, "exceeds supply");
        _mint(recip,value);
        if(totalSupply() == max){
            complete();
        }
        return true;
    }

    function burn(uint256 value) external {
        _burn(msg.sender, value);
        emit TokenBurned(msg.sender, value);
    }

    function autoSwap(uint256 contractBalance) private {
        if (contractBalance == 0) {
            return;
        }
        if (contractBalance > maxSwap) {
            contractBalance = maxSwap;
        }
        uint256 amountToSwapForETH = contractBalance;
        swapTokensForEth(amountToSwapForETH);
    }

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

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

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

    /// @dev excluded addresses may hold larger than 2.5% and are not taxed on swaps
    function exclude(address add, bool exc) internal {
        isExcluded[add] = exc;
    }

    function complete() internal {
        set = true;
        emit TotalSupplyReached();
    }

    function _calculateTax(uint256 amount, bool isSell) internal view returns (uint256) {
        uint64 end = timeend;
        uint64 time = uint64(block.timestamp);
        uint256 fee = 0;
        if(time < end){
            uint256 bracket = (((end - time) * 100) / (end - start)); // 100 to 0 to determine tax bracket
            if(bracket >= 66){
                fee = amount * 30 / 100;
            } else if (bracket < 66 && bracket > 33){
                if(isSell){
                    fee = amount * 20 / 100;
                }else {
                    fee = amount * 10 / 100;
                }
            } else if (bracket <= 33) {
                if(isSell){
                    fee = amount * 10 / 100;
                }else {
                    fee = amount * 5 / 100;
                }
            }
            return fee;
        } else {
            fee = amount * 5 / 100;
            return fee;
        }
    }

    

    /*
    // @dev overrides transfer function to tax the liquidity pool swaps linearly from 30% to 5% over the cool down period to prevent bot abuse
    // also enforces 2.5% holding cap per wallet
    */
    function _transfer(address from,address to,uint256 amount) internal override {

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(live){
            bool excludedTo = isExcluded[to];
            bool isSell = isPair[to];

            //maximum 2.5% of supply per wallet enforced
            if(!excludedTo && balanceOf(to) + amount  > totalSupply() * 25 / 1000){
                revert token__maxHolding();
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= swapTokensAtAmount;
            if (
                canSwap && !swapping && isSell //buyers dont pay for autoswap gg
            ) {
                if (blockSwaps[block.number] < 3) {
                    swapping = true;
                    autoSwap(contractTokenBalance);
                    swapping = false;
                    blockSwaps[block.number] = blockSwaps[block.number] + 1;
                }
            }

            if((isSell && !isExcluded[from]) || (isPair[from] && !excludedTo)){
                uint256 fee = _calculateTax(amount, isSell);
                super._transfer(from, address(this), fee);
                amount -= fee;
                super._transfer(from, to, amount);
            }else{
                super._transfer(from, to, amount);
            }
        }else{
            if(from == address(0) || from == presale || to == presale || to == deadAddress ){
                super._transfer(from, to, amount);
            }else{
                revert token__notLive();
            }
        }
        return;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_presale","type":"address"},{"internalType":"uint256","name":"_totalSup","type":"uint256"},{"internalType":"uint8","name":"_lpAllo","type":"uint8"},{"internalType":"address","name":"_team","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"token__invalidPool","type":"error"},{"inputs":[],"name":"token__maxHolding","type":"error"},{"inputs":[],"name":"token__notLive","type":"error"},{"inputs":[],"name":"token__swapping","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"NewAutoSwapThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"StakingInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"TokenBurned","type":"event"},{"anonymous":false,"inputs":[],"name":"TotalSupplyReached","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingIsLive","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":[{"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":"_staking","type":"address"}],"name":"beginStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"beginTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","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":"uint256","name":"amount","type":"uint256"}],"name":"editSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"live","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recip","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"presaleDon","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"set","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"payable","type":"function"}]

61012060405261dead60c0523480156200001857600080fd5b5060405162002ca138038062002ca18339810160408190526200003b91620003c9565b60405180604001604052806008815260200167105254da59db985b60c21b81525060405180604001604052806005815260200164616973696760d81b81525081600390816200008b9190620004c8565b5060046200009a8282620004c8565b5050737a250d5630b4cf539739df2c5dacb4c659f2488d6101008190526040805163c45a015560e01b81529051919250600091839163c45a01559160048083019260209291908290030181865afa158015620000fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000120919062000594565b6040516364e329cb60e11b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260248201526001600160a01b03919091169063c9c65396906044016020604051808303816000875af115801562000183573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a9919062000594565b6001600160a01b03871660a052600786905590506103e8620001cd866019620005cf565b620001d99190620005ef565b60e052600754620001ee90614e2090620005ef565b6009556001600160a01b0383811660805281166000908152600a602081815260408084208054600160ff199182168117909255600b8452828620805482168317905530865293909252909220805490911690911790556200026c8660646200025a60ff881689620005cf565b620002669190620005ef565b62000283565b62000277336200036b565b50505050505062000628565b6001600160a01b038216620002de5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620002f2919062000612565b90915550506001600160a01b038216600090815260208190526040812080548392906200032190849062000612565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b505050565b80516001600160a01b0381168114620003c457600080fd5b919050565b60008060008060808587031215620003e057600080fd5b620003eb85620003ac565b935060208501519250604085015160ff811681146200040957600080fd5b91506200041960608601620003ac565b905092959194509250565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200044f57607f821691505b6020821081036200047057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003a757600081815260208120601f850160051c810160208610156200049f5750805b601f850160051c820191505b81811015620004c057828155600101620004ab565b505050505050565b81516001600160401b03811115620004e457620004e462000424565b620004fc81620004f584546200043a565b8462000476565b602080601f8311600181146200053457600084156200051b5750858301515b600019600386901b1c1916600185901b178555620004c0565b600085815260208120601f198616915b82811015620005655788860151825594840194600190910190840162000544565b5085821015620005845787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620005a757600080fd5b620005b282620003ac565b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620005e957620005e9620005b9565b92915050565b6000826200060d57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005e957620005e9620005b9565b60805160a05160c05160e051610100516125ee620006b360003960008181611a2001528181611b000152611b6201526000818161068501528181612043015261206c0152600061169601526000818161056f01528181610dc6015281816115ea01526116400152600081816105dc015281816108e301528181610b1b0152611b9601526125ee6000f3fe6080604052600436106101b75760003560e01c8063881dce60116100ec578063b8e010de1161008a578063f04e283e11610064578063f04e283e14610537578063f2fde38b1461054a578063fdea8e0b1461055d578063fee81cf41461059157600080fd5b8063b8e010de1461049c578063c408c245146104cf578063dd62ed3e146104e457600080fd5b806395d89b41116100c657806395d89b4114610427578063a457c2d71461043c578063a7862c561461045c578063a9059cbb1461047c57600080fd5b8063881dce60146103a15780638da5cb5b146103c1578063957aa58c146103f557600080fd5b8063313ce567116101595780634cf088d9116101335780634cf088d9146102fc57806354d1f13d1461034e57806370a0823114610356578063715018a61461039957600080fd5b8063313ce567146102a057806339509351146102bc57806342966c68146102dc57600080fd5b806318160ddd1161019557806318160ddd1461023957806323b872dd14610258578063256929621461027857806329e6b5861461028057600080fd5b806304c2754d146101bc57806306fdde03146101de578063095ea7b314610209575b600080fd5b3480156101c857600080fd5b506101dc6101d73660046121d2565b6105c4565b005b3480156101ea57600080fd5b506101f36106ec565b60405161020091906121eb565b60405180910390f35b34801561021557600080fd5b50610229610224366004612279565b61077e565b6040519015158152602001610200565b34801561024557600080fd5b506002545b604051908152602001610200565b34801561026457600080fd5b506102296102733660046122a5565b610795565b6101dc61087b565b34801561028c57600080fd5b506101dc61029b3660046122e6565b6108cb565b3480156102ac57600080fd5b5060405160128152602001610200565b3480156102c857600080fd5b506102296102d7366004612279565b610a2a565b3480156102e857600080fd5b506101dc6102f73660046121d2565b610a73565b34801561030857600080fd5b506005546103299073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610200565b6101dc610ab3565b34801561036257600080fd5b5061024a6103713660046122e6565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101dc610aef565b3480156103ad57600080fd5b506101dc6103bc3660046121d2565b610b03565b3480156103cd57600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754610329565b34801561040157600080fd5b506005546102299074010000000000000000000000000000000000000000900460ff1681565b34801561043357600080fd5b506101f3610cc5565b34801561044857600080fd5b50610229610457366004612279565b610cd4565b34801561046857600080fd5b50610229610477366004612279565b610dac565b34801561048857600080fd5b50610229610497366004612279565b610f6f565b3480156104a857600080fd5b50600554610229907501000000000000000000000000000000000000000000900460ff1681565b3480156104db57600080fd5b506101dc610f7c565b3480156104f057600080fd5b5061024a6104ff36600461230a565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101dc6105453660046122e6565b611114565b6101dc6105583660046122e6565b611151565b34801561056957600080fd5b506103297f000000000000000000000000000000000000000000000000000000000000000081565b34801561059d57600080fd5b5061024a6105ac3660046122e6565b63389a75e1600c908152600091909152602090205490565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f556e617574686f72697a6564000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6301312d0060075461067a91906123a1565b811180156106a757507f000000000000000000000000000000000000000000000000000000000000000081105b6106b057600080fd5b60098190556040518181527f9b974812a379eb5931633dc2560f78ae5fadaabeee527fcc2a22e8c9fbe40b74906020015b60405180910390a150565b6060600380546106fb906123b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610727906123b5565b80156107745780601f1061074957610100808354040283529160200191610774565b820191906000526020600020905b81548152906001019060200180831161075757829003601f168201915b5050505050905090565b600061078b338484611178565b5060015b92915050565b60006107a284848461132b565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000606482015260840161065f565b6108708533858403611178565b506001949350505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015260640161065f565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556000908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560405173ffffffffffffffffffffffffffffffffffffffff821681527f9df2188765ac379366bdf3bf48f56bb4f96e2b5b7148371f88cf7149b7742cdd906020016106e1565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161078b918590610a6e908690612408565b611178565b610a7d3382611726565b60408051338152602081018390527f1af5163f80e79b5e554f61e1d052084d3a3fe1166e42a265798c4e2ddce8ffa291016106e1565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610af7611913565b610b016000611949565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610ba2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015260640161065f565b306000908152602081905260409020548111158015610bc15750600081115b610c27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f57726f6e6720616d6f756e740000000000000000000000000000000000000000604482015260640161065f565b60085460ff16610c9057600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610c65816119af565b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550565b6040517fc958536a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b6060600480546106fb906123b5565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610d95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161065f565b610da23385858403611178565b5060019392505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f756e617574686f72697a65640000000000000000000000000000000000000000604482015260640161065f565b6005547501000000000000000000000000000000000000000000900460ff1615610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6e6f206d6f7265206d696e74696e670000000000000000000000000000000000604482015260640161065f565b60075482610ee060025490565b610eea9190612408565b1115610f52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f6578636565647320737570706c79000000000000000000000000000000000000604482015260640161065f565b610f5c8383611bf6565b6007546002540361078b5761078b611d17565b600061078b33848461132b565b610f84611913565b60055474010000000000000000000000000000000000000000900460ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f416c726561647920626567756e00000000000000000000000000000000000000604482015260640161065f565b600580547fffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff167601000000000000000000000000000000000000000000004267ffffffffffffffff9081168202929092179283905561106f92610384929190041661241b565b6006805467ffffffffffffffff929092167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909216919091179055600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f19eb523ff0a66e6c369d2a0c1e54c8b7d856b16ff8029f75280cf9f65bfc02cd90600090a1565b61111c611913565b63389a75e1600c52806000526020600c20805442111561114457636f5e88186000526004601cfd5b60009055610cc281611949565b611159611913565b8060601b61116f57637448fbae6000526004601cfd5b610cc281611949565b73ffffffffffffffffffffffffffffffffffffffff831661121a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff82166112bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b806000036113445761133f83836000611d82565b505050565b60055474010000000000000000000000000000000000000000900460ff16156115ca5773ffffffffffffffffffffffffffffffffffffffff82166000908152600a6020908152604080832054600b9092529091205460ff91821691168115801561140357506103e86113b560025490565b6113c0906019612443565b6113ca91906123a1565b836113f78673ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6114019190612408565b115b1561143a576040517f424d6cc700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3060009081526020819052604090205460095481108015908190611461575060085460ff16155b801561146a5750825b1561150f57436000908152600c60205260409020546003111561150f57600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556114bb82612036565b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055436000908152600c60205260409020546114fe906001612408565b436000908152600c60205260409020555b828015611542575073ffffffffffffffffffffffffffffffffffffffff87166000908152600a602052604090205460ff16155b8061157b575073ffffffffffffffffffffffffffffffffffffffff87166000908152600b602052604090205460ff16801561157b575083155b156115b657600061158c8685612096565b9050611599883083611d82565b6115a3818761245a565b95506115b0888888611d82565b506115c1565b6115c1878787611d82565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316158061163857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061168e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116e457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156116f45761133f838383611d82565b6040517f16d684f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166117c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906118bb90849061245a565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610b01576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106119e4576119e461246d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aad919061249c565b81600181518110611ac057611ac061246d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611b25307f000000000000000000000000000000000000000000000000000000000000000084611178565b6040517f791ac94700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611bc090859060009086907f00000000000000000000000000000000000000000000000000000000000000009042906004016124b9565b600060405180830381600087803b158015611bda57600080fd5b505af1158015611bee573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611c73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065f565b8060026000828254611c859190612408565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290611cbf908490612408565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600580547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556040517f7be9badbf9fba52cc4d59989c81f80d9dd24cef9b8e9ef16c469274ae3809a8790600090a1565b73ffffffffffffffffffffffffffffffffffffffff8316611e25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff8216611ec8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015611f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290611fc2908490612408565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161202891815260200190565b60405180910390a350505050565b806000036120415750565b7f000000000000000000000000000000000000000000000000000000000000000081111561208c57507f00000000000000000000000000000000000000000000000000000000000000005b80611d13816119af565b60065460009067ffffffffffffffff908116904290839082168311156121b0576005546000906120ea90760100000000000000000000000000000000000000000000900467ffffffffffffffff1685612544565b6120f48486612544565b6120ff906064612565565b6121099190612591565b67ffffffffffffffff1690506042811061213b57606461212a88601e612443565b61213491906123a1565b91506121a5565b60428110801561214b5750602181115b1561217057851561216357606461212a886014612443565b606461212a88600a612443565b602181116121a557851561218b57606461212a88600a612443565b6064612198886005612443565b6121a291906123a1565b91505b50925061078f915050565b60646121bd876005612443565b6121c791906123a1565b935061078f92505050565b6000602082840312156121e457600080fd5b5035919050565b600060208083528351808285015260005b81811015612218578581018301518582016040015282016121fc565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610cc257600080fd5b6000806040838503121561228c57600080fd5b823561229781612257565b946020939093013593505050565b6000806000606084860312156122ba57600080fd5b83356122c581612257565b925060208401356122d581612257565b929592945050506040919091013590565b6000602082840312156122f857600080fd5b813561230381612257565b9392505050565b6000806040838503121561231d57600080fd5b823561232881612257565b9150602083013561233881612257565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000826123b0576123b0612343565b500490565b600181811c908216806123c957607f821691505b602082108103612402577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561078f5761078f612372565b67ffffffffffffffff81811683821601908082111561243c5761243c612372565b5092915050565b808202811582820484141761078f5761078f612372565b8181038181111561078f5761078f612372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156124ae57600080fd5b815161230381612257565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561251657845173ffffffffffffffffffffffffffffffffffffffff16835293830193918301916001016124e4565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b67ffffffffffffffff82811682821603908082111561243c5761243c612372565b67ffffffffffffffff81811683821602808216919082811461258957612589612372565b505092915050565b600067ffffffffffffffff808416806125ac576125ac612343565b9216919091049291505056fea264697066735822122083762292e5bbbb22085b4757a4cafbdf4be034af262aa316e72d42a948cda45264736f6c63430008140033000000000000000000000000c8b612fa3e2670c4355d510fa572dec1285f86400000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000000000000000000000000034000000000000000000000000321847122142b1ec20df45821464157a0d1cafe4

Deployed Bytecode

0x6080604052600436106101b75760003560e01c8063881dce60116100ec578063b8e010de1161008a578063f04e283e11610064578063f04e283e14610537578063f2fde38b1461054a578063fdea8e0b1461055d578063fee81cf41461059157600080fd5b8063b8e010de1461049c578063c408c245146104cf578063dd62ed3e146104e457600080fd5b806395d89b41116100c657806395d89b4114610427578063a457c2d71461043c578063a7862c561461045c578063a9059cbb1461047c57600080fd5b8063881dce60146103a15780638da5cb5b146103c1578063957aa58c146103f557600080fd5b8063313ce567116101595780634cf088d9116101335780634cf088d9146102fc57806354d1f13d1461034e57806370a0823114610356578063715018a61461039957600080fd5b8063313ce567146102a057806339509351146102bc57806342966c68146102dc57600080fd5b806318160ddd1161019557806318160ddd1461023957806323b872dd14610258578063256929621461027857806329e6b5861461028057600080fd5b806304c2754d146101bc57806306fdde03146101de578063095ea7b314610209575b600080fd5b3480156101c857600080fd5b506101dc6101d73660046121d2565b6105c4565b005b3480156101ea57600080fd5b506101f36106ec565b60405161020091906121eb565b60405180910390f35b34801561021557600080fd5b50610229610224366004612279565b61077e565b6040519015158152602001610200565b34801561024557600080fd5b506002545b604051908152602001610200565b34801561026457600080fd5b506102296102733660046122a5565b610795565b6101dc61087b565b34801561028c57600080fd5b506101dc61029b3660046122e6565b6108cb565b3480156102ac57600080fd5b5060405160128152602001610200565b3480156102c857600080fd5b506102296102d7366004612279565b610a2a565b3480156102e857600080fd5b506101dc6102f73660046121d2565b610a73565b34801561030857600080fd5b506005546103299073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610200565b6101dc610ab3565b34801561036257600080fd5b5061024a6103713660046122e6565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101dc610aef565b3480156103ad57600080fd5b506101dc6103bc3660046121d2565b610b03565b3480156103cd57600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754610329565b34801561040157600080fd5b506005546102299074010000000000000000000000000000000000000000900460ff1681565b34801561043357600080fd5b506101f3610cc5565b34801561044857600080fd5b50610229610457366004612279565b610cd4565b34801561046857600080fd5b50610229610477366004612279565b610dac565b34801561048857600080fd5b50610229610497366004612279565b610f6f565b3480156104a857600080fd5b50600554610229907501000000000000000000000000000000000000000000900460ff1681565b3480156104db57600080fd5b506101dc610f7c565b3480156104f057600080fd5b5061024a6104ff36600461230a565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101dc6105453660046122e6565b611114565b6101dc6105583660046122e6565b611151565b34801561056957600080fd5b506103297f000000000000000000000000c8b612fa3e2670c4355d510fa572dec1285f864081565b34801561059d57600080fd5b5061024a6105ac3660046122e6565b63389a75e1600c908152600091909152602090205490565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000321847122142b1ec20df45821464157a0d1cafe41614610668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f556e617574686f72697a6564000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6301312d0060075461067a91906123a1565b811180156106a757507f00000000000000000000000000000000000000000014adf4b7320334b900000081105b6106b057600080fd5b60098190556040518181527f9b974812a379eb5931633dc2560f78ae5fadaabeee527fcc2a22e8c9fbe40b74906020015b60405180910390a150565b6060600380546106fb906123b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610727906123b5565b80156107745780601f1061074957610100808354040283529160200191610774565b820191906000526020600020905b81548152906001019060200180831161075757829003601f168201915b5050505050905090565b600061078b338484611178565b5060015b92915050565b60006107a284848461132b565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000606482015260840161065f565b6108708533858403611178565b506001949350505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000321847122142b1ec20df45821464157a0d1cafe4161461096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015260640161065f565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556000908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560405173ffffffffffffffffffffffffffffffffffffffff821681527f9df2188765ac379366bdf3bf48f56bb4f96e2b5b7148371f88cf7149b7742cdd906020016106e1565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161078b918590610a6e908690612408565b611178565b610a7d3382611726565b60408051338152602081018390527f1af5163f80e79b5e554f61e1d052084d3a3fe1166e42a265798c4e2ddce8ffa291016106e1565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610af7611913565b610b016000611949565b565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000321847122142b1ec20df45821464157a0d1cafe41614610ba2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f556e617574686f72697a65640000000000000000000000000000000000000000604482015260640161065f565b306000908152602081905260409020548111158015610bc15750600081115b610c27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f57726f6e6720616d6f756e740000000000000000000000000000000000000000604482015260640161065f565b60085460ff16610c9057600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610c65816119af565b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550565b6040517fc958536a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b6060600480546106fb906123b5565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610d95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161065f565b610da23385858403611178565b5060019392505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c8b612fa3e2670c4355d510fa572dec1285f86401614610e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f756e617574686f72697a65640000000000000000000000000000000000000000604482015260640161065f565b6005547501000000000000000000000000000000000000000000900460ff1615610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6e6f206d6f7265206d696e74696e670000000000000000000000000000000000604482015260640161065f565b60075482610ee060025490565b610eea9190612408565b1115610f52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f6578636565647320737570706c79000000000000000000000000000000000000604482015260640161065f565b610f5c8383611bf6565b6007546002540361078b5761078b611d17565b600061078b33848461132b565b610f84611913565b60055474010000000000000000000000000000000000000000900460ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f416c726561647920626567756e00000000000000000000000000000000000000604482015260640161065f565b600580547fffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff167601000000000000000000000000000000000000000000004267ffffffffffffffff9081168202929092179283905561106f92610384929190041661241b565b6006805467ffffffffffffffff929092167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909216919091179055600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f19eb523ff0a66e6c369d2a0c1e54c8b7d856b16ff8029f75280cf9f65bfc02cd90600090a1565b61111c611913565b63389a75e1600c52806000526020600c20805442111561114457636f5e88186000526004601cfd5b60009055610cc281611949565b611159611913565b8060601b61116f57637448fbae6000526004601cfd5b610cc281611949565b73ffffffffffffffffffffffffffffffffffffffff831661121a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff82166112bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b806000036113445761133f83836000611d82565b505050565b60055474010000000000000000000000000000000000000000900460ff16156115ca5773ffffffffffffffffffffffffffffffffffffffff82166000908152600a6020908152604080832054600b9092529091205460ff91821691168115801561140357506103e86113b560025490565b6113c0906019612443565b6113ca91906123a1565b836113f78673ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6114019190612408565b115b1561143a576040517f424d6cc700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3060009081526020819052604090205460095481108015908190611461575060085460ff16155b801561146a5750825b1561150f57436000908152600c60205260409020546003111561150f57600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556114bb82612036565b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055436000908152600c60205260409020546114fe906001612408565b436000908152600c60205260409020555b828015611542575073ffffffffffffffffffffffffffffffffffffffff87166000908152600a602052604090205460ff16155b8061157b575073ffffffffffffffffffffffffffffffffffffffff87166000908152600b602052604090205460ff16801561157b575083155b156115b657600061158c8685612096565b9050611599883083611d82565b6115a3818761245a565b95506115b0888888611d82565b506115c1565b6115c1878787611d82565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316158061163857507f000000000000000000000000c8b612fa3e2670c4355d510fa572dec1285f864073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061168e57507f000000000000000000000000c8b612fa3e2670c4355d510fa572dec1285f864073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116e457507f000000000000000000000000000000000000000000000000000000000000dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156116f45761133f838383611d82565b6040517f16d684f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166117c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906118bb90849061245a565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610b01576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106119e4576119e461246d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aad919061249c565b81600181518110611ac057611ac061246d565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611b25307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611178565b6040517f791ac94700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611bc090859060009086907f000000000000000000000000321847122142b1ec20df45821464157a0d1cafe49042906004016124b9565b600060405180830381600087803b158015611bda57600080fd5b505af1158015611bee573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611c73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065f565b8060026000828254611c859190612408565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290611cbf908490612408565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600580547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556040517f7be9badbf9fba52cc4d59989c81f80d9dd24cef9b8e9ef16c469274ae3809a8790600090a1565b73ffffffffffffffffffffffffffffffffffffffff8316611e25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff8216611ec8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015611f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065f565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290611fc2908490612408565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161202891815260200190565b60405180910390a350505050565b806000036120415750565b7f00000000000000000000000000000000000000000014adf4b7320334b900000081111561208c57507f00000000000000000000000000000000000000000014adf4b7320334b90000005b80611d13816119af565b60065460009067ffffffffffffffff908116904290839082168311156121b0576005546000906120ea90760100000000000000000000000000000000000000000000900467ffffffffffffffff1685612544565b6120f48486612544565b6120ff906064612565565b6121099190612591565b67ffffffffffffffff1690506042811061213b57606461212a88601e612443565b61213491906123a1565b91506121a5565b60428110801561214b5750602181115b1561217057851561216357606461212a886014612443565b606461212a88600a612443565b602181116121a557851561218b57606461212a88600a612443565b6064612198886005612443565b6121a291906123a1565b91505b50925061078f915050565b60646121bd876005612443565b6121c791906123a1565b935061078f92505050565b6000602082840312156121e457600080fd5b5035919050565b600060208083528351808285015260005b81811015612218578581018301518582016040015282016121fc565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610cc257600080fd5b6000806040838503121561228c57600080fd5b823561229781612257565b946020939093013593505050565b6000806000606084860312156122ba57600080fd5b83356122c581612257565b925060208401356122d581612257565b929592945050506040919091013590565b6000602082840312156122f857600080fd5b813561230381612257565b9392505050565b6000806040838503121561231d57600080fd5b823561232881612257565b9150602083013561233881612257565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000826123b0576123b0612343565b500490565b600181811c908216806123c957607f821691505b602082108103612402577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561078f5761078f612372565b67ffffffffffffffff81811683821601908082111561243c5761243c612372565b5092915050565b808202811582820484141761078f5761078f612372565b8181038181111561078f5761078f612372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156124ae57600080fd5b815161230381612257565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561251657845173ffffffffffffffffffffffffffffffffffffffff16835293830193918301916001016124e4565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b67ffffffffffffffff82811682821603908082111561243c5761243c612372565b67ffffffffffffffff81811683821602808216919082811461258957612589612372565b505092915050565b600067ffffffffffffffff808416806125ac576125ac612343565b9216919091049291505056fea264697066735822122083762292e5bbbb22085b4757a4cafbdf4be034af262aa316e72d42a948cda45264736f6c63430008140033

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

000000000000000000000000c8b612fa3e2670c4355d510fa572dec1285f86400000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000000000000000000000000034000000000000000000000000321847122142b1ec20df45821464157a0d1cafe4

-----Decoded View---------------
Arg [0] : _presale (address): 0xc8b612fa3E2670c4355d510Fa572dEc1285f8640
Arg [1] : _totalSup (uint256): 1000000000000000000000000000
Arg [2] : _lpAllo (uint8): 52
Arg [3] : _team (address): 0x321847122142b1eC20Df45821464157A0d1cAfE4

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000c8b612fa3e2670c4355d510fa572dec1285f8640
Arg [1] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000034
Arg [3] : 000000000000000000000000321847122142b1ec20df45821464157a0d1cafe4


Deployed Bytecode Sourcemap

20460:7967:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22964:288;;;;;;;;;;-1:-1:-1;22964:288:0;;;;;:::i;:::-;;:::i;:::-;;3213:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4125:167;;;;;;;;;;-1:-1:-1;4125:167:0;;;;;:::i;:::-;;:::i;:::-;;;1455:14:1;;1448:22;1430:41;;1418:2;1403:18;4125:167:0;1290:187:1;3534:108:0;;;;;;;;;;-1:-1:-1;3622:12:0;;3534:108;;;1628:25:1;;;1616:2;1601:18;3534:108:0;1482:177:1;4300:454:0;;;;;;;;;;-1:-1:-1;4300:454:0;;;;;:::i;:::-;;:::i;16841:630::-;;;:::i;22646:226::-;;;;;;;;;;-1:-1:-1;22646:226:0;;;;;:::i;:::-;;:::i;3433:93::-;;;;;;;;;;-1:-1:-1;3433:93:0;;3516:2;2519:36:1;;2507:2;2492:18;3433:93:0;2377:184:1;4762:211:0;;;;;;;;;;-1:-1:-1;4762:211:0;;;;;:::i;:::-;;:::i;24178:127::-;;;;;;;;;;-1:-1:-1;24178:127:0;;;;;:::i;:::-;;:::i;20781:22::-;;;;;;;;;;-1:-1:-1;20781:22:0;;;;;;;;;;;2742:42:1;2730:55;;;2712:74;;2700:2;2685:18;20781:22:0;2566:226:1;17556:466:0;;;:::i;3650:127::-;;;;;;;;;;-1:-1:-1;3650:127:0;;;;;:::i;:::-;3751:18;;3724:7;3751:18;;;;;;;;;;;;3650:127;16576:102;;;:::i;23260:392::-;;;;;;;;;;-1:-1:-1;23260:392:0;;;;;:::i;:::-;;:::i;19281:187::-;;;;;;;;;;-1:-1:-1;19438:11:0;19432:18;19281:187;;20810:16;;;;;;;;;;-1:-1:-1;20810:16:0;;;;;;;;;;;3321:104;;;;;;;;;;;;;:::i;4981:409::-;;;;;;;;;;-1:-1:-1;4981:409:0;;;;;:::i;:::-;;:::i;23792:378::-;;;;;;;;;;-1:-1:-1;23792:378:0;;;;;:::i;:::-;;:::i;3785:173::-;;;;;;;;;;-1:-1:-1;3785:173:0;;;;;:::i;:::-;;:::i;20833:15::-;;;;;;;;;;-1:-1:-1;20833:15:0;;;;;;;;;;;22403:235;;;;;;;;;;;;;:::i;3966:151::-;;;;;;;;;;-1:-1:-1;3966:151:0;;;;;:::i;:::-;4082:18;;;;4055:7;4082:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3966:151;18213:724;;;;;;:::i;:::-;;:::i;16150:358::-;;;;;;:::i;:::-;;:::i;20742:32::-;;;;;;;;;;;;;;;19574:449;;;;;;;;;;-1:-1:-1;19574:449:0;;;;;:::i;:::-;19853:19;19847:4;19840:33;;;19697:14;19887:26;;;;19999:4;19983:21;;19977:28;;19574:449;22964:288;23035:10;:29;23049:15;23035:29;;23027:54;;;;;;;3392:2:1;23027:54:0;;;3374:21:1;3431:2;3411:18;;;3404:30;3470:14;3450:18;;;3443:42;3502:18;;23027:54:0;;;;;;;;;23115:8;23109:3;;:14;;;;:::i;:::-;23100:6;:23;:43;;;;;23136:7;23127:6;:16;23100:43;23092:52;;;;;;23173:18;:27;;;23216:28;;1628:25:1;;;23216:28:0;;1616:2:1;1601:18;23216:28:0;;;;;;;;22964:288;:::o;3213:100::-;3267:13;3300:5;3293:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3213:100;:::o;4125:167::-;4208:4;4225:37;4234:10;4246:7;4255:6;4225:8;:37::i;:::-;-1:-1:-1;4280:4:0;4125:167;;;;;:::o;4300:454::-;4406:4;4423:36;4433:6;4441:9;4452:6;4423:9;:36::i;:::-;4499:19;;;4472:24;4499:19;;;:11;:19;;;;;;;;4519:10;4499:31;;;;;;;;4549:26;;;;4541:79;;;;;;;4678:2:1;4541:79:0;;;4660:21:1;4717:2;4697:18;;;4690:30;4756:34;4736:18;;;4729:62;4827:10;4807:18;;;4800:38;4855:19;;4541:79:0;4476:404:1;4541:79:0;4656:55;4665:6;4673:10;4704:6;4685:16;:25;4656:8;:55::i;:::-;-1:-1:-1;4742:4:0;;4300:454;-1:-1:-1;;;;4300:454:0:o;16841:630::-;16936:15;15766:9;16954:46;;:15;:46;16936:64;;17172:19;17166:4;17159:33;17223:8;17217:4;17210:22;17280:7;17273:4;17267;17257:21;17250:38;17429:8;17382:45;17379:1;17376;17371:67;17072:381;16841:630::o;22646:226::-;22714:10;:29;22728:15;22714:29;;22706:54;;;;;;;3392:2:1;22706:54:0;;;3374:21:1;3431:2;3411:18;;;3404:30;3470:14;3450:18;;;3443:42;3502:18;;22706:54:0;3190:336:1;22706:54:0;22771:7;:18;;;;;;;;;;;;;-1:-1:-1;25389:15:0;;;:10;:15;;;;;:21;;;;-1:-1:-1;25389:21:0;;;22838:26;;2742:42:1;2730:55;;2712:74;;22838:26:0;;2700:2:1;2685:18;22838:26:0;2566:226:1;4762:211:0;4876:10;4850:4;4897:23;;;:11;:23;;;;;;;;;:32;;;;;;;;;;4850:4;;4867:76;;4888:7;;4897:45;;4932:10;;4897:45;:::i;:::-;4867:8;:76::i;24178:127::-;24227:24;24233:10;24245:5;24227;:24::i;:::-;24267:30;;;24279:10;5189:74:1;;5294:2;5279:18;;5272:34;;;24267:30:0;;5162:18:1;24267:30:0;5015:297:1;17556:466:0;17762:19;17756:4;17749:33;17809:8;17803:4;17796:22;17862:1;17855:4;17849;17839:21;17832:32;17995:8;17949:44;17946:1;17943;17938:66;17556:466::o;16576:102::-;20420:13;:11;:13::i;:::-;16649:21:::1;16667:1;16649:9;:21::i;:::-;16576:102::o:0;23260:392::-;23324:10;:29;23338:15;23324:29;;23316:54;;;;;;;3392:2:1;23316:54:0;;;3374:21:1;3431:2;3411:18;;;3404:30;3470:14;3450:18;;;3443:42;3502:18;;23316:54:0;3190:336:1;23316:54:0;23417:4;3724:7;3751:18;;;;;;;;;;;23389:6;:34;;:48;;;;;23436:1;23427:6;:10;23389:48;23381:73;;;;;;;5519:2:1;23381:73:0;;;5501:21:1;5558:2;5538:18;;;5531:30;5597:14;5577:18;;;5570:42;5629:18;;23381:73:0;5317:336:1;23381:73:0;23469:8;;;;23465:180;;23493:8;:15;;;;23504:4;23493:15;;;23523:24;23540:6;23523:16;:24::i;:::-;23562:8;:16;;;;;;23260:392;:::o;23465:180::-;23616:17;;;;;;;;;;;;;;23465:180;23260:392;:::o;3321:104::-;3377:13;3410:7;3403:14;;;;;:::i;4981:409::-;5130:10;5074:4;5118:23;;;:11;:23;;;;;;;;;:32;;;;;;;;;;5169:35;;;;5161:85;;;;;;;5860:2:1;5161:85:0;;;5842:21:1;5899:2;5879:18;;;5872:30;5938:34;5918:18;;;5911:62;6009:7;5989:18;;;5982:35;6034:19;;5161:85:0;5658:401:1;5161:85:0;5282:65;5291:10;5303:7;5331:15;5312:16;:34;5282:8;:65::i;:::-;-1:-1:-1;5378:4:0;;4981:409;-1:-1:-1;;;4981:409:0:o;23792:378::-;23861:4;23885:10;:21;23899:7;23885:21;;23877:46;;;;;;;6266:2:1;23877:46:0;;;6248:21:1;6305:2;6285:18;;;6278:30;6344:14;6324:18;;;6317:42;6376:18;;23877:46:0;6064:336:1;23877:46:0;23942:3;;;;;;;:12;23934:40;;;;;;;6607:2:1;23934:40:0;;;6589:21:1;6646:2;6626:18;;;6619:30;6685:17;6665:18;;;6658:45;6720:18;;23934:40:0;6405:339:1;23934:40:0;24018:3;;24009:5;23993:13;3622:12;;;3534:108;23993:13;:21;;;;:::i;:::-;:28;;23985:55;;;;;;;6951:2:1;23985:55:0;;;6933:21:1;6990:2;6970:18;;;6963:30;7029:16;7009:18;;;7002:44;7063:18;;23985:55:0;6749:338:1;23985:55:0;24051:18;24057:5;24063;24051;:18::i;:::-;24100:3;;3622:12;;24083:20;24080:61;;24119:10;:8;:10::i;3785:173::-;3871:4;3888:40;3898:10;3910:9;3921:6;3888:9;:40::i;22403:235::-;20420:13;:11;:13::i;:::-;22466:4:::1;::::0;;;::::1;;;22465:5;22457:31;;;::::0;::::1;::::0;;7294:2:1;22457:31:0::1;::::0;::::1;7276:21:1::0;7333:2;7313:18;;;7306:30;7372:15;7352:18;;;7345:43;7405:18;;22457:31:0::1;7092:337:1::0;22457:31:0::1;22499:5;:31:::0;;;::::1;::::0;22514:15:::1;22499:31;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;22551:26:::1;::::0;22566:10:::1;::::0;22551:5;;::::1;;:26;:::i;:::-;22541:7;:36:::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;22588:4:::1;:11:::0;;;::::1;::::0;::::1;::::0;;22615:15:::1;::::0;::::1;::::0;22541:7:::1;::::0;22615:15:::1;22403:235::o:0;18213:724::-;20420:13;:11;:13::i;:::-;18451:19:::1;18445:4;18438:33;18498:12;18492:4;18485:26;18561:4;18555;18545:21;18669:12;18663:19;18650:11;18647:36;18644:160;;;18716:10;18710:4;18703:24;18784:4;18778;18771:18;18644:160;18883:1;18862:23:::0;;18906::::1;18916:12:::0;18906:9:::1;:23::i;16150:358::-:0;20420:13;:11;:13::i;:::-;16325:8:::1;16321:2;16317:17;16307:153;;16368:10;16362:4;16355:24;16440:4;16434;16427:18;16307:153;16481:19;16491:8;16481:9;:19::i;7111:346::-:0;7213:19;;;7205:68;;;;;;;7821:2:1;7205:68:0;;;7803:21:1;7860:2;7840:18;;;7833:30;7899:34;7879:18;;;7872:62;7970:6;7950:18;;;7943:34;7994:19;;7205:68:0;7619:400:1;7205:68:0;7292:21;;;7284:68;;;;;;;8226:2:1;7284:68:0;;;8208:21:1;8265:2;8245:18;;;8238:30;8304:34;8284:18;;;8277:62;8375:4;8355:18;;;8348:32;8397:19;;7284:68:0;8024:398:1;7284:68:0;7365:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7417:32;;1628:25:1;;;7417:32:0;;1601:18:1;7417:32:0;;;;;;;7111:346;;;:::o;26714:1710::-;26808:6;26818:1;26808:11;26804:93;;26836:28;26852:4;26858:2;26862:1;26836:15;:28::i;:::-;26714:1710;;;:::o;26804:93::-;26920:4;;;;;;;26917:1483;;;26958:14;;;26940:15;26958:14;;;:10;:14;;;;;;;;;27001:6;:10;;;;;;;26958:14;;;;;27001:10;27089:11;;:66;;;;;27151:4;27130:13;3622:12;;;3534:108;27130:13;:18;;27146:2;27130:18;:::i;:::-;:25;;;;:::i;:::-;27120:6;27104:13;27114:2;3751:18;;3724:7;3751:18;;;;;;;;;;;;3650:127;27104:13;:22;;;;:::i;:::-;:51;27089:66;27086:131;;;27182:19;;;;;;;;;;;;;;27086:131;27282:4;27233:28;3751:18;;;;;;;;;;;27342;;27318:42;;;;;;;27397:20;;-1:-1:-1;27409:8:0;;;;27408:9;27397:20;:30;;;;;27421:6;27397:30;27375:398;;;27511:12;27500:24;;;;:10;:24;;;;;;27527:1;-1:-1:-1;27496:262:0;;;27553:8;:15;;;;27564:4;27553:15;;;27591:30;27600:20;27591:8;:30::i;:::-;27644:8;:16;;;;;;27721:12;27655:5;27710:24;;;:10;:24;;;;;;:28;;27644:16;27710:28;:::i;:::-;27694:12;27683:24;;;;:10;:24;;;;;:55;27496:262;27793:6;:27;;;;-1:-1:-1;27804:16:0;;;;;;;:10;:16;;;;;;;;27803:17;27793:27;27792:62;;;-1:-1:-1;27826:12:0;;;;;;;:6;:12;;;;;;;;:27;;;;;27843:10;27842:11;27826:27;27789:360;;;27874:11;27888:29;27902:6;27910;27888:13;:29::i;:::-;27874:43;;27936:41;27952:4;27966;27973:3;27936:15;:41::i;:::-;27996:13;28006:3;27996:13;;:::i;:::-;;;28028:33;28044:4;28050:2;28054:6;28028:15;:33::i;:::-;27855:222;27789:360;;;28100:33;28116:4;28122:2;28126:6;28100:15;:33::i;:::-;26925:1235;;;;26714:1710;;;:::o;26917:1483::-;28182:18;;;;;:37;;;28212:7;28204:15;;:4;:15;;;28182:37;:54;;;;28229:7;28223:13;;:2;:13;;;28182:54;:75;;;;28246:11;28240:17;;:2;:17;;;28182:75;28179:210;;;28278:33;28294:4;28300:2;28304:6;28278:15;:33::i;28179:210::-;28357:16;;;;;;;;;;;;;;6512:591;6596:21;;;6588:67;;;;;;;8935:2:1;6588:67:0;;;8917:21:1;8974:2;8954:18;;;8947:30;9013:34;8993:18;;;8986:62;9084:3;9064:18;;;9057:31;9105:19;;6588:67:0;8733:397:1;6588:67:0;6755:18;;;6730:22;6755:18;;;;;;;;;;;6792:24;;;;6784:71;;;;;;;9337:2:1;6784:71:0;;;9319:21:1;9376:2;9356:18;;;9349:30;9415:34;9395:18;;;9388:62;9486:4;9466:18;;;9459:32;9508:19;;6784:71:0;9135:398:1;6784:71:0;6891:18;;;:9;:18;;;;;;;;;;6912:23;;;6891:44;;6957:12;:22;;6929:6;;6891:9;6957:22;;6929:6;;6957:22;:::i;:::-;;;;-1:-1:-1;;6997:37:0;;1628:25:1;;;7023:1:0;;6997:37;;;;;;1616:2:1;1601:18;6997:37:0;;;;;;;26714:1710;;;:::o;15071:364::-;15287:11;15281:18;15271:8;15268:32;15258:159;;15334:10;15328:4;15321:24;15397:4;15391;15384:18;13897:1113;14624:11;14864:16;;14710:26;;;;;;;14824:38;14821:1;;14813:78;14950:27;13897:1113::o;24644:591::-;24794:16;;;24808:1;24794:16;;;;;;;;24770:21;;24794:16;;;;;;;;;;-1:-1:-1;24794:16:0;24770:40;;24839:4;24821;24826:1;24821:7;;;;;;;;:::i;:::-;;;;;;:23;;;;;;;;;;;24865:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24855:4;24860:1;24855:7;;;;;;;;:::i;:::-;;;;;;:32;;;;;;;;;;;24900:62;24917:4;24932:15;24950:11;24900:8;:62::i;:::-;25001:226;;;;;:66;:15;:66;;;;:226;;25082:11;;25108:1;;25152:4;;25171:15;;25201;;25001:226;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24699:536;24644:591;:::o;6105:399::-;6189:21;;;6181:65;;;;;;;11405:2:1;6181:65:0;;;11387:21:1;11444:2;11424:18;;;11417:30;11483:33;11463:18;;;11456:61;11534:18;;6181:65:0;11203:355:1;6181:65:0;6337:6;6321:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;6354:18:0;;;:9;:18;;;;;;;;;;:28;;6376:6;;6354:9;:28;;6376:6;;6354:28;:::i;:::-;;;;-1:-1:-1;;6398:37:0;;1628:25:1;;;6398:37:0;;;;6415:1;;6398:37;;1616:2:1;1601:18;6398:37:0;;;;;;;6448:48;6105:399;;:::o;25426:94::-;25466:3;:10;;;;;;;;25492:20;;;;25466:10;;25492:20;25426:94::o;5398:699::-;5504:20;;;5496:70;;;;;;;11765:2:1;5496:70:0;;;11747:21:1;11804:2;11784:18;;;11777:30;11843:34;11823:18;;;11816:62;11914:7;11894:18;;;11887:35;11939:19;;5496:70:0;11563:401:1;5496:70:0;5585:23;;;5577:71;;;;;;;12171:2:1;5577:71:0;;;12153:21:1;12210:2;12190:18;;;12183:30;12249:34;12229:18;;;12222:62;12320:5;12300:18;;;12293:33;12343:19;;5577:71:0;11969:399:1;5577:71:0;5745:17;;;5721:21;5745:17;;;;;;;;;;;5781:23;;;;5773:74;;;;;;;12575:2:1;5773:74:0;;;12557:21:1;12614:2;12594:18;;;12587:30;12653:34;12633:18;;;12626:62;12724:8;12704:18;;;12697:36;12750:19;;5773:74:0;12373:402:1;5773:74:0;5883:17;;;;:9;:17;;;;;;;;;;;5903:22;;;5883:42;;5947:20;;;;;;;;:30;;5919:6;;5883:9;5947:30;;5919:6;;5947:30;:::i;:::-;;;;;;;;6012:9;5995:35;;6004:6;5995:35;;;6023:6;5995:35;;;;1628:25:1;;1616:2;1601:18;;1482:177;5995:35:0;;;;;;;;5485:612;5398:699;;;:::o;24313:323::-;24379:15;24398:1;24379:20;24375:59;;24313:323;:::o;24375:59::-;24466:7;24448:15;:25;24444:83;;;-1:-1:-1;24508:7:0;24444:83;24566:15;24592:36;24566:15;24592:16;:36::i;25528:960::-;25636:7;;25603;;25636;;;;;25675:15;;25603:7;;25731:10;;;-1:-1:-1;25728:753:0;;;25806:5;;25757:15;;25800:11;;25806:5;;;;;25800:3;:11;:::i;:::-;25778:10;25784:4;25778:3;:10;:::i;:::-;25777:18;;25792:3;25777:18;:::i;:::-;25776:36;;;;:::i;:::-;25757:56;;;;25879:2;25868:7;:13;25865:500;;25921:3;25907:11;:6;25916:2;25907:11;:::i;:::-;:17;;;;:::i;:::-;25901:23;;25865:500;;;25960:2;25950:7;:12;:28;;;;;25976:2;25966:7;:12;25950:28;25946:419;;;26001:6;25998:147;;;26051:3;26037:11;:6;26046:2;26037:11;:::i;25998:147::-;26122:3;26108:11;:6;26117:2;26108:11;:::i;25946:419::-;26181:2;26170:7;:13;26166:199;;26207:6;26204:146;;;26257:3;26243:11;:6;26252:2;26243:11;:::i;26204:146::-;26327:3;26314:10;:6;26323:1;26314:10;:::i;:::-;:16;;;;:::i;:::-;26308:22;;26204:146;-1:-1:-1;26386:3:0;-1:-1:-1;26379:10:0;;-1:-1:-1;;26379:10:0;25728:753;26441:3;26428:10;:6;26437:1;26428:10;:::i;:::-;:16;;;;:::i;:::-;26422:22;-1:-1:-1;26459:10:0;;-1:-1:-1;;;26459:10:0;14:180:1;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:607::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;797:2;727:66;722:2;714:6;710:15;706:88;695:9;691:104;687:113;679:121;;;;199:607;;;;:::o;811:154::-;897:42;890:5;886:54;879:5;876:65;866:93;;955:1;952;945:12;970:315;1038:6;1046;1099:2;1087:9;1078:7;1074:23;1070:32;1067:52;;;1115:1;1112;1105:12;1067:52;1154:9;1141:23;1173:31;1198:5;1173:31;:::i;:::-;1223:5;1275:2;1260:18;;;;1247:32;;-1:-1:-1;;;970:315:1:o;1664:456::-;1741:6;1749;1757;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;1865:9;1852:23;1884:31;1909:5;1884:31;:::i;:::-;1934:5;-1:-1:-1;1991:2:1;1976:18;;1963:32;2004:33;1963:32;2004:33;:::i;:::-;1664:456;;2056:7;;-1:-1:-1;;;2110:2:1;2095:18;;;;2082:32;;1664:456::o;2125:247::-;2184:6;2237:2;2225:9;2216:7;2212:23;2208:32;2205:52;;;2253:1;2250;2243:12;2205:52;2292:9;2279:23;2311:31;2336:5;2311:31;:::i;:::-;2361:5;2125:247;-1:-1:-1;;;2125:247:1:o;2797:388::-;2865:6;2873;2926:2;2914:9;2905:7;2901:23;2897:32;2894:52;;;2942:1;2939;2932:12;2894:52;2981:9;2968:23;3000:31;3025:5;3000:31;:::i;:::-;3050:5;-1:-1:-1;3107:2:1;3092:18;;3079:32;3120:33;3079:32;3120:33;:::i;:::-;3172:7;3162:17;;;2797:388;;;;;:::o;3531:184::-;3583:77;3580:1;3573:88;3680:4;3677:1;3670:15;3704:4;3701:1;3694:15;3720:184;3772:77;3769:1;3762:88;3869:4;3866:1;3859:15;3893:4;3890:1;3883:15;3909:120;3949:1;3975;3965:35;;3980:18;;:::i;:::-;-1:-1:-1;4014:9:1;;3909:120::o;4034:437::-;4113:1;4109:12;;;;4156;;;4177:61;;4231:4;4223:6;4219:17;4209:27;;4177:61;4284:2;4276:6;4273:14;4253:18;4250:38;4247:218;;4321:77;4318:1;4311:88;4422:4;4419:1;4412:15;4450:4;4447:1;4440:15;4247:218;;4034:437;;;:::o;4885:125::-;4950:9;;;4971:10;;;4968:36;;;4984:18;;:::i;7434:180::-;7501:18;7539:10;;;7551;;;7535:27;;7574:11;;;7571:37;;;7588:18;;:::i;:::-;7571:37;7434:180;;;;:::o;8427:168::-;8500:9;;;8531;;8548:15;;;8542:22;;8528:37;8518:71;;8569:18;;:::i;8600:128::-;8667:9;;;8688:11;;;8685:37;;;8702:18;;:::i;9727:184::-;9779:77;9776:1;9769:88;9876:4;9873:1;9866:15;9900:4;9897:1;9890:15;9916:251;9986:6;10039:2;10027:9;10018:7;10014:23;10010:32;10007:52;;;10055:1;10052;10045:12;10007:52;10087:9;10081:16;10106:31;10131:5;10106:31;:::i;10172:1026::-;10434:4;10482:3;10471:9;10467:19;10513:6;10502:9;10495:25;10539:2;10577:6;10572:2;10561:9;10557:18;10550:34;10620:3;10615:2;10604:9;10600:18;10593:31;10644:6;10679;10673:13;10710:6;10702;10695:22;10748:3;10737:9;10733:19;10726:26;;10787:2;10779:6;10775:15;10761:29;;10808:1;10818:218;10832:6;10829:1;10826:13;10818:218;;;10897:13;;10912:42;10893:62;10881:75;;11011:15;;;;10976:12;;;;10854:1;10847:9;10818:218;;;-1:-1:-1;;11104:42:1;11092:55;;;;11087:2;11072:18;;11065:83;-1:-1:-1;;;11179:3:1;11164:19;11157:35;11053:3;10172:1026;-1:-1:-1;;;10172:1026:1:o;12780:183::-;12848:18;12899:10;;;12887;;;12883:27;;12922:12;;;12919:38;;;12937:18;;:::i;12968:257::-;13039:18;13089:10;;;13101;;;13085:27;13132:20;;;;13039:18;13171:24;;;13161:58;;13199:18;;:::i;:::-;13161:58;;12968:257;;;;:::o;13230:199::-;13269:1;13295:18;13340:2;13337:1;13333:10;13362:3;13352:37;;13369:18;;:::i;:::-;13407:10;;13403:20;;;;;13230:199;-1:-1:-1;;13230:199:1:o

Swarm Source

ipfs://83762292e5bbbb22085b4757a4cafbdf4be034af262aa316e72d42a948cda452

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.