Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DroppableEditionsLogic
Compiler Version
v0.8.6+commit.11564f7e
Optimization Enabled:
Yes with 2000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.6; import {IERC721, IERC721Events, IERC721Receiver, IERC721Metadata, IERC165} from "../../../external/interface/IERC721.sol"; import {IERC2309} from "../../../external/interface/IERC2309.sol"; import {ITreasuryConfig} from "../../../interface/ITreasuryConfig.sol"; import {IMirrorTreasury} from "../../../interface/IMirrorTreasury.sol"; import {InitializedGovernable} from "../../../lib/InitializedGovernable.sol"; import {Pausable} from "../../../lib/Pausable.sol"; import {Reentrancy} from "../../../lib/Reentrancy.sol"; import {DroppableEditionsStorage} from "./DroppableEditionsStorage.sol"; import {IDroppableEditionsLogicEvents} from "./interface/IDroppableEditionsLogic.sol"; import {IProxyRegistry} from '../../../external/opensea/IProxyRegistry.sol'; /** * @title DroppableEditionsLogic * @author MirrorXYZ */ contract DroppableEditionsLogic is DroppableEditionsStorage, InitializedGovernable, Pausable, IDroppableEditionsLogicEvents, IERC721, IERC721Events, IERC165, IERC721Metadata, IERC2309, Reentrancy { /// @notice IERC721Metadata string public override name; string public override symbol; constructor( address owner_, address governor_, address proxyRegistry_ ) InitializedGovernable(owner_, governor_) Pausable(true) { proxyRegistry = proxyRegistry_; } // ============ Pause Methods ============ /// @notice pause purchases function pause() public onlyGovernance { _pause(); } /// @notice unpause purchases function unpause() public onlyGovernance { _unpause(); } // ============ Edition Methods ============ function purchase(address recipient) external payable whenNotPaused returns (uint256 tokenId) { // Check that recipient has not already purchased require(!purchased[recipient], "already purchased"); // Check that enough funds have been sent to purchase an edition. require(msg.value >= price, "insufficient funds"); // Track and update token id. tokenId = allocation + nonAllocatedPurchases; // Check that there are still tokens available to purchase. require(tokenId < quantity, "sold out"); // Mint a new token for the sender, using the `tokenId`. purchased[recipient] = true; _mint(recipient, tokenId); emit EditionPurchased(tokenId, msg.value, msg.sender, recipient); nonAllocatedPurchases += 1; } // ============ NFT Methods ============ function supportsInterface(bytes4 interfaceId) public pure override returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC165).interfaceId; } function balanceOf(address owner_) public view override returns (uint256) { require( owner_ != address(0), "zero address" ); return _balances[owner_]; } function burn(uint256 tokenId) public { require( _isApprovedOrOwner(msg.sender, tokenId), "not approved" ); _burn(tokenId); } function transferFrom( address from, address to, uint256 tokenId ) public override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(msg.sender, tokenId), "not approved" ); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { require( _isApprovedOrOwner(msg.sender, tokenId), "not approved" ); _safeTransfer(from, to, tokenId, _data); } function tokenURI(uint256 tokenId) public view override returns (string memory) { return string(abi.encodePacked(baseURI, _toString(tokenId))); } function approve(address to, uint256 tokenId) public override { address owner = ownerOf(tokenId); require(to != owner, "current owner"); require( msg.sender == owner || isApprovedForAll(owner, msg.sender), "not approved" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view override returns (address) { require( _exists(tokenId), "nonexistent" ); return _tokenApprovals[tokenId]; } function setApprovalForAll(address approver, bool approved) public override { require(approver != msg.sender, "approve to caller"); _operatorApprovals[msg.sender][approver] = approved; emit ApprovalForAll(msg.sender, approver, approved); } /** * @notice OpenSea proxy contracts are approved by default. */ function isApprovedForAll(address owner, address operator) public view override returns (bool) { // Approve all OpenSea proxy contracts for easy trading. if (IProxyRegistry(proxyRegistry).proxies(owner) == operator) { return true; } return _operatorApprovals[owner][operator]; } /// @notice e.g. https://mirror-api.com/editions/metadata function contractURI() public view returns (string memory) { return string(abi.encodePacked(baseURI, "metadata")); } /** * @notice The hash of the given content for the NFT. Can be used * for IPFS storage, verifying authenticity, etc. */ function getContentHash(uint256) public view returns (bytes32) { return contentHash; } // ============ Operational Methods ============ function withdrawFunds() external Reentrancy.nonReentrant { // Transfer the fee to the treasury. // Treasury fee is paid first for efficiency, so we don't have to calculate // the fee and the revenue amount. Also prevents a reentrancy attack scenario that // avoids paying treasury. uint256 fee = feeAmount(address(this).balance); IMirrorTreasury(ITreasuryConfig(treasuryConfig).treasury()) .contribute{value: fee}(fee); // Transfer the remaining available balance to the fundingRecipient. _sendFunds(fundingRecipient, address(this).balance); } function feeAmount(uint256 amount) public view returns (uint256) { return (feePercentage * amount) / 10000; } // ============ Admin Methods ============ function changeBaseURI(string memory baseURI_) public onlyGovernance { baseURI = baseURI_; } // ============ Drop Distribution Methods ============ function purchaseWithProof( address account, uint256 allocation, uint256 price, uint256 index, bytes32[] calldata merkleProof ) external payable { require(price * allocation <= msg.value, "insufficient funds"); require( !isClaimed(index, account), "already claimed" ); setClaimed(index, account); require( verifyProof( merkleProof, merkleRoot, getNode(index, price, account, allocation) ), "invalid proof" ); // "MINT" indexToClaimer[currentIndexId] = account; currentIndexId += 1; claimerToAllocation[account] = allocation; claimedTokens += allocation; _balances[account] += allocation; emit ConsecutiveTransfer( nextTokenId, nextTokenId + allocation - 1, address(0), account ); nextTokenId += allocation; } function ownerOf(uint256 tokenId) public view override returns (address owner) { // Check if we are referring to a token that was preallocated. if (tokenId < allocation) { // It may have not been claimed. require(tokenId < claimedTokens, "nonexistent"); // Check if this token was allocated but then burned. require(!_burned[tokenId], "nonexistent"); // Check if this token was allocated and then transferred. if (_owners[tokenId] != address(0)) { // The token was allocated, but then transferred. return _owners[tokenId]; } // The token has been claimed and not transferred! // We need to find the claimer from this tokenId. uint256 indexTracker; for (uint256 i = 0; i < currentIndexId; i++) { address claimer = indexToClaimer[i]; indexTracker += claimerToAllocation[claimer]; if (tokenId < indexTracker) { return claimer; } } } owner = _owners[tokenId]; require(owner != address(0), "nonexistent"); } function isClaimed(uint256 index, address account) public view returns (bool) { return claimed[getClaimHash(index, account)]; } function setClaimed(uint256 index, address account) private { claimed[getClaimHash(index, account)] = true; } function getClaimHash(uint256 index, address account) private pure returns (bytes32) { return keccak256(abi.encodePacked(index, account)); } function getNode(uint256 index, uint256 price, address account, uint256 allocation) private pure returns (bytes32) { return keccak256(abi.encodePacked(account, allocation, price, index)); } // From https://github.com/protofire/zeppelin-solidity/blob/master/contracts/MerkleProof.sol function verifyProof( bytes32[] memory proof, bytes32 root, bytes32 leaf ) private pure returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256( abi.encodePacked(computedHash, proofElement) ); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256( abi.encodePacked(proofElement, computedHash) ); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } // ============ Private Methods ============ /// @notice from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol function _toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } function _sendFunds(address payable recipient, uint256 amount) private { require( address(this).balance >= amount, "insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require(success, "recipient reverted"); } function _exists(uint256 tokenId) internal view returns (bool) { if (tokenId < allocation && !_burned[tokenId]) { return true; } return _owners[tokenId] != address(0); } function _burn(uint256 tokenId) internal { address owner_ = ownerOf(tokenId); // Clear approvals _approve(address(0), tokenId); if (_balances[owner_] > 0) { _balances[owner_] -= 1; } delete _owners[tokenId]; _burned[tokenId] = true; emit Transfer(owner_, address(0), tokenId); } /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal pure returns (string memory) { return ""; } function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "non ERC721Receiver" ); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) { require( _exists(tokenId), "nonexistent" ); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _mint(address to, uint256 tokenId) internal { require(to != address(0), "zero address"); require(!_exists(tokenId), "already minted"); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } function _transfer( address from, address to, uint256 tokenId ) internal { require( ownerOf(tokenId) == from, "token not owned" ); require( to != address(0), "zero address" ); // Clear approvals from the previous owner _approve(address(0), tokenId); if (_balances[from] > 0) { _balances[from] -= 1; } _owners[tokenId] = to; _balances[to] += 1; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal { _tokenApprovals[tokenId] = to; emit Approval(ownerOf(tokenId), to, tokenId); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (isContract(to)) { try IERC721Receiver(to).onERC721Received( msg.sender, from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "non ERC721Receiver" ); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /// @notice from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/7f6a1666fac8ecff5dd467d0938069bc221ea9e0/contracts/utils/Address.sol function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.6; interface IERC721 { function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId ) external; function transferFrom( address from, address to, uint256 tokenId ) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } interface IERC721Events { event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); } interface IERC721Metadata { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } interface IERC721Burnable is IERC721 { function burn(uint256 tokenId) external; } interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } interface IERC721Royalties { function getFeeRecipients(uint256 id) external view returns (address payable[] memory); function getFeeBps(uint256 id) external view returns (uint256[] memory); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.6; interface IERC2309 { event ConsecutiveTransfer( uint256 indexed fromTokenId, uint256 toTokenId, address indexed fromAddress, address indexed toAddress ); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.6; interface ITreasuryConfig { function treasury() external returns (address payable); function distributionModel() external returns (address); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.6; interface IMirrorTreasury { function transferFunds(address payable to, uint256 value) external; function transferERC20( address token, address to, uint256 value ) external; function contributeWithTributary(address tributary) external payable; function contribute(uint256 amount) external payable; }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.6; import {Ownable} from "../lib/Ownable.sol"; import {IGovernable} from "../lib/interface/IGovernable.sol"; contract InitializedGovernable is Ownable, IGovernable { // ============ Events ============ event GovernorChanged( address indexed previousGovernor, address indexed newGovernor ); // ============ Mutable Storage ============ // Mirror governance contract. address public override governor; // ============ Modifiers ============ modifier onlyGovernance() { require(isOwner() || isGovernor(), "caller is not governance"); _; } modifier onlyGovernor() { require(isGovernor(), "caller is not governor"); _; } // ============ Constructor ============ constructor(address owner_, address governor_) Ownable(owner_) { _setGovernor(governor_); } // ============ Administration ============ function changeGovernor(address governor_) public override onlyGovernance { _setGovernor(governor_); } // ============ Utility Functions ============ function isGovernor() public view override returns (bool) { return msg.sender == governor; } // ============ Internal Functions ============ function _setGovernor(address governor_) internal { emit GovernorChanged(governor, governor_); governor = governor_; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.6; interface IPausableEvents { /// @notice Emitted when the pause is triggered by `account`. event Paused(address account); /// @notice Emitted when the pause is lifted by `account`. event Unpaused(address account); } interface IPausable { function paused() external returns (bool); } contract Pausable is IPausable, IPausableEvents { bool public override paused; // Modifiers modifier whenNotPaused() { require(!paused, "Pausable: paused"); _; } modifier whenPaused() { require(paused, "Pausable: not paused"); _; } /// @notice Initializes the contract in unpaused state. constructor(bool paused_) { paused = paused_; } // ============ Internal Functions ============ function _pause() internal whenNotPaused { paused = true; emit Paused(msg.sender); } function _unpause() internal whenPaused { paused = false; emit Unpaused(msg.sender); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.6; contract Reentrancy { // ============ Constants ============ uint256 internal constant REENTRANCY_NOT_ENTERED = 1; uint256 internal constant REENTRANCY_ENTERED = 2; // ============ Mutable Storage ============ uint256 internal reentrancyStatus; // ============ Modifiers ============ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(reentrancyStatus != REENTRANCY_ENTERED, "Reentrant call"); // Any calls to nonReentrant after this point will fail reentrancyStatus = REENTRANCY_ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip2200) reentrancyStatus = REENTRANCY_NOT_ENTERED; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.6; /** * @title DroppableEditionsStorage * @author MirrorXYZ */ contract DroppableEditionsStorage { // ============ Structs ============ /// @notice Contains general data about the NFT. struct NFTMetadata { string name; string symbol; string baseURI; bytes32 contentHash; } /// @notice Contains information pertaining to the edition spec. struct EditionData { // The maximum number of tokens that can be sold. uint256 quantity; uint256 allocation; // The price at which each token will be sold, in ETH. uint256 price; } /// @notice Contains information about funds disbursement. struct AdminData { // Operator of this contract. address operator; bytes32 merkleRoot; // Address that receive gov tokens via treasury. address tributary; // The account that will receive sales revenue. address payable fundingRecipient; // The fee taken when withdrawing funds uint256 feePercentage; } // ============ Storage for Setup ============ /// @notice NFTMetadata` string public baseURI; bytes32 contentHash; /// @notice EditionData uint256 public allocation; uint256 public quantity; uint256 public price; /// @notice EditionConfig address public operator; address public tributary; address payable public fundingRecipient; uint256 feePercentage; /// @notice Treasury Config, provided at setup, for finding the treasury address. address treasuryConfig; // ============ Mutable Runtime Storage ============ /// @notice `nextTokenId` increments with each token purchased, globally across all editions. uint256 internal nextTokenId; /// @notice The number of tokens that have moved outside of the pre-mint allocation. uint256 internal allocationsTransferred = 0; /** * @notice A special mapping of burned tokens, to take care of burning within * the tokenId range of the allocation. */ mapping(uint256 => bool) internal _burned; // ============ Mutable Internal NFT Storage ============ mapping(uint256 => address) internal _owners; mapping(address => uint256) internal _balances; mapping(uint256 => address) internal _tokenApprovals; mapping(address => mapping(address => bool)) internal _operatorApprovals; /// @notice Only allow one purchase per account. mapping(address => bool) internal purchased; // OpenSea's Proxy Registry address public proxyRegistry; bytes32 public merkleRoot; uint256 currentTokenId; uint256 currentIndexId; uint256 claimedTokens; uint256 nonAllocatedPurchases = 0; mapping(uint256 => bool) public burned; mapping(uint256 => address) public indexToClaimer; mapping(address => uint256) public claimerToAllocation; mapping(bytes32 => bool) public claimed; /** * @dev Storage slot with the address of the current implementation. * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; /// @notice Allows to renounce upgrades bool public upgradesAllowed = true; }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.6; interface IDroppableEditionsLogicEvents { event EditionPurchased( uint256 indexed tokenId, uint256 amountPaid, address buyer, address receiver ); event EditionCreatorChanged( address indexed previousCreator, address indexed newCreator ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.6; interface IProxyRegistry { function proxies(address) external view returns (address); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.6; interface IOwnableEvents { event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); } contract Ownable is IOwnableEvents { address public owner; address private nextOwner; // modifiers modifier onlyOwner() { require(isOwner(), "caller is not the owner."); _; } modifier onlyNextOwner() { require(isNextOwner(), "current owner must set caller as next owner."); _; } /** * @dev Initialize contract by setting transaction submitter as initial owner. */ constructor(address owner_) { owner = owner_; emit OwnershipTransferred(address(0), owner); } /** * @dev Initiate ownership transfer by setting nextOwner. */ function transferOwnership(address nextOwner_) external onlyOwner { require(nextOwner_ != address(0), "Next owner is the zero address."); nextOwner = nextOwner_; } /** * @dev Cancel ownership transfer by deleting nextOwner. */ function cancelOwnershipTransfer() external onlyOwner { delete nextOwner; } /** * @dev Accepts ownership transfer by setting owner. */ function acceptOwnership() external onlyNextOwner { delete nextOwner; owner = msg.sender; emit OwnershipTransferred(owner, msg.sender); } /** * @dev Renounce ownership by setting owner to zero address. */ function renounceOwnership() external onlyOwner { _renounceOwnership(); } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return msg.sender == owner; } /** * @dev Returns true if the caller is the next owner. */ function isNextOwner() public view returns (bool) { return msg.sender == nextOwner; } function _setOwner(address previousOwner, address newOwner) internal { owner = newOwner; emit OwnershipTransferred(previousOwner, owner); } function _renounceOwnership() internal { owner = address(0); emit OwnershipTransferred(owner, address(0)); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.6; interface IGovernable { function changeGovernor(address governor_) external; function isGovernor() external view returns (bool); function governor() external view returns (address); }
{ "optimizer": { "enabled": true, "runs": 2000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"governor_","type":"address"},{"internalType":"address","name":"proxyRegistry_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousCreator","type":"address"},{"indexed":true,"internalType":"address","name":"newCreator","type":"address"}],"name":"EditionCreatorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"EditionPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"GovernorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"burned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"changeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"governor_","type":"address"}],"name":"changeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimerToAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"feeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundingRecipient","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getContentHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"indexToClaimer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNextOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"purchase","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"allocation","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"purchaseWithProof","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"quantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"approver","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nextOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tributary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upgradesAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600b819055601755601c805460ff191660011790553480156200002857600080fd5b5060405162003224380380620032248339810160408190526200004b9162000177565b601c8054610100600160a81b0319166101006001600160a01b0386811682029290921792839055604051600193879387938593920416906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000b681620000fe565b5050601e8054911515600160a01b0260ff60a01b19909216919091179055601280546001600160a01b039092166001600160a01b031990921691909117905550620001c19050565b601e546040516001600160a01b038084169216907fde4b3f61490b74c0ed6237523974fe299126bbbf8a8a7482fd220104c59b0c8490600090a3601e80546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146200017257600080fd5b919050565b6000806000606084860312156200018d57600080fd5b62000198846200015a565b9250620001a8602085016200015a565b9150620001b8604085016200015a565b90509250925092565b61305380620001d16000396000f3fe60806040526004361061031e5760003560e01c80636c0360eb116101a5578063af63ff5d116100ec578063d2ef079511610095578063e985e9c51161006f578063e985e9c5146108a5578063ed459df2146108c5578063f2fde38b146108e5578063ffbdc8cb1461090557600080fd5b8063d2ef079514610850578063e4c0aaf414610870578063e8a3d4851461089057600080fd5b8063c7af3352116100c6578063c7af3352146107e0578063c87b56dd14610800578063cc3c0f061461082057600080fd5b8063af63ff5d1461078d578063b50cbd9f146107a0578063b88d4fde146107c057600080fd5b806388a17bde1161014e57806395d89b411161012857806395d89b4114610742578063a035b1fe14610757578063a22cb4651461076d57600080fd5b806388a17bde146106e25780638da5cb5b146106f85780638f32d59b1461071d57600080fd5b8063715018a61161017f578063715018a6146106a357806379ba5097146106b85780638456cb59146106cd57600080fd5b80636c0360eb1461064e5780636c8526571461066357806370a082311461068357600080fd5b806324600fc31161026957806342842e0e116102125780635c975abb116101ec5780635c975abb146105d75780636352211e146105f85780636bc177e81461061857600080fd5b806342842e0e1461057757806342966c6814610597578063570ca735146105b757600080fd5b80632eb4a7ab116102435780632eb4a7ab1461052c57806339a0c6f9146105425780633f4ba83a1461056257600080fd5b806324600fc3146104e457806325b31a97146104f95780632704f9b41461050c57600080fd5b806317fc45e2116102cb57806323250cae116102a557806323250cae1461047f57806323452b9c146104af57806323b872dd146104c457600080fd5b806317fc45e21461040e5780631a5b6279146104325780631bb534ba1461045f57600080fd5b8063095ea7b3116102fc578063095ea7b3146103b2578063099ea2d3146103d45780630c340a24146103ee57600080fd5b806301ffc9a71461032357806306fdde0314610358578063081812fc1461037a575b600080fd5b34801561032f57600080fd5b5061034361033e366004612c6f565b610927565b60405190151581526020015b60405180910390f35b34801561036457600080fd5b5061036d610a0c565b60405161034f9190612e77565b34801561038657600080fd5b5061039a610395366004612c56565b610a9a565b6040516001600160a01b03909116815260200161034f565b3480156103be57600080fd5b506103d26103cd366004612b86565b610b00565b005b3480156103e057600080fd5b50601c546103439060ff1681565b3480156103fa57600080fd5b50601e5461039a906001600160a01b031681565b34801561041a57600080fd5b5061042460035481565b60405190815260200161034f565b34801561043e57600080fd5b5061042461044d366004612a18565b601a6020526000908152604090205481565b34801561046b57600080fd5b5060075461039a906001600160a01b031681565b34801561048b57600080fd5b5061034361049a366004612c56565b60186020526000908152604090205460ff1681565b3480156104bb57600080fd5b506103d2610bd5565b3480156104d057600080fd5b506103d26104df366004612a92565b610c53565b3480156104f057600080fd5b506103d2610ca3565b610424610507366004612a18565b610e10565b34801561051857600080fd5b5060065461039a906001600160a01b031681565b34801561053857600080fd5b5061042460135481565b34801561054e57600080fd5b506103d261055d366004612ca9565b611020565b34801561056e57600080fd5b506103d26110ab565b34801561058357600080fd5b506103d2610592366004612a92565b611129565b3480156105a357600080fd5b506103d26105b2366004612c56565b611144565b3480156105c357600080fd5b5060055461039a906001600160a01b031681565b3480156105e357600080fd5b50601e5461034390600160a01b900460ff1681565b34801561060457600080fd5b5061039a610613366004612c56565b611195565b34801561062457600080fd5b5061039a610633366004612c56565b6019602052600090815260409020546001600160a01b031681565b34801561065a57600080fd5b5061036d611326565b34801561066f57600080fd5b5061042461067e366004612c56565b611333565b34801561068f57600080fd5b5061042461069e366004612a18565b611350565b3480156106af57600080fd5b506103d26113c4565b3480156106c457600080fd5b506103d261142b565b3480156106d957600080fd5b506103d2611537565b3480156106ee57600080fd5b5061042460025481565b34801561070457600080fd5b50601c5461039a9061010090046001600160a01b031681565b34801561072957600080fd5b50601c5461010090046001600160a01b03163314610343565b34801561074e57600080fd5b5061036d6115b3565b34801561076357600080fd5b5061042460045481565b34801561077957600080fd5b506103d2610788366004612b53565b6115c0565b6103d261079b366004612bb2565b611685565b3480156107ac57600080fd5b5060125461039a906001600160a01b031681565b3480156107cc57600080fd5b506103d26107db366004612ad3565b611940565b3480156107ec57600080fd5b50601e546001600160a01b03163314610343565b34801561080c57600080fd5b5061036d61081b366004612c56565b611997565b34801561082c57600080fd5b5061034361083b366004612c56565b601b6020526000908152604090205460ff1681565b34801561085c57600080fd5b5061034361086b366004612cf2565b6119cb565b34801561087c57600080fd5b506103d261088b366004612a18565b6119f6565b34801561089c57600080fd5b5061036d611a73565b3480156108b157600080fd5b506103436108c0366004612a59565b611a9b565b3480156108d157600080fd5b50601d546001600160a01b03163314610343565b3480156108f157600080fd5b506103d2610900366004612a18565b611b7d565b34801561091157600080fd5b50610424610920366004612c56565b5060015490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806109ba57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a0657507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60208054610a1990612f18565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4590612f18565b8015610a925780601f10610a6757610100808354040283529160200191610a92565b820191906000526020600020905b815481529060010190602001808311610a7557829003601f168201915b505050505081565b6000610aa582611c61565b610ae45760405162461bcd60e51b815260206004820152600b60248201526a1b9bdb995e1a5cdd195b9d60aa1b60448201526064015b60405180910390fd5b506000908152600f60205260409020546001600160a01b031690565b6000610b0b82611195565b9050806001600160a01b0316836001600160a01b03161415610b6f5760405162461bcd60e51b815260206004820152600d60248201527f63757272656e74206f776e6572000000000000000000000000000000000000006044820152606401610adb565b336001600160a01b0382161480610b8b5750610b8b8133611a9b565b610bc65760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd08185c1c1c9bdd995960a21b6044820152606401610adb565b610bd08383611cae565b505050565b601c5461010090046001600160a01b03163314610c345760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610adb565b601d805473ffffffffffffffffffffffffffffffffffffffff19169055565b610c5d3382611d29565b610c985760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd08185c1c1c9bdd995960a21b6044820152606401610adb565b610bd0838383611dcc565b6002601f541415610cf65760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610adb565b6002601f556000610d0647611333565b9050600960009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d5857600080fd5b505af1158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190612a3c565b6001600160a01b031663c1cbbca782836040518363ffffffff1660e01b8152600401610dbe91815260200190565b6000604051808303818588803b158015610dd757600080fd5b505af1158015610deb573d6000803e3d6000fd5b5050600754610e0893506001600160a01b03169150479050611f7c565b506001601f55565b601e54600090600160a01b900460ff1615610e6d5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610adb565b6001600160a01b03821660009081526011602052604090205460ff1615610ed65760405162461bcd60e51b815260206004820152601160248201527f616c7265616479207075726368617365640000000000000000000000000000006044820152606401610adb565b600454341015610f285760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e647300000000000000000000000000006044820152606401610adb565b601754600254610f389190612e8a565b90506003548110610f8b5760405162461bcd60e51b815260206004820152600860248201527f736f6c64206f75740000000000000000000000000000000000000000000000006044820152606401610adb565b6001600160a01b0382166000908152601160205260409020805460ff19166001179055610fb8828261206f565b604080513481523360208201526001600160a01b03841681830152905182917fd0583f52c821a4947b04f05eab604fc1b04ba8daad41e9f2fd2d69cf3fc1a56a919081900360600190a26001601760008282546110159190612e8a565b909155509092915050565b601c5461010090046001600160a01b03163314806110485750601e546001600160a01b031633145b6110945760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401610adb565b80516110a7906000906020840190612909565b5050565b601c5461010090046001600160a01b03163314806110d35750601e546001600160a01b031633145b61111f5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401610adb565b6111276121af565b565b610bd083838360405180602001604052806000815250611940565b61114e3382611d29565b6111895760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd08185c1c1c9bdd995960a21b6044820152606401610adb565b61119281612266565b50565b60006002548210156112cd5760165482106111e05760405162461bcd60e51b815260206004820152600b60248201526a1b9bdb995e1a5cdd195b9d60aa1b6044820152606401610adb565b6000828152600c602052604090205460ff161561122d5760405162461bcd60e51b815260206004820152600b60248201526a1b9bdb995e1a5cdd195b9d60aa1b6044820152606401610adb565b6000828152600d60205260409020546001600160a01b03161561126657506000908152600d60205260409020546001600160a01b031690565b6000805b6015548110156112ca576000818152601960209081526040808320546001600160a01b0316808452601a909252909120546112a59084612e8a565b9250828510156112b757949350505050565b50806112c281612f53565b91505061126a565b50505b506000818152600d60205260409020546001600160a01b0316806113215760405162461bcd60e51b815260206004820152600b60248201526a1b9bdb995e1a5cdd195b9d60aa1b6044820152606401610adb565b919050565b60008054610a1990612f18565b6000612710826008546113469190612eb6565b610a069190612ea2565b60006001600160a01b0382166113a85760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610adb565b506001600160a01b03166000908152600e602052604090205490565b601c5461010090046001600160a01b031633146114235760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610adb565b611127612342565b601d546001600160a01b031633146114ab5760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e00000000000000000000000000000000000000006064820152608401610adb565b601d805473ffffffffffffffffffffffffffffffffffffffff19169055601c80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010033818102929092179283905560405191926001600160a01b0391900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3565b601c5461010090046001600160a01b031633148061155f5750601e546001600160a01b031633145b6115ab5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401610adb565b6111276123a8565b60218054610a1990612f18565b6001600160a01b0382163314156116195760405162461bcd60e51b815260206004820152601160248201527f617070726f766520746f2063616c6c65720000000000000000000000000000006044820152606401610adb565b3360008181526010602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b346116908686612eb6565b11156116de5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e647300000000000000000000000000006044820152606401610adb565b6116e883876119cb565b156117355760405162461bcd60e51b815260206004820152600f60248201527f616c726561647920636c61696d656400000000000000000000000000000000006044820152606401610adb565b61173f8387612460565b6117ce828280806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506013546040805160608d901b6bffffffffffffffffffffffff1916602080830191909152603482018d9052605482018c905260748083018c905283518084039091018152609490920190925280519101209092509050612493565b61181a5760405162461bcd60e51b815260206004820152600d60248201527f696e76616c69642070726f6f66000000000000000000000000000000000000006044820152606401610adb565b601580546000908152601960205260408120805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038a1617905581546001929190611864908490612e8a565b90915550506001600160a01b0386166000908152601a6020526040812086905560168054879290611896908490612e8a565b90915550506001600160a01b0386166000908152600e6020526040812080548792906118c3908490612e8a565b9091555050600a546001600160a01b038716906000907fdeaa91b6123d068f5821d0fb0678463d1a8a6079fe8af5de3ce5e896dcf9133d60016119068a84612e8a565b6119109190612ed5565b60405190815260200160405180910390a484600a60008282546119339190612e8a565b9091555050505050505050565b61194a3383611d29565b6119855760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd08185c1c1c9bdd995960a21b6044820152606401610adb565b61199184848484612542565b50505050565b606060006119a4836125a5565b6040516020016119b5929190612ddd565b6040516020818303038152906040529050919050565b6000601b60006119db85856126d7565b815260208101919091526040016000205460ff169392505050565b601c5461010090046001600160a01b0316331480611a1e5750601e546001600160a01b031633145b611a6a5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401610adb565b61119281612725565b60606000604051602001611a879190612e02565b604051602081830303815290604052905090565b6012546040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526000928482169291169063c45527919060240160206040518083038186803b158015611aff57600080fd5b505afa158015611b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b379190612a3c565b6001600160a01b03161415611b4e57506001610a06565b506001600160a01b03918216600090815260106020908152604080832093909416825291909152205460ff1690565b601c5461010090046001600160a01b03163314611bdc5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610adb565b6001600160a01b038116611c325760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e006044820152606401610adb565b601d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600060025482108015611c8357506000828152600c602052604090205460ff16155b15611c9057506001919050565b506000908152600d60205260409020546001600160a01b0316151590565b6000818152600f60205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091558190611cf082611195565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d3482611c61565b611d6e5760405162461bcd60e51b815260206004820152600b60248201526a1b9bdb995e1a5cdd195b9d60aa1b6044820152606401610adb565b6000611d7983611195565b9050806001600160a01b0316846001600160a01b03161480611db45750836001600160a01b0316611da984610a9a565b6001600160a01b0316145b80611dc45750611dc48185611a9b565b949350505050565b826001600160a01b0316611ddf82611195565b6001600160a01b031614611e355760405162461bcd60e51b815260206004820152600f60248201527f746f6b656e206e6f74206f776e656400000000000000000000000000000000006044820152606401610adb565b6001600160a01b038216611e8b5760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610adb565b611e96600082611cae565b6001600160a01b0383166000908152600e602052604090205415611ee3576001600160a01b0383166000908152600e60205260408120805460019290611edd908490612ed5565b90915550505b6000818152600d60209081526040808320805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387169081179091558352600e9091528120805460019290611f37908490612e8a565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b80471015611fcc5760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610adb565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612019576040519150601f19603f3d011682016040523d82523d6000602084013e61201e565b606091505b5050905080610bd05760405162461bcd60e51b815260206004820152601260248201527f726563697069656e7420726576657274656400000000000000000000000000006044820152606401610adb565b6001600160a01b0382166120c55760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610adb565b6120ce81611c61565b1561211b5760405162461bcd60e51b815260206004820152600e60248201527f616c7265616479206d696e7465640000000000000000000000000000000000006044820152606401610adb565b6001600160a01b0382166000908152600e60205260408120805460019290612144908490612e8a565b90915550506000818152600d6020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b601e54600160a01b900460ff166122085760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610adb565b601e80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b600061227182611195565b905061227e600083611cae565b6001600160a01b0381166000908152600e6020526040902054156122cb576001600160a01b0381166000908152600e602052604081208054600192906122c5908490612ed5565b90915550505b6000828152600d60209081526040808320805473ffffffffffffffffffffffffffffffffffffffff19169055600c909152808220805460ff19166001179055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b601c80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff169081905560405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b601e54600160a01b900460ff16156124025760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610adb565b601e80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200161225c565b6001601b600061247085856126d7565b81526020810191909152604001600020805460ff19169115159190911790555050565b600081815b85518110156125375760008682815181106124b5576124b5612fae565b602002602001015190508083116124f7576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250612524565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061252f81612f53565b915050612498565b509092149392505050565b61254d848484611dcc565b6125598484848461278e565b6119915760405162461bcd60e51b815260206004820152601260248201527f6e6f6e20455243373231526563656976657200000000000000000000000000006044820152606401610adb565b6060816125e557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561260f57806125f981612f53565b91506126089050600a83612ea2565b91506125e9565b60008167ffffffffffffffff81111561262a5761262a612fc4565b6040519080825280601f01601f191660200182016040528015612654576020820181803683370190505b5090505b8415611dc457612669600183612ed5565b9150612676600a86612f6e565b612681906030612e8a565b60f81b81838151811061269657612696612fae565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506126d0600a86612ea2565b9450612658565b6000828260405160200161270792919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60405160208183030381529060405280519060200120905092915050565b601e546040516001600160a01b038084169216907fde4b3f61490b74c0ed6237523974fe299126bbbf8a8a7482fd220104c59b0c8490600090a3601e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000833b15612901576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906127e2903390899088908890600401612e3b565b602060405180830381600087803b1580156127fc57600080fd5b505af192505050801561282c575060408051601f3d908101601f1916820190925261282991810190612c8c565b60015b6128b6573d80801561285a576040519150601f19603f3d011682016040523d82523d6000602084013e61285f565b606091505b5080516128ae5760405162461bcd60e51b815260206004820152601260248201527f6e6f6e20455243373231526563656976657200000000000000000000000000006044820152606401610adb565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611dc4565b506001611dc4565b82805461291590612f18565b90600052602060002090601f016020900481019282612937576000855561297d565b82601f1061295057805160ff191683800117855561297d565b8280016001018555821561297d579182015b8281111561297d578251825591602001919060010190612962565b5061298992915061298d565b5090565b5b80821115612989576000815560010161298e565b600067ffffffffffffffff808411156129bd576129bd612fc4565b604051601f8501601f19908116603f011681019082821181831017156129e5576129e5612fc4565b816040528093508581528686860111156129fe57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215612a2a57600080fd5b8135612a3581612fda565b9392505050565b600060208284031215612a4e57600080fd5b8151612a3581612fda565b60008060408385031215612a6c57600080fd5b8235612a7781612fda565b91506020830135612a8781612fda565b809150509250929050565b600080600060608486031215612aa757600080fd5b8335612ab281612fda565b92506020840135612ac281612fda565b929592945050506040919091013590565b60008060008060808587031215612ae957600080fd5b8435612af481612fda565b93506020850135612b0481612fda565b925060408501359150606085013567ffffffffffffffff811115612b2757600080fd5b8501601f81018713612b3857600080fd5b612b47878235602084016129a2565b91505092959194509250565b60008060408385031215612b6657600080fd5b8235612b7181612fda565b915060208301358015158114612a8757600080fd5b60008060408385031215612b9957600080fd5b8235612ba481612fda565b946020939093013593505050565b60008060008060008060a08789031215612bcb57600080fd5b8635612bd681612fda565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff80821115612c0857600080fd5b818901915089601f830112612c1c57600080fd5b813581811115612c2b57600080fd5b8a60208260051b8501011115612c4057600080fd5b6020830194508093505050509295509295509295565b600060208284031215612c6857600080fd5b5035919050565b600060208284031215612c8157600080fd5b8135612a3581612fef565b600060208284031215612c9e57600080fd5b8151612a3581612fef565b600060208284031215612cbb57600080fd5b813567ffffffffffffffff811115612cd257600080fd5b8201601f81018413612ce357600080fd5b611dc4848235602084016129a2565b60008060408385031215612d0557600080fd5b823591506020830135612a8781612fda565b60008151808452612d2f816020860160208601612eec565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680612d5d57607f831692505b6020808410821415612d7f57634e487b7160e01b600052602260045260246000fd5b818015612d935760018114612da457612dd1565b60ff19861689528489019650612dd1565b60008881526020902060005b86811015612dc95781548b820152908501908301612db0565b505084890196505b50505050505092915050565b6000612de98285612d43565b8351612df9818360208801612eec565b01949350505050565b6000612e0e8284612d43565b7f6d6574616461746100000000000000000000000000000000000000000000000081526008019392505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612e6d6080830184612d17565b9695505050505050565b602081526000612a356020830184612d17565b60008219821115612e9d57612e9d612f82565b500190565b600082612eb157612eb1612f98565b500490565b6000816000190483118215151615612ed057612ed0612f82565b500290565b600082821015612ee757612ee7612f82565b500390565b60005b83811015612f07578181015183820152602001612eef565b838111156119915750506000910152565b600181811c90821680612f2c57607f821691505b60208210811415612f4d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612f6757612f67612f82565b5060010190565b600082612f7d57612f7d612f98565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461119257600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461119257600080fdfea2646970667358221220f6b5490c616fd26acc43cc2fd9e06775384f8148659b4c525e79321b926b93db64736f6c634300080600330000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b570000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Deployed Bytecode
0x60806040526004361061031e5760003560e01c80636c0360eb116101a5578063af63ff5d116100ec578063d2ef079511610095578063e985e9c51161006f578063e985e9c5146108a5578063ed459df2146108c5578063f2fde38b146108e5578063ffbdc8cb1461090557600080fd5b8063d2ef079514610850578063e4c0aaf414610870578063e8a3d4851461089057600080fd5b8063c7af3352116100c6578063c7af3352146107e0578063c87b56dd14610800578063cc3c0f061461082057600080fd5b8063af63ff5d1461078d578063b50cbd9f146107a0578063b88d4fde146107c057600080fd5b806388a17bde1161014e57806395d89b411161012857806395d89b4114610742578063a035b1fe14610757578063a22cb4651461076d57600080fd5b806388a17bde146106e25780638da5cb5b146106f85780638f32d59b1461071d57600080fd5b8063715018a61161017f578063715018a6146106a357806379ba5097146106b85780638456cb59146106cd57600080fd5b80636c0360eb1461064e5780636c8526571461066357806370a082311461068357600080fd5b806324600fc31161026957806342842e0e116102125780635c975abb116101ec5780635c975abb146105d75780636352211e146105f85780636bc177e81461061857600080fd5b806342842e0e1461057757806342966c6814610597578063570ca735146105b757600080fd5b80632eb4a7ab116102435780632eb4a7ab1461052c57806339a0c6f9146105425780633f4ba83a1461056257600080fd5b806324600fc3146104e457806325b31a97146104f95780632704f9b41461050c57600080fd5b806317fc45e2116102cb57806323250cae116102a557806323250cae1461047f57806323452b9c146104af57806323b872dd146104c457600080fd5b806317fc45e21461040e5780631a5b6279146104325780631bb534ba1461045f57600080fd5b8063095ea7b3116102fc578063095ea7b3146103b2578063099ea2d3146103d45780630c340a24146103ee57600080fd5b806301ffc9a71461032357806306fdde0314610358578063081812fc1461037a575b600080fd5b34801561032f57600080fd5b5061034361033e366004612c6f565b610927565b60405190151581526020015b60405180910390f35b34801561036457600080fd5b5061036d610a0c565b60405161034f9190612e77565b34801561038657600080fd5b5061039a610395366004612c56565b610a9a565b6040516001600160a01b03909116815260200161034f565b3480156103be57600080fd5b506103d26103cd366004612b86565b610b00565b005b3480156103e057600080fd5b50601c546103439060ff1681565b3480156103fa57600080fd5b50601e5461039a906001600160a01b031681565b34801561041a57600080fd5b5061042460035481565b60405190815260200161034f565b34801561043e57600080fd5b5061042461044d366004612a18565b601a6020526000908152604090205481565b34801561046b57600080fd5b5060075461039a906001600160a01b031681565b34801561048b57600080fd5b5061034361049a366004612c56565b60186020526000908152604090205460ff1681565b3480156104bb57600080fd5b506103d2610bd5565b3480156104d057600080fd5b506103d26104df366004612a92565b610c53565b3480156104f057600080fd5b506103d2610ca3565b610424610507366004612a18565b610e10565b34801561051857600080fd5b5060065461039a906001600160a01b031681565b34801561053857600080fd5b5061042460135481565b34801561054e57600080fd5b506103d261055d366004612ca9565b611020565b34801561056e57600080fd5b506103d26110ab565b34801561058357600080fd5b506103d2610592366004612a92565b611129565b3480156105a357600080fd5b506103d26105b2366004612c56565b611144565b3480156105c357600080fd5b5060055461039a906001600160a01b031681565b3480156105e357600080fd5b50601e5461034390600160a01b900460ff1681565b34801561060457600080fd5b5061039a610613366004612c56565b611195565b34801561062457600080fd5b5061039a610633366004612c56565b6019602052600090815260409020546001600160a01b031681565b34801561065a57600080fd5b5061036d611326565b34801561066f57600080fd5b5061042461067e366004612c56565b611333565b34801561068f57600080fd5b5061042461069e366004612a18565b611350565b3480156106af57600080fd5b506103d26113c4565b3480156106c457600080fd5b506103d261142b565b3480156106d957600080fd5b506103d2611537565b3480156106ee57600080fd5b5061042460025481565b34801561070457600080fd5b50601c5461039a9061010090046001600160a01b031681565b34801561072957600080fd5b50601c5461010090046001600160a01b03163314610343565b34801561074e57600080fd5b5061036d6115b3565b34801561076357600080fd5b5061042460045481565b34801561077957600080fd5b506103d2610788366004612b53565b6115c0565b6103d261079b366004612bb2565b611685565b3480156107ac57600080fd5b5060125461039a906001600160a01b031681565b3480156107cc57600080fd5b506103d26107db366004612ad3565b611940565b3480156107ec57600080fd5b50601e546001600160a01b03163314610343565b34801561080c57600080fd5b5061036d61081b366004612c56565b611997565b34801561082c57600080fd5b5061034361083b366004612c56565b601b6020526000908152604090205460ff1681565b34801561085c57600080fd5b5061034361086b366004612cf2565b6119cb565b34801561087c57600080fd5b506103d261088b366004612a18565b6119f6565b34801561089c57600080fd5b5061036d611a73565b3480156108b157600080fd5b506103436108c0366004612a59565b611a9b565b3480156108d157600080fd5b50601d546001600160a01b03163314610343565b3480156108f157600080fd5b506103d2610900366004612a18565b611b7d565b34801561091157600080fd5b50610424610920366004612c56565b5060015490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806109ba57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a0657507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60208054610a1990612f18565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4590612f18565b8015610a925780601f10610a6757610100808354040283529160200191610a92565b820191906000526020600020905b815481529060010190602001808311610a7557829003601f168201915b505050505081565b6000610aa582611c61565b610ae45760405162461bcd60e51b815260206004820152600b60248201526a1b9bdb995e1a5cdd195b9d60aa1b60448201526064015b60405180910390fd5b506000908152600f60205260409020546001600160a01b031690565b6000610b0b82611195565b9050806001600160a01b0316836001600160a01b03161415610b6f5760405162461bcd60e51b815260206004820152600d60248201527f63757272656e74206f776e6572000000000000000000000000000000000000006044820152606401610adb565b336001600160a01b0382161480610b8b5750610b8b8133611a9b565b610bc65760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd08185c1c1c9bdd995960a21b6044820152606401610adb565b610bd08383611cae565b505050565b601c5461010090046001600160a01b03163314610c345760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610adb565b601d805473ffffffffffffffffffffffffffffffffffffffff19169055565b610c5d3382611d29565b610c985760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd08185c1c1c9bdd995960a21b6044820152606401610adb565b610bd0838383611dcc565b6002601f541415610cf65760405162461bcd60e51b815260206004820152600e60248201527f5265656e7472616e742063616c6c0000000000000000000000000000000000006044820152606401610adb565b6002601f556000610d0647611333565b9050600960009054906101000a90046001600160a01b03166001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d5857600080fd5b505af1158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190612a3c565b6001600160a01b031663c1cbbca782836040518363ffffffff1660e01b8152600401610dbe91815260200190565b6000604051808303818588803b158015610dd757600080fd5b505af1158015610deb573d6000803e3d6000fd5b5050600754610e0893506001600160a01b03169150479050611f7c565b506001601f55565b601e54600090600160a01b900460ff1615610e6d5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610adb565b6001600160a01b03821660009081526011602052604090205460ff1615610ed65760405162461bcd60e51b815260206004820152601160248201527f616c7265616479207075726368617365640000000000000000000000000000006044820152606401610adb565b600454341015610f285760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e647300000000000000000000000000006044820152606401610adb565b601754600254610f389190612e8a565b90506003548110610f8b5760405162461bcd60e51b815260206004820152600860248201527f736f6c64206f75740000000000000000000000000000000000000000000000006044820152606401610adb565b6001600160a01b0382166000908152601160205260409020805460ff19166001179055610fb8828261206f565b604080513481523360208201526001600160a01b03841681830152905182917fd0583f52c821a4947b04f05eab604fc1b04ba8daad41e9f2fd2d69cf3fc1a56a919081900360600190a26001601760008282546110159190612e8a565b909155509092915050565b601c5461010090046001600160a01b03163314806110485750601e546001600160a01b031633145b6110945760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401610adb565b80516110a7906000906020840190612909565b5050565b601c5461010090046001600160a01b03163314806110d35750601e546001600160a01b031633145b61111f5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401610adb565b6111276121af565b565b610bd083838360405180602001604052806000815250611940565b61114e3382611d29565b6111895760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd08185c1c1c9bdd995960a21b6044820152606401610adb565b61119281612266565b50565b60006002548210156112cd5760165482106111e05760405162461bcd60e51b815260206004820152600b60248201526a1b9bdb995e1a5cdd195b9d60aa1b6044820152606401610adb565b6000828152600c602052604090205460ff161561122d5760405162461bcd60e51b815260206004820152600b60248201526a1b9bdb995e1a5cdd195b9d60aa1b6044820152606401610adb565b6000828152600d60205260409020546001600160a01b03161561126657506000908152600d60205260409020546001600160a01b031690565b6000805b6015548110156112ca576000818152601960209081526040808320546001600160a01b0316808452601a909252909120546112a59084612e8a565b9250828510156112b757949350505050565b50806112c281612f53565b91505061126a565b50505b506000818152600d60205260409020546001600160a01b0316806113215760405162461bcd60e51b815260206004820152600b60248201526a1b9bdb995e1a5cdd195b9d60aa1b6044820152606401610adb565b919050565b60008054610a1990612f18565b6000612710826008546113469190612eb6565b610a069190612ea2565b60006001600160a01b0382166113a85760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610adb565b506001600160a01b03166000908152600e602052604090205490565b601c5461010090046001600160a01b031633146114235760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610adb565b611127612342565b601d546001600160a01b031633146114ab5760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e00000000000000000000000000000000000000006064820152608401610adb565b601d805473ffffffffffffffffffffffffffffffffffffffff19169055601c80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010033818102929092179283905560405191926001600160a01b0391900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3565b601c5461010090046001600160a01b031633148061155f5750601e546001600160a01b031633145b6115ab5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401610adb565b6111276123a8565b60218054610a1990612f18565b6001600160a01b0382163314156116195760405162461bcd60e51b815260206004820152601160248201527f617070726f766520746f2063616c6c65720000000000000000000000000000006044820152606401610adb565b3360008181526010602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b346116908686612eb6565b11156116de5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e647300000000000000000000000000006044820152606401610adb565b6116e883876119cb565b156117355760405162461bcd60e51b815260206004820152600f60248201527f616c726561647920636c61696d656400000000000000000000000000000000006044820152606401610adb565b61173f8387612460565b6117ce828280806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506013546040805160608d901b6bffffffffffffffffffffffff1916602080830191909152603482018d9052605482018c905260748083018c905283518084039091018152609490920190925280519101209092509050612493565b61181a5760405162461bcd60e51b815260206004820152600d60248201527f696e76616c69642070726f6f66000000000000000000000000000000000000006044820152606401610adb565b601580546000908152601960205260408120805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038a1617905581546001929190611864908490612e8a565b90915550506001600160a01b0386166000908152601a6020526040812086905560168054879290611896908490612e8a565b90915550506001600160a01b0386166000908152600e6020526040812080548792906118c3908490612e8a565b9091555050600a546001600160a01b038716906000907fdeaa91b6123d068f5821d0fb0678463d1a8a6079fe8af5de3ce5e896dcf9133d60016119068a84612e8a565b6119109190612ed5565b60405190815260200160405180910390a484600a60008282546119339190612e8a565b9091555050505050505050565b61194a3383611d29565b6119855760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd08185c1c1c9bdd995960a21b6044820152606401610adb565b61199184848484612542565b50505050565b606060006119a4836125a5565b6040516020016119b5929190612ddd565b6040516020818303038152906040529050919050565b6000601b60006119db85856126d7565b815260208101919091526040016000205460ff169392505050565b601c5461010090046001600160a01b0316331480611a1e5750601e546001600160a01b031633145b611a6a5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401610adb565b61119281612725565b60606000604051602001611a879190612e02565b604051602081830303815290604052905090565b6012546040517fc45527910000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526000928482169291169063c45527919060240160206040518083038186803b158015611aff57600080fd5b505afa158015611b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b379190612a3c565b6001600160a01b03161415611b4e57506001610a06565b506001600160a01b03918216600090815260106020908152604080832093909416825291909152205460ff1690565b601c5461010090046001600160a01b03163314611bdc5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401610adb565b6001600160a01b038116611c325760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e006044820152606401610adb565b601d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600060025482108015611c8357506000828152600c602052604090205460ff16155b15611c9057506001919050565b506000908152600d60205260409020546001600160a01b0316151590565b6000818152600f60205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091558190611cf082611195565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d3482611c61565b611d6e5760405162461bcd60e51b815260206004820152600b60248201526a1b9bdb995e1a5cdd195b9d60aa1b6044820152606401610adb565b6000611d7983611195565b9050806001600160a01b0316846001600160a01b03161480611db45750836001600160a01b0316611da984610a9a565b6001600160a01b0316145b80611dc45750611dc48185611a9b565b949350505050565b826001600160a01b0316611ddf82611195565b6001600160a01b031614611e355760405162461bcd60e51b815260206004820152600f60248201527f746f6b656e206e6f74206f776e656400000000000000000000000000000000006044820152606401610adb565b6001600160a01b038216611e8b5760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610adb565b611e96600082611cae565b6001600160a01b0383166000908152600e602052604090205415611ee3576001600160a01b0383166000908152600e60205260408120805460019290611edd908490612ed5565b90915550505b6000818152600d60209081526040808320805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387169081179091558352600e9091528120805460019290611f37908490612e8a565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b80471015611fcc5760405162461bcd60e51b815260206004820152601460248201527f696e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610adb565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612019576040519150601f19603f3d011682016040523d82523d6000602084013e61201e565b606091505b5050905080610bd05760405162461bcd60e51b815260206004820152601260248201527f726563697069656e7420726576657274656400000000000000000000000000006044820152606401610adb565b6001600160a01b0382166120c55760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610adb565b6120ce81611c61565b1561211b5760405162461bcd60e51b815260206004820152600e60248201527f616c7265616479206d696e7465640000000000000000000000000000000000006044820152606401610adb565b6001600160a01b0382166000908152600e60205260408120805460019290612144908490612e8a565b90915550506000818152600d6020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b601e54600160a01b900460ff166122085760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610adb565b601e80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b600061227182611195565b905061227e600083611cae565b6001600160a01b0381166000908152600e6020526040902054156122cb576001600160a01b0381166000908152600e602052604081208054600192906122c5908490612ed5565b90915550505b6000828152600d60209081526040808320805473ffffffffffffffffffffffffffffffffffffffff19169055600c909152808220805460ff19166001179055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b601c80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff169081905560405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b601e54600160a01b900460ff16156124025760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610adb565b601e80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200161225c565b6001601b600061247085856126d7565b81526020810191909152604001600020805460ff19169115159190911790555050565b600081815b85518110156125375760008682815181106124b5576124b5612fae565b602002602001015190508083116124f7576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250612524565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061252f81612f53565b915050612498565b509092149392505050565b61254d848484611dcc565b6125598484848461278e565b6119915760405162461bcd60e51b815260206004820152601260248201527f6e6f6e20455243373231526563656976657200000000000000000000000000006044820152606401610adb565b6060816125e557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561260f57806125f981612f53565b91506126089050600a83612ea2565b91506125e9565b60008167ffffffffffffffff81111561262a5761262a612fc4565b6040519080825280601f01601f191660200182016040528015612654576020820181803683370190505b5090505b8415611dc457612669600183612ed5565b9150612676600a86612f6e565b612681906030612e8a565b60f81b81838151811061269657612696612fae565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506126d0600a86612ea2565b9450612658565b6000828260405160200161270792919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60405160208183030381529060405280519060200120905092915050565b601e546040516001600160a01b038084169216907fde4b3f61490b74c0ed6237523974fe299126bbbf8a8a7482fd220104c59b0c8490600090a3601e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000833b15612901576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906127e2903390899088908890600401612e3b565b602060405180830381600087803b1580156127fc57600080fd5b505af192505050801561282c575060408051601f3d908101601f1916820190925261282991810190612c8c565b60015b6128b6573d80801561285a576040519150601f19603f3d011682016040523d82523d6000602084013e61285f565b606091505b5080516128ae5760405162461bcd60e51b815260206004820152601260248201527f6e6f6e20455243373231526563656976657200000000000000000000000000006044820152606401610adb565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611dc4565b506001611dc4565b82805461291590612f18565b90600052602060002090601f016020900481019282612937576000855561297d565b82601f1061295057805160ff191683800117855561297d565b8280016001018555821561297d579182015b8281111561297d578251825591602001919060010190612962565b5061298992915061298d565b5090565b5b80821115612989576000815560010161298e565b600067ffffffffffffffff808411156129bd576129bd612fc4565b604051601f8501601f19908116603f011681019082821181831017156129e5576129e5612fc4565b816040528093508581528686860111156129fe57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215612a2a57600080fd5b8135612a3581612fda565b9392505050565b600060208284031215612a4e57600080fd5b8151612a3581612fda565b60008060408385031215612a6c57600080fd5b8235612a7781612fda565b91506020830135612a8781612fda565b809150509250929050565b600080600060608486031215612aa757600080fd5b8335612ab281612fda565b92506020840135612ac281612fda565b929592945050506040919091013590565b60008060008060808587031215612ae957600080fd5b8435612af481612fda565b93506020850135612b0481612fda565b925060408501359150606085013567ffffffffffffffff811115612b2757600080fd5b8501601f81018713612b3857600080fd5b612b47878235602084016129a2565b91505092959194509250565b60008060408385031215612b6657600080fd5b8235612b7181612fda565b915060208301358015158114612a8757600080fd5b60008060408385031215612b9957600080fd5b8235612ba481612fda565b946020939093013593505050565b60008060008060008060a08789031215612bcb57600080fd5b8635612bd681612fda565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff80821115612c0857600080fd5b818901915089601f830112612c1c57600080fd5b813581811115612c2b57600080fd5b8a60208260051b8501011115612c4057600080fd5b6020830194508093505050509295509295509295565b600060208284031215612c6857600080fd5b5035919050565b600060208284031215612c8157600080fd5b8135612a3581612fef565b600060208284031215612c9e57600080fd5b8151612a3581612fef565b600060208284031215612cbb57600080fd5b813567ffffffffffffffff811115612cd257600080fd5b8201601f81018413612ce357600080fd5b611dc4848235602084016129a2565b60008060408385031215612d0557600080fd5b823591506020830135612a8781612fda565b60008151808452612d2f816020860160208601612eec565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680612d5d57607f831692505b6020808410821415612d7f57634e487b7160e01b600052602260045260246000fd5b818015612d935760018114612da457612dd1565b60ff19861689528489019650612dd1565b60008881526020902060005b86811015612dc95781548b820152908501908301612db0565b505084890196505b50505050505092915050565b6000612de98285612d43565b8351612df9818360208801612eec565b01949350505050565b6000612e0e8284612d43565b7f6d6574616461746100000000000000000000000000000000000000000000000081526008019392505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612e6d6080830184612d17565b9695505050505050565b602081526000612a356020830184612d17565b60008219821115612e9d57612e9d612f82565b500190565b600082612eb157612eb1612f98565b500490565b6000816000190483118215151615612ed057612ed0612f82565b500290565b600082821015612ee757612ee7612f82565b500390565b60005b83811015612f07578181015183820152602001612eef565b838111156119915750506000910152565b600181811c90821680612f2c57607f821691505b60208210811415612f4d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612f6757612f67612f82565b5060010190565b600082612f7d57612f7d612f98565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461119257600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461119257600080fdfea2646970667358221220f6b5490c616fd26acc43cc2fd9e06775384f8148659b4c525e79321b926b93db64736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b570000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
-----Decoded View---------------
Arg [0] : owner_ (address): 0x2330ee705fFD040bB0cbA8CB7734Dfe00E7C4b57
Arg [1] : governor_ (address): 0x2330ee705fFD040bB0cbA8CB7734Dfe00E7C4b57
Arg [2] : proxyRegistry_ (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57
Arg [1] : 0000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57
Arg [2] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.