ERC-721
NFT
Overview
Max Total Supply
4,123 TNWG
Holders
2,361
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 TNWGLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TheNiftyWayGalaxy
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity Multiple files format)
/** * @title TheNiftyWayGalaxy contract * @dev Extends ERC721 Non-Fungible Token Standard basic implementation * SPDX-License-Identifier: MIT */ pragma solidity ^0.8.9; import "./Ownable.sol"; import "./ERC721Enumerable.sol"; import "./MerkleProof.sol"; contract TheNiftyWayGalaxy is ERC721, ERC721Enumerable, Ownable { // Whitelist Merkle Root bytes32 public whitelistMerkleroot; // Mapping from owner to nifties minted in pre-sale mapping(address => uint256) private _mintedPresale; // Mapping from owner to nifties minted in public sale mapping(address => uint256) private _mintedPublicsale; // Nifty price for public sale uint256 public constant niftySalePrice = 0.09 ether; // Should we use ether or wei? // Nifty price for public sale uint256 public constant niftyPresalePrice = 0.07 ether; // Should we use ether or wei? // Max Nifties quantity a user can mint at a time in pre-sale uint256 public constant MAX_PRESALE_MINT = 5; // Max Nifties quantity a user can mint at a time in publicsale uint256 public constant MAX_PUBLIC_MINT = 10; // Numbers of Nifties the team will keep uint256 public constant TEAM_NIFTIES = 222; // Numbers of Nifties the team will keep uint256 private constant AIRDROP_NIFTIES = 16; // Max TNWG supply uint256 public MAX_NIFTIES; // Max TNWG presale supply uint256 public MAX_PRESALE_NIFTIES = 1947; // Edition Lock bool public editionLock = false; // Public sale toggle bool public isSaleActive = false; // Presale toggle bool public isPresaleActive = false; // Indicates if team already got Nifties. bool public areNiftiesReserved = false; // Original provenance string public originalProvenance = "6cef215015bfbc000a33f23d8649a647fa83ca26e0e60fbbb51a681b14921da6"; // Post-deterministic shuffle provenance string public finalProvenance; // Metadata base URI string public baseURI = ""; /** * Smart contract constructor. * @param name Full collection name * @param symbol Collection symbol * @param maxNftSupply Max collection supply */ constructor(string memory name, string memory symbol, uint256 maxNftSupply) ERC721(name, symbol) { MAX_NIFTIES = maxNftSupply; reserveAirdropNifties(AIRDROP_NIFTIES); } /** * Mints public sale Nifties. * @param numberOfTokens Number of tokens to be minted. */ function mint(uint numberOfTokens) public payable { require(isSaleActive, "Sale has not started yet."); require(_mintedPublicsale[msg.sender] + numberOfTokens <= MAX_PUBLIC_MINT, "Can only mint 10 nifties per wallet in public sale CONTRACT"); require(totalSupply() + numberOfTokens <= MAX_NIFTIES, "Purchase would exceed max supply of Nifties"); require(niftySalePrice * numberOfTokens <= msg.value, "Ether value sent is not enough"); for(uint i = 0; i < numberOfTokens; i++) { uint mintIndex = totalSupply(); if (totalSupply() < MAX_NIFTIES) { _mintedPublicsale[msg.sender]++; _safeMint(msg.sender, mintIndex); } } } /** * Mints pre-sale Nifties if isPresaleActive is true. * @param proof Hashes needed to reconstruct the merkle root. * @param numberOfTokens Number of tokens to be minted. */ function mintPresale( bytes32[] calldata proof, uint256 numberOfTokens ) external payable { require(isPresaleActive, "Presale has not started yet."); require(!isSaleActive, "Public sale is active. You shouldn't mint here."); require(_verify(_leaf(msg.sender), proof), "Invalid proof / Not whitelisted"); require(_mintedPresale[msg.sender] + numberOfTokens <= MAX_PRESALE_MINT, "Can only mint 5 nifties per wallet in presale"); require(totalSupply() + numberOfTokens <= MAX_PRESALE_NIFTIES, "Purchase would exceed max supply of presale Nifties"); require(niftyPresalePrice * numberOfTokens <= msg.value, "Ether value sent is not enough"); for(uint i = 0; i < numberOfTokens; i++) { uint mintIndex = totalSupply(); if (totalSupply() < MAX_PRESALE_NIFTIES) { _mintedPresale[msg.sender]++; _safeMint(msg.sender, mintIndex); } } } /** * Set Nifties aside for the Aidrop. * Only called once by the constructor * @param numberOfTokens Number of tokens to be minted. */ function reserveAirdropNifties(uint numberOfTokens) internal{ uint supply = totalSupply(); for (uint i = 0; i < numberOfTokens; i++) { _safeMint(msg.sender, supply + i); } } /** * Set Nifties aside for the team. * Only can be called once after sale is active. * @param numberOfTokens Number of tokens to be minted. */ function reserveTeamNifties(uint256 numberOfTokens) public onlyOwner{ uint256 supply = totalSupply(); require(!areNiftiesReserved, "Already reserved some Nifties for the team."); require(supply + TEAM_NIFTIES <= MAX_NIFTIES, "Purchase would exceed max supply of Nifties"); for (uint256 i = 0; i < numberOfTokens; i++) { _safeMint(msg.sender, supply + i); } areNiftiesReserved = true; } /** * Set provenance once it's calculated. * This function can be locked. * @param provenanceSelector Provenance selector. * @param newProvenance New provenance hash. */ function setProvenanceHash(uint provenanceSelector, string memory newProvenance) public onlyOwner { require(!editionLock, "Provenance hash editing is locked."); if(provenanceSelector == 0){ originalProvenance = newProvenance; } else{ finalProvenance = newProvenance; } } /** * Set new baseURI. * @param newBaseURI New base URI. */ function setBaseURI(string memory newBaseURI) public onlyOwner { require(!editionLock, "Base URI editing is locked."); baseURI = newBaseURI; } /** * Set whitelist merkle root. * @param newRoot New whitelist merkle root. */ function setMerkleroot(bytes32 newRoot) public onlyOwner { whitelistMerkleroot = newRoot; } /** * Sets editionLock and editionLock to true. */ function setEditionLock() public onlyOwner{ editionLock = true; } /** * Starts/stops pre-sale or public sale. * @param optionId If set to 0, inverts pre-sale value. * If set to 1, inverts public sale value */ function toggleSale(uint optionId) public onlyOwner{ if(optionId == 0){ isPresaleActive = !isPresaleActive; }else if(optionId == 1){ isSaleActive = !isSaleActive; } } /** * Sets nex max supply * @param newMaxSupply New MAX_NIFTIES value * New value should be lower than totalSupply() * New value should be lower than MAX_NIFTIES */ function setMaxSupply(uint newMaxSupply) public onlyOwner{ require(newMaxSupply > totalSupply(), "New max supply is lower than current supply."); require(newMaxSupply < MAX_NIFTIES, "New max supply is greater than MAX_NIFTIES."); MAX_NIFTIES = newMaxSupply; } /** * Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. */ function _baseURI() internal view override returns (string memory) { return baseURI; } /** * Transfers contract's ETH balance to the contract owner. */ function withdrawMoney() public onlyOwner { address payable to = payable(msg.sender); to.transfer(address(this).balance); } /** * Withdraws money to the addres specified in the first parameter. * @param to Receiver address. */ function withdrawMoneyTo(address to) public onlyOwner{ address payable payableTo = payable(to); payableTo.transfer(address(this).balance); } /** * Uses ERC721Enumerable _beforeTokenTransfer() implementation. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal override(ERC721, ERC721Enumerable){ ERC721Enumerable._beforeTokenTransfer(from, to, amount); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId; } /** * Generates a leaf node. * @param account Should be msg.sender address. */ function _leaf(address account) internal pure returns (bytes32) { return keccak256(abi.encodePacked(account)); } /** * Verifies if the input leaf is part of the merkle tree. * @param leaf Merkle leaf node. * @param proof Hashes needed to reconstruct the merkle root. */ function _verify(bytes32 leaf, bytes32[] memory proof) internal view returns (bool) { return MerkleProof.verify(proof, whitelistMerkleroot, leaf); } } // SHA256("Cheesy was here").toString() // c492a5fc1c436167458dd6557cb06e85d440044abc1d89c5679619773e98765f // SHA256("Sx Dx was here").toString() // e7dbbf3a9a3fb3427f22b9e6c287dabe2b7ae42e4976185ae20f9bc7cab04cbc // SHA256(ID).toString() // bcb615c96e0565198e0cec38bcfb3d8fedade1d05998801d794f35ac396e41f1
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT 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 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 pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT 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 pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT 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 pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } }
// SPDX-License-Identifier: MIT 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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"maxNftSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_NIFTIES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRESALE_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRESALE_NIFTIES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PUBLIC_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_NIFTIES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areNiftiesReserved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"editionLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalProvenance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"niftyPresalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"niftySalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalProvenance","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":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"reserveTeamNifties","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":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setEditionLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newRoot","type":"bytes32"}],"name":"setMerkleroot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"provenanceSelector","type":"uint256"},{"internalType":"string","name":"newProvenance","type":"string"}],"name":"setProvenanceHash","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":"optionId","type":"uint256"}],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","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":"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":[],"name":"whitelistMerkleroot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdrawMoneyTo","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405261079b600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055506000601060036101000a81548160ff02191690831515021790555060405180606001604052806040815260200162006a466040913960119080519060200190620000a792919062000cb5565b506040518060200160405280600081525060139080519060200190620000cf92919062000cb5565b50348015620000dd57600080fd5b5060405162006a8638038062006a86833981810160405281019062000103919062000f3d565b828281600090805190602001906200011d92919062000cb5565b5080600190805190602001906200013692919062000cb5565b505050620001596200014d6200017b60201b60201c565b6200018360201b60201c565b80600e819055506200017260106200024960201b60201c565b5050506200156a565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006200025b620002a360201b60201c565b905060005b828110156200029e57620002883382846200027c919062001006565b620002b060201b60201c565b8080620002959062001063565b91505062000260565b505050565b6000600880549050905090565b620002d2828260405180602001604052806000815250620002d660201b60201c565b5050565b620002e883836200034460201b60201c565b620002fd60008484846200052a60201b60201c565b6200033f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003369062001138565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ae90620011aa565b60405180910390fd5b620003c881620006e460201b60201c565b156200040b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000402906200121c565b60405180910390fd5b6200041f600083836200075060201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000471919062001006565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620005588473ffffffffffffffffffffffffffffffffffffffff166200076d60201b6200257b1760201c565b15620006d7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200058a6200017b60201b60201c565b8786866040518563ffffffff1660e01b8152600401620005ae9493929190620012f1565b602060405180830381600087803b158015620005c957600080fd5b505af1925050508015620005fd57506040513d601f19601f82011682018060405250810190620005fa9190620013a2565b60015b62000686573d806000811462000630576040519150601f19603f3d011682016040523d82523d6000602084013e62000635565b606091505b506000815114156200067e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006759062001138565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620006dc565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620007688383836200078060201b6200258e1760201c565b505050565b600080823b905060008111915050919050565b62000798838383620008c760201b620026a21760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620007e557620007df81620008cc60201b60201c565b6200082d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200082c576200082b83826200091560201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200087a57620008748162000a9260201b60201c565b620008c2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620008c157620008c0828262000b6e60201b60201c565b5b5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016200092f8462000bfa60201b620015f21760201c565b6200093b9190620013d4565b905060006007600084815260200190815260200160002054905081811462000a21576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000aa89190620013d4565b905060006009600084815260200190815260200160002054905060006008838154811062000adb5762000ada6200140f565b5b90600052602060002001549050806008838154811062000b005762000aff6200140f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000b525762000b516200143e565b5b6001900381819060005260206000200160009055905550505050565b600062000b868362000bfa60201b620015f21760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c6590620014e3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000cc39062001534565b90600052602060002090601f01602090048101928262000ce7576000855562000d33565b82601f1062000d0257805160ff191683800117855562000d33565b8280016001018555821562000d33579182015b8281111562000d3257825182559160200191906001019062000d15565b5b50905062000d42919062000d46565b5090565b5b8082111562000d6157600081600090555060010162000d47565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000dce8262000d83565b810181811067ffffffffffffffff8211171562000df05762000def62000d94565b5b80604052505050565b600062000e0562000d65565b905062000e13828262000dc3565b919050565b600067ffffffffffffffff82111562000e365762000e3562000d94565b5b62000e418262000d83565b9050602081019050919050565b60005b8381101562000e6e57808201518184015260208101905062000e51565b8381111562000e7e576000848401525b50505050565b600062000e9b62000e958462000e18565b62000df9565b90508281526020810184848401111562000eba5762000eb962000d7e565b5b62000ec784828562000e4e565b509392505050565b600082601f83011262000ee75762000ee662000d79565b5b815162000ef984826020860162000e84565b91505092915050565b6000819050919050565b62000f178162000f02565b811462000f2357600080fd5b50565b60008151905062000f378162000f0c565b92915050565b60008060006060848603121562000f595762000f5862000d6f565b5b600084015167ffffffffffffffff81111562000f7a5762000f7962000d74565b5b62000f888682870162000ecf565b935050602084015167ffffffffffffffff81111562000fac5762000fab62000d74565b5b62000fba8682870162000ecf565b925050604062000fcd8682870162000f26565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010138262000f02565b9150620010208362000f02565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001058576200105762000fd7565b5b828201905092915050565b6000620010708262000f02565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620010a657620010a562000fd7565b5b600182019050919050565b600082825260208201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600062001120603283620010b1565b91506200112d82620010c2565b604082019050919050565b60006020820190508181036000830152620011538162001111565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600062001192602083620010b1565b91506200119f826200115a565b602082019050919050565b60006020820190508181036000830152620011c58162001183565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600062001204601c83620010b1565b91506200121182620011cc565b602082019050919050565b600060208201905081810360008301526200123781620011f5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200126b826200123e565b9050919050565b6200127d816200125e565b82525050565b6200128e8162000f02565b82525050565b600081519050919050565b600082825260208201905092915050565b6000620012bd8262001294565b620012c981856200129f565b9350620012db81856020860162000e4e565b620012e68162000d83565b840191505092915050565b600060808201905062001308600083018762001272565b62001317602083018662001272565b62001326604083018562001283565b81810360608301526200133a8184620012b0565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6200137c8162001345565b81146200138857600080fd5b50565b6000815190506200139c8162001371565b92915050565b600060208284031215620013bb57620013ba62000d6f565b5b6000620013cb848285016200138b565b91505092915050565b6000620013e18262000f02565b9150620013ee8362000f02565b92508282101562001404576200140362000fd7565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000620014cb602a83620010b1565b9150620014d8826200146d565b604082019050919050565b60006020820190508181036000830152620014fe81620014bc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200154d57607f821691505b6020821081141562001564576200156362001505565b5b50919050565b6154cc806200157a6000396000f3fe6080604052600436106102725760003560e01c8063715018a61161014f578063ab579a59116100c1578063e72f98431161007a578063e72f984314610926578063e985e9c51461094f578063ec231f9c1461098c578063ec695e53146109a3578063f1b10ceb146109ce578063f2fde38b146109f957610272565b8063ab579a5914610837578063ac44600214610862578063ad7f1ea114610879578063b88d4fde14610895578063ba08bb80146108be578063c87b56dd146108e957610272565b806392c7254b1161011357806392c7254b1461074857806392f6c4391461077357806395d89b411461079c578063a0712d68146107c7578063a22cb465146107e3578063a70f1fbe1461080c57610272565b8063715018a614610685578063724079211461069c5780638c2f5cb0146106c75780638da5cb5b146106f25780639119a8ee1461071d57610272565b806342842e0e116101e857806360d938dc116101ac57806360d938dc146105615780636352211e1461058c57806365f13097146105c95780636c0360eb146105f45780636f8b44b01461061f57806370a082311461064857610272565b806342842e0e1461047c5780634f6ccce7146104a557806355f804b3146104e2578063564566a81461050b5780635da5f4591461053657610272565b80630b2a41751161023a5780630b2a41751461036e5780630ff8d8a51461039957806315d1c7db146103c257806318160ddd146103eb57806323b872dd146104165780632f745c591461043f57610272565b806301ea47941461027757806301ffc9a7146102a057806306fdde03146102dd578063081812fc14610308578063095ea7b314610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613847565b610a22565b005b3480156102ac57600080fd5b506102c760048036038101906102c291906138fb565b610b2f565b6040516102d49190613943565b60405180910390f35b3480156102e957600080fd5b506102f2610c69565b6040516102ff91906139e6565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613a08565b610cfb565b60405161033c9190613a76565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613abd565b610d80565b005b34801561037a57600080fd5b50610383610e98565b6040516103909190613b0c565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190613b27565b610e9d565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190613a08565b610f69565b005b3480156103f757600080fd5b506104006110e5565b60405161040d9190613b0c565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190613b54565b6110f2565b005b34801561044b57600080fd5b5061046660048036038101906104619190613abd565b611152565b6040516104739190613b0c565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190613b54565b6111f7565b005b3480156104b157600080fd5b506104cc60048036038101906104c79190613a08565b611217565b6040516104d99190613b0c565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190613ba7565b611288565b005b34801561051757600080fd5b5061052061136e565b60405161052d9190613943565b60405180910390f35b34801561054257600080fd5b5061054b611381565b6040516105589190613c09565b60405180910390f35b34801561056d57600080fd5b50610576611387565b6040516105839190613943565b60405180910390f35b34801561059857600080fd5b506105b360048036038101906105ae9190613a08565b61139a565b6040516105c09190613a76565b60405180910390f35b3480156105d557600080fd5b506105de61144c565b6040516105eb9190613b0c565b60405180910390f35b34801561060057600080fd5b50610609611451565b60405161061691906139e6565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190613a08565b6114df565b005b34801561065457600080fd5b5061066f600480360381019061066a9190613b27565b6115f2565b60405161067c9190613b0c565b60405180910390f35b34801561069157600080fd5b5061069a6116aa565b005b3480156106a857600080fd5b506106b1611732565b6040516106be91906139e6565b60405180910390f35b3480156106d357600080fd5b506106dc6117c0565b6040516106e99190613b0c565b60405180910390f35b3480156106fe57600080fd5b506107076117c6565b6040516107149190613a76565b60405180910390f35b34801561072957600080fd5b506107326117f0565b60405161073f9190613943565b60405180910390f35b34801561075457600080fd5b5061075d611803565b60405161076a9190613b0c565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190613c50565b61180e565b005b3480156107a857600080fd5b506107b1611894565b6040516107be91906139e6565b60405180910390f35b6107e160048036038101906107dc9190613a08565b611926565b005b3480156107ef57600080fd5b5061080a60048036038101906108059190613ca9565b611b50565b005b34801561081857600080fd5b50610821611cd1565b60405161082e9190613b0c565b60405180910390f35b34801561084357600080fd5b5061084c611cd6565b6040516108599190613943565b60405180910390f35b34801561086e57600080fd5b50610877611ce9565b005b610893600480360381019061088e9190613d49565b611db4565b005b3480156108a157600080fd5b506108bc60048036038101906108b79190613e4a565b6120c1565b005b3480156108ca57600080fd5b506108d3612123565b6040516108e091906139e6565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b9190613a08565b6121b1565b60405161091d91906139e6565b60405180910390f35b34801561093257600080fd5b5061094d60048036038101906109489190613a08565b612258565b005b34801561095b57600080fd5b5061097660048036038101906109719190613ecd565b612344565b6040516109839190613943565b60405180910390f35b34801561099857600080fd5b506109a16123d8565b005b3480156109af57600080fd5b506109b8612471565b6040516109c59190613b0c565b60405180910390f35b3480156109da57600080fd5b506109e3612477565b6040516109f09190613b0c565b60405180910390f35b348015610a0557600080fd5b50610a206004803603810190610a1b9190613b27565b612483565b005b610a2a6126a7565b73ffffffffffffffffffffffffffffffffffffffff16610a486117c6565b73ffffffffffffffffffffffffffffffffffffffff1614610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9590613f59565b60405180910390fd5b601060009054906101000a900460ff1615610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590613feb565b60405180910390fd5b6000821415610b13578060119080519060200190610b0d929190613614565b50610b2b565b8060129080519060200190610b29929190613614565b505b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bfa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c6257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060008054610c789061403a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca49061403a565b8015610cf15780601f10610cc657610100808354040283529160200191610cf1565b820191906000526020600020905b815481529060010190602001808311610cd457829003601f168201915b5050505050905090565b6000610d06826126af565b610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c906140de565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d8b8261139a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390614170565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e1b6126a7565b73ffffffffffffffffffffffffffffffffffffffff161480610e4a5750610e4981610e446126a7565b612344565b5b610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8090614202565b60405180910390fd5b610e93838361271b565b505050565b60de81565b610ea56126a7565b73ffffffffffffffffffffffffffffffffffffffff16610ec36117c6565b73ffffffffffffffffffffffffffffffffffffffff1614610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090613f59565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f64573d6000803e3d6000fd5b505050565b610f716126a7565b73ffffffffffffffffffffffffffffffffffffffff16610f8f6117c6565b73ffffffffffffffffffffffffffffffffffffffff1614610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc90613f59565b60405180910390fd5b6000610fef6110e5565b9050601060039054906101000a900460ff1615611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890614294565b60405180910390fd5b600e5460de8261105191906142e3565b1115611092576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611089906143ab565b60405180910390fd5b60005b828110156110c5576110b23382846110ad91906142e3565b6127d4565b80806110bd906143cb565b915050611095565b506001601060036101000a81548160ff0219169083151502179055505050565b6000600880549050905090565b6111036110fd6126a7565b826127f2565b611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113990614486565b60405180910390fd5b61114d8383836128d0565b505050565b600061115d836115f2565b821061119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590614518565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b611212838383604051806020016040528060008152506120c1565b505050565b60006112216110e5565b8210611262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611259906145aa565b60405180910390fd5b60088281548110611276576112756145ca565b5b90600052602060002001549050919050565b6112906126a7565b73ffffffffffffffffffffffffffffffffffffffff166112ae6117c6565b73ffffffffffffffffffffffffffffffffffffffff1614611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90613f59565b60405180910390fd5b601060009054906101000a900460ff1615611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b90614645565b60405180910390fd5b806013908051906020019061136a929190613614565b5050565b601060019054906101000a900460ff1681565b600b5481565b601060029054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a906146d7565b60405180910390fd5b80915050919050565b600a81565b6013805461145e9061403a565b80601f016020809104026020016040519081016040528092919081815260200182805461148a9061403a565b80156114d75780601f106114ac576101008083540402835291602001916114d7565b820191906000526020600020905b8154815290600101906020018083116114ba57829003601f168201915b505050505081565b6114e76126a7565b73ffffffffffffffffffffffffffffffffffffffff166115056117c6565b73ffffffffffffffffffffffffffffffffffffffff161461155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290613f59565b60405180910390fd5b6115636110e5565b81116115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159b90614769565b60405180910390fd5b600e5481106115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df906147fb565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a9061488d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116b26126a7565b73ffffffffffffffffffffffffffffffffffffffff166116d06117c6565b73ffffffffffffffffffffffffffffffffffffffff1614611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d90613f59565b60405180910390fd5b6117306000612b2c565b565b6012805461173f9061403a565b80601f016020809104026020016040519081016040528092919081815260200182805461176b9061403a565b80156117b85780601f1061178d576101008083540402835291602001916117b8565b820191906000526020600020905b81548152906001019060200180831161179b57829003601f168201915b505050505081565b600f5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601060039054906101000a900460ff1681565b66f8b0a10e47000081565b6118166126a7565b73ffffffffffffffffffffffffffffffffffffffff166118346117c6565b73ffffffffffffffffffffffffffffffffffffffff161461188a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188190613f59565b60405180910390fd5b80600b8190555050565b6060600180546118a39061403a565b80601f01602080910402602001604051908101604052809291908181526020018280546118cf9061403a565b801561191c5780601f106118f15761010080835404028352916020019161191c565b820191906000526020600020905b8154815290600101906020018083116118ff57829003601f168201915b5050505050905090565b601060019054906101000a900460ff16611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c906148f9565b60405180910390fd5b600a81600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119c291906142e3565b1115611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa9061498b565b60405180910390fd5b600e5481611a0f6110e5565b611a1991906142e3565b1115611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a51906143ab565b60405180910390fd5b348167013fbe85edc90000611a6f91906149ab565b1115611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa790614a51565b60405180910390fd5b60005b81811015611b4c576000611ac56110e5565b9050600e54611ad26110e5565b1015611b3857600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611b28906143cb565b9190505550611b3733826127d4565b5b508080611b44906143cb565b915050611ab3565b5050565b611b586126a7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd90614abd565b60405180910390fd5b8060056000611bd36126a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c806126a7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cc59190613943565b60405180910390a35050565b600581565b601060009054906101000a900460ff1681565b611cf16126a7565b73ffffffffffffffffffffffffffffffffffffffff16611d0f6117c6565b73ffffffffffffffffffffffffffffffffffffffff1614611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c90613f59565b60405180910390fd5b60003390508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611db0573d6000803e3d6000fd5b5050565b601060029054906101000a900460ff16611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa90614b29565b60405180910390fd5b601060019054906101000a900460ff1615611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a90614bbb565b60405180910390fd5b611ea6611e5f33612bf2565b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612c22565b611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614c27565b60405180910390fd5b600581600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f3291906142e3565b1115611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6a90614cb9565b60405180910390fd5b600f5481611f7f6110e5565b611f8991906142e3565b1115611fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc190614d4b565b60405180910390fd5b348166f8b0a10e470000611fde91906149ab565b111561201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201690614a51565b60405180910390fd5b60005b818110156120bb5760006120346110e5565b9050600f546120416110e5565b10156120a757600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612097906143cb565b91905055506120a633826127d4565b5b5080806120b3906143cb565b915050612022565b50505050565b6120d26120cc6126a7565b836127f2565b612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890614486565b60405180910390fd5b61211d84848484612c39565b50505050565b601180546121309061403a565b80601f016020809104026020016040519081016040528092919081815260200182805461215c9061403a565b80156121a95780601f1061217e576101008083540402835291602001916121a9565b820191906000526020600020905b81548152906001019060200180831161218c57829003601f168201915b505050505081565b60606121bc826126af565b6121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290614ddd565b60405180910390fd5b6000612205612c95565b905060008151116122255760405180602001604052806000815250612250565b8061222f84612d27565b604051602001612240929190614e39565b6040516020818303038152906040525b915050919050565b6122606126a7565b73ffffffffffffffffffffffffffffffffffffffff1661227e6117c6565b73ffffffffffffffffffffffffffffffffffffffff16146122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb90613f59565b60405180910390fd5b600081141561230c57601060029054906101000a900460ff1615601060026101000a81548160ff021916908315150217905550612341565b600181141561234057601060019054906101000a900460ff1615601060016101000a81548160ff0219169083151502179055505b5b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123e06126a7565b73ffffffffffffffffffffffffffffffffffffffff166123fe6117c6565b73ffffffffffffffffffffffffffffffffffffffff1614612454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b90613f59565b60405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b600e5481565b67013fbe85edc9000081565b61248b6126a7565b73ffffffffffffffffffffffffffffffffffffffff166124a96117c6565b73ffffffffffffffffffffffffffffffffffffffff16146124ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f690613f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561256f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256690614ecf565b60405180910390fd5b61257881612b2c565b50565b600080823b905060008111915050919050565b6125998383836126a2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125dc576125d781612e88565b61261b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461261a576126198382612ed1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561265e576126598161303e565b61269d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461269c5761269b828261310f565b5b5b505050565b505050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661278e8361139a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6127ee82826040518060200160405280600081525061318e565b5050565b60006127fd826126af565b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283390614f61565b60405180910390fd5b60006128478361139a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128b657508373ffffffffffffffffffffffffffffffffffffffff1661289e84610cfb565b73ffffffffffffffffffffffffffffffffffffffff16145b806128c757506128c68185612344565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128f08261139a565b73ffffffffffffffffffffffffffffffffffffffff1614612946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293d90614ff3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ad90615085565b60405180910390fd5b6129c18383836131e9565b6129cc60008261271b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a1c91906150a5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a7391906142e3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081604051602001612c059190615121565b604051602081830303815290604052805190602001209050919050565b6000612c3182600b54856131f9565b905092915050565b612c448484846128d0565b612c50848484846132af565b612c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c86906151ae565b60405180910390fd5b50505050565b606060138054612ca49061403a565b80601f0160208091040260200160405190810160405280929190818152602001828054612cd09061403a565b8015612d1d5780601f10612cf257610100808354040283529160200191612d1d565b820191906000526020600020905b815481529060010190602001808311612d0057829003601f168201915b5050505050905090565b60606000821415612d6f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e83565b600082905060005b60008214612da1578080612d8a906143cb565b915050600a82612d9a91906151fd565b9150612d77565b60008167ffffffffffffffff811115612dbd57612dbc61371c565b5b6040519080825280601f01601f191660200182016040528015612def5781602001600182028036833780820191505090505b5090505b60008514612e7c57600182612e0891906150a5565b9150600a85612e17919061522e565b6030612e2391906142e3565b60f81b818381518110612e3957612e386145ca565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e7591906151fd565b9450612df3565b8093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ede846115f2565b612ee891906150a5565b9050600060076000848152602001908152602001600020549050818114612fcd576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061305291906150a5565b9050600060096000848152602001908152602001600020549050600060088381548110613082576130816145ca565b5b9060005260206000200154905080600883815481106130a4576130a36145ca565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130f3576130f261525f565b5b6001900381819060005260206000200160009055905550505050565b600061311a836115f2565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6131988383613446565b6131a560008484846132af565b6131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db906151ae565b60405180910390fd5b505050565b6131f483838361258e565b505050565b60008082905060005b85518110156132a15760008682815181106132205761321f6145ca565b5b602002602001015190508083116132615782816040516020016132449291906152af565b60405160208183030381529060405280519060200120925061328d565b80836040516020016132749291906152af565b6040516020818303038152906040528051906020012092505b508080613299906143cb565b915050613202565b508381149150509392505050565b60006132d08473ffffffffffffffffffffffffffffffffffffffff1661257b565b15613439578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132f96126a7565b8786866040518563ffffffff1660e01b815260040161331b9493929190615330565b602060405180830381600087803b15801561333557600080fd5b505af192505050801561336657506040513d601f19601f820116820180604052508101906133639190615391565b60015b6133e9573d8060008114613396576040519150601f19603f3d011682016040523d82523d6000602084013e61339b565b606091505b506000815114156133e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d8906151ae565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061343e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ad9061540a565b60405180910390fd5b6134bf816126af565b156134ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f690615476565b60405180910390fd5b61350b600083836131e9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461355b91906142e3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546136209061403a565b90600052602060002090601f0160209004810192826136425760008555613689565b82601f1061365b57805160ff1916838001178555613689565b82800160010185558215613689579182015b8281111561368857825182559160200191906001019061366d565b5b509050613696919061369a565b5090565b5b808211156136b357600081600090555060010161369b565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6136de816136cb565b81146136e957600080fd5b50565b6000813590506136fb816136d5565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137548261370b565b810181811067ffffffffffffffff821117156137735761377261371c565b5b80604052505050565b60006137866136b7565b9050613792828261374b565b919050565b600067ffffffffffffffff8211156137b2576137b161371c565b5b6137bb8261370b565b9050602081019050919050565b82818337600083830152505050565b60006137ea6137e584613797565b61377c565b90508281526020810184848401111561380657613805613706565b5b6138118482856137c8565b509392505050565b600082601f83011261382e5761382d613701565b5b813561383e8482602086016137d7565b91505092915050565b6000806040838503121561385e5761385d6136c1565b5b600061386c858286016136ec565b925050602083013567ffffffffffffffff81111561388d5761388c6136c6565b5b61389985828601613819565b9150509250929050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6138d8816138a3565b81146138e357600080fd5b50565b6000813590506138f5816138cf565b92915050565b600060208284031215613911576139106136c1565b5b600061391f848285016138e6565b91505092915050565b60008115159050919050565b61393d81613928565b82525050565b60006020820190506139586000830184613934565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561399857808201518184015260208101905061397d565b838111156139a7576000848401525b50505050565b60006139b88261395e565b6139c28185613969565b93506139d281856020860161397a565b6139db8161370b565b840191505092915050565b60006020820190508181036000830152613a0081846139ad565b905092915050565b600060208284031215613a1e57613a1d6136c1565b5b6000613a2c848285016136ec565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a6082613a35565b9050919050565b613a7081613a55565b82525050565b6000602082019050613a8b6000830184613a67565b92915050565b613a9a81613a55565b8114613aa557600080fd5b50565b600081359050613ab781613a91565b92915050565b60008060408385031215613ad457613ad36136c1565b5b6000613ae285828601613aa8565b9250506020613af3858286016136ec565b9150509250929050565b613b06816136cb565b82525050565b6000602082019050613b216000830184613afd565b92915050565b600060208284031215613b3d57613b3c6136c1565b5b6000613b4b84828501613aa8565b91505092915050565b600080600060608486031215613b6d57613b6c6136c1565b5b6000613b7b86828701613aa8565b9350506020613b8c86828701613aa8565b9250506040613b9d868287016136ec565b9150509250925092565b600060208284031215613bbd57613bbc6136c1565b5b600082013567ffffffffffffffff811115613bdb57613bda6136c6565b5b613be784828501613819565b91505092915050565b6000819050919050565b613c0381613bf0565b82525050565b6000602082019050613c1e6000830184613bfa565b92915050565b613c2d81613bf0565b8114613c3857600080fd5b50565b600081359050613c4a81613c24565b92915050565b600060208284031215613c6657613c656136c1565b5b6000613c7484828501613c3b565b91505092915050565b613c8681613928565b8114613c9157600080fd5b50565b600081359050613ca381613c7d565b92915050565b60008060408385031215613cc057613cbf6136c1565b5b6000613cce85828601613aa8565b9250506020613cdf85828601613c94565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613d0957613d08613701565b5b8235905067ffffffffffffffff811115613d2657613d25613ce9565b5b602083019150836020820283011115613d4257613d41613cee565b5b9250929050565b600080600060408486031215613d6257613d616136c1565b5b600084013567ffffffffffffffff811115613d8057613d7f6136c6565b5b613d8c86828701613cf3565b93509350506020613d9f868287016136ec565b9150509250925092565b600067ffffffffffffffff821115613dc457613dc361371c565b5b613dcd8261370b565b9050602081019050919050565b6000613ded613de884613da9565b61377c565b905082815260208101848484011115613e0957613e08613706565b5b613e148482856137c8565b509392505050565b600082601f830112613e3157613e30613701565b5b8135613e41848260208601613dda565b91505092915050565b60008060008060808587031215613e6457613e636136c1565b5b6000613e7287828801613aa8565b9450506020613e8387828801613aa8565b9350506040613e94878288016136ec565b925050606085013567ffffffffffffffff811115613eb557613eb46136c6565b5b613ec187828801613e1c565b91505092959194509250565b60008060408385031215613ee457613ee36136c1565b5b6000613ef285828601613aa8565b9250506020613f0385828601613aa8565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f43602083613969565b9150613f4e82613f0d565b602082019050919050565b60006020820190508181036000830152613f7281613f36565b9050919050565b7f50726f76656e616e636520686173682065646974696e67206973206c6f636b6560008201527f642e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fd5602283613969565b9150613fe082613f79565b604082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061405257607f821691505b602082108114156140665761406561400b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140c8602c83613969565b91506140d38261406c565b604082019050919050565b600060208201905081810360008301526140f7816140bb565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061415a602183613969565b9150614165826140fe565b604082019050919050565b600060208201905081810360008301526141898161414d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006141ec603883613969565b91506141f782614190565b604082019050919050565b6000602082019050818103600083015261421b816141df565b9050919050565b7f416c726561647920726573657276656420736f6d65204e69667469657320666f60008201527f7220746865207465616d2e000000000000000000000000000000000000000000602082015250565b600061427e602b83613969565b915061428982614222565b604082019050919050565b600060208201905081810360008301526142ad81614271565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142ee826136cb565b91506142f9836136cb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561432e5761432d6142b4565b5b828201905092915050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66204e696674696573000000000000000000000000000000000000000000602082015250565b6000614395602b83613969565b91506143a082614339565b604082019050919050565b600060208201905081810360008301526143c481614388565b9050919050565b60006143d6826136cb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614409576144086142b4565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614470603183613969565b915061447b82614414565b604082019050919050565b6000602082019050818103600083015261449f81614463565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614502602b83613969565b915061450d826144a6565b604082019050919050565b60006020820190508181036000830152614531816144f5565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614594602c83613969565b915061459f82614538565b604082019050919050565b600060208201905081810360008301526145c381614587565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f42617365205552492065646974696e67206973206c6f636b65642e0000000000600082015250565b600061462f601b83613969565b915061463a826145f9565b602082019050919050565b6000602082019050818103600083015261465e81614622565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006146c1602983613969565b91506146cc82614665565b604082019050919050565b600060208201905081810360008301526146f0816146b4565b9050919050565b7f4e6577206d617820737570706c79206973206c6f776572207468616e2063757260008201527f72656e7420737570706c792e0000000000000000000000000000000000000000602082015250565b6000614753602c83613969565b915061475e826146f7565b604082019050919050565b6000602082019050818103600083015261478281614746565b9050919050565b7f4e6577206d617820737570706c792069732067726561746572207468616e204d60008201527f41585f4e4946544945532e000000000000000000000000000000000000000000602082015250565b60006147e5602b83613969565b91506147f082614789565b604082019050919050565b60006020820190508181036000830152614814816147d8565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614877602a83613969565b91506148828261481b565b604082019050919050565b600060208201905081810360008301526148a68161486a565b9050919050565b7f53616c6520686173206e6f742073746172746564207965742e00000000000000600082015250565b60006148e3601983613969565b91506148ee826148ad565b602082019050919050565b60006020820190508181036000830152614912816148d6565b9050919050565b7f43616e206f6e6c79206d696e74203130206e696674696573207065722077616c60008201527f6c657420696e207075626c69632073616c6520434f4e54524143540000000000602082015250565b6000614975603b83613969565b915061498082614919565b604082019050919050565b600060208201905081810360008301526149a481614968565b9050919050565b60006149b6826136cb565b91506149c1836136cb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149fa576149f96142b4565b5b828202905092915050565b7f45746865722076616c75652073656e74206973206e6f7420656e6f7567680000600082015250565b6000614a3b601e83613969565b9150614a4682614a05565b602082019050919050565b60006020820190508181036000830152614a6a81614a2e565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614aa7601983613969565b9150614ab282614a71565b602082019050919050565b60006020820190508181036000830152614ad681614a9a565b9050919050565b7f50726573616c6520686173206e6f742073746172746564207965742e00000000600082015250565b6000614b13601c83613969565b9150614b1e82614add565b602082019050919050565b60006020820190508181036000830152614b4281614b06565b9050919050565b7f5075626c69632073616c65206973206163746976652e20596f752073686f756c60008201527f646e2774206d696e7420686572652e0000000000000000000000000000000000602082015250565b6000614ba5602f83613969565b9150614bb082614b49565b604082019050919050565b60006020820190508181036000830152614bd481614b98565b9050919050565b7f496e76616c69642070726f6f66202f204e6f742077686974656c697374656400600082015250565b6000614c11601f83613969565b9150614c1c82614bdb565b602082019050919050565b60006020820190508181036000830152614c4081614c04565b9050919050565b7f43616e206f6e6c79206d696e742035206e696674696573207065722077616c6c60008201527f657420696e2070726573616c6500000000000000000000000000000000000000602082015250565b6000614ca3602d83613969565b9150614cae82614c47565b604082019050919050565b60006020820190508181036000830152614cd281614c96565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f662070726573616c65204e69667469657300000000000000000000000000602082015250565b6000614d35603383613969565b9150614d4082614cd9565b604082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614dc7602f83613969565b9150614dd282614d6b565b604082019050919050565b60006020820190508181036000830152614df681614dba565b9050919050565b600081905092915050565b6000614e138261395e565b614e1d8185614dfd565b9350614e2d81856020860161397a565b80840191505092915050565b6000614e458285614e08565b9150614e518284614e08565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614eb9602683613969565b9150614ec482614e5d565b604082019050919050565b60006020820190508181036000830152614ee881614eac565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614f4b602c83613969565b9150614f5682614eef565b604082019050919050565b60006020820190508181036000830152614f7a81614f3e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614fdd602983613969565b9150614fe882614f81565b604082019050919050565b6000602082019050818103600083015261500c81614fd0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061506f602483613969565b915061507a82615013565b604082019050919050565b6000602082019050818103600083015261509e81615062565b9050919050565b60006150b0826136cb565b91506150bb836136cb565b9250828210156150ce576150cd6142b4565b5b828203905092915050565b60008160601b9050919050565b60006150f1826150d9565b9050919050565b6000615103826150e6565b9050919050565b61511b61511682613a55565b6150f8565b82525050565b600061512d828461510a565b60148201915081905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615198603283613969565b91506151a38261513c565b604082019050919050565b600060208201905081810360008301526151c78161518b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615208826136cb565b9150615213836136cb565b925082615223576152226151ce565b5b828204905092915050565b6000615239826136cb565b9150615244836136cb565b925082615254576152536151ce565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000819050919050565b6152a96152a482613bf0565b61528e565b82525050565b60006152bb8285615298565b6020820191506152cb8284615298565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000615302826152db565b61530c81856152e6565b935061531c81856020860161397a565b6153258161370b565b840191505092915050565b60006080820190506153456000830187613a67565b6153526020830186613a67565b61535f6040830185613afd565b818103606083015261537181846152f7565b905095945050505050565b60008151905061538b816138cf565b92915050565b6000602082840312156153a7576153a66136c1565b5b60006153b58482850161537c565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006153f4602083613969565b91506153ff826153be565b602082019050919050565b60006020820190508181036000830152615423816153e7565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615460601c83613969565b915061546b8261542a565b602082019050919050565b6000602082019050818103600083015261548f81615453565b905091905056fea264697066735822122045e808aa4cb732141d21cd01c4deea45037214c7534824d8ccdce0bc1c2b20b064736f6c6343000809003336636566323135303135626662633030306133336632336438363439613634376661383363613236653065363066626262353161363831623134393231646136000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000014546865204e69667479205761792047616c6178790000000000000000000000000000000000000000000000000000000000000000000000000000000000000004544e574700000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102725760003560e01c8063715018a61161014f578063ab579a59116100c1578063e72f98431161007a578063e72f984314610926578063e985e9c51461094f578063ec231f9c1461098c578063ec695e53146109a3578063f1b10ceb146109ce578063f2fde38b146109f957610272565b8063ab579a5914610837578063ac44600214610862578063ad7f1ea114610879578063b88d4fde14610895578063ba08bb80146108be578063c87b56dd146108e957610272565b806392c7254b1161011357806392c7254b1461074857806392f6c4391461077357806395d89b411461079c578063a0712d68146107c7578063a22cb465146107e3578063a70f1fbe1461080c57610272565b8063715018a614610685578063724079211461069c5780638c2f5cb0146106c75780638da5cb5b146106f25780639119a8ee1461071d57610272565b806342842e0e116101e857806360d938dc116101ac57806360d938dc146105615780636352211e1461058c57806365f13097146105c95780636c0360eb146105f45780636f8b44b01461061f57806370a082311461064857610272565b806342842e0e1461047c5780634f6ccce7146104a557806355f804b3146104e2578063564566a81461050b5780635da5f4591461053657610272565b80630b2a41751161023a5780630b2a41751461036e5780630ff8d8a51461039957806315d1c7db146103c257806318160ddd146103eb57806323b872dd146104165780632f745c591461043f57610272565b806301ea47941461027757806301ffc9a7146102a057806306fdde03146102dd578063081812fc14610308578063095ea7b314610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613847565b610a22565b005b3480156102ac57600080fd5b506102c760048036038101906102c291906138fb565b610b2f565b6040516102d49190613943565b60405180910390f35b3480156102e957600080fd5b506102f2610c69565b6040516102ff91906139e6565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613a08565b610cfb565b60405161033c9190613a76565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613abd565b610d80565b005b34801561037a57600080fd5b50610383610e98565b6040516103909190613b0c565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190613b27565b610e9d565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190613a08565b610f69565b005b3480156103f757600080fd5b506104006110e5565b60405161040d9190613b0c565b60405180910390f35b34801561042257600080fd5b5061043d60048036038101906104389190613b54565b6110f2565b005b34801561044b57600080fd5b5061046660048036038101906104619190613abd565b611152565b6040516104739190613b0c565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190613b54565b6111f7565b005b3480156104b157600080fd5b506104cc60048036038101906104c79190613a08565b611217565b6040516104d99190613b0c565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190613ba7565b611288565b005b34801561051757600080fd5b5061052061136e565b60405161052d9190613943565b60405180910390f35b34801561054257600080fd5b5061054b611381565b6040516105589190613c09565b60405180910390f35b34801561056d57600080fd5b50610576611387565b6040516105839190613943565b60405180910390f35b34801561059857600080fd5b506105b360048036038101906105ae9190613a08565b61139a565b6040516105c09190613a76565b60405180910390f35b3480156105d557600080fd5b506105de61144c565b6040516105eb9190613b0c565b60405180910390f35b34801561060057600080fd5b50610609611451565b60405161061691906139e6565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190613a08565b6114df565b005b34801561065457600080fd5b5061066f600480360381019061066a9190613b27565b6115f2565b60405161067c9190613b0c565b60405180910390f35b34801561069157600080fd5b5061069a6116aa565b005b3480156106a857600080fd5b506106b1611732565b6040516106be91906139e6565b60405180910390f35b3480156106d357600080fd5b506106dc6117c0565b6040516106e99190613b0c565b60405180910390f35b3480156106fe57600080fd5b506107076117c6565b6040516107149190613a76565b60405180910390f35b34801561072957600080fd5b506107326117f0565b60405161073f9190613943565b60405180910390f35b34801561075457600080fd5b5061075d611803565b60405161076a9190613b0c565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190613c50565b61180e565b005b3480156107a857600080fd5b506107b1611894565b6040516107be91906139e6565b60405180910390f35b6107e160048036038101906107dc9190613a08565b611926565b005b3480156107ef57600080fd5b5061080a60048036038101906108059190613ca9565b611b50565b005b34801561081857600080fd5b50610821611cd1565b60405161082e9190613b0c565b60405180910390f35b34801561084357600080fd5b5061084c611cd6565b6040516108599190613943565b60405180910390f35b34801561086e57600080fd5b50610877611ce9565b005b610893600480360381019061088e9190613d49565b611db4565b005b3480156108a157600080fd5b506108bc60048036038101906108b79190613e4a565b6120c1565b005b3480156108ca57600080fd5b506108d3612123565b6040516108e091906139e6565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b9190613a08565b6121b1565b60405161091d91906139e6565b60405180910390f35b34801561093257600080fd5b5061094d60048036038101906109489190613a08565b612258565b005b34801561095b57600080fd5b5061097660048036038101906109719190613ecd565b612344565b6040516109839190613943565b60405180910390f35b34801561099857600080fd5b506109a16123d8565b005b3480156109af57600080fd5b506109b8612471565b6040516109c59190613b0c565b60405180910390f35b3480156109da57600080fd5b506109e3612477565b6040516109f09190613b0c565b60405180910390f35b348015610a0557600080fd5b50610a206004803603810190610a1b9190613b27565b612483565b005b610a2a6126a7565b73ffffffffffffffffffffffffffffffffffffffff16610a486117c6565b73ffffffffffffffffffffffffffffffffffffffff1614610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9590613f59565b60405180910390fd5b601060009054906101000a900460ff1615610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590613feb565b60405180910390fd5b6000821415610b13578060119080519060200190610b0d929190613614565b50610b2b565b8060129080519060200190610b29929190613614565b505b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bfa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c6257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060008054610c789061403a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca49061403a565b8015610cf15780601f10610cc657610100808354040283529160200191610cf1565b820191906000526020600020905b815481529060010190602001808311610cd457829003601f168201915b5050505050905090565b6000610d06826126af565b610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c906140de565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d8b8261139a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390614170565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e1b6126a7565b73ffffffffffffffffffffffffffffffffffffffff161480610e4a5750610e4981610e446126a7565b612344565b5b610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8090614202565b60405180910390fd5b610e93838361271b565b505050565b60de81565b610ea56126a7565b73ffffffffffffffffffffffffffffffffffffffff16610ec36117c6565b73ffffffffffffffffffffffffffffffffffffffff1614610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090613f59565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f64573d6000803e3d6000fd5b505050565b610f716126a7565b73ffffffffffffffffffffffffffffffffffffffff16610f8f6117c6565b73ffffffffffffffffffffffffffffffffffffffff1614610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc90613f59565b60405180910390fd5b6000610fef6110e5565b9050601060039054906101000a900460ff1615611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890614294565b60405180910390fd5b600e5460de8261105191906142e3565b1115611092576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611089906143ab565b60405180910390fd5b60005b828110156110c5576110b23382846110ad91906142e3565b6127d4565b80806110bd906143cb565b915050611095565b506001601060036101000a81548160ff0219169083151502179055505050565b6000600880549050905090565b6111036110fd6126a7565b826127f2565b611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113990614486565b60405180910390fd5b61114d8383836128d0565b505050565b600061115d836115f2565b821061119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590614518565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b611212838383604051806020016040528060008152506120c1565b505050565b60006112216110e5565b8210611262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611259906145aa565b60405180910390fd5b60088281548110611276576112756145ca565b5b90600052602060002001549050919050565b6112906126a7565b73ffffffffffffffffffffffffffffffffffffffff166112ae6117c6565b73ffffffffffffffffffffffffffffffffffffffff1614611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90613f59565b60405180910390fd5b601060009054906101000a900460ff1615611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b90614645565b60405180910390fd5b806013908051906020019061136a929190613614565b5050565b601060019054906101000a900460ff1681565b600b5481565b601060029054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a906146d7565b60405180910390fd5b80915050919050565b600a81565b6013805461145e9061403a565b80601f016020809104026020016040519081016040528092919081815260200182805461148a9061403a565b80156114d75780601f106114ac576101008083540402835291602001916114d7565b820191906000526020600020905b8154815290600101906020018083116114ba57829003601f168201915b505050505081565b6114e76126a7565b73ffffffffffffffffffffffffffffffffffffffff166115056117c6565b73ffffffffffffffffffffffffffffffffffffffff161461155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290613f59565b60405180910390fd5b6115636110e5565b81116115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159b90614769565b60405180910390fd5b600e5481106115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df906147fb565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a9061488d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116b26126a7565b73ffffffffffffffffffffffffffffffffffffffff166116d06117c6565b73ffffffffffffffffffffffffffffffffffffffff1614611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d90613f59565b60405180910390fd5b6117306000612b2c565b565b6012805461173f9061403a565b80601f016020809104026020016040519081016040528092919081815260200182805461176b9061403a565b80156117b85780601f1061178d576101008083540402835291602001916117b8565b820191906000526020600020905b81548152906001019060200180831161179b57829003601f168201915b505050505081565b600f5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601060039054906101000a900460ff1681565b66f8b0a10e47000081565b6118166126a7565b73ffffffffffffffffffffffffffffffffffffffff166118346117c6565b73ffffffffffffffffffffffffffffffffffffffff161461188a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188190613f59565b60405180910390fd5b80600b8190555050565b6060600180546118a39061403a565b80601f01602080910402602001604051908101604052809291908181526020018280546118cf9061403a565b801561191c5780601f106118f15761010080835404028352916020019161191c565b820191906000526020600020905b8154815290600101906020018083116118ff57829003601f168201915b5050505050905090565b601060019054906101000a900460ff16611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c906148f9565b60405180910390fd5b600a81600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119c291906142e3565b1115611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa9061498b565b60405180910390fd5b600e5481611a0f6110e5565b611a1991906142e3565b1115611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a51906143ab565b60405180910390fd5b348167013fbe85edc90000611a6f91906149ab565b1115611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa790614a51565b60405180910390fd5b60005b81811015611b4c576000611ac56110e5565b9050600e54611ad26110e5565b1015611b3857600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611b28906143cb565b9190505550611b3733826127d4565b5b508080611b44906143cb565b915050611ab3565b5050565b611b586126a7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd90614abd565b60405180910390fd5b8060056000611bd36126a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c806126a7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cc59190613943565b60405180910390a35050565b600581565b601060009054906101000a900460ff1681565b611cf16126a7565b73ffffffffffffffffffffffffffffffffffffffff16611d0f6117c6565b73ffffffffffffffffffffffffffffffffffffffff1614611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c90613f59565b60405180910390fd5b60003390508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611db0573d6000803e3d6000fd5b5050565b601060029054906101000a900460ff16611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa90614b29565b60405180910390fd5b601060019054906101000a900460ff1615611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a90614bbb565b60405180910390fd5b611ea6611e5f33612bf2565b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612c22565b611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc90614c27565b60405180910390fd5b600581600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f3291906142e3565b1115611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6a90614cb9565b60405180910390fd5b600f5481611f7f6110e5565b611f8991906142e3565b1115611fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc190614d4b565b60405180910390fd5b348166f8b0a10e470000611fde91906149ab565b111561201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201690614a51565b60405180910390fd5b60005b818110156120bb5760006120346110e5565b9050600f546120416110e5565b10156120a757600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612097906143cb565b91905055506120a633826127d4565b5b5080806120b3906143cb565b915050612022565b50505050565b6120d26120cc6126a7565b836127f2565b612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890614486565b60405180910390fd5b61211d84848484612c39565b50505050565b601180546121309061403a565b80601f016020809104026020016040519081016040528092919081815260200182805461215c9061403a565b80156121a95780601f1061217e576101008083540402835291602001916121a9565b820191906000526020600020905b81548152906001019060200180831161218c57829003601f168201915b505050505081565b60606121bc826126af565b6121fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290614ddd565b60405180910390fd5b6000612205612c95565b905060008151116122255760405180602001604052806000815250612250565b8061222f84612d27565b604051602001612240929190614e39565b6040516020818303038152906040525b915050919050565b6122606126a7565b73ffffffffffffffffffffffffffffffffffffffff1661227e6117c6565b73ffffffffffffffffffffffffffffffffffffffff16146122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb90613f59565b60405180910390fd5b600081141561230c57601060029054906101000a900460ff1615601060026101000a81548160ff021916908315150217905550612341565b600181141561234057601060019054906101000a900460ff1615601060016101000a81548160ff0219169083151502179055505b5b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123e06126a7565b73ffffffffffffffffffffffffffffffffffffffff166123fe6117c6565b73ffffffffffffffffffffffffffffffffffffffff1614612454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b90613f59565b60405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b600e5481565b67013fbe85edc9000081565b61248b6126a7565b73ffffffffffffffffffffffffffffffffffffffff166124a96117c6565b73ffffffffffffffffffffffffffffffffffffffff16146124ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f690613f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561256f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256690614ecf565b60405180910390fd5b61257881612b2c565b50565b600080823b905060008111915050919050565b6125998383836126a2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125dc576125d781612e88565b61261b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461261a576126198382612ed1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561265e576126598161303e565b61269d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461269c5761269b828261310f565b5b5b505050565b505050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661278e8361139a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6127ee82826040518060200160405280600081525061318e565b5050565b60006127fd826126af565b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283390614f61565b60405180910390fd5b60006128478361139a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128b657508373ffffffffffffffffffffffffffffffffffffffff1661289e84610cfb565b73ffffffffffffffffffffffffffffffffffffffff16145b806128c757506128c68185612344565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128f08261139a565b73ffffffffffffffffffffffffffffffffffffffff1614612946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293d90614ff3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ad90615085565b60405180910390fd5b6129c18383836131e9565b6129cc60008261271b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a1c91906150a5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a7391906142e3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081604051602001612c059190615121565b604051602081830303815290604052805190602001209050919050565b6000612c3182600b54856131f9565b905092915050565b612c448484846128d0565b612c50848484846132af565b612c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c86906151ae565b60405180910390fd5b50505050565b606060138054612ca49061403a565b80601f0160208091040260200160405190810160405280929190818152602001828054612cd09061403a565b8015612d1d5780601f10612cf257610100808354040283529160200191612d1d565b820191906000526020600020905b815481529060010190602001808311612d0057829003601f168201915b5050505050905090565b60606000821415612d6f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e83565b600082905060005b60008214612da1578080612d8a906143cb565b915050600a82612d9a91906151fd565b9150612d77565b60008167ffffffffffffffff811115612dbd57612dbc61371c565b5b6040519080825280601f01601f191660200182016040528015612def5781602001600182028036833780820191505090505b5090505b60008514612e7c57600182612e0891906150a5565b9150600a85612e17919061522e565b6030612e2391906142e3565b60f81b818381518110612e3957612e386145ca565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e7591906151fd565b9450612df3565b8093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ede846115f2565b612ee891906150a5565b9050600060076000848152602001908152602001600020549050818114612fcd576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061305291906150a5565b9050600060096000848152602001908152602001600020549050600060088381548110613082576130816145ca565b5b9060005260206000200154905080600883815481106130a4576130a36145ca565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130f3576130f261525f565b5b6001900381819060005260206000200160009055905550505050565b600061311a836115f2565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6131988383613446565b6131a560008484846132af565b6131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db906151ae565b60405180910390fd5b505050565b6131f483838361258e565b505050565b60008082905060005b85518110156132a15760008682815181106132205761321f6145ca565b5b602002602001015190508083116132615782816040516020016132449291906152af565b60405160208183030381529060405280519060200120925061328d565b80836040516020016132749291906152af565b6040516020818303038152906040528051906020012092505b508080613299906143cb565b915050613202565b508381149150509392505050565b60006132d08473ffffffffffffffffffffffffffffffffffffffff1661257b565b15613439578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132f96126a7565b8786866040518563ffffffff1660e01b815260040161331b9493929190615330565b602060405180830381600087803b15801561333557600080fd5b505af192505050801561336657506040513d601f19601f820116820180604052508101906133639190615391565b60015b6133e9573d8060008114613396576040519150601f19603f3d011682016040523d82523d6000602084013e61339b565b606091505b506000815114156133e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d8906151ae565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061343e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ad9061540a565b60405180910390fd5b6134bf816126af565b156134ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f690615476565b60405180910390fd5b61350b600083836131e9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461355b91906142e3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546136209061403a565b90600052602060002090601f0160209004810192826136425760008555613689565b82601f1061365b57805160ff1916838001178555613689565b82800160010185558215613689579182015b8281111561368857825182559160200191906001019061366d565b5b509050613696919061369a565b5090565b5b808211156136b357600081600090555060010161369b565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6136de816136cb565b81146136e957600080fd5b50565b6000813590506136fb816136d5565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137548261370b565b810181811067ffffffffffffffff821117156137735761377261371c565b5b80604052505050565b60006137866136b7565b9050613792828261374b565b919050565b600067ffffffffffffffff8211156137b2576137b161371c565b5b6137bb8261370b565b9050602081019050919050565b82818337600083830152505050565b60006137ea6137e584613797565b61377c565b90508281526020810184848401111561380657613805613706565b5b6138118482856137c8565b509392505050565b600082601f83011261382e5761382d613701565b5b813561383e8482602086016137d7565b91505092915050565b6000806040838503121561385e5761385d6136c1565b5b600061386c858286016136ec565b925050602083013567ffffffffffffffff81111561388d5761388c6136c6565b5b61389985828601613819565b9150509250929050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6138d8816138a3565b81146138e357600080fd5b50565b6000813590506138f5816138cf565b92915050565b600060208284031215613911576139106136c1565b5b600061391f848285016138e6565b91505092915050565b60008115159050919050565b61393d81613928565b82525050565b60006020820190506139586000830184613934565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561399857808201518184015260208101905061397d565b838111156139a7576000848401525b50505050565b60006139b88261395e565b6139c28185613969565b93506139d281856020860161397a565b6139db8161370b565b840191505092915050565b60006020820190508181036000830152613a0081846139ad565b905092915050565b600060208284031215613a1e57613a1d6136c1565b5b6000613a2c848285016136ec565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a6082613a35565b9050919050565b613a7081613a55565b82525050565b6000602082019050613a8b6000830184613a67565b92915050565b613a9a81613a55565b8114613aa557600080fd5b50565b600081359050613ab781613a91565b92915050565b60008060408385031215613ad457613ad36136c1565b5b6000613ae285828601613aa8565b9250506020613af3858286016136ec565b9150509250929050565b613b06816136cb565b82525050565b6000602082019050613b216000830184613afd565b92915050565b600060208284031215613b3d57613b3c6136c1565b5b6000613b4b84828501613aa8565b91505092915050565b600080600060608486031215613b6d57613b6c6136c1565b5b6000613b7b86828701613aa8565b9350506020613b8c86828701613aa8565b9250506040613b9d868287016136ec565b9150509250925092565b600060208284031215613bbd57613bbc6136c1565b5b600082013567ffffffffffffffff811115613bdb57613bda6136c6565b5b613be784828501613819565b91505092915050565b6000819050919050565b613c0381613bf0565b82525050565b6000602082019050613c1e6000830184613bfa565b92915050565b613c2d81613bf0565b8114613c3857600080fd5b50565b600081359050613c4a81613c24565b92915050565b600060208284031215613c6657613c656136c1565b5b6000613c7484828501613c3b565b91505092915050565b613c8681613928565b8114613c9157600080fd5b50565b600081359050613ca381613c7d565b92915050565b60008060408385031215613cc057613cbf6136c1565b5b6000613cce85828601613aa8565b9250506020613cdf85828601613c94565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613d0957613d08613701565b5b8235905067ffffffffffffffff811115613d2657613d25613ce9565b5b602083019150836020820283011115613d4257613d41613cee565b5b9250929050565b600080600060408486031215613d6257613d616136c1565b5b600084013567ffffffffffffffff811115613d8057613d7f6136c6565b5b613d8c86828701613cf3565b93509350506020613d9f868287016136ec565b9150509250925092565b600067ffffffffffffffff821115613dc457613dc361371c565b5b613dcd8261370b565b9050602081019050919050565b6000613ded613de884613da9565b61377c565b905082815260208101848484011115613e0957613e08613706565b5b613e148482856137c8565b509392505050565b600082601f830112613e3157613e30613701565b5b8135613e41848260208601613dda565b91505092915050565b60008060008060808587031215613e6457613e636136c1565b5b6000613e7287828801613aa8565b9450506020613e8387828801613aa8565b9350506040613e94878288016136ec565b925050606085013567ffffffffffffffff811115613eb557613eb46136c6565b5b613ec187828801613e1c565b91505092959194509250565b60008060408385031215613ee457613ee36136c1565b5b6000613ef285828601613aa8565b9250506020613f0385828601613aa8565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f43602083613969565b9150613f4e82613f0d565b602082019050919050565b60006020820190508181036000830152613f7281613f36565b9050919050565b7f50726f76656e616e636520686173682065646974696e67206973206c6f636b6560008201527f642e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fd5602283613969565b9150613fe082613f79565b604082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061405257607f821691505b602082108114156140665761406561400b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140c8602c83613969565b91506140d38261406c565b604082019050919050565b600060208201905081810360008301526140f7816140bb565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061415a602183613969565b9150614165826140fe565b604082019050919050565b600060208201905081810360008301526141898161414d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006141ec603883613969565b91506141f782614190565b604082019050919050565b6000602082019050818103600083015261421b816141df565b9050919050565b7f416c726561647920726573657276656420736f6d65204e69667469657320666f60008201527f7220746865207465616d2e000000000000000000000000000000000000000000602082015250565b600061427e602b83613969565b915061428982614222565b604082019050919050565b600060208201905081810360008301526142ad81614271565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142ee826136cb565b91506142f9836136cb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561432e5761432d6142b4565b5b828201905092915050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66204e696674696573000000000000000000000000000000000000000000602082015250565b6000614395602b83613969565b91506143a082614339565b604082019050919050565b600060208201905081810360008301526143c481614388565b9050919050565b60006143d6826136cb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614409576144086142b4565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614470603183613969565b915061447b82614414565b604082019050919050565b6000602082019050818103600083015261449f81614463565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614502602b83613969565b915061450d826144a6565b604082019050919050565b60006020820190508181036000830152614531816144f5565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614594602c83613969565b915061459f82614538565b604082019050919050565b600060208201905081810360008301526145c381614587565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f42617365205552492065646974696e67206973206c6f636b65642e0000000000600082015250565b600061462f601b83613969565b915061463a826145f9565b602082019050919050565b6000602082019050818103600083015261465e81614622565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006146c1602983613969565b91506146cc82614665565b604082019050919050565b600060208201905081810360008301526146f0816146b4565b9050919050565b7f4e6577206d617820737570706c79206973206c6f776572207468616e2063757260008201527f72656e7420737570706c792e0000000000000000000000000000000000000000602082015250565b6000614753602c83613969565b915061475e826146f7565b604082019050919050565b6000602082019050818103600083015261478281614746565b9050919050565b7f4e6577206d617820737570706c792069732067726561746572207468616e204d60008201527f41585f4e4946544945532e000000000000000000000000000000000000000000602082015250565b60006147e5602b83613969565b91506147f082614789565b604082019050919050565b60006020820190508181036000830152614814816147d8565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614877602a83613969565b91506148828261481b565b604082019050919050565b600060208201905081810360008301526148a68161486a565b9050919050565b7f53616c6520686173206e6f742073746172746564207965742e00000000000000600082015250565b60006148e3601983613969565b91506148ee826148ad565b602082019050919050565b60006020820190508181036000830152614912816148d6565b9050919050565b7f43616e206f6e6c79206d696e74203130206e696674696573207065722077616c60008201527f6c657420696e207075626c69632073616c6520434f4e54524143540000000000602082015250565b6000614975603b83613969565b915061498082614919565b604082019050919050565b600060208201905081810360008301526149a481614968565b9050919050565b60006149b6826136cb565b91506149c1836136cb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149fa576149f96142b4565b5b828202905092915050565b7f45746865722076616c75652073656e74206973206e6f7420656e6f7567680000600082015250565b6000614a3b601e83613969565b9150614a4682614a05565b602082019050919050565b60006020820190508181036000830152614a6a81614a2e565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614aa7601983613969565b9150614ab282614a71565b602082019050919050565b60006020820190508181036000830152614ad681614a9a565b9050919050565b7f50726573616c6520686173206e6f742073746172746564207965742e00000000600082015250565b6000614b13601c83613969565b9150614b1e82614add565b602082019050919050565b60006020820190508181036000830152614b4281614b06565b9050919050565b7f5075626c69632073616c65206973206163746976652e20596f752073686f756c60008201527f646e2774206d696e7420686572652e0000000000000000000000000000000000602082015250565b6000614ba5602f83613969565b9150614bb082614b49565b604082019050919050565b60006020820190508181036000830152614bd481614b98565b9050919050565b7f496e76616c69642070726f6f66202f204e6f742077686974656c697374656400600082015250565b6000614c11601f83613969565b9150614c1c82614bdb565b602082019050919050565b60006020820190508181036000830152614c4081614c04565b9050919050565b7f43616e206f6e6c79206d696e742035206e696674696573207065722077616c6c60008201527f657420696e2070726573616c6500000000000000000000000000000000000000602082015250565b6000614ca3602d83613969565b9150614cae82614c47565b604082019050919050565b60006020820190508181036000830152614cd281614c96565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f662070726573616c65204e69667469657300000000000000000000000000602082015250565b6000614d35603383613969565b9150614d4082614cd9565b604082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614dc7602f83613969565b9150614dd282614d6b565b604082019050919050565b60006020820190508181036000830152614df681614dba565b9050919050565b600081905092915050565b6000614e138261395e565b614e1d8185614dfd565b9350614e2d81856020860161397a565b80840191505092915050565b6000614e458285614e08565b9150614e518284614e08565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614eb9602683613969565b9150614ec482614e5d565b604082019050919050565b60006020820190508181036000830152614ee881614eac565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614f4b602c83613969565b9150614f5682614eef565b604082019050919050565b60006020820190508181036000830152614f7a81614f3e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614fdd602983613969565b9150614fe882614f81565b604082019050919050565b6000602082019050818103600083015261500c81614fd0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061506f602483613969565b915061507a82615013565b604082019050919050565b6000602082019050818103600083015261509e81615062565b9050919050565b60006150b0826136cb565b91506150bb836136cb565b9250828210156150ce576150cd6142b4565b5b828203905092915050565b60008160601b9050919050565b60006150f1826150d9565b9050919050565b6000615103826150e6565b9050919050565b61511b61511682613a55565b6150f8565b82525050565b600061512d828461510a565b60148201915081905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615198603283613969565b91506151a38261513c565b604082019050919050565b600060208201905081810360008301526151c78161518b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615208826136cb565b9150615213836136cb565b925082615223576152226151ce565b5b828204905092915050565b6000615239826136cb565b9150615244836136cb565b925082615254576152536151ce565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000819050919050565b6152a96152a482613bf0565b61528e565b82525050565b60006152bb8285615298565b6020820191506152cb8284615298565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000615302826152db565b61530c81856152e6565b935061531c81856020860161397a565b6153258161370b565b840191505092915050565b60006080820190506153456000830187613a67565b6153526020830186613a67565b61535f6040830185613afd565b818103606083015261537181846152f7565b905095945050505050565b60008151905061538b816138cf565b92915050565b6000602082840312156153a7576153a66136c1565b5b60006153b58482850161537c565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006153f4602083613969565b91506153ff826153be565b602082019050919050565b60006020820190508181036000830152615423816153e7565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615460601c83613969565b915061546b8261542a565b602082019050919050565b6000602082019050818103600083015261548f81615453565b905091905056fea264697066735822122045e808aa4cb732141d21cd01c4deea45037214c7534824d8ccdce0bc1c2b20b064736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000014546865204e69667479205761792047616c6178790000000000000000000000000000000000000000000000000000000000000000000000000000000000000004544e574700000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): The Nifty Way Galaxy
Arg [1] : symbol (string): TNWG
Arg [2] : maxNftSupply (uint256): 10000
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [4] : 546865204e69667479205761792047616c617879000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 544e574700000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
260:9280:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5727:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8620:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2349:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3860:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3398:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1173:42:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8177:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5067:455;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1534:111:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4724:330:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1210:253:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5120:179:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1717:230:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6151:162:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1542:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;360:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1603:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2052:235:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1077:44:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1977:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7261:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1790:205:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:11;;;;;;;;;;;;;:::i;:::-;;1916:29:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1410:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;966:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1691:38:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;796:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6418:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2511:102:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2490:746:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4144:290:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;958:44:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1478:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7905:143;;;;;;;;;;;;;:::i;:::-;;3442:1063;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5365:320:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1763:101:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2679:329:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6843:218:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4500:162:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6592:77:13;;;;;;;;;;;;;:::i;:::-;;1346:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;672:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:189:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5727:339:13;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5844:11:13::1;;;;;;;;;;;5843:12;5835:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;5930:1;5908:18;:23;5905:155;;;5967:13;5946:18;:34;;;;;;;;;;;;:::i;:::-;;5905:155;;;6036:13;6018:15;:31;;;;;;;;;;;;:::i;:::-;;5905:155;5727:339:::0;;:::o;8620:323::-;8731:4;8781:25;8766:40;;;:11;:40;;;;:104;;;;8837:33;8822:48;;;:11;:48;;;;8766:104;:170;;;;8901:35;8886:50;;;:11;:50;;;;8766:170;8747:189;;8620:323;;;:::o;2349:98:3:-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;3963:16;3971:7;3963;:16::i;:::-;3955:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4046:15;:24;4062:7;4046:24;;;;;;;;;;;;;;;;;;;;;4039:31;;3860:217;;;:::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;3535:11;;:2;:11;;;;3527:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3632:5;3616:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3641:37;3658:5;3665:12;:10;:12::i;:::-;3641:16;:37::i;:::-;3616:62;3595:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3468:331;3398:401;;:::o;1173:42:13:-;1212:3;1173:42;:::o;8177:160::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8240:25:13::1;8276:2;8240:39;;8289:9;:18;;:41;8308:21;8289:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8230:107;8177:160:::0;:::o;5067:455::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5145:14:13::1;5162:13;:11;:13::i;:::-;5145:30;;5194:18;;;;;;;;;;;5193:19;5185:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;5303:11;;1212:3;5278:6;:21;;;;:::i;:::-;:36;;5270:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;5382:9;5377:103;5401:14;5397:1;:18;5377:103;;;5436:33;5446:10;5467:1;5458:6;:10;;;;:::i;:::-;5436:9;:33::i;:::-;5417:3;;;;;:::i;:::-;;;;5377:103;;;;5511:4;5490:18;;:25;;;;;;;;;;;;;;;;;;5135:387;5067:455:::0;:::o;1534:111:4:-;1595:7;1621:10;:17;;;;1614:24;;1534:111;:::o;4724:330:3:-;4913:41;4932:12;:10;:12::i;:::-;4946:7;4913:18;:41::i;:::-;4905:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;:::-;4724:330;;;:::o;1210:253:4:-;1307:7;1342:23;1359:5;1342:16;:23::i;:::-;1334:5;:31;1326:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1430:12;:19;1443:5;1430:19;;;;;;;;;;;;;;;:26;1450:5;1430:26;;;;;;;;;;;;1423:33;;1210:253;;;;:::o;5120:179:3:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;:::-;5120:179;;;:::o;1717:230:4:-;1792:7;1827:30;:28;:30::i;:::-;1819:5;:38;1811:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1923:10;1934:5;1923:17;;;;;;;;:::i;:::-;;;;;;;;;;1916:24;;1717:230;;;:::o;6151:162:13:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6233:11:13::1;;;;;;;;;;;6232:12;6224:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;6296:10;6286:7;:20;;;;;;;;;;;;:::i;:::-;;6151:162:::0;:::o;1542:32::-;;;;;;;;;;;;;:::o;360:34::-;;;;:::o;1603:35::-;;;;;;;;;;;;;:::o;2052:235:3:-;2124:7;2143:13;2159:7;:16;2167:7;2159:16;;;;;;;;;;;;;;;;;;;;;2143:32;;2210:1;2193:19;;:5;:19;;;;2185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2275:5;2268:12;;;2052:235;;;:::o;1077:44:13:-;1119:2;1077:44;:::o;1977:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7261:287::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7351:13:13::1;:11;:13::i;:::-;7336:12;:28;7328:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7446:11;;7431:12;:26;7423:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;7529:12;7515:11;:26;;;;7261:287:::0;:::o;1790:205:3:-;1862:7;1906:1;1889:19;;:5;:19;;;;1881:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1972:9;:16;1982:5;1972:16;;;;;;;;;;;;;;;;1965:23;;1790:205;;;:::o;1598:92:11:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;1916:29:13:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1410:41::-;;;;:::o;966:85:11:-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;1691:38:13:-;;;;;;;;;;;;;:::o;796:54::-;840:10;796:54;:::o;6418:103::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6507:7:13::1;6485:19;:29;;;;6418:103:::0;:::o;2511:102:3:-;2567:13;2599:7;2592:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2511:102;:::o;2490:746:13:-;2558:12;;;;;;;;;;;2550:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;1119:2;2650:14;2618:17;:29;2636:10;2618:29;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:65;;2610:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;2799:11;;2781:14;2765:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:45;;2757:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;2911:9;2893:14;713:10;2876:31;;;;:::i;:::-;:44;;2868:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;2978:6;2974:256;2994:14;2990:1;:18;2974:256;;;3029:14;3046:13;:11;:13::i;:::-;3029:30;;3093:11;;3077:13;:11;:13::i;:::-;:27;3073:147;;;3124:17;:29;3142:10;3124:29;;;;;;;;;;;;;;;;:31;;;;;;;;;:::i;:::-;;;;;;3173:32;3183:10;3195:9;3173;:32::i;:::-;3073:147;3015:215;3010:3;;;;;:::i;:::-;;;;2974:256;;;;2490:746;:::o;4144:290:3:-;4258:12;:10;:12::i;:::-;4246:24;;:8;:24;;;;4238:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4356:8;4311:18;:32;4330:12;:10;:12::i;:::-;4311:32;;;;;;;;;;;;;;;:42;4344:8;4311:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4408:8;4379:48;;4394:12;:10;:12::i;:::-;4379:48;;;4418:8;4379:48;;;;;;:::i;:::-;;;;;;;;4144:290;;:::o;958:44:13:-;1001:1;958:44;:::o;1478:31::-;;;;;;;;;;;;;:::o;7905:143::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7957:18:13::1;7986:10;7957:40;;8007:2;:11;;:34;8019:21;8007:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;7947:101;7905:143::o:0;3442:1063::-;3643:15;;;;;;;;;;;3635:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3710:12;;;;;;;;;;;3709:13;3701:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3792:33;3800:17;3806:10;3800:5;:17::i;:::-;3819:5;;3792:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:33::i;:::-;3784:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;1001:1;3908:14;3879;:26;3894:10;3879:26;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:63;;3871:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;4044:19;;4026:14;4010:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:53;;4002:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;4175:9;4157:14;840:10;4137:34;;;;:::i;:::-;:47;;4129:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;4242:6;4238:261;4258:14;4254:1;:18;4238:261;;;4293:14;4310:13;:11;:13::i;:::-;4293:30;;4357:19;;4341:13;:11;:13::i;:::-;:35;4337:152;;;4396:14;:26;4411:10;4396:26;;;;;;;;;;;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;4442:32;4452:10;4464:9;4442;:32::i;:::-;4337:152;4279:220;4274:3;;;;;:::i;:::-;;;;4238:261;;;;3442:1063;;;:::o;5365:320:3:-;5534:41;5553:12;:10;:12::i;:::-;5567:7;5534:18;:41::i;:::-;5526:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;:::-;5365:320;;;;:::o;1763:101:13:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2679:329:3:-;2752:13;2785:16;2793:7;2785;:16::i;:::-;2777:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2864:21;2888:10;:8;:10::i;:::-;2864:34;;2939:1;2921:7;2915:21;:25;:86;;;;;;;;;;;;;;;;;2967:7;2976:18;:7;:16;:18::i;:::-;2950:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2915:86;2908:93;;;2679:329;;;:::o;6843:218:13:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6919:1:13::1;6907:8;:13;6904:151;;;6954:15;;;;;;;;;;;6953:16;6935:15;;:34;;;;;;;;;;;;;;;;;;6904:151;;;7000:1;6988:8;:13;6985:70;;;7032:12;;;;;;;;;;;7031:13;7016:12;;:28;;;;;;;;;;;;;;;;;;6985:70;6904:151;6843:218:::0;:::o;4500:162:3:-;4597:4;4620:18;:25;4639:5;4620:25;;;;;;;;;;;;;;;:35;4646:8;4620:35;;;;;;;;;;;;;;;;;;;;;;;;;4613:42;;4500:162;;;;:::o;6592:77:13:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6658:4:13::1;6644:11;;:18;;;;;;;;;;;;;;;;;;6592:77::o:0;1346:26::-;;;;:::o;672:51::-;713:10;672:51;:::o;1839:189:11:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;718:377:0:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;2543:572:4:-;2682:45;2709:4;2715:2;2719:7;2682:26;:45::i;:::-;2758:1;2742:18;;:4;:18;;;2738:183;;;2776:40;2808:7;2776:31;:40::i;:::-;2738:183;;;2845:2;2837:10;;:4;:10;;;2833:88;;2863:47;2896:4;2902:7;2863:32;:47::i;:::-;2833:88;2738:183;2948:1;2934:16;;:2;:16;;;2930:179;;;2966:45;3003:7;2966:36;:45::i;:::-;2930:179;;;3038:4;3032:10;;:2;:10;;;3028:81;;3058:40;3086:2;3090:7;3058:27;:40::i;:::-;3028:81;2930:179;2543:572;;;:::o;13066:122:3:-;;;;:::o;587:96:1:-;640:7;666:10;659:17;;587:96;:::o;7157:125:3:-;7222:4;7273:1;7245:30;;:7;:16;7253:7;7245:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7238:37;;7157:125;;;:::o;11008:171::-;11109:2;11082:15;:24;11098:7;11082:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11164:7;11160:2;11126:46;;11135:23;11150:7;11135:14;:23::i;:::-;11126:46;;;;;;;;;;;;11008:171;;:::o;8114:108::-;8189:26;8199:2;8203:7;8189:26;;;;;;;;;;;;:9;:26::i;:::-;8114:108;;:::o;7440:344::-;7533:4;7557:16;7565:7;7557;:16::i;:::-;7549:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;7689:16;;:7;:16;;;:51;;;;7733:7;7709:31;;:20;7721:7;7709:11;:20::i;:::-;:31;;;7689:51;:87;;;;7744:32;7761:5;7768:7;7744:16;:32::i;:::-;7689:87;7681:96;;;7440:344;;;;:::o;10337:560::-;10491:4;10464:31;;:23;10479:7;10464:14;:23::i;:::-;:31;;;10456:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10573:1;10559:16;;:2;:16;;;;10551:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10627:39;10648:4;10654:2;10658:7;10627:20;:39::i;:::-;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;10787:1;10768:9;:15;10778:4;10768:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10815:1;10798:9;:13;10808:2;10798:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10845:2;10826:7;:16;10834:7;10826:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10882:7;10878:2;10863:27;;10872:4;10863:27;;;;;;;;;;;;10337:560;;;:::o;2034:169:11:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2079:124;2034:169;:::o;9047:132:13:-;9106:7;9163;9146:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;9136:36;;;;;;9129:43;;9047:132;;;:::o;9370:168::-;9452:4;9479:52;9498:5;9505:19;;9526:4;9479:18;:52::i;:::-;9472:59;;9370:168;;;;:::o;6547:307:3:-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6547:307;;;;:::o;7722:98:13:-;7774:13;7806:7;7799:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7722:98;:::o;275:703:12:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;3821:161:4:-;3924:10;:17;;;;3897:15;:24;3913:7;3897:24;;;;;;;;;;;:44;;;;3951:10;3967:7;3951:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3821:161;:::o;4599:970::-;4861:22;4911:1;4886:22;4903:4;4886:16;:22::i;:::-;:26;;;;:::i;:::-;4861:51;;4922:18;4943:17;:26;4961:7;4943:26;;;;;;;;;;;;4922:47;;5087:14;5073:10;:28;5069:323;;5117:19;5139:12;:18;5152:4;5139:18;;;;;;;;;;;;;;;:34;5158:14;5139:34;;;;;;;;;;;;5117:56;;5221:11;5188:12;:18;5201:4;5188:18;;;;;;;;;;;;;;;:30;5207:10;5188:30;;;;;;;;;;;:44;;;;5337:10;5304:17;:30;5322:11;5304:30;;;;;;;;;;;:43;;;;5103:289;5069:323;5485:17;:26;5503:7;5485:26;;;;;;;;;;;5478:33;;;5528:12;:18;5541:4;5528:18;;;;;;;;;;;;;;;:34;5547:14;5528:34;;;;;;;;;;;5521:41;;;4680:889;;4599:970;;:::o;5857:1061::-;6106:22;6151:1;6131:10;:17;;;;:21;;;;:::i;:::-;6106:46;;6162:18;6183:15;:24;6199:7;6183:24;;;;;;;;;;;;6162:45;;6529:19;6551:10;6562:14;6551:26;;;;;;;;:::i;:::-;;;;;;;;;;6529:48;;6613:11;6588:10;6599;6588:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6723:10;6692:15;:28;6708:11;6692:28;;;;;;;;;;;:41;;;;6861:15;:24;6877:7;6861:24;;;;;;;;;;;6854:31;;;6895:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5928:990;;;5857:1061;:::o;3409:217::-;3493:14;3510:20;3527:2;3510:16;:20::i;:::-;3493:37;;3567:7;3540:12;:16;3553:2;3540:16;;;;;;;;;;;;;;;:24;3557:6;3540:24;;;;;;;;;;;:34;;;;3613:6;3584:17;:26;3602:7;3584:26;;;;;;;;;;;:35;;;;3483:143;3409:217;;:::o;8443:311:3:-;8568:18;8574:2;8578:7;8568:5;:18::i;:::-;8617:54;8648:1;8652:2;8656:7;8665:5;8617:22;:54::i;:::-;8596:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8443:311;;;:::o;8427:187:13:-;8552:55;8590:4;8596:2;8600:6;8552:37;:55::i;:::-;8427:187;;;:::o;777:809:10:-;898:4;914:20;937:4;914:27;;957:9;952:515;976:5;:12;972:1;:16;952:515;;;1009:20;1032:5;1038:1;1032:8;;;;;;;;:::i;:::-;;;;;;;;1009:31;;1075:12;1059;:28;1055:402;;1227:12;1241;1210:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1200:55;;;;;;1185:70;;1055:402;;;1414:12;1428;1397:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1387:55;;;;;;1372:70;;1055:402;995:472;990:3;;;;;:::i;:::-;;;;952:515;;;;1575:4;1559:12;:20;1552:27;;;777:809;;;;;:::o;11732:778:3:-;11882:4;11902:15;:2;:13;;;:15::i;:::-;11898:606;;;11953:2;11937:36;;;11974:12;:10;:12::i;:::-;11988:4;11994:7;12003:5;11937:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11933:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12193:1;12176:6;:13;:18;12172:266;;;12218:60;;;;;;;;;;:::i;:::-;;;;;;;;12172:266;12390:6;12384:13;12375:6;12371:2;12367:15;12360:38;11933:519;12069:41;;;12059:51;;;:6;:51;;;;12052:58;;;;;11898:606;12489:4;12482:11;;11732:778;;;;;;;:::o;9076:372::-;9169:1;9155:16;;:2;:16;;;;9147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9227:16;9235:7;9227;:16::i;:::-;9226:17;9218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9287:45;9316:1;9320:2;9324:7;9287:20;:45::i;:::-;9360:1;9343:9;:13;9353:2;9343:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9390:2;9371:7;:16;9379:7;9371:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9433:7;9429:2;9408:33;;9425:1;9408:33;;;;;;;;;;;;9076:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:14:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:117::-;799:1;796;789:12;813:117;922:1;919;912:12;936:102;977:6;1028:2;1024:7;1019:2;1012:5;1008:14;1004:28;994:38;;936:102;;;:::o;1044:180::-;1092:77;1089:1;1082:88;1189:4;1186:1;1179:15;1213:4;1210:1;1203:15;1230:281;1313:27;1335:4;1313:27;:::i;:::-;1305:6;1301:40;1443:6;1431:10;1428:22;1407:18;1395:10;1392:34;1389:62;1386:88;;;1454:18;;:::i;:::-;1386:88;1494:10;1490:2;1483:22;1273:238;1230:281;;:::o;1517:129::-;1551:6;1578:20;;:::i;:::-;1568:30;;1607:33;1635:4;1627:6;1607:33;:::i;:::-;1517:129;;;:::o;1652:308::-;1714:4;1804:18;1796:6;1793:30;1790:56;;;1826:18;;:::i;:::-;1790:56;1864:29;1886:6;1864:29;:::i;:::-;1856:37;;1948:4;1942;1938:15;1930:23;;1652:308;;;:::o;1966:154::-;2050:6;2045:3;2040;2027:30;2112:1;2103:6;2098:3;2094:16;2087:27;1966:154;;;:::o;2126:412::-;2204:5;2229:66;2245:49;2287:6;2245:49;:::i;:::-;2229:66;:::i;:::-;2220:75;;2318:6;2311:5;2304:21;2356:4;2349:5;2345:16;2394:3;2385:6;2380:3;2376:16;2373:25;2370:112;;;2401:79;;:::i;:::-;2370:112;2491:41;2525:6;2520:3;2515;2491:41;:::i;:::-;2210:328;2126:412;;;;;:::o;2558:340::-;2614:5;2663:3;2656:4;2648:6;2644:17;2640:27;2630:122;;2671:79;;:::i;:::-;2630:122;2788:6;2775:20;2813:79;2888:3;2880:6;2873:4;2865:6;2861:17;2813:79;:::i;:::-;2804:88;;2620:278;2558:340;;;;:::o;2904:654::-;2982:6;2990;3039:2;3027:9;3018:7;3014:23;3010:32;3007:119;;;3045:79;;:::i;:::-;3007:119;3165:1;3190:53;3235:7;3226:6;3215:9;3211:22;3190:53;:::i;:::-;3180:63;;3136:117;3320:2;3309:9;3305:18;3292:32;3351:18;3343:6;3340:30;3337:117;;;3373:79;;:::i;:::-;3337:117;3478:63;3533:7;3524:6;3513:9;3509:22;3478:63;:::i;:::-;3468:73;;3263:288;2904:654;;;;;:::o;3564:149::-;3600:7;3640:66;3633:5;3629:78;3618:89;;3564:149;;;:::o;3719:120::-;3791:23;3808:5;3791:23;:::i;:::-;3784:5;3781:34;3771:62;;3829:1;3826;3819:12;3771:62;3719:120;:::o;3845:137::-;3890:5;3928:6;3915:20;3906:29;;3944:32;3970:5;3944:32;:::i;:::-;3845:137;;;;:::o;3988:327::-;4046:6;4095:2;4083:9;4074:7;4070:23;4066:32;4063:119;;;4101:79;;:::i;:::-;4063:119;4221:1;4246:52;4290:7;4281:6;4270:9;4266:22;4246:52;:::i;:::-;4236:62;;4192:116;3988:327;;;;:::o;4321:90::-;4355:7;4398:5;4391:13;4384:21;4373:32;;4321:90;;;:::o;4417:109::-;4498:21;4513:5;4498:21;:::i;:::-;4493:3;4486:34;4417:109;;:::o;4532:210::-;4619:4;4657:2;4646:9;4642:18;4634:26;;4670:65;4732:1;4721:9;4717:17;4708:6;4670:65;:::i;:::-;4532:210;;;;:::o;4748:99::-;4800:6;4834:5;4828:12;4818:22;;4748:99;;;:::o;4853:169::-;4937:11;4971:6;4966:3;4959:19;5011:4;5006:3;5002:14;4987:29;;4853:169;;;;:::o;5028:307::-;5096:1;5106:113;5120:6;5117:1;5114:13;5106:113;;;5205:1;5200:3;5196:11;5190:18;5186:1;5181:3;5177:11;5170:39;5142:2;5139:1;5135:10;5130:15;;5106:113;;;5237:6;5234:1;5231:13;5228:101;;;5317:1;5308:6;5303:3;5299:16;5292:27;5228:101;5077:258;5028:307;;;:::o;5341:364::-;5429:3;5457:39;5490:5;5457:39;:::i;:::-;5512:71;5576:6;5571:3;5512:71;:::i;:::-;5505:78;;5592:52;5637:6;5632:3;5625:4;5618:5;5614:16;5592:52;:::i;:::-;5669:29;5691:6;5669:29;:::i;:::-;5664:3;5660:39;5653:46;;5433:272;5341:364;;;;:::o;5711:313::-;5824:4;5862:2;5851:9;5847:18;5839:26;;5911:9;5905:4;5901:20;5897:1;5886:9;5882:17;5875:47;5939:78;6012:4;6003:6;5939:78;:::i;:::-;5931:86;;5711:313;;;;:::o;6030:329::-;6089:6;6138:2;6126:9;6117:7;6113:23;6109:32;6106:119;;;6144:79;;:::i;:::-;6106:119;6264:1;6289:53;6334:7;6325:6;6314:9;6310:22;6289:53;:::i;:::-;6279:63;;6235:117;6030:329;;;;:::o;6365:126::-;6402:7;6442:42;6435:5;6431:54;6420:65;;6365:126;;;:::o;6497:96::-;6534:7;6563:24;6581:5;6563:24;:::i;:::-;6552:35;;6497:96;;;:::o;6599:118::-;6686:24;6704:5;6686:24;:::i;:::-;6681:3;6674:37;6599:118;;:::o;6723:222::-;6816:4;6854:2;6843:9;6839:18;6831:26;;6867:71;6935:1;6924:9;6920:17;6911:6;6867:71;:::i;:::-;6723:222;;;;:::o;6951:122::-;7024:24;7042:5;7024:24;:::i;:::-;7017:5;7014:35;7004:63;;7063:1;7060;7053:12;7004:63;6951:122;:::o;7079:139::-;7125:5;7163:6;7150:20;7141:29;;7179:33;7206:5;7179:33;:::i;:::-;7079:139;;;;:::o;7224:474::-;7292:6;7300;7349:2;7337:9;7328:7;7324:23;7320:32;7317:119;;;7355:79;;:::i;:::-;7317:119;7475:1;7500:53;7545:7;7536:6;7525:9;7521:22;7500:53;:::i;:::-;7490:63;;7446:117;7602:2;7628:53;7673:7;7664:6;7653:9;7649:22;7628:53;:::i;:::-;7618:63;;7573:118;7224:474;;;;;:::o;7704:118::-;7791:24;7809:5;7791:24;:::i;:::-;7786:3;7779:37;7704:118;;:::o;7828:222::-;7921:4;7959:2;7948:9;7944:18;7936:26;;7972:71;8040:1;8029:9;8025:17;8016:6;7972:71;:::i;:::-;7828:222;;;;:::o;8056:329::-;8115:6;8164:2;8152:9;8143:7;8139:23;8135:32;8132:119;;;8170:79;;:::i;:::-;8132:119;8290:1;8315:53;8360:7;8351:6;8340:9;8336:22;8315:53;:::i;:::-;8305:63;;8261:117;8056:329;;;;:::o;8391:619::-;8468:6;8476;8484;8533:2;8521:9;8512:7;8508:23;8504:32;8501:119;;;8539:79;;:::i;:::-;8501:119;8659:1;8684:53;8729:7;8720:6;8709:9;8705:22;8684:53;:::i;:::-;8674:63;;8630:117;8786:2;8812:53;8857:7;8848:6;8837:9;8833:22;8812:53;:::i;:::-;8802:63;;8757:118;8914:2;8940:53;8985:7;8976:6;8965:9;8961:22;8940:53;:::i;:::-;8930:63;;8885:118;8391:619;;;;;:::o;9016:509::-;9085:6;9134:2;9122:9;9113:7;9109:23;9105:32;9102:119;;;9140:79;;:::i;:::-;9102:119;9288:1;9277:9;9273:17;9260:31;9318:18;9310:6;9307:30;9304:117;;;9340:79;;:::i;:::-;9304:117;9445:63;9500:7;9491:6;9480:9;9476:22;9445:63;:::i;:::-;9435:73;;9231:287;9016:509;;;;:::o;9531:77::-;9568:7;9597:5;9586:16;;9531:77;;;:::o;9614:118::-;9701:24;9719:5;9701:24;:::i;:::-;9696:3;9689:37;9614:118;;:::o;9738:222::-;9831:4;9869:2;9858:9;9854:18;9846:26;;9882:71;9950:1;9939:9;9935:17;9926:6;9882:71;:::i;:::-;9738:222;;;;:::o;9966:122::-;10039:24;10057:5;10039:24;:::i;:::-;10032:5;10029:35;10019:63;;10078:1;10075;10068:12;10019:63;9966:122;:::o;10094:139::-;10140:5;10178:6;10165:20;10156:29;;10194:33;10221:5;10194:33;:::i;:::-;10094:139;;;;:::o;10239:329::-;10298:6;10347:2;10335:9;10326:7;10322:23;10318:32;10315:119;;;10353:79;;:::i;:::-;10315:119;10473:1;10498:53;10543:7;10534:6;10523:9;10519:22;10498:53;:::i;:::-;10488:63;;10444:117;10239:329;;;;:::o;10574:116::-;10644:21;10659:5;10644:21;:::i;:::-;10637:5;10634:32;10624:60;;10680:1;10677;10670:12;10624:60;10574:116;:::o;10696:133::-;10739:5;10777:6;10764:20;10755:29;;10793:30;10817:5;10793:30;:::i;:::-;10696:133;;;;:::o;10835:468::-;10900:6;10908;10957:2;10945:9;10936:7;10932:23;10928:32;10925:119;;;10963:79;;:::i;:::-;10925:119;11083:1;11108:53;11153:7;11144:6;11133:9;11129:22;11108:53;:::i;:::-;11098:63;;11054:117;11210:2;11236:50;11278:7;11269:6;11258:9;11254:22;11236:50;:::i;:::-;11226:60;;11181:115;10835:468;;;;;:::o;11309:117::-;11418:1;11415;11408:12;11432:117;11541:1;11538;11531:12;11572:568;11645:8;11655:6;11705:3;11698:4;11690:6;11686:17;11682:27;11672:122;;11713:79;;:::i;:::-;11672:122;11826:6;11813:20;11803:30;;11856:18;11848:6;11845:30;11842:117;;;11878:79;;:::i;:::-;11842:117;11992:4;11984:6;11980:17;11968:29;;12046:3;12038:4;12030:6;12026:17;12016:8;12012:32;12009:41;12006:128;;;12053:79;;:::i;:::-;12006:128;11572:568;;;;;:::o;12146:704::-;12241:6;12249;12257;12306:2;12294:9;12285:7;12281:23;12277:32;12274:119;;;12312:79;;:::i;:::-;12274:119;12460:1;12449:9;12445:17;12432:31;12490:18;12482:6;12479:30;12476:117;;;12512:79;;:::i;:::-;12476:117;12625:80;12697:7;12688:6;12677:9;12673:22;12625:80;:::i;:::-;12607:98;;;;12403:312;12754:2;12780:53;12825:7;12816:6;12805:9;12801:22;12780:53;:::i;:::-;12770:63;;12725:118;12146:704;;;;;:::o;12856:307::-;12917:4;13007:18;12999:6;12996:30;12993:56;;;13029:18;;:::i;:::-;12993:56;13067:29;13089:6;13067:29;:::i;:::-;13059:37;;13151:4;13145;13141:15;13133:23;;12856:307;;;:::o;13169:410::-;13246:5;13271:65;13287:48;13328:6;13287:48;:::i;:::-;13271:65;:::i;:::-;13262:74;;13359:6;13352:5;13345:21;13397:4;13390:5;13386:16;13435:3;13426:6;13421:3;13417:16;13414:25;13411:112;;;13442:79;;:::i;:::-;13411:112;13532:41;13566:6;13561:3;13556;13532:41;:::i;:::-;13252:327;13169:410;;;;;:::o;13598:338::-;13653:5;13702:3;13695:4;13687:6;13683:17;13679:27;13669:122;;13710:79;;:::i;:::-;13669:122;13827:6;13814:20;13852:78;13926:3;13918:6;13911:4;13903:6;13899:17;13852:78;:::i;:::-;13843:87;;13659:277;13598:338;;;;:::o;13942:943::-;14037:6;14045;14053;14061;14110:3;14098:9;14089:7;14085:23;14081:33;14078:120;;;14117:79;;:::i;:::-;14078:120;14237:1;14262:53;14307:7;14298:6;14287:9;14283:22;14262:53;:::i;:::-;14252:63;;14208:117;14364:2;14390:53;14435:7;14426:6;14415:9;14411:22;14390:53;:::i;:::-;14380:63;;14335:118;14492:2;14518:53;14563:7;14554:6;14543:9;14539:22;14518:53;:::i;:::-;14508:63;;14463:118;14648:2;14637:9;14633:18;14620:32;14679:18;14671:6;14668:30;14665:117;;;14701:79;;:::i;:::-;14665:117;14806:62;14860:7;14851:6;14840:9;14836:22;14806:62;:::i;:::-;14796:72;;14591:287;13942:943;;;;;;;:::o;14891:474::-;14959:6;14967;15016:2;15004:9;14995:7;14991:23;14987:32;14984:119;;;15022:79;;:::i;:::-;14984:119;15142:1;15167:53;15212:7;15203:6;15192:9;15188:22;15167:53;:::i;:::-;15157:63;;15113:117;15269:2;15295:53;15340:7;15331:6;15320:9;15316:22;15295:53;:::i;:::-;15285:63;;15240:118;14891:474;;;;;:::o;15371:182::-;15511:34;15507:1;15499:6;15495:14;15488:58;15371:182;:::o;15559:366::-;15701:3;15722:67;15786:2;15781:3;15722:67;:::i;:::-;15715:74;;15798:93;15887:3;15798:93;:::i;:::-;15916:2;15911:3;15907:12;15900:19;;15559:366;;;:::o;15931:419::-;16097:4;16135:2;16124:9;16120:18;16112:26;;16184:9;16178:4;16174:20;16170:1;16159:9;16155:17;16148:47;16212:131;16338:4;16212:131;:::i;:::-;16204:139;;15931:419;;;:::o;16356:221::-;16496:34;16492:1;16484:6;16480:14;16473:58;16565:4;16560:2;16552:6;16548:15;16541:29;16356:221;:::o;16583:366::-;16725:3;16746:67;16810:2;16805:3;16746:67;:::i;:::-;16739:74;;16822:93;16911:3;16822:93;:::i;:::-;16940:2;16935:3;16931:12;16924:19;;16583:366;;;:::o;16955:419::-;17121:4;17159:2;17148:9;17144:18;17136:26;;17208:9;17202:4;17198:20;17194:1;17183:9;17179:17;17172:47;17236:131;17362:4;17236:131;:::i;:::-;17228:139;;16955:419;;;:::o;17380:180::-;17428:77;17425:1;17418:88;17525:4;17522:1;17515:15;17549:4;17546:1;17539:15;17566:320;17610:6;17647:1;17641:4;17637:12;17627:22;;17694:1;17688:4;17684:12;17715:18;17705:81;;17771:4;17763:6;17759:17;17749:27;;17705:81;17833:2;17825:6;17822:14;17802:18;17799:38;17796:84;;;17852:18;;:::i;:::-;17796:84;17617:269;17566:320;;;:::o;17892:231::-;18032:34;18028:1;18020:6;18016:14;18009:58;18101:14;18096:2;18088:6;18084:15;18077:39;17892:231;:::o;18129:366::-;18271:3;18292:67;18356:2;18351:3;18292:67;:::i;:::-;18285:74;;18368:93;18457:3;18368:93;:::i;:::-;18486:2;18481:3;18477:12;18470:19;;18129:366;;;:::o;18501:419::-;18667:4;18705:2;18694:9;18690:18;18682:26;;18754:9;18748:4;18744:20;18740:1;18729:9;18725:17;18718:47;18782:131;18908:4;18782:131;:::i;:::-;18774:139;;18501:419;;;:::o;18926:220::-;19066:34;19062:1;19054:6;19050:14;19043:58;19135:3;19130:2;19122:6;19118:15;19111:28;18926:220;:::o;19152:366::-;19294:3;19315:67;19379:2;19374:3;19315:67;:::i;:::-;19308:74;;19391:93;19480:3;19391:93;:::i;:::-;19509:2;19504:3;19500:12;19493:19;;19152:366;;;:::o;19524:419::-;19690:4;19728:2;19717:9;19713:18;19705:26;;19777:9;19771:4;19767:20;19763:1;19752:9;19748:17;19741:47;19805:131;19931:4;19805:131;:::i;:::-;19797:139;;19524:419;;;:::o;19949:243::-;20089:34;20085:1;20077:6;20073:14;20066:58;20158:26;20153:2;20145:6;20141:15;20134:51;19949:243;:::o;20198:366::-;20340:3;20361:67;20425:2;20420:3;20361:67;:::i;:::-;20354:74;;20437:93;20526:3;20437:93;:::i;:::-;20555:2;20550:3;20546:12;20539:19;;20198:366;;;:::o;20570:419::-;20736:4;20774:2;20763:9;20759:18;20751:26;;20823:9;20817:4;20813:20;20809:1;20798:9;20794:17;20787:47;20851:131;20977:4;20851:131;:::i;:::-;20843:139;;20570:419;;;:::o;20995:230::-;21135:34;21131:1;21123:6;21119:14;21112:58;21204:13;21199:2;21191:6;21187:15;21180:38;20995:230;:::o;21231:366::-;21373:3;21394:67;21458:2;21453:3;21394:67;:::i;:::-;21387:74;;21470:93;21559:3;21470:93;:::i;:::-;21588:2;21583:3;21579:12;21572:19;;21231:366;;;:::o;21603:419::-;21769:4;21807:2;21796:9;21792:18;21784:26;;21856:9;21850:4;21846:20;21842:1;21831:9;21827:17;21820:47;21884:131;22010:4;21884:131;:::i;:::-;21876:139;;21603:419;;;:::o;22028:180::-;22076:77;22073:1;22066:88;22173:4;22170:1;22163:15;22197:4;22194:1;22187:15;22214:305;22254:3;22273:20;22291:1;22273:20;:::i;:::-;22268:25;;22307:20;22325:1;22307:20;:::i;:::-;22302:25;;22461:1;22393:66;22389:74;22386:1;22383:81;22380:107;;;22467:18;;:::i;:::-;22380:107;22511:1;22508;22504:9;22497:16;;22214:305;;;;:::o;22525:230::-;22665:34;22661:1;22653:6;22649:14;22642:58;22734:13;22729:2;22721:6;22717:15;22710:38;22525:230;:::o;22761:366::-;22903:3;22924:67;22988:2;22983:3;22924:67;:::i;:::-;22917:74;;23000:93;23089:3;23000:93;:::i;:::-;23118:2;23113:3;23109:12;23102:19;;22761:366;;;:::o;23133:419::-;23299:4;23337:2;23326:9;23322:18;23314:26;;23386:9;23380:4;23376:20;23372:1;23361:9;23357:17;23350:47;23414:131;23540:4;23414:131;:::i;:::-;23406:139;;23133:419;;;:::o;23558:233::-;23597:3;23620:24;23638:5;23620:24;:::i;:::-;23611:33;;23666:66;23659:5;23656:77;23653:103;;;23736:18;;:::i;:::-;23653:103;23783:1;23776:5;23772:13;23765:20;;23558:233;;;:::o;23797:236::-;23937:34;23933:1;23925:6;23921:14;23914:58;24006:19;24001:2;23993:6;23989:15;23982:44;23797:236;:::o;24039:366::-;24181:3;24202:67;24266:2;24261:3;24202:67;:::i;:::-;24195:74;;24278:93;24367:3;24278:93;:::i;:::-;24396:2;24391:3;24387:12;24380:19;;24039:366;;;:::o;24411:419::-;24577:4;24615:2;24604:9;24600:18;24592:26;;24664:9;24658:4;24654:20;24650:1;24639:9;24635:17;24628:47;24692:131;24818:4;24692:131;:::i;:::-;24684:139;;24411:419;;;:::o;24836:230::-;24976:34;24972:1;24964:6;24960:14;24953:58;25045:13;25040:2;25032:6;25028:15;25021:38;24836:230;:::o;25072:366::-;25214:3;25235:67;25299:2;25294:3;25235:67;:::i;:::-;25228:74;;25311:93;25400:3;25311:93;:::i;:::-;25429:2;25424:3;25420:12;25413:19;;25072:366;;;:::o;25444:419::-;25610:4;25648:2;25637:9;25633:18;25625:26;;25697:9;25691:4;25687:20;25683:1;25672:9;25668:17;25661:47;25725:131;25851:4;25725:131;:::i;:::-;25717:139;;25444:419;;;:::o;25869:231::-;26009:34;26005:1;25997:6;25993:14;25986:58;26078:14;26073:2;26065:6;26061:15;26054:39;25869:231;:::o;26106:366::-;26248:3;26269:67;26333:2;26328:3;26269:67;:::i;:::-;26262:74;;26345:93;26434:3;26345:93;:::i;:::-;26463:2;26458:3;26454:12;26447:19;;26106:366;;;:::o;26478:419::-;26644:4;26682:2;26671:9;26667:18;26659:26;;26731:9;26725:4;26721:20;26717:1;26706:9;26702:17;26695:47;26759:131;26885:4;26759:131;:::i;:::-;26751:139;;26478:419;;;:::o;26903:180::-;26951:77;26948:1;26941:88;27048:4;27045:1;27038:15;27072:4;27069:1;27062:15;27089:177;27229:29;27225:1;27217:6;27213:14;27206:53;27089:177;:::o;27272:366::-;27414:3;27435:67;27499:2;27494:3;27435:67;:::i;:::-;27428:74;;27511:93;27600:3;27511:93;:::i;:::-;27629:2;27624:3;27620:12;27613:19;;27272:366;;;:::o;27644:419::-;27810:4;27848:2;27837:9;27833:18;27825:26;;27897:9;27891:4;27887:20;27883:1;27872:9;27868:17;27861:47;27925:131;28051:4;27925:131;:::i;:::-;27917:139;;27644:419;;;:::o;28069:228::-;28209:34;28205:1;28197:6;28193:14;28186:58;28278:11;28273:2;28265:6;28261:15;28254:36;28069:228;:::o;28303:366::-;28445:3;28466:67;28530:2;28525:3;28466:67;:::i;:::-;28459:74;;28542:93;28631:3;28542:93;:::i;:::-;28660:2;28655:3;28651:12;28644:19;;28303:366;;;:::o;28675:419::-;28841:4;28879:2;28868:9;28864:18;28856:26;;28928:9;28922:4;28918:20;28914:1;28903:9;28899:17;28892:47;28956:131;29082:4;28956:131;:::i;:::-;28948:139;;28675:419;;;:::o;29100:231::-;29240:34;29236:1;29228:6;29224:14;29217:58;29309:14;29304:2;29296:6;29292:15;29285:39;29100:231;:::o;29337:366::-;29479:3;29500:67;29564:2;29559:3;29500:67;:::i;:::-;29493:74;;29576:93;29665:3;29576:93;:::i;:::-;29694:2;29689:3;29685:12;29678:19;;29337:366;;;:::o;29709:419::-;29875:4;29913:2;29902:9;29898:18;29890:26;;29962:9;29956:4;29952:20;29948:1;29937:9;29933:17;29926:47;29990:131;30116:4;29990:131;:::i;:::-;29982:139;;29709:419;;;:::o;30134:230::-;30274:34;30270:1;30262:6;30258:14;30251:58;30343:13;30338:2;30330:6;30326:15;30319:38;30134:230;:::o;30370:366::-;30512:3;30533:67;30597:2;30592:3;30533:67;:::i;:::-;30526:74;;30609:93;30698:3;30609:93;:::i;:::-;30727:2;30722:3;30718:12;30711:19;;30370:366;;;:::o;30742:419::-;30908:4;30946:2;30935:9;30931:18;30923:26;;30995:9;30989:4;30985:20;30981:1;30970:9;30966:17;30959:47;31023:131;31149:4;31023:131;:::i;:::-;31015:139;;30742:419;;;:::o;31167:229::-;31307:34;31303:1;31295:6;31291:14;31284:58;31376:12;31371:2;31363:6;31359:15;31352:37;31167:229;:::o;31402:366::-;31544:3;31565:67;31629:2;31624:3;31565:67;:::i;:::-;31558:74;;31641:93;31730:3;31641:93;:::i;:::-;31759:2;31754:3;31750:12;31743:19;;31402:366;;;:::o;31774:419::-;31940:4;31978:2;31967:9;31963:18;31955:26;;32027:9;32021:4;32017:20;32013:1;32002:9;31998:17;31991:47;32055:131;32181:4;32055:131;:::i;:::-;32047:139;;31774:419;;;:::o;32199:175::-;32339:27;32335:1;32327:6;32323:14;32316:51;32199:175;:::o;32380:366::-;32522:3;32543:67;32607:2;32602:3;32543:67;:::i;:::-;32536:74;;32619:93;32708:3;32619:93;:::i;:::-;32737:2;32732:3;32728:12;32721:19;;32380:366;;;:::o;32752:419::-;32918:4;32956:2;32945:9;32941:18;32933:26;;33005:9;32999:4;32995:20;32991:1;32980:9;32976:17;32969:47;33033:131;33159:4;33033:131;:::i;:::-;33025:139;;32752:419;;;:::o;33177:246::-;33317:34;33313:1;33305:6;33301:14;33294:58;33386:29;33381:2;33373:6;33369:15;33362:54;33177:246;:::o;33429:366::-;33571:3;33592:67;33656:2;33651:3;33592:67;:::i;:::-;33585:74;;33668:93;33757:3;33668:93;:::i;:::-;33786:2;33781:3;33777:12;33770:19;;33429:366;;;:::o;33801:419::-;33967:4;34005:2;33994:9;33990:18;33982:26;;34054:9;34048:4;34044:20;34040:1;34029:9;34025:17;34018:47;34082:131;34208:4;34082:131;:::i;:::-;34074:139;;33801:419;;;:::o;34226:348::-;34266:7;34289:20;34307:1;34289:20;:::i;:::-;34284:25;;34323:20;34341:1;34323:20;:::i;:::-;34318:25;;34511:1;34443:66;34439:74;34436:1;34433:81;34428:1;34421:9;34414:17;34410:105;34407:131;;;34518:18;;:::i;:::-;34407:131;34566:1;34563;34559:9;34548:20;;34226:348;;;;:::o;34580:180::-;34720:32;34716:1;34708:6;34704:14;34697:56;34580:180;:::o;34766:366::-;34908:3;34929:67;34993:2;34988:3;34929:67;:::i;:::-;34922:74;;35005:93;35094:3;35005:93;:::i;:::-;35123:2;35118:3;35114:12;35107:19;;34766:366;;;:::o;35138:419::-;35304:4;35342:2;35331:9;35327:18;35319:26;;35391:9;35385:4;35381:20;35377:1;35366:9;35362:17;35355:47;35419:131;35545:4;35419:131;:::i;:::-;35411:139;;35138:419;;;:::o;35563:175::-;35703:27;35699:1;35691:6;35687:14;35680:51;35563:175;:::o;35744:366::-;35886:3;35907:67;35971:2;35966:3;35907:67;:::i;:::-;35900:74;;35983:93;36072:3;35983:93;:::i;:::-;36101:2;36096:3;36092:12;36085:19;;35744:366;;;:::o;36116:419::-;36282:4;36320:2;36309:9;36305:18;36297:26;;36369:9;36363:4;36359:20;36355:1;36344:9;36340:17;36333:47;36397:131;36523:4;36397:131;:::i;:::-;36389:139;;36116:419;;;:::o;36541:178::-;36681:30;36677:1;36669:6;36665:14;36658:54;36541:178;:::o;36725:366::-;36867:3;36888:67;36952:2;36947:3;36888:67;:::i;:::-;36881:74;;36964:93;37053:3;36964:93;:::i;:::-;37082:2;37077:3;37073:12;37066:19;;36725:366;;;:::o;37097:419::-;37263:4;37301:2;37290:9;37286:18;37278:26;;37350:9;37344:4;37340:20;37336:1;37325:9;37321:17;37314:47;37378:131;37504:4;37378:131;:::i;:::-;37370:139;;37097:419;;;:::o;37522:234::-;37662:34;37658:1;37650:6;37646:14;37639:58;37731:17;37726:2;37718:6;37714:15;37707:42;37522:234;:::o;37762:366::-;37904:3;37925:67;37989:2;37984:3;37925:67;:::i;:::-;37918:74;;38001:93;38090:3;38001:93;:::i;:::-;38119:2;38114:3;38110:12;38103:19;;37762:366;;;:::o;38134:419::-;38300:4;38338:2;38327:9;38323:18;38315:26;;38387:9;38381:4;38377:20;38373:1;38362:9;38358:17;38351:47;38415:131;38541:4;38415:131;:::i;:::-;38407:139;;38134:419;;;:::o;38559:181::-;38699:33;38695:1;38687:6;38683:14;38676:57;38559:181;:::o;38746:366::-;38888:3;38909:67;38973:2;38968:3;38909:67;:::i;:::-;38902:74;;38985:93;39074:3;38985:93;:::i;:::-;39103:2;39098:3;39094:12;39087:19;;38746:366;;;:::o;39118:419::-;39284:4;39322:2;39311:9;39307:18;39299:26;;39371:9;39365:4;39361:20;39357:1;39346:9;39342:17;39335:47;39399:131;39525:4;39399:131;:::i;:::-;39391:139;;39118:419;;;:::o;39543:232::-;39683:34;39679:1;39671:6;39667:14;39660:58;39752:15;39747:2;39739:6;39735:15;39728:40;39543:232;:::o;39781:366::-;39923:3;39944:67;40008:2;40003:3;39944:67;:::i;:::-;39937:74;;40020:93;40109:3;40020:93;:::i;:::-;40138:2;40133:3;40129:12;40122:19;;39781:366;;;:::o;40153:419::-;40319:4;40357:2;40346:9;40342:18;40334:26;;40406:9;40400:4;40396:20;40392:1;40381:9;40377:17;40370:47;40434:131;40560:4;40434:131;:::i;:::-;40426:139;;40153:419;;;:::o;40578:238::-;40718:34;40714:1;40706:6;40702:14;40695:58;40787:21;40782:2;40774:6;40770:15;40763:46;40578:238;:::o;40822:366::-;40964:3;40985:67;41049:2;41044:3;40985:67;:::i;:::-;40978:74;;41061:93;41150:3;41061:93;:::i;:::-;41179:2;41174:3;41170:12;41163:19;;40822:366;;;:::o;41194:419::-;41360:4;41398:2;41387:9;41383:18;41375:26;;41447:9;41441:4;41437:20;41433:1;41422:9;41418:17;41411:47;41475:131;41601:4;41475:131;:::i;:::-;41467:139;;41194:419;;;:::o;41619:234::-;41759:34;41755:1;41747:6;41743:14;41736:58;41828:17;41823:2;41815:6;41811:15;41804:42;41619:234;:::o;41859:366::-;42001:3;42022:67;42086:2;42081:3;42022:67;:::i;:::-;42015:74;;42098:93;42187:3;42098:93;:::i;:::-;42216:2;42211:3;42207:12;42200:19;;41859:366;;;:::o;42231:419::-;42397:4;42435:2;42424:9;42420:18;42412:26;;42484:9;42478:4;42474:20;42470:1;42459:9;42455:17;42448:47;42512:131;42638:4;42512:131;:::i;:::-;42504:139;;42231:419;;;:::o;42656:148::-;42758:11;42795:3;42780:18;;42656:148;;;;:::o;42810:377::-;42916:3;42944:39;42977:5;42944:39;:::i;:::-;42999:89;43081:6;43076:3;42999:89;:::i;:::-;42992:96;;43097:52;43142:6;43137:3;43130:4;43123:5;43119:16;43097:52;:::i;:::-;43174:6;43169:3;43165:16;43158:23;;42920:267;42810:377;;;;:::o;43193:435::-;43373:3;43395:95;43486:3;43477:6;43395:95;:::i;:::-;43388:102;;43507:95;43598:3;43589:6;43507:95;:::i;:::-;43500:102;;43619:3;43612:10;;43193:435;;;;;:::o;43634:225::-;43774:34;43770:1;43762:6;43758:14;43751:58;43843:8;43838:2;43830:6;43826:15;43819:33;43634:225;:::o;43865:366::-;44007:3;44028:67;44092:2;44087:3;44028:67;:::i;:::-;44021:74;;44104:93;44193:3;44104:93;:::i;:::-;44222:2;44217:3;44213:12;44206:19;;43865:366;;;:::o;44237:419::-;44403:4;44441:2;44430:9;44426:18;44418:26;;44490:9;44484:4;44480:20;44476:1;44465:9;44461:17;44454:47;44518:131;44644:4;44518:131;:::i;:::-;44510:139;;44237:419;;;:::o;44662:231::-;44802:34;44798:1;44790:6;44786:14;44779:58;44871:14;44866:2;44858:6;44854:15;44847:39;44662:231;:::o;44899:366::-;45041:3;45062:67;45126:2;45121:3;45062:67;:::i;:::-;45055:74;;45138:93;45227:3;45138:93;:::i;:::-;45256:2;45251:3;45247:12;45240:19;;44899:366;;;:::o;45271:419::-;45437:4;45475:2;45464:9;45460:18;45452:26;;45524:9;45518:4;45514:20;45510:1;45499:9;45495:17;45488:47;45552:131;45678:4;45552:131;:::i;:::-;45544:139;;45271:419;;;:::o;45696:228::-;45836:34;45832:1;45824:6;45820:14;45813:58;45905:11;45900:2;45892:6;45888:15;45881:36;45696:228;:::o;45930:366::-;46072:3;46093:67;46157:2;46152:3;46093:67;:::i;:::-;46086:74;;46169:93;46258:3;46169:93;:::i;:::-;46287:2;46282:3;46278:12;46271:19;;45930:366;;;:::o;46302:419::-;46468:4;46506:2;46495:9;46491:18;46483:26;;46555:9;46549:4;46545:20;46541:1;46530:9;46526:17;46519:47;46583:131;46709:4;46583:131;:::i;:::-;46575:139;;46302:419;;;:::o;46727:223::-;46867:34;46863:1;46855:6;46851:14;46844:58;46936:6;46931:2;46923:6;46919:15;46912:31;46727:223;:::o;46956:366::-;47098:3;47119:67;47183:2;47178:3;47119:67;:::i;:::-;47112:74;;47195:93;47284:3;47195:93;:::i;:::-;47313:2;47308:3;47304:12;47297:19;;46956:366;;;:::o;47328:419::-;47494:4;47532:2;47521:9;47517:18;47509:26;;47581:9;47575:4;47571:20;47567:1;47556:9;47552:17;47545:47;47609:131;47735:4;47609:131;:::i;:::-;47601:139;;47328:419;;;:::o;47753:191::-;47793:4;47813:20;47831:1;47813:20;:::i;:::-;47808:25;;47847:20;47865:1;47847:20;:::i;:::-;47842:25;;47886:1;47883;47880:8;47877:34;;;47891:18;;:::i;:::-;47877:34;47936:1;47933;47929:9;47921:17;;47753:191;;;;:::o;47950:94::-;47983:8;48031:5;48027:2;48023:14;48002:35;;47950:94;;;:::o;48050:::-;48089:7;48118:20;48132:5;48118:20;:::i;:::-;48107:31;;48050:94;;;:::o;48150:100::-;48189:7;48218:26;48238:5;48218:26;:::i;:::-;48207:37;;48150:100;;;:::o;48256:157::-;48361:45;48381:24;48399:5;48381:24;:::i;:::-;48361:45;:::i;:::-;48356:3;48349:58;48256:157;;:::o;48419:256::-;48531:3;48546:75;48617:3;48608:6;48546:75;:::i;:::-;48646:2;48641:3;48637:12;48630:19;;48666:3;48659:10;;48419:256;;;;:::o;48681:237::-;48821:34;48817:1;48809:6;48805:14;48798:58;48890:20;48885:2;48877:6;48873:15;48866:45;48681:237;:::o;48924:366::-;49066:3;49087:67;49151:2;49146:3;49087:67;:::i;:::-;49080:74;;49163:93;49252:3;49163:93;:::i;:::-;49281:2;49276:3;49272:12;49265:19;;48924:366;;;:::o;49296:419::-;49462:4;49500:2;49489:9;49485:18;49477:26;;49549:9;49543:4;49539:20;49535:1;49524:9;49520:17;49513:47;49577:131;49703:4;49577:131;:::i;:::-;49569:139;;49296:419;;;:::o;49721:180::-;49769:77;49766:1;49759:88;49866:4;49863:1;49856:15;49890:4;49887:1;49880:15;49907:185;49947:1;49964:20;49982:1;49964:20;:::i;:::-;49959:25;;49998:20;50016:1;49998:20;:::i;:::-;49993:25;;50037:1;50027:35;;50042:18;;:::i;:::-;50027:35;50084:1;50081;50077:9;50072:14;;49907:185;;;;:::o;50098:176::-;50130:1;50147:20;50165:1;50147:20;:::i;:::-;50142:25;;50181:20;50199:1;50181:20;:::i;:::-;50176:25;;50220:1;50210:35;;50225:18;;:::i;:::-;50210:35;50266:1;50263;50259:9;50254:14;;50098:176;;;;:::o;50280:180::-;50328:77;50325:1;50318:88;50425:4;50422:1;50415:15;50449:4;50446:1;50439:15;50466:79;50505:7;50534:5;50523:16;;50466:79;;;:::o;50551:157::-;50656:45;50676:24;50694:5;50676:24;:::i;:::-;50656:45;:::i;:::-;50651:3;50644:58;50551:157;;:::o;50714:397::-;50854:3;50869:75;50940:3;50931:6;50869:75;:::i;:::-;50969:2;50964:3;50960:12;50953:19;;50982:75;51053:3;51044:6;50982:75;:::i;:::-;51082:2;51077:3;51073:12;51066:19;;51102:3;51095:10;;50714:397;;;;;:::o;51117:98::-;51168:6;51202:5;51196:12;51186:22;;51117:98;;;:::o;51221:168::-;51304:11;51338:6;51333:3;51326:19;51378:4;51373:3;51369:14;51354:29;;51221:168;;;;:::o;51395:360::-;51481:3;51509:38;51541:5;51509:38;:::i;:::-;51563:70;51626:6;51621:3;51563:70;:::i;:::-;51556:77;;51642:52;51687:6;51682:3;51675:4;51668:5;51664:16;51642:52;:::i;:::-;51719:29;51741:6;51719:29;:::i;:::-;51714:3;51710:39;51703:46;;51485:270;51395:360;;;;:::o;51761:640::-;51956:4;51994:3;51983:9;51979:19;51971:27;;52008:71;52076:1;52065:9;52061:17;52052:6;52008:71;:::i;:::-;52089:72;52157:2;52146:9;52142:18;52133:6;52089:72;:::i;:::-;52171;52239:2;52228:9;52224:18;52215:6;52171:72;:::i;:::-;52290:9;52284:4;52280:20;52275:2;52264:9;52260:18;52253:48;52318:76;52389:4;52380:6;52318:76;:::i;:::-;52310:84;;51761:640;;;;;;;:::o;52407:141::-;52463:5;52494:6;52488:13;52479:22;;52510:32;52536:5;52510:32;:::i;:::-;52407:141;;;;:::o;52554:349::-;52623:6;52672:2;52660:9;52651:7;52647:23;52643:32;52640:119;;;52678:79;;:::i;:::-;52640:119;52798:1;52823:63;52878:7;52869:6;52858:9;52854:22;52823:63;:::i;:::-;52813:73;;52769:127;52554:349;;;;:::o;52909:182::-;53049:34;53045:1;53037:6;53033:14;53026:58;52909:182;:::o;53097:366::-;53239:3;53260:67;53324:2;53319:3;53260:67;:::i;:::-;53253:74;;53336:93;53425:3;53336:93;:::i;:::-;53454:2;53449:3;53445:12;53438:19;;53097:366;;;:::o;53469:419::-;53635:4;53673:2;53662:9;53658:18;53650:26;;53722:9;53716:4;53712:20;53708:1;53697:9;53693:17;53686:47;53750:131;53876:4;53750:131;:::i;:::-;53742:139;;53469:419;;;:::o;53894:178::-;54034:30;54030:1;54022:6;54018:14;54011:54;53894:178;:::o;54078:366::-;54220:3;54241:67;54305:2;54300:3;54241:67;:::i;:::-;54234:74;;54317:93;54406:3;54317:93;:::i;:::-;54435:2;54430:3;54426:12;54419:19;;54078:366;;;:::o;54450:419::-;54616:4;54654:2;54643:9;54639:18;54631:26;;54703:9;54697:4;54693:20;54689:1;54678:9;54674:17;54667:47;54731:131;54857:4;54731:131;:::i;:::-;54723:139;;54450:419;;;:::o
Swarm Source
ipfs://45e808aa4cb732141d21cd01c4deea45037214c7534824d8ccdce0bc1c2b20b0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.