Overview
TokenID
39
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Punk_Weapons
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity Multiple files format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "./ERC721.sol"; import "./Ownable.sol"; import "./ERC721Burnable.sol"; import "./ERC721URIStorage.sol"; import "./ERC721Enumerable.sol"; import "./Strings.sol"; contract Punk_Weapons is ERC721, ERC721Enumerable, Ownable, ERC721URIStorage { uint256 private _tokenIdCounter; uint256 public mintPrice = 150 ether; uint256 MAX_SUPPLY = 1000; uint256 MAX_PER_BUYER = 10; uint256 public totalMinted; string private tokenBaseURI; mapping( address => uint256) public mintedWallets; mapping (uint256 => string) private tokenURIs; bool public isPublicMintEnabled; event Minted(address indexed sender, uint256 indexed tokenId, uint256 quantity); event Withdrawn(address indexed owner, uint256 amount); constructor() ERC721 ("Punk_Weapons" , "PW") {} function isPublicMintEnable(bool isPublicMintEnabled_) external onlyOwner { isPublicMintEnabled = isPublicMintEnabled_; } function setPrice(uint256 newPrice) public onlyOwner { mintPrice = newPrice; } function setMAXPERBUYER(uint256 newMaxPerBuyer) public onlyOwner { MAX_PER_BUYER = newMaxPerBuyer; } function setMAXSUPPLY(uint256 newSupply) public onlyOwner { MAX_SUPPLY = newSupply; } function setBaseTokenUri (string calldata tokenBaseURI_) external onlyOwner { tokenBaseURI = tokenBaseURI_; } // Transfer specific token IDs to the contract owner function transferTokenToOwner(uint256[] memory tokenIds) public onlyOwner { require(!isPublicMintEnabled, "Public minting is already enabled"); for (uint256 i = 0; i < tokenIds.length; i++) { uint256 tokenId = tokenIds[i]; _safeMint(owner(), tokenId); totalMinted++; } } function mint(uint256 _quantity) public payable { // Checks require(isPublicMintEnabled, "Public minting is not enabled"); require(_tokenIdCounter + _quantity <= MAX_SUPPLY, "We are sold out"); require(msg.value >= mintPrice * _quantity, "Incorrect value sent"); require(mintedWallets[msg.sender] + _quantity <= MAX_PER_BUYER, "Max per buyer reached"); // Effects uint256 newMintedQuantity = mintedWallets[msg.sender] + _quantity; uint256 tokenId; // Reserve the new tokenIds before minting uint256[] memory reservedTokenIds = new uint256[](_quantity); uint256 reservedIndex = 0; for (uint256 i = 0; i < _quantity; ) { tokenId = _tokenIdCounter + 1; if (!_exists(tokenId)) { reservedTokenIds[reservedIndex] = tokenId; reservedIndex++; i++; } _tokenIdCounter++; } // Update mintedWallets and totalMinted before actual minting mintedWallets[msg.sender] = newMintedQuantity; totalMinted += _quantity; // Interactions for (uint256 i = 0; i < _quantity; i++) { tokenId = reservedTokenIds[i]; _safeMint(msg.sender, tokenId); _setTokenURI(tokenId, string(abi.encodePacked(tokenBaseURI, Strings.toString(tokenId), ".json"))); emit Minted(msg.sender, tokenId, _quantity); } } function withdraw() public onlyOwner { require(address(this).balance > 0, "Balance is 0"); uint256 amountToWithdraw = address(this).balance; (bool success, ) = payable(owner()).call{value: amountToWithdraw}(""); require(success, "Withdrawal failed"); emit Withdrawn(owner(), amountToWithdraw); } function _baseURI() internal view virtual override returns (string memory) { return tokenBaseURI; } function _requireMinted(uint256 tokenId) internal view { require(_exists(tokenId), "Token ID does not exist"); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); string memory tmp = string(abi.encodePacked(baseURI, Strings.toString(tokenId))); string memory tmp2 = string(abi.encodePacked(tmp, ".json")); return bytes(baseURI).length > 0 ? tmp2 : ""; } function _deleteTokenUri(uint256 tokenId) internal { delete tokenURIs[tokenId]; } function _burn(uint256 tokenId) internal virtual override(ERC721URIStorage, ERC721) { super._burn(tokenId); _deleteTokenUri(tokenId); } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override (ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.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 overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) 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); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Burnable.sol) pragma solidity ^0.8.0; import "./ERC721.sol"; import "./Context.sol"; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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.1 (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; import "../ERC721.sol"; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard as defined in the 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 * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * 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 pragma solidity ^0.8.0; import "./IERC165.sol"; import "./IERC721.sol"; /// @title EIP-721 Metadata Update Extension interface IERC4906 is IERC165, IERC721 { /// @dev This event emits when the metadata of a token is changed. /// So that the third-party platforms such as NFT market could /// timely update the images and related attributes of the NFT. event MetadataUpdate(uint256 _tokenId); /// @dev This event emits when the metadata of a range of tokens is changed. /// So that the third-party platforms such as NFT market could /// timely update the images and related attributes of the NFTs. event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.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`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must 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 Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.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); /** * @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.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"Minted","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isPublicMintEnabled_","type":"bool"}],"name":"isPublicMintEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedWallets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tokenBaseURI_","type":"string"}],"name":"setBaseTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxPerBuyer","type":"uint256"}],"name":"setMAXPERBUYER","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"setMAXSUPPLY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"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":"totalMinted","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":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"transferTokenToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052680821ab0d4414980000600d556103e8600e55600a600f553480156200002957600080fd5b506040518060400160405280600c81526020017f50756e6b5f576561706f6e7300000000000000000000000000000000000000008152506040518060400160405280600281526020017f50570000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000ae929190620001be565b508060019080519060200190620000c7929190620001be565b505050620000ea620000de620000f060201b60201c565b620000f860201b60201c565b620002d3565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001cc906200026e565b90600052602060002090601f016020900481019282620001f057600085556200023c565b82601f106200020b57805160ff19168380011785556200023c565b828001600101855582156200023c579182015b828111156200023b5782518255916020019190600101906200021e565b5b5090506200024b91906200024f565b5090565b5b808211156200026a57600081600090555060010162000250565b5090565b600060028204905060018216806200028757607f821691505b602082108114156200029e576200029d620002a4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614c8480620002e36000396000f3fe6080604052600436106101e35760003560e01c8063715018a611610102578063a2309ff811610095578063c59b24ed11610064578063c59b24ed146106e1578063c87b56dd1461070a578063e985e9c514610747578063f2fde38b14610784576101e3565b8063a2309ff814610627578063ada7c4ed14610652578063b88d4fde1461068f578063baec4426146106b8576101e3565b806395d89b41116100d157806395d89b411461058e578063a0059b26146105b9578063a0712d68146105e2578063a22cb465146105fe576101e3565b8063715018a6146104fa5780638da5cb5b1461051157806391b7f5ed1461053c57806395652cfa14610565576101e3565b80632f745c591161017a5780634f6ccce7116101495780634f6ccce7146104185780636352211e146104555780636817c76c1461049257806370a08231146104bd576101e3565b80632f745c591461035e5780633ccfd60b1461039b57806342842e0e146103b2578063438b6300146103db576101e3565b8063081812fc116101b6578063081812fc146102a4578063095ea7b3146102e157806318160ddd1461030a57806323b872dd14610335576101e3565b80630116bc2d146101e857806301df04ef1461021357806301ffc9a71461023c57806306fdde0314610279575b600080fd5b3480156101f457600080fd5b506101fd6107ad565b60405161020a9190613d37565b60405180910390f35b34801561021f57600080fd5b5061023a60048036038101906102359190613653565b6107c0565b005b34801561024857600080fd5b50610263600480360381019061025e91906135bc565b610846565b6040516102709190613d37565b60405180910390f35b34801561028557600080fd5b5061028e610858565b60405161029b9190613d52565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c69190613653565b6108ea565b6040516102d89190613cae565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190613516565b61096f565b005b34801561031657600080fd5b5061031f610a87565b60405161032c91906140b4565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190613410565b610a94565b005b34801561036a57600080fd5b5061038560048036038101906103809190613516565b610af4565b60405161039291906140b4565b60405180910390f35b3480156103a757600080fd5b506103b0610b99565b005b3480156103be57600080fd5b506103d960048036038101906103d49190613410565b610d69565b005b3480156103e757600080fd5b5061040260048036038101906103fd91906133ab565b610d89565b60405161040f9190613d15565b60405180910390f35b34801561042457600080fd5b5061043f600480360381019061043a9190613653565b610e83565b60405161044c91906140b4565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190613653565b610f1a565b6040516104899190613cae565b60405180910390f35b34801561049e57600080fd5b506104a7610fcc565b6040516104b491906140b4565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df91906133ab565b610fd2565b6040516104f191906140b4565b60405180910390f35b34801561050657600080fd5b5061050f61108a565b005b34801561051d57600080fd5b50610526611112565b6040516105339190613cae565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e9190613653565b61113c565b005b34801561057157600080fd5b5061058c6004803603810190610587919061360e565b6111c2565b005b34801561059a57600080fd5b506105a3611254565b6040516105b09190613d52565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190613552565b6112e6565b005b6105fc60048036038101906105f79190613653565b611444565b005b34801561060a57600080fd5b50610625600480360381019061062091906134da565b611885565b005b34801561063357600080fd5b5061063c61189b565b60405161064991906140b4565b60405180910390f35b34801561065e57600080fd5b50610679600480360381019061067491906133ab565b6118a1565b60405161068691906140b4565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b1919061345f565b6118b9565b005b3480156106c457600080fd5b506106df60048036038101906106da9190613653565b61191b565b005b3480156106ed57600080fd5b5061070860048036038101906107039190613593565b6119a1565b005b34801561071657600080fd5b50610731600480360381019061072c9190613653565b611a3a565b60405161073e9190613d52565b60405180910390f35b34801561075357600080fd5b5061076e600480360381019061076991906133d4565b611acd565b60405161077b9190613d37565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a691906133ab565b611b61565b005b601460009054906101000a900460ff1681565b6107c8611c59565b73ffffffffffffffffffffffffffffffffffffffff166107e6611112565b73ffffffffffffffffffffffffffffffffffffffff161461083c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083390613fd4565b60405180910390fd5b80600e8190555050565b600061085182611c61565b9050919050565b606060008054610867906143b8565b80601f0160208091040260200160405190810160405280929190818152602001828054610893906143b8565b80156108e05780601f106108b5576101008083540402835291602001916108e0565b820191906000526020600020905b8154815290600101906020018083116108c357829003601f168201915b5050505050905090565b60006108f582611cdb565b610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092b90613fb4565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097a82610f1a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e290613ff4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0a611c59565b73ffffffffffffffffffffffffffffffffffffffff161480610a395750610a3881610a33611c59565b611acd565b5b610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90613ef4565b60405180910390fd5b610a828383611d47565b505050565b6000600880549050905090565b610aa5610a9f611c59565b82611e00565b610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb90614014565b60405180910390fd5b610aef838383611ede565b505050565b6000610aff83610fd2565b8210610b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3790613db4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ba1611c59565b73ffffffffffffffffffffffffffffffffffffffff16610bbf611112565b73ffffffffffffffffffffffffffffffffffffffff1614610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c90613fd4565b60405180910390fd5b60004711610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90613f94565b60405180910390fd5b60004790506000610c67611112565b73ffffffffffffffffffffffffffffffffffffffff1682604051610c8a90613c99565b60006040518083038185875af1925050503d8060008114610cc7576040519150601f19603f3d011682016040523d82523d6000602084013e610ccc565b606091505b5050905080610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0790614094565b60405180910390fd5b610d18611112565b73ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610d5d91906140b4565b60405180910390a25050565b610d84838383604051806020016040528060008152506118b9565b505050565b60606000610d9683610fd2565b905060008167ffffffffffffffff811115610dda577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610e085781602001602082028036833780820191505090505b50905060005b82811015610e7857610e208582610af4565b828281518110610e59577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610e709061441b565b915050610e0e565b508092505050919050565b6000610e8d610a87565b8210610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec590614034565b60405180910390fd5b60088281548110610f08577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba90613f34565b60405180910390fd5b80915050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90613f14565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611092611c59565b73ffffffffffffffffffffffffffffffffffffffff166110b0611112565b73ffffffffffffffffffffffffffffffffffffffff1614611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90613fd4565b60405180910390fd5b6111106000612145565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611144611c59565b73ffffffffffffffffffffffffffffffffffffffff16611162611112565b73ffffffffffffffffffffffffffffffffffffffff16146111b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111af90613fd4565b60405180910390fd5b80600d8190555050565b6111ca611c59565b73ffffffffffffffffffffffffffffffffffffffff166111e8611112565b73ffffffffffffffffffffffffffffffffffffffff161461123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590613fd4565b60405180910390fd5b81816011919061124f9291906130d1565b505050565b606060018054611263906143b8565b80601f016020809104026020016040519081016040528092919081815260200182805461128f906143b8565b80156112dc5780601f106112b1576101008083540402835291602001916112dc565b820191906000526020600020905b8154815290600101906020018083116112bf57829003601f168201915b5050505050905090565b6112ee611c59565b73ffffffffffffffffffffffffffffffffffffffff1661130c611112565b73ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990613fd4565b60405180910390fd5b601460009054906101000a900460ff16156113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a990614054565b60405180910390fd5b60005b81518110156114405760008282815181106113f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905061141461140e611112565b8261220b565b601060008154809291906114279061441b565b91905055505080806114389061441b565b9150506113b5565b5050565b601460009054906101000a900460ff16611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90613d94565b60405180910390fd5b600e5481600c546114a491906141ed565b11156114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90613d74565b60405180910390fd5b80600d546114f39190614274565b341015611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c90613e94565b60405180910390fd5b600f5481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461158391906141ed565b11156115c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bb90614074565b60405180910390fd5b600081601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461161191906141ed565b90506000808367ffffffffffffffff811115611656577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156116845781602001602082028036833780820191505090505b5090506000805b85811015611731576001600c546116a291906141ed565b93506116ad84611cdb565b61171457838383815181106116eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505081806117029061441b565b92505080806117109061441b565b9150505b600c60008154809291906117279061441b565b919050555061168b565b5083601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550846010600082825461178891906141ed565b9250508190555060005b8581101561187d578281815181106117d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015193506117e7338561220b565b61181b8460116117f687612229565b604051602001611807929190613c6a565b6040516020818303038152906040526123d6565b833373ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff8860405161186291906140b4565b60405180910390a380806118759061441b565b915050611792565b505050505050565b611897611890611c59565b838361244a565b5050565b60105481565b60126020528060005260406000206000915090505481565b6118ca6118c4611c59565b83611e00565b611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190090614014565b60405180910390fd5b611915848484846125b7565b50505050565b611923611c59565b73ffffffffffffffffffffffffffffffffffffffff16611941611112565b73ffffffffffffffffffffffffffffffffffffffff1614611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e90613fd4565b60405180910390fd5b80600f8190555050565b6119a9611c59565b73ffffffffffffffffffffffffffffffffffffffff166119c7611112565b73ffffffffffffffffffffffffffffffffffffffff1614611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490613fd4565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6060611a4582612613565b6000611a4f61265e565b9050600081611a5d85612229565b604051602001611a6e929190613c24565b6040516020818303038152906040529050600081604051602001611a929190613c48565b60405160208183030381529060405290506000835111611ac15760405180602001604052806000815250611ac3565b805b9350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b69611c59565b73ffffffffffffffffffffffffffffffffffffffff16611b87611112565b73ffffffffffffffffffffffffffffffffffffffff1614611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd490613fd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490613df4565b60405180910390fd5b611c5681612145565b50565b600033905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cd45750611cd3826126f0565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dba83610f1a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e0b82611cdb565b611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4190613ed4565b60405180910390fd5b6000611e5583610f1a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e975750611e968185611acd565b5b80611ed557508373ffffffffffffffffffffffffffffffffffffffff16611ebd846108ea565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611efe82610f1a565b73ffffffffffffffffffffffffffffffffffffffff1614611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90613e14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb90613e54565b60405180910390fd5b611fcf8383836127d2565b611fda600082611d47565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461202a91906142ce565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461208191906141ed565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121408383836127e2565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122258282604051806020016040528060008152506127e7565b5050565b60606000821415612271576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123d1565b600082905060005b600082146122a357808061228c9061441b565b915050600a8261229c9190614243565b9150612279565b60008167ffffffffffffffff8111156122e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156123175781602001600182028036833780820191505090505b5090505b600085146123ca5760018261233091906142ce565b9150600a8561233f9190614464565b603061234b91906141ed565b60f81b818381518110612387577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123c39190614243565b945061231b565b8093505050505b919050565b6123df82611cdb565b61241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590613f54565b60405180910390fd5b80600b60008481526020019081526020016000209080519060200190612445929190613157565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b090613e74565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125aa9190613d37565b60405180910390a3505050565b6125c2848484611ede565b6125ce84848484612842565b61260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490613dd4565b60405180910390fd5b50505050565b61261c81611cdb565b61265b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265290613eb4565b60405180910390fd5b50565b60606011805461266d906143b8565b80601f0160208091040260200160405190810160405280929190818152602001828054612699906143b8565b80156126e65780601f106126bb576101008083540402835291602001916126e6565b820191906000526020600020905b8154815290600101906020018083116126c957829003601f168201915b5050505050905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127bb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127cb57506127ca826129d9565b5b9050919050565b6127dd838383612a43565b505050565b505050565b6127f18383612b57565b6127fe6000848484612842565b61283d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283490613dd4565b60405180910390fd5b505050565b60006128638473ffffffffffffffffffffffffffffffffffffffff16612d31565b156129cc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261288c611c59565b8786866040518563ffffffff1660e01b81526004016128ae9493929190613cc9565b602060405180830381600087803b1580156128c857600080fd5b505af19250505080156128f957506040513d601f19601f820116820180604052508101906128f691906135e5565b60015b61297c573d8060008114612929576040519150601f19603f3d011682016040523d82523d6000602084013e61292e565b606091505b50600081511415612974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296b90613dd4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129d1565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a4e838383612d54565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a9157612a8c81612d59565b612ad0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612acf57612ace8382612da2565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b1357612b0e81612f0f565b612b52565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b5157612b508282613052565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbe90613f74565b60405180910390fd5b612bd081611cdb565b15612c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0790613e34565b60405180910390fd5b612c1c600083836127d2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c6c91906141ed565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d2d600083836127e2565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612daf84610fd2565b612db991906142ce565b9050600060076000848152602001908152602001600020549050818114612e9e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f2391906142ce565b9050600060096000848152602001908152602001600020549050600060088381548110612f79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612fc1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613036577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061305d83610fd2565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546130dd906143b8565b90600052602060002090601f0160209004810192826130ff5760008555613146565b82601f1061311857803560ff1916838001178555613146565b82800160010185558215613146579182015b8281111561314557823582559160200191906001019061312a565b5b50905061315391906131dd565b5090565b828054613163906143b8565b90600052602060002090601f01602090048101928261318557600085556131cc565b82601f1061319e57805160ff19168380011785556131cc565b828001600101855582156131cc579182015b828111156131cb5782518255916020019190600101906131b0565b5b5090506131d991906131dd565b5090565b5b808211156131f65760008160009055506001016131de565b5090565b600061320d613208846140f4565b6140cf565b9050808382526020820190508285602086028201111561322c57600080fd5b60005b8581101561325c57816132428882613396565b84526020840193506020830192505060018101905061322f565b5050509392505050565b600061327961327484614120565b6140cf565b90508281526020810184848401111561329157600080fd5b61329c848285614376565b509392505050565b6000813590506132b381614bf2565b92915050565b600082601f8301126132ca57600080fd5b81356132da8482602086016131fa565b91505092915050565b6000813590506132f281614c09565b92915050565b60008135905061330781614c20565b92915050565b60008151905061331c81614c20565b92915050565b600082601f83011261333357600080fd5b8135613343848260208601613266565b91505092915050565b60008083601f84011261335e57600080fd5b8235905067ffffffffffffffff81111561337757600080fd5b60208301915083600182028301111561338f57600080fd5b9250929050565b6000813590506133a581614c37565b92915050565b6000602082840312156133bd57600080fd5b60006133cb848285016132a4565b91505092915050565b600080604083850312156133e757600080fd5b60006133f5858286016132a4565b9250506020613406858286016132a4565b9150509250929050565b60008060006060848603121561342557600080fd5b6000613433868287016132a4565b9350506020613444868287016132a4565b925050604061345586828701613396565b9150509250925092565b6000806000806080858703121561347557600080fd5b6000613483878288016132a4565b9450506020613494878288016132a4565b93505060406134a587828801613396565b925050606085013567ffffffffffffffff8111156134c257600080fd5b6134ce87828801613322565b91505092959194509250565b600080604083850312156134ed57600080fd5b60006134fb858286016132a4565b925050602061350c858286016132e3565b9150509250929050565b6000806040838503121561352957600080fd5b6000613537858286016132a4565b925050602061354885828601613396565b9150509250929050565b60006020828403121561356457600080fd5b600082013567ffffffffffffffff81111561357e57600080fd5b61358a848285016132b9565b91505092915050565b6000602082840312156135a557600080fd5b60006135b3848285016132e3565b91505092915050565b6000602082840312156135ce57600080fd5b60006135dc848285016132f8565b91505092915050565b6000602082840312156135f757600080fd5b60006136058482850161330d565b91505092915050565b6000806020838503121561362157600080fd5b600083013567ffffffffffffffff81111561363b57600080fd5b6136478582860161334c565b92509250509250929050565b60006020828403121561366557600080fd5b600061367384828501613396565b91505092915050565b60006136888383613c06565b60208301905092915050565b61369d81614302565b82525050565b60006136ae82614176565b6136b881856141a4565b93506136c383614151565b8060005b838110156136f45781516136db888261367c565b97506136e683614197565b9250506001810190506136c7565b5085935050505092915050565b61370a81614314565b82525050565b600061371b82614181565b61372581856141b5565b9350613735818560208601614385565b61373e81614551565b840191505092915050565b60006137548261418c565b61375e81856141d1565b935061376e818560208601614385565b61377781614551565b840191505092915050565b600061378d8261418c565b61379781856141e2565b93506137a7818560208601614385565b80840191505092915050565b600081546137c0816143b8565b6137ca81866141e2565b945060018216600081146137e557600181146137f657613829565b60ff19831686528186019350613829565b6137ff85614161565b60005b8381101561382157815481890152600182019150602081019050613802565b838801955050505b50505092915050565b600061383f600f836141d1565b915061384a82614562565b602082019050919050565b6000613862601d836141d1565b915061386d8261458b565b602082019050919050565b6000613885602b836141d1565b9150613890826145b4565b604082019050919050565b60006138a86032836141d1565b91506138b382614603565b604082019050919050565b60006138cb6026836141d1565b91506138d682614652565b604082019050919050565b60006138ee6025836141d1565b91506138f9826146a1565b604082019050919050565b6000613911601c836141d1565b915061391c826146f0565b602082019050919050565b60006139346024836141d1565b915061393f82614719565b604082019050919050565b60006139576019836141d1565b915061396282614768565b602082019050919050565b600061397a6014836141d1565b915061398582614791565b602082019050919050565b600061399d6017836141d1565b91506139a8826147ba565b602082019050919050565b60006139c0602c836141d1565b91506139cb826147e3565b604082019050919050565b60006139e36038836141d1565b91506139ee82614832565b604082019050919050565b6000613a06602a836141d1565b9150613a1182614881565b604082019050919050565b6000613a296029836141d1565b9150613a34826148d0565b604082019050919050565b6000613a4c602e836141d1565b9150613a578261491f565b604082019050919050565b6000613a6f6020836141d1565b9150613a7a8261496e565b602082019050919050565b6000613a92600c836141d1565b9150613a9d82614997565b602082019050919050565b6000613ab5602c836141d1565b9150613ac0826149c0565b604082019050919050565b6000613ad86005836141e2565b9150613ae382614a0f565b600582019050919050565b6000613afb6020836141d1565b9150613b0682614a38565b602082019050919050565b6000613b1e6021836141d1565b9150613b2982614a61565b604082019050919050565b6000613b416000836141c6565b9150613b4c82614ab0565b600082019050919050565b6000613b646031836141d1565b9150613b6f82614ab3565b604082019050919050565b6000613b87602c836141d1565b9150613b9282614b02565b604082019050919050565b6000613baa6021836141d1565b9150613bb582614b51565b604082019050919050565b6000613bcd6015836141d1565b9150613bd882614ba0565b602082019050919050565b6000613bf06011836141d1565b9150613bfb82614bc9565b602082019050919050565b613c0f8161436c565b82525050565b613c1e8161436c565b82525050565b6000613c308285613782565b9150613c3c8284613782565b91508190509392505050565b6000613c548284613782565b9150613c5f82613acb565b915081905092915050565b6000613c7682856137b3565b9150613c828284613782565b9150613c8d82613acb565b91508190509392505050565b6000613ca482613b34565b9150819050919050565b6000602082019050613cc36000830184613694565b92915050565b6000608082019050613cde6000830187613694565b613ceb6020830186613694565b613cf86040830185613c15565b8181036060830152613d0a8184613710565b905095945050505050565b60006020820190508181036000830152613d2f81846136a3565b905092915050565b6000602082019050613d4c6000830184613701565b92915050565b60006020820190508181036000830152613d6c8184613749565b905092915050565b60006020820190508181036000830152613d8d81613832565b9050919050565b60006020820190508181036000830152613dad81613855565b9050919050565b60006020820190508181036000830152613dcd81613878565b9050919050565b60006020820190508181036000830152613ded8161389b565b9050919050565b60006020820190508181036000830152613e0d816138be565b9050919050565b60006020820190508181036000830152613e2d816138e1565b9050919050565b60006020820190508181036000830152613e4d81613904565b9050919050565b60006020820190508181036000830152613e6d81613927565b9050919050565b60006020820190508181036000830152613e8d8161394a565b9050919050565b60006020820190508181036000830152613ead8161396d565b9050919050565b60006020820190508181036000830152613ecd81613990565b9050919050565b60006020820190508181036000830152613eed816139b3565b9050919050565b60006020820190508181036000830152613f0d816139d6565b9050919050565b60006020820190508181036000830152613f2d816139f9565b9050919050565b60006020820190508181036000830152613f4d81613a1c565b9050919050565b60006020820190508181036000830152613f6d81613a3f565b9050919050565b60006020820190508181036000830152613f8d81613a62565b9050919050565b60006020820190508181036000830152613fad81613a85565b9050919050565b60006020820190508181036000830152613fcd81613aa8565b9050919050565b60006020820190508181036000830152613fed81613aee565b9050919050565b6000602082019050818103600083015261400d81613b11565b9050919050565b6000602082019050818103600083015261402d81613b57565b9050919050565b6000602082019050818103600083015261404d81613b7a565b9050919050565b6000602082019050818103600083015261406d81613b9d565b9050919050565b6000602082019050818103600083015261408d81613bc0565b9050919050565b600060208201905081810360008301526140ad81613be3565b9050919050565b60006020820190506140c96000830184613c15565b92915050565b60006140d96140ea565b90506140e582826143ea565b919050565b6000604051905090565b600067ffffffffffffffff82111561410f5761410e614522565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561413b5761413a614522565b5b61414482614551565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006141f88261436c565b91506142038361436c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561423857614237614495565b5b828201905092915050565b600061424e8261436c565b91506142598361436c565b925082614269576142686144c4565b5b828204905092915050565b600061427f8261436c565b915061428a8361436c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142c3576142c2614495565b5b828202905092915050565b60006142d98261436c565b91506142e48361436c565b9250828210156142f7576142f6614495565b5b828203905092915050565b600061430d8261434c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143a3578082015181840152602081019050614388565b838111156143b2576000848401525b50505050565b600060028204905060018216806143d057607f821691505b602082108114156143e4576143e36144f3565b5b50919050565b6143f382614551565b810181811067ffffffffffffffff8211171561441257614411614522565b5b80604052505050565b60006144268261436c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561445957614458614495565b5b600182019050919050565b600061446f8261436c565b915061447a8361436c565b92508261448a576144896144c4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f57652061726520736f6c64206f75740000000000000000000000000000000000600082015250565b7f5075626c6963206d696e74696e67206973206e6f7420656e61626c6564000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f496e636f72726563742076616c75652073656e74000000000000000000000000600082015250565b7f546f6b656e20494420646f6573206e6f74206578697374000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f42616c616e636520697320300000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74696e6720697320616c726561647920656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220627579657220726561636865640000000000000000000000600082015250565b7f5769746864726177616c206661696c6564000000000000000000000000000000600082015250565b614bfb81614302565b8114614c0657600080fd5b50565b614c1281614314565b8114614c1d57600080fd5b50565b614c2981614320565b8114614c3457600080fd5b50565b614c408161436c565b8114614c4b57600080fd5b5056fea26469706673582212203db5705606b6616aa4ce01cea7136e5476eaa35fc61536e6c2dba679bfbe7f0f64736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101e35760003560e01c8063715018a611610102578063a2309ff811610095578063c59b24ed11610064578063c59b24ed146106e1578063c87b56dd1461070a578063e985e9c514610747578063f2fde38b14610784576101e3565b8063a2309ff814610627578063ada7c4ed14610652578063b88d4fde1461068f578063baec4426146106b8576101e3565b806395d89b41116100d157806395d89b411461058e578063a0059b26146105b9578063a0712d68146105e2578063a22cb465146105fe576101e3565b8063715018a6146104fa5780638da5cb5b1461051157806391b7f5ed1461053c57806395652cfa14610565576101e3565b80632f745c591161017a5780634f6ccce7116101495780634f6ccce7146104185780636352211e146104555780636817c76c1461049257806370a08231146104bd576101e3565b80632f745c591461035e5780633ccfd60b1461039b57806342842e0e146103b2578063438b6300146103db576101e3565b8063081812fc116101b6578063081812fc146102a4578063095ea7b3146102e157806318160ddd1461030a57806323b872dd14610335576101e3565b80630116bc2d146101e857806301df04ef1461021357806301ffc9a71461023c57806306fdde0314610279575b600080fd5b3480156101f457600080fd5b506101fd6107ad565b60405161020a9190613d37565b60405180910390f35b34801561021f57600080fd5b5061023a60048036038101906102359190613653565b6107c0565b005b34801561024857600080fd5b50610263600480360381019061025e91906135bc565b610846565b6040516102709190613d37565b60405180910390f35b34801561028557600080fd5b5061028e610858565b60405161029b9190613d52565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c69190613653565b6108ea565b6040516102d89190613cae565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190613516565b61096f565b005b34801561031657600080fd5b5061031f610a87565b60405161032c91906140b4565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190613410565b610a94565b005b34801561036a57600080fd5b5061038560048036038101906103809190613516565b610af4565b60405161039291906140b4565b60405180910390f35b3480156103a757600080fd5b506103b0610b99565b005b3480156103be57600080fd5b506103d960048036038101906103d49190613410565b610d69565b005b3480156103e757600080fd5b5061040260048036038101906103fd91906133ab565b610d89565b60405161040f9190613d15565b60405180910390f35b34801561042457600080fd5b5061043f600480360381019061043a9190613653565b610e83565b60405161044c91906140b4565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190613653565b610f1a565b6040516104899190613cae565b60405180910390f35b34801561049e57600080fd5b506104a7610fcc565b6040516104b491906140b4565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df91906133ab565b610fd2565b6040516104f191906140b4565b60405180910390f35b34801561050657600080fd5b5061050f61108a565b005b34801561051d57600080fd5b50610526611112565b6040516105339190613cae565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e9190613653565b61113c565b005b34801561057157600080fd5b5061058c6004803603810190610587919061360e565b6111c2565b005b34801561059a57600080fd5b506105a3611254565b6040516105b09190613d52565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190613552565b6112e6565b005b6105fc60048036038101906105f79190613653565b611444565b005b34801561060a57600080fd5b50610625600480360381019061062091906134da565b611885565b005b34801561063357600080fd5b5061063c61189b565b60405161064991906140b4565b60405180910390f35b34801561065e57600080fd5b50610679600480360381019061067491906133ab565b6118a1565b60405161068691906140b4565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b1919061345f565b6118b9565b005b3480156106c457600080fd5b506106df60048036038101906106da9190613653565b61191b565b005b3480156106ed57600080fd5b5061070860048036038101906107039190613593565b6119a1565b005b34801561071657600080fd5b50610731600480360381019061072c9190613653565b611a3a565b60405161073e9190613d52565b60405180910390f35b34801561075357600080fd5b5061076e600480360381019061076991906133d4565b611acd565b60405161077b9190613d37565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a691906133ab565b611b61565b005b601460009054906101000a900460ff1681565b6107c8611c59565b73ffffffffffffffffffffffffffffffffffffffff166107e6611112565b73ffffffffffffffffffffffffffffffffffffffff161461083c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083390613fd4565b60405180910390fd5b80600e8190555050565b600061085182611c61565b9050919050565b606060008054610867906143b8565b80601f0160208091040260200160405190810160405280929190818152602001828054610893906143b8565b80156108e05780601f106108b5576101008083540402835291602001916108e0565b820191906000526020600020905b8154815290600101906020018083116108c357829003601f168201915b5050505050905090565b60006108f582611cdb565b610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092b90613fb4565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097a82610f1a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e290613ff4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0a611c59565b73ffffffffffffffffffffffffffffffffffffffff161480610a395750610a3881610a33611c59565b611acd565b5b610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90613ef4565b60405180910390fd5b610a828383611d47565b505050565b6000600880549050905090565b610aa5610a9f611c59565b82611e00565b610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb90614014565b60405180910390fd5b610aef838383611ede565b505050565b6000610aff83610fd2565b8210610b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3790613db4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ba1611c59565b73ffffffffffffffffffffffffffffffffffffffff16610bbf611112565b73ffffffffffffffffffffffffffffffffffffffff1614610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c90613fd4565b60405180910390fd5b60004711610c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4f90613f94565b60405180910390fd5b60004790506000610c67611112565b73ffffffffffffffffffffffffffffffffffffffff1682604051610c8a90613c99565b60006040518083038185875af1925050503d8060008114610cc7576040519150601f19603f3d011682016040523d82523d6000602084013e610ccc565b606091505b5050905080610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0790614094565b60405180910390fd5b610d18611112565b73ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610d5d91906140b4565b60405180910390a25050565b610d84838383604051806020016040528060008152506118b9565b505050565b60606000610d9683610fd2565b905060008167ffffffffffffffff811115610dda577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610e085781602001602082028036833780820191505090505b50905060005b82811015610e7857610e208582610af4565b828281518110610e59577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610e709061441b565b915050610e0e565b508092505050919050565b6000610e8d610a87565b8210610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec590614034565b60405180910390fd5b60088281548110610f08577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba90613f34565b60405180910390fd5b80915050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90613f14565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611092611c59565b73ffffffffffffffffffffffffffffffffffffffff166110b0611112565b73ffffffffffffffffffffffffffffffffffffffff1614611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90613fd4565b60405180910390fd5b6111106000612145565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611144611c59565b73ffffffffffffffffffffffffffffffffffffffff16611162611112565b73ffffffffffffffffffffffffffffffffffffffff16146111b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111af90613fd4565b60405180910390fd5b80600d8190555050565b6111ca611c59565b73ffffffffffffffffffffffffffffffffffffffff166111e8611112565b73ffffffffffffffffffffffffffffffffffffffff161461123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590613fd4565b60405180910390fd5b81816011919061124f9291906130d1565b505050565b606060018054611263906143b8565b80601f016020809104026020016040519081016040528092919081815260200182805461128f906143b8565b80156112dc5780601f106112b1576101008083540402835291602001916112dc565b820191906000526020600020905b8154815290600101906020018083116112bf57829003601f168201915b5050505050905090565b6112ee611c59565b73ffffffffffffffffffffffffffffffffffffffff1661130c611112565b73ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990613fd4565b60405180910390fd5b601460009054906101000a900460ff16156113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a990614054565b60405180910390fd5b60005b81518110156114405760008282815181106113f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905061141461140e611112565b8261220b565b601060008154809291906114279061441b565b91905055505080806114389061441b565b9150506113b5565b5050565b601460009054906101000a900460ff16611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90613d94565b60405180910390fd5b600e5481600c546114a491906141ed565b11156114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90613d74565b60405180910390fd5b80600d546114f39190614274565b341015611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c90613e94565b60405180910390fd5b600f5481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461158391906141ed565b11156115c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bb90614074565b60405180910390fd5b600081601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461161191906141ed565b90506000808367ffffffffffffffff811115611656577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156116845781602001602082028036833780820191505090505b5090506000805b85811015611731576001600c546116a291906141ed565b93506116ad84611cdb565b61171457838383815181106116eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505081806117029061441b565b92505080806117109061441b565b9150505b600c60008154809291906117279061441b565b919050555061168b565b5083601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550846010600082825461178891906141ed565b9250508190555060005b8581101561187d578281815181106117d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015193506117e7338561220b565b61181b8460116117f687612229565b604051602001611807929190613c6a565b6040516020818303038152906040526123d6565b833373ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff8860405161186291906140b4565b60405180910390a380806118759061441b565b915050611792565b505050505050565b611897611890611c59565b838361244a565b5050565b60105481565b60126020528060005260406000206000915090505481565b6118ca6118c4611c59565b83611e00565b611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190090614014565b60405180910390fd5b611915848484846125b7565b50505050565b611923611c59565b73ffffffffffffffffffffffffffffffffffffffff16611941611112565b73ffffffffffffffffffffffffffffffffffffffff1614611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e90613fd4565b60405180910390fd5b80600f8190555050565b6119a9611c59565b73ffffffffffffffffffffffffffffffffffffffff166119c7611112565b73ffffffffffffffffffffffffffffffffffffffff1614611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490613fd4565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6060611a4582612613565b6000611a4f61265e565b9050600081611a5d85612229565b604051602001611a6e929190613c24565b6040516020818303038152906040529050600081604051602001611a929190613c48565b60405160208183030381529060405290506000835111611ac15760405180602001604052806000815250611ac3565b805b9350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b69611c59565b73ffffffffffffffffffffffffffffffffffffffff16611b87611112565b73ffffffffffffffffffffffffffffffffffffffff1614611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd490613fd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490613df4565b60405180910390fd5b611c5681612145565b50565b600033905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cd45750611cd3826126f0565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dba83610f1a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e0b82611cdb565b611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4190613ed4565b60405180910390fd5b6000611e5583610f1a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e975750611e968185611acd565b5b80611ed557508373ffffffffffffffffffffffffffffffffffffffff16611ebd846108ea565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611efe82610f1a565b73ffffffffffffffffffffffffffffffffffffffff1614611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90613e14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb90613e54565b60405180910390fd5b611fcf8383836127d2565b611fda600082611d47565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461202a91906142ce565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461208191906141ed565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121408383836127e2565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122258282604051806020016040528060008152506127e7565b5050565b60606000821415612271576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123d1565b600082905060005b600082146122a357808061228c9061441b565b915050600a8261229c9190614243565b9150612279565b60008167ffffffffffffffff8111156122e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156123175781602001600182028036833780820191505090505b5090505b600085146123ca5760018261233091906142ce565b9150600a8561233f9190614464565b603061234b91906141ed565b60f81b818381518110612387577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123c39190614243565b945061231b565b8093505050505b919050565b6123df82611cdb565b61241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590613f54565b60405180910390fd5b80600b60008481526020019081526020016000209080519060200190612445929190613157565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b090613e74565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125aa9190613d37565b60405180910390a3505050565b6125c2848484611ede565b6125ce84848484612842565b61260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490613dd4565b60405180910390fd5b50505050565b61261c81611cdb565b61265b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265290613eb4565b60405180910390fd5b50565b60606011805461266d906143b8565b80601f0160208091040260200160405190810160405280929190818152602001828054612699906143b8565b80156126e65780601f106126bb576101008083540402835291602001916126e6565b820191906000526020600020905b8154815290600101906020018083116126c957829003601f168201915b5050505050905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127bb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127cb57506127ca826129d9565b5b9050919050565b6127dd838383612a43565b505050565b505050565b6127f18383612b57565b6127fe6000848484612842565b61283d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283490613dd4565b60405180910390fd5b505050565b60006128638473ffffffffffffffffffffffffffffffffffffffff16612d31565b156129cc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261288c611c59565b8786866040518563ffffffff1660e01b81526004016128ae9493929190613cc9565b602060405180830381600087803b1580156128c857600080fd5b505af19250505080156128f957506040513d601f19601f820116820180604052508101906128f691906135e5565b60015b61297c573d8060008114612929576040519150601f19603f3d011682016040523d82523d6000602084013e61292e565b606091505b50600081511415612974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296b90613dd4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129d1565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a4e838383612d54565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a9157612a8c81612d59565b612ad0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612acf57612ace8382612da2565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b1357612b0e81612f0f565b612b52565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b5157612b508282613052565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbe90613f74565b60405180910390fd5b612bd081611cdb565b15612c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0790613e34565b60405180910390fd5b612c1c600083836127d2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c6c91906141ed565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d2d600083836127e2565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612daf84610fd2565b612db991906142ce565b9050600060076000848152602001908152602001600020549050818114612e9e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f2391906142ce565b9050600060096000848152602001908152602001600020549050600060088381548110612f79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612fc1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613036577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061305d83610fd2565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546130dd906143b8565b90600052602060002090601f0160209004810192826130ff5760008555613146565b82601f1061311857803560ff1916838001178555613146565b82800160010185558215613146579182015b8281111561314557823582559160200191906001019061312a565b5b50905061315391906131dd565b5090565b828054613163906143b8565b90600052602060002090601f01602090048101928261318557600085556131cc565b82601f1061319e57805160ff19168380011785556131cc565b828001600101855582156131cc579182015b828111156131cb5782518255916020019190600101906131b0565b5b5090506131d991906131dd565b5090565b5b808211156131f65760008160009055506001016131de565b5090565b600061320d613208846140f4565b6140cf565b9050808382526020820190508285602086028201111561322c57600080fd5b60005b8581101561325c57816132428882613396565b84526020840193506020830192505060018101905061322f565b5050509392505050565b600061327961327484614120565b6140cf565b90508281526020810184848401111561329157600080fd5b61329c848285614376565b509392505050565b6000813590506132b381614bf2565b92915050565b600082601f8301126132ca57600080fd5b81356132da8482602086016131fa565b91505092915050565b6000813590506132f281614c09565b92915050565b60008135905061330781614c20565b92915050565b60008151905061331c81614c20565b92915050565b600082601f83011261333357600080fd5b8135613343848260208601613266565b91505092915050565b60008083601f84011261335e57600080fd5b8235905067ffffffffffffffff81111561337757600080fd5b60208301915083600182028301111561338f57600080fd5b9250929050565b6000813590506133a581614c37565b92915050565b6000602082840312156133bd57600080fd5b60006133cb848285016132a4565b91505092915050565b600080604083850312156133e757600080fd5b60006133f5858286016132a4565b9250506020613406858286016132a4565b9150509250929050565b60008060006060848603121561342557600080fd5b6000613433868287016132a4565b9350506020613444868287016132a4565b925050604061345586828701613396565b9150509250925092565b6000806000806080858703121561347557600080fd5b6000613483878288016132a4565b9450506020613494878288016132a4565b93505060406134a587828801613396565b925050606085013567ffffffffffffffff8111156134c257600080fd5b6134ce87828801613322565b91505092959194509250565b600080604083850312156134ed57600080fd5b60006134fb858286016132a4565b925050602061350c858286016132e3565b9150509250929050565b6000806040838503121561352957600080fd5b6000613537858286016132a4565b925050602061354885828601613396565b9150509250929050565b60006020828403121561356457600080fd5b600082013567ffffffffffffffff81111561357e57600080fd5b61358a848285016132b9565b91505092915050565b6000602082840312156135a557600080fd5b60006135b3848285016132e3565b91505092915050565b6000602082840312156135ce57600080fd5b60006135dc848285016132f8565b91505092915050565b6000602082840312156135f757600080fd5b60006136058482850161330d565b91505092915050565b6000806020838503121561362157600080fd5b600083013567ffffffffffffffff81111561363b57600080fd5b6136478582860161334c565b92509250509250929050565b60006020828403121561366557600080fd5b600061367384828501613396565b91505092915050565b60006136888383613c06565b60208301905092915050565b61369d81614302565b82525050565b60006136ae82614176565b6136b881856141a4565b93506136c383614151565b8060005b838110156136f45781516136db888261367c565b97506136e683614197565b9250506001810190506136c7565b5085935050505092915050565b61370a81614314565b82525050565b600061371b82614181565b61372581856141b5565b9350613735818560208601614385565b61373e81614551565b840191505092915050565b60006137548261418c565b61375e81856141d1565b935061376e818560208601614385565b61377781614551565b840191505092915050565b600061378d8261418c565b61379781856141e2565b93506137a7818560208601614385565b80840191505092915050565b600081546137c0816143b8565b6137ca81866141e2565b945060018216600081146137e557600181146137f657613829565b60ff19831686528186019350613829565b6137ff85614161565b60005b8381101561382157815481890152600182019150602081019050613802565b838801955050505b50505092915050565b600061383f600f836141d1565b915061384a82614562565b602082019050919050565b6000613862601d836141d1565b915061386d8261458b565b602082019050919050565b6000613885602b836141d1565b9150613890826145b4565b604082019050919050565b60006138a86032836141d1565b91506138b382614603565b604082019050919050565b60006138cb6026836141d1565b91506138d682614652565b604082019050919050565b60006138ee6025836141d1565b91506138f9826146a1565b604082019050919050565b6000613911601c836141d1565b915061391c826146f0565b602082019050919050565b60006139346024836141d1565b915061393f82614719565b604082019050919050565b60006139576019836141d1565b915061396282614768565b602082019050919050565b600061397a6014836141d1565b915061398582614791565b602082019050919050565b600061399d6017836141d1565b91506139a8826147ba565b602082019050919050565b60006139c0602c836141d1565b91506139cb826147e3565b604082019050919050565b60006139e36038836141d1565b91506139ee82614832565b604082019050919050565b6000613a06602a836141d1565b9150613a1182614881565b604082019050919050565b6000613a296029836141d1565b9150613a34826148d0565b604082019050919050565b6000613a4c602e836141d1565b9150613a578261491f565b604082019050919050565b6000613a6f6020836141d1565b9150613a7a8261496e565b602082019050919050565b6000613a92600c836141d1565b9150613a9d82614997565b602082019050919050565b6000613ab5602c836141d1565b9150613ac0826149c0565b604082019050919050565b6000613ad86005836141e2565b9150613ae382614a0f565b600582019050919050565b6000613afb6020836141d1565b9150613b0682614a38565b602082019050919050565b6000613b1e6021836141d1565b9150613b2982614a61565b604082019050919050565b6000613b416000836141c6565b9150613b4c82614ab0565b600082019050919050565b6000613b646031836141d1565b9150613b6f82614ab3565b604082019050919050565b6000613b87602c836141d1565b9150613b9282614b02565b604082019050919050565b6000613baa6021836141d1565b9150613bb582614b51565b604082019050919050565b6000613bcd6015836141d1565b9150613bd882614ba0565b602082019050919050565b6000613bf06011836141d1565b9150613bfb82614bc9565b602082019050919050565b613c0f8161436c565b82525050565b613c1e8161436c565b82525050565b6000613c308285613782565b9150613c3c8284613782565b91508190509392505050565b6000613c548284613782565b9150613c5f82613acb565b915081905092915050565b6000613c7682856137b3565b9150613c828284613782565b9150613c8d82613acb565b91508190509392505050565b6000613ca482613b34565b9150819050919050565b6000602082019050613cc36000830184613694565b92915050565b6000608082019050613cde6000830187613694565b613ceb6020830186613694565b613cf86040830185613c15565b8181036060830152613d0a8184613710565b905095945050505050565b60006020820190508181036000830152613d2f81846136a3565b905092915050565b6000602082019050613d4c6000830184613701565b92915050565b60006020820190508181036000830152613d6c8184613749565b905092915050565b60006020820190508181036000830152613d8d81613832565b9050919050565b60006020820190508181036000830152613dad81613855565b9050919050565b60006020820190508181036000830152613dcd81613878565b9050919050565b60006020820190508181036000830152613ded8161389b565b9050919050565b60006020820190508181036000830152613e0d816138be565b9050919050565b60006020820190508181036000830152613e2d816138e1565b9050919050565b60006020820190508181036000830152613e4d81613904565b9050919050565b60006020820190508181036000830152613e6d81613927565b9050919050565b60006020820190508181036000830152613e8d8161394a565b9050919050565b60006020820190508181036000830152613ead8161396d565b9050919050565b60006020820190508181036000830152613ecd81613990565b9050919050565b60006020820190508181036000830152613eed816139b3565b9050919050565b60006020820190508181036000830152613f0d816139d6565b9050919050565b60006020820190508181036000830152613f2d816139f9565b9050919050565b60006020820190508181036000830152613f4d81613a1c565b9050919050565b60006020820190508181036000830152613f6d81613a3f565b9050919050565b60006020820190508181036000830152613f8d81613a62565b9050919050565b60006020820190508181036000830152613fad81613a85565b9050919050565b60006020820190508181036000830152613fcd81613aa8565b9050919050565b60006020820190508181036000830152613fed81613aee565b9050919050565b6000602082019050818103600083015261400d81613b11565b9050919050565b6000602082019050818103600083015261402d81613b57565b9050919050565b6000602082019050818103600083015261404d81613b7a565b9050919050565b6000602082019050818103600083015261406d81613b9d565b9050919050565b6000602082019050818103600083015261408d81613bc0565b9050919050565b600060208201905081810360008301526140ad81613be3565b9050919050565b60006020820190506140c96000830184613c15565b92915050565b60006140d96140ea565b90506140e582826143ea565b919050565b6000604051905090565b600067ffffffffffffffff82111561410f5761410e614522565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561413b5761413a614522565b5b61414482614551565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006141f88261436c565b91506142038361436c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561423857614237614495565b5b828201905092915050565b600061424e8261436c565b91506142598361436c565b925082614269576142686144c4565b5b828204905092915050565b600061427f8261436c565b915061428a8361436c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142c3576142c2614495565b5b828202905092915050565b60006142d98261436c565b91506142e48361436c565b9250828210156142f7576142f6614495565b5b828203905092915050565b600061430d8261434c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143a3578082015181840152602081019050614388565b838111156143b2576000848401525b50505050565b600060028204905060018216806143d057607f821691505b602082108114156143e4576143e36144f3565b5b50919050565b6143f382614551565b810181811067ffffffffffffffff8211171561441257614411614522565b5b80604052505050565b60006144268261436c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561445957614458614495565b5b600182019050919050565b600061446f8261436c565b915061447a8361436c565b92508261448a576144896144c4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f57652061726520736f6c64206f75740000000000000000000000000000000000600082015250565b7f5075626c6963206d696e74696e67206973206e6f7420656e61626c6564000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f496e636f72726563742076616c75652073656e74000000000000000000000000600082015250565b7f546f6b656e20494420646f6573206e6f74206578697374000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f42616c616e636520697320300000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74696e6720697320616c726561647920656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220627579657220726561636865640000000000000000000000600082015250565b7f5769746864726177616c206661696c6564000000000000000000000000000000600082015250565b614bfb81614302565b8114614c0657600080fd5b50565b614c1281614314565b8114614c1d57600080fd5b50565b614c2981614320565b8114614c3457600080fd5b50565b614c408161436c565b8114614c4b57600080fd5b5056fea26469706673582212203db5705606b6616aa4ce01cea7136e5476eaa35fc61536e6c2dba679bfbe7f0f64736f6c63430008040033
Deployed Bytecode Sourcemap
235:5249:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;650:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1260:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4861:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2501:100:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4061:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3584:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1658:113:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4811:339:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1326:256:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3406:345:14;;;;;;;;;;;;;:::i;:::-;;5221:185:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5081:400:14;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1848:233:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2195:239:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;363:36:14;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1925:208:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1714:103:13;;;;;;;;;;;;;:::i;:::-;;1063:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1037:92:14;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1367:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2670:104:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1556:323:14;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1891:1507;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4354:155:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;471:26:14;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;540:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5477:326:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1137:114:14;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;894:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4019:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4580:164:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1972:201:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;650:31:14;;;;;;;;;;;;;:::o;1260:99::-;1294:12:13;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1342:9:14::1;1329:10;:22;;;;1260:99:::0;:::o;4861:212::-;5000:4;5029:36;5053:11;5029:23;:36::i;:::-;5022:43;;4861:212;;;:::o;2501:100:3:-;2555:13;2588:5;2581:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2501:100;:::o;4061:221::-;4137:7;4165:16;4173:7;4165;:16::i;:::-;4157:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4250:15;:24;4266:7;4250:24;;;;;;;;;;;;;;;;;;;;;4243:31;;4061:221;;;:::o;3584:411::-;3665:13;3681:23;3696:7;3681:14;:23::i;:::-;3665:39;;3729:5;3723:11;;:2;:11;;;;3715:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3823:5;3807:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3832:37;3849:5;3856:12;:10;:12::i;:::-;3832:16;:37::i;:::-;3807:62;3785:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;3966:21;3975:2;3979:7;3966:8;:21::i;:::-;3584:411;;;:::o;1658:113:5:-;1719:7;1746:10;:17;;;;1739:24;;1658:113;:::o;4811:339:3:-;5006:41;5025:12;:10;:12::i;:::-;5039:7;5006:18;:41::i;:::-;4998:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5114:28;5124:4;5130:2;5134:7;5114:9;:28::i;:::-;4811:339;;;:::o;1326:256:5:-;1423:7;1459:23;1476:5;1459:16;:23::i;:::-;1451:5;:31;1443:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1548:12;:19;1561:5;1548:19;;;;;;;;;;;;;;;:26;1568:5;1548:26;;;;;;;;;;;;1541:33;;1326:256;;;;:::o;3406:345:14:-;1294:12:13;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3486:1:14::1;3462:21;:25;3454:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;3515:24;3542:21;3515:48;;3575:12;3601:7;:5;:7::i;:::-;3593:21;;3622:16;3593:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3574:69;;;3662:7;3654:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;3717:7;:5;:7::i;:::-;3707:36;;;3726:16;3707:36;;;;;;:::i;:::-;;;;;;;;1354:1:13;;3406:345:14:o:0;5221:185:3:-;5359:39;5376:4;5382:2;5386:7;5359:39;;;;;;;;;;;;:16;:39::i;:::-;5221:185;;;:::o;5081:400:14:-;5168:16;5202:23;5228:17;5238:6;5228:9;:17::i;:::-;5202:43;;5256:25;5298:15;5284:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5256:58;;5330:9;5325:123;5345:15;5341:1;:19;5325:123;;;5406:30;5426:6;5434:1;5406:19;:30::i;:::-;5392:8;5401:1;5392:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;5362:3;;;;;:::i;:::-;;;;5325:123;;;;5465:8;5458:15;;;;5081:400;;;:::o;1848:233:5:-;1923:7;1959:30;:28;:30::i;:::-;1951:5;:38;1943:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;2056:10;2067:5;2056:17;;;;;;;;;;;;;;;;;;;;;;;;2049:24;;1848:233;;;:::o;2195:239:3:-;2267:7;2287:13;2303:7;:16;2311:7;2303:16;;;;;;;;;;;;;;;;;;;;;2287:32;;2355:1;2338:19;;:5;:19;;;;2330:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2421:5;2414:12;;;2195:239;;;:::o;363:36:14:-;;;;:::o;1925:208:3:-;1997:7;2042:1;2025:19;;:5;:19;;;;2017:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2109:9;:16;2119:5;2109:16;;;;;;;;;;;;;;;;2102:23;;1925:208;;;:::o;1714:103:13:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;1063:87::-;1109:7;1136:6;;;;;;;;;;;1129:13;;1063:87;:::o;1037:92:14:-;1294:12:13;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1113:8:14::1;1101:9;:20;;;;1037:92:::0;:::o;1367:123::-;1294:12:13;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1469:13:14::1;;1454:12;:28;;;;;;;:::i;:::-;;1367:123:::0;;:::o;2670:104:3:-;2726:13;2759:7;2752:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2670:104;:::o;1556:323:14:-;1294:12:13;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1646:19:14::1;;;;;;;;;;;1645:20;1637:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1717:9;1712:160;1736:8;:15;1732:1;:19;1712:160;;;1769:15;1787:8;1796:1;1787:11;;;;;;;;;;;;;;;;;;;;;;1769:29;;1809:27;1819:7;:5;:7::i;:::-;1828;1809:9;:27::i;:::-;1847:11;;:13;;;;;;;;;:::i;:::-;;;;;;1712:160;1753:3;;;;;:::i;:::-;;;;1712:160;;;;1556:323:::0;:::o;1891:1507::-;1977:19;;;;;;;;;;;1969:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2080:10;;2067:9;2049:15;;:27;;;;:::i;:::-;:41;;2041:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2154:9;2142;;:21;;;;:::i;:::-;2129:9;:34;;2121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2248:13;;2235:9;2207:13;:25;2221:10;2207:25;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:54;;2199:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;2320:25;2376:9;2348:13;:25;2362:10;2348:25;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;2320:65;;2396:15;2476:33;2526:9;2512:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2476:60;;2547:21;2590:9;2585:294;2609:9;2605:1;:13;2585:294;;;2665:1;2647:15;;:19;;;;:::i;:::-;2637:29;;2686:16;2694:7;2686;:16::i;:::-;2681:155;;2757:7;2723:16;2740:13;2723:31;;;;;;;;;;;;;;;;;;;;;:41;;;;;2783:15;;;;;:::i;:::-;;;;2817:3;;;;;:::i;:::-;;;;2681:155;2850:15;;:17;;;;;;;;;:::i;:::-;;;;;;2585:294;;;;2990:17;2962:13;:25;2976:10;2962:25;;;;;;;;;;;;;;;:45;;;;3033:9;3018:11;;:24;;;;;;;:::i;:::-;;;;;;;;3085:9;3080:311;3104:9;3100:1;:13;3080:311;;;3145:16;3162:1;3145:19;;;;;;;;;;;;;;;;;;;;;;3135:29;;3179:30;3189:10;3201:7;3179:9;:30::i;:::-;3224:97;3237:7;3270:12;3284:25;3301:7;3284:16;:25::i;:::-;3253:66;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3224:12;:97::i;:::-;3360:7;3348:10;3341:38;;;3369:9;3341:38;;;;;;:::i;:::-;;;;;;;;3115:3;;;;;:::i;:::-;;;;3080:311;;;;1891:1507;;;;;:::o;4354:155:3:-;4449:52;4468:12;:10;:12::i;:::-;4482:8;4492;4449:18;:52::i;:::-;4354:155;;:::o;471:26:14:-;;;;:::o;540:49::-;;;;;;;;;;;;;;;;;:::o;5477:326:3:-;5651:41;5670:12;:10;:12::i;:::-;5684:7;5651:18;:41::i;:::-;5643:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5757:38;5771:4;5777:2;5781:7;5790:4;5757:13;:38::i;:::-;5477:326;;;;:::o;1137:114:14:-;1294:12:13;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1229:14:14::1;1213:13;:30;;;;1137:114:::0;:::o;894:135::-;1294:12:13;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1001:20:14::1;979:19;;:42;;;;;;;;;;;;;;;;;;894:135:::0;:::o;4019:391::-;4110:13;4132:23;4147:7;4132:14;:23::i;:::-;4164:21;4188:10;:8;:10::i;:::-;4164:34;;4205:17;4249:7;4258:25;4275:7;4258:16;:25::i;:::-;4232:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4205:80;;4292:18;4337:3;4320:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;4292:59;;4389:1;4371:7;4365:21;:25;:37;;;;;;;;;;;;;;;;;4393:4;4365:37;4358:44;;;;;4019:391;;;:::o;4580:164:3:-;4677:4;4701:18;:25;4720:5;4701:25;;;;;;;;;;;;;;;:35;4727:8;4701:35;;;;;;;;;;;;;;;;;;;;;;;;;4694:42;;4580:164;;;;:::o;1972:201:13:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:1:::1;2061:22;;:8;:22;;;;2053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;656:98:1:-;709:7;736:10;729:17;;656:98;:::o;1018:224:5:-;1120:4;1159:35;1144:50;;;:11;:50;;;;:90;;;;1198:36;1222:11;1198:23;:36::i;:::-;1144:90;1137:97;;1018:224;;;:::o;7310:127:3:-;7375:4;7427:1;7399:30;;:7;:16;7407:7;7399:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7392:37;;7310:127;;;:::o;11455:174::-;11557:2;11530:15;:24;11546:7;11530:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11613:7;11609:2;11575:46;;11584:23;11599:7;11584:14;:23::i;:::-;11575:46;;;;;;;;;;;;11455:174;;:::o;7604:348::-;7697:4;7722:16;7730:7;7722;:16::i;:::-;7714:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7798:13;7814:23;7829:7;7814:14;:23::i;:::-;7798:39;;7867:5;7856:16;;:7;:16;;;:52;;;;7876:32;7893:5;7900:7;7876:16;:32::i;:::-;7856:52;:87;;;;7936:7;7912:31;;:20;7924:7;7912:11;:20::i;:::-;:31;;;7856:87;7848:96;;;7604:348;;;;:::o;10711:625::-;10870:4;10843:31;;:23;10858:7;10843:14;:23::i;:::-;:31;;;10835:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10949:1;10935:16;;:2;:16;;;;10927:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11005:39;11026:4;11032:2;11036:7;11005:20;:39::i;:::-;11109:29;11126:1;11130:7;11109:8;:29::i;:::-;11170:1;11151:9;:15;11161:4;11151:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11199:1;11182:9;:13;11192:2;11182:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11230:2;11211:7;:16;11219:7;11211:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11269:7;11265:2;11250:27;;11259:4;11250:27;;;;;;;;;;;;11290:38;11310:4;11316:2;11320:7;11290:19;:38::i;:::-;10711:625;;;:::o;2333:191:13:-;2407:16;2426:6;;;;;;;;;;;2407:25;;2452:8;2443:6;;:17;;;;;;;;;;;;;;;;;;2507:8;2476:40;;2497:8;2476:40;;;;;;;;;;;;2333:191;;:::o;8294:110:3:-;8370:26;8380:2;8384:7;8370:26;;;;;;;;;;;;:9;:26::i;:::-;8294:110;;:::o;342:723:15:-;398:13;628:1;619:5;:10;615:53;;;646:10;;;;;;;;;;;;;;;;;;;;;615:53;678:12;693:5;678:20;;709:14;734:78;749:1;741:4;:9;734:78;;767:8;;;;;:::i;:::-;;;;798:2;790:10;;;;;:::i;:::-;;;734:78;;;822:19;854:6;844:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;822:39;;872:154;888:1;879:5;:10;872:154;;916:1;906:11;;;;;:::i;:::-;;;983:2;975:5;:10;;;;:::i;:::-;962:2;:24;;;;:::i;:::-;949:39;;932:6;939;932:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1012:2;1003:11;;;;;:::i;:::-;;;872:154;;;1050:6;1036:21;;;;;342:723;;;;:::o;1321:217:6:-;1421:16;1429:7;1421;:16::i;:::-;1413:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;1521:9;1499:10;:19;1510:7;1499:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;1321:217;;:::o;11772:315:3:-;11927:8;11918:17;;:5;:17;;;;11910:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;12014:8;11976:18;:25;11995:5;11976:25;;;;;;;;;;;;;;;:35;12002:8;11976:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12060:8;12038:41;;12053:5;12038:41;;;12070:8;12038:41;;;;;;:::i;:::-;;;;;;;;11772:315;;;:::o;6684:313::-;6840:28;6850:4;6856:2;6860:7;6840:9;:28::i;:::-;6887:47;6910:4;6916:2;6920:7;6929:4;6887:22;:47::i;:::-;6879:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;6684:313;;;;:::o;3885:126:14:-;3959:16;3967:7;3959;:16::i;:::-;3951:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;3885:126;:::o;3764:113::-;3824:13;3857:12;3850:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3764:113;:::o;1556:305:3:-;1658:4;1710:25;1695:40;;;:11;:40;;;;:105;;;;1767:33;1752:48;;;:11;:48;;;;1695:105;:158;;;;1817:36;1841:11;1817:23;:36::i;:::-;1695:158;1675:178;;1556:305;;;:::o;4675:178:14:-;4800:45;4827:4;4833:2;4837:7;4800:26;:45::i;:::-;4675:178;;;:::o;14531:125:3:-;;;;:::o;8631:319::-;8760:18;8766:2;8770:7;8760:5;:18::i;:::-;8811:53;8842:1;8846:2;8850:7;8859:4;8811:22;:53::i;:::-;8789:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;8631:319;;;:::o;12651:797::-;12805:4;12826:15;:2;:13;;;:15::i;:::-;12822:619;;;12878:2;12862:36;;;12899:12;:10;:12::i;:::-;12913:4;12919:7;12928:4;12862:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12858:528;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13120:1;13103:6;:13;:18;13099:272;;;13146:60;;;;;;;;;;:::i;:::-;;;;;;;;13099:272;13321:6;13315:13;13306:6;13302:2;13298:15;13291:38;12858:528;12994:41;;;12984:51;;;:6;:51;;;;12977:58;;;;;12822:619;13425:4;13418:11;;12651:797;;;;;;;:::o;854:157:2:-;939:4;978:25;963:40;;;:11;:40;;;;956:47;;854:157;;;:::o;2694:589:5:-;2838:45;2865:4;2871:2;2875:7;2838:26;:45::i;:::-;2916:1;2900:18;;:4;:18;;;2896:187;;;2935:40;2967:7;2935:31;:40::i;:::-;2896:187;;;3005:2;2997:10;;:4;:10;;;2993:90;;3024:47;3057:4;3063:7;3024:32;:47::i;:::-;2993:90;2896:187;3111:1;3097:16;;:2;:16;;;3093:183;;;3130:45;3167:7;3130:36;:45::i;:::-;3093:183;;;3203:4;3197:10;;:2;:10;;;3193:83;;3224:40;3252:2;3256:7;3224:27;:40::i;:::-;3193:83;3093:183;2694:589;;;:::o;9286:439:3:-;9380:1;9366:16;;:2;:16;;;;9358:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9439:16;9447:7;9439;:16::i;:::-;9438:17;9430:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9501:45;9530:1;9534:2;9538:7;9501:20;:45::i;:::-;9576:1;9559:9;:13;9569:2;9559:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9607:2;9588:7;:16;9596:7;9588:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9652:7;9648:2;9627:33;;9644:1;9627:33;;;;;;;;;;;;9673:44;9701:1;9705:2;9709:7;9673:19;:44::i;:::-;9286:439;;:::o;1210:326:0:-;1270:4;1527:1;1505:7;:19;;;:23;1498:30;;1210:326;;;:::o;14020:126:3:-;;;;:::o;4006:164:5:-;4110:10;:17;;;;4083:15;:24;4099:7;4083:24;;;;;;;;;;;:44;;;;4138:10;4154:7;4138:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4006:164;:::o;4797:988::-;5063:22;5113:1;5088:22;5105:4;5088:16;:22::i;:::-;:26;;;;:::i;:::-;5063:51;;5125:18;5146:17;:26;5164:7;5146:26;;;;;;;;;;;;5125:47;;5293:14;5279:10;:28;5275:328;;5324:19;5346:12;:18;5359:4;5346:18;;;;;;;;;;;;;;;:34;5365:14;5346:34;;;;;;;;;;;;5324:56;;5430:11;5397:12;:18;5410:4;5397:18;;;;;;;;;;;;;;;:30;5416:10;5397:30;;;;;;;;;;;:44;;;;5547:10;5514:17;:30;5532:11;5514:30;;;;;;;;;;;:43;;;;5275:328;;5699:17;:26;5717:7;5699:26;;;;;;;;;;;5692:33;;;5743:12;:18;5756:4;5743:18;;;;;;;;;;;;;;;:34;5762:14;5743:34;;;;;;;;;;;5736:41;;;4797:988;;;;:::o;6080:1079::-;6333:22;6378:1;6358:10;:17;;;;:21;;;;:::i;:::-;6333:46;;6390:18;6411:15;:24;6427:7;6411:24;;;;;;;;;;;;6390:45;;6762:19;6784:10;6795:14;6784:26;;;;;;;;;;;;;;;;;;;;;;;;6762:48;;6848:11;6823:10;6834;6823:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;6959:10;6928:15;:28;6944:11;6928:28;;;;;;;;;;;:41;;;;7100:15;:24;7116:7;7100:24;;;;;;;;;;;7093:31;;;7135:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6080:1079;;;;:::o;3584:221::-;3669:14;3686:20;3703:2;3686:16;:20::i;:::-;3669:37;;3744:7;3717:12;:16;3730:2;3717:16;;;;;;;;;;;;;;;:24;3734:6;3717:24;;;;;;;;;;;:34;;;;3791:6;3762:17;:26;3780:7;3762:26;;;;;;;;;;;:35;;;;3584:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:16:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:139::-;1080:5;1118:6;1105:20;1096:29;;1134:33;1161:5;1134:33;:::i;:::-;1086:87;;;;:::o;1196:303::-;1267:5;1316:3;1309:4;1301:6;1297:17;1293:27;1283:2;;1334:1;1331;1324:12;1283:2;1374:6;1361:20;1399:94;1489:3;1481:6;1474:4;1466:6;1462:17;1399:94;:::i;:::-;1390:103;;1273:226;;;;;:::o;1505:133::-;1548:5;1586:6;1573:20;1564:29;;1602:30;1626:5;1602:30;:::i;:::-;1554:84;;;;:::o;1644:137::-;1689:5;1727:6;1714:20;1705:29;;1743:32;1769:5;1743:32;:::i;:::-;1695:86;;;;:::o;1787:141::-;1843:5;1874:6;1868:13;1859:22;;1890:32;1916:5;1890:32;:::i;:::-;1849:79;;;;:::o;1947:271::-;2002:5;2051:3;2044:4;2036:6;2032:17;2028:27;2018:2;;2069:1;2066;2059:12;2018:2;2109:6;2096:20;2134:78;2208:3;2200:6;2193:4;2185:6;2181:17;2134:78;:::i;:::-;2125:87;;2008:210;;;;;:::o;2238:352::-;2296:8;2306:6;2356:3;2349:4;2341:6;2337:17;2333:27;2323:2;;2374:1;2371;2364:12;2323:2;2410:6;2397:20;2387:30;;2440:18;2432:6;2429:30;2426:2;;;2472:1;2469;2462:12;2426:2;2509:4;2501:6;2497:17;2485:29;;2563:3;2555:4;2547:6;2543:17;2533:8;2529:32;2526:41;2523:2;;;2580:1;2577;2570:12;2523:2;2313:277;;;;;:::o;2596:139::-;2642:5;2680:6;2667:20;2658:29;;2696:33;2723:5;2696:33;:::i;:::-;2648:87;;;;:::o;2741:262::-;2800:6;2849:2;2837:9;2828:7;2824:23;2820:32;2817:2;;;2865:1;2862;2855:12;2817:2;2908:1;2933:53;2978:7;2969:6;2958:9;2954:22;2933:53;:::i;:::-;2923:63;;2879:117;2807:196;;;;:::o;3009:407::-;3077:6;3085;3134:2;3122:9;3113:7;3109:23;3105:32;3102:2;;;3150:1;3147;3140:12;3102:2;3193:1;3218:53;3263:7;3254:6;3243:9;3239:22;3218:53;:::i;:::-;3208:63;;3164:117;3320:2;3346:53;3391:7;3382:6;3371:9;3367:22;3346:53;:::i;:::-;3336:63;;3291:118;3092:324;;;;;:::o;3422:552::-;3499:6;3507;3515;3564:2;3552:9;3543:7;3539:23;3535:32;3532:2;;;3580:1;3577;3570:12;3532:2;3623:1;3648:53;3693:7;3684:6;3673:9;3669:22;3648:53;:::i;:::-;3638:63;;3594:117;3750:2;3776:53;3821:7;3812:6;3801:9;3797:22;3776:53;:::i;:::-;3766:63;;3721:118;3878:2;3904:53;3949:7;3940:6;3929:9;3925:22;3904:53;:::i;:::-;3894:63;;3849:118;3522:452;;;;;:::o;3980:809::-;4075:6;4083;4091;4099;4148:3;4136:9;4127:7;4123:23;4119:33;4116:2;;;4165:1;4162;4155:12;4116:2;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;4335:2;4361:53;4406:7;4397:6;4386:9;4382:22;4361:53;:::i;:::-;4351:63;;4306:118;4463:2;4489:53;4534:7;4525:6;4514:9;4510:22;4489:53;:::i;:::-;4479:63;;4434:118;4619:2;4608:9;4604:18;4591:32;4650:18;4642:6;4639:30;4636:2;;;4682:1;4679;4672:12;4636:2;4710:62;4764:7;4755:6;4744:9;4740:22;4710:62;:::i;:::-;4700:72;;4562:220;4106:683;;;;;;;:::o;4795:401::-;4860:6;4868;4917:2;4905:9;4896:7;4892:23;4888:32;4885:2;;;4933:1;4930;4923:12;4885:2;4976:1;5001:53;5046:7;5037:6;5026:9;5022:22;5001:53;:::i;:::-;4991:63;;4947:117;5103:2;5129:50;5171:7;5162:6;5151:9;5147:22;5129:50;:::i;:::-;5119:60;;5074:115;4875:321;;;;;:::o;5202:407::-;5270:6;5278;5327:2;5315:9;5306:7;5302:23;5298:32;5295:2;;;5343:1;5340;5333:12;5295:2;5386:1;5411:53;5456:7;5447:6;5436:9;5432:22;5411:53;:::i;:::-;5401:63;;5357:117;5513:2;5539:53;5584:7;5575:6;5564:9;5560:22;5539:53;:::i;:::-;5529:63;;5484:118;5285:324;;;;;:::o;5615:405::-;5699:6;5748:2;5736:9;5727:7;5723:23;5719:32;5716:2;;;5764:1;5761;5754:12;5716:2;5835:1;5824:9;5820:17;5807:31;5865:18;5857:6;5854:30;5851:2;;;5897:1;5894;5887:12;5851:2;5925:78;5995:7;5986:6;5975:9;5971:22;5925:78;:::i;:::-;5915:88;;5778:235;5706:314;;;;:::o;6026:256::-;6082:6;6131:2;6119:9;6110:7;6106:23;6102:32;6099:2;;;6147:1;6144;6137:12;6099:2;6190:1;6215:50;6257:7;6248:6;6237:9;6233:22;6215:50;:::i;:::-;6205:60;;6161:114;6089:193;;;;:::o;6288:260::-;6346:6;6395:2;6383:9;6374:7;6370:23;6366:32;6363:2;;;6411:1;6408;6401:12;6363:2;6454:1;6479:52;6523:7;6514:6;6503:9;6499:22;6479:52;:::i;:::-;6469:62;;6425:116;6353:195;;;;:::o;6554:282::-;6623:6;6672:2;6660:9;6651:7;6647:23;6643:32;6640:2;;;6688:1;6685;6678:12;6640:2;6731:1;6756:63;6811:7;6802:6;6791:9;6787:22;6756:63;:::i;:::-;6746:73;;6702:127;6630:206;;;;:::o;6842:395::-;6913:6;6921;6970:2;6958:9;6949:7;6945:23;6941:32;6938:2;;;6986:1;6983;6976:12;6938:2;7057:1;7046:9;7042:17;7029:31;7087:18;7079:6;7076:30;7073:2;;;7119:1;7116;7109:12;7073:2;7155:65;7212:7;7203:6;7192:9;7188:22;7155:65;:::i;:::-;7137:83;;;;7000:230;6928:309;;;;;:::o;7243:262::-;7302:6;7351:2;7339:9;7330:7;7326:23;7322:32;7319:2;;;7367:1;7364;7357:12;7319:2;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7309:196;;;;:::o;7511:179::-;7580:10;7601:46;7643:3;7635:6;7601:46;:::i;:::-;7679:4;7674:3;7670:14;7656:28;;7591:99;;;;:::o;7696:118::-;7783:24;7801:5;7783:24;:::i;:::-;7778:3;7771:37;7761:53;;:::o;7850:732::-;7969:3;7998:54;8046:5;7998:54;:::i;:::-;8068:86;8147:6;8142:3;8068:86;:::i;:::-;8061:93;;8178:56;8228:5;8178:56;:::i;:::-;8257:7;8288:1;8273:284;8298:6;8295:1;8292:13;8273:284;;;8374:6;8368:13;8401:63;8460:3;8445:13;8401:63;:::i;:::-;8394:70;;8487:60;8540:6;8487:60;:::i;:::-;8477:70;;8333:224;8320:1;8317;8313:9;8308:14;;8273:284;;;8277:14;8573:3;8566:10;;7974:608;;;;;;;:::o;8588:109::-;8669:21;8684:5;8669:21;:::i;:::-;8664:3;8657:34;8647:50;;:::o;8703:360::-;8789:3;8817:38;8849:5;8817:38;:::i;:::-;8871:70;8934:6;8929:3;8871:70;:::i;:::-;8864:77;;8950:52;8995:6;8990:3;8983:4;8976:5;8972:16;8950:52;:::i;:::-;9027:29;9049:6;9027:29;:::i;:::-;9022:3;9018:39;9011:46;;8793:270;;;;;:::o;9069:364::-;9157:3;9185:39;9218:5;9185:39;:::i;:::-;9240:71;9304:6;9299:3;9240:71;:::i;:::-;9233:78;;9320:52;9365:6;9360:3;9353:4;9346:5;9342:16;9320:52;:::i;:::-;9397:29;9419:6;9397:29;:::i;:::-;9392:3;9388:39;9381:46;;9161:272;;;;;:::o;9439:377::-;9545:3;9573:39;9606:5;9573:39;:::i;:::-;9628:89;9710:6;9705:3;9628:89;:::i;:::-;9621:96;;9726:52;9771:6;9766:3;9759:4;9752:5;9748:16;9726:52;:::i;:::-;9803:6;9798:3;9794:16;9787:23;;9549:267;;;;;:::o;9846:845::-;9949:3;9986:5;9980:12;10015:36;10041:9;10015:36;:::i;:::-;10067:89;10149:6;10144:3;10067:89;:::i;:::-;10060:96;;10187:1;10176:9;10172:17;10203:1;10198:137;;;;10349:1;10344:341;;;;10165:520;;10198:137;10282:4;10278:9;10267;10263:25;10258:3;10251:38;10318:6;10313:3;10309:16;10302:23;;10198:137;;10344:341;10411:38;10443:5;10411:38;:::i;:::-;10471:1;10485:154;10499:6;10496:1;10493:13;10485:154;;;10573:7;10567:14;10563:1;10558:3;10554:11;10547:35;10623:1;10614:7;10610:15;10599:26;;10521:4;10518:1;10514:12;10509:17;;10485:154;;;10668:6;10663:3;10659:16;10652:23;;10351:334;;10165:520;;9953:738;;;;;;:::o;10697:366::-;10839:3;10860:67;10924:2;10919:3;10860:67;:::i;:::-;10853:74;;10936:93;11025:3;10936:93;:::i;:::-;11054:2;11049:3;11045:12;11038:19;;10843:220;;;:::o;11069:366::-;11211:3;11232:67;11296:2;11291:3;11232:67;:::i;:::-;11225:74;;11308:93;11397:3;11308:93;:::i;:::-;11426:2;11421:3;11417:12;11410:19;;11215:220;;;:::o;11441:366::-;11583:3;11604:67;11668:2;11663:3;11604:67;:::i;:::-;11597:74;;11680:93;11769:3;11680:93;:::i;:::-;11798:2;11793:3;11789:12;11782:19;;11587:220;;;:::o;11813:366::-;11955:3;11976:67;12040:2;12035:3;11976:67;:::i;:::-;11969:74;;12052:93;12141:3;12052:93;:::i;:::-;12170:2;12165:3;12161:12;12154:19;;11959:220;;;:::o;12185:366::-;12327:3;12348:67;12412:2;12407:3;12348:67;:::i;:::-;12341:74;;12424:93;12513:3;12424:93;:::i;:::-;12542:2;12537:3;12533:12;12526:19;;12331:220;;;:::o;12557:366::-;12699:3;12720:67;12784:2;12779:3;12720:67;:::i;:::-;12713:74;;12796:93;12885:3;12796:93;:::i;:::-;12914:2;12909:3;12905:12;12898:19;;12703:220;;;:::o;12929:366::-;13071:3;13092:67;13156:2;13151:3;13092:67;:::i;:::-;13085:74;;13168:93;13257:3;13168:93;:::i;:::-;13286:2;13281:3;13277:12;13270:19;;13075:220;;;:::o;13301:366::-;13443:3;13464:67;13528:2;13523:3;13464:67;:::i;:::-;13457:74;;13540:93;13629:3;13540:93;:::i;:::-;13658:2;13653:3;13649:12;13642:19;;13447:220;;;:::o;13673:366::-;13815:3;13836:67;13900:2;13895:3;13836:67;:::i;:::-;13829:74;;13912:93;14001:3;13912:93;:::i;:::-;14030:2;14025:3;14021:12;14014:19;;13819:220;;;:::o;14045:366::-;14187:3;14208:67;14272:2;14267:3;14208:67;:::i;:::-;14201:74;;14284:93;14373:3;14284:93;:::i;:::-;14402:2;14397:3;14393:12;14386:19;;14191:220;;;:::o;14417:366::-;14559:3;14580:67;14644:2;14639:3;14580:67;:::i;:::-;14573:74;;14656:93;14745:3;14656:93;:::i;:::-;14774:2;14769:3;14765:12;14758:19;;14563:220;;;:::o;14789:366::-;14931:3;14952:67;15016:2;15011:3;14952:67;:::i;:::-;14945:74;;15028:93;15117:3;15028:93;:::i;:::-;15146:2;15141:3;15137:12;15130:19;;14935:220;;;:::o;15161:366::-;15303:3;15324:67;15388:2;15383:3;15324:67;:::i;:::-;15317:74;;15400:93;15489:3;15400:93;:::i;:::-;15518:2;15513:3;15509:12;15502:19;;15307:220;;;:::o;15533:366::-;15675:3;15696:67;15760:2;15755:3;15696:67;:::i;:::-;15689:74;;15772:93;15861:3;15772:93;:::i;:::-;15890:2;15885:3;15881:12;15874:19;;15679:220;;;:::o;15905:366::-;16047:3;16068:67;16132:2;16127:3;16068:67;:::i;:::-;16061:74;;16144:93;16233:3;16144:93;:::i;:::-;16262:2;16257:3;16253:12;16246:19;;16051:220;;;:::o;16277:366::-;16419:3;16440:67;16504:2;16499:3;16440:67;:::i;:::-;16433:74;;16516:93;16605:3;16516:93;:::i;:::-;16634:2;16629:3;16625:12;16618:19;;16423:220;;;:::o;16649:366::-;16791:3;16812:67;16876:2;16871:3;16812:67;:::i;:::-;16805:74;;16888:93;16977:3;16888:93;:::i;:::-;17006:2;17001:3;16997:12;16990:19;;16795:220;;;:::o;17021:366::-;17163:3;17184:67;17248:2;17243:3;17184:67;:::i;:::-;17177:74;;17260:93;17349:3;17260:93;:::i;:::-;17378:2;17373:3;17369:12;17362:19;;17167:220;;;:::o;17393:366::-;17535:3;17556:67;17620:2;17615:3;17556:67;:::i;:::-;17549:74;;17632:93;17721:3;17632:93;:::i;:::-;17750:2;17745:3;17741:12;17734:19;;17539:220;;;:::o;17765:400::-;17925:3;17946:84;18028:1;18023:3;17946:84;:::i;:::-;17939:91;;18039:93;18128:3;18039:93;:::i;:::-;18157:1;18152:3;18148:11;18141:18;;17929:236;;;:::o;18171:366::-;18313:3;18334:67;18398:2;18393:3;18334:67;:::i;:::-;18327:74;;18410:93;18499:3;18410:93;:::i;:::-;18528:2;18523:3;18519:12;18512:19;;18317:220;;;:::o;18543:366::-;18685:3;18706:67;18770:2;18765:3;18706:67;:::i;:::-;18699:74;;18782:93;18871:3;18782:93;:::i;:::-;18900:2;18895:3;18891:12;18884:19;;18689:220;;;:::o;18915:398::-;19074:3;19095:83;19176:1;19171:3;19095:83;:::i;:::-;19088:90;;19187:93;19276:3;19187:93;:::i;:::-;19305:1;19300:3;19296:11;19289:18;;19078:235;;;:::o;19319:366::-;19461:3;19482:67;19546:2;19541:3;19482:67;:::i;:::-;19475:74;;19558:93;19647:3;19558:93;:::i;:::-;19676:2;19671:3;19667:12;19660:19;;19465:220;;;:::o;19691:366::-;19833:3;19854:67;19918:2;19913:3;19854:67;:::i;:::-;19847:74;;19930:93;20019:3;19930:93;:::i;:::-;20048:2;20043:3;20039:12;20032:19;;19837:220;;;:::o;20063:366::-;20205:3;20226:67;20290:2;20285:3;20226:67;:::i;:::-;20219:74;;20302:93;20391:3;20302:93;:::i;:::-;20420:2;20415:3;20411:12;20404:19;;20209:220;;;:::o;20435:366::-;20577:3;20598:67;20662:2;20657:3;20598:67;:::i;:::-;20591:74;;20674:93;20763:3;20674:93;:::i;:::-;20792:2;20787:3;20783:12;20776:19;;20581:220;;;:::o;20807:366::-;20949:3;20970:67;21034:2;21029:3;20970:67;:::i;:::-;20963:74;;21046:93;21135:3;21046:93;:::i;:::-;21164:2;21159:3;21155:12;21148:19;;20953:220;;;:::o;21179:108::-;21256:24;21274:5;21256:24;:::i;:::-;21251:3;21244:37;21234:53;;:::o;21293:118::-;21380:24;21398:5;21380:24;:::i;:::-;21375:3;21368:37;21358:53;;:::o;21417:435::-;21597:3;21619:95;21710:3;21701:6;21619:95;:::i;:::-;21612:102;;21731:95;21822:3;21813:6;21731:95;:::i;:::-;21724:102;;21843:3;21836:10;;21601:251;;;;;:::o;21858:541::-;22091:3;22113:95;22204:3;22195:6;22113:95;:::i;:::-;22106:102;;22225:148;22369:3;22225:148;:::i;:::-;22218:155;;22390:3;22383:10;;22095:304;;;;:::o;22405:695::-;22683:3;22705:92;22793:3;22784:6;22705:92;:::i;:::-;22698:99;;22814:95;22905:3;22896:6;22814:95;:::i;:::-;22807:102;;22926:148;23070:3;22926:148;:::i;:::-;22919:155;;23091:3;23084:10;;22687:413;;;;;:::o;23106:379::-;23290:3;23312:147;23455:3;23312:147;:::i;:::-;23305:154;;23476:3;23469:10;;23294:191;;;:::o;23491:222::-;23584:4;23622:2;23611:9;23607:18;23599:26;;23635:71;23703:1;23692:9;23688:17;23679:6;23635:71;:::i;:::-;23589:124;;;;:::o;23719:640::-;23914:4;23952:3;23941:9;23937:19;23929:27;;23966:71;24034:1;24023:9;24019:17;24010:6;23966:71;:::i;:::-;24047:72;24115:2;24104:9;24100:18;24091:6;24047:72;:::i;:::-;24129;24197:2;24186:9;24182:18;24173:6;24129:72;:::i;:::-;24248:9;24242:4;24238:20;24233:2;24222:9;24218:18;24211:48;24276:76;24347:4;24338:6;24276:76;:::i;:::-;24268:84;;23919:440;;;;;;;:::o;24365:373::-;24508:4;24546:2;24535:9;24531:18;24523:26;;24595:9;24589:4;24585:20;24581:1;24570:9;24566:17;24559:47;24623:108;24726:4;24717:6;24623:108;:::i;:::-;24615:116;;24513:225;;;;:::o;24744:210::-;24831:4;24869:2;24858:9;24854:18;24846:26;;24882:65;24944:1;24933:9;24929:17;24920:6;24882:65;:::i;:::-;24836:118;;;;:::o;24960:313::-;25073:4;25111:2;25100:9;25096:18;25088:26;;25160:9;25154:4;25150:20;25146:1;25135:9;25131:17;25124:47;25188:78;25261:4;25252:6;25188:78;:::i;:::-;25180:86;;25078:195;;;;:::o;25279:419::-;25445:4;25483:2;25472:9;25468:18;25460:26;;25532:9;25526:4;25522:20;25518:1;25507:9;25503:17;25496:47;25560:131;25686:4;25560:131;:::i;:::-;25552:139;;25450:248;;;:::o;25704:419::-;25870:4;25908:2;25897:9;25893:18;25885:26;;25957:9;25951:4;25947:20;25943:1;25932:9;25928:17;25921:47;25985:131;26111:4;25985:131;:::i;:::-;25977:139;;25875:248;;;:::o;26129:419::-;26295:4;26333:2;26322:9;26318:18;26310:26;;26382:9;26376:4;26372:20;26368:1;26357:9;26353:17;26346:47;26410:131;26536:4;26410:131;:::i;:::-;26402:139;;26300:248;;;:::o;26554:419::-;26720:4;26758:2;26747:9;26743:18;26735:26;;26807:9;26801:4;26797:20;26793:1;26782:9;26778:17;26771:47;26835:131;26961:4;26835:131;:::i;:::-;26827:139;;26725:248;;;:::o;26979:419::-;27145:4;27183:2;27172:9;27168:18;27160:26;;27232:9;27226:4;27222:20;27218:1;27207:9;27203:17;27196:47;27260:131;27386:4;27260:131;:::i;:::-;27252:139;;27150:248;;;:::o;27404:419::-;27570:4;27608:2;27597:9;27593:18;27585:26;;27657:9;27651:4;27647:20;27643:1;27632:9;27628:17;27621:47;27685:131;27811:4;27685:131;:::i;:::-;27677:139;;27575:248;;;:::o;27829:419::-;27995:4;28033:2;28022:9;28018:18;28010:26;;28082:9;28076:4;28072:20;28068:1;28057:9;28053:17;28046:47;28110:131;28236:4;28110:131;:::i;:::-;28102:139;;28000:248;;;:::o;28254:419::-;28420:4;28458:2;28447:9;28443:18;28435:26;;28507:9;28501:4;28497:20;28493:1;28482:9;28478:17;28471:47;28535:131;28661:4;28535:131;:::i;:::-;28527:139;;28425:248;;;:::o;28679:419::-;28845:4;28883:2;28872:9;28868:18;28860:26;;28932:9;28926:4;28922:20;28918:1;28907:9;28903:17;28896:47;28960:131;29086:4;28960:131;:::i;:::-;28952:139;;28850:248;;;:::o;29104:419::-;29270:4;29308:2;29297:9;29293:18;29285:26;;29357:9;29351:4;29347:20;29343:1;29332:9;29328:17;29321:47;29385:131;29511:4;29385:131;:::i;:::-;29377:139;;29275:248;;;:::o;29529:419::-;29695:4;29733:2;29722:9;29718:18;29710:26;;29782:9;29776:4;29772:20;29768:1;29757:9;29753:17;29746:47;29810:131;29936:4;29810:131;:::i;:::-;29802:139;;29700:248;;;:::o;29954:419::-;30120:4;30158:2;30147:9;30143:18;30135:26;;30207:9;30201:4;30197:20;30193:1;30182:9;30178:17;30171:47;30235:131;30361:4;30235:131;:::i;:::-;30227:139;;30125:248;;;:::o;30379:419::-;30545:4;30583:2;30572:9;30568:18;30560:26;;30632:9;30626:4;30622:20;30618:1;30607:9;30603:17;30596:47;30660:131;30786:4;30660:131;:::i;:::-;30652:139;;30550:248;;;:::o;30804:419::-;30970:4;31008:2;30997:9;30993:18;30985:26;;31057:9;31051:4;31047:20;31043:1;31032:9;31028:17;31021:47;31085:131;31211:4;31085:131;:::i;:::-;31077:139;;30975:248;;;:::o;31229:419::-;31395:4;31433:2;31422:9;31418:18;31410:26;;31482:9;31476:4;31472:20;31468:1;31457:9;31453:17;31446:47;31510:131;31636:4;31510:131;:::i;:::-;31502:139;;31400:248;;;:::o;31654:419::-;31820:4;31858:2;31847:9;31843:18;31835:26;;31907:9;31901:4;31897:20;31893:1;31882:9;31878:17;31871:47;31935:131;32061:4;31935:131;:::i;:::-;31927:139;;31825:248;;;:::o;32079:419::-;32245:4;32283:2;32272:9;32268:18;32260:26;;32332:9;32326:4;32322:20;32318:1;32307:9;32303:17;32296:47;32360:131;32486:4;32360:131;:::i;:::-;32352:139;;32250:248;;;:::o;32504:419::-;32670:4;32708:2;32697:9;32693:18;32685:26;;32757:9;32751:4;32747:20;32743:1;32732:9;32728:17;32721:47;32785:131;32911:4;32785:131;:::i;:::-;32777:139;;32675:248;;;:::o;32929:419::-;33095:4;33133:2;33122:9;33118:18;33110:26;;33182:9;33176:4;33172:20;33168:1;33157:9;33153:17;33146:47;33210:131;33336:4;33210:131;:::i;:::-;33202:139;;33100:248;;;:::o;33354:419::-;33520:4;33558:2;33547:9;33543:18;33535:26;;33607:9;33601:4;33597:20;33593:1;33582:9;33578:17;33571:47;33635:131;33761:4;33635:131;:::i;:::-;33627:139;;33525:248;;;:::o;33779:419::-;33945:4;33983:2;33972:9;33968:18;33960:26;;34032:9;34026:4;34022:20;34018:1;34007:9;34003:17;33996:47;34060:131;34186:4;34060:131;:::i;:::-;34052:139;;33950:248;;;:::o;34204:419::-;34370:4;34408:2;34397:9;34393:18;34385:26;;34457:9;34451:4;34447:20;34443:1;34432:9;34428:17;34421:47;34485:131;34611:4;34485:131;:::i;:::-;34477:139;;34375:248;;;:::o;34629:419::-;34795:4;34833:2;34822:9;34818:18;34810:26;;34882:9;34876:4;34872:20;34868:1;34857:9;34853:17;34846:47;34910:131;35036:4;34910:131;:::i;:::-;34902:139;;34800:248;;;:::o;35054:419::-;35220:4;35258:2;35247:9;35243:18;35235:26;;35307:9;35301:4;35297:20;35293:1;35282:9;35278:17;35271:47;35335:131;35461:4;35335:131;:::i;:::-;35327:139;;35225:248;;;:::o;35479:419::-;35645:4;35683:2;35672:9;35668:18;35660:26;;35732:9;35726:4;35722:20;35718:1;35707:9;35703:17;35696:47;35760:131;35886:4;35760:131;:::i;:::-;35752:139;;35650:248;;;:::o;35904:419::-;36070:4;36108:2;36097:9;36093:18;36085:26;;36157:9;36151:4;36147:20;36143:1;36132:9;36128:17;36121:47;36185:131;36311:4;36185:131;:::i;:::-;36177:139;;36075:248;;;:::o;36329:222::-;36422:4;36460:2;36449:9;36445:18;36437:26;;36473:71;36541:1;36530:9;36526:17;36517:6;36473:71;:::i;:::-;36427:124;;;;:::o;36557:129::-;36591:6;36618:20;;:::i;:::-;36608:30;;36647:33;36675:4;36667:6;36647:33;:::i;:::-;36598:88;;;:::o;36692:75::-;36725:6;36758:2;36752:9;36742:19;;36732:35;:::o;36773:311::-;36850:4;36940:18;36932:6;36929:30;36926:2;;;36962:18;;:::i;:::-;36926:2;37012:4;37004:6;37000:17;36992:25;;37072:4;37066;37062:15;37054:23;;36855:229;;;:::o;37090:307::-;37151:4;37241:18;37233:6;37230:30;37227:2;;;37263:18;;:::i;:::-;37227:2;37301:29;37323:6;37301:29;:::i;:::-;37293:37;;37385:4;37379;37375:15;37367:23;;37156:241;;;:::o;37403:132::-;37470:4;37493:3;37485:11;;37523:4;37518:3;37514:14;37506:22;;37475:60;;;:::o;37541:141::-;37590:4;37613:3;37605:11;;37636:3;37633:1;37626:14;37670:4;37667:1;37657:18;37649:26;;37595:87;;;:::o;37688:114::-;37755:6;37789:5;37783:12;37773:22;;37762:40;;;:::o;37808:98::-;37859:6;37893:5;37887:12;37877:22;;37866:40;;;:::o;37912:99::-;37964:6;37998:5;37992:12;37982:22;;37971:40;;;:::o;38017:113::-;38087:4;38119;38114:3;38110:14;38102:22;;38092:38;;;:::o;38136:184::-;38235:11;38269:6;38264:3;38257:19;38309:4;38304:3;38300:14;38285:29;;38247:73;;;;:::o;38326:168::-;38409:11;38443:6;38438:3;38431:19;38483:4;38478:3;38474:14;38459:29;;38421:73;;;;:::o;38500:147::-;38601:11;38638:3;38623:18;;38613:34;;;;:::o;38653:169::-;38737:11;38771:6;38766:3;38759:19;38811:4;38806:3;38802:14;38787:29;;38749:73;;;;:::o;38828:148::-;38930:11;38967:3;38952:18;;38942:34;;;;:::o;38982:305::-;39022:3;39041:20;39059:1;39041:20;:::i;:::-;39036:25;;39075:20;39093:1;39075:20;:::i;:::-;39070:25;;39229:1;39161:66;39157:74;39154:1;39151:81;39148:2;;;39235:18;;:::i;:::-;39148:2;39279:1;39276;39272:9;39265:16;;39026:261;;;;:::o;39293:185::-;39333:1;39350:20;39368:1;39350:20;:::i;:::-;39345:25;;39384:20;39402:1;39384:20;:::i;:::-;39379:25;;39423:1;39413:2;;39428:18;;:::i;:::-;39413:2;39470:1;39467;39463:9;39458:14;;39335:143;;;;:::o;39484:348::-;39524:7;39547:20;39565:1;39547:20;:::i;:::-;39542:25;;39581:20;39599:1;39581:20;:::i;:::-;39576:25;;39769:1;39701:66;39697:74;39694:1;39691:81;39686:1;39679:9;39672:17;39668:105;39665:2;;;39776:18;;:::i;:::-;39665:2;39824:1;39821;39817:9;39806:20;;39532:300;;;;:::o;39838:191::-;39878:4;39898:20;39916:1;39898:20;:::i;:::-;39893:25;;39932:20;39950:1;39932:20;:::i;:::-;39927:25;;39971:1;39968;39965:8;39962:2;;;39976:18;;:::i;:::-;39962:2;40021:1;40018;40014:9;40006:17;;39883:146;;;;:::o;40035:96::-;40072:7;40101:24;40119:5;40101:24;:::i;:::-;40090:35;;40080:51;;;:::o;40137:90::-;40171:7;40214:5;40207:13;40200:21;40189:32;;40179:48;;;:::o;40233:149::-;40269:7;40309:66;40302:5;40298:78;40287:89;;40277:105;;;:::o;40388:126::-;40425:7;40465:42;40458:5;40454:54;40443:65;;40433:81;;;:::o;40520:77::-;40557:7;40586:5;40575:16;;40565:32;;;:::o;40603:154::-;40687:6;40682:3;40677;40664:30;40749:1;40740:6;40735:3;40731:16;40724:27;40654:103;;;:::o;40763:307::-;40831:1;40841:113;40855:6;40852:1;40849:13;40841:113;;;40940:1;40935:3;40931:11;40925:18;40921:1;40916:3;40912:11;40905:39;40877:2;40874:1;40870:10;40865:15;;40841:113;;;40972:6;40969:1;40966:13;40963:2;;;41052:1;41043:6;41038:3;41034:16;41027:27;40963:2;40812:258;;;;:::o;41076:320::-;41120:6;41157:1;41151:4;41147:12;41137:22;;41204:1;41198:4;41194:12;41225:18;41215:2;;41281:4;41273:6;41269:17;41259:27;;41215:2;41343;41335:6;41332:14;41312:18;41309:38;41306:2;;;41362:18;;:::i;:::-;41306:2;41127:269;;;;:::o;41402:281::-;41485:27;41507:4;41485:27;:::i;:::-;41477:6;41473:40;41615:6;41603:10;41600:22;41579:18;41567:10;41564:34;41561:62;41558:2;;;41626:18;;:::i;:::-;41558:2;41666:10;41662:2;41655:22;41445:238;;;:::o;41689:233::-;41728:3;41751:24;41769:5;41751:24;:::i;:::-;41742:33;;41797:66;41790:5;41787:77;41784:2;;;41867:18;;:::i;:::-;41784:2;41914:1;41907:5;41903:13;41896:20;;41732:190;;;:::o;41928:176::-;41960:1;41977:20;41995:1;41977:20;:::i;:::-;41972:25;;42011:20;42029:1;42011:20;:::i;:::-;42006:25;;42050:1;42040:2;;42055:18;;:::i;:::-;42040:2;42096:1;42093;42089:9;42084:14;;41962:142;;;;:::o;42110:180::-;42158:77;42155:1;42148:88;42255:4;42252:1;42245:15;42279:4;42276:1;42269:15;42296:180;42344:77;42341:1;42334:88;42441:4;42438:1;42431:15;42465:4;42462:1;42455:15;42482:180;42530:77;42527:1;42520:88;42627:4;42624:1;42617:15;42651:4;42648:1;42641:15;42668:180;42716:77;42713:1;42706:88;42813:4;42810:1;42803:15;42837:4;42834:1;42827:15;42854:102;42895:6;42946:2;42942:7;42937:2;42930:5;42926:14;42922:28;42912:38;;42902:54;;;:::o;42962:165::-;43102:17;43098:1;43090:6;43086:14;43079:41;43068:59;:::o;43133:179::-;43273:31;43269:1;43261:6;43257:14;43250:55;43239:73;:::o;43318:230::-;43458:34;43454:1;43446:6;43442:14;43435:58;43527:13;43522:2;43514:6;43510:15;43503:38;43424:124;:::o;43554:237::-;43694:34;43690:1;43682:6;43678:14;43671:58;43763:20;43758:2;43750:6;43746:15;43739:45;43660:131;:::o;43797:225::-;43937:34;43933:1;43925:6;43921:14;43914:58;44006:8;44001:2;43993:6;43989:15;43982:33;43903:119;:::o;44028:224::-;44168:34;44164:1;44156:6;44152:14;44145:58;44237:7;44232:2;44224:6;44220:15;44213:32;44134:118;:::o;44258:178::-;44398:30;44394:1;44386:6;44382:14;44375:54;44364:72;:::o;44442:223::-;44582:34;44578:1;44570:6;44566:14;44559:58;44651:6;44646:2;44638:6;44634:15;44627:31;44548:117;:::o;44671:175::-;44811:27;44807:1;44799:6;44795:14;44788:51;44777:69;:::o;44852:170::-;44992:22;44988:1;44980:6;44976:14;44969:46;44958:64;:::o;45028:173::-;45168:25;45164:1;45156:6;45152:14;45145:49;45134:67;:::o;45207:231::-;45347:34;45343:1;45335:6;45331:14;45324:58;45416:14;45411:2;45403:6;45399:15;45392:39;45313:125;:::o;45444:243::-;45584:34;45580:1;45572:6;45568:14;45561:58;45653:26;45648:2;45640:6;45636:15;45629:51;45550:137;:::o;45693:229::-;45833:34;45829:1;45821:6;45817:14;45810:58;45902:12;45897:2;45889:6;45885:15;45878:37;45799:123;:::o;45928:228::-;46068:34;46064:1;46056:6;46052:14;46045:58;46137:11;46132:2;46124:6;46120:15;46113:36;46034:122;:::o;46162:233::-;46302:34;46298:1;46290:6;46286:14;46279:58;46371:16;46366:2;46358:6;46354:15;46347:41;46268:127;:::o;46401:182::-;46541:34;46537:1;46529:6;46525:14;46518:58;46507:76;:::o;46589:162::-;46729:14;46725:1;46717:6;46713:14;46706:38;46695:56;:::o;46757:231::-;46897:34;46893:1;46885:6;46881:14;46874:58;46966:14;46961:2;46953:6;46949:15;46942:39;46863:125;:::o;46994:155::-;47134:7;47130:1;47122:6;47118:14;47111:31;47100:49;:::o;47155:182::-;47295:34;47291:1;47283:6;47279:14;47272:58;47261:76;:::o;47343:220::-;47483:34;47479:1;47471:6;47467:14;47460:58;47552:3;47547:2;47539:6;47535:15;47528:28;47449:114;:::o;47569:::-;47675:8;:::o;47689:236::-;47829:34;47825:1;47817:6;47813:14;47806:58;47898:19;47893:2;47885:6;47881:15;47874:44;47795:130;:::o;47931:231::-;48071:34;48067:1;48059:6;48055:14;48048:58;48140:14;48135:2;48127:6;48123:15;48116:39;48037:125;:::o;48168:220::-;48308:34;48304:1;48296:6;48292:14;48285:58;48377:3;48372:2;48364:6;48360:15;48353:28;48274:114;:::o;48394:171::-;48534:23;48530:1;48522:6;48518:14;48511:47;48500:65;:::o;48571:167::-;48711:19;48707:1;48699:6;48695:14;48688:43;48677:61;:::o;48744:122::-;48817:24;48835:5;48817:24;:::i;:::-;48810:5;48807:35;48797:2;;48856:1;48853;48846:12;48797:2;48787:79;:::o;48872:116::-;48942:21;48957:5;48942:21;:::i;:::-;48935:5;48932:32;48922:2;;48978:1;48975;48968:12;48922:2;48912:76;:::o;48994:120::-;49066:23;49083:5;49066:23;:::i;:::-;49059:5;49056:34;49046:2;;49104:1;49101;49094:12;49046:2;49036:78;:::o;49120:122::-;49193:24;49211:5;49193:24;:::i;:::-;49186:5;49183:35;49173:2;;49232:1;49229;49222:12;49173:2;49163:79;:::o
Swarm Source
ipfs://3db5705606b6616aa4ce01cea7136e5476eaa35fc61536e6c2dba679bfbe7f0f
Loading...
Loading
[ 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.