ETH Price: $2,636.87 (+1.99%)
Gas: 0.83 Gwei

Token

DEFUSION.AI (DEFUSIONAI)
 

Overview

Max Total Supply

203 DEFUSIONAI

Holders

186

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 DEFUSIONAI
0x1fb44f218c5ed930ebbebcefcd7169610939ac8f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DefusionAiProxy

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 1 : DefusionAiProxy.sol
/***
 * 
 * 
    ██████╗ ███████╗███████╗██╗   ██╗███████╗██╗ ██████╗ ███╗   ██╗ █████╗ ██╗
    ██╔══██╗██╔════╝██╔════╝██║   ██║██╔════╝██║██╔═══██╗████╗  ██║██╔══██╗██║
    ██║  ██║█████╗  █████╗  ██║   ██║███████╗██║██║   ██║██╔██╗ ██║███████║██║
    ██║  ██║██╔══╝  ██╔══╝  ██║   ██║╚════██║██║██║   ██║██║╚██╗██║██╔══██║██║
    ██████╔╝███████╗██║     ╚██████╔╝███████║██║╚██████╔╝██║ ╚████║██║  ██║██║
    ╚═════╝ ╚══════╝╚═╝      ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝  ╚═══╝╚═╝  ╚═╝╚═╝
 *    
 * https://defusion.ai
                                  
* MIT License
* ===========
*
* Copyright (c) 2023 defusionai
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/// File: @openzeppelin/contracts/proxy/Proxy.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (proxy/Proxy.sol)

pragma solidity ^0.8.0;

/**
 * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internal call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal virtual {
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function
     * and {_fallback} should delegate.
     */
    function _implementation() internal view virtual returns (address);

    /**
     * @dev Delegates the current call to the address returned by `_implementation()`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */
    function _fallback() internal virtual {
        _beforeFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback() external payable virtual {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive() external payable virtual {
        _fallback();
    }

    /**
     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
     * call, or as part of the Solidity `fallback` or `receive` functions.
     *
     * If overriden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {}
}

// File: @openzeppelin/contracts/proxy/beacon/IBeacon.sol


// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)

pragma solidity ^0.8.0;

/**
 * @dev This is the interface that {BeaconProxy} expects of its beacon.
 */
interface IBeacon {
    /**
     * @dev Must return an address that can be used as a delegate call target.
     *
     * {BeaconProxy} will check that this address is a contract.
     */
    function implementation() external view returns (address);
}

// File: @openzeppelin/contracts/interfaces/draft-IERC1822.sol


// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)

pragma solidity ^0.8.0;

/**
 * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified
 * proxy whose upgrades are fully controlled by the current implementation.
 */
interface IERC1822Proxiable {
    /**
     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation
     * address.
     *
     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks
     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this
     * function revert if invoked through a proxy.
     */
    function proxiableUUID() external view returns (bytes32);
}

// File: @openzeppelin/contracts/utils/Address.sol


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/StorageSlot.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Library for reading and writing primitive types to specific storage slots.
 *
 * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
 * This library helps with reading and writing to such slots without the need for inline assembly.
 *
 * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
 *
 * Example usage to set ERC1967 implementation slot:
 * ```
 * contract ERC1967 {
 *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
 *
 *     function _getImplementation() internal view returns (address) {
 *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
 *     }
 *
 *     function _setImplementation(address newImplementation) internal {
 *         require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
 *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
 *     }
 * }
 * ```
 *
 * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._
 */
library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    /**
     * @dev Returns an `AddressSlot` with member `value` located at `slot`.
     */
    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
     */
    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
     */
    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
     */
    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
        assembly {
            r.slot := slot
        }
    }
}

// File: @openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol


// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)

pragma solidity ^0.8.2;




/**
 * @dev This abstract contract provides getters and event emitting update functions for
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.
 *
 * _Available since v4.1._
 *
 * @custom:oz-upgrades-unsafe-allow delegatecall
 */
abstract contract ERC1967Upgrade {
    // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1
    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;

    /**
     * @dev Storage slot with the address of the current implementation.
     * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /**
     * @dev Emitted when the implementation is upgraded.
     */
    event Upgraded(address indexed implementation);

    /**
     * @dev Returns the current implementation address.
     */
    function _getImplementation() internal view returns (address) {
        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
    }

    /**
     * @dev Stores a new address in the EIP1967 implementation slot.
     */
    function _setImplementation(address newImplementation) private {
        require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
    }

    /**
     * @dev Perform implementation upgrade
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeTo(address newImplementation) internal {
        _setImplementation(newImplementation);
        emit Upgraded(newImplementation);
    }

    /**
     * @dev Perform implementation upgrade with additional setup call.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeToAndCall(
        address newImplementation,
        bytes memory data,
        bool forceCall
    ) internal {
        _upgradeTo(newImplementation);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(newImplementation, data);
        }
    }

    /**
     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.
     *
     * Emits an {Upgraded} event.
     */
    function _upgradeToAndCallUUPS(
        address newImplementation,
        bytes memory data,
        bool forceCall
    ) internal {
        // Upgrades from old implementations will perform a rollback test. This test requires the new
        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing
        // this special case will break upgrade paths from old UUPS implementation to new ones.
        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {
            _setImplementation(newImplementation);
        } else {
            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {
                require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID");
            } catch {
                revert("ERC1967Upgrade: new implementation is not UUPS");
            }
            _upgradeToAndCall(newImplementation, data, forceCall);
        }
    }

    /**
     * @dev Storage slot with the admin of the contract.
     * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

    /**
     * @dev Emitted when the admin account has changed.
     */
    event AdminChanged(address previousAdmin, address newAdmin);

    /**
     * @dev Returns the current admin.
     */
    function _getAdmin() internal view returns (address) {
        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;
    }

    /**
     * @dev Stores a new address in the EIP1967 admin slot.
     */
    function _setAdmin(address newAdmin) private {
        require(newAdmin != address(0), "ERC1967: new admin is the zero address");
        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;
    }

    /**
     * @dev Changes the admin of the proxy.
     *
     * Emits an {AdminChanged} event.
     */
    function _changeAdmin(address newAdmin) internal {
        emit AdminChanged(_getAdmin(), newAdmin);
        _setAdmin(newAdmin);
    }

    /**
     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.
     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.
     */
    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;

    /**
     * @dev Emitted when the beacon is upgraded.
     */
    event BeaconUpgraded(address indexed beacon);

    /**
     * @dev Returns the current beacon.
     */
    function _getBeacon() internal view returns (address) {
        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;
    }

    /**
     * @dev Stores a new beacon in the EIP1967 beacon slot.
     */
    function _setBeacon(address newBeacon) private {
        require(Address.isContract(newBeacon), "ERC1967: new beacon is not a contract");
        require(
            Address.isContract(IBeacon(newBeacon).implementation()),
            "ERC1967: beacon implementation is not a contract"
        );
        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;
    }

    /**
     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does
     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).
     *
     * Emits a {BeaconUpgraded} event.
     */
    function _upgradeBeaconToAndCall(
        address newBeacon,
        bytes memory data,
        bool forceCall
    ) internal {
        _setBeacon(newBeacon);
        emit BeaconUpgraded(newBeacon);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);
        }
    }
}

// File: @openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol


// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)

pragma solidity ^0.8.0;


/**
 * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an
 * implementation address that can be changed. This address is stored in storage in the location specified by
 * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the
 * implementation behind the proxy.
 */
contract ERC1967Proxy is Proxy, ERC1967Upgrade {
    /**
     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.
     *
     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded
     * function call, and allows initializating the storage of the proxy like a Solidity constructor.
     */
    constructor(address _logic, bytes memory _data) payable {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        _upgradeToAndCall(_logic, _data, false);
    }

    /**
     * @dev Returns the current implementation address.
     */
    function _implementation() internal view virtual override returns (address impl) {
        return ERC1967Upgrade._getImplementation();
    }
}

// File: @openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol


// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)

pragma solidity ^0.8.0;

/**
 * @dev This contract implements a proxy that is upgradeable by an admin.
 *
 * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector
 * clashing], which can potentially be used in an attack, this contract uses the
 * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two
 * things that go hand in hand:
 *
 * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if
 * that call matches one of the admin functions exposed by the proxy itself.
 * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the
 * implementation. If the admin tries to call a function on the implementation it will fail with an error that says
 * "admin cannot fallback to proxy target".
 *
 * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing
 * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due
 * to sudden errors when trying to call a function from the proxy implementation.
 *
 * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,
 * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.
 */
contract TransparentUpgradeableProxy is ERC1967Proxy {
    /**
     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and
     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.
     */
    constructor(
        address _logic,
        address admin_,
        bytes memory _data
    ) payable ERC1967Proxy(_logic, _data) {
        assert(_ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1));
        _changeAdmin(admin_);
    }

    /**
     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.
     */
    modifier ifAdmin() {
        if (msg.sender == _getAdmin()) {
            _;
        } else {
            _fallback();
        }
    }

    /**
     * @dev Returns the current admin.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`
     */
    function admin() external ifAdmin returns (address admin_) {
        admin_ = _getAdmin();
    }

    /**
     * @dev Returns the current implementation.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.
     *
     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the
     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
     */
    function implementation() external ifAdmin returns (address implementation_) {
        implementation_ = _implementation();
    }

    /**
     * @dev Changes the admin of the proxy.
     *
     * Emits an {AdminChanged} event.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.
     */
    function changeAdmin(address newAdmin) external virtual ifAdmin {
        _changeAdmin(newAdmin);
    }

    /**
     * @dev Upgrade the implementation of the proxy.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.
     */
    function upgradeTo(address newImplementation) external ifAdmin {
        _upgradeToAndCall(newImplementation, bytes(""), false);
    }

    /**
     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified
     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the
     * proxied contract.
     *
     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.
     */
    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {
        _upgradeToAndCall(newImplementation, data, true);
    }

    /**
     * @dev Returns the current admin.
     */
    function _admin() internal view virtual returns (address) {
        return _getAdmin();
    }

    /**
     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.
     */
    function _beforeFallback() internal virtual override {
        require(msg.sender != _getAdmin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target");
        super._beforeFallback();
    }
}

// File: contracts/editor/DefusionAiProxy.sol

pragma solidity ^0.8.0;



contract DefusionAiProxy is TransparentUpgradeableProxy {
    constructor(address _implementation, bytes memory _data)
        TransparentUpgradeableProxy(_implementation, msg.sender, _data)
    {}

    // Allow anyone to view the implementation address
    function proxyImplementation() external view returns (address) {
        return _implementation();
    }

    function proxyAdmin() external view returns (address) {
        return _admin();
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_implementation","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162001b0938038062001b0983398181016040528101906200003791906200080f565b813382828160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c6200006e9190620008ae565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b14620000a657620000a5620008e9565b5b620000ba828260006200014260201b60201c565b505060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610460001c620000ee9190620008ae565b60001b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b14620001265762000125620008e9565b5b62000137826200018560201b60201c565b505050505062000c05565b6200015383620001e360201b60201c565b600082511180620001615750805b1562000180576200017e83836200023a60201b620003e41760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620001b66200027060201b60201c565b82604051620001c792919062000929565b60405180910390a1620001e081620002d460201b60201c565b50565b620001f481620003c460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b606062000268838360405180606001604052806027815260200162001ae2602791396200049a60201b60201c565b905092915050565b6000620002ab7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b6200057e60201b620004111760201c565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000346576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200033d90620009dd565b60405180910390fd5b80620003807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b6200057e60201b620004111760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620003da816200058860201b6200041b1760201c565b6200041c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004139062000a75565b60405180910390fd5b80620004567f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200057e60201b620004111760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060620004ad846200058860201b60201c565b620004ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004e69062000b0d565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168560405162000519919062000b7c565b600060405180830381855af49150503d806000811462000556576040519150601f19603f3d011682016040523d82523d6000602084013e6200055b565b606091505b509150915062000573828286620005ab60201b60201c565b925050509392505050565b6000819050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315620005bd5782905062000610565b600083511115620005d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000607919062000be1565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000658826200062b565b9050919050565b6200066a816200064b565b81146200067657600080fd5b50565b6000815190506200068a816200065f565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006e5826200069a565b810181811067ffffffffffffffff82111715620007075762000706620006ab565b5b80604052505050565b60006200071c62000617565b90506200072a8282620006da565b919050565b600067ffffffffffffffff8211156200074d576200074c620006ab565b5b62000758826200069a565b9050602081019050919050565b60005b838110156200078557808201518184015260208101905062000768565b60008484015250505050565b6000620007a8620007a2846200072f565b62000710565b905082815260208101848484011115620007c757620007c662000695565b5b620007d484828562000765565b509392505050565b600082601f830112620007f457620007f362000690565b5b81516200080684826020860162000791565b91505092915050565b6000806040838503121562000829576200082862000621565b5b6000620008398582860162000679565b925050602083015167ffffffffffffffff8111156200085d576200085c62000626565b5b6200086b85828601620007dc565b9150509250929050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008bb8262000875565b9150620008c88362000875565b9250828203905081811115620008e357620008e26200087f565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b62000923816200064b565b82525050565b600060408201905062000940600083018562000918565b6200094f602083018462000918565b9392505050565b600082825260208201905092915050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620009c560268362000956565b9150620009d28262000967565b604082019050919050565b60006020820190508181036000830152620009f881620009b6565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600062000a5d602d8362000956565b915062000a6a82620009ff565b604082019050919050565b6000602082019050818103600083015262000a908162000a4e565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b600062000af560268362000956565b915062000b028262000a97565b604082019050919050565b6000602082019050818103600083015262000b288162000ae6565b9050919050565b600081519050919050565b600081905092915050565b600062000b528262000b2f565b62000b5e818562000b3a565b935062000b7081856020860162000765565b80840191505092915050565b600062000b8a828462000b45565b915081905092915050565b600081519050919050565b600062000bad8262000b95565b62000bb9818562000956565b935062000bcb81856020860162000765565b62000bd6816200069a565b840191505092915050565b6000602082019050818103600083015262000bfd818462000ba0565b905092915050565b610ecd8062000c156000396000f3fe6080604052600436106100745760003560e01c80634f1ef2861161004e5780634f1ef2861461010c5780635c60da1b146101285780638f28397014610153578063f851a4401461017c57610083565b80630c870f911461008d5780633659cfe6146100b85780633e47158c146100e157610083565b36610083576100816101a7565b005b61008b6101a7565b005b34801561009957600080fd5b506100a26101c1565b6040516100af9190610986565b60405180910390f35b3480156100c457600080fd5b506100df60048036038101906100da91906109d7565b6101d0565b005b3480156100ed57600080fd5b506100f6610236565b6040516101039190610986565b60405180910390f35b61012660048036038101906101219190610a69565b610245565b005b34801561013457600080fd5b5061013d6102e2565b60405161014a9190610986565b60405180910390f35b34801561015f57600080fd5b5061017a600480360381019061017591906109d7565b610339565b005b34801561018857600080fd5b5061019161038d565b60405161019e9190610986565b60405180910390f35b6101af61043e565b6101bf6101ba6104bd565b6104cc565b565b60006101cb6104bd565b905090565b6101d86104f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361022a5761022581604051806020016040528060008152506000610549565b610233565b6102326101a7565b5b50565b6000610240610575565b905090565b61024d6104f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036102d4576102cf8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001610549565b6102dd565b6102dc6101a7565b5b505050565b60006102ec6104f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361032d576103266104bd565b9050610336565b6103356101a7565b5b90565b6103416104f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036103815761037c81610584565b61038a565b6103896101a7565b5b50565b60006103976104f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036103d8576103d16104f2565b90506103e1565b6103e06101a7565b5b90565b60606104098383604051806060016040528060278152602001610e71602791396105d0565b905092915050565b6000819050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6104466104f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036104b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104aa90610b72565b60405180910390fd5b6104bb61069d565b565b60006104c761069f565b905090565b3660008037600080366000845af43d6000803e80600081146104ed573d6000f35b3d6000fd5b60006105207fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610411565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610552836106f6565b60008251118061055f5750805b156105705761056e83836103e4565b505b505050565b600061057f6104f2565b905090565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105ad6104f2565b826040516105bc929190610b92565b60405180910390a16105cd81610745565b50565b60606105db8461041b565b61061a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061190610c2d565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516106429190610cbe565b600060405180830381855af49150503d806000811461067d576040519150601f19603f3d011682016040523d82523d6000602084013e610682565b606091505b5091509150610692828286610825565b925050509392505050565b565b60006106cd7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610411565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106ff8161088c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ab90610d47565b60405180910390fd5b806107e17fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610411565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060831561083557829050610885565b6000835111156108485782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c9190610dbc565b60405180910390fd5b9392505050565b6108958161041b565b6108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb90610e50565b60405180910390fd5b806109017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610411565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061097082610945565b9050919050565b61098081610965565b82525050565b600060208201905061099b6000830184610977565b92915050565b600080fd5b600080fd5b6109b481610965565b81146109bf57600080fd5b50565b6000813590506109d1816109ab565b92915050565b6000602082840312156109ed576109ec6109a1565b5b60006109fb848285016109c2565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610a2957610a28610a04565b5b8235905067ffffffffffffffff811115610a4657610a45610a09565b5b602083019150836001820283011115610a6257610a61610a0e565b5b9250929050565b600080600060408486031215610a8257610a816109a1565b5b6000610a90868287016109c2565b935050602084013567ffffffffffffffff811115610ab157610ab06109a6565b5b610abd86828701610a13565b92509250509250925092565b600082825260208201905092915050565b7f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60008201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760208201527f6574000000000000000000000000000000000000000000000000000000000000604082015250565b6000610b5c604283610ac9565b9150610b6782610ada565b606082019050919050565b60006020820190508181036000830152610b8b81610b4f565b9050919050565b6000604082019050610ba76000830185610977565b610bb46020830184610977565b9392505050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000610c17602683610ac9565b9150610c2282610bbb565b604082019050919050565b60006020820190508181036000830152610c4681610c0a565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015610c81578082015181840152602081019050610c66565b60008484015250505050565b6000610c9882610c4d565b610ca28185610c58565b9350610cb2818560208601610c63565b80840191505092915050565b6000610cca8284610c8d565b915081905092915050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610d31602683610ac9565b9150610d3c82610cd5565b604082019050919050565b60006020820190508181036000830152610d6081610d24565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b6000610d8e82610d67565b610d988185610ac9565b9350610da8818560208601610c63565b610db181610d72565b840191505092915050565b60006020820190508181036000830152610dd68184610d83565b905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000610e3a602d83610ac9565b9150610e4582610dde565b604082019050919050565b60006020820190508181036000830152610e6981610e2d565b905091905056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220acba819adee74a274b7c9ffbc46c2cf7c696729438d9287917938aefde4b0ab164736f6c63430008120033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000009184f8564c71f28fa6d220699edee63eb379e4cc00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000880539b0d982b76ae6f018aea29a9b8df4d4ee7700000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106100745760003560e01c80634f1ef2861161004e5780634f1ef2861461010c5780635c60da1b146101285780638f28397014610153578063f851a4401461017c57610083565b80630c870f911461008d5780633659cfe6146100b85780633e47158c146100e157610083565b36610083576100816101a7565b005b61008b6101a7565b005b34801561009957600080fd5b506100a26101c1565b6040516100af9190610986565b60405180910390f35b3480156100c457600080fd5b506100df60048036038101906100da91906109d7565b6101d0565b005b3480156100ed57600080fd5b506100f6610236565b6040516101039190610986565b60405180910390f35b61012660048036038101906101219190610a69565b610245565b005b34801561013457600080fd5b5061013d6102e2565b60405161014a9190610986565b60405180910390f35b34801561015f57600080fd5b5061017a600480360381019061017591906109d7565b610339565b005b34801561018857600080fd5b5061019161038d565b60405161019e9190610986565b60405180910390f35b6101af61043e565b6101bf6101ba6104bd565b6104cc565b565b60006101cb6104bd565b905090565b6101d86104f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361022a5761022581604051806020016040528060008152506000610549565b610233565b6102326101a7565b5b50565b6000610240610575565b905090565b61024d6104f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036102d4576102cf8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506001610549565b6102dd565b6102dc6101a7565b5b505050565b60006102ec6104f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361032d576103266104bd565b9050610336565b6103356101a7565b5b90565b6103416104f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036103815761037c81610584565b61038a565b6103896101a7565b5b50565b60006103976104f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036103d8576103d16104f2565b90506103e1565b6103e06101a7565b5b90565b60606104098383604051806060016040528060278152602001610e71602791396105d0565b905092915050565b6000819050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6104466104f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036104b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104aa90610b72565b60405180910390fd5b6104bb61069d565b565b60006104c761069f565b905090565b3660008037600080366000845af43d6000803e80600081146104ed573d6000f35b3d6000fd5b60006105207fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610411565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610552836106f6565b60008251118061055f5750805b156105705761056e83836103e4565b505b505050565b600061057f6104f2565b905090565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6105ad6104f2565b826040516105bc929190610b92565b60405180910390a16105cd81610745565b50565b60606105db8461041b565b61061a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061190610c2d565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516106429190610cbe565b600060405180830381855af49150503d806000811461067d576040519150601f19603f3d011682016040523d82523d6000602084013e610682565b606091505b5091509150610692828286610825565b925050509392505050565b565b60006106cd7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610411565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106ff8161088c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ab90610d47565b60405180910390fd5b806107e17fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610411565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060831561083557829050610885565b6000835111156108485782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c9190610dbc565b60405180910390fd5b9392505050565b6108958161041b565b6108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb90610e50565b60405180910390fd5b806109017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610411565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061097082610945565b9050919050565b61098081610965565b82525050565b600060208201905061099b6000830184610977565b92915050565b600080fd5b600080fd5b6109b481610965565b81146109bf57600080fd5b50565b6000813590506109d1816109ab565b92915050565b6000602082840312156109ed576109ec6109a1565b5b60006109fb848285016109c2565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610a2957610a28610a04565b5b8235905067ffffffffffffffff811115610a4657610a45610a09565b5b602083019150836001820283011115610a6257610a61610a0e565b5b9250929050565b600080600060408486031215610a8257610a816109a1565b5b6000610a90868287016109c2565b935050602084013567ffffffffffffffff811115610ab157610ab06109a6565b5b610abd86828701610a13565b92509250509250925092565b600082825260208201905092915050565b7f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60008201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760208201527f6574000000000000000000000000000000000000000000000000000000000000604082015250565b6000610b5c604283610ac9565b9150610b6782610ada565b606082019050919050565b60006020820190508181036000830152610b8b81610b4f565b9050919050565b6000604082019050610ba76000830185610977565b610bb46020830184610977565b9392505050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000610c17602683610ac9565b9150610c2282610bbb565b604082019050919050565b60006020820190508181036000830152610c4681610c0a565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015610c81578082015181840152602081019050610c66565b60008484015250505050565b6000610c9882610c4d565b610ca28185610c58565b9350610cb2818560208601610c63565b80840191505092915050565b6000610cca8284610c8d565b915081905092915050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610d31602683610ac9565b9150610d3c82610cd5565b604082019050919050565b60006020820190508181036000830152610d6081610d24565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b6000610d8e82610d67565b610d988185610ac9565b9350610da8818560208601610c63565b610db181610d72565b840191505092915050565b60006020820190508181036000830152610dd68184610d83565b905092915050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000610e3a602d83610ac9565b9150610e4582610dde565b604082019050919050565b60006020820190508181036000830152610e6981610e2d565b905091905056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220acba819adee74a274b7c9ffbc46c2cf7c696729438d9287917938aefde4b0ab164736f6c63430008120033

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

0000000000000000000000009184f8564c71f28fa6d220699edee63eb379e4cc00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000880539b0d982b76ae6f018aea29a9b8df4d4ee7700000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _implementation (address): 0x9184f8564C71f28fa6D220699EdEe63Eb379E4Cc
Arg [1] : _data (bytes): 0xc4d66de8000000000000000000000000880539b0d982b76ae6f018aea29a9b8df4d4ee77

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000009184f8564c71f28fa6d220699edee63eb379e4cc
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000024
Arg [3] : c4d66de8000000000000000000000000880539b0d982b76ae6f018aea29a9b8d
Arg [4] : f4d4ee7700000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

30947:456:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5371:11;:9;:11::i;:::-;30947:456;;5148:11;:9;:11::i;:::-;30947:456;31205:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29713:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31315:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30223:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29116:129;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29450:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28560:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4795:110;4843:17;:15;:17::i;:::-;4870:28;4880:17;:15;:17::i;:::-;4870:9;:28::i;:::-;4795:110::o;31205:104::-;31259:7;31285:17;:15;:17::i;:::-;31278:24;;31205:104;:::o;29713:134::-;28031:11;:9;:11::i;:::-;28017:25;;:10;:25;;;28013:99;;29786:54:::1;29804:17;29823:9;;;;;;;;;;;::::0;29834:5:::1;29786:17;:54::i;:::-;28013:99:::0;;;28090:11;:9;:11::i;:::-;28013:99;29713:134;:::o;31315:86::-;31360:7;31386:8;:6;:8::i;:::-;31379:15;;31315:86;:::o;30223:164::-;28031:11;:9;:11::i;:::-;28017:25;;:10;:25;;;28013:99;;30332:48:::1;30350:17;30369:4;;30332:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30375:4;30332:17;:48::i;:::-;28013:99:::0;;;28090:11;:9;:11::i;:::-;28013:99;30223:164;;;:::o;29116:129::-;29168:23;28031:11;:9;:11::i;:::-;28017:25;;:10;:25;;;28013:99;;29221:17:::1;:15;:17::i;:::-;29203:35;;28013:99:::0;;;28090:11;:9;:11::i;:::-;28013:99;29116:129;:::o;29450:103::-;28031:11;:9;:11::i;:::-;28017:25;;:10;:25;;;28013:99;;29524:22:::1;29537:8;29524:12;:22::i;:::-;28013:99:::0;;;28090:11;:9;:11::i;:::-;28013:99;29450:103;:::o;28560:96::-;28603:14;28031:11;:9;:11::i;:::-;28017:25;;:10;:25;;;28013:99;;28638:11:::1;:9;:11::i;:::-;28629:20;;28013:99:::0;;;28090:11;:9;:11::i;:::-;28013:99;28560:96;:::o;13703:198::-;13786:12;13817:77;13838:6;13846:4;13817:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;13810:84;;13703:198;;;;:::o;17014:147::-;17075:21;17141:4;17131:14;;17014:147;;;:::o;8308:320::-;8368:4;8620:1;8598:7;:19;;;:23;8591:30;;8308:320;;;:::o;30662:207::-;30747:11;:9;:11::i;:::-;30733:25;;:10;:25;;;30725:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;30839:23;:21;:23::i;:::-;30662:207::o;25523:140::-;25590:12;25621:35;:33;:35::i;:::-;25614:42;;25523:140;:::o;3421:895::-;3759:14;3756:1;3753;3740:34;3973:1;3970;3954:14;3951:1;3935:14;3928:5;3915:60;4049:16;4046:1;4043;4028:38;4087:6;4159:1;4154:66;;;;4269:16;4266:1;4259:27;4154:66;4189:16;4186:1;4179:27;21896:122;21940:7;21966:39;21630:66;21993:11;;21966:26;:39::i;:::-;:45;;;;;;;;;;;;21959:52;;21896:122;:::o;19971:295::-;20109:29;20120:17;20109:10;:29::i;:::-;20166:1;20152:4;:11;:15;:28;;;;20171:9;20152:28;20148:112;;;20196:53;20225:17;20244:4;20196:28;:53::i;:::-;;20148:112;19971:295;;;:::o;30448:93::-;30497:7;30523:11;:9;:11::i;:::-;30516:18;;30448:93;:::o;22412:135::-;22476:35;22489:11;:9;:11::i;:::-;22502:8;22476:35;;;;;;;:::i;:::-;;;;;;;;22521:19;22531:8;22521:9;:19::i;:::-;22412:135;:::o;14087:387::-;14228:12;14260:18;14271:6;14260:10;:18::i;:::-;14252:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;14333:12;14347:23;14374:6;:19;;14394:4;14374:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14332:67;;;;14416:51;14433:7;14442:10;14454:12;14416:16;:51::i;:::-;14409:58;;;;14087:387;;;;;:::o;5670:46::-;:::o;19089:140::-;19142:7;19168:48;18818:66;19195:20;;19168:26;:48::i;:::-;:54;;;;;;;;;;;;19161:61;;19089:140;:::o;19685:152::-;19751:37;19770:17;19751:18;:37::i;:::-;19812:17;19803:27;;;;;;;;;;;;19685:152;:::o;22100:201::-;22183:1;22163:22;;:8;:22;;;22155:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22286:8;22238:39;21630:66;22265:11;;22238:26;:39::i;:::-;:45;;;:56;;;;;;;;;;;;;;;;;;22100:201;:::o;14694:692::-;14840:12;14868:7;14864:516;;;14898:10;14891:17;;;;14864:516;15029:1;15009:10;:17;:21;15005:365;;;15203:10;15197:17;15263:15;15250:10;15246:2;15242:19;15235:44;15005:365;15342:12;15335:20;;;;;;;;;;;:::i;:::-;;;;;;;;14694:692;;;;;;:::o;19320:259::-;19401:37;19420:17;19401:18;:37::i;:::-;19393:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;19555:17;19498:48;18818:66;19525:20;;19498:26;:48::i;:::-;:54;;;:74;;;;;;;;;;;;;;;;;;19320:259;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;674:117::-;783:1;780;773:12;797:117;906:1;903;896:12;920:122;993:24;1011:5;993:24;:::i;:::-;986:5;983:35;973:63;;1032:1;1029;1022:12;973:63;920:122;:::o;1048:139::-;1094:5;1132:6;1119:20;1110:29;;1148:33;1175:5;1148:33;:::i;:::-;1048:139;;;;:::o;1193:329::-;1252:6;1301:2;1289:9;1280:7;1276:23;1272:32;1269:119;;;1307:79;;:::i;:::-;1269:119;1427:1;1452:53;1497:7;1488:6;1477:9;1473:22;1452:53;:::i;:::-;1442:63;;1398:117;1193:329;;;;:::o;1528:117::-;1637:1;1634;1627:12;1651:117;1760:1;1757;1750:12;1774:117;1883:1;1880;1873:12;1910:552;1967:8;1977:6;2027:3;2020:4;2012:6;2008:17;2004:27;1994:122;;2035:79;;:::i;:::-;1994:122;2148:6;2135:20;2125:30;;2178:18;2170:6;2167:30;2164:117;;;2200:79;;:::i;:::-;2164:117;2314:4;2306:6;2302:17;2290:29;;2368:3;2360:4;2352:6;2348:17;2338:8;2334:32;2331:41;2328:128;;;2375:79;;:::i;:::-;2328:128;1910:552;;;;;:::o;2468:672::-;2547:6;2555;2563;2612:2;2600:9;2591:7;2587:23;2583:32;2580:119;;;2618:79;;:::i;:::-;2580:119;2738:1;2763:53;2808:7;2799:6;2788:9;2784:22;2763:53;:::i;:::-;2753:63;;2709:117;2893:2;2882:9;2878:18;2865:32;2924:18;2916:6;2913:30;2910:117;;;2946:79;;:::i;:::-;2910:117;3059:64;3115:7;3106:6;3095:9;3091:22;3059:64;:::i;:::-;3041:82;;;;2836:297;2468:672;;;;;:::o;3146:169::-;3230:11;3264:6;3259:3;3252:19;3304:4;3299:3;3295:14;3280:29;;3146:169;;;;:::o;3321:290::-;3461:34;3457:1;3449:6;3445:14;3438:58;3530:34;3525:2;3517:6;3513:15;3506:59;3599:4;3594:2;3586:6;3582:15;3575:29;3321:290;:::o;3617:366::-;3759:3;3780:67;3844:2;3839:3;3780:67;:::i;:::-;3773:74;;3856:93;3945:3;3856:93;:::i;:::-;3974:2;3969:3;3965:12;3958:19;;3617:366;;;:::o;3989:419::-;4155:4;4193:2;4182:9;4178:18;4170:26;;4242:9;4236:4;4232:20;4228:1;4217:9;4213:17;4206:47;4270:131;4396:4;4270:131;:::i;:::-;4262:139;;3989:419;;;:::o;4414:332::-;4535:4;4573:2;4562:9;4558:18;4550:26;;4586:71;4654:1;4643:9;4639:17;4630:6;4586:71;:::i;:::-;4667:72;4735:2;4724:9;4720:18;4711:6;4667:72;:::i;:::-;4414:332;;;;;:::o;4752:225::-;4892:34;4888:1;4880:6;4876:14;4869:58;4961:8;4956:2;4948:6;4944:15;4937:33;4752:225;:::o;4983:366::-;5125:3;5146:67;5210:2;5205:3;5146:67;:::i;:::-;5139:74;;5222:93;5311:3;5222:93;:::i;:::-;5340:2;5335:3;5331:12;5324:19;;4983:366;;;:::o;5355:419::-;5521:4;5559:2;5548:9;5544:18;5536:26;;5608:9;5602:4;5598:20;5594:1;5583:9;5579:17;5572:47;5636:131;5762:4;5636:131;:::i;:::-;5628:139;;5355:419;;;:::o;5780:98::-;5831:6;5865:5;5859:12;5849:22;;5780:98;;;:::o;5884:147::-;5985:11;6022:3;6007:18;;5884:147;;;;:::o;6037:246::-;6118:1;6128:113;6142:6;6139:1;6136:13;6128:113;;;6227:1;6222:3;6218:11;6212:18;6208:1;6203:3;6199:11;6192:39;6164:2;6161:1;6157:10;6152:15;;6128:113;;;6275:1;6266:6;6261:3;6257:16;6250:27;6099:184;6037:246;;;:::o;6289:386::-;6393:3;6421:38;6453:5;6421:38;:::i;:::-;6475:88;6556:6;6551:3;6475:88;:::i;:::-;6468:95;;6572:65;6630:6;6625:3;6618:4;6611:5;6607:16;6572:65;:::i;:::-;6662:6;6657:3;6653:16;6646:23;;6397:278;6289:386;;;;:::o;6681:271::-;6811:3;6833:93;6922:3;6913:6;6833:93;:::i;:::-;6826:100;;6943:3;6936:10;;6681:271;;;;:::o;6958:225::-;7098:34;7094:1;7086:6;7082:14;7075:58;7167:8;7162:2;7154:6;7150:15;7143:33;6958:225;:::o;7189:366::-;7331:3;7352:67;7416:2;7411:3;7352:67;:::i;:::-;7345:74;;7428:93;7517:3;7428:93;:::i;:::-;7546:2;7541:3;7537:12;7530:19;;7189:366;;;:::o;7561:419::-;7727:4;7765:2;7754:9;7750:18;7742:26;;7814:9;7808:4;7804:20;7800:1;7789:9;7785:17;7778:47;7842:131;7968:4;7842:131;:::i;:::-;7834:139;;7561:419;;;:::o;7986:99::-;8038:6;8072:5;8066:12;8056:22;;7986:99;;;:::o;8091:102::-;8132:6;8183:2;8179:7;8174:2;8167:5;8163:14;8159:28;8149:38;;8091:102;;;:::o;8199:377::-;8287:3;8315:39;8348:5;8315:39;:::i;:::-;8370:71;8434:6;8429:3;8370:71;:::i;:::-;8363:78;;8450:65;8508:6;8503:3;8496:4;8489:5;8485:16;8450:65;:::i;:::-;8540:29;8562:6;8540:29;:::i;:::-;8535:3;8531:39;8524:46;;8291:285;8199:377;;;;:::o;8582:313::-;8695:4;8733:2;8722:9;8718:18;8710:26;;8782:9;8776:4;8772:20;8768:1;8757:9;8753:17;8746:47;8810:78;8883:4;8874:6;8810:78;:::i;:::-;8802:86;;8582:313;;;;:::o;8901:232::-;9041:34;9037:1;9029:6;9025:14;9018:58;9110:15;9105:2;9097:6;9093:15;9086:40;8901:232;:::o;9139:366::-;9281:3;9302:67;9366:2;9361:3;9302:67;:::i;:::-;9295:74;;9378:93;9467:3;9378:93;:::i;:::-;9496:2;9491:3;9487:12;9480:19;;9139:366;;;:::o;9511:419::-;9677:4;9715:2;9704:9;9700:18;9692:26;;9764:9;9758:4;9754:20;9750:1;9739:9;9735:17;9728:47;9792:131;9918:4;9792:131;:::i;:::-;9784:139;;9511:419;;;:::o

Swarm Source

ipfs://acba819adee74a274b7c9ffbc46c2cf7c696729438d9287917938aefde4b0ab1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.