ETH Price: $2,517.82 (+2.26%)

Fabrica (FAB)
 

Overview

TokenID

7835311422338759280

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

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

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-25
*/

// Dependency file: @openzeppelin/contracts/proxy/Proxy.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.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 overridden 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 internal 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 overridden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {}
}


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


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


// Dependency file: @openzeppelin/contracts/utils/Address.sol

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

// pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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


// Dependency file: @openzeppelin/contracts/utils/StorageSlot.sol

// OpenZeppelin Contracts (last updated v4.7.0) (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) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

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

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

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


// Dependency file: @openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol

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

// pragma solidity ^0.8.2;

// import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol";
// import "@openzeppelin/contracts/interfaces/draft-IERC1822.sol";
// import "@openzeppelin/contracts/utils/Address.sol";
// import "@openzeppelin/contracts/utils/StorageSlot.sol";

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


// Root file: src/ProxyFabricaToken1155.sol

// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)

pragma solidity ^0.8.0;

// import "@openzeppelin/contracts/proxy/Proxy.sol";
// import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol";

contract FabricaToken1155Proxy is Proxy, ERC1967Upgrade {
    /**
     * @dev Sets the upgradeable proxy with an implementation specified by `_logic`.
     */
    function upgradeTo(address _logic) public {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        _upgradeTo(_logic);
    }

    /**
     * @dev Sets the upgradeable proxy with an 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 initializing the storage of the proxy like a Solidity constructor.
     */
    function upgradeToAndCall(address _logic, bytes memory _data, bool _forceCall) public {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        _upgradeToAndCall(_logic, _data, _forceCall);(_logic);
    }

    /**
     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.
     *
     * 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 initializing the storage of the proxy like a Solidity constructor.
     */
    function upgradeToAndCallUUPS(address _logic, bytes memory _data, bool _forceCall) public {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        _upgradeToAndCallUUPS(_logic, _data, _forceCall);(_logic);
    }

    /**
     * @dev Returns the current implementation address.
     */
    function getImplementation() public view returns (address) {
        return _getImplementation();
    }

    /**
     * @dev Returns the current admin address.
     */
    function getAdmin() public view returns (address) {
        return ERC1967Upgrade._getAdmin();
    }

    /**
     * @dev Updates the current admin address.
     */
    function changeAdmin(address _newAdmin) public {
        return ERC1967Upgrade._changeAdmin(_newAdmin);
    }

    /**
     * @dev Returns the current beacon address.
     */
    function getBeacon() public view returns (address) {
        return ERC1967Upgrade._getBeacon();
    }

    function upgradeBeaconToAndCall(address _newBeacon, bytes memory _data, bool _forceCall) public {
        return ERC1967Upgrade._upgradeBeaconToAndCall(_newBeacon, _data, _forceCall);
    }

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

Contract Security Audit

Contract ABI

[{"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":[{"internalType":"address","name":"_newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBeacon","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newBeacon","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bool","name":"_forceCall","type":"bool"}],"name":"upgradeBeaconToAndCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bool","name":"_forceCall","type":"bool"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bool","name":"_forceCall","type":"bool"}],"name":"upgradeToAndCallUUPS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b506115fd806100206000396000f3fe60806040526004361061007f5760003560e01c80636e9960c31161004e5780636e9960c31461013e5780638f28397014610169578063aaf10f4214610192578063b7f45a7f146101bd5761008e565b806306d2e426146100985780632d6b3a6b146100c15780633659cfe6146100ec5780635aabcad5146101155761008e565b3661008e5761008c6101e6565b005b6100966101e6565b005b3480156100a457600080fd5b506100bf60048036038101906100ba9190610e99565b610200565b005b3480156100cd57600080fd5b506100d6610275565b6040516100e39190610f17565b60405180910390f35b3480156100f857600080fd5b50610113600480360381019061010e9190610f32565b610284565b005b34801561012157600080fd5b5061013c60048036038101906101379190610e99565b6102f5565b005b34801561014a57600080fd5b50610153610305565b6040516101609190610f17565b60405180910390f35b34801561017557600080fd5b50610190600480360381019061018b9190610f32565b610314565b005b34801561019e57600080fd5b506101a7610320565b6040516101b49190610f17565b60405180910390f35b3480156101c957600080fd5b506101e460048036038101906101df9190610e99565b61032f565b005b6101ee6103a4565b6101fe6101f96103a6565b6103b5565b565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c6102309190610f98565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b1461026557610264610fcc565b5b6102708383836103db565b505050565b600061027f610407565b905090565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c6102b49190610f98565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b146102e9576102e8610fcc565b5b6102f28161045e565b50565b6103008383836104ad565b505050565b600061030f61058a565b905090565b61031d816105e1565b50565b600061032a61062d565b905090565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c61035f9190610f98565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b1461039457610393610fcc565b5b61039f838383610684565b505050565b565b60006103b061062d565b905090565b3660008037600080366000845af43d6000803e80600081146103d6573d6000f35b3d6000fd5b6103e48361045e565b6000825111806103f15750805b156104025761040083836107f2565b505b505050565b60006104357fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b61081f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61046781610829565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6104b6836108e2565b8273ffffffffffffffffffffffffffffffffffffffff167f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e60405160405180910390a26000825111806105065750805b15610585576105838373ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d9190611010565b836107f2565b505b505050565b60006105b87fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b61081f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61060a61058a565b8260405161061992919061103d565b60405180910390a161062a81610a51565b50565b600061065b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61081f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106b07f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b610b31565b60000160009054906101000a900460ff16156106d4576106cf83610829565b6107ed565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561073c57506040513d601f19601f82011682018060405250810190610739919061109c565b60015b61077b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107729061114c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146107e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d7906111de565b60405180910390fd5b506107ec8383836103db565b5b505050565b606061081783836040518060600160405280602781526020016115a160279139610b3b565b905092915050565b6000819050919050565b61083281610bc1565b610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890611270565b60405180910390fd5b8061089e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61081f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108eb81610bc1565b61092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092190611302565b60405180910390fd5b6109a18173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099c9190611010565b610bc1565b6109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d790611394565b60405180910390fd5b80610a0d7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b61081f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790611426565b60405180910390fd5b80610aed7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b61081f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000819050919050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051610b6591906114b7565b600060405180830381855af49150503d8060008114610ba0576040519150601f19603f3d011682016040523d82523d6000602084013e610ba5565b606091505b5091509150610bb686838387610be4565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315610c46576000835103610c3e57610bfe85610bc1565b610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c349061151a565b60405180910390fd5b5b829050610c51565b610c508383610c59565b5b949350505050565b600082511115610c6c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca0919061157e565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ce882610cbd565b9050919050565b610cf881610cdd565b8114610d0357600080fd5b50565b600081359050610d1581610cef565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610d6e82610d25565b810181811067ffffffffffffffff82111715610d8d57610d8c610d36565b5b80604052505050565b6000610da0610ca9565b9050610dac8282610d65565b919050565b600067ffffffffffffffff821115610dcc57610dcb610d36565b5b610dd582610d25565b9050602081019050919050565b82818337600083830152505050565b6000610e04610dff84610db1565b610d96565b905082815260208101848484011115610e2057610e1f610d20565b5b610e2b848285610de2565b509392505050565b600082601f830112610e4857610e47610d1b565b5b8135610e58848260208601610df1565b91505092915050565b60008115159050919050565b610e7681610e61565b8114610e8157600080fd5b50565b600081359050610e9381610e6d565b92915050565b600080600060608486031215610eb257610eb1610cb3565b5b6000610ec086828701610d06565b935050602084013567ffffffffffffffff811115610ee157610ee0610cb8565b5b610eed86828701610e33565b9250506040610efe86828701610e84565b9150509250925092565b610f1181610cdd565b82525050565b6000602082019050610f2c6000830184610f08565b92915050565b600060208284031215610f4857610f47610cb3565b5b6000610f5684828501610d06565b91505092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610fa382610f5f565b9150610fae83610f5f565b9250828203905081811115610fc657610fc5610f69565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008151905061100a81610cef565b92915050565b60006020828403121561102657611025610cb3565b5b600061103484828501610ffb565b91505092915050565b60006040820190506110526000830185610f08565b61105f6020830184610f08565b9392505050565b6000819050919050565b61107981611066565b811461108457600080fd5b50565b60008151905061109681611070565b92915050565b6000602082840312156110b2576110b1610cb3565b5b60006110c084828501611087565b91505092915050565b600082825260208201905092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000611136602e836110c9565b9150611141826110da565b604082019050919050565b6000602082019050818103600083015261116581611129565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006111c86029836110c9565b91506111d38261116c565b604082019050919050565b600060208201905081810360008301526111f7816111bb565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600061125a602d836110c9565b9150611265826111fe565b604082019050919050565b600060208201905081810360008301526112898161124d565b9050919050565b7f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b60006112ec6025836110c9565b91506112f782611290565b604082019050919050565b6000602082019050818103600083015261131b816112df565b9050919050565b7f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960008201527f73206e6f74206120636f6e747261637400000000000000000000000000000000602082015250565b600061137e6030836110c9565b915061138982611322565b604082019050919050565b600060208201905081810360008301526113ad81611371565b9050919050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006114106026836110c9565b915061141b826113b4565b604082019050919050565b6000602082019050818103600083015261143f81611403565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561147a57808201518184015260208101905061145f565b60008484015250505050565b600061149182611446565b61149b8185611451565b93506114ab81856020860161145c565b80840191505092915050565b60006114c38284611486565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000611504601d836110c9565b915061150f826114ce565b602082019050919050565b60006020820190508181036000830152611533816114f7565b9050919050565b600081519050919050565b60006115508261153a565b61155a81856110c9565b935061156a81856020860161145c565b61157381610d25565b840191505092915050565b600060208201905081810360008301526115988184611545565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122095e9db4d83c49c7e36634675b83c3c95f37d9a124eee2ae6106743797861a42664736f6c63430008110033

Deployed Bytecode

0x60806040526004361061007f5760003560e01c80636e9960c31161004e5780636e9960c31461013e5780638f28397014610169578063aaf10f4214610192578063b7f45a7f146101bd5761008e565b806306d2e426146100985780632d6b3a6b146100c15780633659cfe6146100ec5780635aabcad5146101155761008e565b3661008e5761008c6101e6565b005b6100966101e6565b005b3480156100a457600080fd5b506100bf60048036038101906100ba9190610e99565b610200565b005b3480156100cd57600080fd5b506100d6610275565b6040516100e39190610f17565b60405180910390f35b3480156100f857600080fd5b50610113600480360381019061010e9190610f32565b610284565b005b34801561012157600080fd5b5061013c60048036038101906101379190610e99565b6102f5565b005b34801561014a57600080fd5b50610153610305565b6040516101609190610f17565b60405180910390f35b34801561017557600080fd5b50610190600480360381019061018b9190610f32565b610314565b005b34801561019e57600080fd5b506101a7610320565b6040516101b49190610f17565b60405180910390f35b3480156101c957600080fd5b506101e460048036038101906101df9190610e99565b61032f565b005b6101ee6103a4565b6101fe6101f96103a6565b6103b5565b565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c6102309190610f98565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b1461026557610264610fcc565b5b6102708383836103db565b505050565b600061027f610407565b905090565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c6102b49190610f98565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b146102e9576102e8610fcc565b5b6102f28161045e565b50565b6103008383836104ad565b505050565b600061030f61058a565b905090565b61031d816105e1565b50565b600061032a61062d565b905090565b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c61035f9190610f98565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b1461039457610393610fcc565b5b61039f838383610684565b505050565b565b60006103b061062d565b905090565b3660008037600080366000845af43d6000803e80600081146103d6573d6000f35b3d6000fd5b6103e48361045e565b6000825111806103f15750805b156104025761040083836107f2565b505b505050565b60006104357fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b61081f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61046781610829565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6104b6836108e2565b8273ffffffffffffffffffffffffffffffffffffffff167f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e60405160405180910390a26000825111806105065750805b15610585576105838373ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d9190611010565b836107f2565b505b505050565b60006105b87fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b61081f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61060a61058a565b8260405161061992919061103d565b60405180910390a161062a81610a51565b50565b600061065b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61081f565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106b07f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b610b31565b60000160009054906101000a900460ff16156106d4576106cf83610829565b6107ed565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561073c57506040513d601f19601f82011682018060405250810190610739919061109c565b60015b61077b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107729061114c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146107e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d7906111de565b60405180910390fd5b506107ec8383836103db565b5b505050565b606061081783836040518060600160405280602781526020016115a160279139610b3b565b905092915050565b6000819050919050565b61083281610bc1565b610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890611270565b60405180910390fd5b8061089e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61081f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108eb81610bc1565b61092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092190611302565b60405180910390fd5b6109a18173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099c9190611010565b610bc1565b6109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d790611394565b60405180910390fd5b80610a0d7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b61081f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab790611426565b60405180910390fd5b80610aed7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b61081f565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000819050919050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051610b6591906114b7565b600060405180830381855af49150503d8060008114610ba0576040519150601f19603f3d011682016040523d82523d6000602084013e610ba5565b606091505b5091509150610bb686838387610be4565b925050509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315610c46576000835103610c3e57610bfe85610bc1565b610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c349061151a565b60405180910390fd5b5b829050610c51565b610c508383610c59565b5b949350505050565b600082511115610c6c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca0919061157e565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ce882610cbd565b9050919050565b610cf881610cdd565b8114610d0357600080fd5b50565b600081359050610d1581610cef565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610d6e82610d25565b810181811067ffffffffffffffff82111715610d8d57610d8c610d36565b5b80604052505050565b6000610da0610ca9565b9050610dac8282610d65565b919050565b600067ffffffffffffffff821115610dcc57610dcb610d36565b5b610dd582610d25565b9050602081019050919050565b82818337600083830152505050565b6000610e04610dff84610db1565b610d96565b905082815260208101848484011115610e2057610e1f610d20565b5b610e2b848285610de2565b509392505050565b600082601f830112610e4857610e47610d1b565b5b8135610e58848260208601610df1565b91505092915050565b60008115159050919050565b610e7681610e61565b8114610e8157600080fd5b50565b600081359050610e9381610e6d565b92915050565b600080600060608486031215610eb257610eb1610cb3565b5b6000610ec086828701610d06565b935050602084013567ffffffffffffffff811115610ee157610ee0610cb8565b5b610eed86828701610e33565b9250506040610efe86828701610e84565b9150509250925092565b610f1181610cdd565b82525050565b6000602082019050610f2c6000830184610f08565b92915050565b600060208284031215610f4857610f47610cb3565b5b6000610f5684828501610d06565b91505092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610fa382610f5f565b9150610fae83610f5f565b9250828203905081811115610fc657610fc5610f69565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008151905061100a81610cef565b92915050565b60006020828403121561102657611025610cb3565b5b600061103484828501610ffb565b91505092915050565b60006040820190506110526000830185610f08565b61105f6020830184610f08565b9392505050565b6000819050919050565b61107981611066565b811461108457600080fd5b50565b60008151905061109681611070565b92915050565b6000602082840312156110b2576110b1610cb3565b5b60006110c084828501611087565b91505092915050565b600082825260208201905092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000611136602e836110c9565b9150611141826110da565b604082019050919050565b6000602082019050818103600083015261116581611129565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006111c86029836110c9565b91506111d38261116c565b604082019050919050565b600060208201905081810360008301526111f7816111bb565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b600061125a602d836110c9565b9150611265826111fe565b604082019050919050565b600060208201905081810360008301526112898161124d565b9050919050565b7f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b60006112ec6025836110c9565b91506112f782611290565b604082019050919050565b6000602082019050818103600083015261131b816112df565b9050919050565b7f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960008201527f73206e6f74206120636f6e747261637400000000000000000000000000000000602082015250565b600061137e6030836110c9565b915061138982611322565b604082019050919050565b600060208201905081810360008301526113ad81611371565b9050919050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006114106026836110c9565b915061141b826113b4565b604082019050919050565b6000602082019050818103600083015261143f81611403565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561147a57808201518184015260208101905061145f565b60008484015250505050565b600061149182611446565b61149b8185611451565b93506114ab81856020860161145c565b80840191505092915050565b60006114c38284611486565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000611504601d836110c9565b915061150f826114ce565b602082019050919050565b60006020820190508181036000830152611533816114f7565b9050919050565b600081519050919050565b60006115508261153a565b61155a81856110c9565b935061156a81856020860161145c565b61157381610d25565b840191505092915050565b600060208201905081810360008301526115988184611545565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122095e9db4d83c49c7e36634675b83c3c95f37d9a124eee2ae6106743797861a42664736f6c63430008110033

Deployed Bytecode Sourcemap

24225:2782:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3039:11;:9;:11::i;:::-;24225:2782;;2808:11;:9;:11::i;:::-;24225:2782;24914:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26435:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24392:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26547:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26073:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26249:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25894:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25539:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2445:113;2494:17;:15;:17::i;:::-;2522:28;2532:17;:15;:17::i;:::-;2522:9;:28::i;:::-;2445:113::o;24914:264::-;25103:1;25058:41;25050:50;;:54;;;;:::i;:::-;25042:63;;18309:66;25018:20;;:87;25011:95;;;;:::i;:::-;;25117:44;25135:6;25143:5;25150:10;25117:17;:44::i;:::-;24914:264;;;:::o;26435:104::-;26477:7;26504:27;:25;:27::i;:::-;26497:34;;26435:104;:::o;24392:185::-;24537:1;24492:41;24484:50;;:54;;;;:::i;:::-;24476:63;;18309:66;24452:20;;:87;24445:95;;;;:::i;:::-;;24551:18;24562:6;24551:10;:18::i;:::-;24392:185;:::o;26547:191::-;26661:69;26700:10;26712:5;26719:10;26661:38;:69::i;:::-;26547:191;;;:::o;26073:102::-;26114:7;26141:26;:24;:26::i;:::-;26134:33;;26073:102;:::o;26249:111::-;26314:38;26342:9;26314:27;:38::i;:::-;26249:111;:::o;25894:105::-;25944:7;25971:20;:18;:20::i;:::-;25964:27;;25894:105;:::o;25539:272::-;25732:1;25687:41;25679:50;;:54;;;;:::i;:::-;25671:63;;18309:66;25647:20;;:87;25640:95;;;;:::i;:::-;;25746:48;25768:6;25776:5;25783:10;25746:21;:48::i;:::-;25539:272;;;:::o;3348:46::-;:::o;26862:142::-;26929:12;26961:35;:33;:35::i;:::-;26954:42;;26862:142;:::o;1035:918::-;1378:14;1375:1;1372;1359:34;1596:1;1593;1577:14;1574:1;1558:14;1551:5;1538:60;1675:16;1672:1;1669;1654:38;1715:6;1789:1;1784:68;;;;1903:16;1900:1;1893:27;1784:68;1820:16;1817:1;1810:27;19499:304;19642:29;19653:17;19642:10;:29::i;:::-;19700:1;19686:4;:11;:15;:28;;;;19705:9;19686:28;19682:114;;;19731:53;19760:17;19779:4;19731:28;:53::i;:::-;;19682:114;19499:304;;;:::o;22691:126::-;22736:7;22763:40;22436:66;22790:12;;22763:26;:40::i;:::-;:46;;;;;;;;;;;;22756:53;;22691:126;:::o;19203:155::-;19270:37;19289:17;19270:18;:37::i;:::-;19332:17;19323:27;;;;;;;;;;;;19203:155;:::o;23593:353::-;23734:21;23745:9;23734:10;:21::i;:::-;23786:9;23771:25;;;;;;;;;;;;23825:1;23811:4;:11;:15;:28;;;;23830:9;23811:28;23807:132;;;23856:71;23893:9;23885:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23922:4;23856:28;:71::i;:::-;;23807:132;23593:353;;;:::o;21475:124::-;21519:7;21546:39;21199:66;21573:11;;21546:26;:39::i;:::-;:45;;;;;;;;;;;;21539:52;;21475:124;:::o;22008:138::-;22073:35;22086:11;:9;:11::i;:::-;22099:8;22073:35;;;;;;;:::i;:::-;;;;;;;;22119:19;22129:8;22119:9;:19::i;:::-;22008:138;:::o;18590:142::-;18643:7;18670:48;18309:66;18697:20;;18670:26;:48::i;:::-;:54;;;;;;;;;;;;18663:61;;18590:142;:::o;19982:970::-;20436:42;17961:66;20463:14;;20436:26;:42::i;:::-;:48;;;;;;;;;;;;20432:513;;;20501:37;20520:17;20501:18;:37::i;:::-;20432:513;;;20593:17;20575:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20571:295;;20794:56;;;;;;;;;;:::i;:::-;;;;;;;;20571:295;18309:66;20686:20;;20678:4;:28;20670:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;20628:140;20880:53;20898:17;20917:4;20923:9;20880:17;:53::i;:::-;20432:513;19982:970;;;:::o;11538:200::-;11621:12;11653:77;11674:6;11682:4;11653:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;11646:84;;11538:200;;;;:::o;16011:195::-;16072:21;16184:4;16174:14;;16011:195;;;:::o;18828:262::-;18910:37;18929:17;18910:18;:37::i;:::-;18902:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;19065:17;19008:48;18309:66;19035:20;;19008:26;:48::i;:::-;:54;;;:74;;;;;;;;;;;;;;;;;;18828:262;:::o;22904:378::-;22970:29;22989:9;22970:18;:29::i;:::-;22962:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;23074:55;23101:9;23093:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23074:18;:55::i;:::-;23052:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;23265:9;23216:40;22436:66;23243:12;;23216:26;:40::i;:::-;:46;;;:58;;;;;;;;;;;;;;;;;;22904:378;:::o;21686:204::-;21770:1;21750:22;;:8;:22;;;21742:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21874:8;21826:39;21199:66;21853:11;;21826:26;:39::i;:::-;:45;;;:56;;;;;;;;;;;;;;;;;;21686:204;:::o;16309:195::-;16370:21;16482:4;16472:14;;16309:195;;;:::o;11932:332::-;12077:12;12103;12117:23;12144:6;:19;;12164:4;12144:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12102:67;;;;12187:69;12214:6;12222:7;12231:10;12243:12;12187:26;:69::i;:::-;12180:76;;;;11932:332;;;;;:::o;6110:326::-;6170:4;6427:1;6405:7;:19;;;:23;6398:30;;6110:326;;;:::o;12560:644::-;12745:12;12774:7;12770:427;;;12823:1;12802:10;:17;:22;12798:290;;13020:18;13031:6;13020:10;:18::i;:::-;13012:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;12798:290;13109:10;13102:17;;;;12770:427;13152:33;13160:10;13172:12;13152:7;:33::i;:::-;12560:644;;;;;;;:::o;13746:552::-;13927:1;13907:10;:17;:21;13903:388;;;14139:10;14133:17;14196:15;14183:10;14179:2;14175:19;14168:44;13903:388;14266:12;14259:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:75:1;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:117::-;950:1;947;940:12;964:117;1073:1;1070;1063:12;1087:102;1128:6;1179:2;1175:7;1170:2;1163:5;1159:14;1155:28;1145:38;;1087:102;;;:::o;1195:180::-;1243:77;1240:1;1233:88;1340:4;1337:1;1330:15;1364:4;1361:1;1354:15;1381:281;1464:27;1486:4;1464:27;:::i;:::-;1456:6;1452:40;1594:6;1582:10;1579:22;1558:18;1546:10;1543:34;1540:62;1537:88;;;1605:18;;:::i;:::-;1537:88;1645:10;1641:2;1634:22;1424:238;1381:281;;:::o;1668:129::-;1702:6;1729:20;;:::i;:::-;1719:30;;1758:33;1786:4;1778:6;1758:33;:::i;:::-;1668:129;;;:::o;1803:307::-;1864:4;1954:18;1946:6;1943:30;1940:56;;;1976:18;;:::i;:::-;1940:56;2014:29;2036:6;2014:29;:::i;:::-;2006:37;;2098:4;2092;2088:15;2080:23;;1803:307;;;:::o;2116:146::-;2213:6;2208:3;2203;2190:30;2254:1;2245:6;2240:3;2236:16;2229:27;2116:146;;;:::o;2268:423::-;2345:5;2370:65;2386:48;2427:6;2386:48;:::i;:::-;2370:65;:::i;:::-;2361:74;;2458:6;2451:5;2444:21;2496:4;2489:5;2485:16;2534:3;2525:6;2520:3;2516:16;2513:25;2510:112;;;2541:79;;:::i;:::-;2510:112;2631:54;2678:6;2673:3;2668;2631:54;:::i;:::-;2351:340;2268:423;;;;;:::o;2710:338::-;2765:5;2814:3;2807:4;2799:6;2795:17;2791:27;2781:122;;2822:79;;:::i;:::-;2781:122;2939:6;2926:20;2964:78;3038:3;3030:6;3023:4;3015:6;3011:17;2964:78;:::i;:::-;2955:87;;2771:277;2710:338;;;;:::o;3054:90::-;3088:7;3131:5;3124:13;3117:21;3106:32;;3054:90;;;:::o;3150:116::-;3220:21;3235:5;3220:21;:::i;:::-;3213:5;3210:32;3200:60;;3256:1;3253;3246:12;3200:60;3150:116;:::o;3272:133::-;3315:5;3353:6;3340:20;3331:29;;3369:30;3393:5;3369:30;:::i;:::-;3272:133;;;;:::o;3411:791::-;3494:6;3502;3510;3559:2;3547:9;3538:7;3534:23;3530:32;3527:119;;;3565:79;;:::i;:::-;3527:119;3685:1;3710:53;3755:7;3746:6;3735:9;3731:22;3710:53;:::i;:::-;3700:63;;3656:117;3840:2;3829:9;3825:18;3812:32;3871:18;3863:6;3860:30;3857:117;;;3893:79;;:::i;:::-;3857:117;3998:62;4052:7;4043:6;4032:9;4028:22;3998:62;:::i;:::-;3988:72;;3783:287;4109:2;4135:50;4177:7;4168:6;4157:9;4153:22;4135:50;:::i;:::-;4125:60;;4080:115;3411:791;;;;;:::o;4208:118::-;4295:24;4313:5;4295:24;:::i;:::-;4290:3;4283:37;4208:118;;:::o;4332:222::-;4425:4;4463:2;4452:9;4448:18;4440:26;;4476:71;4544:1;4533:9;4529:17;4520:6;4476:71;:::i;:::-;4332:222;;;;:::o;4560:329::-;4619:6;4668:2;4656:9;4647:7;4643:23;4639:32;4636:119;;;4674:79;;:::i;:::-;4636:119;4794:1;4819:53;4864:7;4855:6;4844:9;4840:22;4819:53;:::i;:::-;4809:63;;4765:117;4560:329;;;;:::o;4895:77::-;4932:7;4961:5;4950:16;;4895:77;;;:::o;4978:180::-;5026:77;5023:1;5016:88;5123:4;5120:1;5113:15;5147:4;5144:1;5137:15;5164:194;5204:4;5224:20;5242:1;5224:20;:::i;:::-;5219:25;;5258:20;5276:1;5258:20;:::i;:::-;5253:25;;5302:1;5299;5295:9;5287:17;;5326:1;5320:4;5317:11;5314:37;;;5331:18;;:::i;:::-;5314:37;5164:194;;;;:::o;5364:180::-;5412:77;5409:1;5402:88;5509:4;5506:1;5499:15;5533:4;5530:1;5523:15;5550:143;5607:5;5638:6;5632:13;5623:22;;5654:33;5681:5;5654:33;:::i;:::-;5550:143;;;;:::o;5699:351::-;5769:6;5818:2;5806:9;5797:7;5793:23;5789:32;5786:119;;;5824:79;;:::i;:::-;5786:119;5944:1;5969:64;6025:7;6016:6;6005:9;6001:22;5969:64;:::i;:::-;5959:74;;5915:128;5699:351;;;;:::o;6056:332::-;6177:4;6215:2;6204:9;6200:18;6192:26;;6228:71;6296:1;6285:9;6281:17;6272:6;6228:71;:::i;:::-;6309:72;6377:2;6366:9;6362:18;6353:6;6309:72;:::i;:::-;6056:332;;;;;:::o;6394:77::-;6431:7;6460:5;6449:16;;6394:77;;;:::o;6477:122::-;6550:24;6568:5;6550:24;:::i;:::-;6543:5;6540:35;6530:63;;6589:1;6586;6579:12;6530:63;6477:122;:::o;6605:143::-;6662:5;6693:6;6687:13;6678:22;;6709:33;6736:5;6709:33;:::i;:::-;6605:143;;;;:::o;6754:351::-;6824:6;6873:2;6861:9;6852:7;6848:23;6844:32;6841:119;;;6879:79;;:::i;:::-;6841:119;6999:1;7024:64;7080:7;7071:6;7060:9;7056:22;7024:64;:::i;:::-;7014:74;;6970:128;6754:351;;;;:::o;7111:169::-;7195:11;7229:6;7224:3;7217:19;7269:4;7264:3;7260:14;7245:29;;7111:169;;;;:::o;7286:233::-;7426:34;7422:1;7414:6;7410:14;7403:58;7495:16;7490:2;7482:6;7478:15;7471:41;7286:233;:::o;7525:366::-;7667:3;7688:67;7752:2;7747:3;7688:67;:::i;:::-;7681:74;;7764:93;7853:3;7764:93;:::i;:::-;7882:2;7877:3;7873:12;7866:19;;7525:366;;;:::o;7897:419::-;8063:4;8101:2;8090:9;8086:18;8078:26;;8150:9;8144:4;8140:20;8136:1;8125:9;8121:17;8114:47;8178:131;8304:4;8178:131;:::i;:::-;8170:139;;7897:419;;;:::o;8322:228::-;8462:34;8458:1;8450:6;8446:14;8439:58;8531:11;8526:2;8518:6;8514:15;8507:36;8322:228;:::o;8556:366::-;8698:3;8719:67;8783:2;8778:3;8719:67;:::i;:::-;8712:74;;8795:93;8884:3;8795:93;:::i;:::-;8913:2;8908:3;8904:12;8897:19;;8556:366;;;:::o;8928:419::-;9094:4;9132:2;9121:9;9117:18;9109:26;;9181:9;9175:4;9171:20;9167:1;9156:9;9152:17;9145:47;9209:131;9335:4;9209:131;:::i;:::-;9201:139;;8928:419;;;:::o;9353:232::-;9493:34;9489:1;9481:6;9477:14;9470:58;9562:15;9557:2;9549:6;9545:15;9538:40;9353:232;:::o;9591:366::-;9733:3;9754:67;9818:2;9813:3;9754:67;:::i;:::-;9747:74;;9830:93;9919:3;9830:93;:::i;:::-;9948:2;9943:3;9939:12;9932:19;;9591:366;;;:::o;9963:419::-;10129:4;10167:2;10156:9;10152:18;10144:26;;10216:9;10210:4;10206:20;10202:1;10191:9;10187:17;10180:47;10244:131;10370:4;10244:131;:::i;:::-;10236:139;;9963:419;;;:::o;10388:224::-;10528:34;10524:1;10516:6;10512:14;10505:58;10597:7;10592:2;10584:6;10580:15;10573:32;10388:224;:::o;10618:366::-;10760:3;10781:67;10845:2;10840:3;10781:67;:::i;:::-;10774:74;;10857:93;10946:3;10857:93;:::i;:::-;10975:2;10970:3;10966:12;10959:19;;10618:366;;;:::o;10990:419::-;11156:4;11194:2;11183:9;11179:18;11171:26;;11243:9;11237:4;11233:20;11229:1;11218:9;11214:17;11207:47;11271:131;11397:4;11271:131;:::i;:::-;11263:139;;10990:419;;;:::o;11415:235::-;11555:34;11551:1;11543:6;11539:14;11532:58;11624:18;11619:2;11611:6;11607:15;11600:43;11415:235;:::o;11656:366::-;11798:3;11819:67;11883:2;11878:3;11819:67;:::i;:::-;11812:74;;11895:93;11984:3;11895:93;:::i;:::-;12013:2;12008:3;12004:12;11997:19;;11656:366;;;:::o;12028:419::-;12194:4;12232:2;12221:9;12217:18;12209:26;;12281:9;12275:4;12271:20;12267:1;12256:9;12252:17;12245:47;12309:131;12435:4;12309:131;:::i;:::-;12301:139;;12028:419;;;:::o;12453:225::-;12593:34;12589:1;12581:6;12577:14;12570:58;12662:8;12657:2;12649:6;12645:15;12638:33;12453:225;:::o;12684:366::-;12826:3;12847:67;12911:2;12906:3;12847:67;:::i;:::-;12840:74;;12923:93;13012:3;12923:93;:::i;:::-;13041:2;13036:3;13032:12;13025:19;;12684:366;;;:::o;13056:419::-;13222:4;13260:2;13249:9;13245:18;13237:26;;13309:9;13303:4;13299:20;13295:1;13284:9;13280:17;13273:47;13337:131;13463:4;13337:131;:::i;:::-;13329:139;;13056:419;;;:::o;13481:98::-;13532:6;13566:5;13560:12;13550:22;;13481:98;;;:::o;13585:147::-;13686:11;13723:3;13708:18;;13585:147;;;;:::o;13738:246::-;13819:1;13829:113;13843:6;13840:1;13837:13;13829:113;;;13928:1;13923:3;13919:11;13913:18;13909:1;13904:3;13900:11;13893:39;13865:2;13862:1;13858:10;13853:15;;13829:113;;;13976:1;13967:6;13962:3;13958:16;13951:27;13800:184;13738:246;;;:::o;13990:386::-;14094:3;14122:38;14154:5;14122:38;:::i;:::-;14176:88;14257:6;14252:3;14176:88;:::i;:::-;14169:95;;14273:65;14331:6;14326:3;14319:4;14312:5;14308:16;14273:65;:::i;:::-;14363:6;14358:3;14354:16;14347:23;;14098:278;13990:386;;;;:::o;14382:271::-;14512:3;14534:93;14623:3;14614:6;14534:93;:::i;:::-;14527:100;;14644:3;14637:10;;14382:271;;;;:::o;14659:179::-;14799:31;14795:1;14787:6;14783:14;14776:55;14659:179;:::o;14844:366::-;14986:3;15007:67;15071:2;15066:3;15007:67;:::i;:::-;15000:74;;15083:93;15172:3;15083:93;:::i;:::-;15201:2;15196:3;15192:12;15185:19;;14844:366;;;:::o;15216:419::-;15382:4;15420:2;15409:9;15405:18;15397:26;;15469:9;15463:4;15459:20;15455:1;15444:9;15440:17;15433:47;15497:131;15623:4;15497:131;:::i;:::-;15489:139;;15216:419;;;:::o;15641:99::-;15693:6;15727:5;15721:12;15711:22;;15641:99;;;:::o;15746:377::-;15834:3;15862:39;15895:5;15862:39;:::i;:::-;15917:71;15981:6;15976:3;15917:71;:::i;:::-;15910:78;;15997:65;16055:6;16050:3;16043:4;16036:5;16032:16;15997:65;:::i;:::-;16087:29;16109:6;16087:29;:::i;:::-;16082:3;16078:39;16071:46;;15838:285;15746:377;;;;:::o;16129:313::-;16242:4;16280:2;16269:9;16265:18;16257:26;;16329:9;16323:4;16319:20;16315:1;16304:9;16300:17;16293:47;16357:78;16430:4;16421:6;16357:78;:::i;:::-;16349:86;;16129:313;;;;:::o

Swarm Source

ipfs://95e9db4d83c49c7e36634675b83c3c95f37d9a124eee2ae6106743797861a426
Loading...
Loading
Loading...
Loading
[ 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.