ETH Price: $3,434.63 (+7.60%)
Gas: 15 Gwei

Token

 

Overview

Max Total Supply

0

Holders

85

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x08ec21c1a969c360030e8c6c6c17f1cfe6e6ba2b
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:
GHSTStakingDiamond

Compiler Version
v0.7.3+commit.9bfce1f6

Optimization Enabled:
Yes with 20000 runs

Other Settings:
default evmVersion, Audited
File 1 of 8 : GHSTStakingDiamond.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.3;
pragma experimental ABIEncoderV2;

/******************************************************************************\
* Author: Nick Mudge
* Aavegotchi GHST Staking Diamond
* 18 October 2020
* 
* 
* Uses the diamond-2, version 1.3.4, diamond implementation:
* https://github.com/mudgen/diamond-2
/******************************************************************************/

import "./libraries/LibDiamond.sol";
import "./interfaces/IDiamondLoupe.sol";
import "./interfaces/IDiamondCut.sol";
import "./interfaces/IERC173.sol";
import "./interfaces/IERC165.sol";
import "./libraries/AppStorage.sol";
import "./interfaces/IERC1155Metadata_URI.sol";

contract GHSTStakingDiamond {
    AppStorage s;
    event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _value);

    constructor(
        IDiamondCut.FacetCut[] memory _diamondCut,
        address _owner,
        address _ghstContract,
        address _uniV2PoolContract
    ) {
        require(_owner != address(0), "GHSTStakingDiamond: _owner can't be address(0)");
        require(_ghstContract != address(0), "GHSTStakingDiamond: _ghstContract can't be address(0)");
        require(_uniV2PoolContract != address(0), "GHSTStakingDiamond: _uniV2PoolContract can't be address(0)");

        LibDiamond.diamondCut(_diamondCut, address(0), new bytes(0));
        LibDiamond.setContractOwner(_owner);

        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();

        s.ghstContract = _ghstContract;
        s.uniV2PoolContract = _uniV2PoolContract;
        s.ticketsBaseUri = "https://aavegotchi.com/metadata/";

        // adding ERC165 data
        ds.supportedInterfaces[type(IERC165).interfaceId] = true;
        //ds.supportedInterfaces[type(IDiamondCut).interfaceId] = true;
        ds.supportedInterfaces[type(IDiamondLoupe).interfaceId] = true;
        ds.supportedInterfaces[type(IERC173).interfaceId] = true;

        // ERC1155
        // ERC165 identifier for the main token standard.
        ds.supportedInterfaces[0xd9b67a26] = true;

        // ERC1155
        // ERC1155Metadata_URI
        ds.supportedInterfaces[IERC1155Metadata_URI.uri.selector] = true;

        // create wearable tickets:
        emit TransferSingle(msg.sender, address(0), address(0), 0, 0);
        emit TransferSingle(msg.sender, address(0), address(0), 1, 0);
        emit TransferSingle(msg.sender, address(0), address(0), 2, 0);
        emit TransferSingle(msg.sender, address(0), address(0), 3, 0);
        emit TransferSingle(msg.sender, address(0), address(0), 4, 0);
        emit TransferSingle(msg.sender, address(0), address(0), 5, 0);
    }

    // Find facet for function that is called and execute the
    // function if a facet is found and return any value.
    fallback() external payable {
        LibDiamond.DiamondStorage storage ds;
        bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
        address facet = address(bytes20(ds.facets[msg.sig]));
        require(facet != address(0), "GHSTSTaking: Function does not exist");
        assembly {
            calldatacopy(0, 0, calldatasize())
            let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
            returndatacopy(0, 0, returndatasize())
            switch result
                case 0 {
                    revert(0, returndatasize())
                }
                default {
                    return(0, returndatasize())
                }
        }
    }

    receive() external payable {
        revert("GHSTStaking: Does not accept ether");
    }
}

File 2 of 8 : LibDiamond.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.3;
pragma experimental ABIEncoderV2;

/******************************************************************************\
* Author: Nick Mudge
*
* Implementation of Diamond facet.
* Uses the diamond-2 version 1.3.4 implementation:
* https://github.com/mudgen/diamond-2
*
* This is gas optimized by reducing storage reads and storage writes.
* This code is as complex as it is to reduce gas costs.
/******************************************************************************/

import "../interfaces/IDiamondCut.sol";

library LibDiamond {
    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage");

    struct DiamondStorage {
        // maps function selectors to the facets that execute the functions.
        // and maps the selectors to their position in the selectorSlots array.
        // func selector => address facet, selector position
        mapping(bytes4 => bytes32) facets;
        // array of slots of function selectors.
        // each slot holds 8 function selectors.
        mapping(uint256 => bytes32) selectorSlots;
        // The number of function selectors in selectorSlots
        uint16 selectorCount;
        // owner of the contract
        // Used to query if a contract implements an interface.
        // Used to implement ERC-165.
        mapping(bytes4 => bool) supportedInterfaces;
        // owner of the contract
        address contractOwner;
    }

    function diamondStorage() internal pure returns (DiamondStorage storage ds) {
        bytes32 position = DIAMOND_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
    }

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

    function setContractOwner(address _newOwner) internal {
        DiamondStorage storage ds = diamondStorage();
        address previousOwner = ds.contractOwner;
        ds.contractOwner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }

    function contractOwner() internal view returns (address contractOwner_) {
        contractOwner_ = diamondStorage().contractOwner;
    }

    function enforceIsContractOwner() internal view {
        require(msg.sender == diamondStorage().contractOwner, "LibDiamond: Must be contract owner");
    }

    modifier onlyOwner {
        require(msg.sender == diamondStorage().contractOwner, "LibDiamond: Must be contract owner");
        _;
    }

    event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);

    bytes32 constant CLEAR_ADDRESS_MASK = bytes32(uint256(0xffffffffffffffffffffffff));
    bytes32 constant CLEAR_SELECTOR_MASK = bytes32(uint256(0xffffffff << 224));

    // Internal function version of diamondCut
    // This code is almost the same as the external diamondCut,
    // except it is using 'Facet[] memory _diamondCut' instead of
    // 'Facet[] calldata _diamondCut'.
    // The code is duplicated to prevent copying calldata to memory which
    // causes an error for a two dimensional array.
    function diamondCut(
        IDiamondCut.FacetCut[] memory _diamondCut,
        address _init,
        bytes memory _calldata
    ) internal {
        DiamondStorage storage ds = diamondStorage();
        uint256 originalSelectorCount = ds.selectorCount;
        uint256 selectorCount = originalSelectorCount;
        bytes32 selectorSlot;
        // Check if last selector slot is not full
        if (selectorCount % 8 > 0) {
            // get last selectorSlot
            selectorSlot = ds.selectorSlots[selectorCount / 8];
        }
        // loop through diamond cut
        for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {
            (selectorCount, selectorSlot) = addReplaceRemoveFacetSelectors(
                selectorCount,
                selectorSlot,
                _diamondCut[facetIndex].facetAddress,
                _diamondCut[facetIndex].action,
                _diamondCut[facetIndex].functionSelectors
            );
        }
        if (selectorCount != originalSelectorCount) {
            ds.selectorCount = uint16(selectorCount);
        }
        // If last selector slot is not full
        if (selectorCount % 8 > 0) {
            ds.selectorSlots[selectorCount / 8] = selectorSlot;
        }
        emit DiamondCut(_diamondCut, _init, _calldata);
        initializeDiamondCut(_init, _calldata);
    }

    function addReplaceRemoveFacetSelectors(
        uint256 _selectorCount,
        bytes32 _selectorSlot,
        address _newFacetAddress,
        IDiamondCut.FacetCutAction _action,
        bytes4[] memory _selectors
    ) internal returns (uint256, bytes32) {
        DiamondStorage storage ds = diamondStorage();
        require(_selectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        if (_action == IDiamondCut.FacetCutAction.Add) {
            require(_newFacetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
            enforceHasContractCode(_newFacetAddress, "LibDiamondCut: Add facet has no code");
            for (uint256 selectorIndex; selectorIndex < _selectors.length; selectorIndex++) {
                bytes4 selector = _selectors[selectorIndex];
                bytes32 oldFacet = ds.facets[selector];
                require(address(bytes20(oldFacet)) == address(0), "LibDiamondCut: Can't add function that already exists");
                // add facet for selector
                ds.facets[selector] = bytes20(_newFacetAddress) | bytes32(_selectorCount);
                uint256 selectorInSlotPosition = (_selectorCount % 8) * 32;
                // clear selector position in slot and add selector
                _selectorSlot = (_selectorSlot & ~(CLEAR_SELECTOR_MASK >> selectorInSlotPosition)) | (bytes32(selector) >> selectorInSlotPosition);
                // if slot is full then write it to storage
                if (selectorInSlotPosition == 224) {
                    ds.selectorSlots[_selectorCount / 8] = _selectorSlot;
                    _selectorSlot = 0;
                }
                _selectorCount++;
            }
        } else if (_action == IDiamondCut.FacetCutAction.Replace) {
            require(_newFacetAddress != address(0), "LibDiamondCut: Replace facet can't be address(0)");
            enforceHasContractCode(_newFacetAddress, "LibDiamondCut: Replace facet has no code");
            for (uint256 selectorIndex; selectorIndex < _selectors.length; selectorIndex++) {
                bytes4 selector = _selectors[selectorIndex];
                bytes32 oldFacet = ds.facets[selector];
                address oldFacetAddress = address(bytes20(oldFacet));
                // only useful if immutable functions exist
                require(oldFacetAddress != address(this), "LibDiamondCut: Can't replace immutable function");
                require(oldFacetAddress != _newFacetAddress, "LibDiamondCut: Can't replace function with same function");
                require(oldFacetAddress != address(0), "LibDiamondCut: Can't replace function that doesn't exist");
                // replace old facet address
                ds.facets[selector] = (oldFacet & CLEAR_ADDRESS_MASK) | bytes20(_newFacetAddress);
            }
        } else if (_action == IDiamondCut.FacetCutAction.Remove) {
            require(_newFacetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)");
            uint256 selectorSlotCount = _selectorCount / 8;
            uint256 selectorInSlotIndex = (_selectorCount % 8) - 1;
            for (uint256 selectorIndex; selectorIndex < _selectors.length; selectorIndex++) {
                if (_selectorSlot == 0) {
                    // get last selectorSlot
                    selectorSlotCount--;
                    _selectorSlot = ds.selectorSlots[selectorSlotCount];
                    selectorInSlotIndex = 7;
                }
                bytes4 lastSelector;
                uint256 oldSelectorsSlotCount;
                uint256 oldSelectorInSlotPosition;
                // adding a block here prevents stack too deep error
                {
                    bytes4 selector = _selectors[selectorIndex];
                    bytes32 oldFacet = ds.facets[selector];
                    require(address(bytes20(oldFacet)) != address(0), "LibDiamondCut: Can't remove function that doesn't exist");
                    // only useful if immutable functions exist
                    require(address(bytes20(oldFacet)) != address(this), "LibDiamondCut: Can't remove immutable function");
                    // replace selector with last selector in ds.facets
                    // gets the last selector
                    lastSelector = bytes4(_selectorSlot << (selectorInSlotIndex * 32));
                    if (lastSelector != selector) {
                        // update last selector slot position info
                        ds.facets[lastSelector] = (oldFacet & CLEAR_ADDRESS_MASK) | bytes20(ds.facets[lastSelector]);
                    }
                    delete ds.facets[selector];
                    uint256 oldSelectorCount = uint16(uint256(oldFacet));
                    oldSelectorsSlotCount = oldSelectorCount / 8;
                    oldSelectorInSlotPosition = (oldSelectorCount % 8) * 32;
                }
                if (oldSelectorsSlotCount != selectorSlotCount) {
                    bytes32 oldSelectorSlot = ds.selectorSlots[oldSelectorsSlotCount];
                    // clears the selector we are deleting and puts the last selector in its place.
                    oldSelectorSlot =
                        (oldSelectorSlot & ~(CLEAR_SELECTOR_MASK >> oldSelectorInSlotPosition)) |
                        (bytes32(lastSelector) >> oldSelectorInSlotPosition);
                    // update storage with the modified slot
                    ds.selectorSlots[oldSelectorsSlotCount] = oldSelectorSlot;
                } else {
                    // clears the selector we are deleting and puts the last selector in its place.
                    _selectorSlot =
                        (_selectorSlot & ~(CLEAR_SELECTOR_MASK >> oldSelectorInSlotPosition)) |
                        (bytes32(lastSelector) >> oldSelectorInSlotPosition);
                }
                if (selectorInSlotIndex == 0) {
                    delete ds.selectorSlots[selectorSlotCount];
                    _selectorSlot = 0;
                }
                selectorInSlotIndex--;
            }
            _selectorCount = selectorSlotCount * 8 + selectorInSlotIndex + 1;
        } else {
            revert("LibDiamondCut: Incorrect FacetCutAction");
        }
        return (_selectorCount, _selectorSlot);
    }

    function initializeDiamondCut(address _init, bytes memory _calldata) internal {
        if (_init == address(0)) {
            require(_calldata.length == 0, "LibDiamondCut: _init is address(0) but_calldata is not empty");
        } else {
            require(_calldata.length > 0, "LibDiamondCut: _calldata is empty but _init is not address(0)");
            if (_init != address(this)) {
                enforceHasContractCode(_init, "LibDiamondCut: _init address has no code");
            }
            (bool success, bytes memory error) = _init.delegatecall(_calldata);
            if (!success) {
                if (error.length > 0) {
                    // bubble up the error
                    revert(string(error));
                } else {
                    revert("LibDiamondCut: _init function reverted");
                }
            }
        }
    }

    function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {
        uint256 contractSize;
        assembly {
            contractSize := extcodesize(_contract)
        }
        require(contractSize > 0, _errorMessage);
    }
}

File 3 of 8 : IDiamondCut.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.3;
pragma experimental ABIEncoderV2;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
/******************************************************************************/

interface IDiamondCut {
    enum FacetCutAction {Add, Replace, Remove}

    struct FacetCut {
        address facetAddress;
        FacetCutAction action;
        bytes4[] functionSelectors;
    }

    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function diamondCut(
        FacetCut[] calldata _diamondCut,
        address _init,
        bytes calldata _calldata
    ) external;

    event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
}

File 4 of 8 : IDiamondLoupe.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.3;
pragma experimental ABIEncoderV2;

// A loupe is a small magnifying glass used to look at diamonds.
// These functions look at diamonds
interface IDiamondLoupe {
    /// These functions are expected to be called frequently
    /// by tools.

    struct Facet {
        address facetAddress;
        bytes4[] functionSelectors;
    }

    /// @notice Gets all facet addresses and their four byte function selectors.
    /// @return facets_ Facet
    function facets() external view returns (Facet[] memory facets_);

    /// @notice Gets all the function selectors supported by a specific facet.
    /// @param _facet The facet address.
    /// @return facetFunctionSelectors_
    function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);

    /// @notice Get all the facet addresses used by a diamond.
    /// @return facetAddresses_
    function facetAddresses() external view returns (address[] memory facetAddresses_);

    /// @notice Gets the facet that supports the given selector.
    /// @dev If facet is not found return address(0).
    /// @param _functionSelector The function selector.
    /// @return facetAddress_ The facet address.
    function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);
}

File 5 of 8 : IERC173.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.3;

/// @title ERC-173 Contract Ownership Standard
///  Note: the ERC-165 identifier for this interface is 0x7f5828d0
/* is ERC165 */
interface IERC173 {
    /// @dev This emits when ownership of a contract changes.
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice Get the address of the owner
    /// @return owner_ The address of the owner.
    function owner() external view returns (address owner_);

    /// @notice Set the address of the new owner of the contract
    /// @dev Set _newOwner to address(0) to renounce any ownership.
    /// @param _newOwner The address of the new owner of the contract
    function transferOwnership(address _newOwner) external;
}

File 6 of 8 : IERC165.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.3;

interface IERC165 {
    /// @notice Query if a contract implements an interface
    /// @param interfaceId The interface identifier, as specified in ERC-165
    /// @dev Interface identification is specified in ERC-165. This function
    ///  uses less than 30,000 gas.
    /// @return `true` if the contract implements `interfaceID` and
    ///  `interfaceID` is not 0xffffffff, `false` otherwise
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 7 of 8 : AppStorage.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.3;

struct Account {
    uint96 ghst;
    uint96 uniV2PoolTokens;
    uint40 lastUpdate;
    uint104 frens;
}

struct Ticket {
    // user address => balance
    mapping(address => uint256) accountBalances;
    uint96 totalSupply;
}

struct AppStorage {
    mapping(address => mapping(address => bool)) approved;
    mapping(address => Account) accounts;
    mapping(uint256 => Ticket) tickets;
    address ghstContract;
    address uniV2PoolContract;
    string ticketsBaseUri;
}

File 8 of 8 : IERC1155Metadata_URI.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.3;

/**
    Note: The ERC-165 identifier for this interface is 0x0e89341c.
*/
interface IERC1155Metadata_URI {
    /**
        @notice A distinct Uniform Resource Identifier (URI) for a given token.
        @dev URIs are defined in RFC 3986.
        The URI MUST point to a JSON file that conforms to the "ERC-1155 Metadata URI JSON Schema".        
        @return URI string
    */
    function uri(uint256 _id) external view returns (string memory);
}

Settings
{
  "metadata": {
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 20000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_ghstContract","type":"address"},{"internalType":"address","name":"_uniV2PoolContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162002bd038038062002bd0833981016040819052620000349162000ceb565b6001600160a01b038316620000665760405162461bcd60e51b81526004016200005d90620011bb565b60405180910390fd5b6001600160a01b0382166200008f5760405162461bcd60e51b81526004016200005d9062001059565b6001600160a01b038116620000b85760405162461bcd60e51b81526004016200005d90620010b6565b60408051600080825260208201909252620000e09186916200033b60201b620000f81760201c565b620000f6836200048260201b620002461760201c565b60006200010d620004e460201b620002cb1760201c565b600380546001600160a01b038087166001600160a01b03199283161790925560048054928616929091169190911790556040805180820190915260208082527f68747470733a2f2f61617665676f746368692e636f6d2f6d657461646174612f91810191825291925062000185916005919062000ba4565b506301ffc9a760e01b60009081526003820160205260408082208054600160ff1991821681179092556348e2b09360e01b845282842080548216831790556307f5828d60e41b84528284208054821683179055636cdb3d1360e11b845282842080548216831790556303a24d0760e21b845282842080549091169091179055518190339060008051602062002b3c8339815191529062000229908490819062000f8c565b60405180910390a46040516000908190339060008051602062002b3c833981519152906200025c90600190859062000f8c565b60405180910390a46040516000908190339060008051602062002b3c833981519152906200028f90600290859062000f8c565b60405180910390a46040516000908190339060008051602062002b3c83398151915290620002c290600390859062000f8c565b60405180910390a46040516000908190339060008051602062002b3c83398151915290620002f590600490859062000f8c565b60405180910390a46040516000908190339060008051602062002b3c833981519152906200032890600590859062000f8c565b60405180910390a45050505050620015a9565b600062000347620004e4565b600281015490915061ffff16806000806008830611156200037957506008810460009081526001840160205260409020545b60005b8751811015620003f157620003e383838a84815181106200039957fe5b6020026020010151600001518b8581518110620003b257fe5b6020026020010151602001518c8681518110620003cb57fe5b6020026020010151604001516200050860201b60201c565b90935091506001016200037c565b508282146200040e5760028401805461ffff191661ffff84161790555b6007821615620004305760088204600090815260018501602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673878787604051620004659392919062000e9c565b60405180910390a162000479868662000a3f565b50505050505050565b60006200048e620004e4565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b6000808062000516620004e4565b905060008451116200053c5760405162461bcd60e51b81526004016200005d9062001113565b60008560028111156200054b57fe5b141562000684576001600160a01b0386166200057b5760405162461bcd60e51b81526004016200005d9062001250565b620005a08660405180606001604052806024815260200162002b5c6024913962000b80565b60005b84518110156200067d576000858281518110620005bc57fe5b6020908102919091018101516001600160e01b03198116600090815291859052604090912054909150606081901c156200060a5760405162461bcd60e51b81526004016200005d9062001397565b6001600160e01b03198281166000818152602087815260409091206001600160601b031960608e901b168f17905560078e160290811c91811c199b909b16179960e08114156200066d5760088c04600090815260018601602052604081209b909b555b50505060019889019801620005a3565b5062000a33565b60018560028111156200069357fe5b1415620007f5576001600160a01b038616620006c35760405162461bcd60e51b81526004016200005d906200129c565b620006e88660405180606001604052806028815260200162002ba86028913962000b80565b60005b84518110156200067d5760008582815181106200070457fe5b6020908102919091018101516001600160e01b03198116600090815291859052604090912054909150606081901c30811415620007555760405162461bcd60e51b81526004016200005d906200149d565b896001600160a01b0316816001600160a01b031614156200078a5760405162461bcd60e51b81526004016200005d90620013f4565b6001600160a01b038116620007b35760405162461bcd60e51b81526004016200005d90620014ec565b506001600160e01b031990911660009081526020849052604090206001600160601b03919091166001600160601b031960608a901b16179055600101620006eb565b60028560028111156200080457fe5b141562000a19576001600160a01b03861615620008355760405162461bcd60e51b81526004016200005d9062001440565b6008880460001960078a160160005b865181101562000a07578962000873576000199092016000818152600185016020526040902054995091600791505b6000806000808a85815181106200088657fe5b6020908102919091018101516001600160e01b031981166000908152918a9052604090912054909150606081901c620008d35760405162461bcd60e51b81526004016200005d906200115e565b606081901c301415620008fa5760405162461bcd60e51b81526004016200005d9062001349565b602087028f901b94506001600160e01b0319808616908316146200094b576001600160e01b03198516600090815260208a90526040902080546001600160601b0319166001600160601b0383161790555b6001600160e01b03198216600090815260208a9052604081205561ffff8116600881049450600881066020029350505050858214620009b4576000828152600188016020526040902080546001600160e01b031980841c19909116908516831c179055620009d8565b80836001600160e01b031916901c816001600160e01b031960001b901c198e16179c505b84620009f457600086815260018801602052604081208190559c505b5050600019909201915060010162000844565b50600160089092020101975062000a33565b60405162461bcd60e51b81526004016200005d9062001209565b50959694955050505050565b6001600160a01b03821662000a765780511562000a705760405162461bcd60e51b81526004016200005d9062000fb6565b62000b7c565b600081511162000a9a5760405162461bcd60e51b81526004016200005d90620012ec565b6001600160a01b038216301462000ad05762000ad08260405180606001604052806028815260200162002b806028913962000b80565b60006060836001600160a01b03168360405162000aee919062000e7e565b600060405180830381855af49150503d806000811462000b2b576040519150601f19603f3d011682016040523d82523d6000602084013e62000b30565b606091505b50915091508162000b795780511562000b5f578060405162461bcd60e51b81526004016200005d919062000f9a565b60405162461bcd60e51b81526004016200005d9062001013565b50505b5050565b813b818162000b795760405162461bcd60e51b81526004016200005d919062000f9a565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000be757805160ff191683800117855562000c17565b8280016001018555821562000c17579182015b8281111562000c1757825182559160200191906001019062000bfa565b5062000c2592915062000c29565b5090565b5b8082111562000c25576000815560010162000c2a565b80516001600160a01b038116811462000c5857600080fd5b919050565b600082601f83011262000c6e578081fd5b815162000c8562000c7f826200155c565b62001538565b81815291506020808301908481018184028601820187101562000ca757600080fd5b6000805b8581101562000cdf5782516001600160e01b03198116811462000ccc578283fd5b8552938301939183019160010162000cab565b50505050505092915050565b6000806000806080858703121562000d01578384fd5b84516001600160401b0381111562000d17578485fd5b86601f828801011262000d28578485fd5b8086015162000d3b62000c7f826200155c565b8181526020808201919089850101885b8481101562000e015781518b8701016060818e03601f1901121562000d6e578a8bfd5b6040516001600160401b0360608201908111908211171562000d8c57fe5b6060810160405262000da16020830162000c40565b815260408201516003811062000db5578c8dfd5b602082015260608201516001600160401b0381111562000dd3578c8dfd5b62000de48f60208386010162000c5d565b604083015250855250602093840193919091019060010162000d4b565b50508097505050505062000e186020860162000c40565b925062000e286040860162000c40565b915062000e386060860162000c40565b905092959194509250565b6001600160a01b03169052565b6000815180845262000e6a8160208601602086016200157a565b601f01601f19169290920160200192915050565b6000825162000e928184602087016200157a565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b8481101562000f5957898303607f19018652815180516001600160a01b0316845284810151898501906003811062000ef657fe5b858701526040918201519185018a9052815190819052908501908a90898601905b8083101562000f435783516001600160e01b031916825292870192600192909201919087019062000f17565b5097860197945050509083019060010162000ec2565b505062000f698289018b62000e43565b878103604089015262000f7d818a62000e50565b9b9a5050505050505050505050565b918252602082015260400190565b60006020825262000faf602083018462000e50565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656040820152651d995c9d195960d21b606082015260800190565b60208082526035908201527f474853545374616b696e674469616d6f6e643a205f67687374436f6e7472616360408201527f742063616e277420626520616464726573732830290000000000000000000000606082015260800190565b6020808252603a908201527f474853545374616b696e674469616d6f6e643a205f756e695632506f6f6c436f60408201527f6e74726163742063616e27742062652061646472657373283029000000000000606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b6020808252602e908201527f474853545374616b696e674469616d6f6e643a205f6f776e65722063616e277460408201526d206265206164647265737328302960901b606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756040820152663a20b1ba34b7b760c91b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b60208082526030908201527f4c69624469616d6f6e644375743a205265706c6163652066616365742063616e60408201526f2774206265206164647265737328302960801b606082015260800190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201526d3a30b1363290333ab731ba34b7b760911b606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60408201527f6e207468617420616c7265616479206578697374730000000000000000000000606082015260800190565b602080825260389082015260008051602062002b1c83398151915260408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b6020808252602f908201527f4c69624469616d6f6e644375743a2043616e2774207265706c61636520696d6d60408201526e3aba30b1363290333ab731ba34b7b760891b606082015260800190565b602080825260389082015260008051602062002b1c83398151915260408201527f6374696f6e207468617420646f65736e27742065786973740000000000000000606082015260800190565b6040518181016001600160401b03811182821017156200155457fe5b604052919050565b60006001600160401b038211156200157057fe5b5060209081020190565b60005b83811015620015975781810151838201526020016200157d565b8381111562000b795750506000910152565b61156380620015b96000396000f3fe608060405236610044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90611202565b60405180910390fd5b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819060601c806100d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90611148565b3660008037600080366000845af43d6000803e8080156100f3573d6000f35b3d6000fd5b60006101026102cb565b600281015490915061ffff168060008060088306111561013357506008810460009081526001840160205260409020545b60005b875181101561019e5761019183838a848151811061015057fe5b6020026020010151600001518b858151811061016857fe5b6020026020010151602001518c868151811061018057fe5b6020026020010151604001516102ef565b9093509150600101610136565b508282146101d7576002840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff84161790555b60078216156101f85760088204600090815260018501602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67387878760405161022b93929190610d7a565b60405180910390a161023d8686610b05565b50505050505050565b60006102506102cb565b60048101805473ffffffffffffffffffffffffffffffffffffffff8581167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60008060006102fc6102cb565b90506000845111610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90610f77565b600085600281111561034757fe5b14156104fa5773ffffffffffffffffffffffffffffffffffffffff861661039a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b9061108e565b6103bc866040518060600160405280602481526020016114ba60249139610cbf565b60005b84518110156104f45760008582815181106103d657fe5b6020908102919091018101517fffffffff000000000000000000000000000000000000000000000000000000008116600090815291859052604090912054909150606081901c15610453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b906112bc565b7fffffffff000000000000000000000000000000000000000000000000000000008281166000818152602087815260409091207fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608e901b168f17905560078e160290811c91811c199b909b16179960e08114156104e55760088c04600090815260018601602052604081209b909b555b505050600198890198016103bf565b50610af9565b600185600281111561050857fe5b14156107405773ffffffffffffffffffffffffffffffffffffffff861661055b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b906110eb565b61057d8660405180606001604052806028815260200161150660289139610cbf565b60005b84518110156104f457600085828151811061059757fe5b6020908102919091018101517fffffffff000000000000000000000000000000000000000000000000000000008116600090815291859052604090912054909150606081901c30811415610617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b906113d3565b8973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90611319565b73ffffffffffffffffffffffffffffffffffffffff81166106ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90611430565b507fffffffff0000000000000000000000000000000000000000000000000000000090911660009081526020849052604090206bffffffffffffffffffffffff919091167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a901b16179055600101610580565b600285600281111561074e57fe5b1415610ac75773ffffffffffffffffffffffffffffffffffffffff8616156107a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90611376565b600888047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60078a160160005b8651811015610ab6578961081a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092016000818152600185016020526040902054995091600791505b6000806000808a858151811061082c57fe5b6020908102919091018101517fffffffff0000000000000000000000000000000000000000000000000000000081166000908152918a9052604090912054909150606081901c6108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90610fd4565b606081901c3014156108e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b9061125f565b602087028f901b94507fffffffff0000000000000000000000000000000000000000000000000000000080861690831614610983577fffffffff000000000000000000000000000000000000000000000000000000008516600090815260208a90526040902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff83161790555b7fffffffff000000000000000000000000000000000000000000000000000000008216600090815260208a9052604081205561ffff8116600881049450600881066020029350505050858214610a1a576000828152600188016020526040902080547fffffffff0000000000000000000000000000000000000000000000000000000080841c19909116908516831c179055610a6b565b80837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c817fffffffff0000000000000000000000000000000000000000000000000000000060001b901c198e16179c505b84610a8657600086815260018801602052604081208190559c505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191506001016107cf565b506001600890920201019750610af9565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90611031565b50959694955050505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b5e57805115610b59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90610ebd565b610cbb565b6000815111610b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b906111a5565b73ffffffffffffffffffffffffffffffffffffffff82163014610bd857610bd8826040518060600160405280602881526020016114de60289139610cbf565b600060608373ffffffffffffffffffffffffffffffffffffffff1683604051610c019190610d5e565b600060405180830381855af49150503d8060008114610c3c576040519150601f19603f3d011682016040523d82523d6000602084013e610c41565b606091505b509150915081610cb857805115610c8657806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b9190610ea3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90610f1a565b50505b5050565b813b8181610cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b9190610ea3565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452610d2c81602086016020860161148d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008251610d7081846020870161148d565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b84811015610e74577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8403018652815188840173ffffffffffffffffffffffffffffffffffffffff82511685528582015160038110610dfc57fe5b858701526040918201519185018a9052815190819052908501908a90898601905b80831015610e5f5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928701926001929092019190870190610e1d565b50978601979450505090830190600101610da0565b5050610e828289018b610cfa565b8781036040890152610e94818a610d14565b9b9a5050505050505050505050565b600060208252610eb66020830184610d14565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560408201527f7665727465640000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201527f6163657420746f20637574000000000000000000000000000000000000000000606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560408201527f74416374696f6e00000000000000000000000000000000000000000000000000606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201527f6520616464726573732830290000000000000000000000000000000000000000606082015260800190565b60208082526030908201527f4c69624469616d6f6e644375743a205265706c6163652066616365742063616e60408201527f2774206265206164647265737328302900000000000000000000000000000000606082015260800190565b60208082526024908201527f474853545354616b696e673a2046756e6374696f6e20646f6573206e6f74206560408201527f7869737400000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b60208082526022908201527f474853545374616b696e673a20446f6573206e6f74206163636570742065746860408201527f6572000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201527f7461626c652066756e6374696f6e000000000000000000000000000000000000606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60408201527f6e207468617420616c7265616479206578697374730000000000000000000000606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b6020808252602f908201527f4c69624469616d6f6e644375743a2043616e2774207265706c61636520696d6d60408201527f757461626c652066756e6374696f6e0000000000000000000000000000000000606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e207468617420646f65736e27742065786973740000000000000000606082015260800190565b60005b838110156114a8578181015183820152602001611490565b83811115610cb8575050600091015256fe4c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f6465a26469706673582212205b419819b6f97c7034a7e2b7ef1dfdec4926ad82398249d30b2adfb3e4d7fcda64736f6c634300070300334c69624469616d6f6e644375743a2043616e2774207265706c6163652066756ec3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f624c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f64650000000000000000000000000000000000000000000000000000000000000080000000000000000000000000027ffd3c119567e85998f4e6b9c3d83d5702660c0000000000000000000000003f382dbd960e3a9bbceae22651e88158d2791550000000000000000000000000ab659dee3030602c1af8c29d146facd4aed6ec850000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000042000000000000000000000000047195a03fc3fc2881d084e8dc03bd19be8474e46000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000adfca15e000000000000000000000000000000000000000000000000000000007a0ed6270000000000000000000000000000000000000000000000000000000001ffc9a70000000000000000000000000000000000000000000000000000000000000000000000000000000014ab595377e4fccca46062a9109ffac7fa4d3f180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000028da5cb5b00000000000000000000000000000000000000000000000000000000f2fde38b000000000000000000000000000000000000000000000000000000000000000000000000000000004a271b59763d4d8a18ff55f1faa286de97317b1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000aaa061d09000000000000000000000000000000000000000000000000000000004b334ef60000000000000000000000000000000000000000000000000000000088fa5b0400000000000000000000000000000000000000000000000000000000338d88ca0000000000000000000000000000000000000000000000000000000098807d8400000000000000000000000000000000000000000000000000000000f8a6103f000000000000000000000000000000000000000000000000000000009119f150000000000000000000000000000000000000000000000000000000009c0dfa0100000000000000000000000000000000000000000000000000000000c51c02ed00000000000000000000000000000000000000000000000000000000eb74726000000000000000000000000000000000000000000000000000000000000000000000000000000000df36944e720cf5af30a3c5d80d36db5fb71dde4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000b00fdd58e00000000000000000000000000000000000000000000000000000000fe992c98000000000000000000000000000000000000000000000000000000004e1273f400000000000000000000000000000000000000000000000000000000e985e9c5000000000000000000000000000000000000000000000000000000002eb2c2d600000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000a22cb4650000000000000000000000000000000000000000000000000000000055f804b300000000000000000000000000000000000000000000000000000000d068cdc500000000000000000000000000000000000000000000000000000000bd85b039000000000000000000000000000000000000000000000000000000000e89341c00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405236610044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90611202565b60405180910390fd5b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819060601c806100d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90611148565b3660008037600080366000845af43d6000803e8080156100f3573d6000f35b3d6000fd5b60006101026102cb565b600281015490915061ffff168060008060088306111561013357506008810460009081526001840160205260409020545b60005b875181101561019e5761019183838a848151811061015057fe5b6020026020010151600001518b858151811061016857fe5b6020026020010151602001518c868151811061018057fe5b6020026020010151604001516102ef565b9093509150600101610136565b508282146101d7576002840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff84161790555b60078216156101f85760088204600090815260018501602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67387878760405161022b93929190610d7a565b60405180910390a161023d8686610b05565b50505050505050565b60006102506102cb565b60048101805473ffffffffffffffffffffffffffffffffffffffff8581167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60008060006102fc6102cb565b90506000845111610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90610f77565b600085600281111561034757fe5b14156104fa5773ffffffffffffffffffffffffffffffffffffffff861661039a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b9061108e565b6103bc866040518060600160405280602481526020016114ba60249139610cbf565b60005b84518110156104f45760008582815181106103d657fe5b6020908102919091018101517fffffffff000000000000000000000000000000000000000000000000000000008116600090815291859052604090912054909150606081901c15610453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b906112bc565b7fffffffff000000000000000000000000000000000000000000000000000000008281166000818152602087815260409091207fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608e901b168f17905560078e160290811c91811c199b909b16179960e08114156104e55760088c04600090815260018601602052604081209b909b555b505050600198890198016103bf565b50610af9565b600185600281111561050857fe5b14156107405773ffffffffffffffffffffffffffffffffffffffff861661055b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b906110eb565b61057d8660405180606001604052806028815260200161150660289139610cbf565b60005b84518110156104f457600085828151811061059757fe5b6020908102919091018101517fffffffff000000000000000000000000000000000000000000000000000000008116600090815291859052604090912054909150606081901c30811415610617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b906113d3565b8973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90611319565b73ffffffffffffffffffffffffffffffffffffffff81166106ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90611430565b507fffffffff0000000000000000000000000000000000000000000000000000000090911660009081526020849052604090206bffffffffffffffffffffffff919091167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a901b16179055600101610580565b600285600281111561074e57fe5b1415610ac75773ffffffffffffffffffffffffffffffffffffffff8616156107a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90611376565b600888047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60078a160160005b8651811015610ab6578961081a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092016000818152600185016020526040902054995091600791505b6000806000808a858151811061082c57fe5b6020908102919091018101517fffffffff0000000000000000000000000000000000000000000000000000000081166000908152918a9052604090912054909150606081901c6108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90610fd4565b606081901c3014156108e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b9061125f565b602087028f901b94507fffffffff0000000000000000000000000000000000000000000000000000000080861690831614610983577fffffffff000000000000000000000000000000000000000000000000000000008516600090815260208a90526040902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff83161790555b7fffffffff000000000000000000000000000000000000000000000000000000008216600090815260208a9052604081205561ffff8116600881049450600881066020029350505050858214610a1a576000828152600188016020526040902080547fffffffff0000000000000000000000000000000000000000000000000000000080841c19909116908516831c179055610a6b565b80837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c817fffffffff0000000000000000000000000000000000000000000000000000000060001b901c198e16179c505b84610a8657600086815260018801602052604081208190559c505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191506001016107cf565b506001600890920201019750610af9565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90611031565b50959694955050505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b5e57805115610b59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90610ebd565b610cbb565b6000815111610b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b906111a5565b73ffffffffffffffffffffffffffffffffffffffff82163014610bd857610bd8826040518060600160405280602881526020016114de60289139610cbf565b600060608373ffffffffffffffffffffffffffffffffffffffff1683604051610c019190610d5e565b600060405180830381855af49150503d8060008114610c3c576040519150601f19603f3d011682016040523d82523d6000602084013e610c41565b606091505b509150915081610cb857805115610c8657806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b9190610ea3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b90610f1a565b50505b5050565b813b8181610cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161003b9190610ea3565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452610d2c81602086016020860161148d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008251610d7081846020870161148d565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b84811015610e74577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8403018652815188840173ffffffffffffffffffffffffffffffffffffffff82511685528582015160038110610dfc57fe5b858701526040918201519185018a9052815190819052908501908a90898601905b80831015610e5f5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928701926001929092019190870190610e1d565b50978601979450505090830190600101610da0565b5050610e828289018b610cfa565b8781036040890152610e94818a610d14565b9b9a5050505050505050505050565b600060208252610eb66020830184610d14565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560408201527f7665727465640000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201527f6163657420746f20637574000000000000000000000000000000000000000000606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560408201527f74416374696f6e00000000000000000000000000000000000000000000000000606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201527f6520616464726573732830290000000000000000000000000000000000000000606082015260800190565b60208082526030908201527f4c69624469616d6f6e644375743a205265706c6163652066616365742063616e60408201527f2774206265206164647265737328302900000000000000000000000000000000606082015260800190565b60208082526024908201527f474853545354616b696e673a2046756e6374696f6e20646f6573206e6f74206560408201527f7869737400000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b60208082526022908201527f474853545374616b696e673a20446f6573206e6f74206163636570742065746860408201527f6572000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201527f7461626c652066756e6374696f6e000000000000000000000000000000000000606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60408201527f6e207468617420616c7265616479206578697374730000000000000000000000606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b6020808252602f908201527f4c69624469616d6f6e644375743a2043616e2774207265706c61636520696d6d60408201527f757461626c652066756e6374696f6e0000000000000000000000000000000000606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e207468617420646f65736e27742065786973740000000000000000606082015260800190565b60005b838110156114a8578181015183820152602001611490565b83811115610cb8575050600091015256fe4c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f6465a26469706673582212205b419819b6f97c7034a7e2b7ef1dfdec4926ad82398249d30b2adfb3e4d7fcda64736f6c63430007030033

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

0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000027ffd3c119567e85998f4e6b9c3d83d5702660c0000000000000000000000003f382dbd960e3a9bbceae22651e88158d2791550000000000000000000000000ab659dee3030602c1af8c29d146facd4aed6ec850000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000042000000000000000000000000047195a03fc3fc2881d084e8dc03bd19be8474e46000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000adfca15e000000000000000000000000000000000000000000000000000000007a0ed6270000000000000000000000000000000000000000000000000000000001ffc9a70000000000000000000000000000000000000000000000000000000000000000000000000000000014ab595377e4fccca46062a9109ffac7fa4d3f180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000028da5cb5b00000000000000000000000000000000000000000000000000000000f2fde38b000000000000000000000000000000000000000000000000000000000000000000000000000000004a271b59763d4d8a18ff55f1faa286de97317b1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000aaa061d09000000000000000000000000000000000000000000000000000000004b334ef60000000000000000000000000000000000000000000000000000000088fa5b0400000000000000000000000000000000000000000000000000000000338d88ca0000000000000000000000000000000000000000000000000000000098807d8400000000000000000000000000000000000000000000000000000000f8a6103f000000000000000000000000000000000000000000000000000000009119f150000000000000000000000000000000000000000000000000000000009c0dfa0100000000000000000000000000000000000000000000000000000000c51c02ed00000000000000000000000000000000000000000000000000000000eb74726000000000000000000000000000000000000000000000000000000000000000000000000000000000df36944e720cf5af30a3c5d80d36db5fb71dde4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000b00fdd58e00000000000000000000000000000000000000000000000000000000fe992c98000000000000000000000000000000000000000000000000000000004e1273f400000000000000000000000000000000000000000000000000000000e985e9c5000000000000000000000000000000000000000000000000000000002eb2c2d600000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000a22cb4650000000000000000000000000000000000000000000000000000000055f804b300000000000000000000000000000000000000000000000000000000d068cdc500000000000000000000000000000000000000000000000000000000bd85b039000000000000000000000000000000000000000000000000000000000e89341c00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _diamondCut (tuple[]): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [1] : _owner (address): 0x027Ffd3c119567e85998f4E6B9c3d83D5702660c
Arg [2] : _ghstContract (address): 0x3F382DbD960E3a9bbCeaE22651E88158d2791550
Arg [3] : _uniV2PoolContract (address): 0xaB659deE3030602c1aF8C29D146fAcD4aeD6EC85

-----Encoded View---------------
53 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 000000000000000000000000027ffd3c119567e85998f4e6b9c3d83d5702660c
Arg [2] : 0000000000000000000000003f382dbd960e3a9bbceae22651e88158d2791550
Arg [3] : 000000000000000000000000ab659dee3030602c1af8c29d146facd4aed6ec85
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [6] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000420
Arg [9] : 00000000000000000000000047195a03fc3fc2881d084e8dc03bd19be8474e46
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [13] : cdffacc600000000000000000000000000000000000000000000000000000000
Arg [14] : 52ef6b2c00000000000000000000000000000000000000000000000000000000
Arg [15] : adfca15e00000000000000000000000000000000000000000000000000000000
Arg [16] : 7a0ed62700000000000000000000000000000000000000000000000000000000
Arg [17] : 01ffc9a700000000000000000000000000000000000000000000000000000000
Arg [18] : 00000000000000000000000014ab595377e4fccca46062a9109ffac7fa4d3f18
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [22] : 8da5cb5b00000000000000000000000000000000000000000000000000000000
Arg [23] : f2fde38b00000000000000000000000000000000000000000000000000000000
Arg [24] : 0000000000000000000000004a271b59763d4d8a18ff55f1faa286de97317b15
Arg [25] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [26] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [27] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [28] : aa061d0900000000000000000000000000000000000000000000000000000000
Arg [29] : 4b334ef600000000000000000000000000000000000000000000000000000000
Arg [30] : 88fa5b0400000000000000000000000000000000000000000000000000000000
Arg [31] : 338d88ca00000000000000000000000000000000000000000000000000000000
Arg [32] : 98807d8400000000000000000000000000000000000000000000000000000000
Arg [33] : f8a6103f00000000000000000000000000000000000000000000000000000000
Arg [34] : 9119f15000000000000000000000000000000000000000000000000000000000
Arg [35] : 9c0dfa0100000000000000000000000000000000000000000000000000000000
Arg [36] : c51c02ed00000000000000000000000000000000000000000000000000000000
Arg [37] : eb74726000000000000000000000000000000000000000000000000000000000
Arg [38] : 000000000000000000000000df36944e720cf5af30a3c5d80d36db5fb71dde40
Arg [39] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [40] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [41] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [42] : 00fdd58e00000000000000000000000000000000000000000000000000000000
Arg [43] : fe992c9800000000000000000000000000000000000000000000000000000000
Arg [44] : 4e1273f400000000000000000000000000000000000000000000000000000000
Arg [45] : e985e9c500000000000000000000000000000000000000000000000000000000
Arg [46] : 2eb2c2d600000000000000000000000000000000000000000000000000000000
Arg [47] : f242432a00000000000000000000000000000000000000000000000000000000
Arg [48] : a22cb46500000000000000000000000000000000000000000000000000000000
Arg [49] : 55f804b300000000000000000000000000000000000000000000000000000000
Arg [50] : d068cdc500000000000000000000000000000000000000000000000000000000
Arg [51] : bd85b03900000000000000000000000000000000000000000000000000000000
Arg [52] : 0e89341c00000000000000000000000000000000000000000000000000000000


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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