Contract
0x86935f11c86623dec8a25696e1c19a8659cbf95d
14
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Diamond
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-07-01 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.1; interface IERC165 { /// @notice Query if a contract implements an interface /// @param interfaceId The interface identifier, as specified in ERC-165 /// @dev Interface identification is specified in ERC-165. This function /// uses less than 30,000 gas. /// @return `true` if the contract implements `interfaceID` and /// `interfaceID` is not 0xffffffff, `false` otherwise function supportsInterface(bytes4 interfaceId) external view returns (bool); } // A loupe is a small magnifying glass used to look at diamonds. // These functions look at diamonds interface IDiamondLoupe { /// These functions are expected to be called frequently /// by tools. struct Facet { address facetAddress; bytes4[] functionSelectors; } /// @notice Gets all facet addresses and their four byte function selectors. /// @return facets_ Facet function facets() external view returns (Facet[] memory facets_); /// @notice Gets all the function selectors supported by a specific facet. /// @param _facet The facet address. /// @return facetFunctionSelectors_ function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_); /// @notice Get all the facet addresses used by a diamond. /// @return facetAddresses_ function facetAddresses() external view returns (address[] memory facetAddresses_); /// @notice Gets the facet that supports the given selector. /// @dev If facet is not found return address(0). /// @param _functionSelector The function selector. /// @return facetAddress_ The facet address. function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_); } /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) /******************************************************************************/ interface IDiamondCut { enum FacetCutAction {Add, Replace, Remove} struct FacetCut { address facetAddress; FacetCutAction action; bytes4[] functionSelectors; } /// @notice Add/replace/remove any number of functions and optionally execute /// a function with delegatecall /// @param _diamondCut Contains the facet addresses and function selectors /// @param _init The address of the contract or facet to execute _calldata /// @param _calldata A function call, including function selector and arguments /// _calldata is executed with delegatecall on _init function diamondCut( FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata ) external; event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata); } library LibMeta { bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(bytes("EIP712Domain(string name,string version,uint256 salt,address verifyingContract)")); function domainSeparator(string memory name, string memory version) internal view returns (bytes32 domainSeparator_) { domainSeparator_ = keccak256( abi.encode(EIP712_DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(version)), getChainID(), address(this)) ); } function getChainID() internal view returns (uint256 id) { assembly { id := chainid() } } function msgSender() internal view returns (address sender_) { if (msg.sender == address(this)) { bytes memory array = msg.data; uint256 index = msg.data.length; assembly { // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those. sender_ := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff) } } else { sender_ = msg.sender; } } } /******************************************************************************\ * Authors: Nick Mudge (https://twitter.com/mudgen) * * Implementation of a diamond. /******************************************************************************/ /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535 /******************************************************************************/ /// @title ERC-173 Contract Ownership Standard /// Note: the ERC-165 identifier for this interface is 0x7f5828d0 /* is ERC165 */ interface IERC173 { /// @notice Get the address of the owner /// @return owner_ The address of the owner. function owner() external view returns (address owner_); /// @notice Set the address of the new owner of the contract /// @dev Set _newOwner to address(0) to renounce any ownership. /// @param _newOwner The address of the new owner of the contract function transferOwnership(address _newOwner) external; } library LibDiamond { bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); struct FacetAddressAndPosition { address facetAddress; uint16 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array } struct FacetFunctionSelectors { bytes4[] functionSelectors; uint16 facetAddressPosition; // position of facetAddress in facetAddresses array } struct DiamondStorage { // maps function selector to the facet address and // the position of the selector in the facetFunctionSelectors.selectors array mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition; // maps facet addresses to function selectors mapping(address => FacetFunctionSelectors) facetFunctionSelectors; // facet addresses address[] facetAddresses; // Used to query if a contract implements an interface. // Used to implement ERC-165. mapping(bytes4 => bool) supportedInterfaces; // owner of the contract address contractOwner; } function diamondStorage() internal pure returns (DiamondStorage storage ds) { bytes32 position = DIAMOND_STORAGE_POSITION; assembly { ds.slot := position } } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function setContractOwner(address _newOwner) internal { DiamondStorage storage ds = diamondStorage(); address previousOwner = ds.contractOwner; ds.contractOwner = _newOwner; emit OwnershipTransferred(previousOwner, _newOwner); } function contractOwner() internal view returns (address contractOwner_) { contractOwner_ = diamondStorage().contractOwner; } function enforceIsContractOwner() internal view { require(LibMeta.msgSender() == diamondStorage().contractOwner, "LibDiamond: Must be contract owner"); } event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata); function addDiamondFunctions( address _diamondCutFacet, address _diamondLoupeFacet, address _ownershipFacet ) internal { IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](3); bytes4[] memory functionSelectors = new bytes4[](1); functionSelectors[0] = IDiamondCut.diamondCut.selector; cut[0] = IDiamondCut.FacetCut({facetAddress: _diamondCutFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors}); functionSelectors = new bytes4[](5); functionSelectors[0] = IDiamondLoupe.facets.selector; functionSelectors[1] = IDiamondLoupe.facetFunctionSelectors.selector; functionSelectors[2] = IDiamondLoupe.facetAddresses.selector; functionSelectors[3] = IDiamondLoupe.facetAddress.selector; functionSelectors[4] = IERC165.supportsInterface.selector; cut[1] = IDiamondCut.FacetCut({ facetAddress: _diamondLoupeFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors }); functionSelectors = new bytes4[](2); functionSelectors[0] = IERC173.transferOwnership.selector; functionSelectors[1] = IERC173.owner.selector; cut[2] = IDiamondCut.FacetCut({facetAddress: _ownershipFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors}); diamondCut(cut, address(0), ""); } // Internal function version of diamondCut function diamondCut( IDiamondCut.FacetCut[] memory _diamondCut, address _init, bytes memory _calldata ) internal { for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) { IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action; if (action == IDiamondCut.FacetCutAction.Add) { addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else if (action == IDiamondCut.FacetCutAction.Replace) { replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else if (action == IDiamondCut.FacetCutAction.Remove) { removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else { revert("LibDiamondCut: Incorrect FacetCutAction"); } } emit DiamondCut(_diamondCut, _init, _calldata); initializeDiamondCut(_init, _calldata); } function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); // uint16 selectorCount = uint16(diamondStorage().selectors.length); require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code"); ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length); ds.facetAddresses.push(_facetAddress); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists"); ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector); ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress; ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition; selectorPosition++; } } function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code"); ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length); ds.facetAddresses.push(_facetAddress); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; require(oldFacetAddress != _facetAddress, "LibDiamondCut: Can't replace function with same function"); removeFunction(oldFacetAddress, selector); // add function ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition; ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector); ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress; selectorPosition++; } } function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); // if function does not exist then do nothing and return require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)"); for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; removeFunction(oldFacetAddress, selector); } } function removeFunction(address _facetAddress, bytes4 _selector) internal { DiamondStorage storage ds = diamondStorage(); require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist"); // an immutable function is a function defined directly in a diamond require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function"); // replace selector with last selector, then delete last selector uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition; uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1; // if not the same then replace _selector with lastSelector if (selectorPosition != lastSelectorPosition) { bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition]; ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector; ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint16(selectorPosition); } // delete the last selector ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop(); delete ds.selectorToFacetAndPosition[_selector]; // if no more selectors for facet address then delete the facet address if (lastSelectorPosition == 0) { // replace facet address with last facet address and delete last facet address uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1; uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; if (facetAddressPosition != lastFacetAddressPosition) { address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition]; ds.facetAddresses[facetAddressPosition] = lastFacetAddress; ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = uint16(facetAddressPosition); } ds.facetAddresses.pop(); delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; } } function initializeDiamondCut(address _init, bytes memory _calldata) internal { if (_init == address(0)) { require(_calldata.length == 0, "LibDiamondCut: _init is address(0) but_calldata is not empty"); } else { require(_calldata.length > 0, "LibDiamondCut: _calldata is empty but _init is not address(0)"); if (_init != address(this)) { enforceHasContractCode(_init, "LibDiamondCut: _init address has no code"); } (bool success, bytes memory error) = _init.delegatecall(_calldata); if (success == false) { if (error.length > 0) { // bubble up the error revert(string(error)); } else { revert("LibDiamondCut: _init function reverted"); } } } } function enforceHasContractCode(address _contract, string memory _errorMessage) internal view { uint256 contractSize; assembly { contractSize := extcodesize(_contract) } require(contractSize != 0, _errorMessage); } } /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535 /******************************************************************************/ contract DiamondCutFacet is IDiamondCut { /// @notice Add/replace/remove any number of functions and optionally execute /// a function with delegatecall /// @param _diamondCut Contains the facet addresses and function selectors /// @param _init The address of the contract or facet to execute _calldata /// @param _calldata A function call, including function selector and arguments /// _calldata is executed with delegatecall on _init function diamondCut( FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata ) external override { LibDiamond.enforceIsContractOwner(); LibDiamond.diamondCut(_diamondCut, _init, _calldata); } } /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535 /******************************************************************************/ contract DiamondLoupeFacet is IDiamondLoupe, IERC165 { // Diamond Loupe Functions //////////////////////////////////////////////////////////////////// /// These functions are expected to be called frequently by tools. // // struct Facet { // address facetAddress; // bytes4[] functionSelectors; // } /// @notice Gets all facets and their selectors. /// @return facets_ Facet function facets() external view override returns (Facet[] memory facets_) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); uint256 numFacets = ds.facetAddresses.length; facets_ = new Facet[](numFacets); for (uint256 i; i < numFacets; i++) { address facetAddress_ = ds.facetAddresses[i]; facets_[i].facetAddress = facetAddress_; facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors; } } /// @notice Gets all the function selectors provided by a facet. /// @param _facet The facet address. /// @return facetFunctionSelectors_ function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors; } /// @notice Get all the facet addresses used by a diamond. /// @return facetAddresses_ function facetAddresses() external view override returns (address[] memory facetAddresses_) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); facetAddresses_ = ds.facetAddresses; } /// @notice Gets the facet that supports the given selector. /// @dev If facet is not found return address(0). /// @param _functionSelector The function selector. /// @return facetAddress_ The facet address. function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress; } // This implements ERC-165. function supportsInterface(bytes4 _interfaceId) external view override returns (bool) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); return ds.supportedInterfaces[_interfaceId]; } } contract OwnershipFacet is IERC173 { function transferOwnership(address _newOwner) external override { LibDiamond.enforceIsContractOwner(); LibDiamond.setContractOwner(_newOwner); } function owner() external view override returns (address owner_) { owner_ = LibDiamond.contractOwner(); } } contract Diamond { constructor(address _contractOwner) { LibDiamond.setContractOwner(_contractOwner); LibDiamond.addDiamondFunctions(address(new DiamondCutFacet()), address(new DiamondLoupeFacet()), address(new OwnershipFacet())); } // Find facet for function that is called and execute the // function if a facet is found and return any value. fallback() external payable { LibDiamond.DiamondStorage storage ds; bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION; assembly { ds.slot := position } address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress; require(facet != address(0), "Diamond: Function does not exist"); assembly { calldatacopy(0, 0, calldatasize()) let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch result case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162005112380380620051128339810160408190526200003491620012d1565b6200004a81620000ea60201b620000951760201c565b620000e36040516200005c9062001288565b604051809103906000f08015801562000079573d6000803e3d6000fd5b50604051620000889062001296565b604051809103906000f080158015620000a5573d6000803e3d6000fd5b50604051620000b490620012a4565b604051809103906000f080158015620000d1573d6000803e3d6000fd5b506200014c60201b620000f51760201c565b50620018b3565b6000620000f662000531565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60408051600380825260808201909252600091816020015b6200016e620012b2565b815260200190600190039081620001645750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b81600081518110620001d157634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03871681529081016000815260200182815250826000815181106200023057634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408051600580825260c0820190925290816020016020820280368337019050509050637a0ed62760e01b816000815181106200028857634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b9082906001908110620002ce57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b90829060029081106200031457634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b90829060039081106200035a57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516301ffc9a760e01b9082906004908110620003a057634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b0386168152908101600081526020018281525082600181518110620003ff57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152604080516002808252606082019092529081602001602082028036833701905050905063f2fde38b60e01b816000815181106200045757634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101909101528051638da5cb5b60e01b90829060019081106200049d57634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b0385168152908101600081526020018281525082600281518110620004fc57634e487b7160e01b600052603260045260246000fd5b60200260200101819052506200052a826000604051806020016040528060008152506200055560201b60201c565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60005b8351811015620007ae5760008482815181106200058557634e487b7160e01b600052603260045260246000fd5b602002602001015160200151905060006002811115620005b557634e487b7160e01b600052602160045260246000fd5b816002811115620005d657634e487b7160e01b600052602160045260246000fd5b14156200064d57620006478583815181106200060257634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106200062f57634e487b7160e01b600052603260045260246000fd5b602002602001015160400151620007fd60201b60201c565b62000798565b60018160028111156200067057634e487b7160e01b600052602160045260246000fd5b1415620006e157620006478583815181106200069c57634e487b7160e01b600052603260045260246000fd5b602002602001015160000151868481518110620006c957634e487b7160e01b600052603260045260246000fd5b60200260200101516040015162000a3660201b60201c565b60028160028111156200070457634e487b7160e01b600052602160045260246000fd5b14156200077557620006478583815181106200073057634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106200075d57634e487b7160e01b600052603260045260246000fd5b60200260200101516040015162000c8b60201b60201c565b60405162461bcd60e51b81526004016200078f90620015bc565b60405180910390fd5b5080620007a5816200187f565b91505062000558565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051620007e4939291906200135a565b60405180910390a1620007f8828262000d73565b505050565b6000815111620008215760405162461bcd60e51b81526004016200078f9062001514565b60006200082d62000531565b90506001600160a01b038316620008585760405162461bcd60e51b81526004016200078f9062001603565b6001600160a01b038316600090815260018201602052604090205461ffff8116620008fe57620008a284604051806060016040528060248152602001620050ee6024913962000eb1565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156200052a5760008482815181106200092e57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03168015620009815760405162461bcd60e51b81526004016200078f90620016fa565b6001600160a01b03871660008181526001878101602090815260408084208054938401815584528184206008840401805463ffffffff60079095166004026101000a948502191660e089901c94909402939093179092556001600160e01b031986168352889052902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff8716021790558362000a1b816200185a565b9450505050808062000a2d906200187f565b91505062000901565b600081511162000a5a5760405162461bcd60e51b81526004016200078f9062001514565b600062000a6662000531565b90506001600160a01b03831662000a915760405162461bcd60e51b81526004016200078f9062001603565b6001600160a01b038316600090815260018201602052604090205461ffff811662000b375762000adb84604051806060016040528060248152602001620050ee6024913962000eb1565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156200052a57600084828151811062000b6757634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690871681141562000bc05760405162461bcd60e51b81526004016200078f9062001757565b62000bcc818362000ed5565b6001600160e01b03198216600081815260208781526040808320805461ffff60a01b1916600160a01b61ffff8b16021781556001600160a01b038c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b0319161790558362000c70816200185a565b9450505050808062000c82906200187f565b91505062000b3a565b600081511162000caf5760405162461bcd60e51b81526004016200078f9062001514565b600062000cbb62000531565b90506001600160a01b0383161562000ce75760405162461bcd60e51b81526004016200078f90620017b4565b60005b825181101562000d6d57600083828151811062000d1757634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b031662000d55818362000ed5565b5050808062000d64906200187f565b91505062000cea565b50505050565b6001600160a01b03821662000daa5780511562000da45760405162461bcd60e51b81526004016200078f9062001471565b62000ead565b600081511162000dce5760405162461bcd60e51b81526004016200078f906200164f565b6001600160a01b038216301462000e045762000e0482604051806060016040528060288152602001620050c66028913962000eb1565b600080836001600160a01b03168360405162000e2191906200133c565b600060405180830381855af49150503d806000811462000e5e576040519150601f19603f3d011682016040523d82523d6000602084013e62000e63565b606091505b5090925090508162000d6d5780511562000e93578060405162461bcd60e51b81526004016200078f91906200145c565b60405162461bcd60e51b81526004016200078f90620014ce565b5050565b813b818162000d6d5760405162461bcd60e51b81526004016200078f91906200145c565b600062000ee162000531565b90506001600160a01b03831662000f0c5760405162461bcd60e51b81526004016200078f906200155f565b6001600160a01b03831630141562000f385760405162461bcd60e51b81526004016200078f90620016ac565b6001600160e01b03198216600090815260208281526040808320546001600160a01b0387168452600180860190935290832054600160a01b90910461ffff16929162000f849162001811565b90508082146200108f576001600160a01b0385166000908152600184016020526040812080548390811062000fc957634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b9250829190859081106200102957634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b03851660009081526001840160205260409020805480620010c757634e487b7160e01b600052603160045260246000fd5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080546001600160b01b0319169055806200052a576002830154600090620011369060019062001811565b6001600160a01b038716600090815260018087016020526040909120015490915061ffff16808214620012145760008560020183815481106200118957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546002870180546001600160a01b039092169250829184908110620011c957634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b846002018054806200123657634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b6116e4806200309e83390190565b61068e806200478283390190565b6102b68062004e1083390190565b6040805160608082018352600080835260208301529181019190915290565b600060208284031215620012e3578081fd5b81516001600160a01b0381168114620012fa578182fd5b9392505050565b6001600160a01b03169052565b60008151808452620013288160208601602086016200182b565b601f01601f19169290920160200192915050565b60008251620013508184602087016200182b565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b848110156200142957898303607f19018652815180516001600160a01b03168452848101518985019060038110620013c657634e487b7160e01b8c52602160045260248cfd5b858701526040918201519185018a9052815190819052908501908a90898601905b80831015620014135783516001600160e01b0319168252928701926001929092019190870190620013e7565b5097860197945050509083019060010162001380565b5050620014398289018b62001301565b87810360408901526200144d818a6200130e565b9b9a5050505050505050505050565b600060208252620012fa60208301846200130e565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656040820152651d995c9d195960d21b606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756040820152663a20b1ba34b7b760c91b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201526d3a30b1363290333ab731ba34b7b760911b606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60408201527f6e207468617420616c7265616479206578697374730000000000000000000000606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b6000828210156200182657620018266200189d565b500390565b60005b83811015620018485781810151838201526020016200182e565b8381111562000d6d5750506000910152565b600061ffff808316818114156200187557620018756200189d565b6001019392505050565b60006000198214156200189657620018966200189d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6117db80620018c36000396000f3fe60806040908152600080356001600160e01b03191681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c60208190529190205481906001600160a01b0316806100715760405162461bcd60e51b8152600401610068906114db565b60405180910390fd5b3660008037600080366000845af43d6000803e808015610090573d6000f35b3d6000fd5b600061009f6104c4565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60408051600380825260808201909252600091816020015b610115611176565b81526020019060019003908161010d5750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b8160008151811061017657634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03871681529081016000815260200182815250826000815181106101d457634e487b7160e01b600052603260045260246000fd5b602090810291909101015260408051600580825260c0820190925290816020016020820280368337019050509050637a0ed62760e01b8160008151811061022b57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b908290600190811061027057634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b90829060029081106102b557634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b90829060039081106102fa57634e487b7160e01b600052603260045260246000fd5b6001600160e01b03199092166020928302919091019091015280516301ffc9a760e01b908290600490811061033f57634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038616815290810160008152602001828152508260018151811061039d57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152604080516002808252606082019092529081602001602082028036833701905050905063f2fde38b60e01b816000815181106103f457634e487b7160e01b600052603260045260246000fd5b6001600160e01b0319909216602092830291909101909101528051638da5cb5b60e01b908290600190811061043957634e487b7160e01b600052603260045260246000fd5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038516815290810160008152602001828152508260028151811061049757634e487b7160e01b600052603260045260246000fd5b60200260200101819052506104bd826000604051806020016040528060008152506104e8565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60005b835181101561070b57600084828151811061051657634e487b7160e01b600052603260045260246000fd5b60200260200101516020015190506000600281111561054557634e487b7160e01b600052602160045260246000fd5b81600281111561056557634e487b7160e01b600052602160045260246000fd5b14156105d0576105cb85838151811061058e57634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106105ba57634e487b7160e01b600052603260045260246000fd5b602002602001015160400151610756565b6106f8565b60018160028111156105f257634e487b7160e01b600052602160045260246000fd5b1415610658576105cb85838151811061061b57634e487b7160e01b600052603260045260246000fd5b60200260200101516000015186848151811061064757634e487b7160e01b600052603260045260246000fd5b602002602001015160400151610979565b600281600281111561067a57634e487b7160e01b600052602160045260246000fd5b14156106e0576105cb8583815181106106a357634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106106cf57634e487b7160e01b600052603260045260246000fd5b602002602001015160400151610bb6565b60405162461bcd60e51b815260040161006890611448565b508061070381611728565b9150506104eb565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161073f939291906111ea565b60405180910390a16107518282610c8f565b505050565b60008151116107775760405162461bcd60e51b8152600401610068906113a0565b60006107816104c4565b90506001600160a01b0383166107a95760405162461bcd60e51b81526004016100689061148f565b6001600160a01b038316600090815260018201602052604090205461ffff811661084b576107ef8460405180606001604052806024815260200161178260249139610db7565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156104bd57600084828151811061087957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b031680156108c95760405162461bcd60e51b8152600401610068906115bb565b6001600160a01b03871660008181526001878101602090815260408084208054938401815584528184206008840401805463ffffffff60079095166004026101000a948502191660e089901c94909402939093179092556001600160e01b031986168352889052902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff8716021790558361096181611706565b9450505050808061097190611728565b91505061084e565b600081511161099a5760405162461bcd60e51b8152600401610068906113a0565b60006109a46104c4565b90506001600160a01b0383166109cc5760405162461bcd60e51b81526004016100689061148f565b6001600160a01b038316600090815260018201602052604090205461ffff8116610a6e57610a128460405180606001604052806024815260200161178260249139610db7565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156104bd576000848281518110610a9c57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03908116908716811415610af25760405162461bcd60e51b815260040161006890611610565b610afc8183610dd8565b6001600160e01b03198216600081815260208781526040808320805461ffff60a01b1916600160a01b61ffff8b16021781556001600160a01b038c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b03191617905583610b9e81611706565b94505050508080610bae90611728565b915050610a71565b6000815111610bd75760405162461bcd60e51b8152600401610068906113a0565b6000610be16104c4565b90506001600160a01b03831615610c0a5760405162461bcd60e51b81526004016100689061166d565b60005b8251811015610c89576000838281518110610c3857634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b0316610c748183610dd8565b50508080610c8190611728565b915050610c0d565b50505050565b6001600160a01b038216610cc157805115610cbc5760405162461bcd60e51b8152600401610068906112fd565b610db3565b6000815111610ce25760405162461bcd60e51b815260040161006890611510565b6001600160a01b0382163014610d1457610d148260405180606001604052806028815260200161175a60289139610db7565b600080836001600160a01b031683604051610d2f91906111ce565b600060405180830381855af49150503d8060008114610d6a576040519150601f19603f3d011682016040523d82523d6000602084013e610d6f565b606091505b50909250905081610c8957805115610d9b578060405162461bcd60e51b815260040161006891906112e3565b60405162461bcd60e51b81526004016100689061135a565b5050565b813b8181610c895760405162461bcd60e51b815260040161006891906112e3565b6000610de26104c4565b90506001600160a01b038316610e0a5760405162461bcd60e51b8152600401610068906113eb565b6001600160a01b038316301415610e335760405162461bcd60e51b81526004016100689061156d565b6001600160e01b03198216600090815260208281526040808320546001600160a01b0387168452600180860190935290832054600160a01b90910461ffff169291610e7d916116c3565b9050808214610f85576001600160a01b03851660009081526001840160205260408120805483908110610ec057634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b925082919085908110610f1f57634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b03851660009081526001840160205260409020805480610fbc57634e487b7160e01b600052603160045260246000fd5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080546001600160b01b0319169055806104bd576002830154600090611028906001906116c3565b6001600160a01b038716600090815260018087016020526040909120015490915061ffff1680821461110357600085600201838154811061107957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546002870180546001600160a01b0390921692508291849081106110b857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b8460020180548061112457634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b6040805160608082018352600080835260208301529181019190915290565b6001600160a01b03169052565b600081518084526111ba8160208601602086016116da565b601f01601f19169290920160200192915050565b600082516111e08184602087016116da565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b848110156112b457898303607f19018652815180516001600160a01b0316845284810151898501906003811061125457634e487b7160e01b8c52602160045260248cfd5b858701526040918201519185018a9052815190819052908501908a90898601905b8083101561129f5783516001600160e01b0319168252928701926001929092019190870190611275565b50978601979450505090830190600101611210565b50506112c28289018b611195565b87810360408901526112d4818a6111a2565b9b9a5050505050505050505050565b6000602082526112f660208301846111a2565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656040820152651d995c9d195960d21b606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756040820152663a20b1ba34b7b760c91b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b6020808252818101527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374604082015260600190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201526d3a30b1363290333ab731ba34b7b760911b606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6040820152746e207468617420616c72656164792065786973747360581b606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604082015275657373206d757374206265206164647265737328302960501b606082015260800190565b6000828210156116d5576116d5611743565b500390565b60005b838110156116f55781810151838201526020016116dd565b83811115610c895750506000910152565b600061ffff8083168181141561171e5761171e611743565b6001019392505050565b600060001982141561173c5761173c611743565b5060010190565b634e487b7160e01b600052601160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220991a48ccf95d04c6fbc41dc5d88d2e9e3df219a6ab5d9c3cce53f2c4f8cf9cd064736f6c63430008010033608060405234801561001057600080fd5b506116c4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631f931c1c14610030575b600080fd5b61004361003e366004610e17565b610045565b005b61004d61009e565b61009761005a8587611490565b8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506100ec92505050565b5050505050565b6100a661035a565b600401546001600160a01b03166100bb61037e565b6001600160a01b0316146100ea5760405162461bcd60e51b81526004016100e1906110f4565b60405180910390fd5b565b60005b835181101561030f57600084828151811061011a57634e487b7160e01b600052603260045260246000fd5b60200260200101516020015190506000600281111561014957634e487b7160e01b600052602160045260246000fd5b81600281111561016957634e487b7160e01b600052602160045260246000fd5b14156101d4576101cf85838151811061019257634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106101be57634e487b7160e01b600052603260045260246000fd5b6020026020010151604001516103db565b6102fc565b60018160028111156101f657634e487b7160e01b600052602160045260246000fd5b141561025c576101cf85838151811061021f57634e487b7160e01b600052603260045260246000fd5b60200260200101516000015186848151811061024b57634e487b7160e01b600052603260045260246000fd5b6020026020010151604001516105fe565b600281600281111561027e57634e487b7160e01b600052602160045260246000fd5b14156102e4576101cf8583815181106102a757634e487b7160e01b600052603260045260246000fd5b6020026020010151600001518684815181106102d357634e487b7160e01b600052603260045260246000fd5b60200260200101516040015161083b565b60405162461bcd60e51b81526004016100e1906111de565b5080610307816115fb565b9150506100ef565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161034393929190610f3e565b60405180910390a16103558282610914565b505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b6000333014156103d557600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506103d89050565b50335b90565b60008151116103fc5760405162461bcd60e51b81526004016100e190611136565b600061040661035a565b90506001600160a01b03831661042e5760405162461bcd60e51b81526004016100e190611225565b6001600160a01b038316600090815260018201602052604090205461ffff81166104d0576104748460405180606001604052806024815260200161166b60249139610a3c565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156100975760008482815181106104fe57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0316801561054e5760405162461bcd60e51b81526004016100e19061131c565b6001600160a01b03871660008181526001878101602090815260408084208054938401815584528184206008840401805463ffffffff60079095166004026101000a948502191660e089901c94909402939093179092556001600160e01b031986168352889052902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff871602179055836105e6816115d9565b945050505080806105f6906115fb565b9150506104d3565b600081511161061f5760405162461bcd60e51b81526004016100e190611136565b600061062961035a565b90506001600160a01b0383166106515760405162461bcd60e51b81526004016100e190611225565b6001600160a01b038316600090815260018201602052604090205461ffff81166106f3576106978460405180606001604052806024815260200161166b60249139610a3c565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b835181101561009757600084828151811061072157634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b039081169087168114156107775760405162461bcd60e51b81526004016100e190611371565b6107818183610a5d565b6001600160e01b03198216600081815260208781526040808320805461ffff60a01b1916600160a01b61ffff8b16021781556001600160a01b038c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b03191617905583610823816115d9565b94505050508080610833906115fb565b9150506106f6565b600081511161085c5760405162461bcd60e51b81526004016100e190611136565b600061086661035a565b90506001600160a01b0383161561088f5760405162461bcd60e51b81526004016100e1906113ce565b60005b825181101561090e5760008382815181106108bd57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b03166108f98183610a5d565b50508080610906906115fb565b915050610892565b50505050565b6001600160a01b038216610946578051156109415760405162461bcd60e51b81526004016100e190611051565b610a38565b60008151116109675760405162461bcd60e51b81526004016100e190611271565b6001600160a01b0382163014610999576109998260405180606001604052806028815260200161164360289139610a3c565b600080836001600160a01b0316836040516109b49190610f22565b600060405180830381855af49150503d80600081146109ef576040519150601f19603f3d011682016040523d82523d6000602084013e6109f4565b606091505b5090925090508161090e57805115610a20578060405162461bcd60e51b81526004016100e19190611037565b60405162461bcd60e51b81526004016100e1906110ae565b5050565b813b818161090e5760405162461bcd60e51b81526004016100e19190611037565b6000610a6761035a565b90506001600160a01b038316610a8f5760405162461bcd60e51b81526004016100e190611181565b6001600160a01b038316301415610ab85760405162461bcd60e51b81526004016100e1906112ce565b6001600160e01b03198216600090815260208281526040808320546001600160a01b0387168452600180860190935290832054600160a01b90910461ffff169291610b0291611479565b9050808214610c0a576001600160a01b03851660009081526001840160205260408120805483908110610b4557634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b925082919085908110610ba457634e487b7160e01b600052603260045260246000fd5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b03851660009081526001840160205260409020805480610c4157634e487b7160e01b600052603160045260246000fd5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080546001600160b01b031916905580610097576002830154600090610cad90600190611479565b6001600160a01b038716600090815260018087016020526040909120015490915061ffff16808214610d88576000856002018381548110610cfe57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546002870180546001600160a01b039092169250829184908110610d3d57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b84600201805480610da957634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b80356001600160a01b0381168114610e1257600080fd5b919050565b600080600080600060608688031215610e2e578081fd5b853567ffffffffffffffff80821115610e45578283fd5b818801915088601f830112610e58578283fd5b813581811115610e66578384fd5b60208a818284028601011115610e7a578485fd5b8084019850819750610e8d818b01610dfb565b965060408a0135935082841115610ea2578485fd5b838a0193508a601f850112610eb5578485fd5b8335915082821115610ec5578485fd5b8a81838601011115610ed5578485fd5b979a96995094975050909401935090919050565b6001600160a01b03169052565b60008151808452610f0e8160208601602086016115ad565b601f01601f19169290920160200192915050565b60008251610f348184602087016115ad565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b8481101561100857898303607f19018652815180516001600160a01b03168452848101518985019060038110610fa857634e487b7160e01b8c52602160045260248cfd5b858701526040918201519185018a9052815190819052908501908a90898601905b80831015610ff35783516001600160e01b0319168252928701926001929092019190870190610fc9565b50978601979450505090830190600101610f64565b50506110168289018b610ee9565b8781036040890152611028818a610ef6565b9b9a5050505050505050505050565b60006020825261104a6020830184610ef6565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656040820152651d995c9d195960d21b606082015260800190565b60208082526022908201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60408201526132b960f11b606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756040820152663a20b1ba34b7b760c91b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201526d3a30b1363290333ab731ba34b7b760911b606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6040820152746e207468617420616c72656164792065786973747360581b606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604082015275657373206d757374206265206164647265737328302960501b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561144d5761144d61162c565b604052919050565b600067ffffffffffffffff82111561146f5761146f61162c565b5060209081020190565b60008282101561148b5761148b611616565b500390565b60006114a361149e84611455565b611424565b8381526020808201919084845b878110156115a1578135870160608082360312156114cc578788fd5b6114d581611424565b90506114e082610dfb565b815284820135600381106114f2578889fd5b8186015260408281013567ffffffffffffffff81111561151057898afd5b929092019136601f840112611523578889fd5b823561153161149e82611455565b81815287810190858901368a850288018b01111561154d578c8dfd5b8c96505b838710156115845780356001600160e01b031981168114611570578d8efd5b835260019690960195918901918901611551565b5092840192909252505086525093820193908201906001016114b0565b50919695505050505050565b60005b838110156115c85781810151838201526020016115b0565b8381111561090e5750506000910152565b600061ffff808316818114156115f1576115f1611616565b6001019392505050565b600060001982141561160f5761160f611616565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220d92c2242b54ddf70b61c6705a16641c554201aeab7b3b82072c87efc6eac051064736f6c63430008010033608060405234801561001057600080fd5b5061066e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806301ffc9a71461005c57806352ef6b2c146100855780637a0ed6271461009a578063adfca15e146100af578063cdffacc6146100cf575b600080fd5b61006f61006a3660046104ac565b6100ef565b60405161007c9190610606565b60405180910390f35b61008d610122565b60405161007c919061052c565b6100a261018e565b60405161007c919061058c565b6100c26100bd36600461047e565b610363565b60405161007c9190610579565b6100e26100dd3660046104ac565b61040d565b60405161007c9190610518565b6000806100fa610442565b6001600160e01b0319841660009081526003909101602052604090205460ff16915050919050565b6060600061012e610442565b6002810180546040805160208084028201810190925282815293945083018282801561018357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610165575b505050505091505090565b6060600061019a610442565b60028101549091508067ffffffffffffffff8111156101c957634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561020257816020015b6101ef610466565b8152602001906001900390816101e75790505b50925060005b8181101561035d57600083600201828154811061023557634e487b7160e01b600052603260045260246000fd5b9060005260206000200160009054906101000a90046001600160a01b031690508085838151811061027657634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561031557602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116102d75790505b505050505085838151811061033a57634e487b7160e01b600052603260045260246000fd5b60200260200101516020018190525050808061035590610611565b915050610208565b50505090565b6060600061036f610442565b6001600160a01b0384166000908152600182016020908152604091829020805483518184028101840190945280845293945091929083018282801561040057602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116103c25790505b5050505050915050919050565b600080610418610442565b6001600160e01b03199093166000908152602093909352505060409020546001600160a01b031690565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60408051808201909152600081526060602082015290565b60006020828403121561048f578081fd5b81356001600160a01b03811681146104a5578182fd5b9392505050565b6000602082840312156104bd578081fd5b81356001600160e01b0319811681146104a5578182fd5b6000815180845260208085019450808401835b8381101561050d5781516001600160e01b031916875295820195908201906001016104e7565b509495945050505050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b8181101561056d5783516001600160a01b031683529284019291840191600101610548565b50909695505050505050565b6000602082526104a560208301846104d4565b60208082528251828201819052600091906040908185019080840286018301878501865b838110156105f857888303603f19018552815180516001600160a01b031684528701518784018790526105e5878501826104d4565b95880195935050908601906001016105b0565b509098975050505050505050565b901515815260200190565b600060001982141561063157634e487b7160e01b81526011600452602481fd5b506001019056fea2646970667358221220e974872b33a9693d2454ffea8295365d6ebcbeb98aa6df766605c218fab9a65a64736f6c63430008010033608060405234801561001057600080fd5b50610296806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80638da5cb5b1461003b578063f2fde38b14610059575b600080fd5b61004361006e565b604051610050919061020a565b60405180910390f35b61006c6100673660046101dc565b61007d565b005b6000610078610091565b905090565b6100856100ad565b61008e816100fb565b50565b600061009b61015b565b600401546001600160a01b0316919050565b6100b561015b565b600401546001600160a01b03166100ca61017f565b6001600160a01b0316146100f95760405162461bcd60e51b81526004016100f09061021e565b60405180910390fd5b565b600061010561015b565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b6000333014156101d657600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506101d99050565b50335b90565b6000602082840312156101ed578081fd5b81356001600160a01b0381168114610203578182fd5b9392505050565b6001600160a01b0391909116815260200190565b60208082526022908201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60408201526132b960f11b60608201526080019056fea2646970667358221220e271d514a26b086cf723d279217d51c7e4c57ca51ff9152a4bf0a36b2bf8a55764736f6c634300080100334c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465000000000000000000000000819c3fc356bb319035f9d2886fac9e57df0343f5
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000819c3fc356bb319035f9d2886fac9e57df0343f5
-----Decoded View---------------
Arg [0] : _contractOwner (address): 0x819c3fc356bb319035f9d2886fac9e57df0343f5
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000819c3fc356bb319035f9d2886fac9e57df0343f5
Deployed ByteCode Sourcemap
21817:1184:0:-:0;;;;;22246:36;22468:7;;-1:-1:-1;;;;;;22468:7:0;22438:38;;5411:45;22438:38;;;;;;;:51;5411:45;;-1:-1:-1;;;;;22438:51:0;;22500:64;;;;-1:-1:-1;;;22500:64:0;;;;;;;:::i;:::-;;;;;;;;;22618:14;22615:1;22612;22599:34;22710:1;22707;22691:14;22688:1;22681:5;22674;22661:51;22747:16;22744:1;22741;22726:38;22785:6;22809:76;;;;22944:16;22941:1;22934:27;22809:76;22849:16;22846:1;22839:27;6805:269;6870:25;6898:16;:14;:16::i;:::-;6949;;;;;-1:-1:-1;;;;;6976:28:0;;;-1:-1:-1;;;;;;6976:28:0;;;;;;;7020:46;;6870:44;;-1:-1:-1;6949:16:0;;;;7020:46;;6925:21;;7020:46;6805:269;;;:::o;7496:1477::-;7694:29;;;7721:1;7694:29;;;;;;;;;7658:33;;7694:29;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;7770:15:0;;;7783:1;7770:15;;;;;;;;;7658:65;;-1:-1:-1;7734:33:0;;7770:15;;;;;;;;;;;;-1:-1:-1;7770:15:0;7734:51;;7819:31;;;7796:17;7814:1;7796:20;;;;;;-1:-1:-1;;;7796:20:0;;;;;;;;;-1:-1:-1;;;;;;7796:54:0;;;:20;;;;;;;;;;:54;7870:132;;;;;;;;;-1:-1:-1;;;;;7870:132:0;;;;;;;-1:-1:-1;7870:132:0;;;;7983:17;7870:132;;;7861:3;7865:1;7861:6;;;;;;-1:-1:-1;;;7861:6:0;;;;;;;;;;;;;;;;;;:141;8033:15;;;8046:1;8033:15;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8033:15:0;8013:35;;8082:29;;;8059:17;8077:1;8059:20;;;;;;-1:-1:-1;;;8059:20:0;;;;;;;;;-1:-1:-1;;;;;;8059:52:0;;;:20;;;;;;;;;;;:52;8122:20;;-1:-1:-1;;;8145:45:0;8122:17;;8140:1;;8122:20;;;;-1:-1:-1;;;8122:20:0;;;;;;;;;-1:-1:-1;;;;;;8122:68:0;;;:20;;;;;;;;;;;:68;8201:20;;-1:-1:-1;;;8224:37:0;8201:17;;8219:1;;8201:20;;;;-1:-1:-1;;;8201:20:0;;;;;;;;;-1:-1:-1;;;;;;8201:60:0;;;:20;;;;;;;;;;;:60;8272:20;;-1:-1:-1;;;8295:35:0;8272:17;;8290:1;;8272:20;;;;-1:-1:-1;;;8272:20:0;;;;;;;;;-1:-1:-1;;;;;;8272:58:0;;;:20;;;;;;;;;;;:58;8341:20;;-1:-1:-1;;;8364:34:0;8341:17;;8359:1;;8341:20;;;;-1:-1:-1;;;8341:20:0;;;;;;;;;-1:-1:-1;;;;;;8341:57:0;;;:20;;;;;;;;;;:57;8418:184;;;;;;;;;-1:-1:-1;;;;;8418:184:0;;;;;;;-1:-1:-1;8418:184:0;;;;8573:17;8418:184;;;8409:3;8413:1;8409:6;;;;;;-1:-1:-1;;;8409:6:0;;;;;;;;;;;;;;;;;;:193;8633:15;;;8646:1;8633:15;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8633:15:0;8613:35;;8682:34;;;8659:17;8677:1;8659:20;;;;;;-1:-1:-1;;;8659:20:0;;;;;;;;;-1:-1:-1;;;;;;8659:57:0;;;:20;;;;;;;;;;;:57;8727:20;;-1:-1:-1;;;8750:22:0;8727:17;;8745:1;;8727:20;;;;-1:-1:-1;;;8727:20:0;;;;;;;;;-1:-1:-1;;;;;;8727:45:0;;;:20;;;;;;;;;;:45;8792:131;;;;;;;;;-1:-1:-1;;;;;8792:131:0;;;;;;;-1:-1:-1;8792:131:0;;;;8904:17;8792:131;;;8783:3;8787:1;8783:6;;;;;;-1:-1:-1;;;8783:6:0;;;;;;;;;;;;;;:140;;;;8934:31;8945:3;8958:1;8934:31;;;;;;;;;;;;:10;:31::i;:::-;7496:1477;;;;;:::o;6503:202::-;5411:45;;6653:::o;9029:1086::-;9190:18;9185:817;9223:11;:18;9210:10;:31;9185:817;;;9272:33;9308:11;9320:10;9308:23;;;;;;-1:-1:-1;;;9308:23:0;;;;;;;;;;;;;;;:30;;;9272:66;;9367:30;9357:40;;;;;;-1:-1:-1;;;9357:40:0;;;;;;;;;:6;:40;;;;;;-1:-1:-1;;;9357:40:0;;;;;;;;;;9353:638;;;9418:93;9431:11;9443:10;9431:23;;;;;;-1:-1:-1;;;9431:23:0;;;;;;;;;;;;;;;:36;;;9469:11;9481:10;9469:23;;;;;;-1:-1:-1;;;9469:23:0;;;;;;;;;;;;;;;:41;;;9418:12;:93::i;:::-;9353:638;;;9547:34;9537:6;:44;;;;;;-1:-1:-1;;;9537:44:0;;;;;;;;;;9533:458;;;9602:97;9619:11;9631:10;9619:23;;;;;;-1:-1:-1;;;9619:23:0;;;;;;;;;;;;;;;:36;;;9657:11;9669:10;9657:23;;;;;;-1:-1:-1;;;9657:23:0;;;;;;;;;;;;;;;:41;;;9602:16;:97::i;9533:458::-;9735:33;9725:6;:43;;;;;;-1:-1:-1;;;9725:43:0;;;;;;;;;;9721:270;;;9789:96;9805:11;9817:10;9805:23;;;;;;-1:-1:-1;;;9805:23:0;;;;;;;;;;;;;;;:36;;;9843:11;9855:10;9843:23;;;;;;-1:-1:-1;;;9843:23:0;;;;;;;;;;;;;;;:41;;;9789:15;:96::i;9721:270::-;9926:49;;-1:-1:-1;;;9926:49:0;;;;;;;:::i;9721:270::-;-1:-1:-1;9243:12:0;;;;:::i;:::-;;;;9185:817;;;;10017:41;10028:11;10041:5;10048:9;10017:41;;;;;;;;:::i;:::-;;;;;;;;10069:38;10090:5;10097:9;10069:20;:38::i;:::-;9029:1086;;;:::o;10123:1572::-;10260:1;10232:18;:25;:29;10224:85;;;;-1:-1:-1;;;10224:85:0;;;;;;;:::i;:::-;10320:25;10348:16;:14;:16::i;:::-;10320:44;-1:-1:-1;;;;;;10461:27:0;;10453:84;;;;-1:-1:-1;;;10453:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10581:40:0;;10548:23;10581:40;;;:25;;;:40;;;;;:65;10717:21;;;10713:294;;10755:77;10778:13;10755:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;10918:17;;;:24;;-1:-1:-1;;;;;10847:40:0;;;;;;:25;;;;:40;;;;;;;:61;;:96;;-1:-1:-1;;10847:96:0;;;;;;;;;;;;10958:37;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10958:37:0;;;;;;10713:294;11022:21;11017:671;11061:18;:25;11045:13;:41;11017:671;;;11120:15;11138:18;11157:13;11138:33;;;;;;-1:-1:-1;;;11138:33:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11212:39:0;;11186:23;11212:39;;;;;;;;;;;:52;11138:33;;-1:-1:-1;;;;;;11212:52:0;11287:29;;11279:95;;;;-1:-1:-1;;;11279:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11389:40:0;;;;;;:25;;;;:40;;;;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11477:39:0;;;;;;;;;:68;;-1:-1:-1;;;;;;11477:68:0;;;;-1:-1:-1;;;;11560:83:0;-1:-1:-1;;;11560:83:0;;;;;;;;11658:18;11560:83;11658:18;:::i;:::-;;;;11017:671;;11088:15;;;;;:::i;:::-;;;;11017:671;;11703:1589;11844:1;11816:18;:25;:29;11808:85;;;;-1:-1:-1;;;11808:85:0;;;;;;;:::i;:::-;11904:25;11932:16;:14;:16::i;:::-;11904:44;-1:-1:-1;;;;;;11967:27:0;;11959:84;;;;-1:-1:-1;;;11959:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12087:40:0;;12054:23;12087:40;;;:25;;;:40;;;;;:65;12223:21;;;12219:294;;12261:77;12284:13;12261:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;12424:17;;;:24;;-1:-1:-1;;;;;12353:40:0;;;;;;:25;;;;:40;;;;;;;:61;;:96;;-1:-1:-1;;12353:96:0;;;;;;;;;;;;12464:37;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12464:37:0;;;;;;12219:294;12528:21;12523:762;12567:18;:25;12551:13;:41;12523:762;;;12626:15;12644:18;12663:13;12644:33;;;;;;-1:-1:-1;;;12644:33:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12718:39:0;;12692:23;12718:39;;;;;;;;;;;:52;12644:33;;-1:-1:-1;;;;;;12718:52:0;;;;12793:32;;;;;12785:101;;;;-1:-1:-1;;;12785:101:0;;;;;;;:::i;:::-;12901:41;12916:15;12933:8;12901:14;:41::i;:::-;-1:-1:-1;;;;;;12986:39:0;;:29;:39;;;;;;;;;;;:83;;-1:-1:-1;;;;12986:83:0;-1:-1:-1;;;12986:83:0;;;;;;;-1:-1:-1;;;;;13084:40:0;;;;;-1:-1:-1;13084:25:0;;;:40;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;;12986:83;13084:73;;;;;;;;;;;;;;;;;;;;;13172:39;;;;;;;:68;;-1:-1:-1;;;;;;13172:68:0;;;;12986:83;13255:18;12986:83;13255:18;:::i;:::-;;;;12523:762;;12594:15;;;;;:::i;:::-;;;;12523:762;;13300:748;13440:1;13412:18;:25;:29;13404:85;;;;-1:-1:-1;;;13404:85:0;;;;;;;:::i;:::-;13500:25;13528:16;:14;:16::i;:::-;13500:44;-1:-1:-1;;;;;;13629:27:0;;;13621:94;;;;-1:-1:-1;;;13621:94:0;;;;;;;:::i;:::-;13731:21;13726:315;13770:18;:25;13754:13;:41;13726:315;;;13829:15;13847:18;13866:13;13847:33;;;;;;-1:-1:-1;;;13847:33:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13921:39:0;;13895:23;13921:39;;;;;;;;;;;:52;13847:33;;-1:-1:-1;;;;;;13921:52:0;13988:41;13921:52;13847:33;13988:14;:41::i;:::-;13726:315;;13797:15;;;;;:::i;:::-;;;;13726:315;;;;13300:748;;;:::o;16312:897::-;-1:-1:-1;;;;;16405:19:0;;16401:801;;16449:16;;:21;16441:94;;;;-1:-1:-1;;;16441:94:0;;;;;;;:::i;:::-;16401:801;;;16595:1;16576:9;:16;:20;16568:94;;;;-1:-1:-1;;;16568:94:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16681:22:0;;16698:4;16681:22;16677:136;;16724:73;16747:5;16724:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;16828:12;16842:18;16864:5;-1:-1:-1;;;;;16864:18:0;16883:9;16864:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16827:66:0;;-1:-1:-1;16827:66:0;-1:-1:-1;16912:16:0;16908:283;;16953:12;;:16;16949:227;;17052:5;17038:21;;-1:-1:-1;;;17038:21:0;;;;;;;;:::i;16949:227::-;17108:48;;-1:-1:-1;;;17108:48:0;;;;;;;:::i;16401:801::-;16312:897;;:::o;17217:268::-;17393:22;;17463:13;17444:17;17436:41;;;;-1:-1:-1;;;17436:41:0;;;;;;;;:::i;14056:2248::-;14141:25;14169:16;:14;:16::i;:::-;14141:44;-1:-1:-1;;;;;;14204:27:0;;14196:95;;;;-1:-1:-1;;;14196:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14388:30:0;;14413:4;14388:30;;14380:89;;;;-1:-1:-1;;;14380:89:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;14582:40:0;;14555:24;14582:40;;;;;;;;;;;:65;-1:-1:-1;;;;;14689:40:0;;;;14757:1;14689:25;;;:40;;;;;;:65;-1:-1:-1;;;14582:65:0;;;;;;14555:24;14689:69;;;:::i;:::-;14658:100;;14862:20;14842:16;:40;14838:391;;-1:-1:-1;;;;;14921:40:0;;14899:19;14921:40;;;:25;;;:40;;;;;:80;;14980:20;;14921:80;;;;-1:-1:-1;;;14921:80:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15016:40:0;;;;:25;;;:40;;;;;;;:76;;14921:80;;;;;;;;;;;;;;-1:-1:-1;14921:80:0;;15016:40;15075:16;;15016:76;;;;-1:-1:-1;;;15016:76:0;;;;;;;;;;;;;;;;;;;;;:91;;;:76;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15122:43:0;;;;;;;;;;;;:95;;-1:-1:-1;;;;15122:95:0;-1:-1:-1;;;15122:95:0;;;;;;;14838:391;-1:-1:-1;;;;;15276:40:0;;;;;;:25;;;:40;;;;;:64;;;;;-1:-1:-1;;;15276:64:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;15276:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15358:40:0;;;;;;;;;;15351:47;;-1:-1:-1;;;;;;15351:47:0;;;15496:25;15492:805;;15665:17;;;:24;15630:32;;15665:28;;15692:1;;15665:28;:::i;:::-;-1:-1:-1;;;;;15739:40:0;;15708:28;15739:40;;;:25;;;;:40;;;;;;:61;;15630:63;;-1:-1:-1;15739:61:0;;15819:48;;;15815:350;;15888:24;15915:2;:17;;15933:24;15915:43;;;;;;-1:-1:-1;;;15915:43:0;;;;;;;;;;;;;;;;;;;15977:17;;;:39;;-1:-1:-1;;;;;15915:43:0;;;;-1:-1:-1;15915:43:0;;15995:20;;15977:39;;;;-1:-1:-1;;;15977:39:0;;;;;;;;;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;15977:58:0;-1:-1:-1;;;;;15977:58:0;;;;;;16054:43;;;;;;-1:-1:-1;16054:25:0;;;:43;;;;;;:64;:95;;-1:-1:-1;;16054:95:0;;;;;;;15815:350;16179:2;:17;;:23;;;;;-1:-1:-1;;;16179:23:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16179:23:0;;;;;-1:-1:-1;;;;;;16179:23:0;;;;;;;;;-1:-1:-1;;;;;16224:40:0;;;;16179:23;16224:25;;;:40;;;;;;;:61;16217:68;;-1:-1:-1;;16217:68:0;;;-1:-1:-1;;14056:2248:0;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:106:1:-;-1:-1:-1;;;;;82:31:1;70:44;;60:60::o;125:259::-;;206:5;200:12;233:6;228:3;221:19;249:63;305:6;298:4;293:3;289:14;282:4;275:5;271:16;249:63;:::i;:::-;366:2;345:15;-1:-1:-1;;341:29:1;332:39;;;;373:4;328:50;;176:208;-1:-1:-1;;176:208:1:o;389:274::-;;556:6;550:13;572:53;618:6;613:3;606:4;598:6;594:17;572:53;:::i;:::-;641:16;;;;;526:137;-1:-1:-1;;526:137:1:o;668:2103::-;961:2;1013:21;;;1083:13;;986:18;;;1105:22;;;668:2103;;961:2;1146:3;;1165:18;;;;1202:4;1248:15;;;1233:31;;1229:40;;1292:15;;;668:2103;1338:1258;1352:6;1349:1;1346:13;1338:1258;;;1417:22;;;-1:-1:-1;;1413:37:1;1401:50;;1474:13;;1561:9;;-1:-1:-1;;;;;1557:35:1;1542:51;;1632:11;;;1626:18;1514:15;;;;1684:1;1667:19;;1657:2;;-1:-1:-1;;;1718:34:1;;1779:4;1776:1;1769:15;1814:4;1725;1801:18;1657:2;1853:15;;;1846:37;1906:4;1951:11;;;1945:18;1983:15;;;1976:27;;;2064:21;;2098:24;;;;2188:23;;;;2235:4;;2144:15;;;;2252:236;2268:8;2263:3;2260:17;2252:236;;;2349:15;;-1:-1:-1;;;;;;2345:42:1;2331:57;;2457:17;;;;2296:1;2287:11;;;;;2414:14;;;;2252:236;;;-1:-1:-1;2574:12:1;;;;2511:5;-1:-1:-1;;;2539:15:1;;;;1374:1;1367:9;1338:1258;;;1342:3;;2605:48;2649:2;2638:9;2634:18;2626:6;2605:48;:::i;:::-;2703:9;2695:6;2691:22;2684:4;2673:9;2669:20;2662:52;2731:34;2758:6;2750;2731:34;:::i;:::-;2723:42;941:1830;-1:-1:-1;;;;;;;;;;;941:1830:1:o;2776:221::-;;2925:2;2914:9;2907:21;2945:46;2987:2;2976:9;2972:18;2964:6;2945:46;:::i;:::-;2937:54;2897:100;-1:-1:-1;;;2897:100:1:o;3002:424::-;3204:2;3186:21;;;3243:2;3223:18;;;3216:30;3282:34;3277:2;3262:18;;3255:62;3353:30;3348:2;3333:18;;3326:58;3416:3;3401:19;;3176:250::o;3431:402::-;3633:2;3615:21;;;3672:2;3652:18;;;3645:30;3711:34;3706:2;3691:18;;3684:62;-1:-1:-1;;;3777:2:1;3762:18;;3755:36;3823:3;3808:19;;3605:228::o;3838:407::-;4040:2;4022:21;;;4079:2;4059:18;;;4052:30;4118:34;4113:2;4098:18;;4091:62;-1:-1:-1;;;4184:2:1;4169:18;;4162:41;4235:3;4220:19;;4012:233::o;4250:419::-;4452:2;4434:21;;;4491:2;4471:18;;;4464:30;4530:34;4525:2;4510:18;;4503:62;4601:25;4596:2;4581:18;;4574:53;4659:3;4644:19;;4424:245::o;4674:403::-;4876:2;4858:21;;;4915:2;4895:18;;;4888:30;4954:34;4949:2;4934:18;;4927:62;-1:-1:-1;;;5020:2:1;5005:18;;4998:37;5067:3;5052:19;;4848:229::o;5082:408::-;5284:2;5266:21;;;5323:2;5303:18;;;5296:30;5362:34;5357:2;5342:18;;5335:62;-1:-1:-1;;;5428:2:1;5413:18;;5406:42;5480:3;5465:19;;5256:234::o;5495:356::-;5697:2;5679:21;;;5716:18;;;5709:30;5775:34;5770:2;5755:18;;5748:62;5842:2;5827:18;;5669:182::o;5856:425::-;6058:2;6040:21;;;6097:2;6077:18;;;6070:30;6136:34;6131:2;6116:18;;6109:62;6207:31;6202:2;6187:18;;6180:59;6271:3;6256:19;;6030:251::o;6286:410::-;6488:2;6470:21;;;6527:2;6507:18;;;6500:30;6566:34;6561:2;6546:18;;6539:62;-1:-1:-1;;;6632:2:1;6617:18;;6610:44;6686:3;6671:19;;6460:236::o;6701:417::-;6903:2;6885:21;;;6942:2;6922:18;;;6915:30;6981:34;6976:2;6961:18;;6954:62;-1:-1:-1;;;7047:2:1;7032:18;;7025:51;7108:3;7093:19;;6875:243::o;7123:420::-;7325:2;7307:21;;;7364:2;7344:18;;;7337:30;7403:34;7398:2;7383:18;;7376:62;7474:26;7469:2;7454:18;;7447:54;7533:3;7518:19;;7297:246::o;7548:418::-;7750:2;7732:21;;;7789:2;7769:18;;;7762:30;7828:34;7823:2;7808:18;;7801:62;-1:-1:-1;;;7894:2:1;7879:18;;7872:52;7956:3;7941:19;;7722:244::o;7971:125::-;;8039:1;8036;8033:8;8030:2;;;8044:18;;:::i;:::-;-1:-1:-1;8081:9:1;;8020:76::o;8101:258::-;8173:1;8183:113;8197:6;8194:1;8191:13;8183:113;;;8273:11;;;8267:18;8254:11;;;8247:39;8219:2;8212:10;8183:113;;;8314:6;8311:1;8308:13;8305:2;;;-1:-1:-1;;8349:1:1;8331:16;;8324:27;8154:205::o;8364:197::-;;8430:6;8471:2;8464:5;8460:14;8498:2;8489:7;8486:15;8483:2;;;8504:18;;:::i;:::-;8553:1;8540:15;;8410:151;-1:-1:-1;;;8410:151:1:o;8566:135::-;;-1:-1:-1;;8626:17:1;;8623:2;;;8646:18;;:::i;:::-;-1:-1:-1;8693:1:1;8682:13;;8613:88::o;8706:127::-;8767:10;8762:3;8758:20;8755:1;8748:31;8798:4;8795:1;8788:15;8822:4;8819:1;8812:15
Swarm Source
ipfs://e271d514a26b086cf723d279217d51c7e4c57ca51ff9152a4bf0a36b2bf8a557
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.