Contract 0xe165132fda537fa89ca1b52a647240c2b84c8f89

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xcd546ae0700f35382beeda68953065d678239c6c825f2557230927e8b12d9e93Stake48562652022-09-29 10:39:394 mins ago0xa2fbad8c810387682aa09f719f4c660dfb0e44d1 IN  Tectonic: Staking Pool0 CRO0.5210456616430
0x04f74818d27eb3cfcf7d5f06d3038b4635bb5782905746d817b2174129ee76d6Stake48562552022-09-29 10:38:435 mins ago0x4f6a9fe4fb59f930cc496617b863a4f9718a8a65 IN  Tectonic: Staking Pool0 CRO0.5210457062930
0xa81539979f6da0e9f14800d3fb6598646f9fcb47d2ecd9b99b152831d257d023Stake48562542022-09-29 10:38:375 mins ago0xa2fbad8c810387682aa09f719f4c660dfb0e44d1 IN  Tectonic: Staking Pool0 CRO0.5211046182930
0x150e0cbae593afb8c21c0216314b7b30753340e9a002d3a752c1025b9279f1baStake48562422022-09-29 10:37:307 mins ago0x011fcb8555b1de624100a7466a94fe81d1cc6f5f IN  Tectonic: Staking Pool0 CRO0.4474184584380
0x56a7f50aa227b3f0bb349bd57c7d7ea795fb2c9d4bb22dae53e70521ca0f6a09Stake48561832022-09-29 10:31:5612 mins ago0xfbc23ee0040fb47d557ac200db0551da834e03ff IN  Tectonic: Staking Pool0 CRO0.5211049676110
0xfd756805184cf86c56175fcfe86202d999f968c881b470373f9a6ce48dbe84b2Stake48561202022-09-29 10:26:0018 mins ago0x2cce280e2470d220a6fa4e4b328f7cf52e327cc0 IN  Tectonic: Staking Pool0 CRO0.447477888160
0x55ef1c8affef743ccd495dd527f309fc5bc1ff48e6b5ef0de00ee29deef9de94Stake48561132022-09-29 10:25:2019 mins ago0xee709442ba19482f1ca7983b986c108cb7b95b30 IN  Tectonic: Staking Pool0 CRO0.5210464213680
0x900acc3124f1c77f3cb89de39ea96e83efe2092caad0dce3cadf76bf27dbef0eStake48560672022-09-29 10:21:0123 mins ago0xffc0161955b6b62027ca808e55a6d91b0f22ef15 IN  Tectonic: Staking Pool0 CRO0.5944973814970
0xef866b8ab916814176e535eb68f98e8a0ff3e67dd6050697cc67c90d9f67e815Unstake48560062022-09-29 10:15:1529 mins ago0xe82bc6a5364d16d23645054cda1e694f8b69f688 IN  Tectonic: Staking Pool0 CRO0.7203859935650
0x4bbfd8150cbb81ac21f2d347f7356fa67757e3e6c67a3a9379c00c81be1d3f1aStake48559842022-09-29 10:13:1031 mins ago0xe82bc6a5364d16d23645054cda1e694f8b69f688 IN  Tectonic: Staking Pool0 CRO0.5208114605320
0xd40924fb7626d8d033dd8621c2aa7da453af6e74048be95c3eab942cbdab3e52Release48559472022-09-29 10:09:4134 mins ago0xe82bc6a5364d16d23645054cda1e694f8b69f688 IN  Tectonic: Staking Pool0 CRO0.5209049415660
0x394c94704d06e634b4086625ef857ec6dd330f6fa52c8734061cd3473e3e28f8Release48559132022-09-29 10:06:2838 mins ago0x0ed594c4cddd2a2a161b637d98b28ace5eb2d807 IN  Tectonic: Staking Pool0 CRO0.5798071039930
0x7f21328925c10c0236286b330da7f8750fa5e3dc9b37cb0c6982134f863c2303Stake48558662022-09-29 10:02:0242 mins ago0x08a2d7f5e25e418d8f5320c6712a81463dbc63a0 IN  Tectonic: Staking Pool0 CRO0.5210476447080
0xa7958ede9dc7c18c52e816d08934e5e035ba31f16df94387b4ddfa7744ea293eRelease48558472022-09-29 10:00:1544 mins ago0x9adab393b2264631b309b77be57f3c23abdc47cc IN  Tectonic: Staking Pool0 CRO0.5798074702370
0xbbb60e92b270526ec36673cf56784545347722383076f889f3b3a3b15553815eStake48558272022-09-29 9:58:0746 mins ago0x2e478849dff89be94375a12a19631ee398e6f354 IN  Tectonic: Staking Pool0 CRO0.447556942471 4,910.006828937
0x3b706ef66933d00c0d7218bc9e1632465622704b9b2fd0a9fd80e7a5428cce1fRelease48558262022-09-29 9:58:0146 mins ago0xa54c5d3aa2382c44a45e7b732b814b5507d60605 IN  Tectonic: Staking Pool0 CRO0.5798075853650
0x2b792562986c7197d7b8d905bddc12f7fb00f7c6f56e95734cb347697a6fa869Stake48557692022-09-29 9:52:3751 mins ago0xfbc23ee0040fb47d557ac200db0551da834e03ff IN  Tectonic: Staking Pool0 CRO0.5211070249690
0x37eccaa08dff8ff71b9abf1d889182838dbcba3515444daa0964a6f88dd41decUnstake48556892022-09-29 9:45:0259 mins ago0x9e2a1975ed7f8cd1d346754ff3dea99ff3de859d IN  Tectonic: Staking Pool0 CRO0.7205648599930
0x202b89b5b0ccee879faee49428c213c597b75520267fb11dd3ca1be8cd6e8f5eStake48556602022-09-29 9:42:161 hr 2 mins ago0x91de13bba4861902adc510c56bd9d84fbf3b878e IN  Tectonic: Staking Pool0 CRO0.525049335283 4,946.202947505
0xc1be9340c34c88bc8128a65af572b1cb7810feb9825127ad96aec9a94cba5558Unstake48556142022-09-29 9:37:541 hr 6 mins ago0xbd8cbe84d7393fd8fe01f85e9675566b58a78f08 IN  Tectonic: Staking Pool0 CRO0.7205064709430
0x23e53bc6adbc75fa4c75a499aa44806cb34a3f90c73f8835e7d8c3feae519732Unstake48555912022-09-29 9:35:441 hr 8 mins ago0x11b8214d95a0fe1d825bc6fbebc651ea39ce320e IN  Tectonic: Staking Pool0 CRO0.7205066357280
0xc5597f06e439b41e678f557fd8d403fadd96a1d5db2a6f6d7ba680789e45b507Stake48555732022-09-29 9:34:011 hr 10 mins ago0xfbc23ee0040fb47d557ac200db0551da834e03ff IN  Tectonic: Staking Pool0 CRO0.5211079926620
0xdff4f64f54523578630d22248b604897f33978c4d4a8d8466a8a0b32950ae100Stake48554552022-09-29 9:22:531 hr 21 mins ago0x2dd011b5e4105035300b7d9200f1987c56a79d50 IN  Tectonic: Staking Pool0 CRO0.5210496743480
0xc9cc166118940d3db2f7cc360e4115c5a952b593714455063e5f1fbfc1eeb4afStake48554532022-09-29 9:22:421 hr 21 mins ago0xf36dbb3f21b19d9d483cb16cbebb97cd7b9d1266 IN  Tectonic: Staking Pool0 CRO0.5210496843210
0x442e5d83a0c44e27dd223279debeff3efc10b2a9d0eeda4f0f133b7b1c54afdaStake48554372022-09-29 9:21:121 hr 23 mins ago0x116e2f0ce5929fd6f65fd854438905cfbec48952 IN  Tectonic: Staking Pool0 CRO0.4474218858240
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x53f15a311174d21b36ba9a172e68ab15de5e497172e8d55f77541cff0f4ee57948560102022-09-29 10:15:3728 mins ago Tectonic: Staking Pool VVS Finance: Router3.284063928844347465 CRO
0x53f15a311174d21b36ba9a172e68ab15de5e497172e8d55f77541cff0f4ee57948560102022-09-29 10:15:3728 mins ago 0xd13dd8ec60b571c1a20ebbb3fe3a7c718598c808 Tectonic: Staking Pool3.284063928844347465 CRO
0x5f470716d63206b049ac1073f582f3c3ca0caffe1be169fae5d74bb26a3d559148558702022-09-29 10:02:2542 mins ago Tectonic: Staking Pool VVS Finance: Router10.342001926761947142 CRO
0x5f470716d63206b049ac1073f582f3c3ca0caffe1be169fae5d74bb26a3d559148558702022-09-29 10:02:2542 mins ago 0xd13dd8ec60b571c1a20ebbb3fe3a7c718598c808 Tectonic: Staking Pool10.342001926761947142 CRO
0xa9cd22200417662c31a69f401457e22cb8d1779437a84113cdfbf3a87d00f60048554992022-09-29 9:27:021 hr 17 mins ago Tectonic: Staking Pool VVS Finance: Router16.760636688211182269 CRO
0xa9cd22200417662c31a69f401457e22cb8d1779437a84113cdfbf3a87d00f60048554992022-09-29 9:27:021 hr 17 mins ago 0xd13dd8ec60b571c1a20ebbb3fe3a7c718598c808 Tectonic: Staking Pool16.760636688211182269 CRO
0x0493b3450c71448c6b0e501621383e4e6562e61c2c09ba5547af929ca8c8159a48548182022-09-29 8:22:422 hrs 21 mins ago Tectonic: Staking Pool VVS Finance: Router1.611375293154399315 CRO
0x0493b3450c71448c6b0e501621383e4e6562e61c2c09ba5547af929ca8c8159a48548182022-09-29 8:22:422 hrs 21 mins ago 0xd13dd8ec60b571c1a20ebbb3fe3a7c718598c808 Tectonic: Staking Pool1.611375293154399315 CRO
0x5e9791c0854819ffb9b4df657146103d9735832f4bff1015130dc2e4b0367b8048547552022-09-29 8:16:452 hrs 27 mins ago Tectonic: Staking Pool VVS Finance: Router7.826664032042503791 CRO
0x5e9791c0854819ffb9b4df657146103d9735832f4bff1015130dc2e4b0367b8048547552022-09-29 8:16:452 hrs 27 mins ago 0xd13dd8ec60b571c1a20ebbb3fe3a7c718598c808 Tectonic: Staking Pool7.826664032042503791 CRO
0x54da5f0271bc53b5116e3df959cb8363a227f1de81e88709077fa6706538c34648538332022-09-29 6:49:223 hrs 55 mins ago Tectonic: Staking Pool VVS Finance: Router7.399105517639919793 CRO
0x54da5f0271bc53b5116e3df959cb8363a227f1de81e88709077fa6706538c34648538332022-09-29 6:49:223 hrs 55 mins ago 0xd13dd8ec60b571c1a20ebbb3fe3a7c718598c808 Tectonic: Staking Pool7.399105517639919793 CRO
0x46b3ff217ea691f770829daf4e5d71fe27afbc74e5c07b97362c27a1e68d362848533772022-09-29 6:06:224 hrs 38 mins ago Tectonic: Staking Pool VVS Finance: Router3.715989673749454771 CRO
0x46b3ff217ea691f770829daf4e5d71fe27afbc74e5c07b97362c27a1e68d362848533772022-09-29 6:06:224 hrs 38 mins ago 0xd13dd8ec60b571c1a20ebbb3fe3a7c718598c808 Tectonic: Staking Pool3.715989673749454771 CRO
0x0ee409d6e1faf5a85aefcbff163648744c8d051eb32b3a83d15e41010d2051ba48528912022-09-29 5:20:285 hrs 24 mins ago Tectonic: Staking Pool VVS Finance: Router2.006000825558533582 CRO
0x0ee409d6e1faf5a85aefcbff163648744c8d051eb32b3a83d15e41010d2051ba48528912022-09-29 5:20:285 hrs 24 mins ago 0xd13dd8ec60b571c1a20ebbb3fe3a7c718598c808 Tectonic: Staking Pool2.006000825558533582 CRO
0xe5d0caa9c59265fafc4827e6cda4f2e9096d000f1926a0889bdeaf750108fcaf48526442022-09-29 4:57:095 hrs 47 mins ago Tectonic: Staking Pool VVS Finance: Router3.156978584346616179 CRO
0xe5d0caa9c59265fafc4827e6cda4f2e9096d000f1926a0889bdeaf750108fcaf48526442022-09-29 4:57:095 hrs 47 mins ago 0xd13dd8ec60b571c1a20ebbb3fe3a7c718598c808 Tectonic: Staking Pool3.156978584346616179 CRO
0x9b9504a1f5b4276b1affff9c966585955173478e63c46c0b2167fd93e8bab14f48524702022-09-29 4:40:446 hrs 3 mins ago Tectonic: Staking Pool VVS Finance: Router17.725058616039156558 CRO
0x9b9504a1f5b4276b1affff9c966585955173478e63c46c0b2167fd93e8bab14f48524702022-09-29 4:40:446 hrs 3 mins ago 0xd13dd8ec60b571c1a20ebbb3fe3a7c718598c808 Tectonic: Staking Pool17.725058616039156558 CRO
0xc72ce87374a4074030a6ef667c82b09d59c14b35f3a17333a44129550b33321848519302022-09-29 3:49:456 hrs 54 mins ago Tectonic: Staking Pool VVS Finance: Router0.559037512063796127 CRO
0xc72ce87374a4074030a6ef667c82b09d59c14b35f3a17333a44129550b33321848519302022-09-29 3:49:456 hrs 54 mins ago 0xd13dd8ec60b571c1a20ebbb3fe3a7c718598c808 Tectonic: Staking Pool0.559037512063796127 CRO
0x16ae9e2204b24053d8fac81f7d999e1b5960f0453621f34f3169d262774842b748518882022-09-29 3:45:476 hrs 58 mins ago Tectonic: Staking Pool VVS Finance: Router10.029768316871018429 CRO
0x16ae9e2204b24053d8fac81f7d999e1b5960f0453621f34f3169d262774842b748518882022-09-29 3:45:476 hrs 58 mins ago 0xd13dd8ec60b571c1a20ebbb3fe3a7c718598c808 Tectonic: Staking Pool10.029768316871018429 CRO
0x325576bfc0df0a0dd8f55e661e92493f654fce4bfc4ce765ca057a6f9dfd85d048514952022-09-29 3:08:417 hrs 35 mins ago Tectonic: Staking Pool VVS Finance: Router0.29595979369776801 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ERC1967ProxyWithAdminControl

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-03-22
*/

// Sources flattened with hardhat v2.6.4 https://hardhat.org

// File openzeppelin-solidity/contracts/utils/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


// File openzeppelin-solidity/contracts/access/[email protected]



pragma solidity ^0.8.0;

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

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

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

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File openzeppelin-solidity/contracts/proxy/[email protected]



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 internall 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-solidity/contracts/proxy/beacon/[email protected]



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-solidity/contracts/utils/[email protected]



pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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-solidity/contracts/utils/[email protected]



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-solidity/contracts/proxy/ERC1967/[email protected]



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 _upgradeToAndCallSecure(
        address newImplementation,
        bytes memory data,
        bool forceCall
    ) internal {
        address oldImplementation = _getImplementation();

        // Initial upgrade and setup call
        _setImplementation(newImplementation);
        if (data.length > 0 || forceCall) {
            Address.functionDelegateCall(newImplementation, data);
        }

        // Perform rollback test if not already in progress
        StorageSlot.BooleanSlot storage rollbackTesting = StorageSlot.getBooleanSlot(_ROLLBACK_SLOT);
        if (!rollbackTesting.value) {
            // Trigger rollback using upgradeTo from the new implementation
            rollbackTesting.value = true;
            Address.functionDelegateCall(
                newImplementation,
                abi.encodeWithSignature("upgradeTo(address)", oldImplementation)
            );
            rollbackTesting.value = false;
            // Check rollback was effective
            require(oldImplementation == _getImplementation(), "ERC1967Upgrade: upgrade breaks further upgrades");
            // Finally reset to the new implementation and log the upgrade
            _upgradeTo(newImplementation);
        }
    }

    /**
     * @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-solidity/contracts/proxy/ERC1967/[email protected]



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 contracts/ERC1967ProxyWithAdminControl.sol

pragma solidity ^0.8.0;


contract ERC1967ProxyWithAdminControl is  ERC1967Proxy {

  event ImplementationChanged(
    uint256 indexed timestamp,
    address newImplementationAddress
  );

  modifier onlyAdmin() {
      require(msg.sender == _getAdmin(), "ERC1967ProxyWithAdminControl: caller is not the admin");
      _;
  }

  function upgradeTo(address _newImplementation) external onlyAdmin {
    _upgradeTo(_newImplementation);
    emit ImplementationChanged(block.timestamp, _newImplementation);
  }

  function changeProxyAdmin(address _newAdmin) external onlyAdmin {
    require(_newAdmin != address(0), "New admin cannot be the zero address");
    _changeAdmin(_newAdmin);
  }

  function implementation() external view returns (address) {
    return _implementation();
  }

  function getProxyAdmin() external view returns (address) {
    return _getAdmin();
  }

  constructor(address _logic, bytes memory _data) 
    ERC1967Proxy(_logic, _data) {
        _changeAdmin(msg.sender);
    }

}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_logic","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":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"address","name":"newImplementationAddress","type":"address"}],"name":"ImplementationChanged","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":"changeProxyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getProxyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040516200183838038062001838833981810160405281019062000037919062000645565b818160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd60001c6200006b9190620008fe565b60001b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b14620000c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b620000db82826000620000f660201b60201c565b5050620000ee336200013960201b60201c565b505062000b59565b62000107836200019760201b60201c565b600082511180620001155750805b156200013457620001328383620001ee60201b620002e61760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200016a6200022460201b60201c565b826040516200017b929190620007b6565b60405180910390a162000194816200028860201b60201c565b50565b620001a8816200037960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606200021c838360405180606001604052806027815260200162001811602791396200044f60201b60201c565b905092915050565b60006200025f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b6200053360201b620003131760201c565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620002fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f29062000807565b60405180910390fd5b80620003357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b6200053360201b620003131760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6200038f816200053d60201b6200031d1760201c565b620003d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c89062000829565b60405180910390fd5b806200040b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200053360201b620003131760201c565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606062000462846200053d60201b60201c565b620004a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200049b906200084b565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1685604051620004ce91906200079d565b600060405180830381855af49150503d80600081146200050b576040519150601f19603f3d011682016040523d82523d6000602084013e62000510565b606091505b5091509150620005288282866200055060201b60201c565b925050509392505050565b6000819050919050565b600080823b905060008111915050919050565b606083156200056257829050620005b5565b600083511115620005765782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005ac9190620007e3565b60405180910390fd5b9392505050565b6000620005d3620005cd8462000896565b6200086d565b905082815260208101848484011115620005ec57600080fd5b620005f984828562000977565b509392505050565b600081519050620006128162000b3f565b92915050565b600082601f8301126200062a57600080fd5b81516200063c848260208601620005bc565b91505092915050565b600080604083850312156200065957600080fd5b6000620006698582860162000601565b925050602083015167ffffffffffffffff8111156200068757600080fd5b620006958582860162000618565b9150509250929050565b620006aa8162000939565b82525050565b6000620006bd82620008cc565b620006c98185620008e2565b9350620006db81856020860162000977565b80840191505092915050565b6000620006f482620008d7565b620007008185620008ed565b93506200071281856020860162000977565b6200071d8162000a41565b840191505092915050565b600062000737602683620008ed565b9150620007448262000a52565b604082019050919050565b60006200075e602d83620008ed565b91506200076b8262000aa1565b604082019050919050565b600062000785602683620008ed565b9150620007928262000af0565b604082019050919050565b6000620007ab8284620006b0565b915081905092915050565b6000604082019050620007cd60008301856200069f565b620007dc60208301846200069f565b9392505050565b60006020820190508181036000830152620007ff8184620006e7565b905092915050565b60006020820190508181036000830152620008228162000728565b9050919050565b6000602082019050818103600083015262000844816200074f565b9050919050565b60006020820190508181036000830152620008668162000776565b9050919050565b6000620008796200088c565b9050620008878282620009ad565b919050565b6000604051905090565b600067ffffffffffffffff821115620008b457620008b362000a12565b5b620008bf8262000a41565b9050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006200090b826200096d565b915062000918836200096d565b9250828210156200092e576200092d620009e3565b5b828203905092915050565b600062000946826200094d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620009975780820151818401526020810190506200097a565b83811115620009a7576000848401525b50505050565b620009b88262000a41565b810181811067ffffffffffffffff82111715620009da57620009d962000a12565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b62000b4a8162000939565b811462000b5657600080fd5b50565b610ca88062000b696000396000f3fe6080604052600436106100435760003560e01c80633659cfe61461005c5780635c60da1b146100855780638b3240a0146100b05780639f712f2f146100db57610052565b3661005257610050610104565b005b61005a610104565b005b34801561006857600080fd5b50610083600480360381019061007e9190610793565b61011e565b005b34801561009157600080fd5b5061009a6101d7565b6040516100a791906108fb565b60405180910390f35b3480156100bc57600080fd5b506100c56101e6565b6040516100d291906108fb565b60405180910390f35b3480156100e757600080fd5b5061010260048036038101906100fd9190610793565b6101f5565b005b61010c610330565b61011c610117610332565b610341565b565b610126610367565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018a90610961565b60405180910390fd5b61019c816103be565b427fd9f266625586f1434161fb2b5873b4869b7595dad10f23e8825da8ea98720202826040516101cc91906108fb565b60405180910390a250565b60006101e1610332565b905090565b60006101f0610367565b905090565b6101fd610367565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461026a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026190610961565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156102da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d1906109c1565b60405180910390fd5b6102e38161040d565b50565b606061030b8383604051806060016040528060278152602001610c4c60279139610459565b905092915050565b6000819050919050565b600080823b905060008111915050919050565b565b600061033c610526565b905090565b3660008037600080366000845af43d6000803e8060008114610362573d6000f35b3d6000fd5b60006103957fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610313565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103c78161057d565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610436610367565b82604051610445929190610916565b60405180910390a161045681610636565b50565b60606104648461031d565b6104a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049a906109e1565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516104cb91906108e4565b600060405180830381855af49150503d8060008114610506576040519150601f19603f3d011682016040523d82523d6000602084013e61050b565b606091505b509150915061051b828286610717565b925050509392505050565b60006105547f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610313565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6105868161031d565b6105c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bc906109a1565b60405180910390fd5b806105f27f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b610313565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156106a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069d90610981565b60405180910390fd5b806106d37fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b610313565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060831561072757829050610777565b60008351111561073a5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076e919061093f565b60405180910390fd5b9392505050565b60008135905061078d81610c34565b92915050565b6000602082840312156107a557600080fd5b60006107b38482850161077e565b91505092915050565b6107c581610a33565b82525050565b60006107d682610a01565b6107e08185610a17565b93506107f0818560208601610a65565b80840191505092915050565b600061080782610a0c565b6108118185610a22565b9350610821818560208601610a65565b61082a81610a98565b840191505092915050565b6000610842603583610a22565b915061084d82610aa9565b604082019050919050565b6000610865602683610a22565b915061087082610af8565b604082019050919050565b6000610888602d83610a22565b915061089382610b47565b604082019050919050565b60006108ab602483610a22565b91506108b682610b96565b604082019050919050565b60006108ce602683610a22565b91506108d982610be5565b604082019050919050565b60006108f082846107cb565b915081905092915050565b600060208201905061091060008301846107bc565b92915050565b600060408201905061092b60008301856107bc565b61093860208301846107bc565b9392505050565b6000602082019050818103600083015261095981846107fc565b905092915050565b6000602082019050818103600083015261097a81610835565b9050919050565b6000602082019050818103600083015261099a81610858565b9050919050565b600060208201905081810360008301526109ba8161087b565b9050919050565b600060208201905081810360008301526109da8161089e565b9050919050565b600060208201905081810360008301526109fa816108c1565b9050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000610a3e82610a45565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015610a83578082015181840152602081019050610a68565b83811115610a92576000848401525b50505050565b6000601f19601f8301169050919050565b7f4552433139363750726f78795769746841646d696e436f6e74726f6c3a20636160008201527f6c6c6572206973206e6f74207468652061646d696e0000000000000000000000602082015250565b7f455243313936373a206e65772061646d696e20697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4e65772061646d696e2063616e6e6f7420626520746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b610c3d81610a33565b8114610c4857600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122010497848e37ab6922da5dfca0ffe3237279ff4dbab73394b120ec8f275c0977264736f6c63430008030033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000b046f8f3156ba71fcef82663cf19d23a57a11e0f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a46c9ed5bf0000000000000000000000001bc9b7d4be47b76965a3f8e910b9ddd83150840f000000000000000000000000dd73dea10abc2bff99c60882ec5b2b81bb1dc5b2000000000000000000000000000000000000000000000000000000000002328000000000000000000000000067f57d98100fe04b64a5a3928a6e43bd29e651cc00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000

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

000000000000000000000000b046f8f3156ba71fcef82663cf19d23a57a11e0f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a46c9ed5bf0000000000000000000000001bc9b7d4be47b76965a3f8e910b9ddd83150840f000000000000000000000000dd73dea10abc2bff99c60882ec5b2b81bb1dc5b2000000000000000000000000000000000000000000000000000000000002328000000000000000000000000067f57d98100fe04b64a5a3928a6e43bd29e651cc00000000000000000000000000000000000000000000000000071afd498d000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _logic (address): 0xb046f8f3156ba71fcef82663cf19d23a57a11e0f
Arg [1] : _data (bytes): 0x6c9ed5bf0000000000000000000000001bc9b7d4be47b76965a3f8e910b9ddd83150840f000000000000000000000000dd73dea10abc2bff99c60882ec5b2b81bb1dc5b2000000000000000000000000000000000000000000000000000000000002328000000000000000000000000067f57d98100fe04b64a5a3928a6e43bd29e651cc00000000000000000000000000000000000000000000000000071afd498d0000

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000b046f8f3156ba71fcef82663cf19d23a57a11e0f
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a4
Arg [3] : 6c9ed5bf0000000000000000000000001bc9b7d4be47b76965a3f8e910b9ddd8
Arg [4] : 3150840f000000000000000000000000dd73dea10abc2bff99c60882ec5b2b81
Arg [5] : bb1dc5b200000000000000000000000000000000000000000000000000000000
Arg [6] : 0002328000000000000000000000000067f57d98100fe04b64a5a3928a6e43bd
Arg [7] : 29e651cc00000000000000000000000000000000000000000000000000071afd
Arg [8] : 498d000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

25689:1010:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6183:11;:9;:11::i;:::-;25689:1010;;5952:11;:9;:11::i;:::-;25689:1010;26004:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26374:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26475:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26189:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5589:113;5638:17;:15;:17::i;:::-;5666:28;5676:17;:15;:17::i;:::-;5666:9;:28::i;:::-;5589:113::o;26004:179::-;25913:11;:9;:11::i;:::-;25899:25;;:10;:25;;;25891:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;26077:30:::1;26088:18;26077:10;:30::i;:::-;26141:15;26119:58;26158:18;26119:58;;;;;;:::i;:::-;;;;;;;;26004:179:::0;:::o;26374:95::-;26423:7;26446:17;:15;:17::i;:::-;26439:24;;26374:95;:::o;26475:88::-;26523:7;26546:11;:9;:11::i;:::-;26539:18;;26475:88;:::o;26189:179::-;25913:11;:9;:11::i;:::-;25899:25;;:10;:25;;;25891:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;26289:1:::1;26268:23;;:9;:23;;;;26260:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;26339:23;26352:9;26339:12;:23::i;:::-;26189:179:::0;:::o;13375:200::-;13458:12;13490:77;13511:6;13519:4;13490:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;13483:84;;13375:200;;;;:::o;16528:151::-;16589:21;16657:4;16647:14;;16632:40;;;:::o;7779:387::-;7839:4;8047:12;8114:7;8102:20;8094:28;;8157:1;8150:4;:8;8143:15;;;7779:387;;;:::o;6491:46::-;:::o;25455:142::-;25522:12;25554:35;:33;:35::i;:::-;25547:42;;25455:142;:::o;4179:918::-;4522:14;4519:1;4516;4503:34;4740:1;4737;4721:14;4718:1;4702:14;4695:5;4682:60;4819:16;4816:1;4813;4798:38;4859:6;4933:1;4928:68;;;;5047:16;5044:1;5037:27;4928:68;4964:16;4961:1;4954:27;21779:124;21823:7;21850:39;21503:66;21877:11;;21850:26;:39::i;:::-;:45;;;;;;;;;;;;21843:52;;21779:124;:::o;19217:155::-;19284:37;19303:17;19284:18;:37::i;:::-;19346:17;19337:27;;;;;;;;;;;;19217:155;:::o;22312:138::-;22377:35;22390:11;:9;:11::i;:::-;22403:8;22377:35;;;;;;;:::i;:::-;;;;;;;;22423:19;22433:8;22423:9;:19::i;:::-;22312:138;:::o;13769:397::-;13914:12;13947:18;13958:6;13947:10;:18::i;:::-;13939:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;14022:12;14036:23;14063:6;:19;;14083:4;14063:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14021:67;;;;14106:52;14124:7;14133:10;14145:12;14106:17;:52::i;:::-;14099:59;;;;13769:397;;;;;:::o;18604:142::-;18657:7;18684:48;18323:66;18711:20;;18684:26;:48::i;:::-;:54;;;;;;;;;;;;18677:61;;18604:142;:::o;18842:262::-;18924:37;18943:17;18924:18;:37::i;:::-;18916:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;19079:17;19022:48;18323:66;19049:20;;19022:26;:48::i;:::-;:54;;;:74;;;;;;;;;;;;;;;;;;18842:262;:::o;21990:204::-;22074:1;22054:22;;:8;:22;;;;22046:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22178:8;22130:39;21503:66;22157:11;;22130:26;:39::i;:::-;:45;;;:56;;;;;;;;;;;;;;;;;;21990:204;:::o;14174:712::-;14324:12;14353:7;14349:530;;;14384:10;14377:17;;;;14349:530;14518:1;14498:10;:17;:21;14494:374;;;14696:10;14690:17;14757:15;14744:10;14740:2;14736:19;14729:44;14644:148;14839:12;14832:20;;;;;;;;;;;:::i;:::-;;;;;;;;14174:712;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:373::-;;676:38;708:5;676:38;:::i;:::-;730:88;811:6;806:3;730:88;:::i;:::-;723:95;;827:52;872:6;867:3;860:4;853:5;849:16;827:52;:::i;:::-;904:6;899:3;895:16;888:23;;652:265;;;;;:::o;923:364::-;;1039:39;1072:5;1039:39;:::i;:::-;1094:71;1158:6;1153:3;1094:71;:::i;:::-;1087:78;;1174:52;1219:6;1214:3;1207:4;1200:5;1196:16;1174:52;:::i;:::-;1251:29;1273:6;1251:29;:::i;:::-;1246:3;1242:39;1235:46;;1015:272;;;;;:::o;1293:366::-;;1456:67;1520:2;1515:3;1456:67;:::i;:::-;1449:74;;1532:93;1621:3;1532:93;:::i;:::-;1650:2;1645:3;1641:12;1634:19;;1439:220;;;:::o;1665:366::-;;1828:67;1892:2;1887:3;1828:67;:::i;:::-;1821:74;;1904:93;1993:3;1904:93;:::i;:::-;2022:2;2017:3;2013:12;2006:19;;1811:220;;;:::o;2037:366::-;;2200:67;2264:2;2259:3;2200:67;:::i;:::-;2193:74;;2276:93;2365:3;2276:93;:::i;:::-;2394:2;2389:3;2385:12;2378:19;;2183:220;;;:::o;2409:366::-;;2572:67;2636:2;2631:3;2572:67;:::i;:::-;2565:74;;2648:93;2737:3;2648:93;:::i;:::-;2766:2;2761:3;2757:12;2750:19;;2555:220;;;:::o;2781:366::-;;2944:67;3008:2;3003:3;2944:67;:::i;:::-;2937:74;;3020:93;3109:3;3020:93;:::i;:::-;3138:2;3133:3;3129:12;3122:19;;2927:220;;;:::o;3153:271::-;;3305:93;3394:3;3385:6;3305:93;:::i;:::-;3298:100;;3415:3;3408:10;;3287:137;;;;:::o;3430:222::-;;3561:2;3550:9;3546:18;3538:26;;3574:71;3642:1;3631:9;3627:17;3618:6;3574:71;:::i;:::-;3528:124;;;;:::o;3658:332::-;;3817:2;3806:9;3802:18;3794:26;;3830:71;3898:1;3887:9;3883:17;3874:6;3830:71;:::i;:::-;3911:72;3979:2;3968:9;3964:18;3955:6;3911:72;:::i;:::-;3784:206;;;;;:::o;3996:313::-;;4147:2;4136:9;4132:18;4124:26;;4196:9;4190:4;4186:20;4182:1;4171:9;4167:17;4160:47;4224:78;4297:4;4288:6;4224:78;:::i;:::-;4216:86;;4114:195;;;;:::o;4315:419::-;;4519:2;4508:9;4504:18;4496:26;;4568:9;4562:4;4558:20;4554:1;4543:9;4539:17;4532:47;4596:131;4722:4;4596:131;:::i;:::-;4588:139;;4486:248;;;:::o;4740:419::-;;4944:2;4933:9;4929:18;4921:26;;4993:9;4987:4;4983:20;4979:1;4968:9;4964:17;4957:47;5021:131;5147:4;5021:131;:::i;:::-;5013:139;;4911:248;;;:::o;5165:419::-;;5369:2;5358:9;5354:18;5346:26;;5418:9;5412:4;5408:20;5404:1;5393:9;5389:17;5382:47;5446:131;5572:4;5446:131;:::i;:::-;5438:139;;5336:248;;;:::o;5590:419::-;;5794:2;5783:9;5779:18;5771:26;;5843:9;5837:4;5833:20;5829:1;5818:9;5814:17;5807:47;5871:131;5997:4;5871:131;:::i;:::-;5863:139;;5761:248;;;:::o;6015:419::-;;6219:2;6208:9;6204:18;6196:26;;6268:9;6262:4;6258:20;6254:1;6243:9;6239:17;6232:47;6296:131;6422:4;6296:131;:::i;:::-;6288:139;;6186:248;;;:::o;6440:98::-;;6525:5;6519:12;6509:22;;6498:40;;;:::o;6544:99::-;;6630:5;6624:12;6614:22;;6603:40;;;:::o;6649:147::-;;6787:3;6772:18;;6762:34;;;;:::o;6802:169::-;;6920:6;6915:3;6908:19;6960:4;6955:3;6951:14;6936:29;;6898:73;;;;:::o;6977:96::-;;7043:24;7061:5;7043:24;:::i;:::-;7032:35;;7022:51;;;:::o;7079:126::-;;7156:42;7149:5;7145:54;7134:65;;7124:81;;;:::o;7211:307::-;7279:1;7289:113;7303:6;7300:1;7297:13;7289:113;;;7388:1;7383:3;7379:11;7373:18;7369:1;7364:3;7360:11;7353:39;7325:2;7322:1;7318:10;7313:15;;7289:113;;;7420:6;7417:1;7414:13;7411:2;;;7500:1;7491:6;7486:3;7482:16;7475:27;7411:2;7260:258;;;;:::o;7524:102::-;;7616:2;7612:7;7607:2;7600:5;7596:14;7592:28;7582:38;;7572:54;;;:::o;7632:240::-;7772:34;7768:1;7760:6;7756:14;7749:58;7841:23;7836:2;7828:6;7824:15;7817:48;7738:134;:::o;7878:225::-;8018:34;8014:1;8006:6;8002:14;7995:58;8087:8;8082:2;8074:6;8070:15;8063:33;7984:119;:::o;8109:232::-;8249:34;8245:1;8237:6;8233:14;8226:58;8318:15;8313:2;8305:6;8301:15;8294:40;8215:126;:::o;8347:223::-;8487:34;8483:1;8475:6;8471:14;8464:58;8556:6;8551:2;8543:6;8539:15;8532:31;8453:117;:::o;8576:225::-;8716:34;8712:1;8704:6;8700:14;8693:58;8785:8;8780:2;8772:6;8768:15;8761:33;8682:119;:::o;8807:122::-;8880:24;8898:5;8880:24;:::i;:::-;8873:5;8870:35;8860:2;;8919:1;8916;8909:12;8860:2;8850:79;:::o

Swarm Source

ipfs://10497848e37ab6922da5dfca0ffe3237279ff4dbab73394b120ec8f275c09772
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.