Contract 0x86935F11C86623deC8a25696E1C19a8659CbF95d 8

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x4876e93a2f250a5603a1189ef988bc16d22565b82e299995fa8c4cb97e3b2f94Interact203152152021-10-17 15:14:1445 secs ago0x8f688a91695f7d2a1e93e57cedcbf5c5202f617b IN  Aavegotchi: NFTs0 MATIC0.0069345
0x18cb6ee10c0d855ff0fd8a3ee56b4478010cd22d914a8fc657d34a31633e9230Interact203152032021-10-17 15:13:501 min ago0xc81c14281aa00864ecadbc3768fb08edc9817b21 IN  Aavegotchi: NFTs0 MATIC0.002349585
0x644b8fa7ad019420d25992825daabb22bff6c4fea56673eeb60722a515d3761bInteract203152012021-10-17 15:13:461 min ago0xeae9c2a2c803becbc81f3a485a7cda9d03e33165 IN  Aavegotchi: NFTs0 MATIC0.0201515
0x9a9619fd4ff7babf8eb0368cecbd33b5b8923fc2a1362bd6fdb03d61e9d11db5Interact203151682021-10-17 15:12:362 mins ago0x3ace611fdb6fe3bf7d2fb6504b202fc9702d421c IN  Aavegotchi: NFTs0 MATIC0.00141078
0xe5f87a3d7591dd78a6a8b15998a678e0feb95cdb4d7026e3005f057d80963403Interact203151362021-10-17 15:11:323 mins ago0xeae9c2a2c803becbc81f3a485a7cda9d03e33165 IN  Aavegotchi: NFTs0 MATIC0.0201515
0xf564b6fe4bffb970e5caee801da392a05ec842011684cbb39f191cf3c7e1e7c8Interact203151032021-10-17 15:10:224 mins ago0x6ae4ca6962c53b5b362b12125f58539039390415 IN  Aavegotchi: NFTs0 MATIC0.00120909
0xd4dfe078be95e46020ab90776c8a4ba52b0fc382336055c11d424e32f3bdc7a7Add ERC721Listin...203150612021-10-17 15:08:546 mins ago0xc415040996590a6eb82ebb2b323b3fae84268e5d IN  Aavegotchi: NFTs0 MATIC0.01071981
0x400fb57beea33d1b5b69b45490dd1eda5f5478f08a39b1b51ecce48a24a65c8eCancel ERC721Lis...203150152021-10-17 15:07:227 mins ago0x8f1fc3766884d4a890acb2cf4bd7a9af7b2a6932 IN  Aavegotchi: NFTs0 MATIC0.00177168
0xf53a44a9f5ec01f4d50a2119a8e1a6ab2ee9b22bf6cd58d7c25db1a399a402b3Add ERC721Listin...203150142021-10-17 15:07:207 mins ago0xc415040996590a6eb82ebb2b323b3fae84268e5d IN  Aavegotchi: NFTs0 MATIC0.01158465
0x078679ca8c2bc2baf4c525b3fbfcf3e226d09771df18e6b641c0529c56b10df8Add ERC721Listin...203150102021-10-17 15:07:127 mins ago0xc415040996590a6eb82ebb2b323b3fae84268e5d IN  Aavegotchi: NFTs0 MATIC0.01134522
0xfdbe606a67243aca487fa589a7ab0f76344cb51ca6430c3b7da0b8405f8d8904Add ERC721Listin...203150092021-10-17 15:07:107 mins ago0xc415040996590a6eb82ebb2b323b3fae84268e5d IN  Aavegotchi: NFTs0 MATIC0.0118158
0xf4fe99e2bf19b6f8be0c392d5039eb22b03a47cff9acc7ce57372df2ef6f0fb0Set Aavegotchi N...203150092021-10-17 15:07:107 mins ago0x2db900762d057e367d9aab2a26f713ea6bd0175b IN  Aavegotchi: NFTs0 MATIC0.002759295
0x7ec06e9ccbf1a76c5a192c417a6105d075040a79a981e0ec2d132efb42a63002Set ERC1155Listi...203150092021-10-17 15:07:107 mins ago0xdf33f4e48fa2318204fbd5e99d1141950429bb49 IN  Aavegotchi: NFTs0 MATIC0.022978175
0xfa3d67646e2b257f935b98e98fcfb2c416a94e1464982c8dd76ff2ecb72bb273Interact203150032021-10-17 15:06:468 mins ago0xf70fa1b8443c620ca7d43a9d17f4bde8b09031cc IN  Aavegotchi: NFTs0 MATIC0.001249393
0xbc7f4d38117ce532453aaca6bf238ac06c3c7544838294c8ba94fe1dc1412d00Add ERC721Listin...203149982021-10-17 15:06:268 mins ago0x509c39f7a55666fdc2ac90b085b39b41d0f089a0 IN  Aavegotchi: NFTs0 MATIC0.01134522
0xbbde93081df52477b1938e7b957ee6dd2980ce2afb9b1b1a1bfa4ffee27003adInteract203149982021-10-17 15:06:268 mins ago0xeae9c2a2c803becbc81f3a485a7cda9d03e33165 IN  Aavegotchi: NFTs0 MATIC0.015094
0x563ae208fdce3824b613ceae2748417dea554594ec41659234577ad3260c43f7Add ERC721Listin...203149962021-10-17 15:06:188 mins ago0x509c39f7a55666fdc2ac90b085b39b41d0f089a0 IN  Aavegotchi: NFTs0 MATIC0.01134522
0x27f37d30c1435f809dcf735b78d5a385be6f716d116a96ab19b028fff16c1e74Add ERC721Listin...203149902021-10-17 15:05:549 mins ago0x509c39f7a55666fdc2ac90b085b39b41d0f089a0 IN  Aavegotchi: NFTs0 MATIC0.01158465
0x3f91f1eab50b493feb1379e3ec41d3beb6952ef5094c3d0a1fc51230a5c79015Interact203149882021-10-17 15:05:469 mins ago0x181ccc0fd1a5b89dbde6ea39acea5dda7a28774a IN  Aavegotchi: NFTs0 MATIC0.00282354
0x5273210da2172dd7445292d58c3a272612b5abbe5901a963e2d39c7ff28f13f3Interact203149852021-10-17 15:05:349 mins ago0x181ccc0fd1a5b89dbde6ea39acea5dda7a28774a IN  Aavegotchi: NFTs0 MATIC0.00221664
0xdab866df1527fda22262ce72f18a54c1a2be350f9550f0977f0e3e9335b70dc3Interact203149752021-10-17 15:04:5410 mins ago0xeae9c2a2c803becbc81f3a485a7cda9d03e33165 IN  Aavegotchi: NFTs0 MATIC0.0090564
0x5f50156912a54c03c365a6956c17e19034433c34461447dcce2bb3ae236b0697Interact203149722021-10-17 15:04:4210 mins ago0x2db900762d057e367d9aab2a26f713ea6bd0175b IN  Aavegotchi: NFTs0 MATIC0.000996171
0x4b98e02ab212e7ca9a68a8586db9af303479a52eb20ad8281dcd113579e7c219Add ERC721Listin...203149672021-10-17 15:04:2210 mins ago0x509c39f7a55666fdc2ac90b085b39b41d0f089a0 IN  Aavegotchi: NFTs0 MATIC0.01158465
0xfb90e95c71c8981440ba2fb5b97856a1d4785abc06f74bf908630ca9953b2a15Add ERC721Listin...203149662021-10-17 15:04:1810 mins ago0x23abad8c65a9a93abcc343892aaf3d6e88b5ccc9 IN  Aavegotchi: NFTs0 MATIC0.01930775
0xcb0d7e7c48ee35b943d507e521debd8fb91a2637152e4cf1519b32b23c5ac41bInteract203149642021-10-17 15:04:1010 mins ago0x2db900762d057e367d9aab2a26f713ea6bd0175b IN  Aavegotchi: NFTs0 MATIC0.000996171
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x3c331c0fe8bd7961eb52228e39c56d6ed2f40f34286739f98c1f3700037ba594203141022021-10-17 14:30:2444 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x0e8be0e02b6cac37dcf64803d16578dc292f5e3e67aedfcf2267187e8f4144fa203140772021-10-17 14:28:3846 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0xaea500930ebd6b4c15f7b9144bbd9b092615a862d64fec9ff8e245889d919a8a203139672021-10-17 14:23:5051 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x4649371732b99c9f995bf496e99b41e568baa10ae95b1f5c8f83302424167045203138722021-10-17 14:20:3654 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0xc08cb698ac3f1ae22ac71ac8fee561961920060af812007f81bf19e2358c6b5a203138242021-10-17 14:17:5457 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x45a9ccb28ac0adb87196f1d4893de4a44ae1ac1b3119bc288871b7b0ec16b96b203138062021-10-17 14:16:4258 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x67694c789989140f3e202cb94f46f636c1d8933d310f01afd294f080cf64ca36203136982021-10-17 14:10:321 hr 4 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x70328e1de7340255c2b13d94ee51ed63428a29b042d31d1da0392a52f465fc53203136242021-10-17 14:04:221 hr 10 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0xda57eb7a8b6f4c7ce334099db27245f6a56e187827b86d75937b287504a85bd9203134872021-10-17 13:58:501 hr 16 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x86021e777d1ece859e3f8e87672f2cdd1559fdd1c5c940e867511dcb185f7b4e203134642021-10-17 13:58:001 hr 16 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x67edf43c8f999329076d1bd07ec7b6ce344b3c2fd0ee9c8cabab1fb583591e7b203134292021-10-17 13:56:491 hr 18 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x3b3d66fc3e045aa72b2dc6b805a4d89f7aa7272f8e3f56100a6066d5de673c03203134092021-10-17 13:56:091 hr 18 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x839b7a86cba32d02fcb66c8745aa3546586a61787b65ee70b18945ab0203891d203133872021-10-17 13:55:211 hr 19 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0xfa46b5717dfddec832b58ac0f0bab087dc1244a500db6e95b2ceba98653a14a7203133442021-10-17 13:53:551 hr 21 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0xdfd5b9ba9c321847785a4cf6e4dec22f18dab7715c3f25de4de6dd374bbca25b203132642021-10-17 13:50:371 hr 24 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x6aec398203af8337af7fd811dfefb24820ff1439d229cb7df8c66ac46767dd88203132232021-10-17 13:47:531 hr 27 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0xa2e99a06dec32c4fe022a1a6469cfbf12a22840d23cec2ac0534f8182a503997203132162021-10-17 13:47:251 hr 27 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x34625a4fe46314af896a8fa5f4f3f1d0ff3be4db5c93c11e7ea05c23105963fd203132022021-10-17 13:46:511 hr 28 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x6a85858e0827e4bfadef372c927de4c0d1140aecb33e35fe11003279f6cb6925203131932021-10-17 13:46:331 hr 28 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0xe7abb3ec1c83540c1931ce8f509ac0e10cfffd986d2e3202e239b8a8b6511313203131642021-10-17 13:45:351 hr 29 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0xcee44cde8df6cfa0cc2b0cac050438142e103fedb5c50b26b71ade3164596a27203131522021-10-17 13:45:111 hr 29 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0xb2c4e77a7a34f407f0e559be45a5ee26c693a06162842a3ab9843f303998a513203131372021-10-17 13:44:371 hr 30 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0xe6d02f38153048fcbc7da7816cb7e3989956cc5a169df5f87d9361294cea9ff9203131272021-10-17 13:44:171 hr 30 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x635c1d64a2b3b4078e3d4171bb8e0e037a234721b5d1eb8cf07c29755048bb12203131132021-10-17 13:43:491 hr 31 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
0x29539d915278fb38cdf6b07674dafaa21995de02d02ec8cada92ad1f867213b9203131092021-10-17 13:43:411 hr 31 mins ago Aavegotchi: NFTs  Contract Creation0 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Diamond

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-07-01
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.1;

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



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



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



library LibMeta {
    bytes32 internal constant EIP712_DOMAIN_TYPEHASH =
        keccak256(bytes("EIP712Domain(string name,string version,uint256 salt,address verifyingContract)"));

    function domainSeparator(string memory name, string memory version) internal view returns (bytes32 domainSeparator_) {
        domainSeparator_ = keccak256(
            abi.encode(EIP712_DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(version)), getChainID(), address(this))
        );
    }

    function getChainID() internal view returns (uint256 id) {
        assembly {
            id := chainid()
        }
    }

    function msgSender() internal view returns (address sender_) {
        if (msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
                sender_ := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)
            }
        } else {
            sender_ = msg.sender;
        }
    }
}



/******************************************************************************\
* Authors: Nick Mudge (https://twitter.com/mudgen)
*
* Implementation of a diamond.
/******************************************************************************/




/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/







/// @title ERC-173 Contract Ownership Standard
///  Note: the ERC-165 identifier for this interface is 0x7f5828d0
/* is ERC165 */
interface IERC173 {
    /// @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;
}



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

    struct FacetAddressAndPosition {
        address facetAddress;
        uint16 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array
    }

    struct FacetFunctionSelectors {
        bytes4[] functionSelectors;
        uint16 facetAddressPosition; // position of facetAddress in facetAddresses array
    }

    struct DiamondStorage {
        // maps function selector to the facet address and
        // the position of the selector in the facetFunctionSelectors.selectors array
        mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;
        // maps facet addresses to function selectors
        mapping(address => FacetFunctionSelectors) facetFunctionSelectors;
        // facet addresses
        address[] facetAddresses;
        // 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(LibMeta.msgSender() == diamondStorage().contractOwner, "LibDiamond: Must be contract owner");
    }

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

    function addDiamondFunctions(
        address _diamondCutFacet,
        address _diamondLoupeFacet,
        address _ownershipFacet
    ) internal {
        IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](3);
        bytes4[] memory functionSelectors = new bytes4[](1);
        functionSelectors[0] = IDiamondCut.diamondCut.selector;
        cut[0] = IDiamondCut.FacetCut({facetAddress: _diamondCutFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors});
        functionSelectors = new bytes4[](5);
        functionSelectors[0] = IDiamondLoupe.facets.selector;
        functionSelectors[1] = IDiamondLoupe.facetFunctionSelectors.selector;
        functionSelectors[2] = IDiamondLoupe.facetAddresses.selector;
        functionSelectors[3] = IDiamondLoupe.facetAddress.selector;
        functionSelectors[4] = IERC165.supportsInterface.selector;
        cut[1] = IDiamondCut.FacetCut({
            facetAddress: _diamondLoupeFacet,
            action: IDiamondCut.FacetCutAction.Add,
            functionSelectors: functionSelectors
        });
        functionSelectors = new bytes4[](2);
        functionSelectors[0] = IERC173.transferOwnership.selector;
        functionSelectors[1] = IERC173.owner.selector;
        cut[2] = IDiamondCut.FacetCut({facetAddress: _ownershipFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors});
        diamondCut(cut, address(0), "");
    }

    // Internal function version of diamondCut
    function diamondCut(
        IDiamondCut.FacetCut[] memory _diamondCut,
        address _init,
        bytes memory _calldata
    ) internal {
        for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {
            IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;
            if (action == IDiamondCut.FacetCutAction.Add) {
                addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Replace) {
                replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Remove) {
                removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else {
                revert("LibDiamondCut: Incorrect FacetCutAction");
            }
        }
        emit DiamondCut(_diamondCut, _init, _calldata);
        initializeDiamondCut(_init, _calldata);
    }

    function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        // uint16 selectorCount = uint16(diamondStorage().selectors.length);
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code");
            ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length);
            ds.facetAddresses.push(_facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists");
            ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector);
            ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress;
            ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition;
            selectorPosition++;
        }
    }

    function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code");
            ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length);
            ds.facetAddresses.push(_facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress != _facetAddress, "LibDiamondCut: Can't replace function with same function");
            removeFunction(oldFacetAddress, selector);
            // add function
            ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition;
            ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector);
            ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress;
            selectorPosition++;
        }
    }

    function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        // if function does not exist then do nothing and return
        require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)");
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            removeFunction(oldFacetAddress, selector);
        }
    }

    function removeFunction(address _facetAddress, bytes4 _selector) internal {
        DiamondStorage storage ds = diamondStorage();
        require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist");
        // an immutable function is a function defined directly in a diamond
        require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function");
        // replace selector with last selector, then delete last selector
        uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;
        uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;
        // if not the same then replace _selector with lastSelector
        if (selectorPosition != lastSelectorPosition) {
            bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];
            ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;
            ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint16(selectorPosition);
        }
        // delete the last selector
        ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();
        delete ds.selectorToFacetAndPosition[_selector];

        // if no more selectors for facet address then delete the facet address
        if (lastSelectorPosition == 0) {
            // replace facet address with last facet address and delete last facet address
            uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;
            uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
            if (facetAddressPosition != lastFacetAddressPosition) {
                address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];
                ds.facetAddresses[facetAddressPosition] = lastFacetAddress;
                ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = uint16(facetAddressPosition);
            }
            ds.facetAddresses.pop();
            delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
        }
    }

    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 == false) {
                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);
    }
}




/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/




contract DiamondCutFacet is IDiamondCut {
    /// @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 override {
        LibDiamond.enforceIsContractOwner();
        LibDiamond.diamondCut(_diamondCut, _init, _calldata);
    }
}




/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/





contract DiamondLoupeFacet is IDiamondLoupe, IERC165 {
    // Diamond Loupe Functions
    ////////////////////////////////////////////////////////////////////
    /// These functions are expected to be called frequently by tools.
    //
    // struct Facet {
    //     address facetAddress;
    //     bytes4[] functionSelectors;
    // }

    /// @notice Gets all facets and their selectors.
    /// @return facets_ Facet
    function facets() external view override returns (Facet[] memory facets_) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        uint256 numFacets = ds.facetAddresses.length;
        facets_ = new Facet[](numFacets);
        for (uint256 i; i < numFacets; i++) {
            address facetAddress_ = ds.facetAddresses[i];
            facets_[i].facetAddress = facetAddress_;
            facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;
        }
    }

    /// @notice Gets all the function selectors provided by a facet.
    /// @param _facet The facet address.
    /// @return facetFunctionSelectors_
    function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;
    }

    /// @notice Get all the facet addresses used by a diamond.
    /// @return facetAddresses_
    function facetAddresses() external view override returns (address[] memory facetAddresses_) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        facetAddresses_ = ds.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 override returns (address facetAddress_) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;
    }

    // This implements ERC-165.
    function supportsInterface(bytes4 _interfaceId) external view override returns (bool) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        return ds.supportedInterfaces[_interfaceId];
    }
}







contract OwnershipFacet is IERC173 {
    function transferOwnership(address _newOwner) external override {
        LibDiamond.enforceIsContractOwner();
        LibDiamond.setContractOwner(_newOwner);
    }

    function owner() external view override returns (address owner_) {
        owner_ = LibDiamond.contractOwner();
    }
}


contract Diamond {
    constructor(address _contractOwner) {
        LibDiamond.setContractOwner(_contractOwner);
        LibDiamond.addDiamondFunctions(address(new DiamondCutFacet()), address(new DiamondLoupeFacet()), address(new OwnershipFacet()));
    }

    // 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 = ds.selectorToFacetAndPosition[msg.sig].facetAddress;
        require(facet != address(0), "Diamond: 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())
                }
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"}]

60806040523480156200001157600080fd5b5060405162005112380380620051128339810160408190526200003491620012d1565b6200004a81620000ea60201b620000951760201c565b620000e36040516200005c9062001288565b604051809103906000f08015801562000079573d6000803e3d6000fd5b50604051620000889062001296565b604051809103906000f080158015620000a5573d6000803e3d6000fd5b50604051620000b490620012a4565b604051809103906000f080158015620000d1573d6000803e3d6000fd5b506200014c60201b620000f51760201c565b50620018b3565b6000620000f662000531565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60408051600380825260808201909252600091816020015b6200016e620012b2565b815260200190600190039081620001645750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b81600081518110620001d157634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03871681529081016000815260200182815250826000815181106200023057634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408051600580825260c0820190925290816020016020820280368337019050509050637a0ed62760e01b816000815181106200028857634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b9082906001908110620002ce57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b90829060029081106200031457634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b90829060039081106200035a57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516301ffc9a760e01b9082906004908110620003a057634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b0386168152908101600081526020018281525082600181518110620003ff57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152604080516002808252606082019092529081602001602082028036833701905050905063f2fde38b60e01b816000815181106200045757634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101909101528051638da5cb5b60e01b90829060019081106200049d57634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b0385168152908101600081526020018281525082600281518110620004fc57634e487b7160e01b600052603260045260246000fd5b60200260200101819052506200052a826000604051806020016040528060008152506200055560201b60201c565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60005b8351811015620007ae5760008482815181106200058557634e487b7160e01b600052603260045260246000fd5b602002602001015160200151905060006002811115620005b557634e487b7160e01b600052602160045260246000fd5b816002811115620005d657634e487b7160e01b600052602160045260246000fd5b14156200064d57620006478583815181106200060257634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106200062f57634e487b7160e01b600052603260045260246000fd5b602002602001015160400151620007fd60201b60201c565b62000798565b60018160028111156200067057634e487b7160e01b600052602160045260246000fd5b1415620006e157620006478583815181106200069c57634e487b7160e01b600052603260045260246000fd5b602002602001015160000151868481518110620006c957634e487b7160e01b600052603260045260246000fd5b60200260200101516040015162000a3660201b60201c565b60028160028111156200070457634e487b7160e01b600052602160045260246000fd5b14156200077557620006478583815181106200073057634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106200075d57634e487b7160e01b600052603260045260246000fd5b60200260200101516040015162000c8b60201b60201c565b60405162461bcd60e51b81526004016200078f90620015bc565b60405180910390fd5b5080620007a5816200187f565b91505062000558565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051620007e4939291906200135a565b60405180910390a1620007f8828262000d73565b505050565b6000815111620008215760405162461bcd60e51b81526004016200078f9062001514565b60006200082d62000531565b90506001600160a01b038316620008585760405162461bcd60e51b81526004016200078f9062001603565b6001600160a01b038316600090815260018201602052604090205461ffff8116620008fe57620008a284604051806060016040528060248152602001620050ee6024913962000eb1565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156200052a5760008482815181106200092e57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03168015620009815760405162461bcd60e51b81526004016200078f90620016fa565b6001600160a01b03871660008181526001878101602090815260408084208054938401815584528184206008840401805463ffffffff60079095166004026101000a948502191660e089901c94909402939093179092556001600160e01b031986168352889052902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff8716021790558362000a1b816200185a565b9450505050808062000a2d906200187f565b91505062000901565b600081511162000a5a5760405162461bcd60e51b81526004016200078f9062001514565b600062000a6662000531565b90506001600160a01b03831662000a915760405162461bcd60e51b81526004016200078f9062001603565b6001600160a01b038316600090815260018201602052604090205461ffff811662000b375762000adb84604051806060016040528060248152602001620050ee6024913962000eb1565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156200052a57600084828151811062000b6757634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690871681141562000bc05760405162461bcd60e51b81526004016200078f9062001757565b62000bcc818362000ed5565b6001600160e01b03198216600081815260208781526040808320805461ffff60a01b1916600160a01b61ffff8b16021781556001600160a01b038c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b0319161790558362000c70816200185a565b9450505050808062000c82906200187f565b91505062000b3a565b600081511162000caf5760405162461bcd60e51b81526004016200078f9062001514565b600062000cbb62000531565b90506001600160a01b0383161562000ce75760405162461bcd60e51b81526004016200078f90620017b4565b60005b825181101562000d6d57600083828151811062000d1757634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b031662000d55818362000ed5565b5050808062000d64906200187f565b91505062000cea565b50505050565b6001600160a01b03821662000daa5780511562000da45760405162461bcd60e51b81526004016200078f9062001471565b62000ead565b600081511162000dce5760405162461bcd60e51b81526004016200078f906200164f565b6001600160a01b038216301462000e045762000e0482604051806060016040528060288152602001620050c66028913962000eb1565b600080836001600160a01b03168360405162000e2191906200133c565b600060405180830381855af49150503d806000811462000e5e576040519150601f19603f3d011682016040523d82523d6000602084013e62000e63565b606091505b5090925090508162000d6d5780511562000e93578060405162461bcd60e51b81526004016200078f91906200145c565b60405162461bcd60e51b81526004016200078f90620014ce565b5050565b813b818162000d6d5760405162461bcd60e51b81526004016200078f91906200145c565b600062000ee162000531565b90506001600160a01b03831662000f0c5760405162461bcd60e51b81526004016200078f906200155f565b6001600160a01b03831630141562000f385760405162461bcd60e51b81526004016200078f90620016ac565b6001600160e01b03198216600090815260208281526040808320546001600160a01b0387168452600180860190935290832054600160a01b90910461ffff16929162000f849162001811565b90508082146200108f576001600160a01b0385166000908152600184016020526040812080548390811062000fc957634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b9250829190859081106200102957634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b03851660009081526001840160205260409020805480620010c757634e487b7160e01b600052603160045260246000fd5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080546001600160b01b0319169055806200052a576002830154600090620011369060019062001811565b6001600160a01b038716600090815260018087016020526040909120015490915061ffff16808214620012145760008560020183815481106200118957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546002870180546001600160a01b039092169250829184908110620011c957634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b846002018054806200123657634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b6116e4806200309e83390190565b61068e806200478283390190565b6102b68062004e1083390190565b6040805160608082018352600080835260208301529181019190915290565b600060208284031215620012e3578081fd5b81516001600160a01b0381168114620012fa578182fd5b9392505050565b6001600160a01b03169052565b60008151808452620013288160208601602086016200182b565b601f01601f19169290920160200192915050565b60008251620013508184602087016200182b565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b848110156200142957898303607f19018652815180516001600160a01b03168452848101518985019060038110620013c657634e487b7160e01b8c52602160045260248cfd5b858701526040918201519185018a9052815190819052908501908a90898601905b80831015620014135783516001600160e01b0319168252928701926001929092019190870190620013e7565b5097860197945050509083019060010162001380565b5050620014398289018b62001301565b87810360408901526200144d818a6200130e565b9b9a5050505050505050505050565b600060208252620012fa60208301846200130e565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656040820152651d995c9d195960d21b606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756040820152663a20b1ba34b7b760c91b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201526d3a30b1363290333ab731ba34b7b760911b606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60408201527f6e207468617420616c7265616479206578697374730000000000000000000000606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b6000828210156200182657620018266200189d565b500390565b60005b83811015620018485781810151838201526020016200182e565b8381111562000d6d5750506000910152565b600061ffff808316818114156200187557620018756200189d565b6001019392505050565b60006000198214156200189657620018966200189d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6117db80620018c36000396000f3fe60806040908152600080356001600160e01b03191681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c60208190529190205481906001600160a01b0316806100715760405162461bcd60e51b8152600401610068906114db565b60405180910390fd5b3660008037600080366000845af43d6000803e808015610090573d6000f35b3d6000fd5b600061009f6104c4565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60408051600380825260808201909252600091816020015b610115611176565b81526020019060019003908161010d5750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b8160008151811061017657634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03871681529081016000815260200182815250826000815181106101d457634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408051600580825260c0820190925290816020016020820280368337019050509050637a0ed62760e01b8160008151811061022b57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b908290600190811061027057634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b90829060029081106102b557634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b90829060039081106102fa57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516301ffc9a760e01b908290600490811061033f57634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038616815290810160008152602001828152508260018151811061039d57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152604080516002808252606082019092529081602001602082028036833701905050905063f2fde38b60e01b816000815181106103f457634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101909101528051638da5cb5b60e01b908290600190811061043957634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038516815290810160008152602001828152508260028151811061049757634e487b7160e01b600052603260045260246000fd5b60200260200101819052506104bd826000604051806020016040528060008152506104e8565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60005b835181101561070b57600084828151811061051657634e487b7160e01b600052603260045260246000fd5b60200260200101516020015190506000600281111561054557634e487b7160e01b600052602160045260246000fd5b81600281111561056557634e487b7160e01b600052602160045260246000fd5b14156105d0576105cb85838151811061058e57634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106105ba57634e487b7160e01b600052603260045260246000fd5b602002602001015160400151610756565b6106f8565b60018160028111156105f257634e487b7160e01b600052602160045260246000fd5b1415610658576105cb85838151811061061b57634e487b7160e01b600052603260045260246000fd5b60200260200101516000015186848151811061064757634e487b7160e01b600052603260045260246000fd5b602002602001015160400151610979565b600281600281111561067a57634e487b7160e01b600052602160045260246000fd5b14156106e0576105cb8583815181106106a357634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106106cf57634e487b7160e01b600052603260045260246000fd5b602002602001015160400151610bb6565b60405162461bcd60e51b815260040161006890611448565b508061070381611728565b9150506104eb565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161073f939291906111ea565b60405180910390a16107518282610c8f565b505050565b60008151116107775760405162461bcd60e51b8152600401610068906113a0565b60006107816104c4565b90506001600160a01b0383166107a95760405162461bcd60e51b81526004016100689061148f565b6001600160a01b038316600090815260018201602052604090205461ffff811661084b576107ef8460405180606001604052806024815260200161178260249139610db7565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156104bd57600084828151811061087957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b031680156108c95760405162461bcd60e51b8152600401610068906115bb565b6001600160a01b03871660008181526001878101602090815260408084208054938401815584528184206008840401805463ffffffff60079095166004026101000a948502191660e089901c94909402939093179092556001600160e01b031986168352889052902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff8716021790558361096181611706565b9450505050808061097190611728565b91505061084e565b600081511161099a5760405162461bcd60e51b8152600401610068906113a0565b60006109a46104c4565b90506001600160a01b0383166109cc5760405162461bcd60e51b81526004016100689061148f565b6001600160a01b038316600090815260018201602052604090205461ffff8116610a6e57610a128460405180606001604052806024815260200161178260249139610db7565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156104bd576000848281518110610a9c57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03908116908716811415610af25760405162461bcd60e51b815260040161006890611610565b610afc8183610dd8565b6001600160e01b03198216600081815260208781526040808320805461ffff60a01b1916600160a01b61ffff8b16021781556001600160a01b038c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b03191617905583610b9e81611706565b94505050508080610bae90611728565b915050610a71565b6000815111610bd75760405162461bcd60e51b8152600401610068906113a0565b6000610be16104c4565b90506001600160a01b03831615610c0a5760405162461bcd60e51b81526004016100689061166d565b60005b8251811015610c89576000838281518110610c3857634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b0316610c748183610dd8565b50508080610c8190611728565b915050610c0d565b50505050565b6001600160a01b038216610cc157805115610cbc5760405162461bcd60e51b8152600401610068906112fd565b610db3565b6000815111610ce25760405162461bcd60e51b815260040161006890611510565b6001600160a01b0382163014610d1457610d148260405180606001604052806028815260200161175a60289139610db7565b600080836001600160a01b031683604051610d2f91906111ce565b600060405180830381855af49150503d8060008114610d6a576040519150601f19603f3d011682016040523d82523d6000602084013e610d6f565b606091505b50909250905081610c8957805115610d9b578060405162461bcd60e51b815260040161006891906112e3565b60405162461bcd60e51b81526004016100689061135a565b5050565b813b8181610c895760405162461bcd60e51b815260040161006891906112e3565b6000610de26104c4565b90506001600160a01b038316610e0a5760405162461bcd60e51b8152600401610068906113eb565b6001600160a01b038316301415610e335760405162461bcd60e51b81526004016100689061156d565b6001600160e01b03198216600090815260208281526040808320546001600160a01b0387168452600180860190935290832054600160a01b90910461ffff169291610e7d916116c3565b9050808214610f85576001600160a01b03851660009081526001840160205260408120805483908110610ec057634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b925082919085908110610f1f57634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b03851660009081526001840160205260409020805480610fbc57634e487b7160e01b600052603160045260246000fd5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080546001600160b01b0319169055806104bd576002830154600090611028906001906116c3565b6001600160a01b038716600090815260018087016020526040909120015490915061ffff1680821461110357600085600201838154811061107957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546002870180546001600160a01b0390921692508291849081106110b857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b8460020180548061112457634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b6040805160608082018352600080835260208301529181019190915290565b6001600160a01b03169052565b600081518084526111ba8160208601602086016116da565b601f01601f19169290920160200192915050565b600082516111e08184602087016116da565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b848110156112b457898303607f19018652815180516001600160a01b0316845284810151898501906003811061125457634e487b7160e01b8c52602160045260248cfd5b858701526040918201519185018a9052815190819052908501908a90898601905b8083101561129f5783516001600160e01b0319168252928701926001929092019190870190611275565b50978601979450505090830190600101611210565b50506112c28289018b611195565b87810360408901526112d4818a6111a2565b9b9a5050505050505050505050565b6000602082526112f660208301846111a2565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656040820152651d995c9d195960d21b606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756040820152663a20b1ba34b7b760c91b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b6020808252818101527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374604082015260600190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201526d3a30b1363290333ab731ba34b7b760911b606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6040820152746e207468617420616c72656164792065786973747360581b606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604082015275657373206d757374206265206164647265737328302960501b606082015260800190565b6000828210156116d5576116d5611743565b500390565b60005b838110156116f55781810151838201526020016116dd565b83811115610c895750506000910152565b600061ffff8083168181141561171e5761171e611743565b6001019392505050565b600060001982141561173c5761173c611743565b5060010190565b634e487b7160e01b600052601160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220991a48ccf95d04c6fbc41dc5d88d2e9e3df219a6ab5d9c3cce53f2c4f8cf9cd064736f6c63430008010033608060405234801561001057600080fd5b506116c4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631f931c1c14610030575b600080fd5b61004361003e366004610e17565b610045565b005b61004d61009e565b61009761005a8587611490565b8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506100ec92505050565b5050505050565b6100a661035a565b600401546001600160a01b03166100bb61037e565b6001600160a01b0316146100ea5760405162461bcd60e51b81526004016100e1906110f4565b60405180910390fd5b565b60005b835181101561030f57600084828151811061011a57634e487b7160e01b600052603260045260246000fd5b60200260200101516020015190506000600281111561014957634e487b7160e01b600052602160045260246000fd5b81600281111561016957634e487b7160e01b600052602160045260246000fd5b14156101d4576101cf85838151811061019257634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106101be57634e487b7160e01b600052603260045260246000fd5b6020026020010151604001516103db565b6102fc565b60018160028111156101f657634e487b7160e01b600052602160045260246000fd5b141561025c576101cf85838151811061021f57634e487b7160e01b600052603260045260246000fd5b60200260200101516000015186848151811061024b57634e487b7160e01b600052603260045260246000fd5b6020026020010151604001516105fe565b600281600281111561027e57634e487b7160e01b600052602160045260246000fd5b14156102e4576101cf8583815181106102a757634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106102d357634e487b7160e01b600052603260045260246000fd5b60200260200101516040015161083b565b60405162461bcd60e51b81526004016100e1906111de565b5080610307816115fb565b9150506100ef565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161034393929190610f3e565b60405180910390a16103558282610914565b505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b6000333014156103d557600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506103d89050565b50335b90565b60008151116103fc5760405162461bcd60e51b81526004016100e190611136565b600061040661035a565b90506001600160a01b03831661042e5760405162461bcd60e51b81526004016100e190611225565b6001600160a01b038316600090815260018201602052604090205461ffff81166104d0576104748460405180606001604052806024815260200161166b60249139610a3c565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156100975760008482815181106104fe57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0316801561054e5760405162461bcd60e51b81526004016100e19061131c565b6001600160a01b03871660008181526001878101602090815260408084208054938401815584528184206008840401805463ffffffff60079095166004026101000a948502191660e089901c94909402939093179092556001600160e01b031986168352889052902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff871602179055836105e6816115d9565b945050505080806105f6906115fb565b9150506104d3565b600081511161061f5760405162461bcd60e51b81526004016100e190611136565b600061062961035a565b90506001600160a01b0383166106515760405162461bcd60e51b81526004016100e190611225565b6001600160a01b038316600090815260018201602052604090205461ffff81166106f3576106978460405180606001604052806024815260200161166b60249139610a3c565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b835181101561009757600084828151811061072157634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b039081169087168114156107775760405162461bcd60e51b81526004016100e190611371565b6107818183610a5d565b6001600160e01b03198216600081815260208781526040808320805461ffff60a01b1916600160a01b61ffff8b16021781556001600160a01b038c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b03191617905583610823816115d9565b94505050508080610833906115fb565b9150506106f6565b600081511161085c5760405162461bcd60e51b81526004016100e190611136565b600061086661035a565b90506001600160a01b0383161561088f5760405162461bcd60e51b81526004016100e1906113ce565b60005b825181101561090e5760008382815181106108bd57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b03166108f98183610a5d565b50508080610906906115fb565b915050610892565b50505050565b6001600160a01b038216610946578051156109415760405162461bcd60e51b81526004016100e190611051565b610a38565b60008151116109675760405162461bcd60e51b81526004016100e190611271565b6001600160a01b0382163014610999576109998260405180606001604052806028815260200161164360289139610a3c565b600080836001600160a01b0316836040516109b49190610f22565b600060405180830381855af49150503d80600081146109ef576040519150601f19603f3d011682016040523d82523d6000602084013e6109f4565b606091505b5090925090508161090e57805115610a20578060405162461bcd60e51b81526004016100e19190611037565b60405162461bcd60e51b81526004016100e1906110ae565b5050565b813b818161090e5760405162461bcd60e51b81526004016100e19190611037565b6000610a6761035a565b90506001600160a01b038316610a8f5760405162461bcd60e51b81526004016100e190611181565b6001600160a01b038316301415610ab85760405162461bcd60e51b81526004016100e1906112ce565b6001600160e01b03198216600090815260208281526040808320546001600160a01b0387168452600180860190935290832054600160a01b90910461ffff169291610b0291611479565b9050808214610c0a576001600160a01b03851660009081526001840160205260408120805483908110610b4557634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b925082919085908110610ba457634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b03851660009081526001840160205260409020805480610c4157634e487b7160e01b600052603160045260246000fd5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080546001600160b01b031916905580610097576002830154600090610cad90600190611479565b6001600160a01b038716600090815260018087016020526040909120015490915061ffff16808214610d88576000856002018381548110610cfe57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546002870180546001600160a01b039092169250829184908110610d3d57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b84600201805480610da957634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b80356001600160a01b0381168114610e1257600080fd5b919050565b600080600080600060608688031215610e2e578081fd5b853567ffffffffffffffff80821115610e45578283fd5b818801915088601f830112610e58578283fd5b813581811115610e66578384fd5b60208a818284028601011115610e7a578485fd5b8084019850819750610e8d818b01610dfb565b965060408a0135935082841115610ea2578485fd5b838a0193508a601f850112610eb5578485fd5b8335915082821115610ec5578485fd5b8a81838601011115610ed5578485fd5b979a96995094975050909401935090919050565b6001600160a01b03169052565b60008151808452610f0e8160208601602086016115ad565b601f01601f19169290920160200192915050565b60008251610f348184602087016115ad565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b8481101561100857898303607f19018652815180516001600160a01b03168452848101518985019060038110610fa857634e487b7160e01b8c52602160045260248cfd5b858701526040918201519185018a9052815190819052908501908a90898601905b80831015610ff35783516001600160e01b0319168252928701926001929092019190870190610fc9565b50978601979450505090830190600101610f64565b50506110168289018b610ee9565b8781036040890152611028818a610ef6565b9b9a5050505050505050505050565b60006020825261104a6020830184610ef6565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656040820152651d995c9d195960d21b606082015260800190565b60208082526022908201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60408201526132b960f11b606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756040820152663a20b1ba34b7b760c91b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201526d3a30b1363290333ab731ba34b7b760911b606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6040820152746e207468617420616c72656164792065786973747360581b606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604082015275657373206d757374206265206164647265737328302960501b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561144d5761144d61162c565b604052919050565b600067ffffffffffffffff82111561146f5761146f61162c565b5060209081020190565b60008282101561148b5761148b611616565b500390565b60006114a361149e84611455565b611424565b8381526020808201919084845b878110156115a1578135870160608082360312156114cc578788fd5b6114d581611424565b90506114e082610dfb565b815284820135600381106114f2578889fd5b8186015260408281013567ffffffffffffffff81111561151057898afd5b929092019136601f840112611523578889fd5b823561153161149e82611455565b81815287810190858901368a850288018b01111561154d578c8dfd5b8c96505b838710156115845780356001600160e01b031981168114611570578d8efd5b835260019690960195918901918901611551565b5092840192909252505086525093820193908201906001016114b0565b50919695505050505050565b60005b838110156115c85781810151838201526020016115b0565b8381111561090e5750506000910152565b600061ffff808316818114156115f1576115f1611616565b6001019392505050565b600060001982141561160f5761160f611616565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220d92c2242b54ddf70b61c6705a16641c554201aeab7b3b82072c87efc6eac051064736f6c63430008010033608060405234801561001057600080fd5b5061066e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806301ffc9a71461005c57806352ef6b2c146100855780637a0ed6271461009a578063adfca15e146100af578063cdffacc6146100cf575b600080fd5b61006f61006a3660046104ac565b6100ef565b60405161007c9190610606565b60405180910390f35b61008d610122565b60405161007c919061052c565b6100a261018e565b60405161007c919061058c565b6100c26100bd36600461047e565b610363565b60405161007c9190610579565b6100e26100dd3660046104ac565b61040d565b60405161007c9190610518565b6000806100fa610442565b6001600160e01b0319841660009081526003909101602052604090205460ff16915050919050565b6060600061012e610442565b6002810180546040805160208084028201810190925282815293945083018282801561018357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610165575b505050505091505090565b6060600061019a610442565b60028101549091508067ffffffffffffffff8111156101c957634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561020257816020015b6101ef610466565b8152602001906001900390816101e75790505b50925060005b8181101561035d57600083600201828154811061023557634e487b7160e01b600052603260045260246000fd5b9060005260206000200160009054906101000a90046001600160a01b031690508085838151811061027657634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561031557602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116102d75790505b505050505085838151811061033a57634e487b7160e01b600052603260045260246000fd5b60200260200101516020018190525050808061035590610611565b915050610208565b50505090565b6060600061036f610442565b6001600160a01b0384166000908152600182016020908152604091829020805483518184028101840190945280845293945091929083018282801561040057602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116103c25790505b5050505050915050919050565b600080610418610442565b6001600160e01b03199093166000908152602093909352505060409020546001600160a01b031690565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60408051808201909152600081526060602082015290565b60006020828403121561048f578081fd5b81356001600160a01b03811681146104a5578182fd5b9392505050565b6000602082840312156104bd578081fd5b81356001600160e01b0319811681146104a5578182fd5b6000815180845260208085019450808401835b8381101561050d5781516001600160e01b031916875295820195908201906001016104e7565b509495945050505050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b8181101561056d5783516001600160a01b031683529284019291840191600101610548565b50909695505050505050565b6000602082526104a560208301846104d4565b60208082528251828201819052600091906040908185019080840286018301878501865b838110156105f857888303603f19018552815180516001600160a01b031684528701518784018790526105e5878501826104d4565b95880195935050908601906001016105b0565b509098975050505050505050565b901515815260200190565b600060001982141561063157634e487b7160e01b81526011600452602481fd5b506001019056fea2646970667358221220e974872b33a9693d2454ffea8295365d6ebcbeb98aa6df766605c218fab9a65a64736f6c63430008010033608060405234801561001057600080fd5b50610296806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80638da5cb5b1461003b578063f2fde38b14610059575b600080fd5b61004361006e565b604051610050919061020a565b60405180910390f35b61006c6100673660046101dc565b61007d565b005b6000610078610091565b905090565b6100856100ad565b61008e816100fb565b50565b600061009b61015b565b600401546001600160a01b0316919050565b6100b561015b565b600401546001600160a01b03166100ca61017f565b6001600160a01b0316146100f95760405162461bcd60e51b81526004016100f09061021e565b60405180910390fd5b565b600061010561015b565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b6000333014156101d657600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506101d99050565b50335b90565b6000602082840312156101ed578081fd5b81356001600160a01b0381168114610203578182fd5b9392505050565b6001600160a01b0391909116815260200190565b60208082526022908201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60408201526132b960f11b60608201526080019056fea2646970667358221220e271d514a26b086cf723d279217d51c7e4c57ca51ff9152a4bf0a36b2bf8a55764736f6c634300080100334c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465000000000000000000000000819c3fc356bb319035f9d2886fac9e57df0343f5

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

000000000000000000000000819c3fc356bb319035f9d2886fac9e57df0343f5

-----Decoded View---------------
Arg [0] : _contractOwner (address): 0x819c3fc356bb319035f9d2886fac9e57df0343f5

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000819c3fc356bb319035f9d2886fac9e57df0343f5


Deployed ByteCode Sourcemap

21817:1184:0:-:0;;;;;22246:36;22468:7;;-1:-1:-1;;;;;;22468:7:0;22438:38;;5411:45;22438:38;;;;;;;:51;5411:45;;-1:-1:-1;;;;;22438:51:0;;22500:64;;;;-1:-1:-1;;;22500:64:0;;;;;;;:::i;:::-;;;;;;;;;22618:14;22615:1;22612;22599:34;22710:1;22707;22691:14;22688:1;22681:5;22674;22661:51;22747:16;22744:1;22741;22726:38;22785:6;22809:76;;;;22944:16;22941:1;22934:27;22809:76;22849:16;22846:1;22839:27;6805:269;6870:25;6898:16;:14;:16::i;:::-;6949;;;;;-1:-1:-1;;;;;6976:28:0;;;-1:-1:-1;;;;;;6976:28:0;;;;;;;7020:46;;6870:44;;-1:-1:-1;6949:16:0;;;;7020:46;;6925:21;;7020:46;6805:269;;;:::o;7496:1477::-;7694:29;;;7721:1;7694:29;;;;;;;;;7658:33;;7694:29;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;7770:15:0;;;7783:1;7770:15;;;;;;;;;7658:65;;-1:-1:-1;7734:33:0;;7770:15;;;;;;;;;;;;-1:-1:-1;7770:15:0;7734:51;;7819:31;;;7796:17;7814:1;7796:20;;;;;;-1:-1:-1;;;7796:20:0;;;;;;;;;-1:-1:-1;;;;;;7796:54:0;;;:20;;;;;;;;;;:54;7870:132;;;;;;;;;-1:-1:-1;;;;;7870:132:0;;;;;;;-1:-1:-1;7870:132:0;;;;7983:17;7870:132;;;7861:3;7865:1;7861:6;;;;;;-1:-1:-1;;;7861:6:0;;;;;;;;;;;;;;;;;;:141;8033:15;;;8046:1;8033:15;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8033:15:0;8013:35;;8082:29;;;8059:17;8077:1;8059:20;;;;;;-1:-1:-1;;;8059:20:0;;;;;;;;;-1:-1:-1;;;;;;8059:52:0;;;:20;;;;;;;;;;;:52;8122:20;;-1:-1:-1;;;8145:45:0;8122:17;;8140:1;;8122:20;;;;-1:-1:-1;;;8122:20:0;;;;;;;;;-1:-1:-1;;;;;;8122:68:0;;;:20;;;;;;;;;;;:68;8201:20;;-1:-1:-1;;;8224:37:0;8201:17;;8219:1;;8201:20;;;;-1:-1:-1;;;8201:20:0;;;;;;;;;-1:-1:-1;;;;;;8201:60:0;;;:20;;;;;;;;;;;:60;8272:20;;-1:-1:-1;;;8295:35:0;8272:17;;8290:1;;8272:20;;;;-1:-1:-1;;;8272:20:0;;;;;;;;;-1:-1:-1;;;;;;8272:58:0;;;:20;;;;;;;;;;;:58;8341:20;;-1:-1:-1;;;8364:34:0;8341:17;;8359:1;;8341:20;;;;-1:-1:-1;;;8341:20:0;;;;;;;;;-1:-1:-1;;;;;;8341:57:0;;;:20;;;;;;;;;;:57;8418:184;;;;;;;;;-1:-1:-1;;;;;8418:184:0;;;;;;;-1:-1:-1;8418:184:0;;;;8573:17;8418:184;;;8409:3;8413:1;8409:6;;;;;;-1:-1:-1;;;8409:6:0;;;;;;;;;;;;;;;;;;:193;8633:15;;;8646:1;8633:15;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8633:15:0;8613:35;;8682:34;;;8659:17;8677:1;8659:20;;;;;;-1:-1:-1;;;8659:20:0;;;;;;;;;-1:-1:-1;;;;;;8659:57:0;;;:20;;;;;;;;;;;:57;8727:20;;-1:-1:-1;;;8750:22:0;8727:17;;8745:1;;8727:20;;;;-1:-1:-1;;;8727:20:0;;;;;;;;;-1:-1:-1;;;;;;8727:45:0;;;:20;;;;;;;;;;:45;8792:131;;;;;;;;;-1:-1:-1;;;;;8792:131:0;;;;;;;-1:-1:-1;8792:131:0;;;;8904:17;8792:131;;;8783:3;8787:1;8783:6;;;;;;-1:-1:-1;;;8783:6:0;;;;;;;;;;;;;;:140;;;;8934:31;8945:3;8958:1;8934:31;;;;;;;;;;;;:10;:31::i;:::-;7496:1477;;;;;:::o;6503:202::-;5411:45;;6653:::o;9029:1086::-;9190:18;9185:817;9223:11;:18;9210:10;:31;9185:817;;;9272:33;9308:11;9320:10;9308:23;;;;;;-1:-1:-1;;;9308:23:0;;;;;;;;;;;;;;;:30;;;9272:66;;9367:30;9357:40;;;;;;-1:-1:-1;;;9357:40:0;;;;;;;;;:6;:40;;;;;;-1:-1:-1;;;9357:40:0;;;;;;;;;;9353:638;;;9418:93;9431:11;9443:10;9431:23;;;;;;-1:-1:-1;;;9431:23:0;;;;;;;;;;;;;;;:36;;;9469:11;9481:10;9469:23;;;;;;-1:-1:-1;;;9469:23:0;;;;;;;;;;;;;;;:41;;;9418:12;:93::i;:::-;9353:638;;;9547:34;9537:6;:44;;;;;;-1:-1:-1;;;9537:44:0;;;;;;;;;;9533:458;;;9602:97;9619:11;9631:10;9619:23;;;;;;-1:-1:-1;;;9619:23:0;;;;;;;;;;;;;;;:36;;;9657:11;9669:10;9657:23;;;;;;-1:-1:-1;;;9657:23:0;;;;;;;;;;;;;;;:41;;;9602:16;:97::i;9533:458::-;9735:33;9725:6;:43;;;;;;-1:-1:-1;;;9725:43:0;;;;;;;;;;9721:270;;;9789:96;9805:11;9817:10;9805:23;;;;;;-1:-1:-1;;;9805:23:0;;;;;;;;;;;;;;;:36;;;9843:11;9855:10;9843:23;;;;;;-1:-1:-1;;;9843:23:0;;;;;;;;;;;;;;;:41;;;9789:15;:96::i;9721:270::-;9926:49;;-1:-1:-1;;;9926:49:0;;;;;;;:::i;9721:270::-;-1:-1:-1;9243:12:0;;;;:::i;:::-;;;;9185:817;;;;10017:41;10028:11;10041:5;10048:9;10017:41;;;;;;;;:::i;:::-;;;;;;;;10069:38;10090:5;10097:9;10069:20;:38::i;:::-;9029:1086;;;:::o;10123:1572::-;10260:1;10232:18;:25;:29;10224:85;;;;-1:-1:-1;;;10224:85:0;;;;;;;:::i;:::-;10320:25;10348:16;:14;:16::i;:::-;10320:44;-1:-1:-1;;;;;;10461:27:0;;10453:84;;;;-1:-1:-1;;;10453:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10581:40:0;;10548:23;10581:40;;;:25;;;:40;;;;;:65;10717:21;;;10713:294;;10755:77;10778:13;10755:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;10918:17;;;:24;;-1:-1:-1;;;;;10847:40:0;;;;;;:25;;;;:40;;;;;;;:61;;:96;;-1:-1:-1;;10847:96:0;;;;;;;;;;;;10958:37;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10958:37:0;;;;;;10713:294;11022:21;11017:671;11061:18;:25;11045:13;:41;11017:671;;;11120:15;11138:18;11157:13;11138:33;;;;;;-1:-1:-1;;;11138:33:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11212:39:0;;11186:23;11212:39;;;;;;;;;;;:52;11138:33;;-1:-1:-1;;;;;;11212:52:0;11287:29;;11279:95;;;;-1:-1:-1;;;11279:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11389:40:0;;;;;;:25;;;;:40;;;;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11477:39:0;;;;;;;;;:68;;-1:-1:-1;;;;;;11477:68:0;;;;-1:-1:-1;;;;11560:83:0;-1:-1:-1;;;11560:83:0;;;;;;;;11658:18;11560:83;11658:18;:::i;:::-;;;;11017:671;;11088:15;;;;;:::i;:::-;;;;11017:671;;11703:1589;11844:1;11816:18;:25;:29;11808:85;;;;-1:-1:-1;;;11808:85:0;;;;;;;:::i;:::-;11904:25;11932:16;:14;:16::i;:::-;11904:44;-1:-1:-1;;;;;;11967:27:0;;11959:84;;;;-1:-1:-1;;;11959:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12087:40:0;;12054:23;12087:40;;;:25;;;:40;;;;;:65;12223:21;;;12219:294;;12261:77;12284:13;12261:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;12424:17;;;:24;;-1:-1:-1;;;;;12353:40:0;;;;;;:25;;;;:40;;;;;;;:61;;:96;;-1:-1:-1;;12353:96:0;;;;;;;;;;;;12464:37;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12464:37:0;;;;;;12219:294;12528:21;12523:762;12567:18;:25;12551:13;:41;12523:762;;;12626:15;12644:18;12663:13;12644:33;;;;;;-1:-1:-1;;;12644:33:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12718:39:0;;12692:23;12718:39;;;;;;;;;;;:52;12644:33;;-1:-1:-1;;;;;;12718:52:0;;;;12793:32;;;;;12785:101;;;;-1:-1:-1;;;12785:101:0;;;;;;;:::i;:::-;12901:41;12916:15;12933:8;12901:14;:41::i;:::-;-1:-1:-1;;;;;;12986:39:0;;:29;:39;;;;;;;;;;;:83;;-1:-1:-1;;;;12986:83:0;-1:-1:-1;;;12986:83:0;;;;;;;-1:-1:-1;;;;;13084:40:0;;;;;-1:-1:-1;13084:25:0;;;:40;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;;12986:83;13084:73;;;;;;;;;;;;;;;;;;;;;13172:39;;;;;;;:68;;-1:-1:-1;;;;;;13172:68:0;;;;12986:83;13255:18;12986:83;13255:18;:::i;:::-;;;;12523:762;;12594:15;;;;;:::i;:::-;;;;12523:762;;13300:748;13440:1;13412:18;:25;:29;13404:85;;;;-1:-1:-1;;;13404:85:0;;;;;;;:::i;:::-;13500:25;13528:16;:14;:16::i;:::-;13500:44;-1:-1:-1;;;;;;13629:27:0;;;13621:94;;;;-1:-1:-1;;;13621:94:0;;;;;;;:::i;:::-;13731:21;13726:315;13770:18;:25;13754:13;:41;13726:315;;;13829:15;13847:18;13866:13;13847:33;;;;;;-1:-1:-1;;;13847:33:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13921:39:0;;13895:23;13921:39;;;;;;;;;;;:52;13847:33;;-1:-1:-1;;;;;;13921:52:0;13988:41;13921:52;13847:33;13988:14;:41::i;:::-;13726:315;;13797:15;;;;;:::i;:::-;;;;13726:315;;;;13300:748;;;:::o;16312:897::-;-1:-1:-1;;;;;16405:19:0;;16401:801;;16449:16;;:21;16441:94;;;;-1:-1:-1;;;16441:94:0;;;;;;;:::i;:::-;16401:801;;;16595:1;16576:9;:16;:20;16568:94;;;;-1:-1:-1;;;16568:94:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16681:22:0;;16698:4;16681:22;16677:136;;16724:73;16747:5;16724:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;16828:12;16842:18;16864:5;-1:-1:-1;;;;;16864:18:0;16883:9;16864:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16827:66:0;;-1:-1:-1;16827:66:0;-1:-1:-1;16912:16:0;16908:283;;16953:12;;:16;16949:227;;17052:5;17038:21;;-1:-1:-1;;;17038:21:0;;;;;;;;:::i;16949:227::-;17108:48;;-1:-1:-1;;;17108:48:0;;;;;;;:::i;16401:801::-;16312:897;;:::o;17217:268::-;17393:22;;17463:13;17444:17;17436:41;;;;-1:-1:-1;;;17436:41:0;;;;;;;;:::i;14056:2248::-;14141:25;14169:16;:14;:16::i;:::-;14141:44;-1:-1:-1;;;;;;14204:27:0;;14196:95;;;;-1:-1:-1;;;14196:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14388:30:0;;14413:4;14388:30;;14380:89;;;;-1:-1:-1;;;14380:89:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;14582:40:0;;14555:24;14582:40;;;;;;;;;;;:65;-1:-1:-1;;;;;14689:40:0;;;;14757:1;14689:25;;;:40;;;;;;:65;-1:-1:-1;;;14582:65:0;;;;;;14555:24;14689:69;;;:::i;:::-;14658:100;;14862:20;14842:16;:40;14838:391;;-1:-1:-1;;;;;14921:40:0;;14899:19;14921:40;;;:25;;;:40;;;;;:80;;14980:20;;14921:80;;;;-1:-1:-1;;;14921:80:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15016:40:0;;;;:25;;;:40;;;;;;;:76;;14921:80;;;;;;;;;;;;;;-1:-1:-1;14921:80:0;;15016:40;15075:16;;15016:76;;;;-1:-1:-1;;;15016:76:0;;;;;;;;;;;;;;;;;;;;;:91;;;:76;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15122:43:0;;;;;;;;;;;;:95;;-1:-1:-1;;;;15122:95:0;-1:-1:-1;;;15122:95:0;;;;;;;14838:391;-1:-1:-1;;;;;15276:40:0;;;;;;:25;;;:40;;;;;:64;;;;;-1:-1:-1;;;15276:64:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;15276:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15358:40:0;;;;;;;;;;15351:47;;-1:-1:-1;;;;;;15351:47:0;;;15496:25;15492:805;;15665:17;;;:24;15630:32;;15665:28;;15692:1;;15665:28;:::i;:::-;-1:-1:-1;;;;;15739:40:0;;15708:28;15739:40;;;:25;;;;:40;;;;;;:61;;15630:63;;-1:-1:-1;15739:61:0;;15819:48;;;15815:350;;15888:24;15915:2;:17;;15933:24;15915:43;;;;;;-1:-1:-1;;;15915:43:0;;;;;;;;;;;;;;;;;;;15977:17;;;:39;;-1:-1:-1;;;;;15915:43:0;;;;-1:-1:-1;15915:43:0;;15995:20;;15977:39;;;;-1:-1:-1;;;15977:39:0;;;;;;;;;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;15977:58:0;-1:-1:-1;;;;;15977:58:0;;;;;;16054:43;;;;;;-1:-1:-1;16054:25:0;;;:43;;;;;;:64;:95;;-1:-1:-1;;16054:95:0;;;;;;;15815:350;16179:2;:17;;:23;;;;;-1:-1:-1;;;16179:23:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16179:23:0;;;;;-1:-1:-1;;;;;;16179:23:0;;;;;;;;;-1:-1:-1;;;;;16224:40:0;;;;16179:23;16224:25;;;:40;;;;;;;:61;16217:68;;-1:-1:-1;;16217:68:0;;;-1:-1:-1;;14056:2248:0;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:106:1:-;-1:-1:-1;;;;;82:31:1;70:44;;60:60::o;125:259::-;;206:5;200:12;233:6;228:3;221:19;249:63;305:6;298:4;293:3;289:14;282:4;275:5;271:16;249:63;:::i;:::-;366:2;345:15;-1:-1:-1;;341:29:1;332:39;;;;373:4;328:50;;176:208;-1:-1:-1;;176:208:1:o;389:274::-;;556:6;550:13;572:53;618:6;613:3;606:4;598:6;594:17;572:53;:::i;:::-;641:16;;;;;526:137;-1:-1:-1;;526:137:1:o;668:2103::-;961:2;1013:21;;;1083:13;;986:18;;;1105:22;;;668:2103;;961:2;1146:3;;1165:18;;;;1202:4;1248:15;;;1233:31;;1229:40;;1292:15;;;668:2103;1338:1258;1352:6;1349:1;1346:13;1338:1258;;;1417:22;;;-1:-1:-1;;1413:37:1;1401:50;;1474:13;;1561:9;;-1:-1:-1;;;;;1557:35:1;1542:51;;1632:11;;;1626:18;1514:15;;;;1684:1;1667:19;;1657:2;;-1:-1:-1;;;1718:34:1;;1779:4;1776:1;1769:15;1814:4;1725;1801:18;1657:2;1853:15;;;1846:37;1906:4;1951:11;;;1945:18;1983:15;;;1976:27;;;2064:21;;2098:24;;;;2188:23;;;;2235:4;;2144:15;;;;2252:236;2268:8;2263:3;2260:17;2252:236;;;2349:15;;-1:-1:-1;;;;;;2345:42:1;2331:57;;2457:17;;;;2296:1;2287:11;;;;;2414:14;;;;2252:236;;;-1:-1:-1;2574:12:1;;;;2511:5;-1:-1:-1;;;2539:15:1;;;;1374:1;1367:9;1338:1258;;;1342:3;;2605:48;2649:2;2638:9;2634:18;2626:6;2605:48;:::i;:::-;2703:9;2695:6;2691:22;2684:4;2673:9;2669:20;2662:52;2731:34;2758:6;2750;2731:34;:::i;:::-;2723:42;941:1830;-1:-1:-1;;;;;;;;;;;941:1830:1:o;2776:221::-;;2925:2;2914:9;2907:21;2945:46;2987:2;2976:9;2972:18;2964:6;2945:46;:::i;:::-;2937:54;2897:100;-1:-1:-1;;;2897:100:1:o;3002:424::-;3204:2;3186:21;;;3243:2;3223:18;;;3216:30;3282:34;3277:2;3262:18;;3255:62;3353:30;3348:2;3333:18;;3326:58;3416:3;3401:19;;3176:250::o;3431:402::-;3633:2;3615:21;;;3672:2;3652:18;;;3645:30;3711:34;3706:2;3691:18;;3684:62;-1:-1:-1;;;3777:2:1;3762:18;;3755:36;3823:3;3808:19;;3605:228::o;3838:407::-;4040:2;4022:21;;;4079:2;4059:18;;;4052:30;4118:34;4113:2;4098:18;;4091:62;-1:-1:-1;;;4184:2:1;4169:18;;4162:41;4235:3;4220:19;;4012:233::o;4250:419::-;4452:2;4434:21;;;4491:2;4471:18;;;4464:30;4530:34;4525:2;4510:18;;4503:62;4601:25;4596:2;4581:18;;4574:53;4659:3;4644:19;;4424:245::o;4674:403::-;4876:2;4858:21;;;4915:2;4895:18;;;4888:30;4954:34;4949:2;4934:18;;4927:62;-1:-1:-1;;;5020:2:1;5005:18;;4998:37;5067:3;5052:19;;4848:229::o;5082:408::-;5284:2;5266:21;;;5323:2;5303:18;;;5296:30;5362:34;5357:2;5342:18;;5335:62;-1:-1:-1;;;5428:2:1;5413:18;;5406:42;5480:3;5465:19;;5256:234::o;5495:356::-;5697:2;5679:21;;;5716:18;;;5709:30;5775:34;5770:2;5755:18;;5748:62;5842:2;5827:18;;5669:182::o;5856:425::-;6058:2;6040:21;;;6097:2;6077:18;;;6070:30;6136:34;6131:2;6116:18;;6109:62;6207:31;6202:2;6187:18;;6180:59;6271:3;6256:19;;6030:251::o;6286:410::-;6488:2;6470:21;;;6527:2;6507:18;;;6500:30;6566:34;6561:2;6546:18;;6539:62;-1:-1:-1;;;6632:2:1;6617:18;;6610:44;6686:3;6671:19;;6460:236::o;6701:417::-;6903:2;6885:21;;;6942:2;6922:18;;;6915:30;6981:34;6976:2;6961:18;;6954:62;-1:-1:-1;;;7047:2:1;7032:18;;7025:51;7108:3;7093:19;;6875:243::o;7123:420::-;7325:2;7307:21;;;7364:2;7344:18;;;7337:30;7403:34;7398:2;7383:18;;7376:62;7474:26;7469:2;7454:18;;7447:54;7533:3;7518:19;;7297:246::o;7548:418::-;7750:2;7732:21;;;7789:2;7769:18;;;7762:30;7828:34;7823:2;7808:18;;7801:62;-1:-1:-1;;;7894:2:1;7879:18;;7872:52;7956:3;7941:19;;7722:244::o;7971:125::-;;8039:1;8036;8033:8;8030:2;;;8044:18;;:::i;:::-;-1:-1:-1;8081:9:1;;8020:76::o;8101:258::-;8173:1;8183:113;8197:6;8194:1;8191:13;8183:113;;;8273:11;;;8267:18;8254:11;;;8247:39;8219:2;8212:10;8183:113;;;8314:6;8311:1;8308:13;8305:2;;;-1:-1:-1;;8349:1:1;8331:16;;8324:27;8154:205::o;8364:197::-;;8430:6;8471:2;8464:5;8460:14;8498:2;8489:7;8486:15;8483:2;;;8504:18;;:::i;:::-;8553:1;8540:15;;8410:151;-1:-1:-1;;;8410:151:1:o;8566:135::-;;-1:-1:-1;;8626:17:1;;8623:2;;;8646:18;;:::i;:::-;-1:-1:-1;8693:1:1;8682:13;;8613:88::o;8706:127::-;8767:10;8762:3;8758:20;8755:1;8748:31;8798:4;8795:1;8788:15;8822:4;8819:1;8812:15

Swarm Source

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