ERC-721
Overview
Max Total Supply
0 CUPFP
Holders
321
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CUPFPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OneCuPFP
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // Creator: @casareafer at 1TM.io pragma solidity ^0.8.17; import "./OneCuPFPToken.sol"; contract OneCuPFP is OneCuPFPToken { constructor( string memory name, string memory symbol, string memory _notRevealedUri, string memory contractUri, uint256 _burnSupply) OneCuPFPToken(name, symbol, _notRevealedUri, contractUri, _burnSupply) {} /** * Mint function */ function mint(uint256 amount, bool whitelisted, bytes32[] calldata merkleProof) external payable callerIsUser { require(mintActive || preMintActive, "No active sales"); require(ValidateMint(amount, whitelisted, merkleProof)); for (uint bar = 0; bar < amount; bar++) { _safeMint(msg.sender, totalMinted); totalMinted += 1; } } function reservedMint(uint256 amount) external onlyOwner { require(maxSupply >= (amount + totalMinted), "Exceeds available supply"); for (uint bar = 0; bar < amount; bar++) { _safeMint(msg.sender, totalMinted); totalMinted += 1; } } }
// SPDX-License-Identifier: MIT // Creator: @casareafer at 1TM.io pragma solidity ^0.8.17; import "./openzeppelin/ERC721.sol"; import "./openzeppelin/Strings.sol"; import "./openzeppelin/MerkleProof.sol"; import "./openzeppelin/Ownable.sol"; import "./ContractURI.sol"; contract OneCuPFPToken is ERC721, ContractURI, Ownable { using Strings for uint256; using Strings for address; address public royaltyAddress; /** * Burn event values */ uint256 private constant burnedId = 1; uint256 private burnSupply; address private pioneerPass; uint256 private totalBurned; bool private burnActive; bool private earlyBirdsDiscount; /** * Mint event values */ bytes32 internal whitelistRoot; uint256 internal maxMint; uint256 internal maxSupply; uint256 internal totalMinted; uint256 internal price; uint256 internal whitelistPrice; bool internal mintActive; bool internal preMintActive; /** * Metadata values */ string private baseUri; string public notRevealedUri; bool public revealed; /** * Mappings */ mapping(address => bool) private preSaleMinted; mapping(address => uint256) internal _userBurned; constructor( string memory name, string memory symbol, string memory _notRevealedUri, string memory contractUri, uint256 _burnSupply) ERC721(name, symbol) { maxSupply = 1111; burnActive = false; mintActive = false; preMintActive = false; revealed = false; transferLock = false; earlyBirdsDiscount = false; notRevealedUri = _notRevealedUri; _setContractURI(contractUri); burnSupply = _burnSupply; } /** * Art controls */ function reveal(bool _revealed) external onlyOwner { revealed = _revealed; } function setBaseUri(string memory _baseUri) external onlyOwner { baseUri = _baseUri; } /** * Burning Tools */ function setPioneerPass(address PioneerPassAddress) external onlyOwner { pioneerPass = PioneerPassAddress; } function setBurnActive(bool burnIt) external onlyOwner { burnActive = burnIt; } function setEarlyBirdsEvent(bool crankIt) external onlyOwner { earlyBirdsDiscount = crankIt; } function setBurnSupply(uint256 _burnSupply) external onlyOwner { burnSupply = _burnSupply; } /** * Manual mint controls */ function setWhitelist(bytes32 root) external onlyOwner { whitelistRoot = root; } function setPrice(uint256 _price) external onlyOwner { price = _price; } function setWhitelistPrice(uint256 _whitelistPrice) external onlyOwner { whitelistPrice = _whitelistPrice; } function setActiveSales(bool preMint, bool mint) external onlyOwner { mintActive = mint; preMintActive = preMint; } function setMaxMint(uint256 amount) external onlyOwner { maxMint = amount; } function setMaxSupply(uint256 amount) external onlyOwner { maxSupply = amount; } /** * Miscellaneous */ function setRoyaltyWallet(address receiver) external onlyOwner { royaltyAddress = receiver; } function lock(bool lockTransfers) external onlyOwner { transferLock = lockTransfers; } /** * Withdraw */ function withdraw() external onlyOwner { payable(owner()).transfer(address(this).balance); } /** * Detail getters */ function getUserStatus(address user) external view returns (uint256 userBurned, bool minted) { return (_userBurned[user], preSaleMinted[user]); } function getSalesStatus() external view returns ( bytes32 _whitelistRoot, uint256 _maxMint, uint256 _maxSupply, uint256 _totalMinted, uint256 _price, uint256 _whitelistPrice, bool _mintActive, bool _preMintActive) { return (whitelistRoot, maxMint, maxSupply, totalMinted, price, whitelistPrice, mintActive, preMintActive); } function getBurnStatus() external view returns ( address _pioneerPass, uint256 _burnSupply, uint256 _burnedId, uint256 _totalBurned, bool _burnActive, bool _earlyBirdsDiscount) { return (pioneerPass, burnSupply, burnedId, totalBurned, burnActive, earlyBirdsDiscount); } /** * EIP-2981 Royalty Info */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount){ return (royaltyAddress, salePrice * 80 / 1000); } /** * Overrides */ function onERC1155Received( address, address from, uint256 id, uint256 value, bytes calldata ) external override(ERC721) returns (bytes4){ if (burnActive) { require(burnedId == id, "Wrong token"); uint256 receivedArks = value; if (earlyBirdsDiscount) { value += value; } require(_userBurned[from] + receivedArks <= 10, "Max 10 burns per wallet"); require((totalBurned + receivedArks) <= burnSupply, "Burn amount exceeds the available burnable supply"); require(value + totalMinted <= maxSupply, "Exceeds available supply"); totalBurned += receivedArks; _userBurned[from] += receivedArks; (bool burned,) = address(pioneerPass).call( abi.encodeWithSignature("burn(address,uint256,uint256)", address(this), burnedId, receivedArks) ); require(burned, "Burn Failed"); for (uint bar = 0; bar < value; bar++) { totalMinted += 1; _safeMint(from, (totalMinted - 1)); } return bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")); } else { revert("Unable to receive tokens"); } } function onERC1155BatchReceived( address, address, uint256[] calldata, uint256[] calldata, bytes calldata ) external pure override(ERC721) returns (bytes4){ revert("No transfers allowed"); } /** * Token Metadata */ function tokenURI(uint256 tokenId) public view virtual override(ERC721) returns (string memory) { require(_exists(tokenId), "Token does not exist"); if (revealed == false) { return notRevealedUri; } return string(abi.encodePacked(baseUri, tokenId.toString())); } /** * Miscellaneous */ function ValidateMint( uint256 _amount, bool _whitelisted, bytes32[] calldata merkleProof ) internal returns (bool){ require(maxSupply >= (_amount + totalMinted), "Exceeds available supply"); require(_amount <= maxMint, "Too many mints"); if (_whitelisted) { require(preMintActive, "No presale active"); require(!preSaleMinted[msg.sender], "Already minted"); require(MerkleProof.verify( merkleProof, whitelistRoot, keccak256(abi.encodePacked(msg.sender)) ), "Invalid proof"); require(msg.value == whitelistPrice * _amount, "Invalid tx amount"); preSaleMinted[msg.sender] = true; } else { require(msg.value == price * _amount, "Invalid tx amount"); } return true; } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } }
// SPDX-License-Identifier: MIT // Creator: @casareafer at 1TM.io pragma solidity ^0.8.17; contract ContractURI { string internal contractURI_ = ""; function _setContractURI(string memory _contractURI) internal { contractURI_ = _contractURI; } function contractURI() external view returns (string memory) { return contractURI_; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.17; import "./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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @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 (last updated v4.7.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.17; /** * @dev These functions deal with verification of Merkle Tree proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Calldata version of {verify} * * _Available since v4.7._ */ function verifyCalldata( bytes32[] calldata proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} * * _Available since v4.7._ */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be proved to be a part of a Merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * _Available since v4.7._ */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * _Available since v4.7._ */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and the sibling nodes in `proof`, * consuming from one or the other at each step according to the instructions given by * `proofFlags`. * * _Available since v4.7._ */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof} * * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.17; import "./interfaces/IERC721.sol"; import "./interfaces/IERC721Receiver.sol"; import "./interfaces/IERC721Metadata.sol"; import "./interfaces/IERC1155Receiver.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./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}. */ abstract contract ERC721 is Context, IERC721, ERC165 { bool internal transferLock; 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 {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); 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 overridden 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 token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); 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: caller is not token 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: caller is not token 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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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) private { 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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); require(!transferLock, "Transfers locked"); _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); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {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 an {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 Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * */ function onERC1155Received( address, address, uint256, uint256, bytes calldata ) external virtual override(IERC1155Receiver) returns (bytes4){ return bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")); } /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). */ function onERC1155BatchReceived( address, address, uint256[] calldata, uint256[] calldata, bytes calldata ) external virtual override(IERC1155Receiver) returns (bytes4){ return bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.17; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.17; /** * @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 (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.17; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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 /// @solidity memory-safe-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/introspection/ERC165.sol) pragma solidity ^0.8.17; import "./interfaces/IERC165.sol"; import "./interfaces/IERC1155Receiver.sol"; import "./interfaces/IERC721Metadata.sol"; abstract contract ERC165 is IERC165, IERC1155Receiver, IERC721Metadata { mapping(bytes4 => bool) private interfaces; bytes4 private constant INTERFACE_ID_ERC2981 = 0x2a55205a; constructor () { /** * I guess I will just register everything here, to keep it simple */ registerInterface(type(IERC165).interfaceId); registerInterface(type(IERC721).interfaceId); registerInterface(type(IERC721Metadata).interfaceId); registerInterface(type(IERC1155Receiver).interfaceId); registerInterface(INTERFACE_ID_ERC2981); } function supportsInterface(bytes4 interfaceId) public view returns (bool) { return interfaces[interfaceId]; } function registerInterface(bytes4 interfaceId) private { interfaces[interfaceId] = true; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.17; import "./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`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.17; 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 (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.17; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver{ /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.17; /** * @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 `IERC721Receiver.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 (utils/introspection/IERC165.sol) pragma solidity ^0.8.17; /** * @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" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"_notRevealedUri","type":"string"},{"internalType":"string","name":"contractUri","type":"string"},{"internalType":"uint256","name":"_burnSupply","type":"uint256"}],"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":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"getBurnStatus","outputs":[{"internalType":"address","name":"_pioneerPass","type":"address"},{"internalType":"uint256","name":"_burnSupply","type":"uint256"},{"internalType":"uint256","name":"_burnedId","type":"uint256"},{"internalType":"uint256","name":"_totalBurned","type":"uint256"},{"internalType":"bool","name":"_burnActive","type":"bool"},{"internalType":"bool","name":"_earlyBirdsDiscount","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSalesStatus","outputs":[{"internalType":"bytes32","name":"_whitelistRoot","type":"bytes32"},{"internalType":"uint256","name":"_maxMint","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_totalMinted","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_whitelistPrice","type":"uint256"},{"internalType":"bool","name":"_mintActive","type":"bool"},{"internalType":"bool","name":"_preMintActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserStatus","outputs":[{"internalType":"uint256","name":"userBurned","type":"uint256"},{"internalType":"bool","name":"minted","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"lockTransfers","type":"bool"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"whitelisted","type":"bool"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","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":"amount","type":"uint256"}],"name":"reservedMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"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":"bool","name":"preMint","type":"bool"},{"internalType":"bool","name":"mint","type":"bool"}],"name":"setActiveSales","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":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"burnIt","type":"bool"}],"name":"setBurnActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnSupply","type":"uint256"}],"name":"setBurnSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"crankIt","type":"bool"}],"name":"setEarlyBirdsEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"PioneerPassAddress","type":"address"}],"name":"setPioneerPass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"setRoyaltyWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistPrice","type":"uint256"}],"name":"setWhitelistPrice","outputs":[],"stateMutability":"nonpayable","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":[{"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600890816200002491906200062f565b503480156200003257600080fd5b5060405162005953380380620059538339818101604052810190620000589190620008ab565b84848484848484620000907f01ffc9a7000000000000000000000000000000000000000000000000000000006200026660201b60201c565b620000c17f80ac58cd000000000000000000000000000000000000000000000000000000006200026660201b60201c565b620000f27f5b5e139f000000000000000000000000000000000000000000000000000000006200026660201b60201c565b620001237f4e2312e0000000000000000000000000000000000000000000000000000000006200026660201b60201c565b6200013b632a55205a60e01b6200026660201b60201c565b81600290816200014c91906200062f565b5080600390816200015e91906200062f565b5050506200018162000175620002d260201b60201c565b620002da60201b60201c565b6104576011819055506000600e60006101000a81548160ff0219169083151502179055506000601560006101000a81548160ff0219169083151502179055506000601560016101000a81548160ff0219169083151502179055506000601860006101000a81548160ff0219169083151502179055506000600160006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff02191690831515021790555082601790816200023d91906200062f565b506200024f82620003a060201b60201c565b80600b8190555050505050505050505050620009af565b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060089081620003b191906200062f565b5050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200043757607f821691505b6020821081036200044d576200044c620003ef565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004b77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000478565b620004c3868362000478565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005106200050a6200050484620004db565b620004e5565b620004db565b9050919050565b6000819050919050565b6200052c83620004ef565b620005446200053b8262000517565b84845462000485565b825550505050565b600090565b6200055b6200054c565b6200056881848462000521565b505050565b5b8181101562000590576200058460008262000551565b6001810190506200056e565b5050565b601f821115620005df57620005a98162000453565b620005b48462000468565b81016020851015620005c4578190505b620005dc620005d38562000468565b8301826200056d565b50505b505050565b600082821c905092915050565b60006200060460001984600802620005e4565b1980831691505092915050565b60006200061f8383620005f1565b9150826002028217905092915050565b6200063a82620003b5565b67ffffffffffffffff811115620006565762000655620003c0565b5b6200066282546200041e565b6200066f82828562000594565b600060209050601f831160018114620006a7576000841562000692578287015190505b6200069e858262000611565b8655506200070e565b601f198416620006b78662000453565b60005b82811015620006e157848901518255600182019150602085019450602081019050620006ba565b86831015620007015784890151620006fd601f891682620005f1565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620007508262000734565b810181811067ffffffffffffffff82111715620007725762000771620003c0565b5b80604052505050565b60006200078762000716565b905062000795828262000745565b919050565b600067ffffffffffffffff821115620007b857620007b7620003c0565b5b620007c38262000734565b9050602081019050919050565b60005b83811015620007f0578082015181840152602081019050620007d3565b60008484015250505050565b6000620008136200080d846200079a565b6200077b565b9050828152602081018484840111156200083257620008316200072f565b5b6200083f848285620007d0565b509392505050565b600082601f8301126200085f576200085e6200072a565b5b815162000871848260208601620007fc565b91505092915050565b6200088581620004db565b81146200089157600080fd5b50565b600081519050620008a5816200087a565b92915050565b600080600080600060a08688031215620008ca57620008c962000720565b5b600086015167ffffffffffffffff811115620008eb57620008ea62000725565b5b620008f98882890162000847565b955050602086015167ffffffffffffffff8111156200091d576200091c62000725565b5b6200092b8882890162000847565b945050604086015167ffffffffffffffff8111156200094f576200094e62000725565b5b6200095d8882890162000847565b935050606086015167ffffffffffffffff81111562000981576200098062000725565b5b6200098f8882890162000847565b9250506080620009a28882890162000894565b9150509295509295909350565b614f9480620009bf6000396000f3fe6080604052600436106102515760003560e01c806370a0823111610139578063aae732ad116100b6578063cdeee6371161007a578063cdeee637146108a4578063e8a3d485146108cd578063e985e9c5146108f8578063ea0d5dcd14610935578063f23a6e6114610973578063f2fde38b146109b057610251565b8063aae732ad146107a6578063ad2f852a146107d6578063b88d4fde14610801578063bc197c811461082a578063c87b56dd1461086757610251565b806391b7f5ed116100fd57806391b7f5ed146106d7578063940cd05b1461070057806395d89b4114610729578063a0bcfc7f14610754578063a22cb4651461077d57610251565b806370a08231146105eb578063717d57d3146106285780638b2c92ab146106515780638c74bf0e146106835780638da5cb5b146106ac57610251565b806323b872dd116101d2578063440bc7f311610196578063440bc7f3146104ec5780635183022714610515578063547520fe1461054057806354f83046146105695780636352211e146105855780636f8b44b0146105c257610251565b806323b872dd1461041c5780632a55205a146104455780633723eff6146104835780633ccfd60b146104ac57806342842e0e146104c357610251565b8063095ea7b311610219578063095ea7b31461034f5780630abaca7d146103785780630bc25355146103a15780630dd0a042146103ca5780631f842aa1146103f357610251565b806301ffc9a71461025657806305462f101461029357806306fdde03146102bc578063081812fc146102e7578063081c8c4414610324575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190612eb2565b6109d9565b60405161028a9190612efa565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190612f41565b610a40565b005b3480156102c857600080fd5b506102d1610a65565b6040516102de9190612ffe565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613056565b610af7565b60405161031b91906130c4565b60405180910390f35b34801561033057600080fd5b50610339610b3d565b6040516103469190612ffe565b60405180910390f35b34801561035b57600080fd5b506103766004803603810190610371919061310b565b610bcb565b005b34801561038457600080fd5b5061039f600480360381019061039a919061314b565b610ce2565b005b3480156103ad57600080fd5b506103c860048036038101906103c39190612f41565b610d22565b005b3480156103d657600080fd5b506103f160048036038101906103ec9190612f41565b610d47565b005b3480156103ff57600080fd5b5061041a6004803603810190610415919061318b565b610d6c565b005b34801561042857600080fd5b50610443600480360381019061043e91906131b8565b610db8565b005b34801561045157600080fd5b5061046c6004803603810190610467919061320b565b610e18565b60405161047a92919061325a565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a59190613056565b610e63565b005b3480156104b857600080fd5b506104c1610e75565b005b3480156104cf57600080fd5b506104ea60048036038101906104e591906131b8565b610ecd565b005b3480156104f857600080fd5b50610513600480360381019061050e91906132b9565b610eed565b005b34801561052157600080fd5b5061052a610eff565b6040516105379190612efa565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190613056565b610f12565b005b610583600480360381019061057e919061334b565b610f24565b005b34801561059157600080fd5b506105ac60048036038101906105a79190613056565b611058565b6040516105b991906130c4565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e49190613056565b611109565b005b3480156105f757600080fd5b50610612600480360381019061060d919061318b565b61111b565b60405161061f91906133bf565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190613056565b6111d2565b005b34801561065d57600080fd5b506106666111e4565b60405161067a9897969594939291906133e9565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613056565b61123c565b005b3480156106b857600080fd5b506106c16112de565b6040516106ce91906130c4565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190613056565b611308565b005b34801561070c57600080fd5b5061072760048036038101906107229190612f41565b61131a565b005b34801561073557600080fd5b5061073e61133f565b60405161074b9190612ffe565b60405180910390f35b34801561076057600080fd5b5061077b60048036038101906107769190613597565b6113d1565b005b34801561078957600080fd5b506107a4600480360381019061079f91906135e0565b6113ec565b005b3480156107b257600080fd5b506107bb611402565b6040516107cd96959493929190613620565b60405180910390f35b3480156107e257600080fd5b506107eb61146a565b6040516107f891906130c4565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190613722565b611490565b005b34801561083657600080fd5b50610851600480360381019061084c9190613851565b6114f2565b60405161085e919061393c565b60405180910390f35b34801561087357600080fd5b5061088e60048036038101906108899190613056565b61152f565b60405161089b9190612ffe565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c6919061318b565b611659565b005b3480156108d957600080fd5b506108e26116a5565b6040516108ef9190612ffe565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a9190613957565b611737565b60405161092c9190612efa565b60405180910390f35b34801561094157600080fd5b5061095c6004803603810190610957919061318b565b6117cb565b60405161096a929190613997565b60405180910390f35b34801561097f57600080fd5b5061099a600480360381019061099591906139c0565b611864565b6040516109a7919061393c565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d2919061318b565b611ca9565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b610a48611d2c565b80600e60016101000a81548160ff02191690831515021790555050565b606060028054610a7490613a89565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa090613a89565b8015610aed5780601f10610ac257610100808354040283529160200191610aed565b820191906000526020600020905b815481529060010190602001808311610ad057829003601f168201915b5050505050905090565b6000610b0282611daa565b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60178054610b4a90613a89565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7690613a89565b8015610bc35780601f10610b9857610100808354040283529160200191610bc3565b820191906000526020600020905b815481529060010190602001808311610ba657829003601f168201915b505050505081565b6000610bd682611058565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90613b2c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c65611df5565b73ffffffffffffffffffffffffffffffffffffffff161480610c945750610c9381610c8e611df5565b611737565b5b610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca90613bbe565b60405180910390fd5b610cdd8383611dfd565b505050565b610cea611d2c565b80601560006101000a81548160ff02191690831515021790555081601560016101000a81548160ff0219169083151502179055505050565b610d2a611d2c565b80600e60006101000a81548160ff02191690831515021790555050565b610d4f611d2c565b80600160006101000a81548160ff02191690831515021790555050565b610d74611d2c565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610dc9610dc3611df5565b82611eb6565b610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff90613c50565b60405180910390fd5b610e13838383611f4b565b505050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166103e8605085610e4e9190613c9f565b610e589190613d10565b915091509250929050565b610e6b611d2c565b80600b8190555050565b610e7d611d2c565b610e856112de565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610eca573d6000803e3d6000fd5b50565b610ee883838360405180602001604052806000815250611490565b505050565b610ef5611d2c565b80600f8190555050565b601860009054906101000a900460ff1681565b610f1a611d2c565b8060108190555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990613d8d565b60405180910390fd5b601560009054906101000a900460ff1680610fb95750601560019054906101000a900460ff165b610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef90613df9565b60405180910390fd5b61100484848484612201565b61100d57600080fd5b60005b848110156110515761102433601254612537565b6001601260008282546110379190613e19565b92505081905550808061104990613e4d565b915050611010565b5050505050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790613ee1565b60405180910390fd5b80915050919050565b611111611d2c565b8060118190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290613f73565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111da611d2c565b8060148190555050565b600080600080600080600080600f54601054601154601254601354601454601560009054906101000a900460ff16601560019054906101000a900460ff16975097509750975097509750975097509091929394959697565b611244611d2c565b601254816112529190613e19565b6011541015611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90613fdf565b60405180910390fd5b60005b818110156112da576112ad33601254612537565b6001601260008282546112c09190613e19565b9250508190555080806112d290613e4d565b915050611299565b5050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611310611d2c565b8060138190555050565b611322611d2c565b80601860006101000a81548160ff02191690831515021790555050565b60606003805461134e90613a89565b80601f016020809104026020016040519081016040528092919081815260200182805461137a90613a89565b80156113c75780601f1061139c576101008083540402835291602001916113c7565b820191906000526020600020905b8154815290600101906020018083116113aa57829003601f168201915b5050505050905090565b6113d9611d2c565b80601690816113e891906141ab565b5050565b6113fe6113f7611df5565b8383612555565b5050565b600080600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b546001600d54600e60009054906101000a900460ff16600e60019054906101000a900460ff16955095509550955095509550909192939495565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114a161149b611df5565b83611eb6565b6114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790613c50565b60405180910390fd5b6114ec848484846126c1565b50505050565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611526906142c9565b60405180910390fd5b606061153a8261271d565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157090614335565b60405180910390fd5b60001515601860009054906101000a900460ff1615150361162657601780546115a190613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546115cd90613a89565b801561161a5780601f106115ef5761010080835404028352916020019161161a565b820191906000526020600020905b8154815290600101906020018083116115fd57829003601f168201915b50505050509050611654565b601661163183612789565b604051602001611642929190614414565b60405160208183030381529060405290505b919050565b611661611d2c565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600880546116b490613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546116e090613a89565b801561172d5780601f106117025761010080835404028352916020019161172d565b820191906000526020600020905b81548152906001019060200180831161171057829003601f168201915b5050505050905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691509150915091565b6000600e60009054906101000a900460ff1615611c6457846001146118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590614484565b60405180910390fd5b6000849050600e60019054906101000a900460ff16156118e75784856118e49190613e19565b94505b600a81601a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119349190613e19565b1115611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c906144f0565b60405180910390fd5b600b5481600d546119869190613e19565b11156119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90614582565b60405180910390fd5b601154601254866119d89190613e19565b1115611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090613fdf565b60405180910390fd5b80600d6000828254611a2b9190613e19565b9250508190555080601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a819190613e19565b925050819055506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1630600184604051602401611ad9939291906145a2565b6040516020818303038152906040527ff5298aca000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611b639190614620565b6000604051808303816000865af19150503d8060008114611ba0576040519150601f19603f3d011682016040523d82523d6000602084013e611ba5565b606091505b5050905080611be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be090614683565b60405180910390fd5b60005b86811015611c3957600160126000828254611c079190613e19565b92505081905550611c26896001601254611c2191906146a3565b612537565b8080611c3190613e4d565b915050611bec565b507ff23a6e612e1ff4830e658fe43f4e3cb4a5f8170bd5d9e69fb5d7a7fa9e4fdf9792505050611c9f565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690614723565b60405180910390fd5b9695505050505050565b611cb1611d2c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d17906147b5565b60405180910390fd5b611d29816128e9565b50565b611d34611df5565b73ffffffffffffffffffffffffffffffffffffffff16611d526112de565b73ffffffffffffffffffffffffffffffffffffffff1614611da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9f90614821565b60405180910390fd5b565b611db38161271d565b611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990613ee1565b60405180910390fd5b50565b600033905090565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e7083611058565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611ec283611058565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f045750611f038185611737565b5b80611f4257508373ffffffffffffffffffffffffffffffffffffffff16611f2a84610af7565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f6b82611058565b73ffffffffffffffffffffffffffffffffffffffff1614611fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb8906148b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790614945565b60405180910390fd5b600160009054906101000a900460ff1615612080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612077906149b1565b60405180910390fd5b61208b8383836129af565b612096600082611dfd565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120e691906146a3565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213d9190613e19565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121fc8383836129b4565b505050565b6000601254856122119190613e19565b6011541015612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c90613fdf565b60405180910390fd5b60105485111561229a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229190614a1d565b60405180910390fd5b83156124db57601560019054906101000a900460ff166122ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e690614a89565b60405180910390fd5b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390614af5565b60405180910390fd5b6123f0838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f54336040516020016123d59190614b5d565b604051602081830303815290604052805190602001206129b9565b61242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690614bc4565b60405180910390fd5b8460145461243d9190613c9f565b341461247e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247590614c30565b60405180910390fd5b6001601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061252b565b846013546124e99190613c9f565b341461252a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252190614c30565b60405180910390fd5b5b60019050949350505050565b6125518282604051806020016040528060008152506129d0565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba90614c9c565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126b49190612efa565b60405180910390a3505050565b6126cc848484611f4b565b6126d884848484612a2b565b612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e90614d2e565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600082036127d0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128e4565b600082905060005b600082146128025780806127eb90613e4d565b915050600a826127fb9190613d10565b91506127d8565b60008167ffffffffffffffff81111561281e5761281d61346c565b5b6040519080825280601f01601f1916602001820160405280156128505781602001600182028036833780820191505090505b5090505b600085146128dd5760018261286991906146a3565b9150600a856128789190614d4e565b60306128849190613e19565b60f81b81838151811061289a57612899614d7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128d69190613d10565b9450612854565b8093505050505b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6000826129c68584612bb2565b1490509392505050565b6129da8383612c08565b6129e76000848484612a2b565b612a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1d90614d2e565b60405180910390fd5b505050565b6000612a4c8473ffffffffffffffffffffffffffffffffffffffff16612de1565b15612ba5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a75611df5565b8786866040518563ffffffff1660e01b8152600401612a979493929190614df8565b6020604051808303816000875af1925050508015612ad357506040513d601f19601f82011682018060405250810190612ad09190614e59565b60015b612b55573d8060008114612b03576040519150601f19603f3d011682016040523d82523d6000602084013e612b08565b606091505b506000815103612b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4490614d2e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612baa565b600190505b949350505050565b60008082905060005b8451811015612bfd57612be882868381518110612bdb57612bda614d7f565b5b6020026020010151612e04565b91508080612bf590613e4d565b915050612bbb565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6e90614ed2565b60405180910390fd5b612c808161271d565b15612cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb790614f3e565b60405180910390fd5b612ccc600083836129af565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d1c9190613e19565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ddd600083836129b4565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000818310612e1c57612e178284612e2f565b612e27565b612e268383612e2f565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e8f81612e5a565b8114612e9a57600080fd5b50565b600081359050612eac81612e86565b92915050565b600060208284031215612ec857612ec7612e50565b5b6000612ed684828501612e9d565b91505092915050565b60008115159050919050565b612ef481612edf565b82525050565b6000602082019050612f0f6000830184612eeb565b92915050565b612f1e81612edf565b8114612f2957600080fd5b50565b600081359050612f3b81612f15565b92915050565b600060208284031215612f5757612f56612e50565b5b6000612f6584828501612f2c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fa8578082015181840152602081019050612f8d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fd082612f6e565b612fda8185612f79565b9350612fea818560208601612f8a565b612ff381612fb4565b840191505092915050565b600060208201905081810360008301526130188184612fc5565b905092915050565b6000819050919050565b61303381613020565b811461303e57600080fd5b50565b6000813590506130508161302a565b92915050565b60006020828403121561306c5761306b612e50565b5b600061307a84828501613041565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130ae82613083565b9050919050565b6130be816130a3565b82525050565b60006020820190506130d960008301846130b5565b92915050565b6130e8816130a3565b81146130f357600080fd5b50565b600081359050613105816130df565b92915050565b6000806040838503121561312257613121612e50565b5b6000613130858286016130f6565b925050602061314185828601613041565b9150509250929050565b6000806040838503121561316257613161612e50565b5b600061317085828601612f2c565b925050602061318185828601612f2c565b9150509250929050565b6000602082840312156131a1576131a0612e50565b5b60006131af848285016130f6565b91505092915050565b6000806000606084860312156131d1576131d0612e50565b5b60006131df868287016130f6565b93505060206131f0868287016130f6565b925050604061320186828701613041565b9150509250925092565b6000806040838503121561322257613221612e50565b5b600061323085828601613041565b925050602061324185828601613041565b9150509250929050565b61325481613020565b82525050565b600060408201905061326f60008301856130b5565b61327c602083018461324b565b9392505050565b6000819050919050565b61329681613283565b81146132a157600080fd5b50565b6000813590506132b38161328d565b92915050565b6000602082840312156132cf576132ce612e50565b5b60006132dd848285016132a4565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261330b5761330a6132e6565b5b8235905067ffffffffffffffff811115613328576133276132eb565b5b602083019150836020820283011115613344576133436132f0565b5b9250929050565b6000806000806060858703121561336557613364612e50565b5b600061337387828801613041565b945050602061338487828801612f2c565b935050604085013567ffffffffffffffff8111156133a5576133a4612e55565b5b6133b1878288016132f5565b925092505092959194509250565b60006020820190506133d4600083018461324b565b92915050565b6133e381613283565b82525050565b6000610100820190506133ff600083018b6133da565b61340c602083018a61324b565b613419604083018961324b565b613426606083018861324b565b613433608083018761324b565b61344060a083018661324b565b61344d60c0830185612eeb565b61345a60e0830184612eeb565b9998505050505050505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6134a482612fb4565b810181811067ffffffffffffffff821117156134c3576134c261346c565b5b80604052505050565b60006134d6612e46565b90506134e2828261349b565b919050565b600067ffffffffffffffff8211156135025761350161346c565b5b61350b82612fb4565b9050602081019050919050565b82818337600083830152505050565b600061353a613535846134e7565b6134cc565b90508281526020810184848401111561355657613555613467565b5b613561848285613518565b509392505050565b600082601f83011261357e5761357d6132e6565b5b813561358e848260208601613527565b91505092915050565b6000602082840312156135ad576135ac612e50565b5b600082013567ffffffffffffffff8111156135cb576135ca612e55565b5b6135d784828501613569565b91505092915050565b600080604083850312156135f7576135f6612e50565b5b6000613605858286016130f6565b925050602061361685828601612f2c565b9150509250929050565b600060c08201905061363560008301896130b5565b613642602083018861324b565b61364f604083018761324b565b61365c606083018661324b565b6136696080830185612eeb565b61367660a0830184612eeb565b979650505050505050565b600067ffffffffffffffff82111561369c5761369b61346c565b5b6136a582612fb4565b9050602081019050919050565b60006136c56136c084613681565b6134cc565b9050828152602081018484840111156136e1576136e0613467565b5b6136ec848285613518565b509392505050565b600082601f830112613709576137086132e6565b5b81356137198482602086016136b2565b91505092915050565b6000806000806080858703121561373c5761373b612e50565b5b600061374a878288016130f6565b945050602061375b878288016130f6565b935050604061376c87828801613041565b925050606085013567ffffffffffffffff81111561378d5761378c612e55565b5b613799878288016136f4565b91505092959194509250565b60008083601f8401126137bb576137ba6132e6565b5b8235905067ffffffffffffffff8111156137d8576137d76132eb565b5b6020830191508360208202830111156137f4576137f36132f0565b5b9250929050565b60008083601f840112613811576138106132e6565b5b8235905067ffffffffffffffff81111561382e5761382d6132eb565b5b60208301915083600182028301111561384a576138496132f0565b5b9250929050565b60008060008060008060008060a0898b03121561387157613870612e50565b5b600061387f8b828c016130f6565b98505060206138908b828c016130f6565b975050604089013567ffffffffffffffff8111156138b1576138b0612e55565b5b6138bd8b828c016137a5565b9650965050606089013567ffffffffffffffff8111156138e0576138df612e55565b5b6138ec8b828c016137a5565b9450945050608089013567ffffffffffffffff81111561390f5761390e612e55565b5b61391b8b828c016137fb565b92509250509295985092959890939650565b61393681612e5a565b82525050565b6000602082019050613951600083018461392d565b92915050565b6000806040838503121561396e5761396d612e50565b5b600061397c858286016130f6565b925050602061398d858286016130f6565b9150509250929050565b60006040820190506139ac600083018561324b565b6139b96020830184612eeb565b9392505050565b60008060008060008060a087890312156139dd576139dc612e50565b5b60006139eb89828a016130f6565b96505060206139fc89828a016130f6565b9550506040613a0d89828a01613041565b9450506060613a1e89828a01613041565b935050608087013567ffffffffffffffff811115613a3f57613a3e612e55565b5b613a4b89828a016137fb565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613aa157607f821691505b602082108103613ab457613ab3613a5a565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b16602183612f79565b9150613b2182613aba565b604082019050919050565b60006020820190508181036000830152613b4581613b09565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613ba8603e83612f79565b9150613bb382613b4c565b604082019050919050565b60006020820190508181036000830152613bd781613b9b565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613c3a602e83612f79565b9150613c4582613bde565b604082019050919050565b60006020820190508181036000830152613c6981613c2d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613caa82613020565b9150613cb583613020565b9250828202613cc381613020565b91508282048414831517613cda57613cd9613c70565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d1b82613020565b9150613d2683613020565b925082613d3657613d35613ce1565b5b828204905092915050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613d77601e83612f79565b9150613d8282613d41565b602082019050919050565b60006020820190508181036000830152613da681613d6a565b9050919050565b7f4e6f206163746976652073616c65730000000000000000000000000000000000600082015250565b6000613de3600f83612f79565b9150613dee82613dad565b602082019050919050565b60006020820190508181036000830152613e1281613dd6565b9050919050565b6000613e2482613020565b9150613e2f83613020565b9250828201905080821115613e4757613e46613c70565b5b92915050565b6000613e5882613020565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e8a57613e89613c70565b5b600182019050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613ecb601883612f79565b9150613ed682613e95565b602082019050919050565b60006020820190508181036000830152613efa81613ebe565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613f5d602983612f79565b9150613f6882613f01565b604082019050919050565b60006020820190508181036000830152613f8c81613f50565b9050919050565b7f4578636565647320617661696c61626c6520737570706c790000000000000000600082015250565b6000613fc9601883612f79565b9150613fd482613f93565b602082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026140617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614024565b61406b8683614024565b95508019841693508086168417925050509392505050565b6000819050919050565b60006140a86140a361409e84613020565b614083565b613020565b9050919050565b6000819050919050565b6140c28361408d565b6140d66140ce826140af565b848454614031565b825550505050565b600090565b6140eb6140de565b6140f68184846140b9565b505050565b5b8181101561411a5761410f6000826140e3565b6001810190506140fc565b5050565b601f82111561415f5761413081613fff565b61413984614014565b81016020851015614148578190505b61415c61415485614014565b8301826140fb565b50505b505050565b600082821c905092915050565b600061418260001984600802614164565b1980831691505092915050565b600061419b8383614171565b9150826002028217905092915050565b6141b482612f6e565b67ffffffffffffffff8111156141cd576141cc61346c565b5b6141d78254613a89565b6141e282828561411e565b600060209050601f8311600181146142155760008415614203578287015190505b61420d858261418f565b865550614275565b601f19841661422386613fff565b60005b8281101561424b57848901518255600182019150602085019450602081019050614226565b868310156142685784890151614264601f891682614171565b8355505b6001600288020188555050505b505050505050565b7f4e6f207472616e736665727320616c6c6f776564000000000000000000000000600082015250565b60006142b3601483612f79565b91506142be8261427d565b602082019050919050565b600060208201905081810360008301526142e2816142a6565b9050919050565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b600061431f601483612f79565b915061432a826142e9565b602082019050919050565b6000602082019050818103600083015261434e81614312565b9050919050565b600081905092915050565b6000815461436d81613a89565b6143778186614355565b9450600182166000811461439257600181146143a7576143da565b60ff19831686528115158202860193506143da565b6143b085613fff565b60005b838110156143d2578154818901526001820191506020810190506143b3565b838801955050505b50505092915050565b60006143ee82612f6e565b6143f88185614355565b9350614408818560208601612f8a565b80840191505092915050565b60006144208285614360565b915061442c82846143e3565b91508190509392505050565b7f57726f6e6720746f6b656e000000000000000000000000000000000000000000600082015250565b600061446e600b83612f79565b915061447982614438565b602082019050919050565b6000602082019050818103600083015261449d81614461565b9050919050565b7f4d6178203130206275726e73207065722077616c6c6574000000000000000000600082015250565b60006144da601783612f79565b91506144e5826144a4565b602082019050919050565b60006020820190508181036000830152614509816144cd565b9050919050565b7f4275726e20616d6f756e7420657863656564732074686520617661696c61626c60008201527f65206275726e61626c6520737570706c79000000000000000000000000000000602082015250565b600061456c603183612f79565b915061457782614510565b604082019050919050565b6000602082019050818103600083015261459b8161455f565b9050919050565b60006060820190506145b760008301866130b5565b6145c4602083018561324b565b6145d1604083018461324b565b949350505050565b600081519050919050565b600081905092915050565b60006145fa826145d9565b61460481856145e4565b9350614614818560208601612f8a565b80840191505092915050565b600061462c82846145ef565b915081905092915050565b7f4275726e204661696c6564000000000000000000000000000000000000000000600082015250565b600061466d600b83612f79565b915061467882614637565b602082019050919050565b6000602082019050818103600083015261469c81614660565b9050919050565b60006146ae82613020565b91506146b983613020565b92508282039050818111156146d1576146d0613c70565b5b92915050565b7f556e61626c6520746f207265636569766520746f6b656e730000000000000000600082015250565b600061470d601883612f79565b9150614718826146d7565b602082019050919050565b6000602082019050818103600083015261473c81614700565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061479f602683612f79565b91506147aa82614743565b604082019050919050565b600060208201905081810360008301526147ce81614792565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061480b602083612f79565b9150614816826147d5565b602082019050919050565b6000602082019050818103600083015261483a816147fe565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061489d602583612f79565b91506148a882614841565b604082019050919050565b600060208201905081810360008301526148cc81614890565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061492f602483612f79565b915061493a826148d3565b604082019050919050565b6000602082019050818103600083015261495e81614922565b9050919050565b7f5472616e7366657273206c6f636b656400000000000000000000000000000000600082015250565b600061499b601083612f79565b91506149a682614965565b602082019050919050565b600060208201905081810360008301526149ca8161498e565b9050919050565b7f546f6f206d616e79206d696e7473000000000000000000000000000000000000600082015250565b6000614a07600e83612f79565b9150614a12826149d1565b602082019050919050565b60006020820190508181036000830152614a36816149fa565b9050919050565b7f4e6f2070726573616c6520616374697665000000000000000000000000000000600082015250565b6000614a73601183612f79565b9150614a7e82614a3d565b602082019050919050565b60006020820190508181036000830152614aa281614a66565b9050919050565b7f416c7265616479206d696e746564000000000000000000000000000000000000600082015250565b6000614adf600e83612f79565b9150614aea82614aa9565b602082019050919050565b60006020820190508181036000830152614b0e81614ad2565b9050919050565b60008160601b9050919050565b6000614b2d82614b15565b9050919050565b6000614b3f82614b22565b9050919050565b614b57614b52826130a3565b614b34565b82525050565b6000614b698284614b46565b60148201915081905092915050565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b6000614bae600d83612f79565b9150614bb982614b78565b602082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b7f496e76616c696420747820616d6f756e74000000000000000000000000000000600082015250565b6000614c1a601183612f79565b9150614c2582614be4565b602082019050919050565b60006020820190508181036000830152614c4981614c0d565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614c86601983612f79565b9150614c9182614c50565b602082019050919050565b60006020820190508181036000830152614cb581614c79565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614d18603283612f79565b9150614d2382614cbc565b604082019050919050565b60006020820190508181036000830152614d4781614d0b565b9050919050565b6000614d5982613020565b9150614d6483613020565b925082614d7457614d73613ce1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b6000614dca826145d9565b614dd48185614dae565b9350614de4818560208601612f8a565b614ded81612fb4565b840191505092915050565b6000608082019050614e0d60008301876130b5565b614e1a60208301866130b5565b614e27604083018561324b565b8181036060830152614e398184614dbf565b905095945050505050565b600081519050614e5381612e86565b92915050565b600060208284031215614e6f57614e6e612e50565b5b6000614e7d84828501614e44565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614ebc602083612f79565b9150614ec782614e86565b602082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614f28601c83612f79565b9150614f3382614ef2565b602082019050919050565b60006020820190508181036000830152614f5781614f1b565b905091905056fea2646970667358221220356776067f7940cea9e9cbb15f0bc549a4f3a2b392a2120ae395e6e8512128e664736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000045700000000000000000000000000000000000000000000000000000000000000084f6e65437550465000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054355504650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c68747470733a2f2f697066732e66696c65626173652e696f2f697066732f516d6235746d584d63736f3968776359725a354b384547597566543871427247374d62786469324d77436b55757a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c68747470733a2f2f697066732e66696c65626173652e696f2f697066732f516d59657a434a373973795a4a44367462536177656a5766685463664d3765624c4b6254334334745633536e43500000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102515760003560e01c806370a0823111610139578063aae732ad116100b6578063cdeee6371161007a578063cdeee637146108a4578063e8a3d485146108cd578063e985e9c5146108f8578063ea0d5dcd14610935578063f23a6e6114610973578063f2fde38b146109b057610251565b8063aae732ad146107a6578063ad2f852a146107d6578063b88d4fde14610801578063bc197c811461082a578063c87b56dd1461086757610251565b806391b7f5ed116100fd57806391b7f5ed146106d7578063940cd05b1461070057806395d89b4114610729578063a0bcfc7f14610754578063a22cb4651461077d57610251565b806370a08231146105eb578063717d57d3146106285780638b2c92ab146106515780638c74bf0e146106835780638da5cb5b146106ac57610251565b806323b872dd116101d2578063440bc7f311610196578063440bc7f3146104ec5780635183022714610515578063547520fe1461054057806354f83046146105695780636352211e146105855780636f8b44b0146105c257610251565b806323b872dd1461041c5780632a55205a146104455780633723eff6146104835780633ccfd60b146104ac57806342842e0e146104c357610251565b8063095ea7b311610219578063095ea7b31461034f5780630abaca7d146103785780630bc25355146103a15780630dd0a042146103ca5780631f842aa1146103f357610251565b806301ffc9a71461025657806305462f101461029357806306fdde03146102bc578063081812fc146102e7578063081c8c4414610324575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190612eb2565b6109d9565b60405161028a9190612efa565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190612f41565b610a40565b005b3480156102c857600080fd5b506102d1610a65565b6040516102de9190612ffe565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613056565b610af7565b60405161031b91906130c4565b60405180910390f35b34801561033057600080fd5b50610339610b3d565b6040516103469190612ffe565b60405180910390f35b34801561035b57600080fd5b506103766004803603810190610371919061310b565b610bcb565b005b34801561038457600080fd5b5061039f600480360381019061039a919061314b565b610ce2565b005b3480156103ad57600080fd5b506103c860048036038101906103c39190612f41565b610d22565b005b3480156103d657600080fd5b506103f160048036038101906103ec9190612f41565b610d47565b005b3480156103ff57600080fd5b5061041a6004803603810190610415919061318b565b610d6c565b005b34801561042857600080fd5b50610443600480360381019061043e91906131b8565b610db8565b005b34801561045157600080fd5b5061046c6004803603810190610467919061320b565b610e18565b60405161047a92919061325a565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a59190613056565b610e63565b005b3480156104b857600080fd5b506104c1610e75565b005b3480156104cf57600080fd5b506104ea60048036038101906104e591906131b8565b610ecd565b005b3480156104f857600080fd5b50610513600480360381019061050e91906132b9565b610eed565b005b34801561052157600080fd5b5061052a610eff565b6040516105379190612efa565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190613056565b610f12565b005b610583600480360381019061057e919061334b565b610f24565b005b34801561059157600080fd5b506105ac60048036038101906105a79190613056565b611058565b6040516105b991906130c4565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e49190613056565b611109565b005b3480156105f757600080fd5b50610612600480360381019061060d919061318b565b61111b565b60405161061f91906133bf565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190613056565b6111d2565b005b34801561065d57600080fd5b506106666111e4565b60405161067a9897969594939291906133e9565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613056565b61123c565b005b3480156106b857600080fd5b506106c16112de565b6040516106ce91906130c4565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190613056565b611308565b005b34801561070c57600080fd5b5061072760048036038101906107229190612f41565b61131a565b005b34801561073557600080fd5b5061073e61133f565b60405161074b9190612ffe565b60405180910390f35b34801561076057600080fd5b5061077b60048036038101906107769190613597565b6113d1565b005b34801561078957600080fd5b506107a4600480360381019061079f91906135e0565b6113ec565b005b3480156107b257600080fd5b506107bb611402565b6040516107cd96959493929190613620565b60405180910390f35b3480156107e257600080fd5b506107eb61146a565b6040516107f891906130c4565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190613722565b611490565b005b34801561083657600080fd5b50610851600480360381019061084c9190613851565b6114f2565b60405161085e919061393c565b60405180910390f35b34801561087357600080fd5b5061088e60048036038101906108899190613056565b61152f565b60405161089b9190612ffe565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c6919061318b565b611659565b005b3480156108d957600080fd5b506108e26116a5565b6040516108ef9190612ffe565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a9190613957565b611737565b60405161092c9190612efa565b60405180910390f35b34801561094157600080fd5b5061095c6004803603810190610957919061318b565b6117cb565b60405161096a929190613997565b60405180910390f35b34801561097f57600080fd5b5061099a600480360381019061099591906139c0565b611864565b6040516109a7919061393c565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d2919061318b565b611ca9565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b610a48611d2c565b80600e60016101000a81548160ff02191690831515021790555050565b606060028054610a7490613a89565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa090613a89565b8015610aed5780601f10610ac257610100808354040283529160200191610aed565b820191906000526020600020905b815481529060010190602001808311610ad057829003601f168201915b5050505050905090565b6000610b0282611daa565b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60178054610b4a90613a89565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7690613a89565b8015610bc35780601f10610b9857610100808354040283529160200191610bc3565b820191906000526020600020905b815481529060010190602001808311610ba657829003601f168201915b505050505081565b6000610bd682611058565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90613b2c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c65611df5565b73ffffffffffffffffffffffffffffffffffffffff161480610c945750610c9381610c8e611df5565b611737565b5b610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca90613bbe565b60405180910390fd5b610cdd8383611dfd565b505050565b610cea611d2c565b80601560006101000a81548160ff02191690831515021790555081601560016101000a81548160ff0219169083151502179055505050565b610d2a611d2c565b80600e60006101000a81548160ff02191690831515021790555050565b610d4f611d2c565b80600160006101000a81548160ff02191690831515021790555050565b610d74611d2c565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610dc9610dc3611df5565b82611eb6565b610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff90613c50565b60405180910390fd5b610e13838383611f4b565b505050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166103e8605085610e4e9190613c9f565b610e589190613d10565b915091509250929050565b610e6b611d2c565b80600b8190555050565b610e7d611d2c565b610e856112de565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610eca573d6000803e3d6000fd5b50565b610ee883838360405180602001604052806000815250611490565b505050565b610ef5611d2c565b80600f8190555050565b601860009054906101000a900460ff1681565b610f1a611d2c565b8060108190555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990613d8d565b60405180910390fd5b601560009054906101000a900460ff1680610fb95750601560019054906101000a900460ff165b610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef90613df9565b60405180910390fd5b61100484848484612201565b61100d57600080fd5b60005b848110156110515761102433601254612537565b6001601260008282546110379190613e19565b92505081905550808061104990613e4d565b915050611010565b5050505050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790613ee1565b60405180910390fd5b80915050919050565b611111611d2c565b8060118190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290613f73565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111da611d2c565b8060148190555050565b600080600080600080600080600f54601054601154601254601354601454601560009054906101000a900460ff16601560019054906101000a900460ff16975097509750975097509750975097509091929394959697565b611244611d2c565b601254816112529190613e19565b6011541015611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90613fdf565b60405180910390fd5b60005b818110156112da576112ad33601254612537565b6001601260008282546112c09190613e19565b9250508190555080806112d290613e4d565b915050611299565b5050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611310611d2c565b8060138190555050565b611322611d2c565b80601860006101000a81548160ff02191690831515021790555050565b60606003805461134e90613a89565b80601f016020809104026020016040519081016040528092919081815260200182805461137a90613a89565b80156113c75780601f1061139c576101008083540402835291602001916113c7565b820191906000526020600020905b8154815290600101906020018083116113aa57829003601f168201915b5050505050905090565b6113d9611d2c565b80601690816113e891906141ab565b5050565b6113fe6113f7611df5565b8383612555565b5050565b600080600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b546001600d54600e60009054906101000a900460ff16600e60019054906101000a900460ff16955095509550955095509550909192939495565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114a161149b611df5565b83611eb6565b6114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790613c50565b60405180910390fd5b6114ec848484846126c1565b50505050565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611526906142c9565b60405180910390fd5b606061153a8261271d565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157090614335565b60405180910390fd5b60001515601860009054906101000a900460ff1615150361162657601780546115a190613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546115cd90613a89565b801561161a5780601f106115ef5761010080835404028352916020019161161a565b820191906000526020600020905b8154815290600101906020018083116115fd57829003601f168201915b50505050509050611654565b601661163183612789565b604051602001611642929190614414565b60405160208183030381529060405290505b919050565b611661611d2c565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600880546116b490613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546116e090613a89565b801561172d5780601f106117025761010080835404028352916020019161172d565b820191906000526020600020905b81548152906001019060200180831161171057829003601f168201915b5050505050905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691509150915091565b6000600e60009054906101000a900460ff1615611c6457846001146118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590614484565b60405180910390fd5b6000849050600e60019054906101000a900460ff16156118e75784856118e49190613e19565b94505b600a81601a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119349190613e19565b1115611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c906144f0565b60405180910390fd5b600b5481600d546119869190613e19565b11156119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90614582565b60405180910390fd5b601154601254866119d89190613e19565b1115611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090613fdf565b60405180910390fd5b80600d6000828254611a2b9190613e19565b9250508190555080601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a819190613e19565b925050819055506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1630600184604051602401611ad9939291906145a2565b6040516020818303038152906040527ff5298aca000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611b639190614620565b6000604051808303816000865af19150503d8060008114611ba0576040519150601f19603f3d011682016040523d82523d6000602084013e611ba5565b606091505b5050905080611be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be090614683565b60405180910390fd5b60005b86811015611c3957600160126000828254611c079190613e19565b92505081905550611c26896001601254611c2191906146a3565b612537565b8080611c3190613e4d565b915050611bec565b507ff23a6e612e1ff4830e658fe43f4e3cb4a5f8170bd5d9e69fb5d7a7fa9e4fdf9792505050611c9f565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690614723565b60405180910390fd5b9695505050505050565b611cb1611d2c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d17906147b5565b60405180910390fd5b611d29816128e9565b50565b611d34611df5565b73ffffffffffffffffffffffffffffffffffffffff16611d526112de565b73ffffffffffffffffffffffffffffffffffffffff1614611da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9f90614821565b60405180910390fd5b565b611db38161271d565b611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990613ee1565b60405180910390fd5b50565b600033905090565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e7083611058565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611ec283611058565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f045750611f038185611737565b5b80611f4257508373ffffffffffffffffffffffffffffffffffffffff16611f2a84610af7565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f6b82611058565b73ffffffffffffffffffffffffffffffffffffffff1614611fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb8906148b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790614945565b60405180910390fd5b600160009054906101000a900460ff1615612080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612077906149b1565b60405180910390fd5b61208b8383836129af565b612096600082611dfd565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120e691906146a3565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213d9190613e19565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121fc8383836129b4565b505050565b6000601254856122119190613e19565b6011541015612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c90613fdf565b60405180910390fd5b60105485111561229a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229190614a1d565b60405180910390fd5b83156124db57601560019054906101000a900460ff166122ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e690614a89565b60405180910390fd5b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390614af5565b60405180910390fd5b6123f0838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f54336040516020016123d59190614b5d565b604051602081830303815290604052805190602001206129b9565b61242f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242690614bc4565b60405180910390fd5b8460145461243d9190613c9f565b341461247e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247590614c30565b60405180910390fd5b6001601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061252b565b846013546124e99190613c9f565b341461252a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252190614c30565b60405180910390fd5b5b60019050949350505050565b6125518282604051806020016040528060008152506129d0565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba90614c9c565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126b49190612efa565b60405180910390a3505050565b6126cc848484611f4b565b6126d884848484612a2b565b612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e90614d2e565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600082036127d0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128e4565b600082905060005b600082146128025780806127eb90613e4d565b915050600a826127fb9190613d10565b91506127d8565b60008167ffffffffffffffff81111561281e5761281d61346c565b5b6040519080825280601f01601f1916602001820160405280156128505781602001600182028036833780820191505090505b5090505b600085146128dd5760018261286991906146a3565b9150600a856128789190614d4e565b60306128849190613e19565b60f81b81838151811061289a57612899614d7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128d69190613d10565b9450612854565b8093505050505b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6000826129c68584612bb2565b1490509392505050565b6129da8383612c08565b6129e76000848484612a2b565b612a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1d90614d2e565b60405180910390fd5b505050565b6000612a4c8473ffffffffffffffffffffffffffffffffffffffff16612de1565b15612ba5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a75611df5565b8786866040518563ffffffff1660e01b8152600401612a979493929190614df8565b6020604051808303816000875af1925050508015612ad357506040513d601f19601f82011682018060405250810190612ad09190614e59565b60015b612b55573d8060008114612b03576040519150601f19603f3d011682016040523d82523d6000602084013e612b08565b606091505b506000815103612b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4490614d2e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612baa565b600190505b949350505050565b60008082905060005b8451811015612bfd57612be882868381518110612bdb57612bda614d7f565b5b6020026020010151612e04565b91508080612bf590613e4d565b915050612bbb565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6e90614ed2565b60405180910390fd5b612c808161271d565b15612cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb790614f3e565b60405180910390fd5b612ccc600083836129af565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d1c9190613e19565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ddd600083836129b4565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000818310612e1c57612e178284612e2f565b612e27565b612e268383612e2f565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e8f81612e5a565b8114612e9a57600080fd5b50565b600081359050612eac81612e86565b92915050565b600060208284031215612ec857612ec7612e50565b5b6000612ed684828501612e9d565b91505092915050565b60008115159050919050565b612ef481612edf565b82525050565b6000602082019050612f0f6000830184612eeb565b92915050565b612f1e81612edf565b8114612f2957600080fd5b50565b600081359050612f3b81612f15565b92915050565b600060208284031215612f5757612f56612e50565b5b6000612f6584828501612f2c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fa8578082015181840152602081019050612f8d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fd082612f6e565b612fda8185612f79565b9350612fea818560208601612f8a565b612ff381612fb4565b840191505092915050565b600060208201905081810360008301526130188184612fc5565b905092915050565b6000819050919050565b61303381613020565b811461303e57600080fd5b50565b6000813590506130508161302a565b92915050565b60006020828403121561306c5761306b612e50565b5b600061307a84828501613041565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130ae82613083565b9050919050565b6130be816130a3565b82525050565b60006020820190506130d960008301846130b5565b92915050565b6130e8816130a3565b81146130f357600080fd5b50565b600081359050613105816130df565b92915050565b6000806040838503121561312257613121612e50565b5b6000613130858286016130f6565b925050602061314185828601613041565b9150509250929050565b6000806040838503121561316257613161612e50565b5b600061317085828601612f2c565b925050602061318185828601612f2c565b9150509250929050565b6000602082840312156131a1576131a0612e50565b5b60006131af848285016130f6565b91505092915050565b6000806000606084860312156131d1576131d0612e50565b5b60006131df868287016130f6565b93505060206131f0868287016130f6565b925050604061320186828701613041565b9150509250925092565b6000806040838503121561322257613221612e50565b5b600061323085828601613041565b925050602061324185828601613041565b9150509250929050565b61325481613020565b82525050565b600060408201905061326f60008301856130b5565b61327c602083018461324b565b9392505050565b6000819050919050565b61329681613283565b81146132a157600080fd5b50565b6000813590506132b38161328d565b92915050565b6000602082840312156132cf576132ce612e50565b5b60006132dd848285016132a4565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261330b5761330a6132e6565b5b8235905067ffffffffffffffff811115613328576133276132eb565b5b602083019150836020820283011115613344576133436132f0565b5b9250929050565b6000806000806060858703121561336557613364612e50565b5b600061337387828801613041565b945050602061338487828801612f2c565b935050604085013567ffffffffffffffff8111156133a5576133a4612e55565b5b6133b1878288016132f5565b925092505092959194509250565b60006020820190506133d4600083018461324b565b92915050565b6133e381613283565b82525050565b6000610100820190506133ff600083018b6133da565b61340c602083018a61324b565b613419604083018961324b565b613426606083018861324b565b613433608083018761324b565b61344060a083018661324b565b61344d60c0830185612eeb565b61345a60e0830184612eeb565b9998505050505050505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6134a482612fb4565b810181811067ffffffffffffffff821117156134c3576134c261346c565b5b80604052505050565b60006134d6612e46565b90506134e2828261349b565b919050565b600067ffffffffffffffff8211156135025761350161346c565b5b61350b82612fb4565b9050602081019050919050565b82818337600083830152505050565b600061353a613535846134e7565b6134cc565b90508281526020810184848401111561355657613555613467565b5b613561848285613518565b509392505050565b600082601f83011261357e5761357d6132e6565b5b813561358e848260208601613527565b91505092915050565b6000602082840312156135ad576135ac612e50565b5b600082013567ffffffffffffffff8111156135cb576135ca612e55565b5b6135d784828501613569565b91505092915050565b600080604083850312156135f7576135f6612e50565b5b6000613605858286016130f6565b925050602061361685828601612f2c565b9150509250929050565b600060c08201905061363560008301896130b5565b613642602083018861324b565b61364f604083018761324b565b61365c606083018661324b565b6136696080830185612eeb565b61367660a0830184612eeb565b979650505050505050565b600067ffffffffffffffff82111561369c5761369b61346c565b5b6136a582612fb4565b9050602081019050919050565b60006136c56136c084613681565b6134cc565b9050828152602081018484840111156136e1576136e0613467565b5b6136ec848285613518565b509392505050565b600082601f830112613709576137086132e6565b5b81356137198482602086016136b2565b91505092915050565b6000806000806080858703121561373c5761373b612e50565b5b600061374a878288016130f6565b945050602061375b878288016130f6565b935050604061376c87828801613041565b925050606085013567ffffffffffffffff81111561378d5761378c612e55565b5b613799878288016136f4565b91505092959194509250565b60008083601f8401126137bb576137ba6132e6565b5b8235905067ffffffffffffffff8111156137d8576137d76132eb565b5b6020830191508360208202830111156137f4576137f36132f0565b5b9250929050565b60008083601f840112613811576138106132e6565b5b8235905067ffffffffffffffff81111561382e5761382d6132eb565b5b60208301915083600182028301111561384a576138496132f0565b5b9250929050565b60008060008060008060008060a0898b03121561387157613870612e50565b5b600061387f8b828c016130f6565b98505060206138908b828c016130f6565b975050604089013567ffffffffffffffff8111156138b1576138b0612e55565b5b6138bd8b828c016137a5565b9650965050606089013567ffffffffffffffff8111156138e0576138df612e55565b5b6138ec8b828c016137a5565b9450945050608089013567ffffffffffffffff81111561390f5761390e612e55565b5b61391b8b828c016137fb565b92509250509295985092959890939650565b61393681612e5a565b82525050565b6000602082019050613951600083018461392d565b92915050565b6000806040838503121561396e5761396d612e50565b5b600061397c858286016130f6565b925050602061398d858286016130f6565b9150509250929050565b60006040820190506139ac600083018561324b565b6139b96020830184612eeb565b9392505050565b60008060008060008060a087890312156139dd576139dc612e50565b5b60006139eb89828a016130f6565b96505060206139fc89828a016130f6565b9550506040613a0d89828a01613041565b9450506060613a1e89828a01613041565b935050608087013567ffffffffffffffff811115613a3f57613a3e612e55565b5b613a4b89828a016137fb565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613aa157607f821691505b602082108103613ab457613ab3613a5a565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b16602183612f79565b9150613b2182613aba565b604082019050919050565b60006020820190508181036000830152613b4581613b09565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613ba8603e83612f79565b9150613bb382613b4c565b604082019050919050565b60006020820190508181036000830152613bd781613b9b565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613c3a602e83612f79565b9150613c4582613bde565b604082019050919050565b60006020820190508181036000830152613c6981613c2d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613caa82613020565b9150613cb583613020565b9250828202613cc381613020565b91508282048414831517613cda57613cd9613c70565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d1b82613020565b9150613d2683613020565b925082613d3657613d35613ce1565b5b828204905092915050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613d77601e83612f79565b9150613d8282613d41565b602082019050919050565b60006020820190508181036000830152613da681613d6a565b9050919050565b7f4e6f206163746976652073616c65730000000000000000000000000000000000600082015250565b6000613de3600f83612f79565b9150613dee82613dad565b602082019050919050565b60006020820190508181036000830152613e1281613dd6565b9050919050565b6000613e2482613020565b9150613e2f83613020565b9250828201905080821115613e4757613e46613c70565b5b92915050565b6000613e5882613020565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e8a57613e89613c70565b5b600182019050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613ecb601883612f79565b9150613ed682613e95565b602082019050919050565b60006020820190508181036000830152613efa81613ebe565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613f5d602983612f79565b9150613f6882613f01565b604082019050919050565b60006020820190508181036000830152613f8c81613f50565b9050919050565b7f4578636565647320617661696c61626c6520737570706c790000000000000000600082015250565b6000613fc9601883612f79565b9150613fd482613f93565b602082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026140617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614024565b61406b8683614024565b95508019841693508086168417925050509392505050565b6000819050919050565b60006140a86140a361409e84613020565b614083565b613020565b9050919050565b6000819050919050565b6140c28361408d565b6140d66140ce826140af565b848454614031565b825550505050565b600090565b6140eb6140de565b6140f68184846140b9565b505050565b5b8181101561411a5761410f6000826140e3565b6001810190506140fc565b5050565b601f82111561415f5761413081613fff565b61413984614014565b81016020851015614148578190505b61415c61415485614014565b8301826140fb565b50505b505050565b600082821c905092915050565b600061418260001984600802614164565b1980831691505092915050565b600061419b8383614171565b9150826002028217905092915050565b6141b482612f6e565b67ffffffffffffffff8111156141cd576141cc61346c565b5b6141d78254613a89565b6141e282828561411e565b600060209050601f8311600181146142155760008415614203578287015190505b61420d858261418f565b865550614275565b601f19841661422386613fff565b60005b8281101561424b57848901518255600182019150602085019450602081019050614226565b868310156142685784890151614264601f891682614171565b8355505b6001600288020188555050505b505050505050565b7f4e6f207472616e736665727320616c6c6f776564000000000000000000000000600082015250565b60006142b3601483612f79565b91506142be8261427d565b602082019050919050565b600060208201905081810360008301526142e2816142a6565b9050919050565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b600061431f601483612f79565b915061432a826142e9565b602082019050919050565b6000602082019050818103600083015261434e81614312565b9050919050565b600081905092915050565b6000815461436d81613a89565b6143778186614355565b9450600182166000811461439257600181146143a7576143da565b60ff19831686528115158202860193506143da565b6143b085613fff565b60005b838110156143d2578154818901526001820191506020810190506143b3565b838801955050505b50505092915050565b60006143ee82612f6e565b6143f88185614355565b9350614408818560208601612f8a565b80840191505092915050565b60006144208285614360565b915061442c82846143e3565b91508190509392505050565b7f57726f6e6720746f6b656e000000000000000000000000000000000000000000600082015250565b600061446e600b83612f79565b915061447982614438565b602082019050919050565b6000602082019050818103600083015261449d81614461565b9050919050565b7f4d6178203130206275726e73207065722077616c6c6574000000000000000000600082015250565b60006144da601783612f79565b91506144e5826144a4565b602082019050919050565b60006020820190508181036000830152614509816144cd565b9050919050565b7f4275726e20616d6f756e7420657863656564732074686520617661696c61626c60008201527f65206275726e61626c6520737570706c79000000000000000000000000000000602082015250565b600061456c603183612f79565b915061457782614510565b604082019050919050565b6000602082019050818103600083015261459b8161455f565b9050919050565b60006060820190506145b760008301866130b5565b6145c4602083018561324b565b6145d1604083018461324b565b949350505050565b600081519050919050565b600081905092915050565b60006145fa826145d9565b61460481856145e4565b9350614614818560208601612f8a565b80840191505092915050565b600061462c82846145ef565b915081905092915050565b7f4275726e204661696c6564000000000000000000000000000000000000000000600082015250565b600061466d600b83612f79565b915061467882614637565b602082019050919050565b6000602082019050818103600083015261469c81614660565b9050919050565b60006146ae82613020565b91506146b983613020565b92508282039050818111156146d1576146d0613c70565b5b92915050565b7f556e61626c6520746f207265636569766520746f6b656e730000000000000000600082015250565b600061470d601883612f79565b9150614718826146d7565b602082019050919050565b6000602082019050818103600083015261473c81614700565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061479f602683612f79565b91506147aa82614743565b604082019050919050565b600060208201905081810360008301526147ce81614792565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061480b602083612f79565b9150614816826147d5565b602082019050919050565b6000602082019050818103600083015261483a816147fe565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061489d602583612f79565b91506148a882614841565b604082019050919050565b600060208201905081810360008301526148cc81614890565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061492f602483612f79565b915061493a826148d3565b604082019050919050565b6000602082019050818103600083015261495e81614922565b9050919050565b7f5472616e7366657273206c6f636b656400000000000000000000000000000000600082015250565b600061499b601083612f79565b91506149a682614965565b602082019050919050565b600060208201905081810360008301526149ca8161498e565b9050919050565b7f546f6f206d616e79206d696e7473000000000000000000000000000000000000600082015250565b6000614a07600e83612f79565b9150614a12826149d1565b602082019050919050565b60006020820190508181036000830152614a36816149fa565b9050919050565b7f4e6f2070726573616c6520616374697665000000000000000000000000000000600082015250565b6000614a73601183612f79565b9150614a7e82614a3d565b602082019050919050565b60006020820190508181036000830152614aa281614a66565b9050919050565b7f416c7265616479206d696e746564000000000000000000000000000000000000600082015250565b6000614adf600e83612f79565b9150614aea82614aa9565b602082019050919050565b60006020820190508181036000830152614b0e81614ad2565b9050919050565b60008160601b9050919050565b6000614b2d82614b15565b9050919050565b6000614b3f82614b22565b9050919050565b614b57614b52826130a3565b614b34565b82525050565b6000614b698284614b46565b60148201915081905092915050565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b6000614bae600d83612f79565b9150614bb982614b78565b602082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b7f496e76616c696420747820616d6f756e74000000000000000000000000000000600082015250565b6000614c1a601183612f79565b9150614c2582614be4565b602082019050919050565b60006020820190508181036000830152614c4981614c0d565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614c86601983612f79565b9150614c9182614c50565b602082019050919050565b60006020820190508181036000830152614cb581614c79565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614d18603283612f79565b9150614d2382614cbc565b604082019050919050565b60006020820190508181036000830152614d4781614d0b565b9050919050565b6000614d5982613020565b9150614d6483613020565b925082614d7457614d73613ce1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b6000614dca826145d9565b614dd48185614dae565b9350614de4818560208601612f8a565b614ded81612fb4565b840191505092915050565b6000608082019050614e0d60008301876130b5565b614e1a60208301866130b5565b614e27604083018561324b565b8181036060830152614e398184614dbf565b905095945050505050565b600081519050614e5381612e86565b92915050565b600060208284031215614e6f57614e6e612e50565b5b6000614e7d84828501614e44565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614ebc602083612f79565b9150614ec782614e86565b602082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614f28601c83612f79565b9150614f3382614ef2565b602082019050919050565b60006020820190508181036000830152614f5781614f1b565b905091905056fea2646970667358221220356776067f7940cea9e9cbb15f0bc549a4f3a2b392a2120ae395e6e8512128e664736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000045700000000000000000000000000000000000000000000000000000000000000084f6e65437550465000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054355504650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c68747470733a2f2f697066732e66696c65626173652e696f2f697066732f516d6235746d584d63736f3968776359725a354b384547597566543871427247374d62786469324d77436b55757a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c68747470733a2f2f697066732e66696c65626173652e696f2f697066732f516d59657a434a373973795a4a44367462536177656a5766685463664d3765624c4b6254334334745633536e43500000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): OneCuPFP
Arg [1] : symbol (string): CUPFP
Arg [2] : _notRevealedUri (string): https://ipfs.filebase.io/ipfs/Qmb5tmXMcso9hwcYrZ5K8EGYufT8qBrG7Mbxdi2MwCkUuz
Arg [3] : contractUri (string): https://ipfs.filebase.io/ipfs/QmYezCJ79syZJD6tbSawejWfhTcfM7ebLKbT3C4tV3SnCP
Arg [4] : _burnSupply (uint256): 1111
-----Encoded View---------------
17 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000457
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [6] : 4f6e654375504650000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 4355504650000000000000000000000000000000000000000000000000000000
Arg [9] : 000000000000000000000000000000000000000000000000000000000000004c
Arg [10] : 68747470733a2f2f697066732e66696c65626173652e696f2f697066732f516d
Arg [11] : 6235746d584d63736f3968776359725a354b384547597566543871427247374d
Arg [12] : 62786469324d77436b55757a0000000000000000000000000000000000000000
Arg [13] : 000000000000000000000000000000000000000000000000000000000000004c
Arg [14] : 68747470733a2f2f697066732e66696c65626173652e696f2f697066732f516d
Arg [15] : 59657a434a373973795a4a44367462536177656a5766685463664d3765624c4b
Arg [16] : 6254334334745633536e43500000000000000000000000000000000000000000
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.