ERC-721
Overview
Max Total Supply
8,888 WGMIS
Holders
1,199
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 WGMISLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Wgmis
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "./interfaces/IRandomNumberConsumer.sol"; import "./interfaces/IERC2981.sol"; interface IWgmisMerkleTreeWhitelist { function isValidMerkleProof(bytes32[] calldata _merkleProof, address _minter, uint96 _amount) external view returns (bool); } contract Wgmis is ERC721, Ownable { using Strings for uint256; // Controlled variables using Counters for Counters.Counter; Counters.Counter private _tokenIds; uint256 public price; bool public isRandomnessRequested; bytes32 public randomNumberRequestId; uint256 public vrfResult; uint256 public foundationMinted; mapping(address => bool) public merkleWhitelistClaimed; mapping(address => uint256) public merkleWhitelistEarlyAccessMintCount; // Static uint16 public earlyAccessAllowance = 10; uint96 public foundationAllowance = 150; // Config variables string public preRevealURI; string public baseURI; uint256 public supplyLimit; uint256 public mintingStartTimeUnix; uint256 public singleOrderLimit; address public vrfProvider; address[] public payoutAddresses; uint16[] public payoutAddressBasisPoints; address public royaltyReceiver; uint16 public royaltyBasisPoints; // A merkle-proof-based whitelist for initial batch of whitelisted addresses // All whitelisted addresses must be defined at time of WgmisMerkleTreeWhitelist deployment IWgmisMerkleTreeWhitelist merkleProofWhitelist; constructor( string memory _tokenName, string memory _tokenSymbol, string memory _preRevealURI, string memory _baseURI, uint256 _supplyLimit, uint256 _mintingStartTimeUnix, uint256 _singleOrderLimit, address _vrfProvider, address[] memory _payoutAddresses, uint16[] memory _payoutAddressBasisPoints, address _merkleProofWhitelist ) ERC721(_tokenName, _tokenSymbol) { preRevealURI = _preRevealURI; baseURI = _baseURI; supplyLimit = _supplyLimit; mintingStartTimeUnix = _mintingStartTimeUnix; singleOrderLimit = _singleOrderLimit; vrfProvider = _vrfProvider; uint256 totalBasisPoints; for(uint256 i = 0; i < _payoutAddresses.length; i++) { require((_payoutAddressBasisPoints[i] > 0) && (_payoutAddressBasisPoints[i] <= 10000)); // "BP_NOT_BETWEEN_0_AND_10000" totalBasisPoints += _payoutAddressBasisPoints[i]; } require(totalBasisPoints == 10000); // "BP_MUST_ADD_TO_10000" payoutAddresses = _payoutAddresses; payoutAddressBasisPoints = _payoutAddressBasisPoints; merkleProofWhitelist = IWgmisMerkleTreeWhitelist(_merkleProofWhitelist); foundationMinted = 0; price = 0.069 ether; } // We signify support for ERC2981, ERC721 & ERC721Metadata function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC2981).interfaceId || interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function mint(address _recipient, uint96 _quantity) external payable { require(isRandomnessRequested == false, "MINTING_OVER"); require(_quantity > 0, "NO_ZERO_QUANTITY"); require(block.timestamp >= mintingStartTimeUnix, "MINTING_PERIOD_NOT_STARTED"); require(_quantity <= singleOrderLimit, "EXCEEDS_SINGLE_ORDER_LIMIT"); require((_tokenIds.current() + _quantity) <= supplyLimit, "EXCEEDS_MAX_SUPPLY"); require((msg.value) == (price * _quantity), "INCORRECT_ETH_VALUE"); _handleMint(_recipient, _quantity); } function mintFoundation(address _recipient, uint96 _quantity) external onlyOwner { require(isRandomnessRequested == false); // "MINTING_OVER" require(_quantity > 0, "NO_ZERO_QUANTITY"); require((foundationMinted + _quantity) <= foundationAllowance, "FOUNDATION_MINT_EXCEEDS_ALLOWANCE"); require((_tokenIds.current() + _quantity) <= supplyLimit, "EXCEEDS_MAX_SUPPLY"); foundationMinted += _quantity; _handleMint(_recipient, _quantity); } function mintMerkleWhitelist(bytes32[] calldata _merkleProof, uint96 _quantity) external { require(isRandomnessRequested == false, "MINTING_OVER"); require(block.timestamp >= (mintingStartTimeUnix - 24 hours), "EARLY_ACCESS_NOT_STARTED"); require((_tokenIds.current() + _quantity) <= supplyLimit, "EXCEEDS_MAX_SUPPLY"); require(!merkleWhitelistClaimed[msg.sender], 'MERKLE_CLAIM_ALREADY_MADE'); require(merkleProofWhitelist.isValidMerkleProof(_merkleProof, msg.sender, _quantity), 'INVALID_MERKLE_PROOF'); merkleWhitelistClaimed[msg.sender] = true; _handleMint(msg.sender, _quantity); } function mintMerkleWhitelistEarlyAccess(bytes32[] calldata _merkleProof, uint96 _merkleProofAmount, uint96 _mintAmount) external payable { require(merkleProofWhitelist.isValidMerkleProof(_merkleProof, msg.sender, _merkleProofAmount), 'INVALID_MERKLE_PROOF'); require(isRandomnessRequested == false, "MINTING_OVER"); require(block.timestamp >= (mintingStartTimeUnix - 24 hours), "EARLY_ACCESS_NOT_STARTED"); require((_tokenIds.current() + _mintAmount) <= supplyLimit, "EXCEEDS_MAX_SUPPLY"); require((msg.value) == (price * _mintAmount), "INCORRECT_ETH_VALUE"); merkleWhitelistEarlyAccessMintCount[msg.sender] += _mintAmount; require(merkleWhitelistEarlyAccessMintCount[msg.sender] <= earlyAccessAllowance, "EXCEEDS_EARLY_ACCESS_ALLOWANCE"); _handleMint(msg.sender, _mintAmount); } function _handleMint(address _recipient, uint96 _quantity) internal { for(uint96 i = 0; i < _quantity; i++) { _tokenIds.increment(); uint256 newTokenId = _tokenIds.current(); _mint(_recipient, newTokenId); } } function initiateRandomDistribution() external { require(_tokenIds.current() == supplyLimit, "MINTING_ONGOING"); require(isRandomnessRequested == false, "RANDOMNESS_REQ_NOT_INITIATED"); IRandomNumberConsumer randomNumberConsumer = IRandomNumberConsumer(vrfProvider); randomNumberRequestId = randomNumberConsumer.getRandomNumber(); isRandomnessRequested = true; } function forceInitiateRandomDistribution() external onlyOwner { // Forces ending of minting period by skipping check for all tokens being minted uint256 supply = _tokenIds.current(); require(supply > 0); require(isRandomnessRequested == false); IRandomNumberConsumer randomNumberConsumer = IRandomNumberConsumer(vrfProvider); randomNumberRequestId = randomNumberConsumer.getRandomNumber(); isRandomnessRequested = true; } function commitRandomDistribution() external { require(isRandomnessRequested == true, "RANDOMNESS_REQ_NOT_INITIATED"); IRandomNumberConsumer randomNumberConsumer = IRandomNumberConsumer(vrfProvider); uint256 result = randomNumberConsumer.readFulfilledRandomness(randomNumberRequestId); require(result > 0, "RANDOMNESS_NOT_FULFILLED"); vrfResult = result; } function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "NONEXISTENT_TOKEN"); if (vrfResult == 0) { return preRevealURI; } string memory tokenURI_ = metadataOf(tokenId); return string(abi.encodePacked(baseURI, tokenURI_, ".json")); } function metadataOf(uint256 _tokenId) public view returns (string memory) { require((_tokenId > 0) && (_tokenId <= totalSupply()), "INVALID_TOKEN_ID"); uint256 seed_ = vrfResult; if (seed_ == 0) { return ""; } uint256[] memory randomIds = new uint256[](supplyLimit); for (uint256 i = 0; i < supplyLimit; i++) { randomIds[i] = 8888 - i; } for (uint256 i = 0; i < supplyLimit - 1; i++) { uint256 j = i + (uint256(keccak256(abi.encode(seed_, i))) % (supplyLimit - i)); (randomIds[i], randomIds[j]) = (randomIds[j], randomIds[i]); } return randomIds[_tokenId - 1].toString(); } function totalSupply() public view returns(uint256) { return _tokenIds.current(); } // Fee distribution logic below modifier onlyFeeRecipientOrOwner() { bool isFeeRecipient = false; for(uint256 i = 0; i < payoutAddresses.length; i++) { if(payoutAddresses[i] == msg.sender) { isFeeRecipient = true; } } require((isFeeRecipient == true) || (owner() == _msgSender())); _; } function getPercentageOf( uint256 _amount, uint16 _basisPoints ) internal pure returns (uint256 value) { value = (_amount * _basisPoints) / 10000; } function distributeFees() public onlyFeeRecipientOrOwner { uint256 feeCutsTotal; uint256 balance = address(this).balance; for(uint256 i = 0; i < payoutAddresses.length; i++) { uint256 feeCut; if(i < (payoutAddresses.length - 1)) { feeCut = getPercentageOf(balance, payoutAddressBasisPoints[i]); } else { feeCut = (balance - feeCutsTotal); } feeCutsTotal += feeCut; (bool feeCutDeliverySuccess, ) = payoutAddresses[i].call{value: feeCut}(""); require(feeCutDeliverySuccess, "FEE_CUT_NO_DELIVERY"); } } function updateFeePayoutScheme( address[] memory _payoutAddresses, uint16[] memory _payoutAddressBasisPoints ) public onlyOwner { payoutAddresses = _payoutAddresses; payoutAddressBasisPoints = _payoutAddressBasisPoints; } function updateMerkleProofWhitelist(address _merkleProofWhitelist) external onlyOwner { require(isRandomnessRequested == false); merkleProofWhitelist = IWgmisMerkleTreeWhitelist(_merkleProofWhitelist); } // ERC2981 logic function updateRoyaltyInfo(address _royaltyReceiver, uint16 _royaltyBasisPoints) external onlyOwner { royaltyReceiver = _royaltyReceiver; royaltyBasisPoints = _royaltyBasisPoints; } // Takes a _tokenId and _price (in wei) and returns the royalty receiver's address and how much of a royalty the royalty receiver is owed function royaltyInfo(uint256 _tokenId, uint256 _price) external view returns (address receiver, uint256 royaltyAmount) { receiver = royaltyReceiver; royaltyAmount = getPercentageOf(_price, royaltyBasisPoints); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./extensions/IERC721Metadata.sol"; import "../../utils/Address.sol"; import "../../utils/Context.sol"; import "../../utils/Strings.sol"; import "../../utils/introspection/ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ 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); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.0; interface IRandomNumberConsumer { function getRandomNumber() external returns (bytes32 requestId); function readFulfilledRandomness(bytes32 requestId) external view returns (uint256); function setRandomnessRequesterApproval(address _requester, bool _approvalStatus) external; }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.0; // OpenZeppelin Contracts @ version 4.5.0 import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; /** * @title IERC2981 interface * * @notice NFT Royalty Standard. * * See https://eips.ethereum.org/EIPS/eip-2981 */ interface IERC2981 is IERC165 { /** * @notice Determine how much royalty is owed (if any) and to whom. * @param _tokenId - the NFT asset queried for royalty information * @param _salePrice - the sale price of the NFT asset specified by _tokenId * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for _salePrice */ function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view returns ( address receiver, uint256 royaltyAmount ); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"string","name":"_preRevealURI","type":"string"},{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"uint256","name":"_supplyLimit","type":"uint256"},{"internalType":"uint256","name":"_mintingStartTimeUnix","type":"uint256"},{"internalType":"uint256","name":"_singleOrderLimit","type":"uint256"},{"internalType":"address","name":"_vrfProvider","type":"address"},{"internalType":"address[]","name":"_payoutAddresses","type":"address[]"},{"internalType":"uint16[]","name":"_payoutAddressBasisPoints","type":"uint16[]"},{"internalType":"address","name":"_merkleProofWhitelist","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":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"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":[],"name":"commitRandomDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyAccessAllowance","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceInitiateRandomDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"foundationAllowance","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"foundationMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initiateRandomDistribution","outputs":[],"stateMutability":"nonpayable","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":[],"name":"isRandomnessRequested","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"merkleWhitelistClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"merkleWhitelistEarlyAccessMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"metadataOf","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint96","name":"_quantity","type":"uint96"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint96","name":"_quantity","type":"uint96"}],"name":"mintFoundation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint96","name":"_quantity","type":"uint96"}],"name":"mintMerkleWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint96","name":"_merkleProofAmount","type":"uint96"},{"internalType":"uint96","name":"_mintAmount","type":"uint96"}],"name":"mintMerkleWhitelistEarlyAccess","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintingStartTimeUnix","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payoutAddressBasisPoints","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payoutAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preRevealURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomNumberRequestId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyBasisPoints","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"singleOrderLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supplyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_payoutAddresses","type":"address[]"},{"internalType":"uint16[]","name":"_payoutAddressBasisPoints","type":"uint16[]"}],"name":"updateFeePayoutScheme","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_merkleProofWhitelist","type":"address"}],"name":"updateMerkleProofWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royaltyReceiver","type":"address"},{"internalType":"uint16","name":"_royaltyBasisPoints","type":"uint16"}],"name":"updateRoyaltyInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vrfProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vrfResult","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600a600f60006101000a81548161ffff021916908361ffff1602179055506096600f60026101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055503480156200006157600080fd5b5060405162006c3238038062006c328339818101604052810190620000879190620007ed565b8a8a8160009080519060200190620000a192919062000402565b508060019080519060200190620000ba92919062000402565b505050620000dd620000d16200033460201b60201c565b6200033c60201b60201c565b8860109080519060200190620000f592919062000402565b5087601190805190602001906200010e92919062000402565b5086601281905550856013819055508460148190555083601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600080600090505b845181101562000289576000848281518110620001b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161ffff1611801562000214575061271084828151811062000205577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161ffff1611155b6200021e57600080fd5b83818151811062000258577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161ffff168262000271919062000a47565b91508080620002809062000b92565b9150506200016d565b5061271081146200029957600080fd5b8360169080519060200190620002b192919062000493565b508260179080519060200190620002ca92919062000522565b5081601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c8190555066f523226980800060088190555050505050505050505050505062000ccc565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620004109062000b26565b90600052602060002090601f01602090048101928262000434576000855562000480565b82601f106200044f57805160ff191683800117855562000480565b8280016001018555821562000480579182015b828111156200047f57825182559160200191906001019062000462565b5b5090506200048f9190620005d3565b5090565b8280548282559060005260206000209081019282156200050f579160200282015b828111156200050e5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620004b4565b5b5090506200051e9190620005d3565b5090565b82805482825590600052602060002090600f01601090048101928215620005c05791602002820160005b838211156200058e57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200054c565b8015620005be5782816101000a81549061ffff02191690556002016020816001010492830192600103026200058e565b505b509050620005cf9190620005d3565b5090565b5b80821115620005ee576000816000905550600101620005d4565b5090565b6000620006096200060384620009b3565b6200098a565b905080838252602082019050828560208602820111156200062957600080fd5b60005b858110156200065d578162000642888262000721565b8452602084019350602083019250506001810190506200062c565b5050509392505050565b60006200067e6200067884620009e2565b6200098a565b905080838252602082019050828560208602820111156200069e57600080fd5b60005b85811015620006d25781620006b78882620007bf565b845260208401935060208301925050600181019050620006a1565b5050509392505050565b6000620006f3620006ed8462000a11565b6200098a565b9050828152602081018484840111156200070c57600080fd5b6200071984828562000af0565b509392505050565b600081519050620007328162000c7e565b92915050565b600082601f8301126200074a57600080fd5b81516200075c848260208601620005f2565b91505092915050565b600082601f8301126200077757600080fd5b81516200078984826020860162000667565b91505092915050565b600082601f830112620007a457600080fd5b8151620007b6848260208601620006dc565b91505092915050565b600081519050620007d08162000c98565b92915050565b600081519050620007e78162000cb2565b92915050565b60008060008060008060008060008060006101608c8e0312156200081057600080fd5b60008c015167ffffffffffffffff8111156200082b57600080fd5b620008398e828f0162000792565b9b505060208c015167ffffffffffffffff8111156200085757600080fd5b620008658e828f0162000792565b9a505060408c015167ffffffffffffffff8111156200088357600080fd5b620008918e828f0162000792565b99505060608c015167ffffffffffffffff811115620008af57600080fd5b620008bd8e828f0162000792565b9850506080620008d08e828f01620007d6565b97505060a0620008e38e828f01620007d6565b96505060c0620008f68e828f01620007d6565b95505060e0620009098e828f0162000721565b9450506101008c015167ffffffffffffffff8111156200092857600080fd5b620009368e828f0162000738565b9350506101208c015167ffffffffffffffff8111156200095557600080fd5b620009638e828f0162000765565b925050610140620009778e828f0162000721565b9150509295989b509295989b9093969950565b600062000996620009a9565b9050620009a4828262000b5c565b919050565b6000604051905090565b600067ffffffffffffffff821115620009d157620009d062000c3e565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000a0057620009ff62000c3e565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000a2f5762000a2e62000c3e565b5b62000a3a8262000c6d565b9050602081019050919050565b600062000a548262000ae6565b915062000a618362000ae6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000a995762000a9862000be0565b5b828201905092915050565b600062000ab18262000ac6565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000b1057808201518184015260208101905062000af3565b8381111562000b20576000848401525b50505050565b6000600282049050600182168062000b3f57607f821691505b6020821081141562000b565762000b5562000c0f565b5b50919050565b62000b678262000c6d565b810181811067ffffffffffffffff8211171562000b895762000b8862000c3e565b5b80604052505050565b600062000b9f8262000ae6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000bd55762000bd462000be0565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b62000c898162000aa4565b811462000c9557600080fd5b50565b62000ca38162000ab8565b811462000caf57600080fd5b50565b62000cbd8162000ae6565b811462000cc957600080fd5b50565b615f568062000cdc6000396000f3fe6080604052600436106102ad5760003560e01c8063715018a611610175578063a3ff3fdb116100dc578063d9d4363a11610095578063f2fde38b1161006f578063f2fde38b14610a60578063f487077414610a89578063f60d704614610ac6578063fd78b79514610af1576102ad565b8063d9d4363a146109bd578063e77b43d3146109fa578063e985e9c514610a23576102ad565b8063a3ff3fdb146108d0578063b6bad53a146108ec578063b88d4fde14610915578063bb57ad201461093e578063c87b56dd14610955578063c99eb61d14610992576102ad565b806395d89b411161012e57806395d89b41146107d25780639fbc8713146107fd578063a035b1fe14610828578063a22cb46514610853578063a2a759121461087c578063a3f2a2c6146108a5576102ad565b8063715018a6146106fa57806371a07999146107115780637514bdb41461073c578063771291091461075357806379b6ed361461077c5780638da5cb5b146107a7576102ad565b806323b872dd1161021957806342842e0e116101d257806342842e0e146105d65780634ec1b802146105ff5780635b6b62e21461062a5780636352211e146106555780636c0360eb1461069257806370a08231146106bd576102ad565b806323b872dd146104b15780632a55205a146104da57806330807a671461051857806339b5b521146105435780633c8975021461058057806342260b5d146105ab576102ad565b80630ef7cc8e1161026b5780630ef7cc8e146103c257806314f076d9146103ff57806318160ddd1461041657806319d1997a146104415780631a54a0081461046c5780631b025a4014610495576102ad565b80628df643146102b257806301ffc9a7146102dd5780630460c3371461031a57806306fdde0314610331578063081812fc1461035c578063095ea7b314610399575b600080fd5b3480156102be57600080fd5b506102c7610b2e565b6040516102d49190615210565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff919061452f565b610b34565b6040516103119190614d9d565b60405180910390f35b34801561032657600080fd5b5061032f610c7e565b005b34801561033d57600080fd5b50610346610e01565b6040516103539190614dd3565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190614581565b610e93565b6040516103909190614ccd565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614335565b610f18565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614581565b611030565b6040516103f69190614dd3565b60405180910390f35b34801561040b57600080fd5b50610414611385565b005b34801561042257600080fd5b5061042b6114f3565b6040516104389190615210565b60405180910390f35b34801561044d57600080fd5b50610456611504565b6040516104639190615210565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190614419565b61150a565b005b6104af60048036038101906104aa9190614371565b6117fe565b005b3480156104bd57600080fd5b506104d860048036038101906104d391906141f3565b611a0f565b005b3480156104e657600080fd5b5061050160048036038101906104fc91906145d3565b611a6f565b60405161050f929190614d34565b60405180910390f35b34801561052457600080fd5b5061052d611aba565b60405161053a91906151f5565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190614581565b611ace565b60405161057791906151f5565b60405180910390f35b34801561058c57600080fd5b50610595611b06565b6040516105a29190615210565b60405180910390f35b3480156105b757600080fd5b506105c0611b0c565b6040516105cd91906151f5565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f891906141f3565b611b20565b005b34801561060b57600080fd5b50610614611b40565b6040516106219190615254565b60405180910390f35b34801561063657600080fd5b5061063f611b5e565b60405161064c9190614db8565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614581565b611b64565b6040516106899190614ccd565b60405180910390f35b34801561069e57600080fd5b506106a7611c16565b6040516106b49190614dd3565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df919061418e565b611ca4565b6040516106f19190615210565b60405180910390f35b34801561070657600080fd5b5061070f611d5c565b005b34801561071d57600080fd5b50610726611de4565b6040516107339190615210565b60405180910390f35b34801561074857600080fd5b50610751611dea565b005b34801561075f57600080fd5b5061077a600480360381019061077591906142f9565b611f44565b005b34801561078857600080fd5b50610791612022565b60405161079e9190614dd3565b60405180910390f35b3480156107b357600080fd5b506107bc6120b0565b6040516107c99190614ccd565b60405180910390f35b3480156107de57600080fd5b506107e76120da565b6040516107f49190614dd3565b60405180910390f35b34801561080957600080fd5b5061081261216c565b60405161081f9190614ccd565b60405180910390f35b34801561083457600080fd5b5061083d612192565b60405161084a9190615210565b60405180910390f35b34801561085f57600080fd5b5061087a600480360381019061087591906142bd565b612198565b005b34801561088857600080fd5b506108a3600480360381019061089e9190614371565b6121ae565b005b3480156108b157600080fd5b506108ba6123bd565b6040516108c79190615210565b60405180910390f35b6108ea60048036038101906108e59190614471565b6123c3565b005b3480156108f857600080fd5b50610913600480360381019061090e919061418e565b61272a565b005b34801561092157600080fd5b5061093c60048036038101906109379190614242565b61280a565b005b34801561094a57600080fd5b5061095361286c565b005b34801561096157600080fd5b5061097c60048036038101906109779190614581565b612b6a565b6040516109899190614dd3565b60405180910390f35b34801561099e57600080fd5b506109a7612c8a565b6040516109b49190614d9d565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df919061418e565b612c9d565b6040516109f19190615210565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c91906143ad565b612cb5565b005b348015610a2f57600080fd5b50610a4a6004803603810190610a4591906141b7565b612d63565b604051610a579190614d9d565b60405180910390f35b348015610a6c57600080fd5b50610a876004803603810190610a82919061418e565b612df7565b005b348015610a9557600080fd5b50610ab06004803603810190610aab9190614581565b612eef565b604051610abd9190614ccd565b60405180910390f35b348015610ad257600080fd5b50610adb612f2e565b604051610ae89190614ccd565b60405180910390f35b348015610afd57600080fd5b50610b186004803603810190610b13919061418e565b612f54565b604051610b259190614d9d565b60405180910390f35b60145481565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bff57507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c6757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c775750610c7682612f74565b5b9050919050565b610c86613056565b73ffffffffffffffffffffffffffffffffffffffff16610ca46120b0565b73ffffffffffffffffffffffffffffffffffffffff1614610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf1906150d5565b60405180910390fd5b6000610d06600761305e565b905060008111610d1557600080fd5b60001515600960009054906101000a900460ff16151514610d3557600080fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663dbdff2c16040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610da457600080fd5b505af1158015610db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddc9190614506565b600a819055506001600960006101000a81548160ff0219169083151502179055505050565b606060008054610e109061558c565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3c9061558c565b8015610e895780601f10610e5e57610100808354040283529160200191610e89565b820191906000526020600020905b815481529060010190602001808311610e6c57829003601f168201915b5050505050905090565b6000610e9e8261306c565b610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed4906150b5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f2382611b64565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8b90615155565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610fb3613056565b73ffffffffffffffffffffffffffffffffffffffff161480610fe25750610fe181610fdc613056565b612d63565b5b611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890614fd5565b60405180910390fd5b61102b83836130d8565b505050565b606060008211801561104957506110456114f3565b8211155b611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90615055565b60405180910390fd5b6000600b54905060008114156110b05760405180602001604052806000815250915050611380565b600060125467ffffffffffffffff8111156110f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111225781602001602082028036833780820191505090505b50905060005b60125481101561119857806122b86111409190615472565b828281518110611179577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611190906155ef565b915050611128565b5060005b60016012546111ab9190615472565b811015611325576000816012546111c29190615472565b84836040516020016111d592919061522b565b6040516020818303038152906040528051906020012060001c6111f8919061566d565b826112039190615391565b905082818151811061123e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183838151811061127f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518484815181106112c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101858481518110611300577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018281525082815250505050808061131d906155ef565b91505061119c565b5061137b816001866113379190615472565b8151811061136e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151613191565b925050505b919050565b601254611392600761305e565b146113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c9906151d5565b60405180910390fd5b60001515600960009054906101000a900460ff16151514611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90614e75565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663dbdff2c16040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cf9190614506565b600a819055506001600960006101000a81548160ff02191690831515021790555050565b60006114ff600761305e565b905090565b60125481565b60001515600960009054906101000a900460ff16151514611560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155790614f75565b60405180910390fd5b620151806013546115719190615472565b4210156115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa90615115565b60405180910390fd5b601254816bffffffffffffffffffffffff166115cf600761305e565b6115d99190615391565b111561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190615035565b60405180910390fd5b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e906151b5565b60405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631780b5cd848433856040518563ffffffff1660e01b81526004016117089493929190614d5d565b60206040518083038186803b15801561172057600080fd5b505afa158015611734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175891906144dd565b611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90614f95565b60405180910390fd5b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506117f9338261333e565b505050565b60001515600960009054906101000a900460ff16151514611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90614f75565b60405180910390fd5b6000816bffffffffffffffffffffffff16116118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c90615075565b60405180910390fd5b6013544210156118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190614e15565b60405180910390fd5b601454816bffffffffffffffffffffffff16111561193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614df5565b60405180910390fd5b601254816bffffffffffffffffffffffff16611959600761305e565b6119639190615391565b11156119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199b90615035565b60405180910390fd5b806bffffffffffffffffffffffff166008546119c09190615418565b3414611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890615135565b60405180910390fd5b611a0b828261333e565b5050565b611a20611a1a613056565b826133a0565b611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690615175565b60405180910390fd5b611a6a83838361347e565b505050565b600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150611ab183601860149054906101000a900461ffff166136da565b90509250929050565b600f60009054906101000a900461ffff1681565b60178181548110611ade57600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b60135481565b601860149054906101000a900461ffff1681565b611b3b8383836040518060200160405280600081525061280a565b505050565b600f60029054906101000a90046bffffffffffffffffffffffff1681565b600a5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0490615015565b60405180910390fd5b80915050919050565b60118054611c239061558c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4f9061558c565b8015611c9c5780601f10611c7157610100808354040283529160200191611c9c565b820191906000526020600020905b815481529060010190602001808311611c7f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0c90614ff5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d64613056565b73ffffffffffffffffffffffffffffffffffffffff16611d826120b0565b73ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf906150d5565b60405180910390fd5b611de26000613701565b565b600b5481565b60011515600960009054906101000a900460ff16151514611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3790614e75565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663568ee8be600a546040518263ffffffff1660e01b8152600401611ea49190614db8565b60206040518083038186803b158015611ebc57600080fd5b505afa158015611ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef491906145aa565b905060008111611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3090614f35565b60405180910390fd5b80600b819055505050565b611f4c613056565b73ffffffffffffffffffffffffffffffffffffffff16611f6a6120b0565b73ffffffffffffffffffffffffffffffffffffffff1614611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb7906150d5565b60405180910390fd5b81601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860146101000a81548161ffff021916908361ffff1602179055505050565b6010805461202f9061558c565b80601f016020809104026020016040519081016040528092919081815260200182805461205b9061558c565b80156120a85780601f1061207d576101008083540402835291602001916120a8565b820191906000526020600020905b81548152906001019060200180831161208b57829003601f168201915b505050505081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546120e99061558c565b80601f01602080910402602001604051908101604052809291908181526020018280546121159061558c565b80156121625780601f1061213757610100808354040283529160200191612162565b820191906000526020600020905b81548152906001019060200180831161214557829003601f168201915b5050505050905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b6121aa6121a3613056565b83836137c7565b5050565b6121b6613056565b73ffffffffffffffffffffffffffffffffffffffff166121d46120b0565b73ffffffffffffffffffffffffffffffffffffffff161461222a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612221906150d5565b60405180910390fd5b60001515600960009054906101000a900460ff1615151461224a57600080fd5b6000816bffffffffffffffffffffffff161161229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229290615075565b60405180910390fd5b600f60029054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16816bffffffffffffffffffffffff16600c546122e09190615391565b1115612321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231890614ed5565b60405180910390fd5b601254816bffffffffffffffffffffffff1661233d600761305e565b6123479190615391565b1115612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90615035565b60405180910390fd5b806bffffffffffffffffffffffff16600c60008282546123a89190615391565b925050819055506123b9828261333e565b5050565b600c5481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631780b5cd858533866040518563ffffffff1660e01b81526004016124249493929190614d5d565b60206040518083038186803b15801561243c57600080fd5b505afa158015612450573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247491906144dd565b6124b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124aa90614f95565b60405180910390fd5b60001515600960009054906101000a900460ff16151514612509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250090614f75565b60405180910390fd5b6201518060135461251a9190615472565b42101561255c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255390615115565b60405180910390fd5b601254816bffffffffffffffffffffffff16612578600761305e565b6125829190615391565b11156125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba90615035565b60405180910390fd5b806bffffffffffffffffffffffff166008546125df9190615418565b3414612620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261790615135565b60405180910390fd5b806bffffffffffffffffffffffff16600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461267d9190615391565b92505081905550600f60009054906101000a900461ffff1661ffff16600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190615195565b60405180910390fd5b612724338261333e565b50505050565b612732613056565b73ffffffffffffffffffffffffffffffffffffffff166127506120b0565b73ffffffffffffffffffffffffffffffffffffffff16146127a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279d906150d5565b60405180910390fd5b60001515600960009054906101000a900460ff161515146127c657600080fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61281b612815613056565b836133a0565b61285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285190615175565b60405180910390fd5b61286684848484613934565b50505050565b6000805b60168054905081101561292d573373ffffffffffffffffffffffffffffffffffffffff16601682815481106128ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561291a57600191505b8080612925906155ef565b915050612870565b5060011515811515148061297a5750612944613056565b73ffffffffffffffffffffffffffffffffffffffff166129626120b0565b73ffffffffffffffffffffffffffffffffffffffff16145b61298357600080fd5b60008047905060005b601680549050811015612b6457600060016016805490506129ad9190615472565b821015612a2257612a1b83601784815481106129f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff166136da565b9050612a31565b8383612a2e9190615472565b90505b8084612a3d9190615391565b9350600060168381548110612a7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612ac990614cb8565b60006040518083038185875af1925050503d8060008114612b06576040519150601f19603f3d011682016040523d82523d6000602084013e612b0b565b606091505b5050905080612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690614f15565b60405180910390fd5b50508080612b5c906155ef565b91505061298c565b50505050565b6060612b758261306c565b612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90614fb5565b60405180910390fd5b6000600b541415612c515760108054612bcc9061558c565b80601f0160208091040260200160405190810160405280929190818152602001828054612bf89061558c565b8015612c455780601f10612c1a57610100808354040283529160200191612c45565b820191906000526020600020905b815481529060010190602001808311612c2857829003601f168201915b50505050509050612c85565b6000612c5c83611030565b9050601181604051602001612c72929190614c89565b6040516020818303038152906040529150505b919050565b600960009054906101000a900460ff1681565b600e6020528060005260406000206000915090505481565b612cbd613056565b73ffffffffffffffffffffffffffffffffffffffff16612cdb6120b0565b73ffffffffffffffffffffffffffffffffffffffff1614612d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d28906150d5565b60405180910390fd5b8160169080519060200190612d47929190613d8d565b508060179080519060200190612d5e929190613e17565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612dff613056565b73ffffffffffffffffffffffffffffffffffffffff16612e1d6120b0565b73ffffffffffffffffffffffffffffffffffffffff1614612e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6a906150d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eda90614e55565b60405180910390fd5b612eec81613701565b50565b60168181548110612eff57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061303f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061304f575061304e82613990565b5b9050919050565b600033905090565b600081600001549050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661314b83611b64565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606060008214156131d9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613339565b600082905060005b6000821461320b5780806131f4906155ef565b915050600a8261320491906153e7565b91506131e1565b60008167ffffffffffffffff81111561324d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561327f5781602001600182028036833780820191505090505b5090505b60008514613332576001826132989190615472565b9150600a856132a7919061566d565b60306132b39190615391565b60f81b8183815181106132ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561332b91906153e7565b9450613283565b8093505050505b919050565b60005b816bffffffffffffffffffffffff16816bffffffffffffffffffffffff16101561339b5761336f60076139fa565b600061337b600761305e565b90506133878482613a10565b50808061339390615638565b915050613341565b505050565b60006133ab8261306c565b6133ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e190614f55565b60405180910390fd5b60006133f583611b64565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061346457508373ffffffffffffffffffffffffffffffffffffffff1661344c84610e93565b73ffffffffffffffffffffffffffffffffffffffff16145b8061347557506134748185612d63565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661349e82611b64565b73ffffffffffffffffffffffffffffffffffffffff16146134f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134eb906150f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355b90614eb5565b60405180910390fd5b61356f838383613bde565b61357a6000826130d8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135ca9190615472565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136219190615391565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006127108261ffff16846136ef9190615418565b6136f991906153e7565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382d90614ef5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516139279190614d9d565b60405180910390a3505050565b61393f84848461347e565b61394b84848484613be3565b61398a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398190614e35565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7790615095565b60405180910390fd5b613a898161306c565b15613ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac090614e95565b60405180910390fd5b613ad560008383613bde565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b259190615391565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6000613c048473ffffffffffffffffffffffffffffffffffffffff16613d7a565b15613d6d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613c2d613056565b8786866040518563ffffffff1660e01b8152600401613c4f9493929190614ce8565b602060405180830381600087803b158015613c6957600080fd5b505af1925050508015613c9a57506040513d601f19601f82011682018060405250810190613c979190614558565b60015b613d1d573d8060008114613cca576040519150601f19603f3d011682016040523d82523d6000602084013e613ccf565b606091505b50600081511415613d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0c90614e35565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613d72565b600190505b949350505050565b600080823b905060008111915050919050565b828054828255906000526020600020908101928215613e06579160200282015b82811115613e055782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613dad565b5b509050613e139190613ec1565b5090565b82805482825590600052602060002090600f01601090048101928215613eb05791602002820160005b83821115613e8057835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613e40565b8015613eae5782816101000a81549061ffff0219169055600201602081600101049283019260010302613e80565b505b509050613ebd9190613ec1565b5090565b5b80821115613eda576000816000905550600101613ec2565b5090565b6000613ef1613eec84615294565b61526f565b90508083825260208201905082856020860282011115613f1057600080fd5b60005b85811015613f405781613f268882613ff4565b845260208401935060208301925050600181019050613f13565b5050509392505050565b6000613f5d613f58846152c0565b61526f565b90508083825260208201905082856020860282011115613f7c57600080fd5b60005b85811015613fac5781613f92888261413a565b845260208401935060208301925050600181019050613f7f565b5050509392505050565b6000613fc9613fc4846152ec565b61526f565b905082815260208101848484011115613fe157600080fd5b613fec84828561554a565b509392505050565b60008135905061400381615e7f565b92915050565b600082601f83011261401a57600080fd5b813561402a848260208601613ede565b91505092915050565b60008083601f84011261404557600080fd5b8235905067ffffffffffffffff81111561405e57600080fd5b60208301915083602082028301111561407657600080fd5b9250929050565b600082601f83011261408e57600080fd5b813561409e848260208601613f4a565b91505092915050565b6000813590506140b681615e96565b92915050565b6000815190506140cb81615e96565b92915050565b6000815190506140e081615ead565b92915050565b6000813590506140f581615ec4565b92915050565b60008151905061410a81615ec4565b92915050565b600082601f83011261412157600080fd5b8135614131848260208601613fb6565b91505092915050565b60008135905061414981615edb565b92915050565b60008135905061415e81615ef2565b92915050565b60008151905061417381615ef2565b92915050565b60008135905061418881615f09565b92915050565b6000602082840312156141a057600080fd5b60006141ae84828501613ff4565b91505092915050565b600080604083850312156141ca57600080fd5b60006141d885828601613ff4565b92505060206141e985828601613ff4565b9150509250929050565b60008060006060848603121561420857600080fd5b600061421686828701613ff4565b935050602061422786828701613ff4565b92505060406142388682870161414f565b9150509250925092565b6000806000806080858703121561425857600080fd5b600061426687828801613ff4565b945050602061427787828801613ff4565b93505060406142888782880161414f565b925050606085013567ffffffffffffffff8111156142a557600080fd5b6142b187828801614110565b91505092959194509250565b600080604083850312156142d057600080fd5b60006142de85828601613ff4565b92505060206142ef858286016140a7565b9150509250929050565b6000806040838503121561430c57600080fd5b600061431a85828601613ff4565b925050602061432b8582860161413a565b9150509250929050565b6000806040838503121561434857600080fd5b600061435685828601613ff4565b92505060206143678582860161414f565b9150509250929050565b6000806040838503121561438457600080fd5b600061439285828601613ff4565b92505060206143a385828601614179565b9150509250929050565b600080604083850312156143c057600080fd5b600083013567ffffffffffffffff8111156143da57600080fd5b6143e685828601614009565b925050602083013567ffffffffffffffff81111561440357600080fd5b61440f8582860161407d565b9150509250929050565b60008060006040848603121561442e57600080fd5b600084013567ffffffffffffffff81111561444857600080fd5b61445486828701614033565b9350935050602061446786828701614179565b9150509250925092565b6000806000806060858703121561448757600080fd5b600085013567ffffffffffffffff8111156144a157600080fd5b6144ad87828801614033565b945094505060206144c087828801614179565b92505060406144d187828801614179565b91505092959194509250565b6000602082840312156144ef57600080fd5b60006144fd848285016140bc565b91505092915050565b60006020828403121561451857600080fd5b6000614526848285016140d1565b91505092915050565b60006020828403121561454157600080fd5b600061454f848285016140e6565b91505092915050565b60006020828403121561456a57600080fd5b6000614578848285016140fb565b91505092915050565b60006020828403121561459357600080fd5b60006145a18482850161414f565b91505092915050565b6000602082840312156145bc57600080fd5b60006145ca84828501614164565b91505092915050565b600080604083850312156145e657600080fd5b60006145f48582860161414f565b92505060206146058582860161414f565b9150509250929050565b614618816154a6565b82525050565b600061462a8385615348565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561465957600080fd5b60208302925061466a83858461554a565b82840190509392505050565b61467f816154b8565b82525050565b61468e816154c4565b82525050565b600061469f82615332565b6146a98185615359565b93506146b9818560208601615559565b6146c28161575a565b840191505092915050565b60006146d88261533d565b6146e28185615375565b93506146f2818560208601615559565b6146fb8161575a565b840191505092915050565b60006147118261533d565b61471b8185615386565b935061472b818560208601615559565b80840191505092915050565b600081546147448161558c565b61474e8186615386565b94506001821660008114614769576001811461477a576147ad565b60ff198316865281860193506147ad565b6147838561531d565b60005b838110156147a557815481890152600182019150602081019050614786565b838801955050505b50505092915050565b60006147c3601a83615375565b91506147ce8261576b565b602082019050919050565b60006147e6601a83615375565b91506147f182615794565b602082019050919050565b6000614809603283615375565b9150614814826157bd565b604082019050919050565b600061482c602683615375565b91506148378261580c565b604082019050919050565b600061484f601c83615375565b915061485a8261585b565b602082019050919050565b6000614872601c83615375565b915061487d82615884565b602082019050919050565b6000614895602483615375565b91506148a0826158ad565b604082019050919050565b60006148b8602183615375565b91506148c3826158fc565b604082019050919050565b60006148db601983615375565b91506148e68261594b565b602082019050919050565b60006148fe601383615375565b915061490982615974565b602082019050919050565b6000614921601883615375565b915061492c8261599d565b602082019050919050565b6000614944602c83615375565b915061494f826159c6565b604082019050919050565b6000614967600c83615375565b915061497282615a15565b602082019050919050565b600061498a601483615375565b915061499582615a3e565b602082019050919050565b60006149ad601183615375565b91506149b882615a67565b602082019050919050565b60006149d0603883615375565b91506149db82615a90565b604082019050919050565b60006149f3602a83615375565b91506149fe82615adf565b604082019050919050565b6000614a16602983615375565b9150614a2182615b2e565b604082019050919050565b6000614a39601283615375565b9150614a4482615b7d565b602082019050919050565b6000614a5c601083615375565b9150614a6782615ba6565b602082019050919050565b6000614a7f601083615375565b9150614a8a82615bcf565b602082019050919050565b6000614aa2602083615375565b9150614aad82615bf8565b602082019050919050565b6000614ac5602c83615375565b9150614ad082615c21565b604082019050919050565b6000614ae8600583615386565b9150614af382615c70565b600582019050919050565b6000614b0b602083615375565b9150614b1682615c99565b602082019050919050565b6000614b2e602983615375565b9150614b3982615cc2565b604082019050919050565b6000614b51601883615375565b9150614b5c82615d11565b602082019050919050565b6000614b74601383615375565b9150614b7f82615d3a565b602082019050919050565b6000614b97602183615375565b9150614ba282615d63565b604082019050919050565b6000614bba60008361536a565b9150614bc582615db2565b600082019050919050565b6000614bdd603183615375565b9150614be882615db5565b604082019050919050565b6000614c00601e83615375565b9150614c0b82615e04565b602082019050919050565b6000614c23601983615375565b9150614c2e82615e2d565b602082019050919050565b6000614c46600f83615375565b9150614c5182615e56565b602082019050919050565b614c65816154fa565b82525050565b614c7481615528565b82525050565b614c8381615532565b82525050565b6000614c958285614737565b9150614ca18284614706565b9150614cac82614adb565b91508190509392505050565b6000614cc382614bad565b9150819050919050565b6000602082019050614ce2600083018461460f565b92915050565b6000608082019050614cfd600083018761460f565b614d0a602083018661460f565b614d176040830185614c6b565b8181036060830152614d298184614694565b905095945050505050565b6000604082019050614d49600083018561460f565b614d566020830184614c6b565b9392505050565b60006060820190508181036000830152614d7881868861461e565b9050614d87602083018561460f565b614d946040830184614c7a565b95945050505050565b6000602082019050614db26000830184614676565b92915050565b6000602082019050614dcd6000830184614685565b92915050565b60006020820190508181036000830152614ded81846146cd565b905092915050565b60006020820190508181036000830152614e0e816147b6565b9050919050565b60006020820190508181036000830152614e2e816147d9565b9050919050565b60006020820190508181036000830152614e4e816147fc565b9050919050565b60006020820190508181036000830152614e6e8161481f565b9050919050565b60006020820190508181036000830152614e8e81614842565b9050919050565b60006020820190508181036000830152614eae81614865565b9050919050565b60006020820190508181036000830152614ece81614888565b9050919050565b60006020820190508181036000830152614eee816148ab565b9050919050565b60006020820190508181036000830152614f0e816148ce565b9050919050565b60006020820190508181036000830152614f2e816148f1565b9050919050565b60006020820190508181036000830152614f4e81614914565b9050919050565b60006020820190508181036000830152614f6e81614937565b9050919050565b60006020820190508181036000830152614f8e8161495a565b9050919050565b60006020820190508181036000830152614fae8161497d565b9050919050565b60006020820190508181036000830152614fce816149a0565b9050919050565b60006020820190508181036000830152614fee816149c3565b9050919050565b6000602082019050818103600083015261500e816149e6565b9050919050565b6000602082019050818103600083015261502e81614a09565b9050919050565b6000602082019050818103600083015261504e81614a2c565b9050919050565b6000602082019050818103600083015261506e81614a4f565b9050919050565b6000602082019050818103600083015261508e81614a72565b9050919050565b600060208201905081810360008301526150ae81614a95565b9050919050565b600060208201905081810360008301526150ce81614ab8565b9050919050565b600060208201905081810360008301526150ee81614afe565b9050919050565b6000602082019050818103600083015261510e81614b21565b9050919050565b6000602082019050818103600083015261512e81614b44565b9050919050565b6000602082019050818103600083015261514e81614b67565b9050919050565b6000602082019050818103600083015261516e81614b8a565b9050919050565b6000602082019050818103600083015261518e81614bd0565b9050919050565b600060208201905081810360008301526151ae81614bf3565b9050919050565b600060208201905081810360008301526151ce81614c16565b9050919050565b600060208201905081810360008301526151ee81614c39565b9050919050565b600060208201905061520a6000830184614c5c565b92915050565b60006020820190506152256000830184614c6b565b92915050565b60006040820190506152406000830185614c6b565b61524d6020830184614c6b565b9392505050565b60006020820190506152696000830184614c7a565b92915050565b600061527961528a565b905061528582826155be565b919050565b6000604051905090565b600067ffffffffffffffff8211156152af576152ae61572b565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156152db576152da61572b565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156153075761530661572b565b5b6153108261575a565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061539c82615528565b91506153a783615528565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153dc576153db61569e565b5b828201905092915050565b60006153f282615528565b91506153fd83615528565b92508261540d5761540c6156cd565b5b828204905092915050565b600061542382615528565b915061542e83615528565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156154675761546661569e565b5b828202905092915050565b600061547d82615528565b915061548883615528565b92508282101561549b5761549a61569e565b5b828203905092915050565b60006154b182615508565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561557757808201518184015260208101905061555c565b83811115615586576000848401525b50505050565b600060028204905060018216806155a457607f821691505b602082108114156155b8576155b76156fc565b5b50919050565b6155c78261575a565b810181811067ffffffffffffffff821117156155e6576155e561572b565b5b80604052505050565b60006155fa82615528565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561562d5761562c61569e565b5b600182019050919050565b600061564382615532565b91506bffffffffffffffffffffffff8214156156625761566161569e565b5b600182019050919050565b600061567882615528565b915061568383615528565b925082615693576156926156cd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455843454544535f53494e474c455f4f524445525f4c494d4954000000000000600082015250565b7f4d494e54494e475f504552494f445f4e4f545f53544152544544000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f52414e444f4d4e4553535f5245515f4e4f545f494e4954494154454400000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f464f554e444154494f4e5f4d494e545f455843454544535f414c4c4f57414e4360008201527f4500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4645455f4355545f4e4f5f44454c495645525900000000000000000000000000600082015250565b7f52414e444f4d4e4553535f4e4f545f46554c46494c4c45440000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d494e54494e475f4f5645520000000000000000000000000000000000000000600082015250565b7f494e56414c49445f4d45524b4c455f50524f4f46000000000000000000000000600082015250565b7f4e4f4e4558495354454e545f544f4b454e000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f455843454544535f4d41585f535550504c590000000000000000000000000000600082015250565b7f494e56414c49445f544f4b454e5f494400000000000000000000000000000000600082015250565b7f4e4f5f5a45524f5f5155414e5449545900000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4541524c595f4143434553535f4e4f545f535441525445440000000000000000600082015250565b7f494e434f52524543545f4554485f56414c554500000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455843454544535f4541524c595f4143434553535f414c4c4f57414e43450000600082015250565b7f4d45524b4c455f434c41494d5f414c52454144595f4d41444500000000000000600082015250565b7f4d494e54494e475f4f4e474f494e470000000000000000000000000000000000600082015250565b615e88816154a6565b8114615e9357600080fd5b50565b615e9f816154b8565b8114615eaa57600080fd5b50565b615eb6816154c4565b8114615ec157600080fd5b50565b615ecd816154ce565b8114615ed857600080fd5b50565b615ee4816154fa565b8114615eef57600080fd5b50565b615efb81615528565b8114615f0657600080fd5b50565b615f1281615532565b8114615f1d57600080fd5b5056fea26469706673582212209590a333479732841171ba46b14412418f11454fa14c4e7c8958d7c75301918b64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000022b80000000000000000000000000000000000000000000000000000000062e33110000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009a5ac0108f5cf769e517cf6a78da720171a5c7b500000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000fac28dc73edea55de482116a890e64c0e93edc71000000000000000000000000000000000000000000000000000000000000000577676d6973000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000557474d49530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045697066733a2f2f516d515439557131524a67346759366a45463247464262654a3569673438504653364a51385563554d77737567512f756e72657665616c65642e6a736f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d515439557131524a67346759366a45463247464262654a3569673438504653364a51385563554d77737567512f0000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000003fad3d09dc89ca4a07928f6d5e292ad360f726730000000000000000000000006904f0db06d0d45705b9fcdb17c90f6625226a9e0000000000000000000000005858eafe41ca64eeaf404c4cf511c24526bea1a20000000000000000000000001d95b0b6d3582feec7ef35d2ccf91564ded0cf7f0000000000000000000000009f0cbc2982d397293462e5bb45eb48255a46df0b0000000000000000000000000ddfa905aaddddc533bff695316979c0bb2d9eb80000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode
0x6080604052600436106102ad5760003560e01c8063715018a611610175578063a3ff3fdb116100dc578063d9d4363a11610095578063f2fde38b1161006f578063f2fde38b14610a60578063f487077414610a89578063f60d704614610ac6578063fd78b79514610af1576102ad565b8063d9d4363a146109bd578063e77b43d3146109fa578063e985e9c514610a23576102ad565b8063a3ff3fdb146108d0578063b6bad53a146108ec578063b88d4fde14610915578063bb57ad201461093e578063c87b56dd14610955578063c99eb61d14610992576102ad565b806395d89b411161012e57806395d89b41146107d25780639fbc8713146107fd578063a035b1fe14610828578063a22cb46514610853578063a2a759121461087c578063a3f2a2c6146108a5576102ad565b8063715018a6146106fa57806371a07999146107115780637514bdb41461073c578063771291091461075357806379b6ed361461077c5780638da5cb5b146107a7576102ad565b806323b872dd1161021957806342842e0e116101d257806342842e0e146105d65780634ec1b802146105ff5780635b6b62e21461062a5780636352211e146106555780636c0360eb1461069257806370a08231146106bd576102ad565b806323b872dd146104b15780632a55205a146104da57806330807a671461051857806339b5b521146105435780633c8975021461058057806342260b5d146105ab576102ad565b80630ef7cc8e1161026b5780630ef7cc8e146103c257806314f076d9146103ff57806318160ddd1461041657806319d1997a146104415780631a54a0081461046c5780631b025a4014610495576102ad565b80628df643146102b257806301ffc9a7146102dd5780630460c3371461031a57806306fdde0314610331578063081812fc1461035c578063095ea7b314610399575b600080fd5b3480156102be57600080fd5b506102c7610b2e565b6040516102d49190615210565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff919061452f565b610b34565b6040516103119190614d9d565b60405180910390f35b34801561032657600080fd5b5061032f610c7e565b005b34801561033d57600080fd5b50610346610e01565b6040516103539190614dd3565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190614581565b610e93565b6040516103909190614ccd565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614335565b610f18565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614581565b611030565b6040516103f69190614dd3565b60405180910390f35b34801561040b57600080fd5b50610414611385565b005b34801561042257600080fd5b5061042b6114f3565b6040516104389190615210565b60405180910390f35b34801561044d57600080fd5b50610456611504565b6040516104639190615210565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190614419565b61150a565b005b6104af60048036038101906104aa9190614371565b6117fe565b005b3480156104bd57600080fd5b506104d860048036038101906104d391906141f3565b611a0f565b005b3480156104e657600080fd5b5061050160048036038101906104fc91906145d3565b611a6f565b60405161050f929190614d34565b60405180910390f35b34801561052457600080fd5b5061052d611aba565b60405161053a91906151f5565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190614581565b611ace565b60405161057791906151f5565b60405180910390f35b34801561058c57600080fd5b50610595611b06565b6040516105a29190615210565b60405180910390f35b3480156105b757600080fd5b506105c0611b0c565b6040516105cd91906151f5565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f891906141f3565b611b20565b005b34801561060b57600080fd5b50610614611b40565b6040516106219190615254565b60405180910390f35b34801561063657600080fd5b5061063f611b5e565b60405161064c9190614db8565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614581565b611b64565b6040516106899190614ccd565b60405180910390f35b34801561069e57600080fd5b506106a7611c16565b6040516106b49190614dd3565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df919061418e565b611ca4565b6040516106f19190615210565b60405180910390f35b34801561070657600080fd5b5061070f611d5c565b005b34801561071d57600080fd5b50610726611de4565b6040516107339190615210565b60405180910390f35b34801561074857600080fd5b50610751611dea565b005b34801561075f57600080fd5b5061077a600480360381019061077591906142f9565b611f44565b005b34801561078857600080fd5b50610791612022565b60405161079e9190614dd3565b60405180910390f35b3480156107b357600080fd5b506107bc6120b0565b6040516107c99190614ccd565b60405180910390f35b3480156107de57600080fd5b506107e76120da565b6040516107f49190614dd3565b60405180910390f35b34801561080957600080fd5b5061081261216c565b60405161081f9190614ccd565b60405180910390f35b34801561083457600080fd5b5061083d612192565b60405161084a9190615210565b60405180910390f35b34801561085f57600080fd5b5061087a600480360381019061087591906142bd565b612198565b005b34801561088857600080fd5b506108a3600480360381019061089e9190614371565b6121ae565b005b3480156108b157600080fd5b506108ba6123bd565b6040516108c79190615210565b60405180910390f35b6108ea60048036038101906108e59190614471565b6123c3565b005b3480156108f857600080fd5b50610913600480360381019061090e919061418e565b61272a565b005b34801561092157600080fd5b5061093c60048036038101906109379190614242565b61280a565b005b34801561094a57600080fd5b5061095361286c565b005b34801561096157600080fd5b5061097c60048036038101906109779190614581565b612b6a565b6040516109899190614dd3565b60405180910390f35b34801561099e57600080fd5b506109a7612c8a565b6040516109b49190614d9d565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df919061418e565b612c9d565b6040516109f19190615210565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c91906143ad565b612cb5565b005b348015610a2f57600080fd5b50610a4a6004803603810190610a4591906141b7565b612d63565b604051610a579190614d9d565b60405180910390f35b348015610a6c57600080fd5b50610a876004803603810190610a82919061418e565b612df7565b005b348015610a9557600080fd5b50610ab06004803603810190610aab9190614581565b612eef565b604051610abd9190614ccd565b60405180910390f35b348015610ad257600080fd5b50610adb612f2e565b604051610ae89190614ccd565b60405180910390f35b348015610afd57600080fd5b50610b186004803603810190610b13919061418e565b612f54565b604051610b259190614d9d565b60405180910390f35b60145481565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bff57507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c6757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c775750610c7682612f74565b5b9050919050565b610c86613056565b73ffffffffffffffffffffffffffffffffffffffff16610ca46120b0565b73ffffffffffffffffffffffffffffffffffffffff1614610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf1906150d5565b60405180910390fd5b6000610d06600761305e565b905060008111610d1557600080fd5b60001515600960009054906101000a900460ff16151514610d3557600080fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663dbdff2c16040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610da457600080fd5b505af1158015610db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddc9190614506565b600a819055506001600960006101000a81548160ff0219169083151502179055505050565b606060008054610e109061558c565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3c9061558c565b8015610e895780601f10610e5e57610100808354040283529160200191610e89565b820191906000526020600020905b815481529060010190602001808311610e6c57829003601f168201915b5050505050905090565b6000610e9e8261306c565b610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed4906150b5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f2382611b64565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8b90615155565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610fb3613056565b73ffffffffffffffffffffffffffffffffffffffff161480610fe25750610fe181610fdc613056565b612d63565b5b611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890614fd5565b60405180910390fd5b61102b83836130d8565b505050565b606060008211801561104957506110456114f3565b8211155b611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90615055565b60405180910390fd5b6000600b54905060008114156110b05760405180602001604052806000815250915050611380565b600060125467ffffffffffffffff8111156110f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111225781602001602082028036833780820191505090505b50905060005b60125481101561119857806122b86111409190615472565b828281518110611179577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611190906155ef565b915050611128565b5060005b60016012546111ab9190615472565b811015611325576000816012546111c29190615472565b84836040516020016111d592919061522b565b6040516020818303038152906040528051906020012060001c6111f8919061566d565b826112039190615391565b905082818151811061123e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015183838151811061127f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518484815181106112c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101858481518110611300577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018281525082815250505050808061131d906155ef565b91505061119c565b5061137b816001866113379190615472565b8151811061136e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151613191565b925050505b919050565b601254611392600761305e565b146113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c9906151d5565b60405180910390fd5b60001515600960009054906101000a900460ff16151514611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90614e75565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663dbdff2c16040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cf9190614506565b600a819055506001600960006101000a81548160ff02191690831515021790555050565b60006114ff600761305e565b905090565b60125481565b60001515600960009054906101000a900460ff16151514611560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155790614f75565b60405180910390fd5b620151806013546115719190615472565b4210156115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa90615115565b60405180910390fd5b601254816bffffffffffffffffffffffff166115cf600761305e565b6115d99190615391565b111561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190615035565b60405180910390fd5b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e906151b5565b60405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631780b5cd848433856040518563ffffffff1660e01b81526004016117089493929190614d5d565b60206040518083038186803b15801561172057600080fd5b505afa158015611734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175891906144dd565b611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90614f95565b60405180910390fd5b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506117f9338261333e565b505050565b60001515600960009054906101000a900460ff16151514611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90614f75565b60405180910390fd5b6000816bffffffffffffffffffffffff16116118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c90615075565b60405180910390fd5b6013544210156118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190614e15565b60405180910390fd5b601454816bffffffffffffffffffffffff16111561193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614df5565b60405180910390fd5b601254816bffffffffffffffffffffffff16611959600761305e565b6119639190615391565b11156119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199b90615035565b60405180910390fd5b806bffffffffffffffffffffffff166008546119c09190615418565b3414611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890615135565b60405180910390fd5b611a0b828261333e565b5050565b611a20611a1a613056565b826133a0565b611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690615175565b60405180910390fd5b611a6a83838361347e565b505050565b600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150611ab183601860149054906101000a900461ffff166136da565b90509250929050565b600f60009054906101000a900461ffff1681565b60178181548110611ade57600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b60135481565b601860149054906101000a900461ffff1681565b611b3b8383836040518060200160405280600081525061280a565b505050565b600f60029054906101000a90046bffffffffffffffffffffffff1681565b600a5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0490615015565b60405180910390fd5b80915050919050565b60118054611c239061558c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4f9061558c565b8015611c9c5780601f10611c7157610100808354040283529160200191611c9c565b820191906000526020600020905b815481529060010190602001808311611c7f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0c90614ff5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d64613056565b73ffffffffffffffffffffffffffffffffffffffff16611d826120b0565b73ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf906150d5565b60405180910390fd5b611de26000613701565b565b600b5481565b60011515600960009054906101000a900460ff16151514611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3790614e75565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663568ee8be600a546040518263ffffffff1660e01b8152600401611ea49190614db8565b60206040518083038186803b158015611ebc57600080fd5b505afa158015611ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef491906145aa565b905060008111611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3090614f35565b60405180910390fd5b80600b819055505050565b611f4c613056565b73ffffffffffffffffffffffffffffffffffffffff16611f6a6120b0565b73ffffffffffffffffffffffffffffffffffffffff1614611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb7906150d5565b60405180910390fd5b81601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860146101000a81548161ffff021916908361ffff1602179055505050565b6010805461202f9061558c565b80601f016020809104026020016040519081016040528092919081815260200182805461205b9061558c565b80156120a85780601f1061207d576101008083540402835291602001916120a8565b820191906000526020600020905b81548152906001019060200180831161208b57829003601f168201915b505050505081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546120e99061558c565b80601f01602080910402602001604051908101604052809291908181526020018280546121159061558c565b80156121625780601f1061213757610100808354040283529160200191612162565b820191906000526020600020905b81548152906001019060200180831161214557829003601f168201915b5050505050905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b6121aa6121a3613056565b83836137c7565b5050565b6121b6613056565b73ffffffffffffffffffffffffffffffffffffffff166121d46120b0565b73ffffffffffffffffffffffffffffffffffffffff161461222a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612221906150d5565b60405180910390fd5b60001515600960009054906101000a900460ff1615151461224a57600080fd5b6000816bffffffffffffffffffffffff161161229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229290615075565b60405180910390fd5b600f60029054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16816bffffffffffffffffffffffff16600c546122e09190615391565b1115612321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231890614ed5565b60405180910390fd5b601254816bffffffffffffffffffffffff1661233d600761305e565b6123479190615391565b1115612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90615035565b60405180910390fd5b806bffffffffffffffffffffffff16600c60008282546123a89190615391565b925050819055506123b9828261333e565b5050565b600c5481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631780b5cd858533866040518563ffffffff1660e01b81526004016124249493929190614d5d565b60206040518083038186803b15801561243c57600080fd5b505afa158015612450573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247491906144dd565b6124b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124aa90614f95565b60405180910390fd5b60001515600960009054906101000a900460ff16151514612509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250090614f75565b60405180910390fd5b6201518060135461251a9190615472565b42101561255c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255390615115565b60405180910390fd5b601254816bffffffffffffffffffffffff16612578600761305e565b6125829190615391565b11156125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba90615035565b60405180910390fd5b806bffffffffffffffffffffffff166008546125df9190615418565b3414612620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261790615135565b60405180910390fd5b806bffffffffffffffffffffffff16600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461267d9190615391565b92505081905550600f60009054906101000a900461ffff1661ffff16600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190615195565b60405180910390fd5b612724338261333e565b50505050565b612732613056565b73ffffffffffffffffffffffffffffffffffffffff166127506120b0565b73ffffffffffffffffffffffffffffffffffffffff16146127a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279d906150d5565b60405180910390fd5b60001515600960009054906101000a900460ff161515146127c657600080fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61281b612815613056565b836133a0565b61285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285190615175565b60405180910390fd5b61286684848484613934565b50505050565b6000805b60168054905081101561292d573373ffffffffffffffffffffffffffffffffffffffff16601682815481106128ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561291a57600191505b8080612925906155ef565b915050612870565b5060011515811515148061297a5750612944613056565b73ffffffffffffffffffffffffffffffffffffffff166129626120b0565b73ffffffffffffffffffffffffffffffffffffffff16145b61298357600080fd5b60008047905060005b601680549050811015612b6457600060016016805490506129ad9190615472565b821015612a2257612a1b83601784815481106129f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff166136da565b9050612a31565b8383612a2e9190615472565b90505b8084612a3d9190615391565b9350600060168381548110612a7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612ac990614cb8565b60006040518083038185875af1925050503d8060008114612b06576040519150601f19603f3d011682016040523d82523d6000602084013e612b0b565b606091505b5050905080612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690614f15565b60405180910390fd5b50508080612b5c906155ef565b91505061298c565b50505050565b6060612b758261306c565b612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90614fb5565b60405180910390fd5b6000600b541415612c515760108054612bcc9061558c565b80601f0160208091040260200160405190810160405280929190818152602001828054612bf89061558c565b8015612c455780601f10612c1a57610100808354040283529160200191612c45565b820191906000526020600020905b815481529060010190602001808311612c2857829003601f168201915b50505050509050612c85565b6000612c5c83611030565b9050601181604051602001612c72929190614c89565b6040516020818303038152906040529150505b919050565b600960009054906101000a900460ff1681565b600e6020528060005260406000206000915090505481565b612cbd613056565b73ffffffffffffffffffffffffffffffffffffffff16612cdb6120b0565b73ffffffffffffffffffffffffffffffffffffffff1614612d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d28906150d5565b60405180910390fd5b8160169080519060200190612d47929190613d8d565b508060179080519060200190612d5e929190613e17565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612dff613056565b73ffffffffffffffffffffffffffffffffffffffff16612e1d6120b0565b73ffffffffffffffffffffffffffffffffffffffff1614612e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6a906150d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eda90614e55565b60405180910390fd5b612eec81613701565b50565b60168181548110612eff57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061303f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061304f575061304e82613990565b5b9050919050565b600033905090565b600081600001549050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661314b83611b64565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606060008214156131d9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613339565b600082905060005b6000821461320b5780806131f4906155ef565b915050600a8261320491906153e7565b91506131e1565b60008167ffffffffffffffff81111561324d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561327f5781602001600182028036833780820191505090505b5090505b60008514613332576001826132989190615472565b9150600a856132a7919061566d565b60306132b39190615391565b60f81b8183815181106132ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561332b91906153e7565b9450613283565b8093505050505b919050565b60005b816bffffffffffffffffffffffff16816bffffffffffffffffffffffff16101561339b5761336f60076139fa565b600061337b600761305e565b90506133878482613a10565b50808061339390615638565b915050613341565b505050565b60006133ab8261306c565b6133ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e190614f55565b60405180910390fd5b60006133f583611b64565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061346457508373ffffffffffffffffffffffffffffffffffffffff1661344c84610e93565b73ffffffffffffffffffffffffffffffffffffffff16145b8061347557506134748185612d63565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661349e82611b64565b73ffffffffffffffffffffffffffffffffffffffff16146134f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134eb906150f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355b90614eb5565b60405180910390fd5b61356f838383613bde565b61357a6000826130d8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135ca9190615472565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136219190615391565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006127108261ffff16846136ef9190615418565b6136f991906153e7565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382d90614ef5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516139279190614d9d565b60405180910390a3505050565b61393f84848461347e565b61394b84848484613be3565b61398a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398190614e35565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7790615095565b60405180910390fd5b613a898161306c565b15613ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac090614e95565b60405180910390fd5b613ad560008383613bde565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b259190615391565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6000613c048473ffffffffffffffffffffffffffffffffffffffff16613d7a565b15613d6d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613c2d613056565b8786866040518563ffffffff1660e01b8152600401613c4f9493929190614ce8565b602060405180830381600087803b158015613c6957600080fd5b505af1925050508015613c9a57506040513d601f19601f82011682018060405250810190613c979190614558565b60015b613d1d573d8060008114613cca576040519150601f19603f3d011682016040523d82523d6000602084013e613ccf565b606091505b50600081511415613d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0c90614e35565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613d72565b600190505b949350505050565b600080823b905060008111915050919050565b828054828255906000526020600020908101928215613e06579160200282015b82811115613e055782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613dad565b5b509050613e139190613ec1565b5090565b82805482825590600052602060002090600f01601090048101928215613eb05791602002820160005b83821115613e8057835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613e40565b8015613eae5782816101000a81549061ffff0219169055600201602081600101049283019260010302613e80565b505b509050613ebd9190613ec1565b5090565b5b80821115613eda576000816000905550600101613ec2565b5090565b6000613ef1613eec84615294565b61526f565b90508083825260208201905082856020860282011115613f1057600080fd5b60005b85811015613f405781613f268882613ff4565b845260208401935060208301925050600181019050613f13565b5050509392505050565b6000613f5d613f58846152c0565b61526f565b90508083825260208201905082856020860282011115613f7c57600080fd5b60005b85811015613fac5781613f92888261413a565b845260208401935060208301925050600181019050613f7f565b5050509392505050565b6000613fc9613fc4846152ec565b61526f565b905082815260208101848484011115613fe157600080fd5b613fec84828561554a565b509392505050565b60008135905061400381615e7f565b92915050565b600082601f83011261401a57600080fd5b813561402a848260208601613ede565b91505092915050565b60008083601f84011261404557600080fd5b8235905067ffffffffffffffff81111561405e57600080fd5b60208301915083602082028301111561407657600080fd5b9250929050565b600082601f83011261408e57600080fd5b813561409e848260208601613f4a565b91505092915050565b6000813590506140b681615e96565b92915050565b6000815190506140cb81615e96565b92915050565b6000815190506140e081615ead565b92915050565b6000813590506140f581615ec4565b92915050565b60008151905061410a81615ec4565b92915050565b600082601f83011261412157600080fd5b8135614131848260208601613fb6565b91505092915050565b60008135905061414981615edb565b92915050565b60008135905061415e81615ef2565b92915050565b60008151905061417381615ef2565b92915050565b60008135905061418881615f09565b92915050565b6000602082840312156141a057600080fd5b60006141ae84828501613ff4565b91505092915050565b600080604083850312156141ca57600080fd5b60006141d885828601613ff4565b92505060206141e985828601613ff4565b9150509250929050565b60008060006060848603121561420857600080fd5b600061421686828701613ff4565b935050602061422786828701613ff4565b92505060406142388682870161414f565b9150509250925092565b6000806000806080858703121561425857600080fd5b600061426687828801613ff4565b945050602061427787828801613ff4565b93505060406142888782880161414f565b925050606085013567ffffffffffffffff8111156142a557600080fd5b6142b187828801614110565b91505092959194509250565b600080604083850312156142d057600080fd5b60006142de85828601613ff4565b92505060206142ef858286016140a7565b9150509250929050565b6000806040838503121561430c57600080fd5b600061431a85828601613ff4565b925050602061432b8582860161413a565b9150509250929050565b6000806040838503121561434857600080fd5b600061435685828601613ff4565b92505060206143678582860161414f565b9150509250929050565b6000806040838503121561438457600080fd5b600061439285828601613ff4565b92505060206143a385828601614179565b9150509250929050565b600080604083850312156143c057600080fd5b600083013567ffffffffffffffff8111156143da57600080fd5b6143e685828601614009565b925050602083013567ffffffffffffffff81111561440357600080fd5b61440f8582860161407d565b9150509250929050565b60008060006040848603121561442e57600080fd5b600084013567ffffffffffffffff81111561444857600080fd5b61445486828701614033565b9350935050602061446786828701614179565b9150509250925092565b6000806000806060858703121561448757600080fd5b600085013567ffffffffffffffff8111156144a157600080fd5b6144ad87828801614033565b945094505060206144c087828801614179565b92505060406144d187828801614179565b91505092959194509250565b6000602082840312156144ef57600080fd5b60006144fd848285016140bc565b91505092915050565b60006020828403121561451857600080fd5b6000614526848285016140d1565b91505092915050565b60006020828403121561454157600080fd5b600061454f848285016140e6565b91505092915050565b60006020828403121561456a57600080fd5b6000614578848285016140fb565b91505092915050565b60006020828403121561459357600080fd5b60006145a18482850161414f565b91505092915050565b6000602082840312156145bc57600080fd5b60006145ca84828501614164565b91505092915050565b600080604083850312156145e657600080fd5b60006145f48582860161414f565b92505060206146058582860161414f565b9150509250929050565b614618816154a6565b82525050565b600061462a8385615348565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561465957600080fd5b60208302925061466a83858461554a565b82840190509392505050565b61467f816154b8565b82525050565b61468e816154c4565b82525050565b600061469f82615332565b6146a98185615359565b93506146b9818560208601615559565b6146c28161575a565b840191505092915050565b60006146d88261533d565b6146e28185615375565b93506146f2818560208601615559565b6146fb8161575a565b840191505092915050565b60006147118261533d565b61471b8185615386565b935061472b818560208601615559565b80840191505092915050565b600081546147448161558c565b61474e8186615386565b94506001821660008114614769576001811461477a576147ad565b60ff198316865281860193506147ad565b6147838561531d565b60005b838110156147a557815481890152600182019150602081019050614786565b838801955050505b50505092915050565b60006147c3601a83615375565b91506147ce8261576b565b602082019050919050565b60006147e6601a83615375565b91506147f182615794565b602082019050919050565b6000614809603283615375565b9150614814826157bd565b604082019050919050565b600061482c602683615375565b91506148378261580c565b604082019050919050565b600061484f601c83615375565b915061485a8261585b565b602082019050919050565b6000614872601c83615375565b915061487d82615884565b602082019050919050565b6000614895602483615375565b91506148a0826158ad565b604082019050919050565b60006148b8602183615375565b91506148c3826158fc565b604082019050919050565b60006148db601983615375565b91506148e68261594b565b602082019050919050565b60006148fe601383615375565b915061490982615974565b602082019050919050565b6000614921601883615375565b915061492c8261599d565b602082019050919050565b6000614944602c83615375565b915061494f826159c6565b604082019050919050565b6000614967600c83615375565b915061497282615a15565b602082019050919050565b600061498a601483615375565b915061499582615a3e565b602082019050919050565b60006149ad601183615375565b91506149b882615a67565b602082019050919050565b60006149d0603883615375565b91506149db82615a90565b604082019050919050565b60006149f3602a83615375565b91506149fe82615adf565b604082019050919050565b6000614a16602983615375565b9150614a2182615b2e565b604082019050919050565b6000614a39601283615375565b9150614a4482615b7d565b602082019050919050565b6000614a5c601083615375565b9150614a6782615ba6565b602082019050919050565b6000614a7f601083615375565b9150614a8a82615bcf565b602082019050919050565b6000614aa2602083615375565b9150614aad82615bf8565b602082019050919050565b6000614ac5602c83615375565b9150614ad082615c21565b604082019050919050565b6000614ae8600583615386565b9150614af382615c70565b600582019050919050565b6000614b0b602083615375565b9150614b1682615c99565b602082019050919050565b6000614b2e602983615375565b9150614b3982615cc2565b604082019050919050565b6000614b51601883615375565b9150614b5c82615d11565b602082019050919050565b6000614b74601383615375565b9150614b7f82615d3a565b602082019050919050565b6000614b97602183615375565b9150614ba282615d63565b604082019050919050565b6000614bba60008361536a565b9150614bc582615db2565b600082019050919050565b6000614bdd603183615375565b9150614be882615db5565b604082019050919050565b6000614c00601e83615375565b9150614c0b82615e04565b602082019050919050565b6000614c23601983615375565b9150614c2e82615e2d565b602082019050919050565b6000614c46600f83615375565b9150614c5182615e56565b602082019050919050565b614c65816154fa565b82525050565b614c7481615528565b82525050565b614c8381615532565b82525050565b6000614c958285614737565b9150614ca18284614706565b9150614cac82614adb565b91508190509392505050565b6000614cc382614bad565b9150819050919050565b6000602082019050614ce2600083018461460f565b92915050565b6000608082019050614cfd600083018761460f565b614d0a602083018661460f565b614d176040830185614c6b565b8181036060830152614d298184614694565b905095945050505050565b6000604082019050614d49600083018561460f565b614d566020830184614c6b565b9392505050565b60006060820190508181036000830152614d7881868861461e565b9050614d87602083018561460f565b614d946040830184614c7a565b95945050505050565b6000602082019050614db26000830184614676565b92915050565b6000602082019050614dcd6000830184614685565b92915050565b60006020820190508181036000830152614ded81846146cd565b905092915050565b60006020820190508181036000830152614e0e816147b6565b9050919050565b60006020820190508181036000830152614e2e816147d9565b9050919050565b60006020820190508181036000830152614e4e816147fc565b9050919050565b60006020820190508181036000830152614e6e8161481f565b9050919050565b60006020820190508181036000830152614e8e81614842565b9050919050565b60006020820190508181036000830152614eae81614865565b9050919050565b60006020820190508181036000830152614ece81614888565b9050919050565b60006020820190508181036000830152614eee816148ab565b9050919050565b60006020820190508181036000830152614f0e816148ce565b9050919050565b60006020820190508181036000830152614f2e816148f1565b9050919050565b60006020820190508181036000830152614f4e81614914565b9050919050565b60006020820190508181036000830152614f6e81614937565b9050919050565b60006020820190508181036000830152614f8e8161495a565b9050919050565b60006020820190508181036000830152614fae8161497d565b9050919050565b60006020820190508181036000830152614fce816149a0565b9050919050565b60006020820190508181036000830152614fee816149c3565b9050919050565b6000602082019050818103600083015261500e816149e6565b9050919050565b6000602082019050818103600083015261502e81614a09565b9050919050565b6000602082019050818103600083015261504e81614a2c565b9050919050565b6000602082019050818103600083015261506e81614a4f565b9050919050565b6000602082019050818103600083015261508e81614a72565b9050919050565b600060208201905081810360008301526150ae81614a95565b9050919050565b600060208201905081810360008301526150ce81614ab8565b9050919050565b600060208201905081810360008301526150ee81614afe565b9050919050565b6000602082019050818103600083015261510e81614b21565b9050919050565b6000602082019050818103600083015261512e81614b44565b9050919050565b6000602082019050818103600083015261514e81614b67565b9050919050565b6000602082019050818103600083015261516e81614b8a565b9050919050565b6000602082019050818103600083015261518e81614bd0565b9050919050565b600060208201905081810360008301526151ae81614bf3565b9050919050565b600060208201905081810360008301526151ce81614c16565b9050919050565b600060208201905081810360008301526151ee81614c39565b9050919050565b600060208201905061520a6000830184614c5c565b92915050565b60006020820190506152256000830184614c6b565b92915050565b60006040820190506152406000830185614c6b565b61524d6020830184614c6b565b9392505050565b60006020820190506152696000830184614c7a565b92915050565b600061527961528a565b905061528582826155be565b919050565b6000604051905090565b600067ffffffffffffffff8211156152af576152ae61572b565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156152db576152da61572b565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156153075761530661572b565b5b6153108261575a565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061539c82615528565b91506153a783615528565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153dc576153db61569e565b5b828201905092915050565b60006153f282615528565b91506153fd83615528565b92508261540d5761540c6156cd565b5b828204905092915050565b600061542382615528565b915061542e83615528565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156154675761546661569e565b5b828202905092915050565b600061547d82615528565b915061548883615528565b92508282101561549b5761549a61569e565b5b828203905092915050565b60006154b182615508565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561557757808201518184015260208101905061555c565b83811115615586576000848401525b50505050565b600060028204905060018216806155a457607f821691505b602082108114156155b8576155b76156fc565b5b50919050565b6155c78261575a565b810181811067ffffffffffffffff821117156155e6576155e561572b565b5b80604052505050565b60006155fa82615528565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561562d5761562c61569e565b5b600182019050919050565b600061564382615532565b91506bffffffffffffffffffffffff8214156156625761566161569e565b5b600182019050919050565b600061567882615528565b915061568383615528565b925082615693576156926156cd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455843454544535f53494e474c455f4f524445525f4c494d4954000000000000600082015250565b7f4d494e54494e475f504552494f445f4e4f545f53544152544544000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f52414e444f4d4e4553535f5245515f4e4f545f494e4954494154454400000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f464f554e444154494f4e5f4d494e545f455843454544535f414c4c4f57414e4360008201527f4500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4645455f4355545f4e4f5f44454c495645525900000000000000000000000000600082015250565b7f52414e444f4d4e4553535f4e4f545f46554c46494c4c45440000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d494e54494e475f4f5645520000000000000000000000000000000000000000600082015250565b7f494e56414c49445f4d45524b4c455f50524f4f46000000000000000000000000600082015250565b7f4e4f4e4558495354454e545f544f4b454e000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f455843454544535f4d41585f535550504c590000000000000000000000000000600082015250565b7f494e56414c49445f544f4b454e5f494400000000000000000000000000000000600082015250565b7f4e4f5f5a45524f5f5155414e5449545900000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4541524c595f4143434553535f4e4f545f535441525445440000000000000000600082015250565b7f494e434f52524543545f4554485f56414c554500000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455843454544535f4541524c595f4143434553535f414c4c4f57414e43450000600082015250565b7f4d45524b4c455f434c41494d5f414c52454144595f4d41444500000000000000600082015250565b7f4d494e54494e475f4f4e474f494e470000000000000000000000000000000000600082015250565b615e88816154a6565b8114615e9357600080fd5b50565b615e9f816154b8565b8114615eaa57600080fd5b50565b615eb6816154c4565b8114615ec157600080fd5b50565b615ecd816154ce565b8114615ed857600080fd5b50565b615ee4816154fa565b8114615eef57600080fd5b50565b615efb81615528565b8114615f0657600080fd5b50565b615f1281615532565b8114615f1d57600080fd5b5056fea26469706673582212209590a333479732841171ba46b14412418f11454fa14c4e7c8958d7c75301918b64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000022b80000000000000000000000000000000000000000000000000000000062e33110000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000009a5ac0108f5cf769e517cf6a78da720171a5c7b500000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000fac28dc73edea55de482116a890e64c0e93edc71000000000000000000000000000000000000000000000000000000000000000577676d6973000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000557474d49530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045697066733a2f2f516d515439557131524a67346759366a45463247464262654a3569673438504653364a51385563554d77737567512f756e72657665616c65642e6a736f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d515439557131524a67346759366a45463247464262654a3569673438504653364a51385563554d77737567512f0000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000003fad3d09dc89ca4a07928f6d5e292ad360f726730000000000000000000000006904f0db06d0d45705b9fcdb17c90f6625226a9e0000000000000000000000005858eafe41ca64eeaf404c4cf511c24526bea1a20000000000000000000000001d95b0b6d3582feec7ef35d2ccf91564ded0cf7f0000000000000000000000009f0cbc2982d397293462e5bb45eb48255a46df0b0000000000000000000000000ddfa905aaddddc533bff695316979c0bb2d9eb80000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000001f4
-----Decoded View---------------
Arg [0] : _tokenName (string): wgmis
Arg [1] : _tokenSymbol (string): WGMIS
Arg [2] : _preRevealURI (string): ipfs://QmQT9Uq1RJg4gY6jEF2GFBbeJ5ig48PFS6JQ8UcUMwsugQ/unrevealed.json
Arg [3] : _baseURI (string): ipfs://QmQT9Uq1RJg4gY6jEF2GFBbeJ5ig48PFS6JQ8UcUMwsugQ/
Arg [4] : _supplyLimit (uint256): 8888
Arg [5] : _mintingStartTimeUnix (uint256): 1659056400
Arg [6] : _singleOrderLimit (uint256): 10
Arg [7] : _vrfProvider (address): 0x9A5aC0108f5CF769E517Cf6a78dA720171a5c7b5
Arg [8] : _payoutAddresses (address[]): 0x3faD3d09Dc89Ca4A07928f6D5E292Ad360f72673,0x6904F0Db06d0D45705B9FcDB17c90F6625226A9e,0x5858EAfe41ca64eEaF404C4cf511c24526Bea1A2,0x1D95b0b6D3582FEeC7Ef35D2CCF91564DEd0Cf7f,0x9F0CBc2982D397293462E5bb45eB48255A46dF0B,0x0ddfA905AaddddC533BFf695316979C0bB2d9EB8
Arg [9] : _payoutAddressBasisPoints (uint16[]): 5000,1500,1000,1000,1000,500
Arg [10] : _merkleProofWhitelist (address): 0xFAC28DC73eDea55De482116A890E64C0e93edc71
-----Encoded View---------------
36 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [4] : 00000000000000000000000000000000000000000000000000000000000022b8
Arg [5] : 0000000000000000000000000000000000000000000000000000000062e33110
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [7] : 0000000000000000000000009a5ac0108f5cf769e517cf6a78da720171a5c7b5
Arg [8] : 00000000000000000000000000000000000000000000000000000000000002c0
Arg [9] : 00000000000000000000000000000000000000000000000000000000000003a0
Arg [10] : 000000000000000000000000fac28dc73edea55de482116a890e64c0e93edc71
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [12] : 77676d6973000000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [14] : 57474d4953000000000000000000000000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [16] : 697066733a2f2f516d515439557131524a67346759366a45463247464262654a
Arg [17] : 3569673438504653364a51385563554d77737567512f756e72657665616c6564
Arg [18] : 2e6a736f6e000000000000000000000000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [20] : 697066733a2f2f516d515439557131524a67346759366a45463247464262654a
Arg [21] : 3569673438504653364a51385563554d77737567512f00000000000000000000
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [23] : 0000000000000000000000003fad3d09dc89ca4a07928f6d5e292ad360f72673
Arg [24] : 0000000000000000000000006904f0db06d0d45705b9fcdb17c90f6625226a9e
Arg [25] : 0000000000000000000000005858eafe41ca64eeaf404c4cf511c24526bea1a2
Arg [26] : 0000000000000000000000001d95b0b6d3582feec7ef35d2ccf91564ded0cf7f
Arg [27] : 0000000000000000000000009f0cbc2982d397293462e5bb45eb48255a46df0b
Arg [28] : 0000000000000000000000000ddfa905aaddddc533bff695316979c0bb2d9eb8
Arg [29] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [30] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [31] : 00000000000000000000000000000000000000000000000000000000000005dc
Arg [32] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [33] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [34] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [35] : 00000000000000000000000000000000000000000000000000000000000001f4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.