ERC-721
Overview
Max Total Supply
248 DEVOUR
Holders
100
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 DEVOURLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Devour
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./ERC721Enumerable.sol"; import "./Ownable.sol"; import "./ReentrancyGuard.sol"; import "./MerkleProof.sol"; contract Devour is ERC721Enumerable, Ownable, ReentrancyGuard { // Manage minting detail and permission bytes32 public merkleRoot; uint256 public constant maxShardSupply = 600; uint256 public mintPrice = 0.1 ether; uint256 public publicMintLimit = 10; uint256 public wlMintLimit = 5; bool public publicMintEnabled = false; bool public whitelistMintEnabled = false; mapping (address => uint256) public whitelistMinted; // Manage addresses and URI related information address public oreClaimAddress; address public assemblerAddress; string public contractURI; string public baseTokenURI; // Manage balance and types information mapping (address => uint256) public shardBalances; mapping (uint256 => uint256) public devourTypes; uint256 public totalShardMinted; uint256 public totalAssembled; // Manage ore related information uint256 public orePerShard = 75; uint256 public orePerAssembled = 500; uint256 public initialOreClaimTimestamp; mapping (address => uint256) public lastOreClaimWeekByAddress; mapping (address => uint256) private _lastClaimableOreByAddress; constructor ( bytes32 _merkleRoot, address _oreClaim, string memory _initialContractURI, string memory _initialBaseTokenURI ) ERC721("Devour", "DEVOUR") { merkleRoot = _merkleRoot; oreClaimAddress = _oreClaim; contractURI = _initialContractURI; baseTokenURI = _initialBaseTokenURI; } function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner { merkleRoot = _merkleRoot; } function setAssemblerAddress(address _assembler) external onlyOwner { assemblerAddress = _assembler; } function setMintPrice(uint256 _price) external onlyOwner { mintPrice = _price; } function setWhitelistMintLimit(uint256 _limit) external onlyOwner { wlMintLimit = _limit; } function setPublicMintLimit(uint256 _limit) external onlyOwner { publicMintLimit = _limit; } function setPublicMintEnabled(bool _enabled) external onlyOwner { publicMintEnabled = _enabled; } function setWhitelistMintEnabled(bool _enabled) external onlyOwner { whitelistMintEnabled = _enabled; } function setContractURI(string memory _contractURI) external onlyOwner { contractURI = _contractURI; } function setBaseTokenURI(string memory _baseTokenURI) external onlyOwner { baseTokenURI = _baseTokenURI; } function tokenURI(uint256 _tokenId) override public view returns (string memory) { require(_exists(_tokenId), "URI query for nonexistent token"); // Return the correct metadata for assembled tokens if (_tokenId > maxShardSupply) { return string(abi.encodePacked(baseTokenURI, Strings.toString(devourTypes[_tokenId] + 1000))); } // Otherwise return the shard metadata return string(abi.encodePacked(baseTokenURI, Strings.toString(_tokenId))); } function reserveMint(uint256 _count) external onlyOwner { uint256 currentSupply = totalShardMinted; require(currentSupply + _count <= maxShardSupply, "Invalid mint count"); for (uint256 i = 0; i < _count; i++) { _safeMint(msg.sender, currentSupply + i + 1); } shardBalances[msg.sender] += _count; totalShardMinted += _count; } function whitelistMint(bytes32[] calldata _merkleProof) external payable nonReentrant { bytes32 node = keccak256(abi.encodePacked(msg.sender)); uint256 currentSupply = totalShardMinted; uint256 price = mintPrice; require(whitelistMintEnabled, "Whitelist mint is closed"); require(currentSupply < maxShardSupply, "Sold out!"); require(MerkleProof.verify(_merkleProof, merkleRoot, node), "Not whitelisted"); require(whitelistMinted[msg.sender] < wlMintLimit, "Whitelist mint fully claimed"); require(msg.value >= price, "Not enough funds"); uint256 count = msg.value / price; uint256 remaining = maxShardSupply - currentSupply; uint256 remainingWL = wlMintLimit - whitelistMinted[msg.sender]; remaining = (remaining > remainingWL ? remainingWL : remaining); count = (count > remaining ? remaining : count); whitelistMinted[msg.sender] += count; for (uint256 i = 0; i < count; i++) { _safeMint(msg.sender, currentSupply + i + 1); } shardBalances[msg.sender] += count; totalShardMinted += count; uint256 refund = msg.value - (count * price); if (refund > 0) { payable(msg.sender).transfer(refund); } } function publicMint() external payable nonReentrant { uint256 currentSupply = totalShardMinted; uint256 price = mintPrice; require(publicMintEnabled, "Public mint is closed"); require(currentSupply < maxShardSupply, "Sold out!"); require(msg.value >= price, "Not enough funds"); uint256 count = msg.value / price; uint256 remaining = maxShardSupply - currentSupply; count = (count > publicMintLimit ? publicMintLimit : count); count = (count > remaining ? remaining : count); for (uint256 i = 0; i < count; i++) { _safeMint(msg.sender, currentSupply + i + 1); } shardBalances[msg.sender] += count; totalShardMinted += count; uint256 refund = msg.value - (count * price); if (refund > 0) { payable(msg.sender).transfer(refund); } } function assemble(uint256 devourType, uint256[] calldata _tokenIds) external nonReentrant { require(assemblerAddress != address(0), "Assembler not set"); require(msg.sender == assemblerAddress, "Invalid access"); require(_tokenIds.length == 5, "Invalid token ids"); address owner = ownerOf(_tokenIds[0]); // Make sure to still reward the user with any unclaimed ore before burning _updatePendingOre(owner, address(0)); for (uint256 i = 0; i < _tokenIds.length; i++) { _burn(_tokenIds[i]); } shardBalances[owner] -= 5; totalAssembled++; // Calculate the next tokenId for the new assembled token and mint it uint256 nextAssembledId = maxShardSupply + totalAssembled; devourTypes[nextAssembledId] = devourType; _safeMint(owner, nextAssembledId); // Immediately add the weekly claimable ore for the assembled piece to prevent "lost reward" _lastClaimableOreByAddress[owner] += orePerAssembled; } // Helper method to return both shards and assembled pieces owned by the specified owner/account function tokenIdsByOwner(address _owner) external view returns (uint256[] memory, uint256[] memory) { uint256 totalOwned = balanceOf(_owner); uint256 shardOwned = shardBalances[_owner]; uint256 assembledOwned = totalOwned - shardOwned; uint256[] memory shardIds = new uint256[](shardOwned); uint256[] memory assembledIds = new uint256[](assembledOwned); uint256 shardIdx = 0; uint256 assembledIdx = 0; for (uint256 i = 0; i < totalOwned; i++) { uint256 tokenId = tokenOfOwnerByIndex(_owner, i); if (tokenId <= maxShardSupply) { shardIds[shardIdx++] = tokenId; } else { assembledIds[assembledIdx++] = tokenId; } } return (shardIds, assembledIds); } function _getOreClaimWeek() internal view returns (uint256) { uint256 initial = initialOreClaimTimestamp; uint256 timestamp = block.timestamp; // If ore claiming has not been specified, or if it's in the future, return 0 if (initial == 0 || timestamp < initial) { return 0; } // Week starts right within the the next 7 days of the initial claim timestamp return (timestamp - initial) / 1 weeks + 1; } function _getPendingClaimable(address _owner) internal view returns (uint256) { uint256 week = _getOreClaimWeek(); uint256 lastClaimedWeek = lastOreClaimWeekByAddress[_owner]; if (week > lastClaimedWeek) { // Calculate the total pending claimable ore based on the shard and assembled token counts uint256 elapsed = (week - lastClaimedWeek); uint256 shardBalance = shardBalances[_owner]; uint256 assembledBalance = balanceOf(_owner) - shardBalance; return (shardBalance * elapsed * orePerShard) + (assembledBalance * elapsed * orePerAssembled); } return 0; } function _updatePendingOre(address _from, address _to) internal { uint256 week = _getOreClaimWeek(); if (_from != address(0)) { uint256 pendingOre = _getPendingClaimable(_from); if (pendingOre > 0) { _lastClaimableOreByAddress[_from] += pendingOre; lastOreClaimWeekByAddress[_from] = week; } } if (_to != address(0)) { uint256 pendingOre = _getPendingClaimable(_to); if (pendingOre > 0) { _lastClaimableOreByAddress[_to] += pendingOre; lastOreClaimWeekByAddress[_to] = week; } } } function _updateShardBalance(address _from, address _to) internal { if (_from != address(0)) { shardBalances[_from]--; } if (_to != address(0)) { shardBalances[_to]++; } } function setInitialOreClaimTimestamp(uint256 _timestamp) external onlyOwner { initialOreClaimTimestamp = _timestamp; } function claimOre(address _owner) external nonReentrant returns (uint256) { require(msg.sender == oreClaimAddress, "Invalid access"); uint256 totalOre = _lastClaimableOreByAddress[_owner] + _getPendingClaimable(_owner); // Update the tracker states only if needed if (totalOre > 0) { lastOreClaimWeekByAddress[_owner] = _getOreClaimWeek(); _lastClaimableOreByAddress[_owner] = 0; } return totalOre; } function transferFrom(address _from, address _to, uint256 _tokenId) public override { _updatePendingOre(_from, _to); if (_tokenId <= maxShardSupply) { _updateShardBalance(_from, _to); } ERC721.transferFrom(_from, _to, _tokenId); } function safeTransferFrom(address _from, address _to, uint256 _tokenId) public override { _updatePendingOre(_from, _to); if (_tokenId <= maxShardSupply) { _updateShardBalance(_from, _to); } ERC721.safeTransferFrom(_from, _to, _tokenId); } function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public override { _updatePendingOre(_from, _to); if (_tokenId <= maxShardSupply) { _updateShardBalance(_from, _to); } ERC721.safeTransferFrom(_from, _to, _tokenId, _data); } function withdraw() external onlyOwner { payable(msg.sender).transfer(address(this).balance); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.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}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; import "./ERC721.sol"; import "./IERC721Enumerable.sol"; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; 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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees 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. */ 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 Returns the rebuilt hash obtained by traversing a Merklee 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++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; 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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"address","name":"_oreClaim","type":"address"},{"internalType":"string","name":"_initialContractURI","type":"string"},{"internalType":"string","name":"_initialBaseTokenURI","type":"string"}],"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":"uint256","name":"devourType","type":"uint256"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"assemble","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"assemblerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"claimOre","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"devourTypes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialOreClaimTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"","type":"address"}],"name":"lastOreClaimWeekByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxShardSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oreClaimAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orePerAssembled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orePerShard","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"reserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_assembler","type":"address"}],"name":"setAssemblerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setInitialOreClaimTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setPublicMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setPublicMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setWhitelistMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setWhitelistMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shardBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokenIdsByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssembled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShardMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wlMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405267016345785d8a0000600d55600a600e556005600f556010805461ffff19169055604b601a556101f4601b553480156200003d57600080fd5b5060405162003f2b38038062003f2b83398101604081905262000060916200030d565b604051806040016040528060068152602001652232bb37bab960d11b815250604051806040016040528060068152602001652222ab27aaa960d11b8152508160009080519060200190620000b69291906200019a565b508051620000cc9060019060208401906200019a565b505050620000e9620000e36200014460201b60201c565b62000148565b6001600b55600c849055601280546001600160a01b0319166001600160a01b0385161790558151620001239060149060208501906200019a565b508051620001399060159060208401906200019a565b5050505050620003df565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001a890620003a2565b90600052602060002090601f016020900481019282620001cc576000855562000217565b82601f10620001e757805160ff191683800117855562000217565b8280016001018555821562000217579182015b8281111562000217578251825591602001919060010190620001fa565b506200022592915062000229565b5090565b5b808211156200022557600081556001016200022a565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200026857600080fd5b81516001600160401b038082111562000285576200028562000240565b604051601f8301601f19908116603f01168101908282118183101715620002b057620002b062000240565b81604052838152602092508683858801011115620002cd57600080fd5b600091505b83821015620002f15785820183015181830184015290820190620002d2565b83821115620003035760008385830101525b9695505050505050565b600080600080608085870312156200032457600080fd5b845160208601519094506001600160a01b03811681146200034457600080fd5b60408601519093506001600160401b03808211156200036257600080fd5b620003708883890162000256565b935060608701519150808211156200038757600080fd5b50620003968782880162000256565b91505092959194509250565b600181811c90821680620003b757607f821691505b60208210811415620003d957634e487b7160e01b600052602260045260246000fd5b50919050565b613b3c80620003ef6000396000f3fe60806040526004361061036b5760003560e01c80637bc528a0116101c6578063bb485b88116100f7578063e4d8c67511610095578063ef3e067c1161006f578063ef3e067c146109cc578063f2fde38b146109ec578063f43f48bf14610a0c578063f4a0a52814610a2257600080fd5b8063e4d8c6751461094e578063e8a3d4851461096e578063e985e9c51461098357600080fd5b8063c8efe9e0116100d1578063c8efe9e0146108e0578063cdd1d7951461090d578063d5138f9d14610923578063d547cfb71461093957600080fd5b8063bb485b881461088a578063c4181f0f146108a0578063c87b56dd146108c057600080fd5b8063940a80971161016457806398a8cffe1161013e57806398a8cffe146107fd578063a22cb4651461082a578063b767a0981461084a578063b88d4fde1461086a57600080fd5b8063940a8097146107a857806395d89b41146107c8578063966090ba146107dd57600080fd5b80638d93bcbd116101a05780638d93bcbd1461071c5780638da5cb5b1461073c5780638f85fa941461075a578063938e3d7b1461078857600080fd5b80637bc528a0146106af5780637cb64759146106dc578063818668d7146106fc57600080fd5b8063372f657c116102a05780636352211e1161023e57806370a082311161021857806370a082311461064e578063715018a61461066e578063741ff5bf1461068357806376aa073e1461069957600080fd5b80636352211e146105f95780636817c76c146106195780636caede3d1461062f57600080fd5b806342842e0e1161027a57806342842e0e146105835780634b5fb25a146105a35780634f6ccce7146105c3578063542a44c0146105e357600080fd5b8063372f657c1461053b578063381b965c1461054e5780633ccfd60b1461056e57600080fd5b8063209d78631161030d57806326092b83116102e757806326092b83146104dd5780632eb4a7ab146104e55780632f745c59146104fb57806330176e131461051b57600080fd5b8063209d78631461047a578063224f64981461049057806323b872dd146104bd57600080fd5b8063095ea7b311610349578063095ea7b3146103ff5780630f4161aa146104215780631342ff4c1461043b57806318160ddd1461045b57600080fd5b806301ffc9a71461037057806306fdde03146103a5578063081812fc146103c7575b600080fd5b34801561037c57600080fd5b5061039061038b366004613437565b610a42565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b506103ba610a86565b60405161039c91906134b3565b3480156103d357600080fd5b506103e76103e23660046134c6565b610b18565b6040516001600160a01b03909116815260200161039c565b34801561040b57600080fd5b5061041f61041a3660046134fb565b610bb2565b005b34801561042d57600080fd5b506010546103909060ff1681565b34801561044757600080fd5b5061041f6104563660046134c6565b610ce4565b34801561046757600080fd5b506008545b60405190815260200161039c565b34801561048657600080fd5b5061046c61025881565b34801561049c57600080fd5b5061046c6104ab3660046134c6565b60176020526000908152604090205481565b3480156104c957600080fd5b5061041f6104d8366004613525565b610e07565b61041f610e2f565b3480156104f157600080fd5b5061046c600c5481565b34801561050757600080fd5b5061046c6105163660046134fb565b611073565b34801561052757600080fd5b5061041f6105363660046135ed565b61111b565b61041f610549366004613682565b61117a565b34801561055a57600080fd5b5061041f6105693660046134c6565b611531565b34801561057a57600080fd5b5061041f61157e565b34801561058f57600080fd5b5061041f61059e366004613525565b6115f5565b3480156105af57600080fd5b5061041f6105be3660046136c4565b61161d565b3480156105cf57600080fd5b5061046c6105de3660046134c6565b611687565b3480156105ef57600080fd5b5061046c60185481565b34801561060557600080fd5b506103e76106143660046134c6565b61172b565b34801561062557600080fd5b5061046c600d5481565b34801561063b57600080fd5b5060105461039090610100900460ff1681565b34801561065a57600080fd5b5061046c6106693660046136c4565b6117b6565b34801561067a57600080fd5b5061041f611850565b34801561068f57600080fd5b5061046c60195481565b3480156106a557600080fd5b5061046c601c5481565b3480156106bb57600080fd5b5061046c6106ca3660046136c4565b601d6020526000908152604090205481565b3480156106e857600080fd5b5061041f6106f73660046134c6565b6118a4565b34801561070857600080fd5b5061041f6107173660046136ef565b6118f1565b34801561072857600080fd5b506013546103e7906001600160a01b031681565b34801561074857600080fd5b50600a546001600160a01b03166103e7565b34801561076657600080fd5b5061077a6107753660046136c4565b61194c565b60405161039c929190613745565b34801561079457600080fd5b5061041f6107a33660046135ed565b611ab3565b3480156107b457600080fd5b5061046c6107c33660046136c4565b611b0e565b3480156107d457600080fd5b506103ba611c33565b3480156107e957600080fd5b5061041f6107f8366004613773565b611c42565b34801561080957600080fd5b5061046c6108183660046136c4565b60116020526000908152604090205481565b34801561083657600080fd5b5061041f6108453660046137bf565b611eba565b34801561085657600080fd5b5061041f6108653660046136ef565b611ec5565b34801561087657600080fd5b5061041f6108853660046137f2565b611f27565b34801561089657600080fd5b5061046c600e5481565b3480156108ac57600080fd5b506012546103e7906001600160a01b031681565b3480156108cc57600080fd5b506103ba6108db3660046134c6565b611f56565b3480156108ec57600080fd5b5061046c6108fb3660046136c4565b60166020526000908152604090205481565b34801561091957600080fd5b5061046c601a5481565b34801561092f57600080fd5b5061046c600f5481565b34801561094557600080fd5b506103ba612020565b34801561095a57600080fd5b5061041f6109693660046134c6565b6120ae565b34801561097a57600080fd5b506103ba6120fb565b34801561098f57600080fd5b5061039061099e36600461386e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156109d857600080fd5b5061041f6109e73660046134c6565b612108565b3480156109f857600080fd5b5061041f610a073660046136c4565b612155565b348015610a1857600080fd5b5061046c601b5481565b348015610a2e57600080fd5b5061041f610a3d3660046134c6565b612222565b60006001600160e01b031982167f780e9d63000000000000000000000000000000000000000000000000000000001480610a805750610a808261226f565b92915050565b606060008054610a9590613898565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac190613898565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610b965760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610bbd8261172b565b9050806001600160a01b0316836001600160a01b03161415610c475760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610b8d565b336001600160a01b0382161480610c635750610c63813361099e565b610cd55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b8d565b610cdf838361230a565b505050565b600a546001600160a01b03163314610d2c5760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b601854610258610d3c83836138e9565b1115610d8a5760405162461bcd60e51b815260206004820152601260248201527f496e76616c6964206d696e7420636f756e7400000000000000000000000000006044820152606401610b8d565b60005b82811015610dc557610db333610da383856138e9565b610dae9060016138e9565b612378565b80610dbd81613901565b915050610d8d565b503360009081526016602052604081208054849290610de59084906138e9565b925050819055508160186000828254610dfe91906138e9565b90915550505050565b610e118383612392565b6102588111610e2457610e248383612479565b610cdf8383836124ee565b6002600b541415610e825760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b8d565b6002600b55601854600d5460105460ff16610edf5760405162461bcd60e51b815260206004820152601560248201527f5075626c6963206d696e7420697320636c6f73656400000000000000000000006044820152606401610b8d565b6102588210610f1c5760405162461bcd60e51b8152602060048201526009602482015268536f6c64206f75742160b81b6044820152606401610b8d565b80341015610f6c5760405162461bcd60e51b815260206004820152601060248201527f4e6f7420656e6f7567682066756e6473000000000000000000000000000000006044820152606401610b8d565b6000610f788234613932565b90506000610f8884610258613946565b9050600e548211610f995781610f9d565b600e545b9150808211610fac5781610fae565b805b915060005b82811015610fdb57610fc933610da383886138e9565b80610fd381613901565b915050610fb3565b503360009081526016602052604081208054849290610ffb9084906138e9565b92505081905550816018600082825461101491906138e9565b9091555060009050611026848461395d565b6110309034613946565b9050801561106757604051339082156108fc029083906000818181858888f19350505050158015611065573d6000803e3d6000fd5b505b50506001600b55505050565b600061107e836117b6565b82106110f25760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610b8d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146111635760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b8051611176906015906020840190613388565b5050565b6002600b5414156111cd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b8d565b6002600b55604080516bffffffffffffffffffffffff193360601b166020808301919091528251808303601401815260349092019092528051910120601854600d54601054610100900460ff166112665760405162461bcd60e51b815260206004820152601860248201527f57686974656c697374206d696e7420697320636c6f73656400000000000000006044820152606401610b8d565b61025882106112a35760405162461bcd60e51b8152602060048201526009602482015268536f6c64206f75742160b81b6044820152606401610b8d565b6112e485858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600c549150869050612575565b6113305760405162461bcd60e51b815260206004820152600f60248201527f4e6f742077686974656c697374656400000000000000000000000000000000006044820152606401610b8d565b600f5433600090815260116020526040902054106113905760405162461bcd60e51b815260206004820152601c60248201527f57686974656c697374206d696e742066756c6c7920636c61696d6564000000006044820152606401610b8d565b803410156113e05760405162461bcd60e51b815260206004820152601060248201527f4e6f7420656e6f7567682066756e6473000000000000000000000000000000006044820152606401610b8d565b60006113ec8234613932565b905060006113fc84610258613946565b33600090815260116020526040812054600f54929350909161141e9190613946565b905080821161142d578161142f565b805b915081831161143e5782611440565b815b336000908152601160205260408120805492955085929091906114649084906138e9565b90915550600090505b838110156114955761148333610da383896138e9565b8061148d81613901565b91505061146d565b5033600090815260166020526040812080548592906114b59084906138e9565b9250508190555082601860008282546114ce91906138e9565b90915550600090506114e0858561395d565b6114ea9034613946565b9050801561152157604051339082156108fc029083906000818181858888f1935050505015801561151f573d6000803e3d6000fd5b505b50506001600b5550505050505050565b600a546001600160a01b031633146115795760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b600f55565b600a546001600160a01b031633146115c65760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b60405133904780156108fc02916000818181858888f193505050501580156115f2573d6000803e3d6000fd5b50565b6115ff8383612392565b6102588111611612576116128383612479565b610cdf83838361258b565b600a546001600160a01b031633146116655760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b600061169260085490565b82106117065760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610b8d565b600882815481106117195761171961397c565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b031680610a805760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610b8d565b60006001600160a01b0382166118345760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610b8d565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146118985760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b6118a260006125a6565b565b600a546001600160a01b031633146118ec5760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b600c55565b600a546001600160a01b031633146119395760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b6010805460ff1916911515919091179055565b606080600061195a846117b6565b6001600160a01b0385166000908152601660205260408120549192506119808284613946565b905060008267ffffffffffffffff81111561199d5761199d613561565b6040519080825280602002602001820160405280156119c6578160200160208202803683370190505b50905060008267ffffffffffffffff8111156119e4576119e4613561565b604051908082528060200260200182016040528015611a0d578160200160208202803683370190505b50905060008060005b87811015611aa2576000611a2a8c83611073565b90506102588111611a6457808685611a4181613901565b965081518110611a5357611a5361397c565b602002602001018181525050611a8f565b808584611a7081613901565b955081518110611a8257611a8261397c565b6020026020010181815250505b5080611a9a81613901565b915050611a16565b509299919850909650505050505050565b600a546001600160a01b03163314611afb5760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b8051611176906014906020840190613388565b60006002600b541415611b635760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b8d565b6002600b556012546001600160a01b03163314611bc25760405162461bcd60e51b815260206004820152600e60248201527f496e76616c6964206163636573730000000000000000000000000000000000006044820152606401610b8d565b6000611bcd836125f8565b6001600160a01b0384166000908152601e6020526040902054611bf091906138e9565b90508015611c2857611c006126b3565b6001600160a01b0384166000908152601d6020908152604080832093909355601e9052908120555b6001600b5592915050565b606060018054610a9590613898565b6002600b541415611c955760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b8d565b6002600b556013546001600160a01b0316611cf25760405162461bcd60e51b815260206004820152601160248201527f417373656d626c6572206e6f74207365740000000000000000000000000000006044820152606401610b8d565b6013546001600160a01b03163314611d4c5760405162461bcd60e51b815260206004820152600e60248201527f496e76616c6964206163636573730000000000000000000000000000000000006044820152606401610b8d565b60058114611d9c5760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420746f6b656e206964730000000000000000000000000000006044820152606401610b8d565b6000611dc083836000818110611db457611db461397c565b9050602002013561172b565b9050611dcd816000612392565b60005b82811015611e0b57611df9848483818110611ded57611ded61397c565b905060200201356126fe565b80611e0381613901565b915050611dd0565b506001600160a01b0381166000908152601660205260408120805460059290611e35908490613946565b909155505060198054906000611e4a83613901565b91905055506000601954610258611e6191906138e9565b60008181526017602052604090208690559050611e7e8282612378565b601b546001600160a01b0383166000908152601e602052604081208054909190611ea99084906138e9565b90915550506001600b555050505050565b6111763383836127a5565b600a546001600160a01b03163314611f0d5760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b601080549115156101000261ff0019909216919091179055565b611f318484612392565b6102588211611f4457611f448484612479565b611f5084848484612874565b50505050565b6000818152600260205260409020546060906001600160a01b0316611fbd5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006044820152606401610b8d565b61025882111561201557600082815260176020526040902054601590611fee90611fe9906103e86138e9565b6128fc565b604051602001611fff9291906139ae565b6040516020818303038152906040529050919050565b6015611fee836128fc565b6015805461202d90613898565b80601f016020809104026020016040519081016040528092919081815260200182805461205990613898565b80156120a65780601f1061207b576101008083540402835291602001916120a6565b820191906000526020600020905b81548152906001019060200180831161208957829003601f168201915b505050505081565b600a546001600160a01b031633146120f65760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b601c55565b6014805461202d90613898565b600a546001600160a01b031633146121505760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b600e55565b600a546001600160a01b0316331461219d5760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b6001600160a01b0381166122195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b8d565b6115f2816125a6565b600a546001600160a01b0316331461226a5760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b600d55565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806122d257506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a8057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610a80565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061233f8261172b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611176828260405180602001604052806000815250612a36565b600061239c6126b3565b90506001600160a01b0383161561240b5760006123b8846125f8565b90508015612409576001600160a01b0384166000908152601e6020526040812080548392906123e89084906138e9565b90915550506001600160a01b0384166000908152601d602052604090208290555b505b6001600160a01b03821615610cdf576000612425836125f8565b90508015611f50576001600160a01b0383166000908152601e6020526040812080548392906124559084906138e9565b9091555050506001600160a01b03919091166000908152601d602052604090205550565b6001600160a01b038216156124b2576001600160a01b03821660009081526016602052604081208054916124ac83613a4c565b91905055505b6001600160a01b03811615611176576001600160a01b03811660009081526016602052604081208054916124e583613901565b91905055505050565b6124f83382612ab4565b61256a5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b8d565b610cdf838383612ba7565b6000826125828584612d7f565b14949350505050565b610cdf83838360405180602001604052806000815250611f27565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806126036126b3565b6001600160a01b0384166000908152601d6020526040902054909150808211156126a95760006126338284613946565b6001600160a01b03861660009081526016602052604081205491925081612659886117b6565b6126639190613946565b601b54909150612673848361395d565b61267d919061395d565b601a5461268a858561395d565b612694919061395d565b61269e91906138e9565b979650505050505050565b5060009392505050565b601c54600090428115806126c657508181105b156126d45760009250505090565b62093a806126e28383613946565b6126ec9190613932565b6126f79060016138e9565b9250505090565b60006127098261172b565b905061271781600084612e2b565b61272260008361230a565b6001600160a01b038116600090815260036020526040812080546001929061274b908490613946565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b031614156128075760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b8d565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61287e3383612ab4565b6128f05760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b8d565b611f5084848484612ee3565b60608161293c57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612966578061295081613901565b915061295f9050600a83613932565b9150612940565b60008167ffffffffffffffff81111561298157612981613561565b6040519080825280601f01601f1916602001820160405280156129ab576020820181803683370190505b5090505b8415612a2e576129c0600183613946565b91506129cd600a86613a63565b6129d89060306138e9565b60f81b8183815181106129ed576129ed61397c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612a27600a86613932565b94506129af565b949350505050565b612a408383612f61565b612a4d60008484846130af565b610cdf5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610b8d565b6000818152600260205260408120546001600160a01b0316612b2d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b8d565b6000612b388361172b565b9050806001600160a01b0316846001600160a01b03161480612b735750836001600160a01b0316612b6884610b18565b6001600160a01b0316145b80612a2e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16612a2e565b826001600160a01b0316612bba8261172b565b6001600160a01b031614612c365760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610b8d565b6001600160a01b038216612cb15760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b8d565b612cbc838383612e2b565b612cc760008261230a565b6001600160a01b0383166000908152600360205260408120805460019290612cf0908490613946565b90915550506001600160a01b0382166000908152600360205260408120805460019290612d1e9084906138e9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600081815b8451811015612e23576000858281518110612da157612da161397c565b60200260200101519050808311612de3576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250612e10565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080612e1b81613901565b915050612d84565b509392505050565b6001600160a01b038316612e8657612e8181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612ea9565b816001600160a01b0316836001600160a01b031614612ea957612ea983826131f8565b6001600160a01b038216612ec057610cdf81613295565b826001600160a01b0316826001600160a01b031614610cdf57610cdf8282613344565b612eee848484612ba7565b612efa848484846130af565b611f505760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610b8d565b6001600160a01b038216612fb75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b8d565b6000818152600260205260409020546001600160a01b03161561301c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b8d565b61302860008383612e2b565b6001600160a01b03821660009081526003602052604081208054600192906130519084906138e9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156131ed57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906130f3903390899088908890600401613a77565b6020604051808303816000875af192505050801561312e575060408051601f3d908101601f1916820190925261312b91810190613ab3565b60015b6131d3573d80801561315c576040519150601f19603f3d011682016040523d82523d6000602084013e613161565b606091505b5080516131cb5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610b8d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612a2e565b506001949350505050565b60006001613205846117b6565b61320f9190613946565b600083815260076020526040902054909150808214613262576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906132a790600190613946565b600083815260096020526040812054600880549394509092849081106132cf576132cf61397c565b9060005260206000200154905080600883815481106132f0576132f061397c565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061332857613328613ad0565b6001900381819060005260206000200160009055905550505050565b600061334f836117b6565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b82805461339490613898565b90600052602060002090601f0160209004810192826133b657600085556133fc565b82601f106133cf57805160ff19168380011785556133fc565b828001600101855582156133fc579182015b828111156133fc5782518255916020019190600101906133e1565b5061340892915061340c565b5090565b5b80821115613408576000815560010161340d565b6001600160e01b0319811681146115f257600080fd5b60006020828403121561344957600080fd5b813561345481613421565b9392505050565b60005b8381101561347657818101518382015260200161345e565b83811115611f505750506000910152565b6000815180845261349f81602086016020860161345b565b601f01601f19169290920160200192915050565b6020815260006134546020830184613487565b6000602082840312156134d857600080fd5b5035919050565b80356001600160a01b03811681146134f657600080fd5b919050565b6000806040838503121561350e57600080fd5b613517836134df565b946020939093013593505050565b60008060006060848603121561353a57600080fd5b613543846134df565b9250613551602085016134df565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561359257613592613561565b604051601f8501601f19908116603f011681019082821181831017156135ba576135ba613561565b816040528093508581528686860111156135d357600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156135ff57600080fd5b813567ffffffffffffffff81111561361657600080fd5b8201601f8101841361362757600080fd5b612a2e84823560208401613577565b60008083601f84011261364857600080fd5b50813567ffffffffffffffff81111561366057600080fd5b6020830191508360208260051b850101111561367b57600080fd5b9250929050565b6000806020838503121561369557600080fd5b823567ffffffffffffffff8111156136ac57600080fd5b6136b885828601613636565b90969095509350505050565b6000602082840312156136d657600080fd5b613454826134df565b803580151581146134f657600080fd5b60006020828403121561370157600080fd5b613454826136df565b600081518084526020808501945080840160005b8381101561373a5781518752958201959082019060010161371e565b509495945050505050565b604081526000613758604083018561370a565b828103602084015261376a818561370a565b95945050505050565b60008060006040848603121561378857600080fd5b83359250602084013567ffffffffffffffff8111156137a657600080fd5b6137b286828701613636565b9497909650939450505050565b600080604083850312156137d257600080fd5b6137db836134df565b91506137e9602084016136df565b90509250929050565b6000806000806080858703121561380857600080fd5b613811856134df565b935061381f602086016134df565b925060408501359150606085013567ffffffffffffffff81111561384257600080fd5b8501601f8101871361385357600080fd5b61386287823560208401613577565b91505092959194509250565b6000806040838503121561388157600080fd5b61388a836134df565b91506137e9602084016134df565b600181811c908216806138ac57607f821691505b602082108114156138cd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156138fc576138fc6138d3565b500190565b6000600019821415613915576139156138d3565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826139415761394161391c565b500490565b600082821015613958576139586138d3565b500390565b6000816000190483118215151615613977576139776138d3565b500290565b634e487b7160e01b600052603260045260246000fd5b600081516139a481856020860161345b565b9290920192915050565b600080845481600182811c9150808316806139ca57607f831692505b60208084108214156139ea57634e487b7160e01b86526022600452602486fd5b8180156139fe5760018114613a0f57613a3c565b60ff19861689528489019650613a3c565b60008b81526020902060005b86811015613a345781548b820152908501908301613a1b565b505084890196505b50505050505061376a8185613992565b600081613a5b57613a5b6138d3565b506000190190565b600082613a7257613a7261391c565b500690565b60006001600160a01b03808716835280861660208401525083604083015260806060830152613aa96080830184613487565b9695505050505050565b600060208284031215613ac557600080fd5b815161345481613421565b634e487b7160e01b600052603160045260246000fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220321f4fa67a376dc548b935550ba5c7f3810edf3cdacfdb1e8f88c7e7d9cc873b64736f6c634300080b0033130b8e74bb99c9cf23d2e2e2aa375f98515c250651eaf4cbd2d449dbaa0436640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000007697066733a2f2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007697066733a2f2f00000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061036b5760003560e01c80637bc528a0116101c6578063bb485b88116100f7578063e4d8c67511610095578063ef3e067c1161006f578063ef3e067c146109cc578063f2fde38b146109ec578063f43f48bf14610a0c578063f4a0a52814610a2257600080fd5b8063e4d8c6751461094e578063e8a3d4851461096e578063e985e9c51461098357600080fd5b8063c8efe9e0116100d1578063c8efe9e0146108e0578063cdd1d7951461090d578063d5138f9d14610923578063d547cfb71461093957600080fd5b8063bb485b881461088a578063c4181f0f146108a0578063c87b56dd146108c057600080fd5b8063940a80971161016457806398a8cffe1161013e57806398a8cffe146107fd578063a22cb4651461082a578063b767a0981461084a578063b88d4fde1461086a57600080fd5b8063940a8097146107a857806395d89b41146107c8578063966090ba146107dd57600080fd5b80638d93bcbd116101a05780638d93bcbd1461071c5780638da5cb5b1461073c5780638f85fa941461075a578063938e3d7b1461078857600080fd5b80637bc528a0146106af5780637cb64759146106dc578063818668d7146106fc57600080fd5b8063372f657c116102a05780636352211e1161023e57806370a082311161021857806370a082311461064e578063715018a61461066e578063741ff5bf1461068357806376aa073e1461069957600080fd5b80636352211e146105f95780636817c76c146106195780636caede3d1461062f57600080fd5b806342842e0e1161027a57806342842e0e146105835780634b5fb25a146105a35780634f6ccce7146105c3578063542a44c0146105e357600080fd5b8063372f657c1461053b578063381b965c1461054e5780633ccfd60b1461056e57600080fd5b8063209d78631161030d57806326092b83116102e757806326092b83146104dd5780632eb4a7ab146104e55780632f745c59146104fb57806330176e131461051b57600080fd5b8063209d78631461047a578063224f64981461049057806323b872dd146104bd57600080fd5b8063095ea7b311610349578063095ea7b3146103ff5780630f4161aa146104215780631342ff4c1461043b57806318160ddd1461045b57600080fd5b806301ffc9a71461037057806306fdde03146103a5578063081812fc146103c7575b600080fd5b34801561037c57600080fd5b5061039061038b366004613437565b610a42565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b506103ba610a86565b60405161039c91906134b3565b3480156103d357600080fd5b506103e76103e23660046134c6565b610b18565b6040516001600160a01b03909116815260200161039c565b34801561040b57600080fd5b5061041f61041a3660046134fb565b610bb2565b005b34801561042d57600080fd5b506010546103909060ff1681565b34801561044757600080fd5b5061041f6104563660046134c6565b610ce4565b34801561046757600080fd5b506008545b60405190815260200161039c565b34801561048657600080fd5b5061046c61025881565b34801561049c57600080fd5b5061046c6104ab3660046134c6565b60176020526000908152604090205481565b3480156104c957600080fd5b5061041f6104d8366004613525565b610e07565b61041f610e2f565b3480156104f157600080fd5b5061046c600c5481565b34801561050757600080fd5b5061046c6105163660046134fb565b611073565b34801561052757600080fd5b5061041f6105363660046135ed565b61111b565b61041f610549366004613682565b61117a565b34801561055a57600080fd5b5061041f6105693660046134c6565b611531565b34801561057a57600080fd5b5061041f61157e565b34801561058f57600080fd5b5061041f61059e366004613525565b6115f5565b3480156105af57600080fd5b5061041f6105be3660046136c4565b61161d565b3480156105cf57600080fd5b5061046c6105de3660046134c6565b611687565b3480156105ef57600080fd5b5061046c60185481565b34801561060557600080fd5b506103e76106143660046134c6565b61172b565b34801561062557600080fd5b5061046c600d5481565b34801561063b57600080fd5b5060105461039090610100900460ff1681565b34801561065a57600080fd5b5061046c6106693660046136c4565b6117b6565b34801561067a57600080fd5b5061041f611850565b34801561068f57600080fd5b5061046c60195481565b3480156106a557600080fd5b5061046c601c5481565b3480156106bb57600080fd5b5061046c6106ca3660046136c4565b601d6020526000908152604090205481565b3480156106e857600080fd5b5061041f6106f73660046134c6565b6118a4565b34801561070857600080fd5b5061041f6107173660046136ef565b6118f1565b34801561072857600080fd5b506013546103e7906001600160a01b031681565b34801561074857600080fd5b50600a546001600160a01b03166103e7565b34801561076657600080fd5b5061077a6107753660046136c4565b61194c565b60405161039c929190613745565b34801561079457600080fd5b5061041f6107a33660046135ed565b611ab3565b3480156107b457600080fd5b5061046c6107c33660046136c4565b611b0e565b3480156107d457600080fd5b506103ba611c33565b3480156107e957600080fd5b5061041f6107f8366004613773565b611c42565b34801561080957600080fd5b5061046c6108183660046136c4565b60116020526000908152604090205481565b34801561083657600080fd5b5061041f6108453660046137bf565b611eba565b34801561085657600080fd5b5061041f6108653660046136ef565b611ec5565b34801561087657600080fd5b5061041f6108853660046137f2565b611f27565b34801561089657600080fd5b5061046c600e5481565b3480156108ac57600080fd5b506012546103e7906001600160a01b031681565b3480156108cc57600080fd5b506103ba6108db3660046134c6565b611f56565b3480156108ec57600080fd5b5061046c6108fb3660046136c4565b60166020526000908152604090205481565b34801561091957600080fd5b5061046c601a5481565b34801561092f57600080fd5b5061046c600f5481565b34801561094557600080fd5b506103ba612020565b34801561095a57600080fd5b5061041f6109693660046134c6565b6120ae565b34801561097a57600080fd5b506103ba6120fb565b34801561098f57600080fd5b5061039061099e36600461386e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156109d857600080fd5b5061041f6109e73660046134c6565b612108565b3480156109f857600080fd5b5061041f610a073660046136c4565b612155565b348015610a1857600080fd5b5061046c601b5481565b348015610a2e57600080fd5b5061041f610a3d3660046134c6565b612222565b60006001600160e01b031982167f780e9d63000000000000000000000000000000000000000000000000000000001480610a805750610a808261226f565b92915050565b606060008054610a9590613898565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac190613898565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610b965760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610bbd8261172b565b9050806001600160a01b0316836001600160a01b03161415610c475760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610b8d565b336001600160a01b0382161480610c635750610c63813361099e565b610cd55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b8d565b610cdf838361230a565b505050565b600a546001600160a01b03163314610d2c5760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b601854610258610d3c83836138e9565b1115610d8a5760405162461bcd60e51b815260206004820152601260248201527f496e76616c6964206d696e7420636f756e7400000000000000000000000000006044820152606401610b8d565b60005b82811015610dc557610db333610da383856138e9565b610dae9060016138e9565b612378565b80610dbd81613901565b915050610d8d565b503360009081526016602052604081208054849290610de59084906138e9565b925050819055508160186000828254610dfe91906138e9565b90915550505050565b610e118383612392565b6102588111610e2457610e248383612479565b610cdf8383836124ee565b6002600b541415610e825760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b8d565b6002600b55601854600d5460105460ff16610edf5760405162461bcd60e51b815260206004820152601560248201527f5075626c6963206d696e7420697320636c6f73656400000000000000000000006044820152606401610b8d565b6102588210610f1c5760405162461bcd60e51b8152602060048201526009602482015268536f6c64206f75742160b81b6044820152606401610b8d565b80341015610f6c5760405162461bcd60e51b815260206004820152601060248201527f4e6f7420656e6f7567682066756e6473000000000000000000000000000000006044820152606401610b8d565b6000610f788234613932565b90506000610f8884610258613946565b9050600e548211610f995781610f9d565b600e545b9150808211610fac5781610fae565b805b915060005b82811015610fdb57610fc933610da383886138e9565b80610fd381613901565b915050610fb3565b503360009081526016602052604081208054849290610ffb9084906138e9565b92505081905550816018600082825461101491906138e9565b9091555060009050611026848461395d565b6110309034613946565b9050801561106757604051339082156108fc029083906000818181858888f19350505050158015611065573d6000803e3d6000fd5b505b50506001600b55505050565b600061107e836117b6565b82106110f25760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610b8d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146111635760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b8051611176906015906020840190613388565b5050565b6002600b5414156111cd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b8d565b6002600b55604080516bffffffffffffffffffffffff193360601b166020808301919091528251808303601401815260349092019092528051910120601854600d54601054610100900460ff166112665760405162461bcd60e51b815260206004820152601860248201527f57686974656c697374206d696e7420697320636c6f73656400000000000000006044820152606401610b8d565b61025882106112a35760405162461bcd60e51b8152602060048201526009602482015268536f6c64206f75742160b81b6044820152606401610b8d565b6112e485858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600c549150869050612575565b6113305760405162461bcd60e51b815260206004820152600f60248201527f4e6f742077686974656c697374656400000000000000000000000000000000006044820152606401610b8d565b600f5433600090815260116020526040902054106113905760405162461bcd60e51b815260206004820152601c60248201527f57686974656c697374206d696e742066756c6c7920636c61696d6564000000006044820152606401610b8d565b803410156113e05760405162461bcd60e51b815260206004820152601060248201527f4e6f7420656e6f7567682066756e6473000000000000000000000000000000006044820152606401610b8d565b60006113ec8234613932565b905060006113fc84610258613946565b33600090815260116020526040812054600f54929350909161141e9190613946565b905080821161142d578161142f565b805b915081831161143e5782611440565b815b336000908152601160205260408120805492955085929091906114649084906138e9565b90915550600090505b838110156114955761148333610da383896138e9565b8061148d81613901565b91505061146d565b5033600090815260166020526040812080548592906114b59084906138e9565b9250508190555082601860008282546114ce91906138e9565b90915550600090506114e0858561395d565b6114ea9034613946565b9050801561152157604051339082156108fc029083906000818181858888f1935050505015801561151f573d6000803e3d6000fd5b505b50506001600b5550505050505050565b600a546001600160a01b031633146115795760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b600f55565b600a546001600160a01b031633146115c65760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b60405133904780156108fc02916000818181858888f193505050501580156115f2573d6000803e3d6000fd5b50565b6115ff8383612392565b6102588111611612576116128383612479565b610cdf83838361258b565b600a546001600160a01b031633146116655760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b600061169260085490565b82106117065760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610b8d565b600882815481106117195761171961397c565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b031680610a805760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610b8d565b60006001600160a01b0382166118345760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610b8d565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146118985760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b6118a260006125a6565b565b600a546001600160a01b031633146118ec5760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b600c55565b600a546001600160a01b031633146119395760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b6010805460ff1916911515919091179055565b606080600061195a846117b6565b6001600160a01b0385166000908152601660205260408120549192506119808284613946565b905060008267ffffffffffffffff81111561199d5761199d613561565b6040519080825280602002602001820160405280156119c6578160200160208202803683370190505b50905060008267ffffffffffffffff8111156119e4576119e4613561565b604051908082528060200260200182016040528015611a0d578160200160208202803683370190505b50905060008060005b87811015611aa2576000611a2a8c83611073565b90506102588111611a6457808685611a4181613901565b965081518110611a5357611a5361397c565b602002602001018181525050611a8f565b808584611a7081613901565b955081518110611a8257611a8261397c565b6020026020010181815250505b5080611a9a81613901565b915050611a16565b509299919850909650505050505050565b600a546001600160a01b03163314611afb5760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b8051611176906014906020840190613388565b60006002600b541415611b635760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b8d565b6002600b556012546001600160a01b03163314611bc25760405162461bcd60e51b815260206004820152600e60248201527f496e76616c6964206163636573730000000000000000000000000000000000006044820152606401610b8d565b6000611bcd836125f8565b6001600160a01b0384166000908152601e6020526040902054611bf091906138e9565b90508015611c2857611c006126b3565b6001600160a01b0384166000908152601d6020908152604080832093909355601e9052908120555b6001600b5592915050565b606060018054610a9590613898565b6002600b541415611c955760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b8d565b6002600b556013546001600160a01b0316611cf25760405162461bcd60e51b815260206004820152601160248201527f417373656d626c6572206e6f74207365740000000000000000000000000000006044820152606401610b8d565b6013546001600160a01b03163314611d4c5760405162461bcd60e51b815260206004820152600e60248201527f496e76616c6964206163636573730000000000000000000000000000000000006044820152606401610b8d565b60058114611d9c5760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420746f6b656e206964730000000000000000000000000000006044820152606401610b8d565b6000611dc083836000818110611db457611db461397c565b9050602002013561172b565b9050611dcd816000612392565b60005b82811015611e0b57611df9848483818110611ded57611ded61397c565b905060200201356126fe565b80611e0381613901565b915050611dd0565b506001600160a01b0381166000908152601660205260408120805460059290611e35908490613946565b909155505060198054906000611e4a83613901565b91905055506000601954610258611e6191906138e9565b60008181526017602052604090208690559050611e7e8282612378565b601b546001600160a01b0383166000908152601e602052604081208054909190611ea99084906138e9565b90915550506001600b555050505050565b6111763383836127a5565b600a546001600160a01b03163314611f0d5760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b601080549115156101000261ff0019909216919091179055565b611f318484612392565b6102588211611f4457611f448484612479565b611f5084848484612874565b50505050565b6000818152600260205260409020546060906001600160a01b0316611fbd5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006044820152606401610b8d565b61025882111561201557600082815260176020526040902054601590611fee90611fe9906103e86138e9565b6128fc565b604051602001611fff9291906139ae565b6040516020818303038152906040529050919050565b6015611fee836128fc565b6015805461202d90613898565b80601f016020809104026020016040519081016040528092919081815260200182805461205990613898565b80156120a65780601f1061207b576101008083540402835291602001916120a6565b820191906000526020600020905b81548152906001019060200180831161208957829003601f168201915b505050505081565b600a546001600160a01b031633146120f65760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b601c55565b6014805461202d90613898565b600a546001600160a01b031633146121505760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b600e55565b600a546001600160a01b0316331461219d5760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b6001600160a01b0381166122195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b8d565b6115f2816125a6565b600a546001600160a01b0316331461226a5760405162461bcd60e51b81526020600482018190526024820152600080516020613ae78339815191526044820152606401610b8d565b600d55565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806122d257506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a8057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610a80565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061233f8261172b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611176828260405180602001604052806000815250612a36565b600061239c6126b3565b90506001600160a01b0383161561240b5760006123b8846125f8565b90508015612409576001600160a01b0384166000908152601e6020526040812080548392906123e89084906138e9565b90915550506001600160a01b0384166000908152601d602052604090208290555b505b6001600160a01b03821615610cdf576000612425836125f8565b90508015611f50576001600160a01b0383166000908152601e6020526040812080548392906124559084906138e9565b9091555050506001600160a01b03919091166000908152601d602052604090205550565b6001600160a01b038216156124b2576001600160a01b03821660009081526016602052604081208054916124ac83613a4c565b91905055505b6001600160a01b03811615611176576001600160a01b03811660009081526016602052604081208054916124e583613901565b91905055505050565b6124f83382612ab4565b61256a5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b8d565b610cdf838383612ba7565b6000826125828584612d7f565b14949350505050565b610cdf83838360405180602001604052806000815250611f27565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806126036126b3565b6001600160a01b0384166000908152601d6020526040902054909150808211156126a95760006126338284613946565b6001600160a01b03861660009081526016602052604081205491925081612659886117b6565b6126639190613946565b601b54909150612673848361395d565b61267d919061395d565b601a5461268a858561395d565b612694919061395d565b61269e91906138e9565b979650505050505050565b5060009392505050565b601c54600090428115806126c657508181105b156126d45760009250505090565b62093a806126e28383613946565b6126ec9190613932565b6126f79060016138e9565b9250505090565b60006127098261172b565b905061271781600084612e2b565b61272260008361230a565b6001600160a01b038116600090815260036020526040812080546001929061274b908490613946565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b031614156128075760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b8d565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61287e3383612ab4565b6128f05760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b8d565b611f5084848484612ee3565b60608161293c57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612966578061295081613901565b915061295f9050600a83613932565b9150612940565b60008167ffffffffffffffff81111561298157612981613561565b6040519080825280601f01601f1916602001820160405280156129ab576020820181803683370190505b5090505b8415612a2e576129c0600183613946565b91506129cd600a86613a63565b6129d89060306138e9565b60f81b8183815181106129ed576129ed61397c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612a27600a86613932565b94506129af565b949350505050565b612a408383612f61565b612a4d60008484846130af565b610cdf5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610b8d565b6000818152600260205260408120546001600160a01b0316612b2d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b8d565b6000612b388361172b565b9050806001600160a01b0316846001600160a01b03161480612b735750836001600160a01b0316612b6884610b18565b6001600160a01b0316145b80612a2e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16612a2e565b826001600160a01b0316612bba8261172b565b6001600160a01b031614612c365760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610b8d565b6001600160a01b038216612cb15760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b8d565b612cbc838383612e2b565b612cc760008261230a565b6001600160a01b0383166000908152600360205260408120805460019290612cf0908490613946565b90915550506001600160a01b0382166000908152600360205260408120805460019290612d1e9084906138e9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600081815b8451811015612e23576000858281518110612da157612da161397c565b60200260200101519050808311612de3576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250612e10565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080612e1b81613901565b915050612d84565b509392505050565b6001600160a01b038316612e8657612e8181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612ea9565b816001600160a01b0316836001600160a01b031614612ea957612ea983826131f8565b6001600160a01b038216612ec057610cdf81613295565b826001600160a01b0316826001600160a01b031614610cdf57610cdf8282613344565b612eee848484612ba7565b612efa848484846130af565b611f505760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610b8d565b6001600160a01b038216612fb75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b8d565b6000818152600260205260409020546001600160a01b03161561301c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b8d565b61302860008383612e2b565b6001600160a01b03821660009081526003602052604081208054600192906130519084906138e9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156131ed57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906130f3903390899088908890600401613a77565b6020604051808303816000875af192505050801561312e575060408051601f3d908101601f1916820190925261312b91810190613ab3565b60015b6131d3573d80801561315c576040519150601f19603f3d011682016040523d82523d6000602084013e613161565b606091505b5080516131cb5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610b8d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612a2e565b506001949350505050565b60006001613205846117b6565b61320f9190613946565b600083815260076020526040902054909150808214613262576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906132a790600190613946565b600083815260096020526040812054600880549394509092849081106132cf576132cf61397c565b9060005260206000200154905080600883815481106132f0576132f061397c565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061332857613328613ad0565b6001900381819060005260206000200160009055905550505050565b600061334f836117b6565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b82805461339490613898565b90600052602060002090601f0160209004810192826133b657600085556133fc565b82601f106133cf57805160ff19168380011785556133fc565b828001600101855582156133fc579182015b828111156133fc5782518255916020019190600101906133e1565b5061340892915061340c565b5090565b5b80821115613408576000815560010161340d565b6001600160e01b0319811681146115f257600080fd5b60006020828403121561344957600080fd5b813561345481613421565b9392505050565b60005b8381101561347657818101518382015260200161345e565b83811115611f505750506000910152565b6000815180845261349f81602086016020860161345b565b601f01601f19169290920160200192915050565b6020815260006134546020830184613487565b6000602082840312156134d857600080fd5b5035919050565b80356001600160a01b03811681146134f657600080fd5b919050565b6000806040838503121561350e57600080fd5b613517836134df565b946020939093013593505050565b60008060006060848603121561353a57600080fd5b613543846134df565b9250613551602085016134df565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561359257613592613561565b604051601f8501601f19908116603f011681019082821181831017156135ba576135ba613561565b816040528093508581528686860111156135d357600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156135ff57600080fd5b813567ffffffffffffffff81111561361657600080fd5b8201601f8101841361362757600080fd5b612a2e84823560208401613577565b60008083601f84011261364857600080fd5b50813567ffffffffffffffff81111561366057600080fd5b6020830191508360208260051b850101111561367b57600080fd5b9250929050565b6000806020838503121561369557600080fd5b823567ffffffffffffffff8111156136ac57600080fd5b6136b885828601613636565b90969095509350505050565b6000602082840312156136d657600080fd5b613454826134df565b803580151581146134f657600080fd5b60006020828403121561370157600080fd5b613454826136df565b600081518084526020808501945080840160005b8381101561373a5781518752958201959082019060010161371e565b509495945050505050565b604081526000613758604083018561370a565b828103602084015261376a818561370a565b95945050505050565b60008060006040848603121561378857600080fd5b83359250602084013567ffffffffffffffff8111156137a657600080fd5b6137b286828701613636565b9497909650939450505050565b600080604083850312156137d257600080fd5b6137db836134df565b91506137e9602084016136df565b90509250929050565b6000806000806080858703121561380857600080fd5b613811856134df565b935061381f602086016134df565b925060408501359150606085013567ffffffffffffffff81111561384257600080fd5b8501601f8101871361385357600080fd5b61386287823560208401613577565b91505092959194509250565b6000806040838503121561388157600080fd5b61388a836134df565b91506137e9602084016134df565b600181811c908216806138ac57607f821691505b602082108114156138cd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156138fc576138fc6138d3565b500190565b6000600019821415613915576139156138d3565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826139415761394161391c565b500490565b600082821015613958576139586138d3565b500390565b6000816000190483118215151615613977576139776138d3565b500290565b634e487b7160e01b600052603260045260246000fd5b600081516139a481856020860161345b565b9290920192915050565b600080845481600182811c9150808316806139ca57607f831692505b60208084108214156139ea57634e487b7160e01b86526022600452602486fd5b8180156139fe5760018114613a0f57613a3c565b60ff19861689528489019650613a3c565b60008b81526020902060005b86811015613a345781548b820152908501908301613a1b565b505084890196505b50505050505061376a8185613992565b600081613a5b57613a5b6138d3565b506000190190565b600082613a7257613a7261391c565b500690565b60006001600160a01b03808716835280861660208401525083604083015260806060830152613aa96080830184613487565b9695505050505050565b600060208284031215613ac557600080fd5b815161345481613421565b634e487b7160e01b600052603160045260246000fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220321f4fa67a376dc548b935550ba5c7f3810edf3cdacfdb1e8f88c7e7d9cc873b64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
130b8e74bb99c9cf23d2e2e2aa375f98515c250651eaf4cbd2d449dbaa0436640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000007697066733a2f2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007697066733a2f2f00000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _merkleRoot (bytes32): 0x130b8e74bb99c9cf23d2e2e2aa375f98515c250651eaf4cbd2d449dbaa043664
Arg [1] : _oreClaim (address): 0x0000000000000000000000000000000000000000
Arg [2] : _initialContractURI (string): ipfs://
Arg [3] : _initialBaseTokenURI (string): ipfs://
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 130b8e74bb99c9cf23d2e2e2aa375f98515c250651eaf4cbd2d449dbaa043664
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 697066733a2f2f00000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [7] : 697066733a2f2f00000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
199:10406:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;989:222:5;;;;;;;;;;-1:-1:-1;989:222:5;;;;;:::i;:::-;;:::i;:::-;;;611:14:15;;604:22;586:41;;574:2;559:18;989:222:5;;;;;;;;2408:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3919:217::-;;;;;;;;;;-1:-1:-1;3919:217:4;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1760:55:15;;;1742:74;;1730:2;1715:18;3919:217:4;1596:226:15;3457:401:4;;;;;;;;;;-1:-1:-1;3457:401:4;;;;;:::i;:::-;;:::i;:::-;;497:37:2;;;;;;;;;;-1:-1:-1;497:37:2;;;;;;;;3080:360;;;;;;;;;;-1:-1:-1;3080:360:2;;;;;:::i;:::-;;:::i;1614:111:5:-;;;;;;;;;;-1:-1:-1;1701:10:5;:17;1614:111;;;2433:25:15;;;2421:2;2406:18;1614:111:5;2287:177:15;336:44:2;;;;;;;;;;;;377:3;336:44;;912:47;;;;;;;;;;-1:-1:-1;912:47:2;;;;;:::i;:::-;;;;;;;;;;;;;;9682:255;;;;;;;;;;-1:-1:-1;9682:255:2;;;;;:::i;:::-;;:::i;4648:813::-;;;:::i;307:25::-;;;;;;;;;;;;;;;;1290:253:5;;;;;;;;;;-1:-1:-1;1290:253:5;;;;;:::i;:::-;;:::i;2481:112:2:-;;;;;;;;;;-1:-1:-1;2481:112:2;;;;;:::i;:::-;;:::i;3444:1200::-;;;;;;:::i;:::-;;:::i;1946:97::-;;;;;;;;;;-1:-1:-1;1946:97:2;;;;;:::i;:::-;;:::i;10502:101::-;;;;;;;;;;;;;:::i;9941:263::-;;;;;;;;;;-1:-1:-1;9941:263:2;;;;;:::i;:::-;;:::i;1744:108::-;;;;;;;;;;-1:-1:-1;1744:108:2;;;;;:::i;:::-;;:::i;1797:230:5:-;;;;;;;;;;-1:-1:-1;1797:230:5;;;;;:::i;:::-;;:::i;963:31:2:-;;;;;;;;;;;;;;;;2111:235:4;;;;;;;;;;-1:-1:-1;2111:235:4;;;;;:::i;:::-;;:::i;384:36:2:-;;;;;;;;;;;;;;;;538:40;;;;;;;;;;-1:-1:-1;538:40:2;;;;;;;;;;;1849:205:4;;;;;;;;;;-1:-1:-1;1849:205:4;;;;;:::i;:::-;;:::i;1661:101:12:-;;;;;;;;;;;;;:::i;998:29:2:-;;;;;;;;;;;;;;;;1143:39;;;;;;;;;;;;;;;;1186:61;;;;;;;;;;-1:-1:-1;1186:61:2;;;;;:::i;:::-;;;;;;;;;;;;;;1642:98;;;;;;;;;;-1:-1:-1;1642:98:2;;;;;:::i;:::-;;:::i;2149:103::-;;;;;;;;;;-1:-1:-1;2149:103:2;;;;;:::i;:::-;;:::i;722:31::-;;;;;;;;;;-1:-1:-1;722:31:2;;;;-1:-1:-1;;;;;722:31:2;;;1029:85:12;;;;;;;;;;-1:-1:-1;1101:6:12;;-1:-1:-1;;;;;1101:6:12;1029:85;;6537:731:2;;;;;;;;;;-1:-1:-1;6537:731:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2369:108::-;;;;;;;;;;-1:-1:-1;2369:108:2;;;;;:::i;:::-;;:::i;9238:440::-;;;;;;;;;;-1:-1:-1;9238:440:2;;;;;:::i;:::-;;:::i;2570:102:4:-;;;;;;;;;;;;;:::i;5465:969:2:-;;;;;;;;;;-1:-1:-1;5465:969:2;;;;;:::i;:::-;;:::i;582:51::-;;;;;;;;;;-1:-1:-1;582:51:2;;;;;:::i;:::-;;;;;;;;;;;;;;4203:153:4;;;;;;;;;;-1:-1:-1;4203:153:4;;;;;:::i;:::-;;:::i;2256:109:2:-;;;;;;;;;;-1:-1:-1;2256:109:2;;;;;:::i;:::-;;:::i;10208:290::-;;;;;;;;;;-1:-1:-1;10208:290:2;;;;;:::i;:::-;;:::i;424:35::-;;;;;;;;;;;;;;;;688:30;;;;;;;;;;-1:-1:-1;688:30:2;;;;-1:-1:-1;;;;;688:30:2;;;2597:479;;;;;;;;;;-1:-1:-1;2597:479:2;;;;;:::i;:::-;;:::i;859:49::-;;;;;;;;;;-1:-1:-1;859:49:2;;;;;:::i;:::-;;;;;;;;;;;;;;1068:31;;;;;;;;;;;;;;;;463:30;;;;;;;;;;;;;;;;786:26;;;;;;;;;;;;;:::i;9110:124::-;;;;;;;;;;-1:-1:-1;9110:124:2;;;;;:::i;:::-;;:::i;757:25::-;;;;;;;;;;;;;:::i;4422:162:4:-;;;;;;;;;;-1:-1:-1;4422:162:4;;;;;:::i;:::-;-1:-1:-1;;;;;4542:25:4;;;4519:4;4542:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4422:162;2047:98:2;;;;;;;;;;-1:-1:-1;2047:98:2;;;;;:::i;:::-;;:::i;1911:198:12:-;;;;;;;;;;-1:-1:-1;1911:198:12;;;;;:::i;:::-;;:::i;1103:36:2:-;;;;;;;;;;;;;;;;1856:86;;;;;;;;;;-1:-1:-1;1856:86:2;;;;;:::i;:::-;;:::i;989:222:5:-;1091:4;-1:-1:-1;;;;;;1114:50:5;;1129:35;1114:50;;:90;;;1168:36;1192:11;1168:23;:36::i;:::-;1107:97;989:222;-1:-1:-1;;989:222:5:o;2408:98:4:-;2462:13;2494:5;2487:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2408:98;:::o;3919:217::-;3995:7;7167:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7167:16:4;4014:73;;;;-1:-1:-1;;;4014:73:4;;9066:2:15;4014:73:4;;;9048:21:15;9105:2;9085:18;;;9078:30;9144:34;9124:18;;;9117:62;-1:-1:-1;;;9195:18:15;;;9188:42;9247:19;;4014:73:4;;;;;;;;;-1:-1:-1;4105:24:4;;;;:15;:24;;;;;;-1:-1:-1;;;;;4105:24:4;;3919:217::o;3457:401::-;3537:13;3553:23;3568:7;3553:14;:23::i;:::-;3537:39;;3600:5;-1:-1:-1;;;;;3594:11:4;:2;-1:-1:-1;;;;;3594:11:4;;;3586:57;;;;-1:-1:-1;;;3586:57:4;;9479:2:15;3586:57:4;;;9461:21:15;9518:2;9498:18;;;9491:30;9557:34;9537:18;;;9530:62;9628:3;9608:18;;;9601:31;9649:19;;3586:57:4;9277:397:15;3586:57:4;719:10:1;-1:-1:-1;;;;;3675:21:4;;;;:62;;-1:-1:-1;3700:37:4;3717:5;719:10:1;4422:162:4;:::i;3700:37::-;3654:165;;;;-1:-1:-1;;;3654:165:4;;9881:2:15;3654:165:4;;;9863:21:15;9920:2;9900:18;;;9893:30;9959:34;9939:18;;;9932:62;10030:26;10010:18;;;10003:54;10074:19;;3654:165:4;9679:420:15;3654:165:4;3830:21;3839:2;3843:7;3830:8;:21::i;:::-;3527:331;3457:401;;:::o;3080:360:2:-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;3166:16:2::1;::::0;377:3:::1;3196:22;3212:6:::0;3166:16;3196:22:::1;:::i;:::-;:40;;3188:71;;;::::0;-1:-1:-1;;;3188:71:2;;10989:2:15;3188:71:2::1;::::0;::::1;10971:21:15::0;11028:2;11008:18;;;11001:30;11067:20;11047:18;;;11040:48;11105:18;;3188:71:2::1;10787:342:15::0;3188:71:2::1;3271:9;3266:96;3290:6;3286:1;:10;3266:96;;;3311:44;3321:10;3333:17;3349:1:::0;3333:13;:17:::1;:::i;:::-;:21;::::0;3353:1:::1;3333:21;:::i;:::-;3311:9;:44::i;:::-;3298:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3266:96;;;-1:-1:-1::0;3382:10:2::1;3368:25;::::0;;;:13:::1;:25;::::0;;;;:35;;3397:6;;3368:25;:35:::1;::::0;3397:6;;3368:35:::1;:::i;:::-;;;;;;;;3429:6;3409:16;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;3080:360:2:o;9682:255::-;9772:29;9790:5;9797:3;9772:17;:29::i;:::-;377:3;9811:8;:26;9807:78;;9847:31;9867:5;9874:3;9847:19;:31::i;:::-;9891:41;9911:5;9918:3;9923:8;9891:19;:41::i;4648:813::-;1744:1:13;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:13;;11476:2:15;2317:63:13;;;11458:21:15;11515:2;11495:18;;;11488:30;11554:33;11534:18;;;11527:61;11605:18;;2317:63:13;11274:355:15;2317:63:13;1744:1;2455:7;:18;4730:16:2::1;::::0;4768:9:::1;::::0;4792:17:::1;::::0;::::1;;4784:51;;;::::0;-1:-1:-1;;;4784:51:2;;11836:2:15;4784:51:2::1;::::0;::::1;11818:21:15::0;11875:2;11855:18;;;11848:30;11914:23;11894:18;;;11887:51;11955:18;;4784:51:2::1;11634:345:15::0;4784:51:2::1;377:3;4849:13;:30;4841:52;;;::::0;-1:-1:-1;;;4841:52:2;;12186:2:15;4841:52:2::1;::::0;::::1;12168:21:15::0;12225:1;12205:18;;;12198:29;-1:-1:-1;;;12243:18:15;;;12236:39;12292:18;;4841:52:2::1;11984:332:15::0;4841:52:2::1;4920:5;4907:9;:18;;4899:47;;;::::0;-1:-1:-1;;;4899:47:2;;12523:2:15;4899:47:2::1;::::0;::::1;12505:21:15::0;12562:2;12542:18;;;12535:30;12601:18;12581;;;12574:46;12637:18;;4899:47:2::1;12321:340:15::0;4899:47:2::1;4953:13;4969:17;4981:5:::0;4969:9:::1;:17;:::i;:::-;4953:33:::0;-1:-1:-1;4992:17:2::1;5012:30;5029:13:::0;377:3:::1;5012:30;:::i;:::-;4992:50;;5065:15;;5057:5;:23;:49;;5101:5;5057:49;;;5083:15;;5057:49;5048:59;;5130:9;5122:5;:17;:37;;5154:5;5122:37;;;5142:9;5122:37;5113:47;;5172:9;5167:95;5191:5;5187:1;:9;5167:95;;;5211:44;5221:10;5233:17;5249:1:::0;5233:13;:17:::1;:::i;5211:44::-;5198:3:::0;::::1;::::0;::::1;:::i;:::-;;;;5167:95;;;-1:-1:-1::0;5282:10:2::1;5268:25;::::0;;;:13:::1;:25;::::0;;;;:34;;5297:5;;5268:25;:34:::1;::::0;5297:5;;5268:34:::1;:::i;:::-;;;;;;;;5328:5;5308:16;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;5340:14:2::1;::::0;-1:-1:-1;5370:13:2::1;5378:5:::0;5370;:13:::1;:::i;:::-;5357:27;::::0;:9:::1;:27;:::i;:::-;5340:44:::0;-1:-1:-1;5394:10:2;;5390:67:::1;;5414:36;::::0;5422:10:::1;::::0;5414:36;::::1;;;::::0;5443:6;;5414:36:::1;::::0;;;5443:6;5422:10;5414:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;5390:67;-1:-1:-1::0;;1701:1:13;2628:7;:22;-1:-1:-1;;;4648:813:2:o;1290:253:5:-;1387:7;1422:23;1439:5;1422:16;:23::i;:::-;1414:5;:31;1406:87;;;;-1:-1:-1;;;1406:87:5;;13485:2:15;1406:87:5;;;13467:21:15;13524:2;13504:18;;;13497:30;13563:34;13543:18;;;13536:62;13634:13;13614:18;;;13607:41;13665:19;;1406:87:5;13283:407:15;1406:87:5;-1:-1:-1;;;;;;1510:19:5;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;1290:253::o;2481:112:2:-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;2560:28:2;;::::1;::::0;:12:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;:::-;;2481:112:::0;:::o;3444:1200::-;1744:1:13;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:13;;11476:2:15;2317:63:13;;;11458:21:15;11515:2;11495:18;;;11488:30;11554:33;11534:18;;;11527:61;11605:18;;2317:63:13;11274:355:15;2317:63:13;1744:1;2455:7;:18;3561:28:2::1;::::0;;-1:-1:-1;;3578:10:2::1;13844:2:15::0;13840:15;13836:53;3561:28:2::1;::::0;;::::1;13824:66:15::0;;;;3561:28:2;;;;;;;;;13906:12:15;;;;3561:28:2;;;3551:39;;;::::1;::::0;3620:16:::1;::::0;3658:9:::1;::::0;3682:20:::1;::::0;::::1;::::0;::::1;;;3674:57;;;::::0;-1:-1:-1;;;3674:57:2;;14131:2:15;3674:57:2::1;::::0;::::1;14113:21:15::0;14170:2;14150:18;;;14143:30;14209:26;14189:18;;;14182:54;14253:18;;3674:57:2::1;13929:348:15::0;3674:57:2::1;377:3;3745:13;:30;3737:52;;;::::0;-1:-1:-1;;;3737:52:2;;12186:2:15;3737:52:2::1;::::0;::::1;12168:21:15::0;12225:1;12205:18;;;12198:29;-1:-1:-1;;;12243:18:15;;;12236:39;12292:18;;3737:52:2::1;11984:332:15::0;3737:52:2::1;3803:50;3822:12;;3803:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;3836:10:2::1;::::0;;-1:-1:-1;3848:4:2;;-1:-1:-1;3803:18:2::1;:50::i;:::-;3795:78;;;::::0;-1:-1:-1;;;3795:78:2;;14484:2:15;3795:78:2::1;::::0;::::1;14466:21:15::0;14523:2;14503:18;;;14496:30;14562:17;14542:18;;;14535:45;14597:18;;3795:78:2::1;14282:339:15::0;3795:78:2::1;3917:11;::::0;3903:10:::1;3887:27;::::0;;;:15:::1;:27;::::0;;;;;:41:::1;3879:82;;;::::0;-1:-1:-1;;;3879:82:2;;14828:2:15;3879:82:2::1;::::0;::::1;14810:21:15::0;14867:2;14847:18;;;14840:30;14906;14886:18;;;14879:58;14954:18;;3879:82:2::1;14626:352:15::0;3879:82:2::1;3988:5;3975:9;:18;;3967:47;;;::::0;-1:-1:-1;;;3967:47:2;;12523:2:15;3967:47:2::1;::::0;::::1;12505:21:15::0;12562:2;12542:18;;;12535:30;12601:18;12581;;;12574:46;12637:18;;3967:47:2::1;12321:340:15::0;3967:47:2::1;4021:13;4037:17;4049:5:::0;4037:9:::1;:17;:::i;:::-;4021:33:::0;-1:-1:-1;4060:17:2::1;4080:30;4097:13:::0;377:3:::1;4080:30;:::i;:::-;4168:10;4116:19;4152:27:::0;;;:15:::1;:27;::::0;;;;;4138:11:::1;::::0;4060:50;;-1:-1:-1;4116:19:2;;4138:41:::1;::::0;4152:27;4138:41:::1;:::i;:::-;4116:63;;4210:11;4198:9;:23;:49;;4238:9;4198:49;;;4224:11;4198:49;4185:63;;4271:9;4263:5;:17;:37;;4295:5;4263:37;;;4283:9;4263:37;4323:10;4307:27;::::0;;;:15:::1;:27;::::0;;;;:36;;4254:47;;-1:-1:-1;4254:47:2;;4307:27;;;:36:::1;::::0;4254:47;;4307:36:::1;:::i;:::-;::::0;;;-1:-1:-1;4355:9:2::1;::::0;-1:-1:-1;4350:95:2::1;4374:5;4370:1;:9;4350:95;;;4394:44;4404:10;4416:17;4432:1:::0;4416:13;:17:::1;:::i;4394:44::-;4381:3:::0;::::1;::::0;::::1;:::i;:::-;;;;4350:95;;;-1:-1:-1::0;4465:10:2::1;4451:25;::::0;;;:13:::1;:25;::::0;;;;:34;;4480:5;;4451:25;:34:::1;::::0;4480:5;;4451:34:::1;:::i;:::-;;;;;;;;4511:5;4491:16;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;4523:14:2::1;::::0;-1:-1:-1;4553:13:2::1;4561:5:::0;4553;:13:::1;:::i;:::-;4540:27;::::0;:9:::1;:27;:::i;:::-;4523:44:::0;-1:-1:-1;4577:10:2;;4573:67:::1;;4597:36;::::0;4605:10:::1;::::0;4597:36;::::1;;;::::0;4626:6;;4597:36:::1;::::0;;;4626:6;4605:10;4597:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;4573:67;-1:-1:-1::0;;1701:1:13;2628:7;:22;-1:-1:-1;;;;;;;3444:1200:2:o;1946:97::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;2018:11:2::1;:20:::0;1946:97::o;10502:101::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;10547:51:2::1;::::0;10555:10:::1;::::0;10576:21:::1;10547:51:::0;::::1;;;::::0;::::1;::::0;;;10576:21;10555:10;10547:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;10502:101::o:0;9941:263::-;10035:29;10053:5;10060:3;10035:17;:29::i;:::-;377:3;10074:8;:26;10070:78;;10110:31;10130:5;10137:3;10110:19;:31::i;:::-;10154:45;10178:5;10185:3;10190:8;10154:23;:45::i;1744:108::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;1818:16:2::1;:29:::0;;-1:-1:-1;;;;;;1818:29:2::1;-1:-1:-1::0;;;;;1818:29:2;;;::::1;::::0;;;::::1;::::0;;1744:108::o;1797:230:5:-;1872:7;1907:30;1701:10;:17;;1614:111;1907:30;1899:5;:38;1891:95;;;;-1:-1:-1;;;1891:95:5;;15185:2:15;1891:95:5;;;15167:21:15;15224:2;15204:18;;;15197:30;15263:34;15243:18;;;15236:62;15334:14;15314:18;;;15307:42;15366:19;;1891:95:5;14983:408:15;1891:95:5;2003:10;2014:5;2003:17;;;;;;;;:::i;:::-;;;;;;;;;1996:24;;1797:230;;;:::o;2111:235:4:-;2183:7;2218:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2218:16:4;2252:19;2244:73;;;;-1:-1:-1;;;2244:73:4;;15787:2:15;2244:73:4;;;15769:21:15;15826:2;15806:18;;;15799:30;15865:34;15845:18;;;15838:62;15936:11;15916:18;;;15909:39;15965:19;;2244:73:4;15585:405:15;1849:205:4;1921:7;-1:-1:-1;;;;;1948:19:4;;1940:74;;;;-1:-1:-1;;;1940:74:4;;16197:2:15;1940:74:4;;;16179:21:15;16236:2;16216:18;;;16209:30;16275:34;16255:18;;;16248:62;16346:12;16326:18;;;16319:40;16376:19;;1940:74:4;15995:406:15;1940:74:4;-1:-1:-1;;;;;;2031:16:4;;;;;:9;:16;;;;;;;1849:205::o;1661:101:12:-;1101:6;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;1642:98:2:-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;1711:10:2::1;:24:::0;1642:98::o;2149:103::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;2219:17:2::1;:28:::0;;-1:-1:-1;;2219:28:2::1;::::0;::::1;;::::0;;;::::1;::::0;;2149:103::o;6537:731::-;6601:16;6619;6643:18;6664:17;6674:6;6664:9;:17::i;:::-;-1:-1:-1;;;;;6708:21:2;;6687:18;6708:21;;;:13;:21;;;;;;6643:38;;-1:-1:-1;6760:23:2;6708:21;6643:38;6760:23;:::i;:::-;6735:48;;6789:25;6831:10;6817:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6817:25:2;;6789:53;;6848:29;6894:14;6880:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6880:29:2;;6848:61;;6916:16;6942:20;6977:9;6972:254;6996:10;6992:1;:14;6972:254;;;7021:15;7039:30;7059:6;7067:1;7039:19;:30::i;:::-;7021:48;;377:3;7081:7;:25;7077:143;;7141:7;7118:8;7127:10;;;;:::i;:::-;;;7118:20;;;;;;;;:::i;:::-;;;;;;:30;;;;;7077:143;;;7204:7;7173:12;7186:14;;;;:::i;:::-;;;7173:28;;;;;;;;:::i;:::-;;;;;;:38;;;;;7077:143;-1:-1:-1;7008:3:2;;;;:::i;:::-;;;;6972:254;;;-1:-1:-1;7240:8:2;;7250:12;;-1:-1:-1;6537:731:2;;-1:-1:-1;;;;;;;6537:731:2:o;2369:108::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;2446:26:2;;::::1;::::0;:11:::1;::::0;:26:::1;::::0;::::1;::::0;::::1;:::i;9238:440::-:0;9303:7;1744:1:13;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:13;;11476:2:15;2317:63:13;;;11458:21:15;11515:2;11495:18;;;11488:30;11554:33;11534:18;;;11527:61;11605:18;;2317:63:13;11274:355:15;2317:63:13;1744:1;2455:7;:18;9340:15:2::1;::::0;-1:-1:-1;;;;;9340:15:2::1;9326:10;:29;9318:56;;;::::0;-1:-1:-1;;;9318:56:2;;16608:2:15;9318:56:2::1;::::0;::::1;16590:21:15::0;16647:2;16627:18;;;16620:30;16686:16;16666:18;;;16659:44;16720:18;;9318:56:2::1;16406:338:15::0;9318:56:2::1;9380:16;9436:28;9457:6;9436:20;:28::i;:::-;-1:-1:-1::0;;;;;9399:34:2;::::1;;::::0;;;:26:::1;:34;::::0;;;;;:65:::1;::::0;;::::1;:::i;:::-;9380:84:::0;-1:-1:-1;9523:12:2;;9519:133:::1;;9581:18;:16;:18::i;:::-;-1:-1:-1::0;;;;;9545:33:2;::::1;;::::0;;;:25:::1;:33;::::0;;;;;;;:54;;;;9607:26:::1;:34:::0;;;;;:38;9519:133:::1;1701:1:13::0;2628:7;:22;9665:8:2;9238:440;-1:-1:-1;;9238:440:2:o;2570:102:4:-;2626:13;2658:7;2651:14;;;;;:::i;5465:969:2:-;1744:1:13;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:13;;11476:2:15;2317:63:13;;;11458:21:15;11515:2;11495:18;;;11488:30;11554:33;11534:18;;;11527:61;11605:18;;2317:63:13;11274:355:15;2317:63:13;1744:1;2455:7;:18;5569:16:2::1;::::0;-1:-1:-1;;;;;5569:16:2::1;5561:60;;;::::0;-1:-1:-1;;;5561:60:2;;16951:2:15;5561:60:2::1;::::0;::::1;16933:21:15::0;16990:2;16970:18;;;16963:30;17029:19;17009:18;;;17002:47;17066:18;;5561:60:2::1;16749:341:15::0;5561:60:2::1;5649:16;::::0;-1:-1:-1;;;;;5649:16:2::1;5635:10;:30;5627:57;;;::::0;-1:-1:-1;;;5627:57:2;;16608:2:15;5627:57:2::1;::::0;::::1;16590:21:15::0;16647:2;16627:18;;;16620:30;16686:16;16666:18;;;16659:44;16720:18;;5627:57:2::1;16406:338:15::0;5627:57:2::1;5718:1;5698:21:::0;::::1;5690:51;;;::::0;-1:-1:-1;;;5690:51:2;;17297:2:15;5690:51:2::1;::::0;::::1;17279:21:15::0;17336:2;17316:18;;;17309:30;17375:19;17355:18;;;17348:47;17412:18;;5690:51:2::1;17095:341:15::0;5690:51:2::1;5748:13;5764:21;5772:9;;5782:1;5772:12;;;;;;;:::i;:::-;;;;;;;5764:7;:21::i;:::-;5748:37;;5872:36;5890:5;5905:1;5872:17;:36::i;:::-;5920:9;5915:81;5935:20:::0;;::::1;5915:81;;;5970:19;5976:9;;5986:1;5976:12;;;;;;;:::i;:::-;;;;;;;5970:5;:19::i;:::-;5957:3:::0;::::1;::::0;::::1;:::i;:::-;;;;5915:81;;;-1:-1:-1::0;;;;;;6002:20:2;::::1;;::::0;;;:13:::1;:20;::::0;;;;:25;;6026:1:::1;::::0;6002:20;:25:::1;::::0;6026:1;;6002:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;6033:14:2::1;:16:::0;;;:14:::1;:16;::::0;::::1;:::i;:::-;;;;;;6130:23;6173:14;;377:3;6156:31;;;;:::i;:::-;6193:28;::::0;;;:11:::1;:28;::::0;;;;:41;;;6130:57;-1:-1:-1;6240:33:2::1;6250:5:::0;6130:57;6240:9:::1;:33::i;:::-;6414:15;::::0;-1:-1:-1;;;;;6377:33:2;::::1;;::::0;;;:26:::1;:33;::::0;;;;:52;;:33;;;:52:::1;::::0;6414:15;;6377:52:::1;:::i;:::-;::::0;;;-1:-1:-1;;1701:1:13;2628:7;:22;-1:-1:-1;;;;;5465:969:2:o;4203:153:4:-;4297:52;719:10:1;4330:8:4;4340;4297:18;:52::i;2256:109:2:-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;2329:20:2::1;:31:::0;;;::::1;;;;-1:-1:-1::0;;2329:31:2;;::::1;::::0;;;::::1;::::0;;2256:109::o;10208:290::-;10322:29;10340:5;10347:3;10322:17;:29::i;:::-;377:3;10361:8;:26;10357:78;;10397:31;10417:5;10424:3;10397:19;:31::i;:::-;10441:52;10465:5;10472:3;10477:8;10487:5;10441:23;:52::i;:::-;10208:290;;;;:::o;2597:479::-;7144:4:4;7167:16;;;:7;:16;;;;;;2663:13:2;;-1:-1:-1;;;;;7167:16:4;2684:61:2;;;;-1:-1:-1;;;2684:61:2;;17643:2:15;2684:61:2;;;17625:21:15;17682:2;17662:18;;;17655:30;17721:33;17701:18;;;17694:61;17772:18;;2684:61:2;17441:355:15;2684:61:2;377:3;2812:8;:25;2808:141;;;2909:21;;;;:11;:21;;;;;;2878:12;;2892:46;;2909:28;;2933:4;2909:28;:::i;:::-;2892:16;:46::i;:::-;2861:78;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2847:93;;2597:479;;;:::o;2808:141::-;3029:12;3043:26;3060:8;3043:16;:26::i;786:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9110:124::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;9192:24:2::1;:37:::0;9110:124::o;757:25::-;;;;;;;:::i;2047:98::-;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;2116:15:2::1;:24:::0;2047:98::o;1911:198:12:-;1101:6;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;-1:-1:-1;;;;;1999:22:12;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:12;;19555:2:15;1991:73:12::1;::::0;::::1;19537:21:15::0;19594:2;19574:18;;;19567:30;19633:34;19613:18;;;19606:62;19704:8;19684:18;;;19677:36;19730:19;;1991:73:12::1;19353:402:15::0;1991:73:12::1;2074:28;2093:8;2074:18;:28::i;1856:86:2:-:0;1101:6:12;;-1:-1:-1;;;;;1101:6:12;719:10:1;1241:23:12;1233:68;;;;-1:-1:-1;;;1233:68:12;;10306:2:15;1233:68:12;;;10288:21:15;;;10325:18;;;10318:30;-1:-1:-1;;;;;;;;;;;10364:18:15;;;10357:62;10436:18;;1233:68:12;10104:356:15;1233:68:12;1919:9:2::1;:18:::0;1856:86::o;1490:300:4:-;1592:4;-1:-1:-1;;;;;;1627:40:4;;1642:25;1627:40;;:104;;-1:-1:-1;;;;;;;1683:48:4;;1698:33;1683:48;1627:104;:156;;;-1:-1:-1;952:25:3;-1:-1:-1;;;;;;937:40:3;;;1747:36:4;829:155:3;10930:171:4;11004:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11004:29:4;-1:-1:-1;;;;;11004:29:4;;;;;;;;:24;;11057:23;11004:24;11057:14;:23::i;:::-;-1:-1:-1;;;;;11048:46:4;;;;;;;;;;;10930:171;;:::o;8036:108::-;8111:26;8121:2;8125:7;8111:26;;;;;;;;;;;;:9;:26::i;8330:571:2:-;8400:12;8415:18;:16;:18::i;:::-;8400:33;-1:-1:-1;;;;;;8444:19:2;;;8440:230;;8473:18;8494:27;8515:5;8494:20;:27::i;:::-;8473:48;-1:-1:-1;8533:14:2;;8529:135;;-1:-1:-1;;;;;8559:33:2;;;;;;:26;:33;;;;;:47;;8596:10;;8559:33;:47;;8596:10;;8559:47;:::i;:::-;;;;-1:-1:-1;;;;;;;8616:32:2;;;;;;:25;:32;;;;;:39;;;8529:135;8465:205;8440:230;-1:-1:-1;;;;;8679:17:2;;;8675:222;;8706:18;8727:25;8748:3;8727:20;:25::i;:::-;8706:46;-1:-1:-1;8764:14:2;;8760:131;;-1:-1:-1;;;;;8790:31:2;;;;;;:26;:31;;;;;:45;;8825:10;;8790:31;:45;;8825:10;;8790:45;:::i;:::-;;;;-1:-1:-1;;;;;;;;8845:30:2;;;;;;;;:25;:30;;;;;:37;-1:-1:-1;8330:571:2:o;8905:201::-;-1:-1:-1;;;;;8981:19:2;;;8977:62;;-1:-1:-1;;;;;9010:20:2;;;;;;:13;:20;;;;;:22;;;;;;:::i;:::-;;;;;;8977:62;-1:-1:-1;;;;;9048:17:2;;;9044:58;;-1:-1:-1;;;;;9075:18:2;;;;;;:13;:18;;;;;:20;;;;;;:::i;:::-;;;;;;8905:201;;:::o;4646:330:4:-;4835:41;719:10:1;4868:7:4;4835:18;:41::i;:::-;4827:103;;;;-1:-1:-1;;;4827:103:4;;20103:2:15;4827:103:4;;;20085:21:15;20142:2;20122:18;;;20115:30;20181:34;20161:18;;;20154:62;20252:19;20232:18;;;20225:47;20289:19;;4827:103:4;19901:413:15;4827:103:4;4941:28;4951:4;4957:2;4961:7;4941:9;:28::i;847:184:11:-;968:4;1020;991:25;1004:5;1011:4;991:12;:25::i;:::-;:33;;847:184;-1:-1:-1;;;;847:184:11:o;5042:179:4:-;5175:39;5192:4;5198:2;5202:7;5175:39;;;;;;;;;;;;:16;:39::i;2263:187:12:-;2355:6;;;-1:-1:-1;;;;;2371:17:12;;;-1:-1:-1;;;;;;2371:17:12;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;7714:612:2:-;7783:7;7798:12;7813:18;:16;:18::i;:::-;-1:-1:-1;;;;;7863:33:2;;7837:23;7863:33;;;:25;:33;;;;;;7798;;-1:-1:-1;7907:22:2;;;7903:404;;;8036:15;8055:22;8062:15;8055:4;:22;:::i;:::-;-1:-1:-1;;;;;8109:21:2;;8086:20;8109:21;;;:13;:21;;;;;;8036:42;;-1:-1:-1;8109:21:2;8165:17;8123:6;8165:9;:17::i;:::-;:32;;;;:::i;:::-;8284:15;;8138:59;;-1:-1:-1;8255:26:2;8274:7;8138:59;8255:26;:::i;:::-;:44;;;;:::i;:::-;8239:11;;8214:22;8229:7;8214:12;:22;:::i;:::-;:36;;;;:::i;:::-;8213:87;;;;:::i;:::-;8206:94;7714:612;-1:-1:-1;;;;;;;7714:612:2:o;7903:404::-;-1:-1:-1;8320:1:2;;7714:612;-1:-1:-1;;;7714:612:2:o;7272:438::-;7356:24;;7323:7;;7406:15;7514:12;;;:35;;;7542:7;7530:9;:19;7514:35;7510:64;;;7566:1;7559:8;;;;7272:438;:::o;7510:64::-;7694:7;7671:19;7683:7;7671:9;:19;:::i;:::-;7670:31;;;;:::i;:::-;:35;;7704:1;7670:35;:::i;:::-;7663:42;;;;7272:438;:::o;9587:348:4:-;9646:13;9662:23;9677:7;9662:14;:23::i;:::-;9646:39;;9696:48;9717:5;9732:1;9736:7;9696:20;:48::i;:::-;9782:29;9799:1;9803:7;9782:8;:29::i;:::-;-1:-1:-1;;;;;9822:16:4;;;;;;:9;:16;;;;;:21;;9842:1;;9822:16;:21;;9842:1;;9822:21;:::i;:::-;;;;-1:-1:-1;;9860:16:4;;;;:7;:16;;;;;;9853:23;;-1:-1:-1;;;;;;9853:23:4;;;9892:36;9868:7;;9860:16;-1:-1:-1;;;;;9892:36:4;;;;;9860:16;;9892:36;9636:299;9587:348;:::o;11236:307::-;11386:8;-1:-1:-1;;;;;11377:17:4;:5;-1:-1:-1;;;;;11377:17:4;;;11369:55;;;;-1:-1:-1;;;11369:55:4;;20521:2:15;11369:55:4;;;20503:21:15;20560:2;20540:18;;;20533:30;20599:27;20579:18;;;20572:55;20644:18;;11369:55:4;20319:349:15;11369:55:4;-1:-1:-1;;;;;11434:25:4;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;11434:46:4;;;;;;;;;;11495:41;;586::15;;;11495::4;;559:18:15;11495:41:4;;;;;;;11236:307;;;:::o;5287:320::-;5456:41;719:10:1;5489:7:4;5456:18;:41::i;:::-;5448:103;;;;-1:-1:-1;;;5448:103:4;;20103:2:15;5448:103:4;;;20085:21:15;20142:2;20122:18;;;20115:30;20181:34;20161:18;;;20154:62;20252:19;20232:18;;;20225:47;20289:19;;5448:103:4;19901:413:15;5448:103:4;5561:39;5575:4;5581:2;5585:7;5594:5;5561:13;:39::i;328:703:14:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:14;;;;;;;;;;;;;;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:14;;-1:-1:-1;773:2:14;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:14;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:14;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;972:11:14;981:2;972:11;;:::i;:::-;;;844:150;;;1017:6;328:703;-1:-1:-1;;;;328:703:14:o;8365:311:4:-;8490:18;8496:2;8500:7;8490:5;:18::i;:::-;8539:54;8570:1;8574:2;8578:7;8587:5;8539:22;:54::i;:::-;8518:151;;;;-1:-1:-1;;;8518:151:4;;20992:2:15;8518:151:4;;;20974:21:15;21031:2;21011:18;;;21004:30;21070:34;21050:18;;;21043:62;-1:-1:-1;;;21121:18:15;;;21114:48;21179:19;;8518:151:4;20790:414:15;7362:344:4;7455:4;7167:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7167:16:4;7471:73;;;;-1:-1:-1;;;7471:73:4;;21411:2:15;7471:73:4;;;21393:21:15;21450:2;21430:18;;;21423:30;21489:34;21469:18;;;21462:62;-1:-1:-1;;;21540:18:15;;;21533:42;21592:19;;7471:73:4;21209:408:15;7471:73:4;7554:13;7570:23;7585:7;7570:14;:23::i;:::-;7554:39;;7622:5;-1:-1:-1;;;;;7611:16:4;:7;-1:-1:-1;;;;;7611:16:4;;:51;;;;7655:7;-1:-1:-1;;;;;7631:31:4;:20;7643:7;7631:11;:20::i;:::-;-1:-1:-1;;;;;7631:31:4;;7611:51;:87;;;-1:-1:-1;;;;;;4542:25:4;;;4519:4;4542:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7666:32;4422:162;10259:560;10413:4;-1:-1:-1;;;;;10386:31:4;:23;10401:7;10386:14;:23::i;:::-;-1:-1:-1;;;;;10386:31:4;;10378:85;;;;-1:-1:-1;;;10378:85:4;;21824:2:15;10378:85:4;;;21806:21:15;21863:2;21843:18;;;21836:30;21902:34;21882:18;;;21875:62;21973:11;21953:18;;;21946:39;22002:19;;10378:85:4;21622:405:15;10378:85:4;-1:-1:-1;;;;;10481:16:4;;10473:65;;;;-1:-1:-1;;;10473:65:4;;22234:2:15;10473:65:4;;;22216:21:15;22273:2;22253:18;;;22246:30;22312:34;22292:18;;;22285:62;22383:6;22363:18;;;22356:34;22407:19;;10473:65:4;22032:400:15;10473:65:4;10549:39;10570:4;10576:2;10580:7;10549:20;:39::i;:::-;10650:29;10667:1;10671:7;10650:8;:29::i;:::-;-1:-1:-1;;;;;10690:15:4;;;;;;:9;:15;;;;;:20;;10709:1;;10690:15;:20;;10709:1;;10690:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10720:13:4;;;;;;:9;:13;;;;;:18;;10737:1;;10720:13;:18;;10737:1;;10720:18;:::i;:::-;;;;-1:-1:-1;;10748:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10748:21:4;-1:-1:-1;;;;;10748:21:4;;;;;;;;;10785:27;;10748:16;;10785:27;;;;;;;10259:560;;;:::o;1383:688:11:-;1466:7;1508:4;1466:7;1522:514;1546:5;:12;1542:1;:16;1522:514;;;1579:20;1602:5;1608:1;1602:8;;;;;;;;:::i;:::-;;;;;;;1579:31;;1644:12;1628;:28;1624:402;;1779:44;;;;;;22594:19:15;;;22629:12;;;22622:28;;;22666:12;;1779:44:11;;;;;;;;;;;;1769:55;;;;;;1754:70;;1624:402;;;1966:44;;;;;;22594:19:15;;;22629:12;;;22622:28;;;22666:12;;1966:44:11;;;;;;;;;;;;1956:55;;;;;;1941:70;;1624:402;-1:-1:-1;1560:3:11;;;;:::i;:::-;;;;1522:514;;;-1:-1:-1;2052:12:11;1383:688;-1:-1:-1;;;1383:688:11:o;2623:572:5:-;-1:-1:-1;;;;;2822:18:5;;2818:183;;2856:40;2888:7;4004:10;:17;;3977:24;;;;:15;:24;;;;;:44;;;4031:24;;;;;;;;;;;;3901:161;2856:40;2818:183;;;2925:2;-1:-1:-1;;;;;2917:10:5;:4;-1:-1:-1;;;;;2917:10:5;;2913:88;;2943:47;2976:4;2982:7;2943:32;:47::i;:::-;-1:-1:-1;;;;;3014:16:5;;3010:179;;3046:45;3083:7;3046:36;:45::i;3010:179::-;3118:4;-1:-1:-1;;;;;3112:10:5;:2;-1:-1:-1;;;;;3112:10:5;;3108:81;;3138:40;3166:2;3170:7;3138:27;:40::i;6469:307:4:-;6620:28;6630:4;6636:2;6640:7;6620:9;:28::i;:::-;6666:48;6689:4;6695:2;6699:7;6708:5;6666:22;:48::i;:::-;6658:111;;;;-1:-1:-1;;;6658:111:4;;20992:2:15;6658:111:4;;;20974:21:15;21031:2;21011:18;;;21004:30;21070:34;21050:18;;;21043:62;-1:-1:-1;;;21121:18:15;;;21114:48;21179:19;;6658:111:4;20790:414:15;8998:372:4;-1:-1:-1;;;;;9077:16:4;;9069:61;;;;-1:-1:-1;;;9069:61:4;;22891:2:15;9069:61:4;;;22873:21:15;;;22910:18;;;22903:30;22969:34;22949:18;;;22942:62;23021:18;;9069:61:4;22689:356:15;9069:61:4;7144:4;7167:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7167:16:4;:30;9140:58;;;;-1:-1:-1;;;9140:58:4;;23252:2:15;9140:58:4;;;23234:21:15;23291:2;23271:18;;;23264:30;23330;23310:18;;;23303:58;23378:18;;9140:58:4;23050:352:15;9140:58:4;9209:45;9238:1;9242:2;9246:7;9209:20;:45::i;:::-;-1:-1:-1;;;;;9265:13:4;;;;;;:9;:13;;;;;:18;;9282:1;;9265:13;:18;;9282:1;;9265:18;:::i;:::-;;;;-1:-1:-1;;9293:16:4;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9293:21:4;-1:-1:-1;;;;;9293:21:4;;;;;;;;9330:33;;9293:16;;;9330:33;;9293:16;;9330:33;8998:372;;:::o;12096:778::-;12246:4;-1:-1:-1;;;;;12266:13:4;;1087:20:0;1133:8;12262:606:4;;12301:72;;-1:-1:-1;;;12301:72:4;;-1:-1:-1;;;;;12301:36:4;;;;;:72;;719:10:1;;12352:4:4;;12358:7;;12367:5;;12301:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12301:72:4;;;;;;;;-1:-1:-1;;12301:72:4;;;;;;;;;;;;:::i;:::-;;;12297:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12540:13:4;;12536:266;;12582:60;;-1:-1:-1;;;12582:60:4;;20992:2:15;12582:60:4;;;20974:21:15;21031:2;21011:18;;;21004:30;21070:34;21050:18;;;21043:62;-1:-1:-1;;;21121:18:15;;;21114:48;21179:19;;12582:60:4;20790:414:15;12536:266:4;12754:6;12748:13;12739:6;12735:2;12731:15;12724:38;12297:519;-1:-1:-1;;;;;;12423:51:4;-1:-1:-1;;;12423:51:4;;-1:-1:-1;12416:58:4;;12262:606;-1:-1:-1;12853:4:4;12096:778;;;;;;:::o;4679:970:5:-;4941:22;4991:1;4966:22;4983:4;4966:16;:22::i;:::-;:26;;;;:::i;:::-;5002:18;5023:26;;;:17;:26;;;;;;4941:51;;-1:-1:-1;5153:28:5;;;5149:323;;-1:-1:-1;;;;;5219:18:5;;5197:19;5219:18;;;:12;:18;;;;;;;;:34;;;;;;;;;5268:30;;;;;;:44;;;5384:30;;:17;:30;;;;;:43;;;5149:323;-1:-1:-1;5565:26:5;;;;:17;:26;;;;;;;;5558:33;;;-1:-1:-1;;;;;5608:18:5;;;;;:12;:18;;;;;:34;;;;;;;5601:41;4679:970::o;5937:1061::-;6211:10;:17;6186:22;;6211:21;;6231:1;;6211:21;:::i;:::-;6242:18;6263:24;;;:15;:24;;;;;;6631:10;:26;;6186:46;;-1:-1:-1;6263:24:5;;6186:46;;6631:26;;;;;;:::i;:::-;;;;;;;;;6609:48;;6693:11;6668:10;6679;6668:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6772:28;;;:15;:28;;;;;;;:41;;;6941:24;;;;;6934:31;6975:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6008:990;;;5937:1061;:::o;3489:217::-;3573:14;3590:20;3607:2;3590:16;:20::i;:::-;-1:-1:-1;;;;;3620:16:5;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3664:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3489:217:5:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:177:15;-1:-1:-1;;;;;;92:5:15;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;:::-;430:5;196:245;-1:-1:-1;;;196:245:15:o;638:258::-;710:1;720:113;734:6;731:1;728:13;720:113;;;810:11;;;804:18;791:11;;;784:39;756:2;749:10;720:113;;;851:6;848:1;845:13;842:48;;;-1:-1:-1;;886:1:15;868:16;;861:27;638:258::o;901:269::-;954:3;992:5;986:12;1019:6;1014:3;1007:19;1035:63;1091:6;1084:4;1079:3;1075:14;1068:4;1061:5;1057:16;1035:63;:::i;:::-;1152:2;1131:15;-1:-1:-1;;1127:29:15;1118:39;;;;1159:4;1114:50;;901:269;-1:-1:-1;;901:269:15:o;1175:231::-;1324:2;1313:9;1306:21;1287:4;1344:56;1396:2;1385:9;1381:18;1373:6;1344:56;:::i;1411:180::-;1470:6;1523:2;1511:9;1502:7;1498:23;1494:32;1491:52;;;1539:1;1536;1529:12;1491:52;-1:-1:-1;1562:23:15;;1411:180;-1:-1:-1;1411:180:15:o;1827:196::-;1895:20;;-1:-1:-1;;;;;1944:54:15;;1934:65;;1924:93;;2013:1;2010;2003:12;1924:93;1827:196;;;:::o;2028:254::-;2096:6;2104;2157:2;2145:9;2136:7;2132:23;2128:32;2125:52;;;2173:1;2170;2163:12;2125:52;2196:29;2215:9;2196:29;:::i;:::-;2186:39;2272:2;2257:18;;;;2244:32;;-1:-1:-1;;;2028:254:15:o;2469:328::-;2546:6;2554;2562;2615:2;2603:9;2594:7;2590:23;2586:32;2583:52;;;2631:1;2628;2621:12;2583:52;2654:29;2673:9;2654:29;:::i;:::-;2644:39;;2702:38;2736:2;2725:9;2721:18;2702:38;:::i;:::-;2692:48;;2787:2;2776:9;2772:18;2759:32;2749:42;;2469:328;;;;;:::o;2984:184::-;-1:-1:-1;;;3033:1:15;3026:88;3133:4;3130:1;3123:15;3157:4;3154:1;3147:15;3173:632;3238:5;3268:18;3309:2;3301:6;3298:14;3295:40;;;3315:18;;:::i;:::-;3390:2;3384:9;3358:2;3444:15;;-1:-1:-1;;3440:24:15;;;3466:2;3436:33;3432:42;3420:55;;;3490:18;;;3510:22;;;3487:46;3484:72;;;3536:18;;:::i;:::-;3576:10;3572:2;3565:22;3605:6;3596:15;;3635:6;3627;3620:22;3675:3;3666:6;3661:3;3657:16;3654:25;3651:45;;;3692:1;3689;3682:12;3651:45;3742:6;3737:3;3730:4;3722:6;3718:17;3705:44;3797:1;3790:4;3781:6;3773;3769:19;3765:30;3758:41;;;;3173:632;;;;;:::o;3810:451::-;3879:6;3932:2;3920:9;3911:7;3907:23;3903:32;3900:52;;;3948:1;3945;3938:12;3900:52;3988:9;3975:23;4021:18;4013:6;4010:30;4007:50;;;4053:1;4050;4043:12;4007:50;4076:22;;4129:4;4121:13;;4117:27;-1:-1:-1;4107:55:15;;4158:1;4155;4148:12;4107:55;4181:74;4247:7;4242:2;4229:16;4224:2;4220;4216:11;4181:74;:::i;4266:367::-;4329:8;4339:6;4393:3;4386:4;4378:6;4374:17;4370:27;4360:55;;4411:1;4408;4401:12;4360:55;-1:-1:-1;4434:20:15;;4477:18;4466:30;;4463:50;;;4509:1;4506;4499:12;4463:50;4546:4;4538:6;4534:17;4522:29;;4606:3;4599:4;4589:6;4586:1;4582:14;4574:6;4570:27;4566:38;4563:47;4560:67;;;4623:1;4620;4613:12;4560:67;4266:367;;;;;:::o;4638:437::-;4724:6;4732;4785:2;4773:9;4764:7;4760:23;4756:32;4753:52;;;4801:1;4798;4791:12;4753:52;4841:9;4828:23;4874:18;4866:6;4863:30;4860:50;;;4906:1;4903;4896:12;4860:50;4945:70;5007:7;4998:6;4987:9;4983:22;4945:70;:::i;:::-;5034:8;;4919:96;;-1:-1:-1;4638:437:15;-1:-1:-1;;;;4638:437:15:o;5080:186::-;5139:6;5192:2;5180:9;5171:7;5167:23;5163:32;5160:52;;;5208:1;5205;5198:12;5160:52;5231:29;5250:9;5231:29;:::i;5456:160::-;5521:20;;5577:13;;5570:21;5560:32;;5550:60;;5606:1;5603;5596:12;5621:180;5677:6;5730:2;5718:9;5709:7;5705:23;5701:32;5698:52;;;5746:1;5743;5736:12;5698:52;5769:26;5785:9;5769:26;:::i;5806:435::-;5859:3;5897:5;5891:12;5924:6;5919:3;5912:19;5950:4;5979:2;5974:3;5970:12;5963:19;;6016:2;6009:5;6005:14;6037:1;6047:169;6061:6;6058:1;6055:13;6047:169;;;6122:13;;6110:26;;6156:12;;;;6191:15;;;;6083:1;6076:9;6047:169;;;-1:-1:-1;6232:3:15;;5806:435;-1:-1:-1;;;;;5806:435:15:o;6246:465::-;6503:2;6492:9;6485:21;6466:4;6529:56;6581:2;6570:9;6566:18;6558:6;6529:56;:::i;:::-;6633:9;6625:6;6621:22;6616:2;6605:9;6601:18;6594:50;6661:44;6698:6;6690;6661:44;:::i;:::-;6653:52;6246:465;-1:-1:-1;;;;;6246:465:15:o;6716:505::-;6811:6;6819;6827;6880:2;6868:9;6859:7;6855:23;6851:32;6848:52;;;6896:1;6893;6886:12;6848:52;6932:9;6919:23;6909:33;;6993:2;6982:9;6978:18;6965:32;7020:18;7012:6;7009:30;7006:50;;;7052:1;7049;7042:12;7006:50;7091:70;7153:7;7144:6;7133:9;7129:22;7091:70;:::i;:::-;6716:505;;7180:8;;-1:-1:-1;7065:96:15;;-1:-1:-1;;;;6716:505:15:o;7226:254::-;7291:6;7299;7352:2;7340:9;7331:7;7327:23;7323:32;7320:52;;;7368:1;7365;7358:12;7320:52;7391:29;7410:9;7391:29;:::i;:::-;7381:39;;7439:35;7470:2;7459:9;7455:18;7439:35;:::i;:::-;7429:45;;7226:254;;;;;:::o;7485:667::-;7580:6;7588;7596;7604;7657:3;7645:9;7636:7;7632:23;7628:33;7625:53;;;7674:1;7671;7664:12;7625:53;7697:29;7716:9;7697:29;:::i;:::-;7687:39;;7745:38;7779:2;7768:9;7764:18;7745:38;:::i;:::-;7735:48;;7830:2;7819:9;7815:18;7802:32;7792:42;;7885:2;7874:9;7870:18;7857:32;7912:18;7904:6;7901:30;7898:50;;;7944:1;7941;7934:12;7898:50;7967:22;;8020:4;8012:13;;8008:27;-1:-1:-1;7998:55:15;;8049:1;8046;8039:12;7998:55;8072:74;8138:7;8133:2;8120:16;8115:2;8111;8107:11;8072:74;:::i;:::-;8062:84;;;7485:667;;;;;;;:::o;8157:260::-;8225:6;8233;8286:2;8274:9;8265:7;8261:23;8257:32;8254:52;;;8302:1;8299;8292:12;8254:52;8325:29;8344:9;8325:29;:::i;:::-;8315:39;;8373:38;8407:2;8396:9;8392:18;8373:38;:::i;8422:437::-;8501:1;8497:12;;;;8544;;;8565:61;;8619:4;8611:6;8607:17;8597:27;;8565:61;8672:2;8664:6;8661:14;8641:18;8638:38;8635:218;;;-1:-1:-1;;;8706:1:15;8699:88;8810:4;8807:1;8800:15;8838:4;8835:1;8828:15;8635:218;;8422:437;;;:::o;10465:184::-;-1:-1:-1;;;10514:1:15;10507:88;10614:4;10611:1;10604:15;10638:4;10635:1;10628:15;10654:128;10694:3;10725:1;10721:6;10718:1;10715:13;10712:39;;;10731:18;;:::i;:::-;-1:-1:-1;10767:9:15;;10654:128::o;11134:135::-;11173:3;-1:-1:-1;;11194:17:15;;11191:43;;;11214:18;;:::i;:::-;-1:-1:-1;11261:1:15;11250:13;;11134:135::o;12666:184::-;-1:-1:-1;;;12715:1:15;12708:88;12815:4;12812:1;12805:15;12839:4;12836:1;12829:15;12855:120;12895:1;12921;12911:35;;12926:18;;:::i;:::-;-1:-1:-1;12960:9:15;;12855:120::o;12980:125::-;13020:4;13048:1;13045;13042:8;13039:34;;;13053:18;;:::i;:::-;-1:-1:-1;13090:9:15;;12980:125::o;13110:168::-;13150:7;13216:1;13212;13208:6;13204:14;13201:1;13198:21;13193:1;13186:9;13179:17;13175:45;13172:71;;;13223:18;;:::i;:::-;-1:-1:-1;13263:9:15;;13110:168::o;15396:184::-;-1:-1:-1;;;15445:1:15;15438:88;15545:4;15542:1;15535:15;15569:4;15566:1;15559:15;17927:185;17969:3;18007:5;18001:12;18022:52;18067:6;18062:3;18055:4;18048:5;18044:16;18022:52;:::i;:::-;18090:16;;;;;17927:185;-1:-1:-1;;17927:185:15:o;18117:1231::-;18293:3;18322:1;18355:6;18349:13;18385:3;18407:1;18435:9;18431:2;18427:18;18417:28;;18495:2;18484:9;18480:18;18517;18507:61;;18561:4;18553:6;18549:17;18539:27;;18507:61;18587:2;18635;18627:6;18624:14;18604:18;18601:38;18598:222;;;-1:-1:-1;;;18669:3:15;18662:90;18775:4;18772:1;18765:15;18805:4;18800:3;18793:17;18598:222;18836:18;18863:104;;;;18981:1;18976:320;;;;18829:467;;18863:104;-1:-1:-1;;18896:24:15;;18884:37;;18941:16;;;;-1:-1:-1;18863:104:15;;18976:320;17874:1;17867:14;;;17911:4;17898:18;;19071:1;19085:165;19099:6;19096:1;19093:13;19085:165;;;19177:14;;19164:11;;;19157:35;19220:16;;;;19114:10;;19085:165;;;19089:3;;19279:6;19274:3;19270:16;19263:23;;18829:467;;;;;;;19312:30;19338:3;19330:6;19312:30;:::i;19760:136::-;19799:3;19827:5;19817:39;;19836:18;;:::i;:::-;-1:-1:-1;;;19872:18:15;;19760:136::o;20673:112::-;20705:1;20731;20721:35;;20736:18;;:::i;:::-;-1:-1:-1;20770:9:15;;20673:112::o;23407:523::-;23601:4;-1:-1:-1;;;;;23711:2:15;23703:6;23699:15;23688:9;23681:34;23763:2;23755:6;23751:15;23746:2;23735:9;23731:18;23724:43;;23803:6;23798:2;23787:9;23783:18;23776:34;23846:3;23841:2;23830:9;23826:18;23819:31;23867:57;23919:3;23908:9;23904:19;23896:6;23867:57;:::i;:::-;23859:65;23407:523;-1:-1:-1;;;;;;23407:523:15:o;23935:249::-;24004:6;24057:2;24045:9;24036:7;24032:23;24028:32;24025:52;;;24073:1;24070;24063:12;24025:52;24105:9;24099:16;24124:30;24148:5;24124:30;:::i;24189:184::-;-1:-1:-1;;;24238:1:15;24231:88;24338:4;24335:1;24328:15;24362:4;24359:1;24352:15
Swarm Source
ipfs://321f4fa67a376dc548b935550ba5c7f3810edf3cdacfdb1e8f88c7e7d9cc873b
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.