Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 14942225 | 767 days ago | IN | Create: DiamondCutFacet | 0 ETH | 0.04858961 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
DiamondCutFacet
Compiler Version
v0.8.6+commit.11564f7e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 /******************************************************************************/ import { IDiamondCut } from "../interfaces/IDiamondCut.sol"; import { LibDiamond } from "../libraries/LibDiamond.sol"; 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); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 /******************************************************************************/ interface IDiamondCut { enum FacetCutAction {Add, Replace, Remove} // Add=0, Replace=1, Remove=2 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 /******************************************************************************/ import { IDiamondCut } from "../interfaces/IDiamondCut.sol"; library LibDiamond { bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); struct FacetAddressAndPosition { address facetAddress; uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array } struct FacetFunctionSelectors { bytes4[] functionSelectors; uint256 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(msg.sender == diamondStorage().contractOwner, "LibDiamond: Must be contract owner"); } event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata); // 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(); require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { addFacet(ds, _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"); addFunction(ds, selector, selectorPosition, _facetAddress); 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)"); uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { addFacet(ds, _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(ds, oldFacetAddress, selector); addFunction(ds, selector, selectorPosition, _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(ds, oldFacetAddress, selector); } } function addFacet(DiamondStorage storage ds, address _facetAddress) internal { enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code"); ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length; ds.facetAddresses.push(_facetAddress); } function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal { ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition; ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector); ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress; } function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { 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 = uint96(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 = 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) { 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); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCut","type":"event"},{"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":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"diamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061272f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631f931c1c14610030575b600080fd5b61004a60048036038101906100459190611821565b61004c565b005b6100546100b6565b6100af858590610064919061207f565b8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610151565b5050505050565b6100be610383565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461014f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014690611d46565b60405180910390fd5b565b60005b835181101561033857600084828151811061017257610171612215565b5b602002602001015160200151905060006002811115610194576101936121b7565b5b8160028111156101a7576101a66121b7565b5b14156101f8576101f38583815181106101c3576101c2612215565b5b6020026020010151600001518684815181106101e2576101e1612215565b5b6020026020010151604001516103b0565b610324565b6001600281111561020c5761020b6121b7565b5b81600281111561021f5761021e6121b7565b5b14156102705761026b85838151811061023b5761023a612215565b5b60200260200101516000015186848151811061025a57610259612215565b5b602002602001015160400151610629565b610323565b600280811115610283576102826121b7565b5b816002811115610296576102956121b7565b5b14156102e7576102e28583815181106102b2576102b1612215565b5b6020026020010151600001518684815181106102d1576102d0612215565b5b6020026020010151604001516108ad565b610322565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031990611da6565b60405180910390fd5b5b5b5080806103309061210a565b915050610154565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161036c93929190611c9f565b60405180910390a161037e8282610a38565b505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b60008151116103f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d66565b60405180910390fd5b60006103fe610383565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046790611dc6565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff1614156104de576104dd8285610c4b565b5b60005b83518110156106225760008482815181106104ff576104fe612215565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ea90611e26565b60405180910390fd5b6105ff8583868a610d26565b838061060a90612153565b9450505050808061061a9061210a565b9150506104e1565b5050505050565b600081511161066d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066490611d66565b60405180910390fd5b6000610677610383565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e090611dc6565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff161415610757576107568285610c4b565b5b60005b83518110156108a657600084828151811061077857610777612215565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561086c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086390611e46565b60405180910390fd5b610877858284610ed3565b6108838583868a610d26565b838061088e90612153565b9450505050808061089e9061210a565b91505061075a565b5050505050565b60008151116108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e890611d66565b60405180910390fd5b60006108fb610383565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390611e66565b60405180910390fd5b60005b8251811015610a3257600083828151811061098d5761098c612215565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610a1d848284610ed3565b50508080610a2a9061210a565b91505061096f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ab6576000815114610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa890611d06565b60405180910390fd5b610c47565b6000815111610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190611de6565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610b5057610b4f826040518060600160405280602881526020016126ae60289139611538565b5b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610b789190611c88565b600060405180830381855af49150503d8060008114610bb3576040519150601f19603f3d011682016040523d82523d6000602084013e610bb8565b606091505b509150915081610c4457600081511115610c0957806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c009190611ce4565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b90611d26565b60405180910390fd5b50505b5050565b610c6d816040518060600160405280602481526020016126d660249139611538565b81600201805490508260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b81846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508360010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018390806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555080846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90611d86565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa990611e06565b60405180910390fd5b6000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050600060018560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805490506110899190611fb8565b905080821461121d5760008560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106110ea576110e9612215565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001848154811061116657611165612215565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550505b8460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805480611271576112706121e6565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff0219169055505060008114156115315760006001866002018054905061135c9190611fb8565b905060008660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905081811461149d5760008760020183815481106113c6576113c5612215565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508088600201838154811061140a57611409612215565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818860010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505b866002018054806114b1576114b06121e6565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000905550505b5050505050565b6000823b9050600081118290611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b9190611ce4565b60405180910390fd5b50505050565b600061159d61159884611eab565b611e86565b905080838252602082019050828560208602820111156115c0576115bf612287565b5b60005b858110156115f057816115d68882611721565b8452602084019350602083019250506001810190506115c3565b5050509392505050565b600061160d61160884611ed7565b611e86565b905080838252602082019050828560208602820111156116305761162f612287565b5b60005b8581101561167e57813567ffffffffffffffff81111561165657611655612278565b5b80860161166389826117a1565b85526020850194506020840193505050600181019050611633565b5050509392505050565b6000813590506116978161266f565b92915050565b600082601f8301126116b2576116b1612278565b5b81356116c284826020860161158a565b91505092915050565b60008083601f8401126116e1576116e0612278565b5b8235905067ffffffffffffffff8111156116fe576116fd612273565b5b60208301915083602082028301111561171a57611719612287565b5b9250929050565b60008135905061173081612686565b92915050565b60008083601f84011261174c5761174b612278565b5b8235905067ffffffffffffffff81111561176957611768612273565b5b60208301915083600182028301111561178557611784612287565b5b9250929050565b60008135905061179b8161269d565b92915050565b6000606082840312156117b7576117b661227d565b5b6117c16060611e86565b905060006117d184828501611688565b60008301525060206117e58482850161178c565b602083015250604082013567ffffffffffffffff81111561180957611808612282565b5b6118158482850161169d565b60408301525092915050565b60008060008060006060868803121561183d5761183c612291565b5b600086013567ffffffffffffffff81111561185b5761185a61228c565b5b611867888289016116cb565b9550955050602061187a88828901611688565b935050604086013567ffffffffffffffff81111561189b5761189a61228c565b5b6118a788828901611736565b92509250509295509295909350565b60006118c283836119d3565b60208301905092915050565b60006118da8383611c38565b905092915050565b6118eb81611fec565b82525050565b6118fa81611fec565b82525050565b600061190b82611f23565b6119158185611f69565b935061192083611f03565b8060005b8381101561195157815161193888826118b6565b975061194383611f4f565b925050600181019050611924565b5085935050505092915050565b600061196982611f2e565b6119738185611f7a565b93508360208202850161198585611f13565b8060005b858110156119c157848403895281516119a285826118ce565b94506119ad83611f5c565b925060208a01995050600181019050611989565b50829750879550505050505092915050565b6119dc81611ffe565b82525050565b60006119ed82611f39565b6119f78185611f8b565b9350611a078185602086016120a6565b611a1081612296565b840191505092915050565b6000611a2682611f39565b611a308185611f9c565b9350611a408185602086016120a6565b80840191505092915050565b611a5581612094565b82525050565b6000611a6682611f44565b611a708185611fa7565b9350611a808185602086016120a6565b611a8981612296565b840191505092915050565b6000611aa1603c83611fa7565b9150611aac826122a7565b604082019050919050565b6000611ac4602683611fa7565b9150611acf826122f6565b604082019050919050565b6000611ae7602283611fa7565b9150611af282612345565b604082019050919050565b6000611b0a602b83611fa7565b9150611b1582612394565b604082019050919050565b6000611b2d603783611fa7565b9150611b38826123e3565b604082019050919050565b6000611b50602783611fa7565b9150611b5b82612432565b604082019050919050565b6000611b73602c83611fa7565b9150611b7e82612481565b604082019050919050565b6000611b96603d83611fa7565b9150611ba1826124d0565b604082019050919050565b6000611bb9602e83611fa7565b9150611bc48261251f565b604082019050919050565b6000611bdc603583611fa7565b9150611be78261256e565b604082019050919050565b6000611bff603883611fa7565b9150611c0a826125bd565b604082019050919050565b6000611c22603683611fa7565b9150611c2d8261260c565b604082019050919050565b6000606083016000830151611c5060008601826118e2565b506020830151611c636020860182611a4c565b5060408301518482036040860152611c7b8282611900565b9150508091505092915050565b6000611c948284611a1b565b915081905092915050565b60006060820190508181036000830152611cb9818661195e565b9050611cc860208301856118f1565b8181036040830152611cda81846119e2565b9050949350505050565b60006020820190508181036000830152611cfe8184611a5b565b905092915050565b60006020820190508181036000830152611d1f81611a94565b9050919050565b60006020820190508181036000830152611d3f81611ab7565b9050919050565b60006020820190508181036000830152611d5f81611ada565b9050919050565b60006020820190508181036000830152611d7f81611afd565b9050919050565b60006020820190508181036000830152611d9f81611b20565b9050919050565b60006020820190508181036000830152611dbf81611b43565b9050919050565b60006020820190508181036000830152611ddf81611b66565b9050919050565b60006020820190508181036000830152611dff81611b89565b9050919050565b60006020820190508181036000830152611e1f81611bac565b9050919050565b60006020820190508181036000830152611e3f81611bcf565b9050919050565b60006020820190508181036000830152611e5f81611bf2565b9050919050565b60006020820190508181036000830152611e7f81611c15565b9050919050565b6000611e90611ea1565b9050611e9c82826120d9565b919050565b6000604051905090565b600067ffffffffffffffff821115611ec657611ec5612244565b5b602082029050602081019050919050565b600067ffffffffffffffff821115611ef257611ef1612244565b5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611fc38261205d565b9150611fce8361205d565b925082821015611fe157611fe0612188565b5b828203905092915050565b6000611ff78261203d565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60008190506120388261265b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b600061208c3684846115fa565b905092915050565b600061209f8261202a565b9050919050565b60005b838110156120c45780820151818401526020810190506120a9565b838111156120d3576000848401525b50505050565b6120e282612296565b810181811067ffffffffffffffff8211171561210157612100612244565b5b80604052505050565b60006121158261205d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561214857612147612188565b5b600182019050919050565b600061215e82612067565b91506bffffffffffffffffffffffff82141561217d5761217c612188565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860008201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000602082015250565b7f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560008201527f7665727465640000000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660008201527f6163657420746f20637574000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360008201527f74696f6e207468617420646f65736e2774206578697374000000000000000000602082015250565b7f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560008201527f74416374696f6e00000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260008201527f6520616464726573732830290000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460008201527f7920627574205f696e6974206973206e6f742061646472657373283029000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560008201527f7461626c652066756e6374696f6e000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60008201527f6e207468617420616c7265616479206578697374730000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60008201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000602082015250565b7f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260008201527f657373206d757374206265206164647265737328302900000000000000000000602082015250565b6003811061266c5761266b6121b7565b5b50565b61267881611fec565b811461268357600080fd5b50565b61268f81611ffe565b811461269a57600080fd5b50565b600381106126aa57600080fd5b5056fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220698bc1bc6d6e8e8f1c47471ff1778d725e72647035d3797876f0625b5625d3a764736f6c63430008060033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80631f931c1c14610030575b600080fd5b61004a60048036038101906100459190611821565b61004c565b005b6100546100b6565b6100af858590610064919061207f565b8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610151565b5050505050565b6100be610383565b60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461014f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014690611d46565b60405180910390fd5b565b60005b835181101561033857600084828151811061017257610171612215565b5b602002602001015160200151905060006002811115610194576101936121b7565b5b8160028111156101a7576101a66121b7565b5b14156101f8576101f38583815181106101c3576101c2612215565b5b6020026020010151600001518684815181106101e2576101e1612215565b5b6020026020010151604001516103b0565b610324565b6001600281111561020c5761020b6121b7565b5b81600281111561021f5761021e6121b7565b5b14156102705761026b85838151811061023b5761023a612215565b5b60200260200101516000015186848151811061025a57610259612215565b5b602002602001015160400151610629565b610323565b600280811115610283576102826121b7565b5b816002811115610296576102956121b7565b5b14156102e7576102e28583815181106102b2576102b1612215565b5b6020026020010151600001518684815181106102d1576102d0612215565b5b6020026020010151604001516108ad565b610322565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031990611da6565b60405180910390fd5b5b5b5080806103309061210a565b915050610154565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161036c93929190611c9f565b60405180910390a161037e8282610a38565b505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b60008151116103f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb90611d66565b60405180910390fd5b60006103fe610383565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046790611dc6565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff1614156104de576104dd8285610c4b565b5b60005b83518110156106225760008482815181106104ff576104fe612215565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ea90611e26565b60405180910390fd5b6105ff8583868a610d26565b838061060a90612153565b9450505050808061061a9061210a565b9150506104e1565b5050505050565b600081511161066d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066490611d66565b60405180910390fd5b6000610677610383565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e090611dc6565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff161415610757576107568285610c4b565b5b60005b83518110156108a657600084828151811061077857610777612215565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561086c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086390611e46565b60405180910390fd5b610877858284610ed3565b6108838583868a610d26565b838061088e90612153565b9450505050808061089e9061210a565b91505061075a565b5050505050565b60008151116108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e890611d66565b60405180910390fd5b60006108fb610383565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390611e66565b60405180910390fd5b60005b8251811015610a3257600083828151811061098d5761098c612215565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610a1d848284610ed3565b50508080610a2a9061210a565b91505061096f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ab6576000815114610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa890611d06565b60405180910390fd5b610c47565b6000815111610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190611de6565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610b5057610b4f826040518060600160405280602881526020016126ae60289139611538565b5b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610b789190611c88565b600060405180830381855af49150503d8060008114610bb3576040519150601f19603f3d011682016040523d82523d6000602084013e610bb8565b606091505b509150915081610c4457600081511115610c0957806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c009190611ce4565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b90611d26565b60405180910390fd5b50505b5050565b610c6d816040518060600160405280602481526020016126d660249139611538565b81600201805490508260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b81846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508360010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018390806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555080846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90611d86565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa990611e06565b60405180910390fd5b6000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050600060018560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805490506110899190611fb8565b905080821461121d5760008560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106110ea576110e9612215565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001848154811061116657611165612215565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550505b8460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805480611271576112706121e6565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff0219169055505060008114156115315760006001866002018054905061135c9190611fb8565b905060008660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905081811461149d5760008760020183815481106113c6576113c5612215565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508088600201838154811061140a57611409612215565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818860010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505b866002018054806114b1576114b06121e6565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000905550505b5050505050565b6000823b9050600081118290611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b9190611ce4565b60405180910390fd5b50505050565b600061159d61159884611eab565b611e86565b905080838252602082019050828560208602820111156115c0576115bf612287565b5b60005b858110156115f057816115d68882611721565b8452602084019350602083019250506001810190506115c3565b5050509392505050565b600061160d61160884611ed7565b611e86565b905080838252602082019050828560208602820111156116305761162f612287565b5b60005b8581101561167e57813567ffffffffffffffff81111561165657611655612278565b5b80860161166389826117a1565b85526020850194506020840193505050600181019050611633565b5050509392505050565b6000813590506116978161266f565b92915050565b600082601f8301126116b2576116b1612278565b5b81356116c284826020860161158a565b91505092915050565b60008083601f8401126116e1576116e0612278565b5b8235905067ffffffffffffffff8111156116fe576116fd612273565b5b60208301915083602082028301111561171a57611719612287565b5b9250929050565b60008135905061173081612686565b92915050565b60008083601f84011261174c5761174b612278565b5b8235905067ffffffffffffffff81111561176957611768612273565b5b60208301915083600182028301111561178557611784612287565b5b9250929050565b60008135905061179b8161269d565b92915050565b6000606082840312156117b7576117b661227d565b5b6117c16060611e86565b905060006117d184828501611688565b60008301525060206117e58482850161178c565b602083015250604082013567ffffffffffffffff81111561180957611808612282565b5b6118158482850161169d565b60408301525092915050565b60008060008060006060868803121561183d5761183c612291565b5b600086013567ffffffffffffffff81111561185b5761185a61228c565b5b611867888289016116cb565b9550955050602061187a88828901611688565b935050604086013567ffffffffffffffff81111561189b5761189a61228c565b5b6118a788828901611736565b92509250509295509295909350565b60006118c283836119d3565b60208301905092915050565b60006118da8383611c38565b905092915050565b6118eb81611fec565b82525050565b6118fa81611fec565b82525050565b600061190b82611f23565b6119158185611f69565b935061192083611f03565b8060005b8381101561195157815161193888826118b6565b975061194383611f4f565b925050600181019050611924565b5085935050505092915050565b600061196982611f2e565b6119738185611f7a565b93508360208202850161198585611f13565b8060005b858110156119c157848403895281516119a285826118ce565b94506119ad83611f5c565b925060208a01995050600181019050611989565b50829750879550505050505092915050565b6119dc81611ffe565b82525050565b60006119ed82611f39565b6119f78185611f8b565b9350611a078185602086016120a6565b611a1081612296565b840191505092915050565b6000611a2682611f39565b611a308185611f9c565b9350611a408185602086016120a6565b80840191505092915050565b611a5581612094565b82525050565b6000611a6682611f44565b611a708185611fa7565b9350611a808185602086016120a6565b611a8981612296565b840191505092915050565b6000611aa1603c83611fa7565b9150611aac826122a7565b604082019050919050565b6000611ac4602683611fa7565b9150611acf826122f6565b604082019050919050565b6000611ae7602283611fa7565b9150611af282612345565b604082019050919050565b6000611b0a602b83611fa7565b9150611b1582612394565b604082019050919050565b6000611b2d603783611fa7565b9150611b38826123e3565b604082019050919050565b6000611b50602783611fa7565b9150611b5b82612432565b604082019050919050565b6000611b73602c83611fa7565b9150611b7e82612481565b604082019050919050565b6000611b96603d83611fa7565b9150611ba1826124d0565b604082019050919050565b6000611bb9602e83611fa7565b9150611bc48261251f565b604082019050919050565b6000611bdc603583611fa7565b9150611be78261256e565b604082019050919050565b6000611bff603883611fa7565b9150611c0a826125bd565b604082019050919050565b6000611c22603683611fa7565b9150611c2d8261260c565b604082019050919050565b6000606083016000830151611c5060008601826118e2565b506020830151611c636020860182611a4c565b5060408301518482036040860152611c7b8282611900565b9150508091505092915050565b6000611c948284611a1b565b915081905092915050565b60006060820190508181036000830152611cb9818661195e565b9050611cc860208301856118f1565b8181036040830152611cda81846119e2565b9050949350505050565b60006020820190508181036000830152611cfe8184611a5b565b905092915050565b60006020820190508181036000830152611d1f81611a94565b9050919050565b60006020820190508181036000830152611d3f81611ab7565b9050919050565b60006020820190508181036000830152611d5f81611ada565b9050919050565b60006020820190508181036000830152611d7f81611afd565b9050919050565b60006020820190508181036000830152611d9f81611b20565b9050919050565b60006020820190508181036000830152611dbf81611b43565b9050919050565b60006020820190508181036000830152611ddf81611b66565b9050919050565b60006020820190508181036000830152611dff81611b89565b9050919050565b60006020820190508181036000830152611e1f81611bac565b9050919050565b60006020820190508181036000830152611e3f81611bcf565b9050919050565b60006020820190508181036000830152611e5f81611bf2565b9050919050565b60006020820190508181036000830152611e7f81611c15565b9050919050565b6000611e90611ea1565b9050611e9c82826120d9565b919050565b6000604051905090565b600067ffffffffffffffff821115611ec657611ec5612244565b5b602082029050602081019050919050565b600067ffffffffffffffff821115611ef257611ef1612244565b5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611fc38261205d565b9150611fce8361205d565b925082821015611fe157611fe0612188565b5b828203905092915050565b6000611ff78261203d565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60008190506120388261265b565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b600061208c3684846115fa565b905092915050565b600061209f8261202a565b9050919050565b60005b838110156120c45780820151818401526020810190506120a9565b838111156120d3576000848401525b50505050565b6120e282612296565b810181811067ffffffffffffffff8211171561210157612100612244565b5b80604052505050565b60006121158261205d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561214857612147612188565b5b600182019050919050565b600061215e82612067565b91506bffffffffffffffffffffffff82141561217d5761217c612188565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860008201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000602082015250565b7f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560008201527f7665727465640000000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660008201527f6163657420746f20637574000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360008201527f74696f6e207468617420646f65736e2774206578697374000000000000000000602082015250565b7f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560008201527f74416374696f6e00000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260008201527f6520616464726573732830290000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460008201527f7920627574205f696e6974206973206e6f742061646472657373283029000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560008201527f7461626c652066756e6374696f6e000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60008201527f6e207468617420616c7265616479206578697374730000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60008201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000602082015250565b7f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260008201527f657373206d757374206265206164647265737328302900000000000000000000602082015250565b6003811061266c5761266b6121b7565b5b50565b61267881611fec565b811461268357600080fd5b50565b61268f81611ffe565b811461269a57600080fd5b50565b600381106126aa57600080fd5b5056fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220698bc1bc6d6e8e8f1c47471ff1778d725e72647035d3797876f0625b5625d3a764736f6c63430008060033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.