ETH Price: $1,989.64 (-3.84%)

Contract

0xBD7e92Cf6F857be8541FCa6abfB72aeF8e16c307
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Prodigy Bot (PRO) ($0.3598)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve246787032026-03-17 17:28:599 days ago1773768539IN
Prodigy Bot: PRO Token
0 ETH0.000095682.0725222
Transfer246389772026-03-12 4:24:2315 days ago1773289463IN
Prodigy Bot: PRO Token
0 ETH0.00000190.03425966
Transfer246361622026-03-11 18:57:4715 days ago1773255467IN
Prodigy Bot: PRO Token
0 ETH0.000118032.12548652
Approve245950022026-03-06 0:59:3521 days ago1772758775IN
Prodigy Bot: PRO Token
0 ETH0.000006270.13521938
Approve245358242026-02-25 18:49:4729 days ago1772045387IN
Prodigy Bot: PRO Token
0 ETH0.000145723.13843733
Approve245130472026-02-22 14:36:2333 days ago1771770983IN
Prodigy Bot: PRO Token
0 ETH0.000094872.04587973
Approve245125622026-02-22 12:58:5933 days ago1771765139IN
Prodigy Bot: PRO Token
0 ETH0.000094622.04058961
Approve245110432026-02-22 7:53:5933 days ago1771746839IN
Prodigy Bot: PRO Token
0 ETH0.000001740.0722461
Approve244198902026-02-09 14:45:2346 days ago1770648323IN
Prodigy Bot: PRO Token
0 ETH0.000013560.2921909
Approve244114732026-02-08 10:28:3547 days ago1770546515IN
Prodigy Bot: PRO Token
0 ETH0.000095652.06287562
Approve244114732026-02-08 10:28:3547 days ago1770546515IN
Prodigy Bot: PRO Token
0 ETH0.000095182.06287562
Transfer244114252026-02-08 10:18:4747 days ago1770545927IN
Prodigy Bot: PRO Token
0 ETH0.000123392.04526303
Approve242883562026-01-22 5:52:1164 days ago1769061131IN
Prodigy Bot: PRO Token
0 ETH0.000001810.03918975
Approve242655762026-01-19 1:37:1167 days ago1768786631IN
Prodigy Bot: PRO Token
0 ETH0.000007270.15664455
Approve242275492026-01-13 18:24:3572 days ago1768328675IN
Prodigy Bot: PRO Token
0 ETH0.000005390.11698079
Approve240621792025-12-21 16:28:2395 days ago1766334503IN
Prodigy Bot: PRO Token
0 ETH0.000001680.03644929
Approve240554732025-12-20 18:01:4796 days ago1766253707IN
Prodigy Bot: PRO Token
0 ETH0.000003470.07488291
Approve240343492025-12-17 19:14:1199 days ago1765998851IN
Prodigy Bot: PRO Token
0 ETH0.0001062.28312308
Approve239958512025-12-12 10:07:23105 days ago1765534043IN
Prodigy Bot: PRO Token
0 ETH0.0000552.09790588
Approve239905702025-12-11 16:15:47105 days ago1765469747IN
Prodigy Bot: PRO Token
0 ETH0.00000580.12585302
Transfer239880332025-12-11 7:45:11106 days ago1765439111IN
Prodigy Bot: PRO Token
0 ETH0.000081712.12540825
Transfer239880182025-12-11 7:42:11106 days ago1765438931IN
Prodigy Bot: PRO Token
0 ETH0.000127752.11794615
Approve239427792025-12-04 23:00:47112 days ago1764889247IN
Prodigy Bot: PRO Token
0 ETH0.000010420.22596671
Approve239427742025-12-04 22:59:47112 days ago1764889187IN
Prodigy Bot: PRO Token
0 ETH0.000005660.12269872
Approve239287402025-12-02 22:25:11114 days ago1764714311IN
Prodigy Bot: PRO Token
0 ETH0.000016940.36530773
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer246787032026-03-17 17:28:599 days ago1773768539
Prodigy Bot: PRO Token
0.00332044 ETH
Transfer246787032026-03-17 17:28:599 days ago1773768539
Prodigy Bot: PRO Token
0.00332044 ETH
Transfer245720142026-03-02 20:01:2324 days ago1772481683
Prodigy Bot: PRO Token
0.00332478 ETH
Transfer245720142026-03-02 20:01:2324 days ago1772481683
Prodigy Bot: PRO Token
0.00332478 ETH
Transfer245130492026-02-22 14:36:4733 days ago1771771007
Prodigy Bot: PRO Token
0.00344945 ETH
Transfer245130492026-02-22 14:36:4733 days ago1771771007
Prodigy Bot: PRO Token
0.00344945 ETH
Transfer245125642026-02-22 12:59:2333 days ago1771765163
Prodigy Bot: PRO Token
0.00350809 ETH
Transfer245125642026-02-22 12:59:2333 days ago1771765163
Prodigy Bot: PRO Token
0.00350809 ETH
Transfer244198902026-02-09 14:45:2346 days ago1770648323
Prodigy Bot: PRO Token
0.00351174 ETH
Transfer244198902026-02-09 14:45:2346 days ago1770648323
Prodigy Bot: PRO Token
0.00351174 ETH
Transfer244114732026-02-08 10:28:3547 days ago1770546515
Prodigy Bot: PRO Token
0.00357058 ETH
Transfer244114732026-02-08 10:28:3547 days ago1770546515
Prodigy Bot: PRO Token
0.00357058 ETH
Transfer242883712026-01-22 5:55:1164 days ago1769061311
Prodigy Bot: PRO Token
0.00362157 ETH
Transfer242883712026-01-22 5:55:1164 days ago1769061311
Prodigy Bot: PRO Token
0.00362157 ETH
Transfer242655762026-01-19 1:37:1167 days ago1768786631
Prodigy Bot: PRO Token
0.00362716 ETH
Transfer242655762026-01-19 1:37:1167 days ago1768786631
Prodigy Bot: PRO Token
0.00362716 ETH
Transfer242275832026-01-13 18:31:2372 days ago1768329083
Prodigy Bot: PRO Token
0.00368036 ETH
Transfer242275832026-01-13 18:31:2372 days ago1768329083
Prodigy Bot: PRO Token
0.00368036 ETH
Transfer240554822025-12-20 18:03:3596 days ago1766253815
Prodigy Bot: PRO Token
0.00379067 ETH
Transfer240554822025-12-20 18:03:3596 days ago1766253815
Prodigy Bot: PRO Token
0.00379067 ETH
Transfer240343712025-12-17 19:18:3599 days ago1765999115
Prodigy Bot: PRO Token
0.00384542 ETH
Transfer240343712025-12-17 19:18:3599 days ago1765999115
Prodigy Bot: PRO Token
0.00384542 ETH
Transfer239969202025-12-12 13:44:23105 days ago1765547063
Prodigy Bot: PRO Token
0.00413013 ETH
Transfer239969202025-12-12 13:44:23105 days ago1765547063
Prodigy Bot: PRO Token
0.00413013 ETH
Transfer239427812025-12-04 23:01:11112 days ago1764889271
Prodigy Bot: PRO Token
0.00406306 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ProdigyBot

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-07-31
*/

/**
 * This is the utility token for the Prodigy Bot, a Telegram multichain trading tool suite.
 *
 * https://prodigybot.io/
 * https://t.me/ProdigySniper/
 * https://t.me/ProdigySniperBot/
 *
 * $$$$$$$\                            $$\ $$\                     $$\                  $$\     
 * $$  __$$\                           $$ |\__|                    $$ |                 $$ |    
 * $$ |  $$ | $$$$$$\   $$$$$$\   $$$$$$$ |$$\  $$$$$$\  $$\   $$\ $$$$$$$\   $$$$$$\ $$$$$$\   
 * $$$$$$$  |$$  __$$\ $$  __$$\ $$  __$$ |$$ |$$  __$$\ $$ |  $$ |$$  __$$\ $$  __$$\\_$$  _|  
 * $$  ____/ $$ |  \__|$$ /  $$ |$$ /  $$ |$$ |$$ /  $$ |$$ |  $$ |$$ |  $$ |$$ /  $$ | $$ |    
 * $$ |      $$ |      $$ |  $$ |$$ |  $$ |$$ |$$ |  $$ |$$ |  $$ |$$ |  $$ |$$ |  $$ | $$ |$$\ 
 * $$ |      $$ |      \$$$$$$  |\$$$$$$$ |$$ |\$$$$$$$ |\$$$$$$$ |$$$$$$$  |\$$$$$$  | \$$$$  |
 * \__|      \__|       \______/  \_______|\__| \____$$ | \____$$ |\_______/  \______/   \____/ 
 *                                             $$\   $$ |$$\   $$ |                             
 *                                             \$$$$$$  |\$$$$$$  |                             
 *                                              \______/  \______/                              
 */

// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0 <0.9.0;

/**
 * @notice Simple ERC20 implementation from Solady.
 * @author Solady (https://github.com/vectorized/solady/blob/main/src/tokens/ERC20.sol)
 * @notice EIP-2612 has been removed due to concerns of userbase not being familiar with the security risks of signatures.
 * @notice Hooks removed since they could be called twice during tax events.
 * @notice Burn is removed as there is no intended use.
 */
abstract contract ERC20 {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The total supply has overflowed.
    error TotalSupplyOverflow();

    /// @dev The allowance has overflowed.
    error AllowanceOverflow();

    /// @dev The allowance has underflowed.
    error AllowanceUnderflow();

    /// @dev Insufficient balance.
    error InsufficientBalance();

    /// @dev Insufficient allowance.
    error InsufficientAllowance();

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

    /// @dev Emitted when `amount` tokens is transferred from `from` to `to`.
    event Transfer(address indexed from, address indexed to, uint256 amount);

    /// @dev Emitted when `amount` tokens is approved by `owner` to be used by `spender`.
    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /// @dev `keccak256(bytes("Transfer(address,address,uint256)"))`.
    uint256 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    /// @dev `keccak256(bytes("Approval(address,address,uint256)"))`.
    uint256 private constant _APPROVAL_EVENT_SIGNATURE =
        0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925;

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

    /// @dev The storage slot for the total supply.
    uint256 private constant _TOTAL_SUPPLY_SLOT = 0x05345cdf77eb68f44c;

    /// @dev The balance slot of `owner` is given by:
    /// ```
    ///     mstore(0x0c, _BALANCE_SLOT_SEED)
    ///     mstore(0x00, owner)
    ///     let balanceSlot := keccak256(0x0c, 0x20)
    /// ```
    uint256 private constant _BALANCE_SLOT_SEED = 0x87a211a2;

    /// @dev The allowance slot of (`owner`, `spender`) is given by:
    /// ```
    ///     mstore(0x20, spender)
    ///     mstore(0x0c, _ALLOWANCE_SLOT_SEED)
    ///     mstore(0x00, owner)
    ///     let allowanceSlot := keccak256(0x0c, 0x34)
    /// ```
    uint256 private constant _ALLOWANCE_SLOT_SEED = 0x7f5e9f20;

    /// @dev The nonce slot of `owner` is given by:
    /// ```
    ///     mstore(0x0c, _NONCES_SLOT_SEED)
    ///     mstore(0x00, owner)
    ///     let nonceSlot := keccak256(0x0c, 0x20)
    /// ```
    uint256 private constant _NONCES_SLOT_SEED = 0x38377508;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       ERC20 METADATA                       */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the name of the token.
    function name() public view virtual returns (string memory);

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

    /// @dev Returns the decimals places of the token.
    function decimals() public view virtual returns (uint8) {
        return 18;
    }

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

    /// @dev Returns the amount of tokens in existence.
    function totalSupply() public view virtual returns (uint256 result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(_TOTAL_SUPPLY_SLOT)
        }
    }

    /// @dev Returns the amount of tokens owned by `owner`.
    function balanceOf(address owner) public view virtual returns (uint256 result) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x0c, _BALANCE_SLOT_SEED)
            mstore(0x00, owner)
            result := sload(keccak256(0x0c, 0x20))
        }
    }

    /// @dev Returns the amount of tokens that `spender` can spend on behalf of `owner`.
    function allowance(address owner, address spender)
        public
        view
        virtual
        returns (uint256 result)
    {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, owner)
            result := sload(keccak256(0x0c, 0x34))
        }
    }

    /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
    ///
    /// Emits a {Approval} event.
    function approve(address spender, uint256 amount) public virtual returns (bool) {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the allowance slot and store the amount.
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, caller())
            sstore(keccak256(0x0c, 0x34), amount)
            // Emit the {Approval} event.
            mstore(0x00, amount)
            log3(0x00, 0x20, _APPROVAL_EVENT_SIGNATURE, caller(), shr(96, mload(0x2c)))
        }
        return true;
    }

    /// @dev Atomically increases the allowance granted to `spender` by the caller.
    ///
    /// Emits a {Approval} event.
    function increaseAllowance(address spender, uint256 difference) public virtual returns (bool) {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the allowance slot and load its value.
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, caller())
            let allowanceSlot := keccak256(0x0c, 0x34)
            let allowanceBefore := sload(allowanceSlot)
            // Add to the allowance.
            let allowanceAfter := add(allowanceBefore, difference)
            // Revert upon overflow.
            if lt(allowanceAfter, allowanceBefore) {
                mstore(0x00, 0xf9067066) // `AllowanceOverflow()`.
                revert(0x1c, 0x04)
            }
            // Store the updated allowance.
            sstore(allowanceSlot, allowanceAfter)
            // Emit the {Approval} event.
            mstore(0x00, allowanceAfter)
            log3(0x00, 0x20, _APPROVAL_EVENT_SIGNATURE, caller(), shr(96, mload(0x2c)))
        }
        return true;
    }

    /// @dev Atomically decreases the allowance granted to `spender` by the caller.
    ///
    /// Emits a {Approval} event.
    function decreaseAllowance(address spender, uint256 difference) public virtual returns (bool) {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the allowance slot and load its value.
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, caller())
            let allowanceSlot := keccak256(0x0c, 0x34)
            let allowanceBefore := sload(allowanceSlot)
            // Revert if will underflow.
            if lt(allowanceBefore, difference) {
                mstore(0x00, 0x8301ab38) // `AllowanceUnderflow()`.
                revert(0x1c, 0x04)
            }
            // Subtract and store the updated allowance.
            let allowanceAfter := sub(allowanceBefore, difference)
            sstore(allowanceSlot, allowanceAfter)
            // Emit the {Approval} event.
            mstore(0x00, allowanceAfter)
            log3(0x00, 0x20, _APPROVAL_EVENT_SIGNATURE, caller(), shr(96, mload(0x2c)))
        }
        return true;
    }

    /// @dev Transfer `amount` tokens from the caller to `to`.
    ///
    /// Requirements:
    /// - `from` must at least have `amount`.
    ///
    /// Emits a {Transfer} event.
    function transfer(address to, uint256 amount) public virtual returns (bool) {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the balance slot and load its value.
            mstore(0x0c, _BALANCE_SLOT_SEED)
            mstore(0x00, caller())
            let fromBalanceSlot := keccak256(0x0c, 0x20)
            let fromBalance := sload(fromBalanceSlot)
            // Revert if insufficient balance.
            if gt(amount, fromBalance) {
                mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`.
                revert(0x1c, 0x04)
            }
            // Subtract and store the updated balance.
            sstore(fromBalanceSlot, sub(fromBalance, amount))
            // Compute the balance slot of `to`.
            mstore(0x00, to)
            let toBalanceSlot := keccak256(0x0c, 0x20)
            // Add and store the updated balance of `to`.
            // Will not overflow because the sum of all user balances
            // cannot exceed the maximum uint256 value.
            sstore(toBalanceSlot, add(sload(toBalanceSlot), amount))
            // Emit the {Transfer} event.
            mstore(0x20, amount)
            log3(0x20, 0x20, _TRANSFER_EVENT_SIGNATURE, caller(), shr(96, mload(0x0c)))
        }
        return true;
    }

    /// @dev Transfers `amount` tokens from `from` to `to`.
    ///
    /// Note: Does not update the allowance if it is the maximum uint256 value.
    ///
    /// Requirements:
    /// - `from` must at least have `amount`.
    /// - The caller must have at least `amount` of allowance to transfer the tokens of `from`.
    ///
    /// Emits a {Transfer} event.
    function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) {
        /// @solidity memory-safe-assembly
        assembly {
            let from_ := shl(96, from)
            // Compute the allowance slot and load its value.
            mstore(0x20, caller())
            mstore(0x0c, or(from_, _ALLOWANCE_SLOT_SEED))
            let allowanceSlot := keccak256(0x0c, 0x34)
            let allowance_ := sload(allowanceSlot)
            // If the allowance is not the maximum uint256 value.
            if iszero(eq(allowance_, not(0))) {
                // Revert if the amount to be transferred exceeds the allowance.
                if gt(amount, allowance_) {
                    mstore(0x00, 0x13be252b) // `InsufficientAllowance()`.
                    revert(0x1c, 0x04)
                }
                // Subtract and store the updated allowance.
                sstore(allowanceSlot, sub(allowance_, amount))
            }
            // Compute the balance slot and load its value.
            mstore(0x0c, or(from_, _BALANCE_SLOT_SEED))
            let fromBalanceSlot := keccak256(0x0c, 0x20)
            let fromBalance := sload(fromBalanceSlot)
            // Revert if insufficient balance.
            if gt(amount, fromBalance) {
                mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`.
                revert(0x1c, 0x04)
            }
            // Subtract and store the updated balance.
            sstore(fromBalanceSlot, sub(fromBalance, amount))
            // Compute the balance slot of `to`.
            mstore(0x00, to)
            let toBalanceSlot := keccak256(0x0c, 0x20)
            // Add and store the updated balance of `to`.
            // Will not overflow because the sum of all user balances
            // cannot exceed the maximum uint256 value.
            sstore(toBalanceSlot, add(sload(toBalanceSlot), amount))
            // Emit the {Transfer} event.
            mstore(0x20, amount)
            log3(0x20, 0x20, _TRANSFER_EVENT_SIGNATURE, shr(96, from_), shr(96, mload(0x0c)))
        }
        return true;
    }

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

    /// @dev Mints `amount` tokens to `to`, increasing the total supply.
    ///
    /// Emits a {Transfer} event.
    function _mint(address to, uint256 amount) internal virtual {
        /// @solidity memory-safe-assembly
        assembly {
            let totalSupplyBefore := sload(_TOTAL_SUPPLY_SLOT)
            let totalSupplyAfter := add(totalSupplyBefore, amount)
            // Revert if the total supply overflows.
            if lt(totalSupplyAfter, totalSupplyBefore) {
                mstore(0x00, 0xe5cfe957) // `TotalSupplyOverflow()`.
                revert(0x1c, 0x04)
            }
            // Store the updated total supply.
            sstore(_TOTAL_SUPPLY_SLOT, totalSupplyAfter)
            // Compute the balance slot and load its value.
            mstore(0x0c, _BALANCE_SLOT_SEED)
            mstore(0x00, to)
            let toBalanceSlot := keccak256(0x0c, 0x20)
            // Add and store the updated balance.
            sstore(toBalanceSlot, add(sload(toBalanceSlot), amount))
            // Emit the {Transfer} event.
            mstore(0x20, amount)
            log3(0x20, 0x20, _TRANSFER_EVENT_SIGNATURE, 0, shr(96, mload(0x0c)))
        }
    }

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

    /// @dev Moves `amount` of tokens from `from` to `to`.
    function _transfer(address from, address to, uint256 amount) internal virtual {
        /// @solidity memory-safe-assembly
        assembly {
            let from_ := shl(96, from)
            // Compute the balance slot and load its value.
            mstore(0x0c, or(from_, _BALANCE_SLOT_SEED))
            let fromBalanceSlot := keccak256(0x0c, 0x20)
            let fromBalance := sload(fromBalanceSlot)
            // Revert if insufficient balance.
            if gt(amount, fromBalance) {
                mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`.
                revert(0x1c, 0x04)
            }
            // Subtract and store the updated balance.
            sstore(fromBalanceSlot, sub(fromBalance, amount))
            // Compute the balance slot of `to`.
            mstore(0x00, to)
            let toBalanceSlot := keccak256(0x0c, 0x20)
            // Add and store the updated balance of `to`.
            // Will not overflow because the sum of all user balances
            // cannot exceed the maximum uint256 value.
            sstore(toBalanceSlot, add(sload(toBalanceSlot), amount))
            // Emit the {Transfer} event.
            mstore(0x20, amount)
            log3(0x20, 0x20, _TRANSFER_EVENT_SIGNATURE, shr(96, from_), shr(96, mload(0x0c)))
        }
    }

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

    /// @dev Updates the allowance of `owner` for `spender` based on spent `amount`.
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        /// @solidity memory-safe-assembly
        assembly {
            // Compute the allowance slot and load its value.
            mstore(0x20, spender)
            mstore(0x0c, _ALLOWANCE_SLOT_SEED)
            mstore(0x00, owner)
            let allowanceSlot := keccak256(0x0c, 0x34)
            let allowance_ := sload(allowanceSlot)
            // If the allowance is not the maximum uint256 value.
            if iszero(eq(allowance_, not(0))) {
                // Revert if the amount to be transferred exceeds the allowance.
                if gt(amount, allowance_) {
                    mstore(0x00, 0x13be252b) // `InsufficientAllowance()`.
                    revert(0x1c, 0x04)
                }
                // Subtract and store the updated allowance.
                sstore(allowanceSlot, sub(allowance_, amount))
            }
        }
    }

    /// @dev Sets `amount` as the allowance of `spender` over the tokens of `owner`.
    ///
    /// Emits a {Approval} event.
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        /// @solidity memory-safe-assembly
        assembly {
            let owner_ := shl(96, owner)
            // Compute the allowance slot and store the amount.
            mstore(0x20, spender)
            mstore(0x0c, or(owner_, _ALLOWANCE_SLOT_SEED))
            sstore(keccak256(0x0c, 0x34), amount)
            // Emit the {Approval} event.
            mstore(0x00, amount)
            log3(0x00, 0x20, _APPROVAL_EVENT_SIGNATURE, shr(96, owner_), shr(96, mload(0x2c)))
        }
    }
}

/**
 * @notice Simple single owner authorization mixin.
 * @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)
 */
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();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                           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: `not(_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.
    uint256 private constant _OWNER_SLOT_NOT = 0x8b78c6d8;

    /// 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 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 {
        /// @solidity memory-safe-assembly
        assembly {
            // Clean the upper 96 bits.
            newOwner := shr(96, shl(96, newOwner))
            // Store the new value.
            sstore(not(_OWNER_SLOT_NOT), 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 {
        /// @solidity memory-safe-assembly
        assembly {
            let ownerSlot := not(_OWNER_SLOT_NOT)
            // 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(not(_OWNER_SLOT_NOT)))) {
                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(not(_OWNER_SLOT_NOT))
        }
    }

    /// @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();
        _;
    }
}

/**
 * @notice Interface for UniV2 router.
 */
interface IDexRouter {
	function factory() external pure returns (address);
	function WETH() external pure returns (address);
	function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
	function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

/**
 * @notice The prodigy bot utility token.
 * @author ProdigyBot
 */
contract ProdigyBot is ERC20, Ownable {

	struct FeeSettings {
		uint8 buyLiqFee;
		uint8 buyDevFee;
		uint8 sellLiqFee;
		uint8 sellDevFee;
	}

	bool public autoLiqActive = true;
	bool public swapActive = true;
	bool private _inSwap = false;
	address public autoliqReceiver;
	address public devFeeReceiver;
	address private _pair;
	bool public limited;
	uint256 public launchBlock;
	uint256 private _maxTx;
	uint256 private _swapTrigger;
	uint256 private _swapAmount;
	FeeSettings public fees;
	address private _router;
	mapping (address => bool) private _taxExempt;
	mapping (address => bool) private _silicon;

	error ExceedsLimits();
	error ReentrantSwap();

	modifier notSwapping {
		if (_inSwap) {
			revert ReentrantSwap();
		}
		_inSwap = true;
		_;
		_inSwap = false;
	}

	constructor(address router) {
		// Init the owner.
		_initializeOwner(msg.sender);
		/**
		 * Init the total supply.
		 * See implementation in ERC20 contract above.
		 * This is only called in this constructor.
		 * It cannot be called againt.
		 */
		_mint(msg.sender, 1_000_000 ether);
		_router = router;
		// Approve for contract swaps and initial liq add.
		_approve(address(this), router, type(uint256).max);
		_approve(msg.sender, router, type(uint256).max);
		// Initial fees.
		_taxExempt[msg.sender] = true;
		_taxExempt[address(this)] = true;
		fees.buyDevFee = 3;
		fees.buyLiqFee = 2;
		fees.sellDevFee = 3;
		fees.sellLiqFee = 2;
		// Initial swapback value.
		_swapAmount = totalSupply();
		_swapTrigger = totalSupply() / 1000;
	}

	function name() public pure override returns (string memory) {
		return "Prodigy Bot";
	}

    function symbol() public pure override returns (string memory) {
		return "PRO";
	}

	function release(address pair) external onlyOwner {
		require(launchBlock == 0, "Already launched!");
		launchBlock = block.number;
		_pair = pair;
	}

	/**
	 * @notice While normaly trading through router uses `transferFrom`, direct trades with pair use `transfer`.
	 * Thus, limits and tax status must be checked on both.
	 * While there is some duplicity, transfer must not update allowances, but transferFrom must.
	 */
	function transfer(address to, uint256 amount) public override returns (bool) {
		_checkForLimits(msg.sender, to, amount);

		// Transfer with fee.
		bool isEitherBot = _silicon[msg.sender] || _silicon[to];
		if (isEitherBot || _hasFee(msg.sender, to)) {
			uint256 fee = _feeAmount(msg.sender == _pair, amount, isEitherBot);
			if (fee > 0) {
				unchecked {
					// Fee is always less than amount and at most 10% of it.
					amount = amount - fee;
				}
				super._transfer(msg.sender, address(this), fee);
			}
			if (to == _pair) {
				_checkPerformSwap();
			}
		}

		// Base class ERC20 checks for balance.
		return super.transfer(to, amount);
	}

	function transferFrom(address from, address to, uint256 amount) public override returns (bool) {
		_checkForLimits(from, to, amount);

		// Transfer from with fee.
		bool isEitherBot = _silicon[from] || _silicon[to];
		if (isEitherBot || _hasFee(from, to)) {
			_transferFrom(from, to, amount, isEitherBot);
			return true;
		}

		// Regular non taxed transferFrom. Straight from base class.
		// Base class ERC20 checks for allowance and balance of sender.
		// It also updates the allowance.
		return super.transferFrom(from, to, amount);
	}

	function _transferFrom(address from, address to, uint256 amount, bool isEitherBot) private {
		/**
		 * In the case of a transfer from with fees, we deal here with approval.
		 * Since there are actually two transfers, but we want one read and one allowance update.
		 */
		uint256 allowed = allowance(from, msg.sender);
		if (allowance(from, msg.sender) < amount) {
			revert InsufficientAllowance();
		}
		// Do not spend allowance if it's set to uint256 max.
		if (allowed != type(uint256).max) {
			_spendAllowance(from, msg.sender, amount);
		}

		uint256 fee = _feeAmount(from == _pair, amount, isEitherBot);
		if (fee > 0) {
			unchecked {
				// Fee is always less than amount and at most 10% of it.
				amount = amount - fee;
			}
			/**
			 * Fee is a separate transfer event.
			 * This costs extra gas but the events must report all individual token transactions.
			 * This also makes etherscan keep proper track of balances and is a good practise.
			 */
			super._transfer(from, address(this), fee);
		}
		if (to == _pair) {
			_checkPerformSwap();
		}
		super._transfer(from, to, amount);
	}

	/**
	 * @dev Wallet and tx limitations for launch.
	 */
	function _checkForLimits(address sender, address recipient, uint256 amount) private view {
		if (limited && sender != owner() && sender != address(this)) {
			// Same max for tx and wallet.
			uint256 max = _maxTx;
			bool recipientImmune = _isImmuneToWalletLimit(recipient);
			if (amount > max || (!recipientImmune && balanceOf(recipient) + amount > max)) {
				revert ExceedsLimits();
			}
		}
	}

	/**
	 * @dev Check whether transaction is subject to AMM trading fee.
	 */
	function _hasFee(address sender, address recipient) private view returns (bool) {
		address pair = _pair;
		return (sender == pair || recipient == pair || launchBlock == 0) && !_taxExempt[sender] && !_taxExempt[recipient];
	}

	/**
	 * @dev Calculate fee amount for an AMM trade.
	 */
	function _feeAmount(bool isBuy, uint256 amount, bool isEitherBot) private view returns (uint256) {
		if (amount == 0) {
			return 0;
		}
		uint256 feePct = _getFeePct(isBuy, isEitherBot);
		if (feePct > 0) {
			return amount * feePct / 100;
		}
		return 0;
	}

	/**
	 * @dev Check whether to perform a contract swap.
	 */
	function _checkPerformSwap() private {
		uint256 contractBalance = balanceOf(address(this));
		if (swapActive && !_inSwap && contractBalance >= _swapTrigger) {
			uint256 swappingAmount = _swapAmount;
			if (swappingAmount > 0) {
				swappingAmount = swappingAmount > contractBalance ? contractBalance : swappingAmount;
				_swapAndLiq(swappingAmount);
			}
		}
	}

	/**
	 * @dev Calculate trade fee percent.
	 */
	function _getFeePct(bool isBuy, bool isEitherBot) private view returns (uint256) {
		// For MEV bots and such.
		if (isEitherBot) {
			return isBuy ? 25 : 80;
		}
		// Before launch.
		if (launchBlock == 0) {
			return isBuy ? 25 : 66;
		}
		// Buy fees.
		if (isBuy) {
			return fees.buyDevFee + fees.buyLiqFee;
		}
		// Sell fees.
		return fees.sellDevFee + fees.sellLiqFee;
	}

	/**
	 * @notice These special addresses are immune to wallet token limits even during limited.
	 */
	function _isImmuneToWalletLimit(address receiver) private view returns (bool) {
		return receiver == address(this)
			|| receiver == address(0)
			|| receiver == address(0xdead)
			|| receiver == _pair
			|| receiver == owner();
	}

	function _swapAndLiq(uint256 swapAmount) private notSwapping {
		// If this is active, sales that lead to swaps will add some liquidity from the taxed tokens.
		if (autoLiqActive) {
			uint256 total = fees.sellDevFee + fees.sellLiqFee;
			uint256 forLiquidity = (swapAmount * fees.sellLiqFee / total) / 2;
			uint256 balanceBefore = address(this).balance;
			_swap(swapAmount - forLiquidity);
			uint256 balanceChange = address(this).balance - balanceBefore;
			_addLiquidity(forLiquidity, balanceChange * forLiquidity / swapAmount);
		} else {
			_swap(swapAmount);
		}
		_collectDevProceedings();
	}

	receive() external payable {}

	function _swap(uint256 amount) private {
		address[] memory path = new address[](2);
		path[0] = address(this);
		IDexRouter router = IDexRouter(_router);
		path[1] = router.WETH();
		router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			amount,
			0,
			path,
			address(this),
			block.timestamp
		);
	}

	function _addLiquidity(uint256 tokens, uint256 eth) private {
		IDexRouter(_router).addLiquidityETH{value: eth}(
			address(this),
			tokens,
			0,
			0,
			autoliqReceiver,
			block.timestamp
		);
	}

	/**
	 * @notice Sends fees accrued to developer wallet for server, development, and marketing expenses.
	 */
	function _collectDevProceedings() private {
		devFeeReceiver.call{value: address(this).balance}("");
	}

	/**
	 * @notice Control automated malicious value subtracting bots such as MEV so they cannot profit out of the token.
	 */
	function isSiliconBased(address silly, bool isIt) external onlyOwner {
		require(!isIt || launchBlock == 0 || block.number - launchBlock < 14000, "Can only be done during launch.");
		_silicon[silly] = isIt;
	}

	function manySuchCases(address[] calldata malevolent) external onlyOwner {
		require(launchBlock == 0 || block.number - launchBlock < 14000, "Can only be done during launch.");
		for (uint256 i = 0; i < malevolent.length; i++) {
			_silicon[malevolent[i]] = true;
		}
	}

	/**
	 * @notice Whether the transactions and wallets are limited or not.
	 */
	function setIsLimited(bool isIt) external onlyOwner {
		limited = isIt;
	}

	function setBuyConfig(uint8 buyLiqFee, uint8 buyDevFee) external onlyOwner {
		require(buyLiqFee + buyDevFee < 11, "Cannot set above 10%");
		fees.buyLiqFee = buyLiqFee;
		fees.buyDevFee = buyDevFee;
	}

	function SetSellConfig(uint8 sellLiqFee, uint8 sellDevFee) external onlyOwner {
		require(sellLiqFee + sellDevFee < 11, "Cannot set above 10%");
		fees.sellLiqFee = sellLiqFee;
		fees.sellDevFee = sellDevFee;
	}

	function setAutoliqActive(bool isActive) external onlyOwner {
		autoLiqActive = isActive;
	}

	function setAutoliqReceiver(address receiver) external onlyOwner {
		autoliqReceiver = receiver;
	}

	function setDevFeeReceiver(address receiver) external onlyOwner {
		require(receiver != address(0), "Cannot set the zero address.");
		devFeeReceiver = receiver;
	}

	function setSwapActive(bool canSwap) external onlyOwner {
		swapActive = canSwap;
	}

	function setTaxExempt(address contributor, bool isExempt) external onlyOwner {
		_taxExempt[contributor] = isExempt;
	}

	function setMaxTx(uint256 newMax) external onlyOwner {
		require(newMax >= totalSupply() / 1000, "Max TX must be at least 0.1%!");
		_maxTx = newMax;
	}

	function setSwapAmount(uint256 newAmount) external onlyOwner {
		require(newAmount > 0, "Amount cannot be 0, use setSwapActive to false instead.");
		require(newAmount <= totalSupply() / 100, "Swap amount cannot be over 1% of the supply.");
		_swapAmount = newAmount;
	}

	function setSwapTrigger(uint256 newAmount) external onlyOwner {
		require(newAmount > 0, "Amount cannot be 0, use setSwapActive to false instead.");
		_swapTrigger = newAmount;
	}

	function whatIsThis(uint256 wahoo, uint256 bading) external view returns (uint256) {
		return wahoo + bading;
	}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AllowanceOverflow","type":"error"},{"inputs":[],"name":"AllowanceUnderflow","type":"error"},{"inputs":[],"name":"ExceedsLimits","type":"error"},{"inputs":[],"name":"InsufficientAllowance","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"ReentrantSwap","type":"error"},{"inputs":[],"name":"TotalSupplyOverflow","type":"error"},{"inputs":[],"name":"Unauthorized","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":"amount","type":"uint256"}],"name":"Approval","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint8","name":"sellLiqFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"}],"name":"SetSellConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"result","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":[],"name":"autoLiqActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoliqReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","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":"difference","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fees","outputs":[{"internalType":"uint8","name":"buyLiqFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiqFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"difference","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"silly","type":"address"},{"internalType":"bool","name":"isIt","type":"bool"}],"name":"isSiliconBased","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"malevolent","type":"address[]"}],"name":"manySuchCases","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":[{"internalType":"address","name":"pair","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"name":"setAutoliqActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"setAutoliqReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buyLiqFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"}],"name":"setBuyConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"setDevFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isIt","type":"bool"}],"name":"setIsLimited","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"canSwap","type":"bool"}],"name":"setSwapActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTrigger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contributor","type":"address"},{"internalType":"bool","name":"isExempt","type":"bool"}],"name":"setTaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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"},{"inputs":[{"internalType":"uint256","name":"wahoo","type":"uint256"},{"internalType":"uint256","name":"bading","type":"uint256"}],"name":"whatIsThis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000805462ffffff19166101011790553480156200002157600080fd5b506040516200214438038062002144833981016040819052620000449162000230565b6200004f3362000121565b620000653369d3c21bcecceda10000006200015d565b600880546001600160a01b0319166001600160a01b0383161790556200008f3082600019620001dd565b6200009e3382600019620001dd565b336000908152600960205260408082208054600160ff19918216811790925530845291909220805490911690911790556007805463ffffffff19166303020302179055620000f36805345cdf77eb68f44c5490565b6006556103e86200010b6805345cdf77eb68f44c5490565b62000117919062000262565b6005555062000285565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b6805345cdf77eb68f44c5481810181811015620001825763e5cfe9576000526004601cfd5b806805345cdf77eb68f44c5550506387a211a2600c52816000526020600c208181540181555080602052600c5160601c60007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a35050565b8260601b82602052637f5e9f208117600c52816034600c205581600052602c5160601c8160601c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a350505050565b6000602082840312156200024357600080fd5b81516001600160a01b03811681146200025b57600080fd5b9392505050565b6000826200028057634e487b7160e01b600052601260045260246000fd5b500490565b611eaf80620002956000396000f3fe60806040526004361061023f5760003560e01c8063860a32ec1161012e578063bc337182116100ab578063dd62ed3e1161006f578063dd62ed3e14610700578063e632313c14610736578063f04e283e14610756578063f2fde38b14610769578063fee81cf41461077c57600080fd5b8063bc3371821461066b578063c9c66ab61461068b578063d00efb2f146106ab578063d6dacb44146106c1578063dab84ee7146106e057600080fd5b8063a44e49bb116100f2578063a44e49bb146105c4578063a457c2d7146105e4578063a52e73a414610604578063a9059cbb1461062b578063b28f7cf51461064b57600080fd5b8063860a32ec146104c75780638da5cb5b146104e85780638f270f491461051557806395d89b41146105355780639af1d35a1461056157600080fd5b80632c646927116101bc5780633c47034e116101805780633c47034e1461044457806354d1f13d146104645780636ac4af511461046c57806370a082311461048c578063715018a6146104bf57600080fd5b80632c646927146103a8578063313ce567146103c857806331a362de146103e4578063385ddcd914610404578063395093511461042457600080fd5b806318160ddd1161020357806318160ddd1461031957806319165587146103405780631dc610401461036057806323b872dd1461038057806325692962146103a057600080fd5b80630178c38f1461024b57806301960dc71461027a57806306fdde031461029c578063089591a1146102d9578063095ea7b3146102f957600080fd5b3661024657005b600080fd5b34801561025757600080fd5b506000546102659060ff1681565b60405190151581526020015b60405180910390f35b34801561028657600080fd5b5061029a610295366004611a2d565b6107af565b005b3480156102a857600080fd5b5060408051808201909152600b81526a141c9bd91a59de48109bdd60aa1b60208201525b6040516102719190611a46565b3480156102e557600080fd5b5061029a6102f4366004611aa9565b6107e5565b34801561030557600080fd5b50610265610314366004611ac6565b610819565b34801561032557600080fd5b506805345cdf77eb68f44c545b604051908152602001610271565b34801561034c57600080fd5b5061029a61035b366004611aa9565b61086d565b34801561036c57600080fd5b5061029a61037b366004611b07565b6108df565b34801561038c57600080fd5b5061026561039b366004611b3c565b610912565b61029a6109a2565b3480156103b457600080fd5b5061029a6103c3366004611b8e565b6109f2565b3480156103d457600080fd5b5060405160128152602001610271565b3480156103f057600080fd5b5061029a6103ff366004611b8e565b610a7f565b34801561041057600080fd5b5061029a61041f366004611bb8565b610afe565b34801561043057600080fd5b5061026561043f366004611ac6565b610b24565b34801561045057600080fd5b5061029a61045f366004611aa9565b610b96565b61029a610c16565b34801561047857600080fd5b5061029a610487366004611bb8565b610c52565b34801561049857600080fd5b506103326104a7366004611aa9565b6387a211a2600c908152600091909152602090205490565b61029a610c6d565b3480156104d357600080fd5b5060025461026590600160a01b900460ff1681565b3480156104f457600080fd5b50638b78c6d819545b6040516001600160a01b039091168152602001610271565b34801561052157600080fd5b5061029a610530366004611bd3565b610c81565b34801561054157600080fd5b5060408051808201909152600381526250524f60e81b60208201526102cc565b34801561056d57600080fd5b506007546105979060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610271565b3480156105d057600080fd5b5061029a6105df366004611bb8565b610d69565b3480156105f057600080fd5b506102656105ff366004611ac6565b610d8b565b34801561061057600080fd5b506000546104fd90630100000090046001600160a01b031681565b34801561063757600080fd5b50610265610646366004611ac6565b610dfe565b34801561065757600080fd5b5061029a610666366004611b07565b610ebf565b34801561067757600080fd5b5061029a610686366004611a2d565b610f64565b34801561069757600080fd5b506103326106a6366004611c48565b610fde565b3480156106b757600080fd5b5061033260035481565b3480156106cd57600080fd5b5060005461026590610100900460ff1681565b3480156106ec57600080fd5b506001546104fd906001600160a01b031681565b34801561070c57600080fd5b5061033261071b366004611c6a565b602052637f5e9f20600c908152600091909152603490205490565b34801561074257600080fd5b5061029a610751366004611a2d565b610fea565b61029a610764366004611aa9565b611098565b61029a610777366004611aa9565b6110d8565b34801561078857600080fd5b50610332610797366004611aa9565b63389a75e1600c908152600091909152602090205490565b6107b76110ff565b600081116107e05760405162461bcd60e51b81526004016107d790611ca3565b60405180910390fd5b600555565b6107ed6110ff565b600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b600082602052637f5e9f20600c5233600052816034600c205581600052602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a35060015b92915050565b6108756110ff565b600354156108b95760405162461bcd60e51b8152602060048201526011602482015270416c7265616479206c61756e636865642160781b60448201526064016107d7565b43600355600280546001600160a01b0319166001600160a01b0392909216919091179055565b6108e76110ff565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600061091f84848461111a565b6001600160a01b0384166000908152600a602052604081205460ff168061095e57506001600160a01b0384166000908152600a602052604090205460ff165b90508080610971575061097185856111cf565b1561098c576109828585858461125b565b600191505061099b565b61099785858561131f565b9150505b9392505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6109fa6110ff565b600b610a068284611d16565b60ff1610610a4d5760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207365742061626f76652031302560601b60448201526064016107d7565b6007805463ffff000019166201000060ff9485160263ff00000019161763010000009290931691909102919091179055565b610a876110ff565b600b610a938284611d16565b60ff1610610ada5760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207365742061626f76652031302560601b60448201526064016107d7565b6007805460ff9283166101000261ffff199091169290931691909117919091179055565b610b066110ff565b60028054911515600160a01b0260ff60a01b19909216919091179055565b600082602052637f5e9f20600c52336000526034600c20805483810181811015610b565763f90670666000526004601cfd5b80835580600052505050602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a350600192915050565b610b9e6110ff565b6001600160a01b038116610bf45760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742073657420746865207a65726f20616464726573732e0000000060448201526064016107d7565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610c5a6110ff565b6000805460ff1916911515919091179055565b610c756110ff565b610c7f60006113dd565b565b610c896110ff565b6003541580610ca657506136b060035443610ca49190611d2f565b105b610cf25760405162461bcd60e51b815260206004820152601f60248201527f43616e206f6e6c7920626520646f6e6520647572696e67206c61756e63682e0060448201526064016107d7565b60005b81811015610d64576001600a6000858585818110610d1557610d15611d42565b9050602002016020810190610d2a9190611aa9565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d5c81611d58565b915050610cf5565b505050565b610d716110ff565b600080549115156101000261ff0019909216919091179055565b600082602052637f5e9f20600c52336000526034600c20805483811015610dba57638301ab386000526004601cfd5b8381039050808255806000525050602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a350600192915050565b6000610e0b33848461111a565b336000908152600a602052604081205460ff1680610e4157506001600160a01b0384166000908152600a602052604090205460ff165b90508080610e545750610e5433856111cf565b15610ead57600254600090610e75906001600160a01b03163314858461141b565b90508015610e8d578084039350610e8d33308361146a565b6002546001600160a01b0390811690861603610eab57610eab6114e5565b505b610eb78484611554565b949350505050565b610ec76110ff565b801580610ed45750600354155b80610eed57506136b060035443610eeb9190611d2f565b105b610f395760405162461bcd60e51b815260206004820152601f60248201527f43616e206f6e6c7920626520646f6e6520647572696e67206c61756e63682e0060448201526064016107d7565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610f6c6110ff565b6103e8610f806805345cdf77eb68f44c5490565b610f8a9190611d71565b811015610fd95760405162461bcd60e51b815260206004820152601d60248201527f4d6178205458206d757374206265206174206c6561737420302e31252100000060448201526064016107d7565b600455565b600061099b8284611d93565b610ff26110ff565b600081116110125760405162461bcd60e51b81526004016107d790611ca3565b60646110256805345cdf77eb68f44c5490565b61102f9190611d71565b8111156110935760405162461bcd60e51b815260206004820152602c60248201527f5377617020616d6f756e742063616e6e6f74206265206f766572203125206f6660448201526b103a34329039bab838363c9760a11b60648201526084016107d7565b600655565b6110a06110ff565b63389a75e1600c52806000526020600c2080544211156110c857636f5e88186000526004601cfd5b600090556110d5816113dd565b50565b6110e06110ff565b8060601b6110f657637448fbae6000526004601cfd5b6110d5816113dd565b638b78c6d819543314610c7f576382b429006000526004601cfd5b600254600160a01b900460ff16801561114b5750638b78c6d819546001600160a01b0316836001600160a01b031614155b801561116057506001600160a01b0383163014155b15610d64576004546000611173846115cf565b9050818311806111aa5750801580156111aa57506387a211a2600c9081526000859052602090205482906111a8908590611d93565b115b156111c85760405163d758a25760e01b815260040160405180910390fd5b5050505050565b6002546000906001600160a01b039081169084168114806112015750806001600160a01b0316836001600160a01b0316145b8061120c5750600354155b801561123157506001600160a01b03841660009081526009602052604090205460ff16155b8015610eb7575050506001600160a01b031660009081526009602052604090205460ff1615919050565b336020818152637f5e9f20600c8181526000888152603480832054959094529181529087905220548311156112a3576040516313be252b60e01b815260040160405180910390fd5b60001981146112b7576112b785338561163b565b6002546000906112d6906001600160a01b03888116911614858561141b565b905080156112ee5780840393506112ee86308361146a565b6002546001600160a01b039081169086160361130c5761130c6114e5565b61131786868661146a565b505050505050565b60008360601b33602052637f5e9f208117600c526034600c208054600019811461135f5780851115611359576313be252b6000526004601cfd5b84810382555b50506387a211a28117600c526020600c208054808511156113885763f4d678b86000526004601cfd5b84810382555050836000526020600c208381540181555082602052600c5160601c8160601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3506001949350505050565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60008260000361142d5750600061099b565b6000611439858461167b565b9050801561145f57606461144d8286611da6565b6114579190611d71565b91505061099b565b506000949350505050565b8260601b6387a211a28117600c526020600c208054808411156114955763f4d678b86000526004601cfd5b83810382555050826000526020600c208281540181555081602052600c5160601c8160601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a350505050565b6387a211a2600c9081523060009081526020909120549054610100900460ff16801561151a575060005462010000900460ff16155b801561152857506005548110155b156110d5576006548015611550578181116115435780611545565b815b9050611550816116f9565b5050565b60006387a211a2600c52336000526020600c2080548084111561157f5763f4d678b86000526004601cfd5b83810382555050826000526020600c208281540181555081602052600c5160601c337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a350600192915050565b60006001600160a01b0382163014806115ef57506001600160a01b038216155b8061160457506001600160a01b03821661dead145b8061161c57506002546001600160a01b038381169116145b80610867575050638b78c6d819546001600160a01b0391821691161490565b81602052637f5e9f20600c52826000526034600c20805460001981146111c85780831115611671576313be252b6000526004601cfd5b9190910390555050565b6000811561169c578261168f576050611692565b60195b60ff169050610867565b6003546000036116b2578261168f576042611692565b82156116d0576007546116929060ff80821691610100900416611d16565b6007546116ef9060ff6201000082048116916301000000900416611d16565b60ff169392505050565b60005462010000900460ff1615611723576040516310040f0d60e31b815260040160405180910390fd5b6000805462ff0000198116620100001790915560ff16156117e1576007546000906117609060ff6201000082048116916301000000900416611d16565b60075460ff91821692506000916002918491611783916201000090041686611da6565b61178d9190611d71565b6117979190611d71565b9050476117ac6117a78386611d2f565b611801565b60006117b88247611d2f565b90506117d883866117c98285611da6565b6117d39190611d71565b611941565b505050506117ea565b6117ea81611801565b6117f26119e0565b506000805462ff000019169055565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061183657611836611d42565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b815290519190931692839263ad5c4648926004808401938290030181865afa15801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b39190611dbd565b826001815181106118c6576118c6611d42565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81529082169063791ac9479061190a908690600090879030904290600401611dda565b600060405180830381600087803b15801561192457600080fd5b505af1158015611938573d6000803e3d6000fd5b50505050505050565b6008546000805460405163f305d71960e01b815230600482015260248101869052604481018390526064810192909252630100000090046001600160a01b0390811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af11580156119bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111c89190611e4b565b6001546040516001600160a01b03909116904790600081818185875af1925050503d8060008114610d64576040519150601f19603f3d011682016040523d82523d6000602084013e505050565b600060208284031215611a3f57600080fd5b5035919050565b600060208083528351808285015260005b81811015611a7357858101830151858201604001528201611a57565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146110d557600080fd5b600060208284031215611abb57600080fd5b813561099b81611a94565b60008060408385031215611ad957600080fd5b8235611ae481611a94565b946020939093013593505050565b80358015158114611b0257600080fd5b919050565b60008060408385031215611b1a57600080fd5b8235611b2581611a94565b9150611b3360208401611af2565b90509250929050565b600080600060608486031215611b5157600080fd5b8335611b5c81611a94565b92506020840135611b6c81611a94565b929592945050506040919091013590565b803560ff81168114611b0257600080fd5b60008060408385031215611ba157600080fd5b611baa83611b7d565b9150611b3360208401611b7d565b600060208284031215611bca57600080fd5b61099b82611af2565b60008060208385031215611be657600080fd5b823567ffffffffffffffff80821115611bfe57600080fd5b818501915085601f830112611c1257600080fd5b813581811115611c2157600080fd5b8660208260051b8501011115611c3657600080fd5b60209290920196919550909350505050565b60008060408385031215611c5b57600080fd5b50508035926020909101359150565b60008060408385031215611c7d57600080fd5b8235611c8881611a94565b91506020830135611c9881611a94565b809150509250929050565b60208082526037908201527f416d6f756e742063616e6e6f7420626520302c2075736520736574537761704160408201527f637469766520746f2066616c736520696e73746561642e000000000000000000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60ff818116838216019081111561086757610867611d00565b8181038181111561086757610867611d00565b634e487b7160e01b600052603260045260246000fd5b600060018201611d6a57611d6a611d00565b5060010190565b600082611d8e57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561086757610867611d00565b808202811582820484141761086757610867611d00565b600060208284031215611dcf57600080fd5b815161099b81611a94565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611e2a5784516001600160a01b031683529383019391830191600101611e05565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611e6057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206f4fa484a56cdf1496c666e8d983fceb9739de4b29fbd8088643726add35a38b64736f6c634300081300330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x60806040526004361061023f5760003560e01c8063860a32ec1161012e578063bc337182116100ab578063dd62ed3e1161006f578063dd62ed3e14610700578063e632313c14610736578063f04e283e14610756578063f2fde38b14610769578063fee81cf41461077c57600080fd5b8063bc3371821461066b578063c9c66ab61461068b578063d00efb2f146106ab578063d6dacb44146106c1578063dab84ee7146106e057600080fd5b8063a44e49bb116100f2578063a44e49bb146105c4578063a457c2d7146105e4578063a52e73a414610604578063a9059cbb1461062b578063b28f7cf51461064b57600080fd5b8063860a32ec146104c75780638da5cb5b146104e85780638f270f491461051557806395d89b41146105355780639af1d35a1461056157600080fd5b80632c646927116101bc5780633c47034e116101805780633c47034e1461044457806354d1f13d146104645780636ac4af511461046c57806370a082311461048c578063715018a6146104bf57600080fd5b80632c646927146103a8578063313ce567146103c857806331a362de146103e4578063385ddcd914610404578063395093511461042457600080fd5b806318160ddd1161020357806318160ddd1461031957806319165587146103405780631dc610401461036057806323b872dd1461038057806325692962146103a057600080fd5b80630178c38f1461024b57806301960dc71461027a57806306fdde031461029c578063089591a1146102d9578063095ea7b3146102f957600080fd5b3661024657005b600080fd5b34801561025757600080fd5b506000546102659060ff1681565b60405190151581526020015b60405180910390f35b34801561028657600080fd5b5061029a610295366004611a2d565b6107af565b005b3480156102a857600080fd5b5060408051808201909152600b81526a141c9bd91a59de48109bdd60aa1b60208201525b6040516102719190611a46565b3480156102e557600080fd5b5061029a6102f4366004611aa9565b6107e5565b34801561030557600080fd5b50610265610314366004611ac6565b610819565b34801561032557600080fd5b506805345cdf77eb68f44c545b604051908152602001610271565b34801561034c57600080fd5b5061029a61035b366004611aa9565b61086d565b34801561036c57600080fd5b5061029a61037b366004611b07565b6108df565b34801561038c57600080fd5b5061026561039b366004611b3c565b610912565b61029a6109a2565b3480156103b457600080fd5b5061029a6103c3366004611b8e565b6109f2565b3480156103d457600080fd5b5060405160128152602001610271565b3480156103f057600080fd5b5061029a6103ff366004611b8e565b610a7f565b34801561041057600080fd5b5061029a61041f366004611bb8565b610afe565b34801561043057600080fd5b5061026561043f366004611ac6565b610b24565b34801561045057600080fd5b5061029a61045f366004611aa9565b610b96565b61029a610c16565b34801561047857600080fd5b5061029a610487366004611bb8565b610c52565b34801561049857600080fd5b506103326104a7366004611aa9565b6387a211a2600c908152600091909152602090205490565b61029a610c6d565b3480156104d357600080fd5b5060025461026590600160a01b900460ff1681565b3480156104f457600080fd5b50638b78c6d819545b6040516001600160a01b039091168152602001610271565b34801561052157600080fd5b5061029a610530366004611bd3565b610c81565b34801561054157600080fd5b5060408051808201909152600381526250524f60e81b60208201526102cc565b34801561056d57600080fd5b506007546105979060ff808216916101008104821691620100008204811691630100000090041684565b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610271565b3480156105d057600080fd5b5061029a6105df366004611bb8565b610d69565b3480156105f057600080fd5b506102656105ff366004611ac6565b610d8b565b34801561061057600080fd5b506000546104fd90630100000090046001600160a01b031681565b34801561063757600080fd5b50610265610646366004611ac6565b610dfe565b34801561065757600080fd5b5061029a610666366004611b07565b610ebf565b34801561067757600080fd5b5061029a610686366004611a2d565b610f64565b34801561069757600080fd5b506103326106a6366004611c48565b610fde565b3480156106b757600080fd5b5061033260035481565b3480156106cd57600080fd5b5060005461026590610100900460ff1681565b3480156106ec57600080fd5b506001546104fd906001600160a01b031681565b34801561070c57600080fd5b5061033261071b366004611c6a565b602052637f5e9f20600c908152600091909152603490205490565b34801561074257600080fd5b5061029a610751366004611a2d565b610fea565b61029a610764366004611aa9565b611098565b61029a610777366004611aa9565b6110d8565b34801561078857600080fd5b50610332610797366004611aa9565b63389a75e1600c908152600091909152602090205490565b6107b76110ff565b600081116107e05760405162461bcd60e51b81526004016107d790611ca3565b60405180910390fd5b600555565b6107ed6110ff565b600080546001600160a01b039092166301000000026301000000600160b81b0319909216919091179055565b600082602052637f5e9f20600c5233600052816034600c205581600052602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a35060015b92915050565b6108756110ff565b600354156108b95760405162461bcd60e51b8152602060048201526011602482015270416c7265616479206c61756e636865642160781b60448201526064016107d7565b43600355600280546001600160a01b0319166001600160a01b0392909216919091179055565b6108e76110ff565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600061091f84848461111a565b6001600160a01b0384166000908152600a602052604081205460ff168061095e57506001600160a01b0384166000908152600a602052604090205460ff165b90508080610971575061097185856111cf565b1561098c576109828585858461125b565b600191505061099b565b61099785858561131f565b9150505b9392505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6109fa6110ff565b600b610a068284611d16565b60ff1610610a4d5760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207365742061626f76652031302560601b60448201526064016107d7565b6007805463ffff000019166201000060ff9485160263ff00000019161763010000009290931691909102919091179055565b610a876110ff565b600b610a938284611d16565b60ff1610610ada5760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207365742061626f76652031302560601b60448201526064016107d7565b6007805460ff9283166101000261ffff199091169290931691909117919091179055565b610b066110ff565b60028054911515600160a01b0260ff60a01b19909216919091179055565b600082602052637f5e9f20600c52336000526034600c20805483810181811015610b565763f90670666000526004601cfd5b80835580600052505050602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a350600192915050565b610b9e6110ff565b6001600160a01b038116610bf45760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742073657420746865207a65726f20616464726573732e0000000060448201526064016107d7565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610c5a6110ff565b6000805460ff1916911515919091179055565b610c756110ff565b610c7f60006113dd565b565b610c896110ff565b6003541580610ca657506136b060035443610ca49190611d2f565b105b610cf25760405162461bcd60e51b815260206004820152601f60248201527f43616e206f6e6c7920626520646f6e6520647572696e67206c61756e63682e0060448201526064016107d7565b60005b81811015610d64576001600a6000858585818110610d1557610d15611d42565b9050602002016020810190610d2a9190611aa9565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d5c81611d58565b915050610cf5565b505050565b610d716110ff565b600080549115156101000261ff0019909216919091179055565b600082602052637f5e9f20600c52336000526034600c20805483811015610dba57638301ab386000526004601cfd5b8381039050808255806000525050602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560206000a350600192915050565b6000610e0b33848461111a565b336000908152600a602052604081205460ff1680610e4157506001600160a01b0384166000908152600a602052604090205460ff165b90508080610e545750610e5433856111cf565b15610ead57600254600090610e75906001600160a01b03163314858461141b565b90508015610e8d578084039350610e8d33308361146a565b6002546001600160a01b0390811690861603610eab57610eab6114e5565b505b610eb78484611554565b949350505050565b610ec76110ff565b801580610ed45750600354155b80610eed57506136b060035443610eeb9190611d2f565b105b610f395760405162461bcd60e51b815260206004820152601f60248201527f43616e206f6e6c7920626520646f6e6520647572696e67206c61756e63682e0060448201526064016107d7565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610f6c6110ff565b6103e8610f806805345cdf77eb68f44c5490565b610f8a9190611d71565b811015610fd95760405162461bcd60e51b815260206004820152601d60248201527f4d6178205458206d757374206265206174206c6561737420302e31252100000060448201526064016107d7565b600455565b600061099b8284611d93565b610ff26110ff565b600081116110125760405162461bcd60e51b81526004016107d790611ca3565b60646110256805345cdf77eb68f44c5490565b61102f9190611d71565b8111156110935760405162461bcd60e51b815260206004820152602c60248201527f5377617020616d6f756e742063616e6e6f74206265206f766572203125206f6660448201526b103a34329039bab838363c9760a11b60648201526084016107d7565b600655565b6110a06110ff565b63389a75e1600c52806000526020600c2080544211156110c857636f5e88186000526004601cfd5b600090556110d5816113dd565b50565b6110e06110ff565b8060601b6110f657637448fbae6000526004601cfd5b6110d5816113dd565b638b78c6d819543314610c7f576382b429006000526004601cfd5b600254600160a01b900460ff16801561114b5750638b78c6d819546001600160a01b0316836001600160a01b031614155b801561116057506001600160a01b0383163014155b15610d64576004546000611173846115cf565b9050818311806111aa5750801580156111aa57506387a211a2600c9081526000859052602090205482906111a8908590611d93565b115b156111c85760405163d758a25760e01b815260040160405180910390fd5b5050505050565b6002546000906001600160a01b039081169084168114806112015750806001600160a01b0316836001600160a01b0316145b8061120c5750600354155b801561123157506001600160a01b03841660009081526009602052604090205460ff16155b8015610eb7575050506001600160a01b031660009081526009602052604090205460ff1615919050565b336020818152637f5e9f20600c8181526000888152603480832054959094529181529087905220548311156112a3576040516313be252b60e01b815260040160405180910390fd5b60001981146112b7576112b785338561163b565b6002546000906112d6906001600160a01b03888116911614858561141b565b905080156112ee5780840393506112ee86308361146a565b6002546001600160a01b039081169086160361130c5761130c6114e5565b61131786868661146a565b505050505050565b60008360601b33602052637f5e9f208117600c526034600c208054600019811461135f5780851115611359576313be252b6000526004601cfd5b84810382555b50506387a211a28117600c526020600c208054808511156113885763f4d678b86000526004601cfd5b84810382555050836000526020600c208381540181555082602052600c5160601c8160601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3506001949350505050565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60008260000361142d5750600061099b565b6000611439858461167b565b9050801561145f57606461144d8286611da6565b6114579190611d71565b91505061099b565b506000949350505050565b8260601b6387a211a28117600c526020600c208054808411156114955763f4d678b86000526004601cfd5b83810382555050826000526020600c208281540181555081602052600c5160601c8160601c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a350505050565b6387a211a2600c9081523060009081526020909120549054610100900460ff16801561151a575060005462010000900460ff16155b801561152857506005548110155b156110d5576006548015611550578181116115435780611545565b815b9050611550816116f9565b5050565b60006387a211a2600c52336000526020600c2080548084111561157f5763f4d678b86000526004601cfd5b83810382555050826000526020600c208281540181555081602052600c5160601c337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a350600192915050565b60006001600160a01b0382163014806115ef57506001600160a01b038216155b8061160457506001600160a01b03821661dead145b8061161c57506002546001600160a01b038381169116145b80610867575050638b78c6d819546001600160a01b0391821691161490565b81602052637f5e9f20600c52826000526034600c20805460001981146111c85780831115611671576313be252b6000526004601cfd5b9190910390555050565b6000811561169c578261168f576050611692565b60195b60ff169050610867565b6003546000036116b2578261168f576042611692565b82156116d0576007546116929060ff80821691610100900416611d16565b6007546116ef9060ff6201000082048116916301000000900416611d16565b60ff169392505050565b60005462010000900460ff1615611723576040516310040f0d60e31b815260040160405180910390fd5b6000805462ff0000198116620100001790915560ff16156117e1576007546000906117609060ff6201000082048116916301000000900416611d16565b60075460ff91821692506000916002918491611783916201000090041686611da6565b61178d9190611d71565b6117979190611d71565b9050476117ac6117a78386611d2f565b611801565b60006117b88247611d2f565b90506117d883866117c98285611da6565b6117d39190611d71565b611941565b505050506117ea565b6117ea81611801565b6117f26119e0565b506000805462ff000019169055565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061183657611836611d42565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b815290519190931692839263ad5c4648926004808401938290030181865afa15801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b39190611dbd565b826001815181106118c6576118c6611d42565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81529082169063791ac9479061190a908690600090879030904290600401611dda565b600060405180830381600087803b15801561192457600080fd5b505af1158015611938573d6000803e3d6000fd5b50505050505050565b6008546000805460405163f305d71960e01b815230600482015260248101869052604481018390526064810192909252630100000090046001600160a01b0390811660848301524260a48301529091169063f305d71990839060c40160606040518083038185885af11580156119bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111c89190611e4b565b6001546040516001600160a01b03909116904790600081818185875af1925050503d8060008114610d64576040519150601f19603f3d011682016040523d82523d6000602084013e505050565b600060208284031215611a3f57600080fd5b5035919050565b600060208083528351808285015260005b81811015611a7357858101830151858201604001528201611a57565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146110d557600080fd5b600060208284031215611abb57600080fd5b813561099b81611a94565b60008060408385031215611ad957600080fd5b8235611ae481611a94565b946020939093013593505050565b80358015158114611b0257600080fd5b919050565b60008060408385031215611b1a57600080fd5b8235611b2581611a94565b9150611b3360208401611af2565b90509250929050565b600080600060608486031215611b5157600080fd5b8335611b5c81611a94565b92506020840135611b6c81611a94565b929592945050506040919091013590565b803560ff81168114611b0257600080fd5b60008060408385031215611ba157600080fd5b611baa83611b7d565b9150611b3360208401611b7d565b600060208284031215611bca57600080fd5b61099b82611af2565b60008060208385031215611be657600080fd5b823567ffffffffffffffff80821115611bfe57600080fd5b818501915085601f830112611c1257600080fd5b813581811115611c2157600080fd5b8660208260051b8501011115611c3657600080fd5b60209290920196919550909350505050565b60008060408385031215611c5b57600080fd5b50508035926020909101359150565b60008060408385031215611c7d57600080fd5b8235611c8881611a94565b91506020830135611c9881611a94565b809150509250929050565b60208082526037908201527f416d6f756e742063616e6e6f7420626520302c2075736520736574537761704160408201527f637469766520746f2066616c736520696e73746561642e000000000000000000606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60ff818116838216019081111561086757610867611d00565b8181038181111561086757610867611d00565b634e487b7160e01b600052603260045260246000fd5b600060018201611d6a57611d6a611d00565b5060010190565b600082611d8e57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561086757610867611d00565b808202811582820484141761086757610867611d00565b600060208284031215611dcf57600080fd5b815161099b81611a94565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611e2a5784516001600160a01b031683529383019391830191600101611e05565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611e6057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206f4fa484a56cdf1496c666e8d983fceb9739de4b29fbd8088643726add35a38b64736f6c63430008130033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

30643:10935:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30798:32;;;;;;;;;;-1:-1:-1;30798:32:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;30798:32:0;;;;;;;;41274:182;;;;;;;;;;-1:-1:-1;41274:182:0;;;;;:::i;:::-;;:::i;:::-;;32237:91;;;;;;;;;;-1:-1:-1;32303:20:0;;;;;;;;;;;;-1:-1:-1;;;32303:20:0;;;;32237:91;;;;;;;:::i;40340:101::-;;;;;;;;;;-1:-1:-1;40340:101:0;;;;;:::i;:::-;;:::i;7007:586::-;;;;;;;;;;-1:-1:-1;7007:586:0;;;;;:::i;:::-;;:::i;5823:200::-;;;;;;;;;;-1:-1:-1;5986:18:0;5980:25;5823:200;;;1798:25:1;;;1786:2;1771:18;5823:200:0;1652:177:1;32426:154:0;;;;;;;;;;-1:-1:-1;32426:154:0;;;;;:::i;:::-;;:::i;40709:121::-;;;;;;;;;;-1:-1:-1;40709:121:0;;;;;:::i;:::-;;:::i;33539:557::-;;;;;;;;;;-1:-1:-1;33539:557:0;;;;;:::i;:::-;;:::i;26386:630::-;;;:::i;40021:215::-;;;;;;;;;;-1:-1:-1;40021:215:0;;;;;:::i;:::-;;:::i;5387:84::-;;;;;;;;;;-1:-1:-1;5387:84:0;;5461:2;3340:36:1;;3328:2;3313:18;5387:84:0;3198:184:1;39810:206:0;;;;;;;;;;-1:-1:-1;39810:206:0;;;;;:::i;:::-;;:::i;39729:76::-;;;;;;;;;;-1:-1:-1;39729:76:0;;;;;:::i;:::-;;:::i;7730:1081::-;;;;;;;;;;-1:-1:-1;7730:1081:0;;;;;:::i;:::-;;:::i;40446:167::-;;;;;;;;;;-1:-1:-1;40446:167:0;;;;;:::i;:::-;;:::i;27101:466::-;;;:::i;40241:94::-;;;;;;;;;;-1:-1:-1;40241:94:0;;;;;:::i;:::-;;:::i;6092:293::-;;;;;;;;;;-1:-1:-1;6092:293:0;;;;;:::i;:::-;6263:18;6257:4;6250:32;;;6155:14;6296:19;;;;6361:4;6345:21;;6339:28;;6092:293;26121:102;;;:::i;30991:19::-;;;;;;;;;;-1:-1:-1;30991:19:0;;;;-1:-1:-1;;;30991:19:0;;;;;;28826:196;;;;;;;;;;-1:-1:-1;;;28977:27:0;28826:196;;;-1:-1:-1;;;;;3736:32:1;;;3718:51;;3706:2;3691:18;28826:196:0;3572:203:1;39367:275:0;;;;;;;;;;-1:-1:-1;39367:275:0;;;;;:::i;:::-;;:::i;32336:85::-;;;;;;;;;;-1:-1:-1;32404:12:0;;;;;;;;;;;;-1:-1:-1;;;32404:12:0;;;;32336:85;;31133:23;;;;;;;;;;-1:-1:-1;31133:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4645:4:1;4633:17;;;4615:36;;4687:17;;;4682:2;4667:18;;4660:45;4741:17;;;4721:18;;;4714:45;;;;4795:17;;;4790:2;4775:18;;4768:45;4602:3;4587:19;31133:23:0;4400:419:1;40618:86:0;;;;;;;;;;-1:-1:-1;40618:86:0;;;;;:::i;:::-;;:::i;8948:1057::-;;;;;;;;;;-1:-1:-1;8948:1057:0;;;;;:::i;:::-;;:::i;30899:30::-;;;;;;;;;;-1:-1:-1;30899:30:0;;;;;;;-1:-1:-1;;;;;30899:30:0;;;32862:672;;;;;;;;;;-1:-1:-1;32862:672:0;;;;;:::i;:::-;;:::i;39149:213::-;;;;;;;;;;-1:-1:-1;39149:213:0;;;;;:::i;:::-;;:::i;40835:155::-;;;;;;;;;;-1:-1:-1;40835:155:0;;;;;:::i;:::-;;:::i;41461:114::-;;;;;;;;;;-1:-1:-1;41461:114:0;;;;;:::i;:::-;;:::i;31014:26::-;;;;;;;;;;;;;;;;30834:29;;;;;;;;;;-1:-1:-1;30834:29:0;;;;;;;;;;;30933;;;;;;;;;;-1:-1:-1;30933:29:0;;;;-1:-1:-1;;;;;30933:29:0;;;6483:388;;;;;;;;;;-1:-1:-1;6483:388:0;;;;;:::i;:::-;6706:4;6699:21;6747:20;6741:4;6734:34;;;6599:14;6782:19;;;;6847:4;6831:21;;6825:28;;6483:388;40995:274;;;;;;;;;;-1:-1:-1;40995:274:0;;;;;:::i;:::-;;:::i;27758:724::-;;;;;;:::i;:::-;;:::i;25695:358::-;;;;;;:::i;:::-;;:::i;29128:449::-;;;;;;;;;;-1:-1:-1;29128:449:0;;;;;:::i;:::-;29407:19;29401:4;29394:33;;;29251:14;29441:26;;;;29553:4;29537:21;;29531:28;;29128:449;41274:182;29974:13;:11;:13::i;:::-;41361:1:::1;41349:9;:13;41341:81;;;;-1:-1:-1::0;;;41341:81:0::1;;;;;;;:::i;:::-;;;;;;;;;41427:12;:24:::0;41274:182::o;40340:101::-;29974:13;:11;:13::i;:::-;40410:15:::1;:26:::0;;-1:-1:-1;;;;;40410:26:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;40410:26:0;;::::1;::::0;;;::::1;::::0;;40340:101::o;7007:586::-;7081:4;7244:7;7238:4;7231:21;7279:20;7273:4;7266:34;7327:8;7321:4;7314:22;7380:6;7373:4;7367;7357:21;7350:37;7457:6;7451:4;7444:20;7546:4;7540:11;7536:2;7532:20;7522:8;7495:25;7489:4;7483;7478:75;-1:-1:-1;7581:4:0;7007:586;;;;;:::o;32426:154::-;29974:13;:11;:13::i;:::-;32489:11:::1;::::0;:16;32481:46:::1;;;::::0;-1:-1:-1;;;32481:46:0;;6096:2:1;32481:46:0::1;::::0;::::1;6078:21:1::0;6135:2;6115:18;;;6108:30;-1:-1:-1;;;6154:18:1;;;6147:47;6211:18;;32481:46:0::1;5894:341:1::0;32481:46:0::1;32546:12;32532:11;:26:::0;32563:5:::1;:12:::0;;-1:-1:-1;;;;;;32563:12:0::1;-1:-1:-1::0;;;;;32563:12:0;;;::::1;::::0;;;::::1;::::0;;32426:154::o;40709:121::-;29974:13;:11;:13::i;:::-;-1:-1:-1;;;;;40791:23:0;;;::::1;;::::0;;;:10:::1;:23;::::0;;;;:34;;-1:-1:-1;;40791:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40709:121::o;33539:557::-;33628:4;33639:33;33655:4;33661:2;33665:6;33639:15;:33::i;:::-;-1:-1:-1;;;;;33728:14:0;;33709:16;33728:14;;;:8;:14;;;;;;;;;:30;;-1:-1:-1;;;;;;33746:12:0;;;;;;:8;:12;;;;;;;;33728:30;33709:49;;33767:11;:32;;;;33782:17;33790:4;33796:2;33782:7;:17::i;:::-;33763:111;;;33807:44;33821:4;33827:2;33831:6;33839:11;33807:13;:44::i;:::-;33864:4;33857:11;;;;;33763:111;34055:36;34074:4;34080:2;34084:6;34055:18;:36::i;:::-;34048:43;;;33539:557;;;;;;:::o;26386:630::-;26481:15;25311:9;26499:46;;:15;:46;26481:64;;26717:19;26711:4;26704:33;26768:8;26762:4;26755:22;26825:7;26818:4;26812;26802:21;26795:38;26974:8;26927:45;26924:1;26921;26916:67;26617:381;26386:630::o;40021:215::-;29974:13;:11;:13::i;:::-;40138:2:::1;40112:23;40125:10:::0;40112;:23:::1;:::i;:::-;:28;;;40104:61;;;::::0;-1:-1:-1;;;40104:61:0;;6727:2:1;40104:61:0::1;::::0;::::1;6709:21:1::0;6766:2;6746:18;;;6739:30;-1:-1:-1;;;6785:18:1;;;6778:50;6845:18;;40104:61:0::1;6525:344:1::0;40104:61:0::1;40170:4;:28:::0;;-1:-1:-1;;40203:28:0;40170;::::1;::::0;;::::1;;-1:-1:-1::0;;40203:28:0;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;40021:215::o;39810:206::-;29974:13;:11;:13::i;:::-;39922:2:::1;39898:21;39910:9:::0;39898;:21:::1;:::i;:::-;:26;;;39890:59;;;::::0;-1:-1:-1;;;39890:59:0;;6727:2:1;39890:59:0::1;::::0;::::1;6709:21:1::0;6766:2;6746:18;;;6739:30;-1:-1:-1;;;6785:18:1;;;6778:50;6845:18;;39890:59:0::1;6525:344:1::0;39890:59:0::1;39954:4;:26:::0;;::::1;39985::::0;;::::1;39954;39985;-1:-1:-1::0;;39985:26:0;;;39954;;;::::1;39985::::0;;;;;;;::::1;::::0;;39810:206::o;39729:76::-;29974:13;:11;:13::i;:::-;39786:7:::1;:14:::0;;;::::1;;-1:-1:-1::0;;;39786:14:0::1;-1:-1:-1::0;;;;39786:14:0;;::::1;::::0;;;::::1;::::0;;39729:76::o;7730:1081::-;7818:4;7979:7;7973:4;7966:21;8014:20;8008:4;8001:34;8062:8;8056:4;8049:22;8122:4;8116;8106:21;8170:13;8164:20;8279:10;8262:15;8258:32;8364:15;8348:14;8345:35;8342:159;;;8413:10;8407:4;8400:24;8481:4;8475;8468:18;8342:159;8582:14;8567:13;8560:37;8667:14;8661:4;8654:28;;;;8764:4;8758:11;8754:2;8750:20;8740:8;8713:25;8707:4;8701;8696:75;-1:-1:-1;8799:4:0;7730:1081;;;;:::o;40446:167::-;29974:13;:11;:13::i;:::-;-1:-1:-1;;;;;40523:22:0;::::1;40515:63;;;::::0;-1:-1:-1;;;40515:63:0;;7076:2:1;40515:63:0::1;::::0;::::1;7058:21:1::0;7115:2;7095:18;;;7088:30;7154;7134:18;;;7127:58;7202:18;;40515:63:0::1;6874:352:1::0;40515:63:0::1;40583:14;:25:::0;;-1:-1:-1;;;;;;40583:25:0::1;-1:-1:-1::0;;;;;40583:25:0;;;::::1;::::0;;;::::1;::::0;;40446:167::o;27101:466::-;27307:19;27301:4;27294:33;27354:8;27348:4;27341:22;27407:1;27400:4;27394;27384:21;27377:32;27540:8;27494:44;27491:1;27488;27483:66;27101:466::o;40241:94::-;29974:13;:11;:13::i;:::-;40306::::1;:24:::0;;-1:-1:-1;;40306:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40241:94::o;26121:102::-;29974:13;:11;:13::i;:::-;26194:21:::1;26212:1;26194:9;:21::i;:::-;26121:102::o:0;39367:275::-;29974:13;:11;:13::i;:::-;39453:11:::1;::::0;:16;;:54:::1;;;39502:5;39488:11;;39473:12;:26;;;;:::i;:::-;:34;39453:54;39445:98;;;::::0;-1:-1:-1;;;39445:98:0;;7566:2:1;39445:98:0::1;::::0;::::1;7548:21:1::0;7605:2;7585:18;;;7578:30;7644:33;7624:18;;;7617:61;7695:18;;39445:98:0::1;7364:355:1::0;39445:98:0::1;39553:9;39548:90;39568:21:::0;;::::1;39548:90;;;39628:4;39602:8;:23;39611:10;;39622:1;39611:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39602:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;39602:23:0;:30;;-1:-1:-1;;39602:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39591:3;::::1;::::0;::::1;:::i;:::-;;;;39548:90;;;;39367:275:::0;;:::o;40618:86::-;29974:13;:11;:13::i;:::-;40679:10:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;40679:20:0;;::::1;::::0;;;::::1;::::0;;40618:86::o;8948:1057::-;9036:4;9197:7;9191:4;9184:21;9232:20;9226:4;9219:34;9280:8;9274:4;9267:22;9340:4;9334;9324:21;9388:13;9382:20;9481:10;9464:15;9461:31;9458:156;;;9525:10;9519:4;9512:24;9594:4;9588;9581:18;9458:156;9729:10;9712:15;9708:32;9686:54;;9776:14;9761:13;9754:37;9861:14;9855:4;9848:28;;;9958:4;9952:11;9948:2;9944:20;9934:8;9907:25;9901:4;9895;9890:75;-1:-1:-1;9993:4:0;8948:1057;;;;:::o;32862:672::-;32933:4;32944:39;32960:10;32972:2;32976:6;32944:15;:39::i;:::-;33043:10;33015:16;33034:20;;;:8;:20;;;;;;;;;:36;;-1:-1:-1;;;;;;33058:12:0;;;;;;:8;:12;;;;;;;;33034:36;33015:55;;33079:11;:38;;;;33094:23;33102:10;33114:2;33094:7;:23::i;:::-;33075:372;;;33164:5;;33125:11;;33139:52;;-1:-1:-1;;;;;33164:5:0;33150:10;:19;33171:6;33179:11;33139:10;:52::i;:::-;33125:66;-1:-1:-1;33201:7:0;;33197:190;;33316:3;33307:6;:12;33298:21;;33333:47;33349:10;33369:4;33376:3;33333:15;:47::i;:::-;33402:5;;-1:-1:-1;;;;;33402:5:0;;;33396:11;;;;33392:50;;33416:19;:17;:19::i;:::-;33119:328;33075:372;33503:26;33518:2;33522:6;33503:14;:26::i;:::-;33496:33;32862:672;-1:-1:-1;;;;32862:672:0:o;39149:213::-;29974:13;:11;:13::i;:::-;39232:4:::1;39231:5;:25;;;-1:-1:-1::0;39240:11:0::1;::::0;:16;39231:25:::1;:63;;;;39289:5;39275:11;;39260:12;:26;;;;:::i;:::-;:34;39231:63;39223:107;;;::::0;-1:-1:-1;;;39223:107:0;;7566:2:1;39223:107:0::1;::::0;::::1;7548:21:1::0;7605:2;7585:18;;;7578:30;7644:33;7624:18;;;7617:61;7695:18;;39223:107:0::1;7364:355:1::0;39223:107:0::1;-1:-1:-1::0;;;;;39335:15:0;;;::::1;;::::0;;;:8:::1;:15;::::0;;;;:22;;-1:-1:-1;;39335:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39149:213::o;40835:155::-;29974:13;:11;:13::i;:::-;40927:4:::1;40911:13;5986:18:::0;5980:25;;5823:200;40911:13:::1;:20;;;;:::i;:::-;40901:6;:30;;40893:72;;;::::0;-1:-1:-1;;;40893:72:0;;8420:2:1;40893:72:0::1;::::0;::::1;8402:21:1::0;8459:2;8439:18;;;8432:30;8498:31;8478:18;;;8471:59;8547:18;;40893:72:0::1;8218:353:1::0;40893:72:0::1;40970:6;:15:::0;40835:155::o;41461:114::-;41535:7;41556:14;41564:6;41556:5;:14;:::i;40995:274::-;29974:13;:11;:13::i;:::-;41081:1:::1;41069:9;:13;41061:81;;;;-1:-1:-1::0;;;41061:81:0::1;;;;;;;:::i;:::-;41184:3;41168:13;5986:18:::0;5980:25;;5823:200;41168:13:::1;:19;;;;:::i;:::-;41155:9;:32;;41147:89;;;::::0;-1:-1:-1;;;41147:89:0;;8908:2:1;41147:89:0::1;::::0;::::1;8890:21:1::0;8947:2;8927:18;;;8920:30;8986:34;8966:18;;;8959:62;-1:-1:-1;;;9037:18:1;;;9030:42;9089:19;;41147:89:0::1;8706:408:1::0;41147:89:0::1;41241:11;:23:::0;40995:274::o;27758:724::-;29974:13;:11;:13::i;:::-;27996:19:::1;27990:4;27983:33;28043:12;28037:4;28030:26;28106:4;28100;28090:21;28214:12;28208:19;28195:11;28192:36;28189:160;;;28261:10;28255:4;28248:24;28329:4;28323;28316:18;28189:160;28428:1;28407:23:::0;;28451::::1;28461:12:::0;28451:9:::1;:23::i;:::-;27758:724:::0;:::o;25695:358::-;29974:13;:11;:13::i;:::-;25870:8:::1;25866:2;25862:17;25852:153;;25913:10;25907:4;25900:24;25985:4;25979;25972:18;25852:153;26026:19;26036:8;26026:9;:19::i;24607:373::-:0;-1:-1:-1;;24817:27:0;24807:8;24804:41;24794:168;;24879:10;24873:4;24866:24;24942:4;24936;24929:18;35304:408;35402:7;;-1:-1:-1;;;35402:7:0;;;;:28;;;;-1:-1:-1;;;28977:27:0;-1:-1:-1;;;;;35413:17:0;:6;-1:-1:-1;;;;;35413:17:0;;;35402:28;:55;;;;-1:-1:-1;;;;;;35434:23:0;;35452:4;35434:23;;35402:55;35398:310;;;35514:6;;35500:11;35549:33;35572:9;35549:22;:33::i;:::-;35526:56;;35601:3;35592:6;:12;:73;;;;35610:15;35609:16;:55;;;;-1:-1:-1;6263:18:0;6257:4;6250:32;;;6155:14;6296:19;;;6361:4;6345:21;;6339:28;35661:3;;35629:29;;35652:6;;35629:29;:::i;:::-;:35;35609:55;35588:115;;;35681:15;;-1:-1:-1;;;35681:15:0;;;;;;;;;;;35588:115;35459:249;;35304:408;;;:::o;35796:228::-;35896:5;;35870:4;;-1:-1:-1;;;;;35896:5:0;;;;35914:14;;;;;:35;;;35945:4;-1:-1:-1;;;;;35932:17:0;:9;-1:-1:-1;;;;;35932:17:0;;35914:35;:55;;;-1:-1:-1;35953:11:0;;:16;35914:55;35913:80;;;;-1:-1:-1;;;;;;35975:18:0;;;;;;:10;:18;;;;;;;;35974:19;35913:80;:106;;;;-1:-1:-1;;;;;;;;35998:21:0;;;;;:10;:21;;;;;;;;35997:22;;35796:228;-1:-1:-1;35796:228:0:o;34101:1138::-;34414:10;6706:4;6699:21;;;6747:20;6741:4;6734:34;;;34380:15;6782:19;;;6847:4;6831:21;;;6825:28;6699:21;;;;6734:34;;;6782:19;;;;6831:21;6825:28;-1:-1:-1;;34430:84:0;;;34485:23;;-1:-1:-1;;;34485:23:0;;;;;;;;;;;34430:84;-1:-1:-1;;34579:7:0;:28;34575:87;;34615:41;34631:4;34637:10;34649:6;34615:15;:41::i;:::-;34701:5;;34668:11;;34682:46;;-1:-1:-1;;;;;34693:13:0;;;34701:5;;34693:13;34708:6;34716:11;34682:10;:46::i;:::-;34668:60;-1:-1:-1;34737:7:0;;34733:412;;34849:3;34840:6;:12;34831:21;;35098:41;35114:4;35128;35135:3;35098:15;:41::i;:::-;35159:5;;-1:-1:-1;;;;;35159:5:0;;;35153:11;;;;35149:48;;35172:19;:17;:19::i;:::-;35201:33;35217:4;35223:2;35227:6;35201:15;:33::i;:::-;34192:1047;;34101:1138;;;;:::o;11905:2150::-;11993:4;12099;12095:2;12091:13;12194:8;12188:4;12181:22;12240:20;12233:5;12230:31;12224:4;12217:45;12313:4;12307;12297:21;12356:13;12350:20;12480:1;12476:6;12464:10;12461:22;12451:438;;12600:10;12592:6;12589:22;12586:162;;;12648:10;12642:4;12635:24;12724:4;12718;12711:18;12586:162;12866:6;12854:10;12850:23;12835:13;12828:46;12451:438;;;12987:18;12980:5;12977:29;12971:4;12964:43;13060:4;13054;13044:21;13104:15;13098:22;13196:11;13188:6;13185:23;13182:149;;;13241:10;13235:4;13228:24;13311:4;13305;13298:18;13182:149;13442:6;13429:11;13425:24;13408:15;13401:49;;;13527:2;13521:4;13514:16;13581:4;13575;13565:21;13835:6;13819:13;13813:20;13809:33;13794:13;13787:56;;13913:6;13907:4;13900:20;14008:4;14002:11;13998:2;13994:20;13986:5;13982:2;13978:14;13951:25;13945:4;13939;13934:81;-1:-1:-1;14043:4:0;;11905:2150;-1:-1:-1;;;;11905:2150:0:o;24040:506::-;-1:-1:-1;;24423:16:0;;-1:-1:-1;;;;;24277:26:0;;;;;;24383:38;24380:1;;24372:78;24501:27;24040:506::o;36090:268::-;36178:7;36196:6;36206:1;36196:11;36192:37;;-1:-1:-1;36222:1:0;36215:8;;36192:37;36233:14;36250:30;36261:5;36268:11;36250:10;:30::i;:::-;36233:47;-1:-1:-1;36289:10:0;;36285:56;;36332:3;36314:15;36323:6;36314;:15;:::i;:::-;:21;;;;:::i;:::-;36307:28;;;;;36285:56;-1:-1:-1;36352:1:0;;36090:268;-1:-1:-1;;;;36090:268:0:o;15910:1327::-;16088:4;16084:2;16080:13;16191:18;16184:5;16181:29;16175:4;16168:43;16264:4;16258;16248:21;16308:15;16302:22;16400:11;16392:6;16389:23;16386:149;;;16445:10;16439:4;16432:24;16515:4;16509;16502:18;16386:149;16646:6;16633:11;16629:24;16612:15;16605:49;;;16731:2;16725:4;16718:16;16785:4;16779;16769:21;17039:6;17023:13;17017:20;17013:33;16998:13;16991:56;;17117:6;17111:4;17104:20;17212:4;17206:11;17202:2;17198:20;17190:5;17186:2;17182:14;17155:25;17149:4;17143;17138:81;;15910:1327;;;:::o;36427:373::-;6263:18;6257:4;6250:32;;;36513:4;36469:23;6296:19;;;6361:4;6345:21;;;6339:28;36528:10;;;;;;;:22;;;;-1:-1:-1;36543:7:0;;;;;;;36542:8;36528:22;:57;;;;;36573:12;;36554:15;:31;;36528:57;36524:272;;;36618:11;;36639:18;;36635:156;;36700:15;36683:14;:32;:67;;36736:14;36683:67;;;36718:15;36683:67;36666:84;;36757:27;36769:14;36757:11;:27::i;:::-;36587:209;36464:336;36427:373::o;10200:1326::-;10270:4;10429:18;10423:4;10416:32;10475:8;10469:4;10462:22;10537:4;10531;10521:21;10581:15;10575:22;10673:11;10665:6;10662:23;10659:149;;;10718:10;10712:4;10705:24;10788:4;10782;10775:18;10659:149;10919:6;10906:11;10902:24;10885:15;10878:49;;;11004:2;10998:4;10991:16;11058:4;11052;11042:21;11312:6;11296:13;11290:20;11286:33;11271:13;11264:56;;11390:6;11384:4;11377:20;11479:4;11473:11;11469:2;11465:20;11455:8;11428:25;11422:4;11416;11411:75;-1:-1:-1;11514:4:0;10200:1326;;;;:::o;37359:237::-;37431:4;-1:-1:-1;;;;;37449:25:0;;37469:4;37449:25;;:55;;-1:-1:-1;;;;;;37482:22:0;;;37449:55;:90;;;-1:-1:-1;;;;;;37512:27:0;;37532:6;37512:27;37449:90;:115;;;-1:-1:-1;37559:5:0;;-1:-1:-1;;;;;37547:17:0;;;37559:5;;37547:17;37449:115;:142;;;-1:-1:-1;;;;28977:27:0;-1:-1:-1;;;;;37572:19:0;;;;;;;37359:237::o;17618:979::-;17863:7;17857:4;17850:21;17898:20;17892:4;17885:34;17946:5;17940:4;17933:19;18003:4;17997;17987:21;18046:13;18040:20;18170:1;18166:6;18154:10;18151:22;18141:438;;18290:10;18282:6;18279:22;18276:162;;;18338:10;18332:4;18325:24;18414:4;18408;18401:18;18276:162;18540:23;;;;18518:46;;-1:-1:-1;;17618:979:0:o;36856:394::-;36928:7;36975:11;36971:51;;;37001:5;:15;;37014:2;37001:15;;;37009:2;37001:15;36994:22;;;;;;36971:51;37051:11;;37066:1;37051:16;37047:56;;37082:5;:15;;37095:2;37082:15;;37047:56;37127:5;37123:61;;;37164:4;:14;37147:31;;37164:14;;;;;;37147;;;:31;:::i;37123:61::-;37230:4;:15;37212:33;;37230:15;;;;;;;37212;;;;:33;:::i;:::-;37205:40;;;36856:394;-1:-1:-1;;;36856:394:0:o;37601:614::-;31365:7;;;;;;;31361:47;;;31387:15;;-1:-1:-1;;;31387:15:0;;;;;;;;;;;31361:47;31412:7;:14;;-1:-1:-1;;31412:14:0;;;;;;;;37768:13;37764:418:::1;;;37823:4;:15:::0;37789:13:::1;::::0;37805:33:::1;::::0;37823:15:::1;::::0;;::::1;::::0;::::1;::::0;37805;;::::1;;:33;:::i;:::-;37881:4;:15:::0;37789:49:::1;::::0;;::::1;::::0;-1:-1:-1;37844:20:0::1;::::0;37908:1:::1;::::0;37789:49;;37868:28:::1;::::0;37881:15;;::::1;;37868:10:::0;:28:::1;:::i;:::-;:36;;;;:::i;:::-;37867:42;;;;:::i;:::-;37844:65:::0;-1:-1:-1;37939:21:0::1;37966:32;37972:25;37844:65:::0;37972:10;:25:::1;:::i;:::-;37966:5;:32::i;:::-;38004:21;38028:37;38052:13:::0;38028:21:::1;:37;:::i;:::-;38004:61:::0;-1:-1:-1;38071:70:0::1;38085:12:::0;38130:10;38099:28:::1;38085:12:::0;38004:61;38099:28:::1;:::i;:::-;:41;;;;:::i;:::-;38071:13;:70::i;:::-;37783:364;;;;37764:418;;;38159:17;38165:10;38159:5;:17::i;:::-;38186:24;:22;:24::i;:::-;-1:-1:-1::0;31447:5:0;31437:15;;-1:-1:-1;;31437:15:0;;;37601:614::o;38254:325::-;38322:16;;;38336:1;38322:16;;;;;;;;38298:21;;38322:16;;;;;;;;;;-1:-1:-1;38322:16:0;38298:40;;38361:4;38343;38348:1;38343:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38343:23:0;;;:7;;;;;;;;;;:23;;;;38402:7;;38425:13;;;-1:-1:-1;;;38425:13:0;;;;38402:7;;;;;;;38425:11;;:13;;;;;;;;;;38402:7;38425:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38415:4;38420:1;38415:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38415:23:0;;;:7;;;;;;;;;:23;38443:131;;-1:-1:-1;;;38443:131:0;;:57;;;;;;:131;;38506:6;;38518:1;;38525:4;;38543;;38554:15;;38443:131;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38293:286;;38254:325;:::o;38584:209::-;38660:7;;;38747:15;;38649:139;;-1:-1:-1;;;38649:139:0;;38710:4;38649:139;;;11006:34:1;11056:18;;;11049:34;;;11099:18;;;11092:34;;;11142:18;;;11135:34;;;;38747:15:0;;;-1:-1:-1;;;;;38747:15:0;;;11185:19:1;;;11178:44;38768:15:0;11238:19:1;;;11231:35;38660:7:0;;;;38649:35;;38692:3;;10940:19:1;;38649:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38911:105::-;38958:14;;:53;;-1:-1:-1;;;;;38958:14:0;;;;38985:21;;38958:53;;;;38985:21;38958:14;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39548:90:::1;39367:275:::0;;:::o;206:180:1:-;265:6;318:2;306:9;297:7;293:23;289:32;286:52;;;334:1;331;324:12;286:52;-1:-1:-1;357:23:1;;206:180;-1:-1:-1;206:180:1:o;391:548::-;503:4;532:2;561;550:9;543:21;593:6;587:13;636:6;631:2;620:9;616:18;609:34;661:1;671:140;685:6;682:1;679:13;671:140;;;780:14;;;776:23;;770:30;746:17;;;765:2;742:26;735:66;700:10;;671:140;;;675:3;860:1;855:2;846:6;835:9;831:22;827:31;820:42;930:2;923;919:7;914:2;906:6;902:15;898:29;887:9;883:45;879:54;871:62;;;;391:548;;;;:::o;944:131::-;-1:-1:-1;;;;;1019:31:1;;1009:42;;999:70;;1065:1;1062;1055:12;1080:247;1139:6;1192:2;1180:9;1171:7;1167:23;1163:32;1160:52;;;1208:1;1205;1198:12;1160:52;1247:9;1234:23;1266:31;1291:5;1266:31;:::i;1332:315::-;1400:6;1408;1461:2;1449:9;1440:7;1436:23;1432:32;1429:52;;;1477:1;1474;1467:12;1429:52;1516:9;1503:23;1535:31;1560:5;1535:31;:::i;:::-;1585:5;1637:2;1622:18;;;;1609:32;;-1:-1:-1;;;1332:315:1:o;1834:160::-;1899:20;;1955:13;;1948:21;1938:32;;1928:60;;1984:1;1981;1974:12;1928:60;1834:160;;;:::o;1999:315::-;2064:6;2072;2125:2;2113:9;2104:7;2100:23;2096:32;2093:52;;;2141:1;2138;2131:12;2093:52;2180:9;2167:23;2199:31;2224:5;2199:31;:::i;:::-;2249:5;-1:-1:-1;2273:35:1;2304:2;2289:18;;2273:35;:::i;:::-;2263:45;;1999:315;;;;;:::o;2319:456::-;2396:6;2404;2412;2465:2;2453:9;2444:7;2440:23;2436:32;2433:52;;;2481:1;2478;2471:12;2433:52;2520:9;2507:23;2539:31;2564:5;2539:31;:::i;:::-;2589:5;-1:-1:-1;2646:2:1;2631:18;;2618:32;2659:33;2618:32;2659:33;:::i;:::-;2319:456;;2711:7;;-1:-1:-1;;;2765:2:1;2750:18;;;;2737:32;;2319:456::o;2780:156::-;2846:20;;2906:4;2895:16;;2885:27;;2875:55;;2926:1;2923;2916:12;2941:252;3005:6;3013;3066:2;3054:9;3045:7;3041:23;3037:32;3034:52;;;3082:1;3079;3072:12;3034:52;3105:27;3122:9;3105:27;:::i;:::-;3095:37;;3151:36;3183:2;3172:9;3168:18;3151:36;:::i;3387:180::-;3443:6;3496:2;3484:9;3475:7;3471:23;3467:32;3464:52;;;3512:1;3509;3502:12;3464:52;3535:26;3551:9;3535:26;:::i;3780:615::-;3866:6;3874;3927:2;3915:9;3906:7;3902:23;3898:32;3895:52;;;3943:1;3940;3933:12;3895:52;3983:9;3970:23;4012:18;4053:2;4045:6;4042:14;4039:34;;;4069:1;4066;4059:12;4039:34;4107:6;4096:9;4092:22;4082:32;;4152:7;4145:4;4141:2;4137:13;4133:27;4123:55;;4174:1;4171;4164:12;4123:55;4214:2;4201:16;4240:2;4232:6;4229:14;4226:34;;;4256:1;4253;4246:12;4226:34;4309:7;4304:2;4294:6;4291:1;4287:14;4283:2;4279:23;4275:32;4272:45;4269:65;;;4330:1;4327;4320:12;4269:65;4361:2;4353:11;;;;;4383:6;;-1:-1:-1;3780:615:1;;-1:-1:-1;;;;3780:615:1:o;4824:248::-;4892:6;4900;4953:2;4941:9;4932:7;4928:23;4924:32;4921:52;;;4969:1;4966;4959:12;4921:52;-1:-1:-1;;4992:23:1;;;5062:2;5047:18;;;5034:32;;-1:-1:-1;4824:248:1:o;5077:388::-;5145:6;5153;5206:2;5194:9;5185:7;5181:23;5177:32;5174:52;;;5222:1;5219;5212:12;5174:52;5261:9;5248:23;5280:31;5305:5;5280:31;:::i;:::-;5330:5;-1:-1:-1;5387:2:1;5372:18;;5359:32;5400:33;5359:32;5400:33;:::i;:::-;5452:7;5442:17;;;5077:388;;;;;:::o;5470:419::-;5672:2;5654:21;;;5711:2;5691:18;;;5684:30;5750:34;5745:2;5730:18;;5723:62;5821:25;5816:2;5801:18;;5794:53;5879:3;5864:19;;5470:419::o;6240:127::-;6301:10;6296:3;6292:20;6289:1;6282:31;6332:4;6329:1;6322:15;6356:4;6353:1;6346:15;6372:148;6460:4;6439:12;;;6453;;;6435:31;;6478:13;;6475:39;;;6494:18;;:::i;7231:128::-;7298:9;;;7319:11;;;7316:37;;;7333:18;;:::i;7724:127::-;7785:10;7780:3;7776:20;7773:1;7766:31;7816:4;7813:1;7806:15;7840:4;7837:1;7830:15;7856:135;7895:3;7916:17;;;7913:43;;7936:18;;:::i;:::-;-1:-1:-1;7983:1:1;7972:13;;7856:135::o;7996:217::-;8036:1;8062;8052:132;;8106:10;8101:3;8097:20;8094:1;8087:31;8141:4;8138:1;8131:15;8169:4;8166:1;8159:15;8052:132;-1:-1:-1;8198:9:1;;7996:217::o;8576:125::-;8641:9;;;8662:10;;;8659:36;;;8675:18;;:::i;9119:168::-;9192:9;;;9223;;9240:15;;;9234:22;;9220:37;9210:71;;9261:18;;:::i;9424:251::-;9494:6;9547:2;9535:9;9526:7;9522:23;9518:32;9515:52;;;9563:1;9560;9553:12;9515:52;9595:9;9589:16;9614:31;9639:5;9614:31;:::i;9680:980::-;9942:4;9990:3;9979:9;9975:19;10021:6;10010:9;10003:25;10047:2;10085:6;10080:2;10069:9;10065:18;10058:34;10128:3;10123:2;10112:9;10108:18;10101:31;10152:6;10187;10181:13;10218:6;10210;10203:22;10256:3;10245:9;10241:19;10234:26;;10295:2;10287:6;10283:15;10269:29;;10316:1;10326:195;10340:6;10337:1;10334:13;10326:195;;;10405:13;;-1:-1:-1;;;;;10401:39:1;10389:52;;10496:15;;;;10461:12;;;;10437:1;10355:9;10326:195;;;-1:-1:-1;;;;;;;10577:32:1;;;;10572:2;10557:18;;10550:60;-1:-1:-1;;;10641:3:1;10626:19;10619:35;10538:3;9680:980;-1:-1:-1;;;9680:980:1:o;11277:306::-;11365:6;11373;11381;11434:2;11422:9;11413:7;11409:23;11405:32;11402:52;;;11450:1;11447;11440:12;11402:52;11479:9;11473:16;11463:26;;11529:2;11518:9;11514:18;11508:25;11498:35;;11573:2;11562:9;11558:18;11552:25;11542:35;;11277:306;;;;;:::o

Swarm Source

ipfs://6f4fa484a56cdf1496c666e8d983fceb9739de4b29fbd8088643726add35a38b

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

OVERVIEW

Prodigy Bot is a multichain trading suite that allows you to manage assets and trading from a simple to use Telegram chat. The token allows holders to access premium features, discounted fees, and fee revenue.

Loading...
Loading
[ Download: CSV Export  ]
[ 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.