Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
160537 | 16 days ago | Contract Creation | 0 ETH |
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 Source Code Verified (Exact Match)
Contract Name:
DiamondCutFacet
Compiler Version
v0.8.26+commit.8a97fa7a
ZkSolc Version
v1.5.3
Optimization Enabled:
Yes with Mode 3
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; import { IDiamondCut } from "../Interfaces/IDiamondCut.sol"; import { LibDiamond } from "../Libraries/LibDiamond.sol"; /// @title Diamond Cut Facet /// @author LI.FI (https://li.fi) /// @notice Core EIP-2535 Facet for upgrading Diamond Proxies. /// @custom:version 1.0.0 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( LibDiamond.FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata ) external { LibDiamond.enforceIsContractOwner(); LibDiamond.diamondCut(_diamondCut, _init, _calldata); } }
// SPDX-License-Identifier: MIT /// @custom:version 2.0.0 pragma solidity ^0.8.17; import { LibDiamond } from "../Libraries/LibDiamond.sol"; interface 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( LibDiamond.FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata ) external; event DiamondCut( LibDiamond.FacetCut[] _diamondCut, address _init, bytes _calldata ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; // import { IDiamondCut } from "../Interfaces/LibDiamond.sol"; import { LibDiamond } from "../Libraries/LibDiamond.sol"; import { LibUtil } from "../Libraries/LibUtil.sol"; import { OnlyContractOwner } from "../Errors/GenericErrors.sol"; /// Implementation of EIP-2535 Diamond Standard /// https://eips.ethereum.org/EIPS/eip-2535 library LibDiamond { bytes32 internal constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); // Diamond specific errors error IncorrectFacetCutAction(); error NoSelectorsInFace(); error FunctionAlreadyExists(); error FacetAddressIsZero(); error FacetAddressIsNotZero(); error FacetContainsNoCode(); error FunctionDoesNotExist(); error FunctionIsImmutable(); error InitZeroButCalldataNotEmpty(); error CalldataEmptyButInitNotZero(); error InitReverted(); // ---------------- 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; } enum FacetCutAction { Add, Replace, Remove } // Add=0, Replace=1, Remove=2 struct FacetCut { address facetAddress; FacetCutAction action; bytes4[] functionSelectors; } function diamondStorage() internal pure returns (DiamondStorage storage ds) { bytes32 position = DIAMOND_STORAGE_POSITION; // solhint-disable-next-line no-inline-assembly assembly { ds.slot := position } } event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata); 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 { if (msg.sender != diamondStorage().contractOwner) revert OnlyContractOwner(); } // Internal function version of diamondCut function diamondCut( FacetCut[] memory _diamondCut, address _init, bytes memory _calldata ) internal { for (uint256 facetIndex; facetIndex < _diamondCut.length; ) { LibDiamond.FacetCutAction action = _diamondCut[facetIndex].action; if (action == LibDiamond.FacetCutAction.Add) { addFunctions( _diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors ); } else if (action == LibDiamond.FacetCutAction.Replace) { replaceFunctions( _diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors ); } else if (action == LibDiamond.FacetCutAction.Remove) { removeFunctions( _diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors ); } else { revert IncorrectFacetCutAction(); } unchecked { ++facetIndex; } } emit DiamondCut(_diamondCut, _init, _calldata); initializeDiamondCut(_init, _calldata); } function addFunctions( address _facetAddress, bytes4[] memory _functionSelectors ) internal { if (_functionSelectors.length == 0) { revert NoSelectorsInFace(); } DiamondStorage storage ds = diamondStorage(); if (LibUtil.isZeroAddress(_facetAddress)) { revert FacetAddressIsZero(); } 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; ) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds .selectorToFacetAndPosition[selector] .facetAddress; if (!LibUtil.isZeroAddress(oldFacetAddress)) { revert FunctionAlreadyExists(); } addFunction(ds, selector, selectorPosition, _facetAddress); unchecked { ++selectorPosition; ++selectorIndex; } } } function replaceFunctions( address _facetAddress, bytes4[] memory _functionSelectors ) internal { if (_functionSelectors.length == 0) { revert NoSelectorsInFace(); } DiamondStorage storage ds = diamondStorage(); if (LibUtil.isZeroAddress(_facetAddress)) { revert FacetAddressIsZero(); } 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; ) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds .selectorToFacetAndPosition[selector] .facetAddress; if (oldFacetAddress == _facetAddress) { revert FunctionAlreadyExists(); } removeFunction(ds, oldFacetAddress, selector); addFunction(ds, selector, selectorPosition, _facetAddress); unchecked { ++selectorPosition; ++selectorIndex; } } } function removeFunctions( address _facetAddress, bytes4[] memory _functionSelectors ) internal { if (_functionSelectors.length == 0) { revert NoSelectorsInFace(); } DiamondStorage storage ds = diamondStorage(); // if function does not exist then do nothing and return if (!LibUtil.isZeroAddress(_facetAddress)) { revert FacetAddressIsNotZero(); } for ( uint256 selectorIndex; selectorIndex < _functionSelectors.length; ) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds .selectorToFacetAndPosition[selector] .facetAddress; removeFunction(ds, oldFacetAddress, selector); unchecked { ++selectorIndex; } } } function addFacet( DiamondStorage storage ds, address _facetAddress ) internal { enforceHasContractCode(_facetAddress); 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 { if (LibUtil.isZeroAddress(_facetAddress)) { revert FunctionDoesNotExist(); } // an immutable function is a function defined directly in a diamond if (_facetAddress == address(this)) { revert FunctionIsImmutable(); } // 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 (LibUtil.isZeroAddress(_init)) { if (_calldata.length != 0) { revert InitZeroButCalldataNotEmpty(); } } else { if (_calldata.length == 0) { revert CalldataEmptyButInitNotZero(); } if (_init != address(this)) { enforceHasContractCode(_init); } // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory error) = _init.delegatecall(_calldata); if (!success) { if (error.length > 0) { // bubble up the error revert(string(error)); } else { revert InitReverted(); } } } } function enforceHasContractCode(address _contract) internal view { uint256 contractSize; // solhint-disable-next-line no-inline-assembly assembly { contractSize := extcodesize(_contract) } if (contractSize == 0) { revert FacetContainsNoCode(); } } }
// SPDX-License-Identifier: MIT /// @custom:version 1.0.0 pragma solidity ^0.8.17; import "./LibBytes.sol"; library LibUtil { using LibBytes for bytes; function getRevertMsg( bytes memory _res ) internal pure returns (string memory) { // If the _res length is less than 68, then the transaction failed silently (without a revert message) if (_res.length < 68) return "Transaction reverted silently"; bytes memory revertData = _res.slice(4, _res.length - 4); // Remove the selector which is the first 4 bytes return abi.decode(revertData, (string)); // All that remains is the revert string } /// @notice Determines whether the given address is the zero address /// @param addr The address to verify /// @return Boolean indicating if the address is the zero address function isZeroAddress(address addr) internal pure returns (bool) { return addr == address(0); } function revertWith(bytes memory data) internal pure { assembly { let dataSize := mload(data) // Load the size of the data let dataPtr := add(data, 0x20) // Advance data pointer to the next word revert(dataPtr, dataSize) // Revert with the given data } } }
// SPDX-License-Identifier: MIT /// @custom:version 1.0.0 pragma solidity ^0.8.17; error AlreadyInitialized(); error CannotAuthoriseSelf(); error CannotBridgeToSameNetwork(); error ContractCallNotAllowed(); error CumulativeSlippageTooHigh(uint256 minAmount, uint256 receivedAmount); error DiamondIsPaused(); error ExternalCallFailed(); error FunctionDoesNotExist(); error InformationMismatch(); error InsufficientBalance(uint256 required, uint256 balance); error InvalidAmount(); error InvalidCallData(); error InvalidConfig(); error InvalidContract(); error InvalidDestinationChain(); error InvalidFallbackAddress(); error InvalidReceiver(); error InvalidSendingToken(); error NativeAssetNotSupported(); error NativeAssetTransferFailed(); error NoSwapDataProvided(); error NoSwapFromZeroBalance(); error NotAContract(); error NotInitialized(); error NoTransferToNullAddress(); error NullAddrIsNotAnERC20Token(); error NullAddrIsNotAValidSpender(); error OnlyContractOwner(); error RecoveryAddressCannotBeZero(); error ReentrancyError(); error TokenNotSupported(); error UnAuthorized(); error UnsupportedChainId(uint256 chainId); error WithdrawFailed(); error ZeroAmount();
// SPDX-License-Identifier: MIT /// @custom:version 1.0.0 pragma solidity ^0.8.17; library LibBytes { // solhint-disable no-inline-assembly // LibBytes specific errors error SliceOverflow(); error SliceOutOfBounds(); error AddressOutOfBounds(); bytes16 private constant _SYMBOLS = "0123456789abcdef"; // ------------------------- function slice( bytes memory _bytes, uint256 _start, uint256 _length ) internal pure returns (bytes memory) { if (_length + 31 < _length) revert SliceOverflow(); if (_bytes.length < _start + _length) revert SliceOutOfBounds(); bytes memory tempBytes; assembly { switch iszero(_length) case 0 { // Get a location of some free memory and store it in tempBytes as // Solidity does for memory variables. tempBytes := mload(0x40) // The first word of the slice result is potentially a partial // word read from the original array. To read it, we calculate // the length of that partial word and start copying that many // bytes into the array. The first word we copy will start with // data we don't care about, but the last `lengthmod` bytes will // land at the beginning of the contents of the new array. When // we're done copying, we overwrite the full first word with // the actual length of the slice. let lengthmod := and(_length, 31) // The multiplication in the next line is necessary // because when slicing multiples of 32 bytes (lengthmod == 0) // the following copy loop was copying the origin's length // and then ending prematurely not copying everything it should. let mc := add( add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)) ) let end := add(mc, _length) for { // The multiplication in the next line has the same exact purpose // as the one above. let cc := add( add( add(_bytes, lengthmod), mul(0x20, iszero(lengthmod)) ), _start ) } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { mstore(mc, mload(cc)) } mstore(tempBytes, _length) //update free-memory pointer //allocating the array padded to 32 bytes like the compiler does now mstore(0x40, and(add(mc, 31), not(31))) } //if we want a zero-length slice let's just return a zero-length array default { tempBytes := mload(0x40) //zero out the 32 bytes slice we are about to return //we need to do it because Solidity does not garbage collect mstore(tempBytes, 0) mstore(0x40, add(tempBytes, 0x20)) } } return tempBytes; } function toAddress( bytes memory _bytes, uint256 _start ) internal pure returns (address) { if (_bytes.length < _start + 20) { revert AddressOutOfBounds(); } address tempAddress; assembly { tempAddress := div( mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000 ) } return tempAddress; } /// Copied from OpenZeppelin's `Strings.sol` utility library. /// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/8335676b0e99944eef6a742e16dcd9ff6e68e609/contracts/utils/Strings.sol function toHexString( uint256 value, uint256 length ) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
{ "viaIR": false, "remappings": [ "@eth-optimism/=node_modules/@hop-protocol/sdk/node_modules/@eth-optimism/", "@uniswap/=node_modules/@uniswap/", "eth-gas-reporter/=node_modules/eth-gas-reporter/", "hardhat/=node_modules/hardhat/", "hardhat-deploy/=node_modules/hardhat-deploy/", "@openzeppelin/=lib/openzeppelin-contracts/", "celer-network/=lib/sgn-v2-contracts/", "create3-factory/=lib/create3-factory/src/", "solmate/=lib/solmate/src/", "solady/=lib/solady/src/", "permit2/=lib/Permit2/src/", "ds-test/=lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "lifi/=src/", "test/=test/", "Permit2/=lib/Permit2/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-gas-snapshot/=lib/Permit2/lib/forge-gas-snapshot/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "openzeppelin/=lib/openzeppelin-contracts/contracts/", "sgn-v2-contracts/=lib/sgn-v2-contracts/contracts/" ], "evmVersion": "shanghai", "outputSelection": { "*": { "*": [ "abi" ] } }, "optimizer": { "enabled": true, "mode": "3", "fallback_to_optimizing_for_size": false, "disable_system_request_memoization": true }, "metadata": {}, "libraries": {}, "detectMissingLibraries": false, "enableEraVMExtensions": false, "forceEVMLA": false }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"CalldataEmptyButInitNotZero","type":"error"},{"inputs":[],"name":"FacetAddressIsNotZero","type":"error"},{"inputs":[],"name":"FacetAddressIsZero","type":"error"},{"inputs":[],"name":"FacetContainsNoCode","type":"error"},{"inputs":[],"name":"FunctionAlreadyExists","type":"error"},{"inputs":[],"name":"FunctionDoesNotExist","type":"error"},{"inputs":[],"name":"FunctionIsImmutable","type":"error"},{"inputs":[],"name":"IncorrectFacetCutAction","type":"error"},{"inputs":[],"name":"InitReverted","type":"error"},{"inputs":[],"name":"InitZeroButCalldataNotEmpty","type":"error"},{"inputs":[],"name":"NoSelectorsInFace","type":"error"},{"inputs":[],"name":"OnlyContractOwner","type":"error"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum LibDiamond.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct LibDiamond.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"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum LibDiamond.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct LibDiamond.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 LibDiamond.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct LibDiamond.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
3cda33518fc46f001f2476bbe84dc5f0c7ef640249254160ae8756ae581a4f0af9ecffb6010001c7d50f4cdcf00ee941db512f56d506eaecb2a8be32dcb250ffc4f6b93b00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x00020000000000020010000000000002000000000301001900000060033002700000019b0330019700010000003103550000008004000039000000400040043f00000001002001900000004b0000c13d000000040030008c0000051a0000413d000000000201043b0000019d022001970000019e0020009c0000051a0000c13d000000640030008c0000051a0000413d0000000002000416000000000002004b0000051a0000c13d0000000402100370000000000402043b0000019f0040009c0000051a0000213d0000002302400039000000000032004b0000051a0000813d0000000402400039000000000221034f000000000802043b0000019f0080009c0000051a0000213d000000240540003900000005098002100000000007590019000000000037004b0000051a0000213d0000002402100370000000000202043b000300000002001d000001a00020009c0000051a0000213d0000004402100370000000000a02043b0000019f00a0009c0000051a0000213d0000002302a00039000000000032004b0000051a0000813d0010000400a0003d0000001002100360000000000202043b0000019f0020009c0000051a0000213d00000000062a00190000002406600039000000000036004b0000051a0000213d000001a106000041000000000606041a000001a006600197000000000a00041100000000006a004b000000530000c13d0000003f06900039000001a409600197000001a50090009c000000570000413d000001b401000041000000000010043f0000004101000039000000040010043f000001b5010000410000066b000104300000000001000416000000000001004b0000051a0000c13d0000002001000039000001000010044300000120000004430000019c010000410000066a0001042e000001a201000041000000000010043f000001a3010000410000066b000104300000008006900039000000400060043f000000800080043f000000000008004b000000cf0000c13d0000001f03200039000001c2033001970000003f03300039000001c2033001970000000003360019000200000006001d000000000063004b000000000400003900000001040040390000019f0030009c000000450000213d0000000100400190000000450000c13d000000400030043f00000010030000290000002003300039000000000331034f00000002010000290000000006210436000001c2042001980000001f0520018f000100000006001d00000000014600190000007a0000613d000000000603034f0000000107000029000000006806043c0000000007870436000000000017004b000000760000c13d000000000005004b000000870000613d000000000343034f0000000304500210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000001012000290000000000010435000000800100043d000000000001004b000001290000c13d000000400100043d0000006002000039000f00000002001d00000000022104360000006003100039000000800400043d0000000000430435000000800510003900000005034002100000000003530019000000000004004b0000051c0000c13d0000000304000029000001a006400197000000000413004900000040051000390000000000450435001000000006001d0000000000620435000000020200002900000000040204330000000002430436000000000004004b0000000107000029000000ad0000613d000000000300001900000000052300190000000006730019000000000606043300000000006504350000002003300039000000000043004b000000a60000413d000000000324001900000000000304350000001f03400039000001c203300197000000000212004900000000023200190000019b0020009c0000019b0200804100000060022002100000019b0010009c0000019b010080410000004001100210000000000112019f00000000020004140000019b0020009c0000019b02008041000000c002200210000000000112019f000001b9011001c70000800d020000390000000103000039000e00000003001d000001ba040000410669065a0000040f00000001002001900000051a0000613d00000002010000290000000001010433000000100000006b000005470000c13d000000000001004b0000054f0000c13d00000000010000190000066a0001042e000000a008000039000000240930008a000000d80000013d0000004006a000390000000000b604350000000008a804360000002005500039000000000075004b0000054d0000813d000000000651034f000000000a06043b0000019f00a0009c0000051a0000213d000000000b4a0019000000000ab90049000001a600a0009c0000051a0000213d0000006000a0008c0000051a0000413d000000400a00043d000001a700a0009c000000450000213d0000006006a00039000000400060043f000000240cb000390000000006c1034f000000000d06043b000001a000d0009c0000051a0000213d000000000dda0436000000200cc000390000000006c1034f000000000e06043b0000000200e0008c0000051a0000213d0000000000ed04350000002006c00039000000000661034f000000000c06043b0000019f00c0009c0000051a0000213d000000000cbc00190000004306c00039000000000036004b000000000b000019000001a80b008041000001a806600197000000000006004b000000000d000019000001a80d004041000001a80060009c000000000d0bc01900000000000d004b0000051a0000c13d0000002406c00039000000000661034f000000000d06043b0000019f00d0009c000000450000213d000000050ed002100000003f06e00039000001a406600197000000400b00043d000000000f6b00190000000000bf004b000000000600003900000001060040390000019f00f0009c000000450000213d0000000100600190000000450000c13d0000004000f0043f0000000000db0435000000440cc00039000000000dce001900000000003d004b0000051a0000213d0000000000dc004b000000d20000813d000000000e0b00190000000006c1034f000000000f06043b000001a900f001980000051a0000c13d000000200ee000390000000000fe0435000000200cc000390000000000dc004b0000011f0000413d000000d20000013d00008010020000390000000005000019000001310000013d00000004050000290000000105500039000000800100043d000000000015004b0000008c0000813d0000000501500210000000a001100039000000000101043300000020031000390000000004030433000000030040008c000005410000813d00000040031000390000000003030433000c00000003001d0000000063030434000b00000006001d000000000004004b000400000005001d0000031e0000613d000000010040008c000003af0000c13d000000000003004b000005f00000613d0000000001010433000001a001100198000005f40000613d000d00000001001d000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b000000000101041a000a01ac0010019c000001590000c13d0000000d010000290669060e0000040f0000000c010000290000000001010433000000000001004b00008010020000390000012c0000613d0000000003000019000700000003001d00000005013002100000000b011000290000000001010433000800000001001d0000019d01100197001000000001001d000000000010043f000001ad01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b000000000101041a000001a0031001970000000d0030006c0000058a0000613d000000000003004b0000801002000039000005820000613d0000000001000410000f00000003001d000000000013004b000005860000613d0000001001000029000000000010043f000001ad01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b000000000101041a000900000001001d0000000f01000029000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d000000000101043b000000000101041a000000000001004b00008010020000390000055c0000613d0000000903000029000000a003300270000e0001001000920000000e0030006c0000000f01000029000002080000613d000600000003001d000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b000000000201041a0000000e0020006c0000801002000039000005620000a13d000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b0000000e0200002900000003022002700000000001210019000000000101041a000500000001001d0000000f01000029000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d000000000101043b000000000201041a000000060020006c0000801002000039000005620000a13d000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c70669065f0000040f00000001002001900000051a0000613d0000000e020000290000000502200210000000e00220018f000000050220024f000000e00320021000000006040000290000000504400210000000e00440018f0000019b0540021f000001c3055001670000000906000029000000a306600270000000000101043b0000000001610019000000000601041a000000000556016f0000019b0220019700000000024201cf000000000225019f000000000021041b000000000030043f000001ad01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d0000000902000029000001af02200197000000000101043b000000000301041a000001a003300197000000000223019f000000000021041b00008010020000390000000f01000029000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b000000000201041a000900000002001d000000000002004b0000801002000039000005680000613d000600000001001d000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c70669065f0000040f00000001002001900000051a0000613d0000000902000029000000010220008a0000000503200210000000e00330018f0000019b0330021f000001c303300167000000000101043b00000003042002700000000001410019000000000401041a000000000334016f000000000031041b0000000601000029000000000021041b0000001001000029000000000010043f000001ad01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d000000000101043b000000000001041b0000000e0000006b000002c00000c13d000001b001000041000000000101041a000e00000001001d000000000001004b00008010020000390000055c0000613d0000000f01000029000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c70669065f0000040f00000001002001900000051a0000613d0000000e02000029000000010220008a000000000101043b0000000101100039000000000101041a000e00000001001d000000000021004b000002970000613d000001b001000041000000000101041a000900000002001d000000000021004b0000801002000039000005620000a13d000001b001000041000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b000001b002000041000000000202041a0000000e0020006c0000801002000039000005620000a13d0000000901100029000000000101041a000900000001001d000001b001000041000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c70669065f0000040f00000001002001900000051a0000613d0000000902000029000001a002200197000000000101043b0000000e01100029000000000301041a000001af03300197000000000323019f000000000031041b000000000020043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d000000000101043b00000001011000390000000e02000029000000000021041b000001b001000041000000000101041a000e00000001001d000000000001004b0000801002000039000005680000613d000001b001000041000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c70669065f0000040f00000001002001900000051a0000613d0000000e02000029000000010220008a000000000101043b0000000001210019000000000301041a000001af03300197000000000031041b000001b001000041000000000021041b0000000f01000029000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d000000000101043b0000000101100039000000000001041b0000001001000029000000000010043f000001ad01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d0000000a02000029000000a002200210000000000101043b000000000301041a000001a003300197000000000223019f000000000021041b0000000d01000029000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d000000000101043b000000000201041a0000019f0020009c000000450000213d000f00000002001d0000000102200039000000000021041b000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c700008010020000390669065f0000040f00000001002001900000051a0000613d0000000f050000290000000502500210000000e00220018f0000019b0320021f000001c3033001670000000304500270000000000101043b0000000001410019000000000401041a000000000334016f0000000804000029000000e00440027000000000022401cf000000000223019f000000000021041b0000001001000029000000000010043f000001ad01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d000000000101043b000000000201041a000001af022001970000000d022001af000000000021041b0000000a010000290000000101100039000a01ac0010019b000000070300002900000001033000390000000c010000290000000001010433000000000013004b00008010020000390000015f0000413d0000012c0000013d000000000003004b000005f00000613d0000000001010433000001a001100198000005f40000613d000e00000001001d000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b000000000101041a001001ac0010019c000003350000c13d0000000e010000290669060e0000040f0000000c010000290000000001010433000000000001004b00008010020000390000012c0000613d0000000003000019000a00000003001d00000005013002100000000b011000290000000001010433000d00000001001d0000019d01100197000f00000001001d000000000010043f000001ad01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b000000000101041a000001a0001001980000058a0000c13d0000000f01000029000000000010043f000001ad01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d0000001002000029000000a002200210000000000101043b000000000301041a000001a003300197000000000223019f000000000021041b0000000e01000029000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d000000000101043b000000000201041a0000019f0020009c000000450000213d000900000002001d0000000102200039000000000021041b000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c700008010020000390669065f0000040f00000001002001900000051a0000613d00000009050000290000000502500210000000e00220018f0000019b0320021f000001c3033001670000000304500270000000000101043b0000000001410019000000000401041a000000000334016f0000000d04000029000000e00440027000000000022401cf000000000223019f000000000021041b0000000f01000029000000000010043f000001ad01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d000000000101043b000000000201041a000001af022001970000000e022001af000000000021041b00000010010000290000000101100039001001ac0010019b0000000a0300002900000001033000390000000c010000290000000001010433000000000013004b00008010020000390000033b0000413d0000012c0000013d000000000003004b000005f00000613d0000000001010433000001a000100198000005f80000c13d0000000003000019000003c00000013d000000000101043b0000000101100039000000000001041b0000000a0300002900000001033000390000000c010000290000000001010433000000000013004b00008010020000390000012c0000813d000a00000003001d00000005013002100000000b0110002900000000010104330000019d01100197000e00000001001d000000000010043f000001ad01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b000000000101041a000001a0031001980000801002000039000005820000613d0000000001000410001000000003001d000000000013004b000005860000613d0000000e01000029000000000010043f000001ad01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b000000000101041a000d00000001001d0000001001000029000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d000000000101043b000000000101041a000000000001004b00008010020000390000055c0000613d0000000d03000029000000a003300270000f0001001000920000000f0030006c0000001001000029000004650000613d000900000003001d000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b000000000201041a0000000f0020006c0000801002000039000005620000a13d000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b0000000f0200002900000003022002700000000001210019000000000101041a000800000001001d0000001001000029000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d000000000101043b000000000201041a000000090020006c0000801002000039000005620000a13d000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c70669065f0000040f00000001002001900000051a0000613d0000000f020000290000000502200210000000e00220018f000000080220024f000000e00320021000000009040000290000000504400210000000e00440018f0000019b0540021f000001c3055001670000000d06000029000000a306600270000000000101043b0000000001610019000000000601041a000000000556016f0000019b0220019700000000024201cf000000000225019f000000000021041b000000000030043f000001ad01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d0000000d02000029000001af02200197000000000101043b000000000301041a000001a003300197000000000223019f000000000021041b00008010020000390000001001000029000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b000000000201041a000d00000002001d000000000002004b0000801002000039000005680000613d000900000001001d000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c70669065f0000040f00000001002001900000051a0000613d0000000d02000029000000010220008a0000000503200210000000e00330018f0000019b0330021f000001c303300167000000000101043b00000003042002700000000001410019000000000401041a000000000334016f000000000031041b0000000901000029000000000021041b0000000e01000029000000000010043f000001ad01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d000000000101043b000000000001041b0000000f0000006b000003b90000c13d000001b001000041000000000101041a000f00000001001d000000000001004b00008010020000390000055c0000613d0000001001000029000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c70669065f0000040f00000001002001900000051a0000613d0000000f02000029000000010220008a000000000101043b0000000101100039000000000101041a000f00000001001d000000000021004b000004f40000613d000001b001000041000000000101041a000e00000002001d000000000021004b0000801002000039000005620000a13d000001b001000041000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c70669065f0000040f00000001002001900000051a0000613d000000000101043b000001b002000041000000000202041a0000000f0020006c0000801002000039000005620000a13d0000000e01100029000000000101041a000e00000001001d000001b001000041000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c70669065f0000040f00000001002001900000051a0000613d0000000e02000029000001a002200197000000000101043b0000000f01100029000000000301041a000001af03300197000000000323019f000000000031041b000000000020043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000051a0000613d000000000101043b00000001011000390000000f02000029000000000021041b000001b001000041000000000101041a000f00000001001d000000000001004b0000801002000039000005680000613d000001b001000041000000000010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c70669065f0000040f00000001002001900000051a0000613d0000000f02000029000000010220008a000000000101043b0000000001210019000000000301041a000001af03300197000000000031041b000001b001000041000000000021041b0000001001000029000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f0000000100200190000003b60000c13d00000000010000190000066b00010430000000a0060000390000000007000019000000600c000039000005230000013d0000000107700039000000000047004b000000980000813d0000000008130049000000800880008a0000000005850436000000006806043400000000a9080434000001a0099001970000000009930436000000000a0a04330000000200a0008c000005410000213d0000000000a904350000004008800039000000000808043300000040093000390000000000c90435000000600a300039000000000908043300000000009a04350000008003300039000000000009004b000005200000613d000000000a0000190000002008800039000000000b0804330000019d0bb001970000000003b30436000000010aa0003900000000009a004b000005390000413d000005200000013d000001b401000041000000000010043f0000002101000039000000040010043f000001b5010000410000066b00010430000000000001004b000005530000c13d000001c001000041000000000010043f000001a3010000410000066b00010430000000400600043d0000005c0000013d000001c101000041000000000010043f000001a3010000410000066b000104300000000002000410000000100020006b0000056e0000c13d00000000020004140000000303000029000000040030008c0000058e0000c13d0000000001000031000005a10000013d000001b401000041000000000010043f0000001101000039000000040010043f000001b5010000410000066b00010430000001b401000041000000000010043f0000003201000039000000040010043f000001b5010000410000066b00010430000001b401000041000000000010043f0000003101000039000000040010043f000001b5010000410000066b00010430000001bb0100004100000000001004430000000301000029000000040010044300000000010004140000019b0010009c0000019b01008041000000c001100210000001bc011001c700008002020000390669065f0000040f0000000100200190000005d80000613d000000000101043b000000000001004b000005d90000c13d000001bd01000041000000000010043f000001a3010000410000066b00010430000001b701000041000000000010043f000001a3010000410000066b00010430000001b601000041000000000010043f000001a3010000410000066b00010430000001b101000041000000000010043f000001a3010000410000066b0001043000000001030000290000019b0030009c0000019b0300804100000040033002100000019b0010009c0000019b010080410000006001100210000000000131019f0000019b0020009c0000019b02008041000000c002200210000000000112019f0000000302000029066906640000040f000e000100200193000100000001035500000060011002700000019b0010019d0000019b01100197000000000001004b000005ad0000c13d0000000e0000006b000000cd0000c13d0000000f010000290000000001010433000000000001004b000005dc0000c13d000001bf01000041000000000010043f000001a3010000410000066b000104300000019f0010009c000000450000213d0000001f02100039000001c2022001970000003f02200039000001c202200197000000400300043d0000000002230019000f00000003001d000000000032004b000000000300003900000001030040390000019f0020009c000000450000213d0000000100300190000000450000c13d000000400020043f0000000f020000290000000005120436000001c2021001980000001f0310018f00000000012500190000000104000367000005ca0000613d000000000604034f000000006706043c0000000005750436000000000015004b000005c60000c13d000000000003004b000005a30000613d000000000224034f0000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f0000000000210435000005a30000013d000000000001042f00000002010000290000000001010433000005560000013d000000400300043d001000000003001d000001be01000041000000000013043500000004013000390000002002000039000000000021043500000024023000390000000f01000029066905fc0000040f000000100200002900000000012100490000019b0010009c0000019b010080410000019b0020009c0000019b0200804100000060011002100000004002200210000000000121019f0000066b00010430000001b801000041000000000010043f000001a3010000410000066b00010430000001b201000041000000000010043f000001a3010000410000066b00010430000001b301000041000000000010043f000001a3010000410000066b0001043000000000430104340000000001320436000000000003004b000006080000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b000006010000413d000000000231001900000000000204350000001f02300039000001c2022001970000000001210019000000000001042d0002000000000002000001bb020000410000000000200443000100000001001d000000040010044300000000010004140000019b0010009c0000019b01008041000000c001100210000001bc011001c700008002020000390669065f0000040f00000001002001900000064e0000613d000000000101043b000000000001004b0000064f0000613d000001b001000041000000000101041a000200000001001d0000000101000029000001a001100197000100000001001d000000000010043f000001aa01000041000000200010043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ab011001c700008010020000390669065f0000040f00000001002001900000064c0000613d000000000101043b00000001011000390000000202000029000000000021041b000001c40020009c000006530000813d00000002010000290000000101100039000001b002000041000000000012041b000000000020043f00000000010004140000019b0010009c0000019b01008041000000c001100210000001ae011001c700008010020000390669065f0000040f00000001002001900000064c0000613d000000000101043b0000000201100029000000000201041a000001af0220019700000001022001af000000000021041b000000000001042d00000000010000190000066b00010430000000000001042f000001bd01000041000000000010043f000001a3010000410000066b00010430000001b401000041000000000010043f0000004101000039000000040010043f000001b5010000410000066b00010430000000000001042f0000065d002104210000000102000039000000000001042d0000000002000019000000000001042d00000662002104230000000102000039000000000001042d0000000002000019000000000001042d00000667002104250000000102000039000000000001042d0000000002000019000000000001042d00000669000004320000066a0001042e0000066b0001043000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff000000000000000000000000000000000000000000000000000000001f931c1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffffc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320277d76f80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff9f800000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d02000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c0200000000000000000000000000000000000020000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131ea023275d00000000000000000000000000000000000000000000000000000000c68ec83a0000000000000000000000000000000000000000000000000000000079c9df22000000000000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000c3c5ec3700000000000000000000000000000000000000000000000000000000a9ad62f8000000000000000000000000000000000000000000000000000000007bc559500000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6731806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000e35006000000000000000000000000000000000000000000000000000000000008c379a000000000000000000000000000000000000000000000000000000000c53ebed50000000000000000000000000000000000000000000000000000000042200566000000000000000000000000000000000000000000000000000000009811686000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000eca3fa63a2ede43679b288664e4bad0936c5926186f7e09c9a012a9c6ac1ae57
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.