Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
10,000 AAYC
Holders
3,230
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 AAYCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AAYC
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&#BP5YJ?7!!~~^^^^^^^^~!!7?J5PG#&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#PJ!^:. .^~?5B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@P~. ^Y&@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@&! :B@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@! :&@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@P ?@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@~ .::::.. .:^~^^: .#@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@B .75GB##&&&#B5?^ ^?5B&@@&&&#B57. 5@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@J .7Y?~:~5GB####@@@B?. .?B@@@&###BBP~:~?Y7. 7@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@! ^^ .:^!5##GG#@@&^ :#@@#GB##57~:. ^^ ~@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@^ .7G&BPGP^ :PP5B&B?: :@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@&. ~G@G~ :P&P~ .&@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@#. .~7JY55YJ!^ Y@@7 GP^ ^7J5555Y?~. .#@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@B :Y#@@@@@@@@@@#5!.#@&: . !5#@@@@@@@@@@&5^. B@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@B :B@@@@@@@@@@@@@@@B^B@@7 :G@&&&&#########PYJ7!#@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@G ^G5J?7!!~~~^^^^:. .#@@? .:........... ..:B@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@B :&@@? B@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@Y 7@@@? #@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@5 P@@@7 7@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@BGB~ .?@@@@! . ^5@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@#:Y@G?~^^~~~!!!^^5#@@@@@^ 7Y7 :.... .:^7GJ#@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@P 5@B#@B!!!~^: 5@@Y!@@B JJ !?JJJP#&G#@Y^@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@Y 5#!B@5: :PP !@@Y : !&@5^&P G@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@Y ?B!G@@5!: .5@? : ^P@@? PG ?@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@Y ~BYY#@@&B5?~^^7G@&PYJJYB@P~ .:~JG@@#~~#P 7@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@5 .P#Y?5#@@@@@@@@@@@P?G@@@@@#BB&@@@@B?~P@J ?@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G. ?@#J^^7YG#&&@@&7. .!B@@@@@@&B5?^ ^#&~ Y@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#^ ^#@&Y^ .::^!!77?7??7!~^:. .5P..G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7 .G@@#7!~^:. :P? ~#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5 P@G .:^~75GPPPPP! !5^ J@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B: PB .#@@@@5. ?? :G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&7 5~ .#@@@@^ :^ !&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P^ P@@@@@P .5@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@J .&@@##@&. ~B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G^ 5@@@@@P :5@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&J: :&@@@@~ ^Y&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&P?!B@@@#~!JG@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "./ERC721Anon.sol"; contract AAYC is ERC721Anon, Ownable, ReentrancyGuard { mapping (address => uint256) public walletAAYC; string public baseURI; bool public mintPublicAAYCEnabled = false; bytes32 public merkleRoot; uint public freeAAYC = 3; uint public maxAAYCPerTx = 20; uint public maxPerWallet = 40; uint public maxAAYC = 10000; uint public AAYCPrice = 2000000000000000; //0.002 ETH constructor() ERC721Anon("Anonymous Ape Yacht Club", "AAYC",100,10000){} function mint(uint256 qty) external payable { require(mintPublicAAYCEnabled , "AAYC : Minting Public Pause"); require(walletAAYC[msg.sender] + qty <= maxPerWallet,"AAYC : Max Per Wallet"); require(qty <= maxAAYCPerTx, "AAYC : Limit Per Transaction"); require(totalSupply() + qty <= maxAAYC,"AAYC : Soldout"); _mint(qty); } function _mint(uint qty) internal { if(walletAAYC[msg.sender] < freeAAYC) { if(qty < freeAAYC) qty = freeAAYC; require(msg.value >= (qty - freeAAYC) * AAYCPrice,"AAYC : Claim Free NFT"); walletAAYC[msg.sender] += qty; _safeMint(msg.sender, qty); } else { require(msg.value >= qty * AAYCPrice,"AAYC : Fund not enough"); walletAAYC[msg.sender] += qty; _safeMint(msg.sender, qty); } } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function airdropAAYC(address to ,uint256 qty) external onlyOwner { _safeMint(to, qty); } function OwnerBatchMint(uint256 qty) external onlyOwner { _safeMint(msg.sender, qty); } function setPublicAAYCMinting() external onlyOwner { mintPublicAAYCEnabled = !mintPublicAAYCEnabled ; } function setBaseURI(string calldata baseURI_) external onlyOwner { baseURI = baseURI_; } function setPrice(uint256 price_) external onlyOwner { AAYCPrice = price_; } function setmaxAAYCPerTx(uint256 maxAAYCPerTx_) external onlyOwner { maxAAYCPerTx = maxAAYCPerTx_; } function setmaxFreeAAYCPerTx(uint256 freeAAYC_) external onlyOwner { freeAAYC = freeAAYC_; } function setMaxPerWallet(uint256 maxPerWallet_) external onlyOwner { maxPerWallet = maxPerWallet_; } function setmaxAAYC(uint256 maxAAYC_) external onlyOwner { maxAAYC = maxAAYC_; } function withdraw() public onlyOwner { payable(msg.sender).transfer(payable(address(this)).balance); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721Anon is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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 * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721Anon: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721Anon: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721Anon: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721Anon: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721Anon: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721Anon: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721Anon: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721Anon: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721Anon: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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 override { address owner = ERC721Anon.ownerOf(tokenId); require(to != owner, "ERC721Anon: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721Anon: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721Anon: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721Anon: 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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721Anon: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721Anon: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721Anon: token already minted"); require(quantity <= maxBatchSize, "ERC721Anon: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721Anon: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721Anon: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721Anon: transfer from incorrect owner" ); require(to != address(0), "ERC721Anon: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721Anon: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"AAYCPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"OwnerBatchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"airdropAAYC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeAAYC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAAYC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAAYCPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPublicAAYCEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPerWallet_","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicAAYCMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxAAYC_","type":"uint256"}],"name":"setmaxAAYC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxAAYCPerTx_","type":"uint256"}],"name":"setmaxAAYCPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"freeAAYC_","type":"uint256"}],"name":"setmaxFreeAAYCPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletAAYC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526000805560006007556000600c60006101000a81548160ff0219169083151502179055506003600e556014600f55602860105561271060115566071afd498d00006012553480156200005557600080fd5b506040518060400160405280601881526020017f416e6f6e796d6f75732041706520596163687420436c756200000000000000008152506040518060400160405280600481526020017f41415943000000000000000000000000000000000000000000000000000000008152506064612710600081116200010d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001049062000393565b60405180910390fd5b6000821162000153576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014a90620003b5565b60405180910390fd5b83600190805190602001906200016b92919062000295565b5082600290805190602001906200018492919062000295565b508160a08181525050806080818152505050505050620001b9620001ad620001c760201b60201c565b620001cf60201b60201c565b6001600981905550620004eb565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002a390620003e8565b90600052602060002090601f016020900481019282620002c7576000855562000313565b82601f10620002e257805160ff191683800117855562000313565b8280016001018555821562000313579182015b8281111562000312578251825591602001919060010190620002f5565b5b50905062000322919062000326565b5090565b5b808211156200034157600081600090555060010162000327565b5090565b600062000354603183620003d7565b915062000361826200044d565b604082019050919050565b60006200037b602a83620003d7565b915062000388826200049c565b604082019050919050565b60006020820190508181036000830152620003ae8162000345565b9050919050565b60006020820190508181036000830152620003d0816200036c565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200040157607f821691505b602082108114156200041857620004176200041e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231416e6f6e3a20636f6c6c656374696f6e206d757374206861766560008201527f2061206e6f6e7a65726f20737570706c79000000000000000000000000000000602082015250565b7f455243373231416e6f6e3a206d61782062617463682073697a65206d7573742060008201527f6265206e6f6e7a65726f00000000000000000000000000000000000000000000602082015250565b60805160a0516148896200051c6000396000818161207d015281816120a601526129f50152600050506148896000f3fe6080604052600436106102455760003560e01c806370a0823111610139578063b88d4fde116100b6578063dc33e6811161007a578063dc33e68114610846578063e268e4d314610883578063e985e9c5146108ac578063f2fde38b146108e9578063f3ecca7714610912578063fc4bacaf1461094f57610245565b8063b88d4fde14610761578063c87b56dd1461078a578063d321ba27146107c7578063d7224ba0146107f0578063dab039611461081b57610245565b80638da5cb5b116100fd5780638da5cb5b1461069d57806391b7f5ed146106c857806395d89b41146106f1578063a0712d681461071c578063a22cb4651461073857610245565b806370a08231146105cc578063715018a61461060957806371bb7068146106205780638171609b1461064957806389dc4fd61461067257610245565b80632eb4a7ab116101c75780634f6ccce71161018b5780634f6ccce7146104d3578063530d43fd1461051057806355f804b31461053b5780636352211e146105645780636c0360eb146105a157610245565b80632eb4a7ab146104005780632f745c591461042b5780633ccfd60b1461046857806342842e0e1461047f578063453c2310146104a857610245565b806317f7aa191161020e57806317f7aa191461032f57806318160ddd14610358578063235ebc221461038357806323b872dd146103ae5780632745b288146103d757610245565b80629af76e1461024a57806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b314610306575b600080fd5b34801561025657600080fd5b5061025f61097a565b005b34801561026d57600080fd5b5061028860048036038101906102839190613211565b6109ae565b6040516102959190613800565b60405180910390f35b3480156102aa57600080fd5b506102b3610af8565b6040516102c09190613836565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906132b8565b610b8a565b6040516102fd9190613799565b60405180910390f35b34801561031257600080fd5b5061032d600480360381019061032891906131d1565b610c0f565b005b34801561033b57600080fd5b50610356600480360381019061035191906131d1565b610d28565b005b34801561036457600080fd5b5061036d610d3e565b60405161037a9190613bb8565b60405180910390f35b34801561038f57600080fd5b50610398610d47565b6040516103a59190613bb8565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d091906130bb565b610d4d565b005b3480156103e357600080fd5b506103fe60048036038101906103f991906132b8565b610d5d565b005b34801561040c57600080fd5b50610415610d6f565b604051610422919061381b565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d91906131d1565b610d75565b60405161045f9190613bb8565b60405180910390f35b34801561047457600080fd5b5061047d610f73565b005b34801561048b57600080fd5b506104a660048036038101906104a191906130bb565b610fdb565b005b3480156104b457600080fd5b506104bd610ffb565b6040516104ca9190613bb8565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f591906132b8565b611001565b6040516105079190613bb8565b60405180910390f35b34801561051c57600080fd5b50610525611054565b6040516105329190613bb8565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d919061326b565b61105a565b005b34801561057057600080fd5b5061058b600480360381019061058691906132b8565b611078565b6040516105989190613799565b60405180910390f35b3480156105ad57600080fd5b506105b661108e565b6040516105c39190613836565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee919061304e565b61111c565b6040516106009190613bb8565b60405180910390f35b34801561061557600080fd5b5061061e611205565b005b34801561062c57600080fd5b50610647600480360381019061064291906132b8565b611219565b005b34801561065557600080fd5b50610670600480360381019061066b91906132b8565b61122b565b005b34801561067e57600080fd5b50610687611240565b6040516106949190613800565b60405180910390f35b3480156106a957600080fd5b506106b2611253565b6040516106bf9190613799565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea91906132b8565b61127d565b005b3480156106fd57600080fd5b5061070661128f565b6040516107139190613836565b60405180910390f35b610736600480360381019061073191906132b8565b611321565b005b34801561074457600080fd5b5061075f600480360381019061075a9190613191565b6114a7565b005b34801561076d57600080fd5b506107886004803603810190610783919061310e565b611628565b005b34801561079657600080fd5b506107b160048036038101906107ac91906132b8565b611684565b6040516107be9190613836565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e991906132b8565b61172b565b005b3480156107fc57600080fd5b5061080561173d565b6040516108129190613bb8565b60405180910390f35b34801561082757600080fd5b50610830611743565b60405161083d9190613bb8565b60405180910390f35b34801561085257600080fd5b5061086d6004803603810190610868919061304e565b611749565b60405161087a9190613bb8565b60405180910390f35b34801561088f57600080fd5b506108aa60048036038101906108a591906132b8565b61175b565b005b3480156108b857600080fd5b506108d360048036038101906108ce919061307b565b61176d565b6040516108e09190613800565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b919061304e565b611801565b005b34801561091e57600080fd5b506109396004803603810190610934919061304e565b611885565b6040516109469190613bb8565b60405180910390f35b34801561095b57600080fd5b5061096461189d565b6040516109719190613bb8565b60405180910390f35b6109826118a3565b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae157507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af15750610af082611921565b5b9050919050565b606060018054610b0790613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3390613f01565b8015610b805780601f10610b5557610100808354040283529160200191610b80565b820191906000526020600020905b815481529060010190602001808311610b6357829003601f168201915b5050505050905090565b6000610b958261198b565b610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb90613ab8565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c1a82611078565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8290613b58565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610caa611998565b73ffffffffffffffffffffffffffffffffffffffff161480610cd95750610cd881610cd3611998565b61176d565b5b610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f90613a98565b60405180910390fd5b610d238383836119a0565b505050565b610d306118a3565b610d3a8282611a52565b5050565b60008054905090565b60115481565b610d58838383611a70565b505050565b610d656118a3565b80600e8190555050565b600d5481565b6000610d808361111c565b8210610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db8906138f8565b60405180910390fd5b6000610dcb610d3e565b905060008060005b83811015610f31576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ec557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f1d5786841415610f0e578195505050505050610f6d565b8380610f1990613f64565b9450505b508080610f2990613f64565b915050610dd3565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6490613af8565b60405180910390fd5b92915050565b610f7b6118a3565b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610fd8573d6000803e3d6000fd5b50565b610ff683838360405180602001604052806000815250611628565b505050565b60105481565b600061100b610d3e565b821061104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390613a18565b60405180910390fd5b819050919050565b600e5481565b6110626118a3565b8181600b9190611073929190612e42565b505050565b600061108382612029565b600001519050919050565b600b805461109b90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546110c790613f01565b80156111145780601f106110e957610100808354040283529160200191611114565b820191906000526020600020905b8154815290600101906020018083116110f757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118490613938565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61120d6118a3565b611217600061222c565b565b6112216118a3565b8060118190555050565b6112336118a3565b61123d3382611a52565b50565b600c60009054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112856118a3565b8060128190555050565b60606002805461129e90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546112ca90613f01565b80156113175780601f106112ec57610100808354040283529160200191611317565b820191906000526020600020905b8154815290600101906020018083116112fa57829003601f168201915b5050505050905090565b600c60009054906101000a900460ff16611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790613918565b60405180910390fd5b60105481600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113be9190613cb2565b11156113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690613898565b60405180910390fd5b600f54811115611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90613a78565b60405180910390fd5b60115481611450610d3e565b61145a9190613cb2565b111561149b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149290613ad8565b60405180910390fd5b6114a4816122f2565b50565b6114af611998565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490613978565b60405180910390fd5b806006600061152a611998565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115d7611998565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161161c9190613800565b60405180910390a35050565b611633848484611a70565b61163f848484846124c1565b61167e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167590613858565b60405180910390fd5b50505050565b606061168f8261198b565b6116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c5906139f8565b60405180910390fd5b60006116d8612658565b905060008151116116f85760405180602001604052806000815250611723565b80611702846126ea565b604051602001611713929190613775565b6040516020818303038152906040525b915050919050565b6117336118a3565b80600f8190555050565b60075481565b60125481565b60006117548261284b565b9050919050565b6117636118a3565b8060108190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118096118a3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090613878565b60405180910390fd5b6118828161222c565b50565b600a6020528060005260406000206000915090505481565b600f5481565b6118ab611998565b73ffffffffffffffffffffffffffffffffffffffff166118c9611253565b73ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611916906139b8565b60405180910390fd5b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b611a6c828260405180602001604052806000815250612934565b5050565b6000611a7b82612029565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611aa2611998565b73ffffffffffffffffffffffffffffffffffffffff161480611afe5750611ac7611998565b73ffffffffffffffffffffffffffffffffffffffff16611ae684610b8a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b1a5750611b198260000151611b14611998565b61176d565b5b905080611b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b53906138d8565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc590613b78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3590613b98565b60405180910390fd5b611c4b8585856001612e13565b611c5b60008484600001516119a0565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611cc99190613d93565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611d6d9190613c6c565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611e739190613cb2565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611fb957611ee98161198b565b15611fb8576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120218686866001612e19565b505050505050565b612031612ec8565b61203a8261198b565b612079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207090613b18565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106120dd5760017f0000000000000000000000000000000000000000000000000000000000000000846120d09190613dc7565b6120da9190613cb2565b90505b60008390505b8181106121eb576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121d757809350505050612227565b5080806121e390613ed7565b9150506120e3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e906139d8565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600e54600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561240d57600e5481101561234b57600e5490505b601254600e548261235c9190613dc7565b6123669190613d39565b3410156123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239f90613958565b60405180910390fd5b80600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123f79190613cb2565b925050819055506124083382611a52565b6124be565b6012548161241b9190613d39565b34101561245d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245490613a38565b60405180910390fd5b80600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ac9190613cb2565b925050819055506124bd3382611a52565b5b50565b60006124e28473ffffffffffffffffffffffffffffffffffffffff16612e1f565b1561264b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261250b611998565b8786866040518563ffffffff1660e01b815260040161252d94939291906137b4565b602060405180830381600087803b15801561254757600080fd5b505af192505050801561257857506040513d601f19601f82011682018060405250810190612575919061323e565b60015b6125fb573d80600081146125a8576040519150601f19603f3d011682016040523d82523d6000602084013e6125ad565b606091505b506000815114156125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea90613858565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612650565b600190505b949350505050565b6060600b805461266790613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461269390613f01565b80156126e05780601f106126b5576101008083540402835291602001916126e0565b820191906000526020600020905b8154815290600101906020018083116126c357829003601f168201915b5050505050905090565b60606000821415612732576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612846565b600082905060005b6000821461276457808061274d90613f64565b915050600a8261275d9190613d08565b915061273a565b60008167ffffffffffffffff8111156127805761277f61409a565b5b6040519080825280601f01601f1916602001820160405280156127b25781602001600182028036833780820191505090505b5090505b6000851461283f576001826127cb9190613dc7565b9150600a856127da9190613fad565b60306127e69190613cb2565b60f81b8183815181106127fc576127fb61406b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128389190613d08565b94506127b6565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b3906138b8565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a190613998565b60405180910390fd5b6129b38161198b565b156129f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ea90613a58565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4d90613b38565b60405180910390fd5b612a636000858386612e13565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612b609190613c6c565b6fffffffffffffffffffffffffffffffff168152602001858360200151612b879190613c6c565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612df657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d9660008884886124c1565b612dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcc90613858565b60405180910390fd5b8180612de090613f64565b9250508080612dee90613f64565b915050612d25565b5080600081905550612e0b6000878588612e19565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612e4e90613f01565b90600052602060002090601f016020900481019282612e705760008555612eb7565b82601f10612e8957803560ff1916838001178555612eb7565b82800160010185558215612eb7579182015b82811115612eb6578235825591602001919060010190612e9b565b5b509050612ec49190612f02565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612f1b576000816000905550600101612f03565b5090565b6000612f32612f2d84613bf8565b613bd3565b905082815260208101848484011115612f4e57612f4d6140d8565b5b612f59848285613e95565b509392505050565b600081359050612f70816147f7565b92915050565b600081359050612f858161480e565b92915050565b600081359050612f9a81614825565b92915050565b600081519050612faf81614825565b92915050565b600082601f830112612fca57612fc96140ce565b5b8135612fda848260208601612f1f565b91505092915050565b60008083601f840112612ff957612ff86140ce565b5b8235905067ffffffffffffffff811115613016576130156140c9565b5b602083019150836001820283011115613032576130316140d3565b5b9250929050565b6000813590506130488161483c565b92915050565b600060208284031215613064576130636140e2565b5b600061307284828501612f61565b91505092915050565b60008060408385031215613092576130916140e2565b5b60006130a085828601612f61565b92505060206130b185828601612f61565b9150509250929050565b6000806000606084860312156130d4576130d36140e2565b5b60006130e286828701612f61565b93505060206130f386828701612f61565b925050604061310486828701613039565b9150509250925092565b60008060008060808587031215613128576131276140e2565b5b600061313687828801612f61565b945050602061314787828801612f61565b935050604061315887828801613039565b925050606085013567ffffffffffffffff811115613179576131786140dd565b5b61318587828801612fb5565b91505092959194509250565b600080604083850312156131a8576131a76140e2565b5b60006131b685828601612f61565b92505060206131c785828601612f76565b9150509250929050565b600080604083850312156131e8576131e76140e2565b5b60006131f685828601612f61565b925050602061320785828601613039565b9150509250929050565b600060208284031215613227576132266140e2565b5b600061323584828501612f8b565b91505092915050565b600060208284031215613254576132536140e2565b5b600061326284828501612fa0565b91505092915050565b60008060208385031215613282576132816140e2565b5b600083013567ffffffffffffffff8111156132a05761329f6140dd565b5b6132ac85828601612fe3565b92509250509250929050565b6000602082840312156132ce576132cd6140e2565b5b60006132dc84828501613039565b91505092915050565b6132ee81613dfb565b82525050565b6132fd81613e0d565b82525050565b61330c81613e19565b82525050565b600061331d82613c29565b6133278185613c3f565b9350613337818560208601613ea4565b613340816140e7565b840191505092915050565b600061335682613c34565b6133608185613c50565b9350613370818560208601613ea4565b613379816140e7565b840191505092915050565b600061338f82613c34565b6133998185613c61565b93506133a9818560208601613ea4565b80840191505092915050565b60006133c2603683613c50565b91506133cd826140f8565b604082019050919050565b60006133e5602683613c50565b91506133f082614147565b604082019050919050565b6000613408601583613c50565b915061341382614196565b602082019050919050565b600061342b603483613c50565b9150613436826141bf565b604082019050919050565b600061344e603583613c50565b91506134598261420e565b604082019050919050565b6000613471602583613c50565b915061347c8261425d565b604082019050919050565b6000613494601b83613c50565b915061349f826142ac565b602082019050919050565b60006134b7602e83613c50565b91506134c2826142d5565b604082019050919050565b60006134da601583613c50565b91506134e582614324565b602082019050919050565b60006134fd601d83613c50565b91506135088261434d565b602082019050919050565b6000613520602483613c50565b915061352b82614376565b604082019050919050565b6000613543602083613c50565b915061354e826143c5565b602082019050919050565b6000613566603283613c50565b9150613571826143ee565b604082019050919050565b6000613589602f83613c50565b91506135948261443d565b604082019050919050565b60006135ac602683613c50565b91506135b78261448c565b604082019050919050565b60006135cf601683613c50565b91506135da826144db565b602082019050919050565b60006135f2602083613c50565b91506135fd82614504565b602082019050919050565b6000613615601c83613c50565b91506136208261452d565b602082019050919050565b6000613638603c83613c50565b915061364382614556565b604082019050919050565b600061365b603083613c50565b9150613666826145a5565b604082019050919050565b600061367e600e83613c50565b9150613689826145f4565b602082019050919050565b60006136a1603183613c50565b91506136ac8261461d565b604082019050919050565b60006136c4602d83613c50565b91506136cf8261466c565b604082019050919050565b60006136e7602583613c50565b91506136f2826146bb565b604082019050919050565b600061370a602583613c50565b91506137158261470a565b604082019050919050565b600061372d602983613c50565b915061373882614759565b604082019050919050565b6000613750602883613c50565b915061375b826147a8565b604082019050919050565b61376f81613e8b565b82525050565b60006137818285613384565b915061378d8284613384565b91508190509392505050565b60006020820190506137ae60008301846132e5565b92915050565b60006080820190506137c960008301876132e5565b6137d660208301866132e5565b6137e36040830185613766565b81810360608301526137f58184613312565b905095945050505050565b600060208201905061381560008301846132f4565b92915050565b60006020820190506138306000830184613303565b92915050565b60006020820190508181036000830152613850818461334b565b905092915050565b60006020820190508181036000830152613871816133b5565b9050919050565b60006020820190508181036000830152613891816133d8565b9050919050565b600060208201905081810360008301526138b1816133fb565b9050919050565b600060208201905081810360008301526138d18161341e565b9050919050565b600060208201905081810360008301526138f181613441565b9050919050565b6000602082019050818103600083015261391181613464565b9050919050565b6000602082019050818103600083015261393181613487565b9050919050565b60006020820190508181036000830152613951816134aa565b9050919050565b60006020820190508181036000830152613971816134cd565b9050919050565b60006020820190508181036000830152613991816134f0565b9050919050565b600060208201905081810360008301526139b181613513565b9050919050565b600060208201905081810360008301526139d181613536565b9050919050565b600060208201905081810360008301526139f181613559565b9050919050565b60006020820190508181036000830152613a118161357c565b9050919050565b60006020820190508181036000830152613a318161359f565b9050919050565b60006020820190508181036000830152613a51816135c2565b9050919050565b60006020820190508181036000830152613a71816135e5565b9050919050565b60006020820190508181036000830152613a9181613608565b9050919050565b60006020820190508181036000830152613ab18161362b565b9050919050565b60006020820190508181036000830152613ad18161364e565b9050919050565b60006020820190508181036000830152613af181613671565b9050919050565b60006020820190508181036000830152613b1181613694565b9050919050565b60006020820190508181036000830152613b31816136b7565b9050919050565b60006020820190508181036000830152613b51816136da565b9050919050565b60006020820190508181036000830152613b71816136fd565b9050919050565b60006020820190508181036000830152613b9181613720565b9050919050565b60006020820190508181036000830152613bb181613743565b9050919050565b6000602082019050613bcd6000830184613766565b92915050565b6000613bdd613bee565b9050613be98282613f33565b919050565b6000604051905090565b600067ffffffffffffffff821115613c1357613c1261409a565b5b613c1c826140e7565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613c7782613e4f565b9150613c8283613e4f565b9250826fffffffffffffffffffffffffffffffff03821115613ca757613ca6613fde565b5b828201905092915050565b6000613cbd82613e8b565b9150613cc883613e8b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cfd57613cfc613fde565b5b828201905092915050565b6000613d1382613e8b565b9150613d1e83613e8b565b925082613d2e57613d2d61400d565b5b828204905092915050565b6000613d4482613e8b565b9150613d4f83613e8b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8857613d87613fde565b5b828202905092915050565b6000613d9e82613e4f565b9150613da983613e4f565b925082821015613dbc57613dbb613fde565b5b828203905092915050565b6000613dd282613e8b565b9150613ddd83613e8b565b925082821015613df057613def613fde565b5b828203905092915050565b6000613e0682613e6b565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ec2578082015181840152602081019050613ea7565b83811115613ed1576000848401525b50505050565b6000613ee282613e8b565b91506000821415613ef657613ef5613fde565b5b600182039050919050565b60006002820490506001821680613f1957607f821691505b60208210811415613f2d57613f2c61403c565b5b50919050565b613f3c826140e7565b810181811067ffffffffffffffff82111715613f5b57613f5a61409a565b5b80604052505050565b6000613f6f82613e8b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fa257613fa1613fde565b5b600182019050919050565b6000613fb882613e8b565b9150613fc383613e8b565b925082613fd357613fd261400d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231416e6f6e3a207472616e7366657220746f206e6f6e204552433760008201527f3231526563656976657220696d706c656d656e74657200000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f41415943203a204d6178205065722057616c6c65740000000000000000000000600082015250565b7f455243373231416e6f6e3a206e756d626572206d696e7465642071756572792060008201527f666f7220746865207a65726f2061646472657373000000000000000000000000602082015250565b7f455243373231416e6f6e3a207472616e736665722063616c6c6572206973206e60008201527f6f74206f776e6572206e6f7220617070726f7665640000000000000000000000602082015250565b7f455243373231416e6f6e3a206f776e657220696e646578206f7574206f66206260008201527f6f756e6473000000000000000000000000000000000000000000000000000000602082015250565b7f41415943203a204d696e74696e67205075626c69632050617573650000000000600082015250565b7f455243373231416e6f6e3a2062616c616e636520717565727920666f7220746860008201527f65207a65726f2061646472657373000000000000000000000000000000000000602082015250565b7f41415943203a20436c61696d2046726565204e46540000000000000000000000600082015250565b7f455243373231416e6f6e3a20617070726f766520746f2063616c6c6572000000600082015250565b7f455243373231416e6f6e3a206d696e7420746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231416e6f6e3a20756e61626c6520746f2064657465726d696e652060008201527f746865206f776e6572206f6620746f6b656e0000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231416e6f6e3a20676c6f62616c20696e646578206f7574206f662060008201527f626f756e64730000000000000000000000000000000000000000000000000000602082015250565b7f41415943203a2046756e64206e6f7420656e6f75676800000000000000000000600082015250565b7f455243373231416e6f6e3a20746f6b656e20616c7265616479206d696e746564600082015250565b7f41415943203a204c696d697420506572205472616e73616374696f6e00000000600082015250565b7f455243373231416e6f6e3a20617070726f76652063616c6c6572206973206e6f60008201527f74206f776e6572206e6f7220617070726f76656420666f7220616c6c00000000602082015250565b7f455243373231416e6f6e3a20617070726f76656420717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b7f41415943203a20536f6c646f7574000000000000000000000000000000000000600082015250565b7f455243373231416e6f6e3a20756e61626c6520746f2067657420746f6b656e2060008201527f6f66206f776e657220627920696e646578000000000000000000000000000000602082015250565b7f455243373231416e6f6e3a206f776e657220717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231416e6f6e3a207175616e7469747920746f206d696e7420746f6f60008201527f2068696768000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231416e6f6e3a20617070726f76616c20746f2063757272656e742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231416e6f6e3a207472616e736665722066726f6d20696e636f727260008201527f656374206f776e65720000000000000000000000000000000000000000000000602082015250565b7f455243373231416e6f6e3a207472616e7366657220746f20746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b61480081613dfb565b811461480b57600080fd5b50565b61481781613e0d565b811461482257600080fd5b50565b61482e81613e23565b811461483957600080fd5b50565b61484581613e8b565b811461485057600080fd5b5056fea264697066735822122030da3435edaa1980334b860124067a80b07f4c083aaf19bcb6ce6e55499694fb64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102455760003560e01c806370a0823111610139578063b88d4fde116100b6578063dc33e6811161007a578063dc33e68114610846578063e268e4d314610883578063e985e9c5146108ac578063f2fde38b146108e9578063f3ecca7714610912578063fc4bacaf1461094f57610245565b8063b88d4fde14610761578063c87b56dd1461078a578063d321ba27146107c7578063d7224ba0146107f0578063dab039611461081b57610245565b80638da5cb5b116100fd5780638da5cb5b1461069d57806391b7f5ed146106c857806395d89b41146106f1578063a0712d681461071c578063a22cb4651461073857610245565b806370a08231146105cc578063715018a61461060957806371bb7068146106205780638171609b1461064957806389dc4fd61461067257610245565b80632eb4a7ab116101c75780634f6ccce71161018b5780634f6ccce7146104d3578063530d43fd1461051057806355f804b31461053b5780636352211e146105645780636c0360eb146105a157610245565b80632eb4a7ab146104005780632f745c591461042b5780633ccfd60b1461046857806342842e0e1461047f578063453c2310146104a857610245565b806317f7aa191161020e57806317f7aa191461032f57806318160ddd14610358578063235ebc221461038357806323b872dd146103ae5780632745b288146103d757610245565b80629af76e1461024a57806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b314610306575b600080fd5b34801561025657600080fd5b5061025f61097a565b005b34801561026d57600080fd5b5061028860048036038101906102839190613211565b6109ae565b6040516102959190613800565b60405180910390f35b3480156102aa57600080fd5b506102b3610af8565b6040516102c09190613836565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906132b8565b610b8a565b6040516102fd9190613799565b60405180910390f35b34801561031257600080fd5b5061032d600480360381019061032891906131d1565b610c0f565b005b34801561033b57600080fd5b50610356600480360381019061035191906131d1565b610d28565b005b34801561036457600080fd5b5061036d610d3e565b60405161037a9190613bb8565b60405180910390f35b34801561038f57600080fd5b50610398610d47565b6040516103a59190613bb8565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d091906130bb565b610d4d565b005b3480156103e357600080fd5b506103fe60048036038101906103f991906132b8565b610d5d565b005b34801561040c57600080fd5b50610415610d6f565b604051610422919061381b565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d91906131d1565b610d75565b60405161045f9190613bb8565b60405180910390f35b34801561047457600080fd5b5061047d610f73565b005b34801561048b57600080fd5b506104a660048036038101906104a191906130bb565b610fdb565b005b3480156104b457600080fd5b506104bd610ffb565b6040516104ca9190613bb8565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f591906132b8565b611001565b6040516105079190613bb8565b60405180910390f35b34801561051c57600080fd5b50610525611054565b6040516105329190613bb8565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d919061326b565b61105a565b005b34801561057057600080fd5b5061058b600480360381019061058691906132b8565b611078565b6040516105989190613799565b60405180910390f35b3480156105ad57600080fd5b506105b661108e565b6040516105c39190613836565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee919061304e565b61111c565b6040516106009190613bb8565b60405180910390f35b34801561061557600080fd5b5061061e611205565b005b34801561062c57600080fd5b50610647600480360381019061064291906132b8565b611219565b005b34801561065557600080fd5b50610670600480360381019061066b91906132b8565b61122b565b005b34801561067e57600080fd5b50610687611240565b6040516106949190613800565b60405180910390f35b3480156106a957600080fd5b506106b2611253565b6040516106bf9190613799565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea91906132b8565b61127d565b005b3480156106fd57600080fd5b5061070661128f565b6040516107139190613836565b60405180910390f35b610736600480360381019061073191906132b8565b611321565b005b34801561074457600080fd5b5061075f600480360381019061075a9190613191565b6114a7565b005b34801561076d57600080fd5b506107886004803603810190610783919061310e565b611628565b005b34801561079657600080fd5b506107b160048036038101906107ac91906132b8565b611684565b6040516107be9190613836565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e991906132b8565b61172b565b005b3480156107fc57600080fd5b5061080561173d565b6040516108129190613bb8565b60405180910390f35b34801561082757600080fd5b50610830611743565b60405161083d9190613bb8565b60405180910390f35b34801561085257600080fd5b5061086d6004803603810190610868919061304e565b611749565b60405161087a9190613bb8565b60405180910390f35b34801561088f57600080fd5b506108aa60048036038101906108a591906132b8565b61175b565b005b3480156108b857600080fd5b506108d360048036038101906108ce919061307b565b61176d565b6040516108e09190613800565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b919061304e565b611801565b005b34801561091e57600080fd5b506109396004803603810190610934919061304e565b611885565b6040516109469190613bb8565b60405180910390f35b34801561095b57600080fd5b5061096461189d565b6040516109719190613bb8565b60405180910390f35b6109826118a3565b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae157507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af15750610af082611921565b5b9050919050565b606060018054610b0790613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3390613f01565b8015610b805780601f10610b5557610100808354040283529160200191610b80565b820191906000526020600020905b815481529060010190602001808311610b6357829003601f168201915b5050505050905090565b6000610b958261198b565b610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb90613ab8565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c1a82611078565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8290613b58565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610caa611998565b73ffffffffffffffffffffffffffffffffffffffff161480610cd95750610cd881610cd3611998565b61176d565b5b610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f90613a98565b60405180910390fd5b610d238383836119a0565b505050565b610d306118a3565b610d3a8282611a52565b5050565b60008054905090565b60115481565b610d58838383611a70565b505050565b610d656118a3565b80600e8190555050565b600d5481565b6000610d808361111c565b8210610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db8906138f8565b60405180910390fd5b6000610dcb610d3e565b905060008060005b83811015610f31576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ec557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f1d5786841415610f0e578195505050505050610f6d565b8380610f1990613f64565b9450505b508080610f2990613f64565b915050610dd3565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6490613af8565b60405180910390fd5b92915050565b610f7b6118a3565b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610fd8573d6000803e3d6000fd5b50565b610ff683838360405180602001604052806000815250611628565b505050565b60105481565b600061100b610d3e565b821061104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390613a18565b60405180910390fd5b819050919050565b600e5481565b6110626118a3565b8181600b9190611073929190612e42565b505050565b600061108382612029565b600001519050919050565b600b805461109b90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546110c790613f01565b80156111145780601f106110e957610100808354040283529160200191611114565b820191906000526020600020905b8154815290600101906020018083116110f757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118490613938565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61120d6118a3565b611217600061222c565b565b6112216118a3565b8060118190555050565b6112336118a3565b61123d3382611a52565b50565b600c60009054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112856118a3565b8060128190555050565b60606002805461129e90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546112ca90613f01565b80156113175780601f106112ec57610100808354040283529160200191611317565b820191906000526020600020905b8154815290600101906020018083116112fa57829003601f168201915b5050505050905090565b600c60009054906101000a900460ff16611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790613918565b60405180910390fd5b60105481600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113be9190613cb2565b11156113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690613898565b60405180910390fd5b600f54811115611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90613a78565b60405180910390fd5b60115481611450610d3e565b61145a9190613cb2565b111561149b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149290613ad8565b60405180910390fd5b6114a4816122f2565b50565b6114af611998565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490613978565b60405180910390fd5b806006600061152a611998565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115d7611998565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161161c9190613800565b60405180910390a35050565b611633848484611a70565b61163f848484846124c1565b61167e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167590613858565b60405180910390fd5b50505050565b606061168f8261198b565b6116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c5906139f8565b60405180910390fd5b60006116d8612658565b905060008151116116f85760405180602001604052806000815250611723565b80611702846126ea565b604051602001611713929190613775565b6040516020818303038152906040525b915050919050565b6117336118a3565b80600f8190555050565b60075481565b60125481565b60006117548261284b565b9050919050565b6117636118a3565b8060108190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118096118a3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090613878565b60405180910390fd5b6118828161222c565b50565b600a6020528060005260406000206000915090505481565b600f5481565b6118ab611998565b73ffffffffffffffffffffffffffffffffffffffff166118c9611253565b73ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611916906139b8565b60405180910390fd5b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b611a6c828260405180602001604052806000815250612934565b5050565b6000611a7b82612029565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611aa2611998565b73ffffffffffffffffffffffffffffffffffffffff161480611afe5750611ac7611998565b73ffffffffffffffffffffffffffffffffffffffff16611ae684610b8a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b1a5750611b198260000151611b14611998565b61176d565b5b905080611b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b53906138d8565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc590613b78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3590613b98565b60405180910390fd5b611c4b8585856001612e13565b611c5b60008484600001516119a0565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611cc99190613d93565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611d6d9190613c6c565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611e739190613cb2565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611fb957611ee98161198b565b15611fb8576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120218686866001612e19565b505050505050565b612031612ec8565b61203a8261198b565b612079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207090613b18565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000006483106120dd5760017f0000000000000000000000000000000000000000000000000000000000000064846120d09190613dc7565b6120da9190613cb2565b90505b60008390505b8181106121eb576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121d757809350505050612227565b5080806121e390613ed7565b9150506120e3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e906139d8565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600e54600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561240d57600e5481101561234b57600e5490505b601254600e548261235c9190613dc7565b6123669190613d39565b3410156123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239f90613958565b60405180910390fd5b80600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123f79190613cb2565b925050819055506124083382611a52565b6124be565b6012548161241b9190613d39565b34101561245d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245490613a38565b60405180910390fd5b80600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ac9190613cb2565b925050819055506124bd3382611a52565b5b50565b60006124e28473ffffffffffffffffffffffffffffffffffffffff16612e1f565b1561264b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261250b611998565b8786866040518563ffffffff1660e01b815260040161252d94939291906137b4565b602060405180830381600087803b15801561254757600080fd5b505af192505050801561257857506040513d601f19601f82011682018060405250810190612575919061323e565b60015b6125fb573d80600081146125a8576040519150601f19603f3d011682016040523d82523d6000602084013e6125ad565b606091505b506000815114156125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea90613858565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612650565b600190505b949350505050565b6060600b805461266790613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461269390613f01565b80156126e05780601f106126b5576101008083540402835291602001916126e0565b820191906000526020600020905b8154815290600101906020018083116126c357829003601f168201915b5050505050905090565b60606000821415612732576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612846565b600082905060005b6000821461276457808061274d90613f64565b915050600a8261275d9190613d08565b915061273a565b60008167ffffffffffffffff8111156127805761277f61409a565b5b6040519080825280601f01601f1916602001820160405280156127b25781602001600182028036833780820191505090505b5090505b6000851461283f576001826127cb9190613dc7565b9150600a856127da9190613fad565b60306127e69190613cb2565b60f81b8183815181106127fc576127fb61406b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128389190613d08565b94506127b6565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b3906138b8565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a190613998565b60405180910390fd5b6129b38161198b565b156129f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ea90613a58565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000064831115612a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4d90613b38565b60405180910390fd5b612a636000858386612e13565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612b609190613c6c565b6fffffffffffffffffffffffffffffffff168152602001858360200151612b879190613c6c565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612df657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d9660008884886124c1565b612dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcc90613858565b60405180910390fd5b8180612de090613f64565b9250508080612dee90613f64565b915050612d25565b5080600081905550612e0b6000878588612e19565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612e4e90613f01565b90600052602060002090601f016020900481019282612e705760008555612eb7565b82601f10612e8957803560ff1916838001178555612eb7565b82800160010185558215612eb7579182015b82811115612eb6578235825591602001919060010190612e9b565b5b509050612ec49190612f02565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612f1b576000816000905550600101612f03565b5090565b6000612f32612f2d84613bf8565b613bd3565b905082815260208101848484011115612f4e57612f4d6140d8565b5b612f59848285613e95565b509392505050565b600081359050612f70816147f7565b92915050565b600081359050612f858161480e565b92915050565b600081359050612f9a81614825565b92915050565b600081519050612faf81614825565b92915050565b600082601f830112612fca57612fc96140ce565b5b8135612fda848260208601612f1f565b91505092915050565b60008083601f840112612ff957612ff86140ce565b5b8235905067ffffffffffffffff811115613016576130156140c9565b5b602083019150836001820283011115613032576130316140d3565b5b9250929050565b6000813590506130488161483c565b92915050565b600060208284031215613064576130636140e2565b5b600061307284828501612f61565b91505092915050565b60008060408385031215613092576130916140e2565b5b60006130a085828601612f61565b92505060206130b185828601612f61565b9150509250929050565b6000806000606084860312156130d4576130d36140e2565b5b60006130e286828701612f61565b93505060206130f386828701612f61565b925050604061310486828701613039565b9150509250925092565b60008060008060808587031215613128576131276140e2565b5b600061313687828801612f61565b945050602061314787828801612f61565b935050604061315887828801613039565b925050606085013567ffffffffffffffff811115613179576131786140dd565b5b61318587828801612fb5565b91505092959194509250565b600080604083850312156131a8576131a76140e2565b5b60006131b685828601612f61565b92505060206131c785828601612f76565b9150509250929050565b600080604083850312156131e8576131e76140e2565b5b60006131f685828601612f61565b925050602061320785828601613039565b9150509250929050565b600060208284031215613227576132266140e2565b5b600061323584828501612f8b565b91505092915050565b600060208284031215613254576132536140e2565b5b600061326284828501612fa0565b91505092915050565b60008060208385031215613282576132816140e2565b5b600083013567ffffffffffffffff8111156132a05761329f6140dd565b5b6132ac85828601612fe3565b92509250509250929050565b6000602082840312156132ce576132cd6140e2565b5b60006132dc84828501613039565b91505092915050565b6132ee81613dfb565b82525050565b6132fd81613e0d565b82525050565b61330c81613e19565b82525050565b600061331d82613c29565b6133278185613c3f565b9350613337818560208601613ea4565b613340816140e7565b840191505092915050565b600061335682613c34565b6133608185613c50565b9350613370818560208601613ea4565b613379816140e7565b840191505092915050565b600061338f82613c34565b6133998185613c61565b93506133a9818560208601613ea4565b80840191505092915050565b60006133c2603683613c50565b91506133cd826140f8565b604082019050919050565b60006133e5602683613c50565b91506133f082614147565b604082019050919050565b6000613408601583613c50565b915061341382614196565b602082019050919050565b600061342b603483613c50565b9150613436826141bf565b604082019050919050565b600061344e603583613c50565b91506134598261420e565b604082019050919050565b6000613471602583613c50565b915061347c8261425d565b604082019050919050565b6000613494601b83613c50565b915061349f826142ac565b602082019050919050565b60006134b7602e83613c50565b91506134c2826142d5565b604082019050919050565b60006134da601583613c50565b91506134e582614324565b602082019050919050565b60006134fd601d83613c50565b91506135088261434d565b602082019050919050565b6000613520602483613c50565b915061352b82614376565b604082019050919050565b6000613543602083613c50565b915061354e826143c5565b602082019050919050565b6000613566603283613c50565b9150613571826143ee565b604082019050919050565b6000613589602f83613c50565b91506135948261443d565b604082019050919050565b60006135ac602683613c50565b91506135b78261448c565b604082019050919050565b60006135cf601683613c50565b91506135da826144db565b602082019050919050565b60006135f2602083613c50565b91506135fd82614504565b602082019050919050565b6000613615601c83613c50565b91506136208261452d565b602082019050919050565b6000613638603c83613c50565b915061364382614556565b604082019050919050565b600061365b603083613c50565b9150613666826145a5565b604082019050919050565b600061367e600e83613c50565b9150613689826145f4565b602082019050919050565b60006136a1603183613c50565b91506136ac8261461d565b604082019050919050565b60006136c4602d83613c50565b91506136cf8261466c565b604082019050919050565b60006136e7602583613c50565b91506136f2826146bb565b604082019050919050565b600061370a602583613c50565b91506137158261470a565b604082019050919050565b600061372d602983613c50565b915061373882614759565b604082019050919050565b6000613750602883613c50565b915061375b826147a8565b604082019050919050565b61376f81613e8b565b82525050565b60006137818285613384565b915061378d8284613384565b91508190509392505050565b60006020820190506137ae60008301846132e5565b92915050565b60006080820190506137c960008301876132e5565b6137d660208301866132e5565b6137e36040830185613766565b81810360608301526137f58184613312565b905095945050505050565b600060208201905061381560008301846132f4565b92915050565b60006020820190506138306000830184613303565b92915050565b60006020820190508181036000830152613850818461334b565b905092915050565b60006020820190508181036000830152613871816133b5565b9050919050565b60006020820190508181036000830152613891816133d8565b9050919050565b600060208201905081810360008301526138b1816133fb565b9050919050565b600060208201905081810360008301526138d18161341e565b9050919050565b600060208201905081810360008301526138f181613441565b9050919050565b6000602082019050818103600083015261391181613464565b9050919050565b6000602082019050818103600083015261393181613487565b9050919050565b60006020820190508181036000830152613951816134aa565b9050919050565b60006020820190508181036000830152613971816134cd565b9050919050565b60006020820190508181036000830152613991816134f0565b9050919050565b600060208201905081810360008301526139b181613513565b9050919050565b600060208201905081810360008301526139d181613536565b9050919050565b600060208201905081810360008301526139f181613559565b9050919050565b60006020820190508181036000830152613a118161357c565b9050919050565b60006020820190508181036000830152613a318161359f565b9050919050565b60006020820190508181036000830152613a51816135c2565b9050919050565b60006020820190508181036000830152613a71816135e5565b9050919050565b60006020820190508181036000830152613a9181613608565b9050919050565b60006020820190508181036000830152613ab18161362b565b9050919050565b60006020820190508181036000830152613ad18161364e565b9050919050565b60006020820190508181036000830152613af181613671565b9050919050565b60006020820190508181036000830152613b1181613694565b9050919050565b60006020820190508181036000830152613b31816136b7565b9050919050565b60006020820190508181036000830152613b51816136da565b9050919050565b60006020820190508181036000830152613b71816136fd565b9050919050565b60006020820190508181036000830152613b9181613720565b9050919050565b60006020820190508181036000830152613bb181613743565b9050919050565b6000602082019050613bcd6000830184613766565b92915050565b6000613bdd613bee565b9050613be98282613f33565b919050565b6000604051905090565b600067ffffffffffffffff821115613c1357613c1261409a565b5b613c1c826140e7565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613c7782613e4f565b9150613c8283613e4f565b9250826fffffffffffffffffffffffffffffffff03821115613ca757613ca6613fde565b5b828201905092915050565b6000613cbd82613e8b565b9150613cc883613e8b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cfd57613cfc613fde565b5b828201905092915050565b6000613d1382613e8b565b9150613d1e83613e8b565b925082613d2e57613d2d61400d565b5b828204905092915050565b6000613d4482613e8b565b9150613d4f83613e8b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8857613d87613fde565b5b828202905092915050565b6000613d9e82613e4f565b9150613da983613e4f565b925082821015613dbc57613dbb613fde565b5b828203905092915050565b6000613dd282613e8b565b9150613ddd83613e8b565b925082821015613df057613def613fde565b5b828203905092915050565b6000613e0682613e6b565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ec2578082015181840152602081019050613ea7565b83811115613ed1576000848401525b50505050565b6000613ee282613e8b565b91506000821415613ef657613ef5613fde565b5b600182039050919050565b60006002820490506001821680613f1957607f821691505b60208210811415613f2d57613f2c61403c565b5b50919050565b613f3c826140e7565b810181811067ffffffffffffffff82111715613f5b57613f5a61409a565b5b80604052505050565b6000613f6f82613e8b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fa257613fa1613fde565b5b600182019050919050565b6000613fb882613e8b565b9150613fc383613e8b565b925082613fd357613fd261400d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231416e6f6e3a207472616e7366657220746f206e6f6e204552433760008201527f3231526563656976657220696d706c656d656e74657200000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f41415943203a204d6178205065722057616c6c65740000000000000000000000600082015250565b7f455243373231416e6f6e3a206e756d626572206d696e7465642071756572792060008201527f666f7220746865207a65726f2061646472657373000000000000000000000000602082015250565b7f455243373231416e6f6e3a207472616e736665722063616c6c6572206973206e60008201527f6f74206f776e6572206e6f7220617070726f7665640000000000000000000000602082015250565b7f455243373231416e6f6e3a206f776e657220696e646578206f7574206f66206260008201527f6f756e6473000000000000000000000000000000000000000000000000000000602082015250565b7f41415943203a204d696e74696e67205075626c69632050617573650000000000600082015250565b7f455243373231416e6f6e3a2062616c616e636520717565727920666f7220746860008201527f65207a65726f2061646472657373000000000000000000000000000000000000602082015250565b7f41415943203a20436c61696d2046726565204e46540000000000000000000000600082015250565b7f455243373231416e6f6e3a20617070726f766520746f2063616c6c6572000000600082015250565b7f455243373231416e6f6e3a206d696e7420746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231416e6f6e3a20756e61626c6520746f2064657465726d696e652060008201527f746865206f776e6572206f6620746f6b656e0000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231416e6f6e3a20676c6f62616c20696e646578206f7574206f662060008201527f626f756e64730000000000000000000000000000000000000000000000000000602082015250565b7f41415943203a2046756e64206e6f7420656e6f75676800000000000000000000600082015250565b7f455243373231416e6f6e3a20746f6b656e20616c7265616479206d696e746564600082015250565b7f41415943203a204c696d697420506572205472616e73616374696f6e00000000600082015250565b7f455243373231416e6f6e3a20617070726f76652063616c6c6572206973206e6f60008201527f74206f776e6572206e6f7220617070726f76656420666f7220616c6c00000000602082015250565b7f455243373231416e6f6e3a20617070726f76656420717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b7f41415943203a20536f6c646f7574000000000000000000000000000000000000600082015250565b7f455243373231416e6f6e3a20756e61626c6520746f2067657420746f6b656e2060008201527f6f66206f776e657220627920696e646578000000000000000000000000000000602082015250565b7f455243373231416e6f6e3a206f776e657220717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231416e6f6e3a207175616e7469747920746f206d696e7420746f6f60008201527f2068696768000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231416e6f6e3a20617070726f76616c20746f2063757272656e742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231416e6f6e3a207472616e736665722066726f6d20696e636f727260008201527f656374206f776e65720000000000000000000000000000000000000000000000602082015250565b7f455243373231416e6f6e3a207472616e7366657220746f20746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b61480081613dfb565b811461480b57600080fd5b50565b61481781613e0d565b811461482257600080fd5b50565b61482e81613e23565b811461483957600080fd5b50565b61484581613e8b565b811461485057600080fd5b5056fea264697066735822122030da3435edaa1980334b860124067a80b07f4c083aaf19bcb6ce6e55499694fb64736f6c63430008070033
Deployed Bytecode Sourcemap
5096:2813:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6990:118;;;;;;;;;;;;;:::i;:::-;;4269:370:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6007:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7541:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7095:388;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6761:107:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2821:94:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5428:27:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8397:142:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7450:106:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5291:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3455:750:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7788:116:11;;;;;;;;;;;;;:::i;:::-;;8602:157:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5392:29:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2984:180:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5323:24:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7120:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5830:118:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5212:21:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4695:214:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1831:101:0;;;;;;;;;;;;;:::i;:::-;;7686:94:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6876:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5242:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1201:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7230:90:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6162:98:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5603:377:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7812:277:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8822:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6323:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7328:114:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13261:43:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5462:40:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6524:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7564:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8152:186:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2081:198:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5159:46:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5354:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6990:118;1094:13:0;:11;:13::i;:::-;7078:21:11::1;;;;;;;;;;;7077:22;7052:21;;:47;;;;;;;;;;;;;;;;;;6990:118::o:0;4269:370:12:-;4396:4;4441:25;4426:40;;;:11;:40;;;;:99;;;;4492:33;4477:48;;;:11;:48;;;;4426:99;:160;;;;4551:35;4536:50;;;:11;:50;;;;4426:160;:207;;;;4597:36;4621:11;4597:23;:36::i;:::-;4426:207;4412:221;;4269:370;;;:::o;6007:94::-;6061:13;6090:5;6083:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6007:94;:::o;7541:207::-;7609:7;7633:16;7641:7;7633;:16::i;:::-;7625:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;7718:15;:24;7734:7;7718:24;;;;;;;;;;;;;;;;;;;;;7711:31;;7541:207;;;:::o;7095:388::-;7164:13;7180:27;7199:7;7180:18;:27::i;:::-;7164:43;;7228:5;7222:11;;:2;:11;;;;7214:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;7316:5;7300:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;7325:37;7342:5;7349:12;:10;:12::i;:::-;7325:16;:37::i;:::-;7300:62;7284:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;7449:28;7458:2;7462:7;7471:5;7449:8;:28::i;:::-;7157:326;7095:388;;:::o;6761:107:11:-;1094:13:0;:11;:13::i;:::-;6842:18:11::1;6852:2;6856:3;6842:9;:18::i;:::-;6761:107:::0;;:::o;2821:94:12:-;2874:7;2897:12;;2890:19;;2821:94;:::o;5428:27:11:-;;;;:::o;8397:142:12:-;8505:28;8515:4;8521:2;8525:7;8505:9;:28::i;:::-;8397:142;;;:::o;7450:106:11:-;1094:13:0;:11;:13::i;:::-;7539:9:11::1;7528:8;:20;;;;7450:106:::0;:::o;5291:25::-;;;;:::o;3455:750:12:-;3564:7;3599:16;3609:5;3599:9;:16::i;:::-;3591:5;:24;3583:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;3664:22;3689:13;:11;:13::i;:::-;3664:38;;3709:19;3739:25;3789:9;3784:350;3808:14;3804:1;:18;3784:350;;;3838:31;3872:11;:14;3884:1;3872:14;;;;;;;;;;;3838:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3925:1;3899:28;;:9;:14;;;:28;;;3895:89;;3960:9;:14;;;3940:34;;3895:89;4017:5;3996:26;;:17;:26;;;3992:135;;;4054:5;4039:11;:20;4035:59;;;4081:1;4074:8;;;;;;;;;4035:59;4104:13;;;;;:::i;:::-;;;;3992:135;3829:305;3824:3;;;;;:::i;:::-;;;;3784:350;;;;4140:59;;;;;;;;;;:::i;:::-;;;;;;;;3455:750;;;;;:::o;7788:116:11:-;1094:13:0;:11;:13::i;:::-;7844:10:11::1;7836:28;;:60;7881:4;7865:30;;;7836:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;7788:116::o:0;8602:157:12:-;8714:39;8731:4;8737:2;8741:7;8714:39;;;;;;;;;;;;:16;:39::i;:::-;8602:157;;;:::o;5392:29:11:-;;;;:::o;2984:180:12:-;3051:7;3083:13;:11;:13::i;:::-;3075:5;:21;3067:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;3153:5;3146:12;;2984:180;;;:::o;5323:24:11:-;;;;:::o;7120:102::-;1094:13:0;:11;:13::i;:::-;7206:8:11::1;;7196:7;:18;;;;;;;:::i;:::-;;7120:102:::0;;:::o;5830:118:12:-;5894:7;5917:20;5929:7;5917:11;:20::i;:::-;:25;;;5910:32;;5830:118;;;:::o;5212:21:11:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4695:214:12:-;4759:7;4800:1;4783:19;;:5;:19;;;;4775:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;4875:12;:19;4888:5;4875:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;4867:36;;4860:43;;4695:214;;;:::o;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;7686:94:11:-;1094:13:0;:11;:13::i;:::-;7764:8:11::1;7754:7;:18;;;;7686:94:::0;:::o;6876:106::-;1094:13:0;:11;:13::i;:::-;6948:26:11::1;6958:10;6970:3;6948:9;:26::i;:::-;6876:106:::0;:::o;5242:42::-;;;;;;;;;;;;;:::o;1201:85:0:-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;7230:90:11:-;1094:13:0;:11;:13::i;:::-;7306:6:11::1;7294:9;:18;;;;7230:90:::0;:::o;6162:98:12:-;6218:13;6247:7;6240:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6162:98;:::o;5603:377:11:-;5671:21;;;;;;;;;;;5663:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;5776:12;;5769:3;5744:10;:22;5755:10;5744:22;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;:44;;5736:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;5839:12;;5832:3;:19;;5824:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5926:7;;5919:3;5903:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:30;;5895:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5962:10;5968:3;5962:5;:10::i;:::-;5603:377;:::o;7812:277:12:-;7915:12;:10;:12::i;:::-;7903:24;;:8;:24;;;;7895:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;8015:8;7970:18;:32;7989:12;:10;:12::i;:::-;7970:32;;;;;;;;;;;;;;;:42;8003:8;7970:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;8064:8;8035:48;;8050:12;:10;:12::i;:::-;8035:48;;;8074:8;8035:48;;;;;;:::i;:::-;;;;;;;;7812:277;;:::o;8822:314::-;8959:28;8969:4;8975:2;8979:7;8959:9;:28::i;:::-;9010:48;9033:4;9039:2;9043:7;9052:5;9010:22;:48::i;:::-;8994:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;8822:314;;;;:::o;6323:394::-;6421:13;6462:16;6470:7;6462;:16::i;:::-;6446:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;6552:21;6576:10;:8;:10::i;:::-;6552:34;;6631:1;6613:7;6607:21;:25;:104;;;;;;;;;;;;;;;;;6668:7;6677:18;:7;:16;:18::i;:::-;6651:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6607:104;6593:118;;;6323:394;;;:::o;7328:114:11:-;1094:13:0;:11;:13::i;:::-;7421::11::1;7406:12;:28;;;;7328:114:::0;:::o;13261:43:12:-;;;;:::o;5462:40:11:-;;;;:::o;6524:113::-;6582:7;6609:20;6623:5;6609:13;:20::i;:::-;6602:27;;6524:113;;;:::o;7564:114::-;1094:13:0;:11;:13::i;:::-;7657::11::1;7642:12;:28;;;;7564:114:::0;:::o;8152:186:12:-;8274:4;8297:18;:25;8316:5;8297:25;;;;;;;;;;;;;;;:35;8323:8;8297:35;;;;;;;;;;;;;;;;;;;;;;;;;8290:42;;8152:186;;;;:::o;2081:198:0:-;1094:13;:11;:13::i;:::-;2189:1:::1;2169:22;;:8;:22;;;;2161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;5159:46:11:-;;;;;;;;;;;;;;;;;:::o;5354:29::-;;;;:::o;1359:130:0:-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;829:155:9:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;9375:105:12:-;9432:4;9462:12;;9452:7;:22;9445:29;;9375:105;;;:::o;640:96:7:-;693:7;719:10;712:17;;640:96;:::o;13083:172:12:-;13207:2;13180:15;:24;13196:7;13180:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;13241:7;13237:2;13221:28;;13230:5;13221:28;;;;;;;;;;;;13083:172;;;:::o;9486:98::-;9551:27;9561:2;9565:8;9551:27;;;;;;;;;;;;:9;:27::i;:::-;9486:98;;:::o;11439:1538::-;11536:35;11574:20;11586:7;11574:11;:20::i;:::-;11536:58;;11603:22;11645:13;:18;;;11629:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;11698:12;:10;:12::i;:::-;11674:36;;:20;11686:7;11674:11;:20::i;:::-;:36;;;11629:81;:142;;;;11721:50;11738:13;:18;;;11758:12;:10;:12::i;:::-;11721:16;:50::i;:::-;11629:142;11603:169;;11797:17;11781:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;11932:4;11910:26;;:13;:18;;;:26;;;11894:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;12024:1;12010:16;;:2;:16;;;;12002:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;12080:43;12102:4;12108:2;12112:7;12121:1;12080:21;:43::i;:::-;12180:49;12197:1;12201:7;12210:13;:18;;;12180:8;:49::i;:::-;12268:1;12238:12;:18;12251:4;12238:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12304:1;12276:12;:16;12289:2;12276:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12335:43;;;;;;;;12350:2;12335:43;;;;;;12361:15;12335:43;;;;;12312:11;:20;12324:7;12312:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12606:19;12638:1;12628:7;:11;;;;:::i;:::-;12606:33;;12691:1;12650:43;;:11;:24;12662:11;12650:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;12646:236;;;12708:20;12716:11;12708:7;:20::i;:::-;12704:171;;;12768:97;;;;;;;;12795:13;:18;;;12768:97;;;;;;12826:13;:28;;;12768:97;;;;;12741:11;:24;12753:11;12741:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12704:171;12646:236;12914:7;12910:2;12895:27;;12904:4;12895:27;;;;;;;;;;;;12929:42;12950:4;12956:2;12960:7;12969:1;12929:20;:42::i;:::-;11529:1448;;;11439:1538;;;:::o;5164:612::-;5240:21;;:::i;:::-;5281:16;5289:7;5281;:16::i;:::-;5273:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5356:26;5404:12;5393:7;:23;5389:93;;5473:1;5458:12;5448:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;5427:47;;5389:93;5495:12;5510:7;5495:22;;5490:212;5527:18;5519:4;:26;5490:212;;5564:31;5598:11;:17;5610:4;5598:17;;;;;;;;;;;5564:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5654:1;5628:28;;:9;:14;;;:28;;;5624:71;;5676:9;5669:16;;;;;;;5624:71;5555:147;5547:6;;;;;:::i;:::-;;;;5490:212;;;;5710:60;;;;;;;;;;:::i;:::-;;;;;;;;5164:612;;;;:::o;2433:187:0:-;2506:16;2525:6;;;;;;;;;;;2506:25;;2550:8;2541:6;;:17;;;;;;;;;;;;;;;;;;2604:8;2573:40;;2594:8;2573:40;;;;;;;;;;;;2496:124;2433:187;:::o;5988:528:11:-;6061:8;;6036:10;:22;6047:10;6036:22;;;;;;;;;;;;;;;;:33;6033:476;;;6105:8;;6099:3;:14;6096:33;;;6121:8;;6115:14;;6096:33;6183:9;;6171:8;;6165:3;:14;;;;:::i;:::-;6164:28;;;;:::i;:::-;6151:9;:41;;6143:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6258:3;6232:10;:22;6243:10;6232:22;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;6275:26;6285:10;6297:3;6275:9;:26::i;:::-;6033:476;;;6378:9;;6372:3;:15;;;;:::i;:::-;6359:9;:28;;6351:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;6454:3;6428:10;:22;6439:10;6428:22;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;6471:26;6481:10;6493:3;6471:9;:26::i;:::-;6033:476;5988:528;:::o;14798:693:12:-;14935:4;14952:15;:2;:13;;;:15::i;:::-;14948:538;;;15007:2;14991:36;;;15028:12;:10;:12::i;:::-;15042:4;15048:7;15057:5;14991:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14978:467;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15239:1;15222:6;:13;:18;15218:218;;;15255:64;;;;;;;;;;:::i;:::-;;;;;;;;15218:218;15404:6;15398:13;15389:6;15385:2;15381:15;15374:38;14978:467;15123:45;;;15113:55;;;:6;:55;;;;15106:62;;;;;14948:538;15474:4;15467:11;;14798:693;;;;;;;:::o;6645:108:11:-;6705:13;6738:7;6731:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6645:108;:::o;392:703:8:-;448:13;674:1;665:5;:10;661:51;;;691:10;;;;;;;;;;;;;;;;;;;;;661:51;721:12;736:5;721:20;;751:14;775:75;790:1;782:4;:9;775:75;;807:8;;;;;:::i;:::-;;;;837:2;829:10;;;;;:::i;:::-;;;775:75;;;859:19;891:6;881:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;859:39;;908:150;924:1;915:5;:10;908:150;;951:1;941:11;;;;;:::i;:::-;;;1017:2;1009:5;:10;;;;:::i;:::-;996:2;:24;;;;:::i;:::-;983:39;;966:6;973;966:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1045:2;1036:11;;;;;:::i;:::-;;;908:150;;;1081:6;1067:21;;;;;392:703;;;;:::o;4915:243:12:-;4976:7;5025:1;5008:19;;:5;:19;;;;4992:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;5119:12;:19;5132:5;5119:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;5111:41;;5104:48;;4915:243;;;:::o;9923:1284::-;10028:20;10051:12;;10028:35;;10092:1;10078:16;;:2;:16;;;;10070:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10272:21;10280:12;10272:7;:21::i;:::-;10271:22;10263:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10357:12;10345:8;:24;;10337:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;10420:61;10450:1;10454:2;10458:12;10472:8;10420:21;:61::i;:::-;10490:30;10523:12;:16;10536:2;10523:16;;;;;;;;;;;;;;;10490:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10565:119;;;;;;;;10615:8;10585:11;:19;;;:39;;;;:::i;:::-;10565:119;;;;;;10668:8;10633:11;:24;;;:44;;;;:::i;:::-;10565:119;;;;;10546:12;:16;10559:2;10546:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10719:43;;;;;;;;10734:2;10719:43;;;;;;10745:15;10719:43;;;;;10691:11;:25;10703:12;10691:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10771:20;10794:12;10771:35;;10820:9;10815:284;10839:8;10835:1;:12;10815:284;;;10893:12;10889:2;10868:38;;10885:1;10868:38;;;;;;;;;;;;10933:59;10964:1;10968:2;10972:12;10986:5;10933:22;:59::i;:::-;10915:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;11077:14;;;;;:::i;:::-;;;;10849:3;;;;;:::i;:::-;;;;10815:284;;;;11122:12;11107;:27;;;;11141:60;11170:1;11174:2;11178:12;11192:8;11141:20;:60::i;:::-;10021:1186;;;9923:1284;;;:::o;15953:141::-;;;;;:::o;16480:140::-;;;;;:::o;1175:320:6:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:13:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:327::-;5473:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:119;;;5528:79;;:::i;:::-;5490:119;5648:1;5673:52;5717:7;5708:6;5697:9;5693:22;5673:52;:::i;:::-;5663:62;;5619:116;5415:327;;;;:::o;5748:349::-;5817:6;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:63;6072:7;6063:6;6052:9;6048:22;6017:63;:::i;:::-;6007:73;;5963:127;5748:349;;;;:::o;6103:529::-;6174:6;6182;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6385:1;6374:9;6370:17;6357:31;6415:18;6407:6;6404:30;6401:117;;;6437:79;;:::i;:::-;6401:117;6550:65;6607:7;6598:6;6587:9;6583:22;6550:65;:::i;:::-;6532:83;;;;6328:297;6103:529;;;;;:::o;6638:329::-;6697:6;6746:2;6734:9;6725:7;6721:23;6717:32;6714:119;;;6752:79;;:::i;:::-;6714:119;6872:1;6897:53;6942:7;6933:6;6922:9;6918:22;6897:53;:::i;:::-;6887:63;;6843:117;6638:329;;;;:::o;6973:118::-;7060:24;7078:5;7060:24;:::i;:::-;7055:3;7048:37;6973:118;;:::o;7097:109::-;7178:21;7193:5;7178:21;:::i;:::-;7173:3;7166:34;7097:109;;:::o;7212:118::-;7299:24;7317:5;7299:24;:::i;:::-;7294:3;7287:37;7212:118;;:::o;7336:360::-;7422:3;7450:38;7482:5;7450:38;:::i;:::-;7504:70;7567:6;7562:3;7504:70;:::i;:::-;7497:77;;7583:52;7628:6;7623:3;7616:4;7609:5;7605:16;7583:52;:::i;:::-;7660:29;7682:6;7660:29;:::i;:::-;7655:3;7651:39;7644:46;;7426:270;7336:360;;;;:::o;7702:364::-;7790:3;7818:39;7851:5;7818:39;:::i;:::-;7873:71;7937:6;7932:3;7873:71;:::i;:::-;7866:78;;7953:52;7998:6;7993:3;7986:4;7979:5;7975:16;7953:52;:::i;:::-;8030:29;8052:6;8030:29;:::i;:::-;8025:3;8021:39;8014:46;;7794:272;7702:364;;;;:::o;8072:377::-;8178:3;8206:39;8239:5;8206:39;:::i;:::-;8261:89;8343:6;8338:3;8261:89;:::i;:::-;8254:96;;8359:52;8404:6;8399:3;8392:4;8385:5;8381:16;8359:52;:::i;:::-;8436:6;8431:3;8427:16;8420:23;;8182:267;8072:377;;;;:::o;8455:366::-;8597:3;8618:67;8682:2;8677:3;8618:67;:::i;:::-;8611:74;;8694:93;8783:3;8694:93;:::i;:::-;8812:2;8807:3;8803:12;8796:19;;8455:366;;;:::o;8827:::-;8969:3;8990:67;9054:2;9049:3;8990:67;:::i;:::-;8983:74;;9066:93;9155:3;9066:93;:::i;:::-;9184:2;9179:3;9175:12;9168:19;;8827:366;;;:::o;9199:::-;9341:3;9362:67;9426:2;9421:3;9362:67;:::i;:::-;9355:74;;9438:93;9527:3;9438:93;:::i;:::-;9556:2;9551:3;9547:12;9540:19;;9199:366;;;:::o;9571:::-;9713:3;9734:67;9798:2;9793:3;9734:67;:::i;:::-;9727:74;;9810:93;9899:3;9810:93;:::i;:::-;9928:2;9923:3;9919:12;9912:19;;9571:366;;;:::o;9943:::-;10085:3;10106:67;10170:2;10165:3;10106:67;:::i;:::-;10099:74;;10182:93;10271:3;10182:93;:::i;:::-;10300:2;10295:3;10291:12;10284:19;;9943:366;;;:::o;10315:::-;10457:3;10478:67;10542:2;10537:3;10478:67;:::i;:::-;10471:74;;10554:93;10643:3;10554:93;:::i;:::-;10672:2;10667:3;10663:12;10656:19;;10315:366;;;:::o;10687:::-;10829:3;10850:67;10914:2;10909:3;10850:67;:::i;:::-;10843:74;;10926:93;11015:3;10926:93;:::i;:::-;11044:2;11039:3;11035:12;11028:19;;10687:366;;;:::o;11059:::-;11201:3;11222:67;11286:2;11281:3;11222:67;:::i;:::-;11215:74;;11298:93;11387:3;11298:93;:::i;:::-;11416:2;11411:3;11407:12;11400:19;;11059:366;;;:::o;11431:::-;11573:3;11594:67;11658:2;11653:3;11594:67;:::i;:::-;11587:74;;11670:93;11759:3;11670:93;:::i;:::-;11788:2;11783:3;11779:12;11772:19;;11431:366;;;:::o;11803:::-;11945:3;11966:67;12030:2;12025:3;11966:67;:::i;:::-;11959:74;;12042:93;12131:3;12042:93;:::i;:::-;12160:2;12155:3;12151:12;12144:19;;11803:366;;;:::o;12175:::-;12317:3;12338:67;12402:2;12397:3;12338:67;:::i;:::-;12331:74;;12414:93;12503:3;12414:93;:::i;:::-;12532:2;12527:3;12523:12;12516:19;;12175:366;;;:::o;12547:::-;12689:3;12710:67;12774:2;12769:3;12710:67;:::i;:::-;12703:74;;12786:93;12875:3;12786:93;:::i;:::-;12904:2;12899:3;12895:12;12888:19;;12547:366;;;:::o;12919:::-;13061:3;13082:67;13146:2;13141:3;13082:67;:::i;:::-;13075:74;;13158:93;13247:3;13158:93;:::i;:::-;13276:2;13271:3;13267:12;13260:19;;12919:366;;;:::o;13291:::-;13433:3;13454:67;13518:2;13513:3;13454:67;:::i;:::-;13447:74;;13530:93;13619:3;13530:93;:::i;:::-;13648:2;13643:3;13639:12;13632:19;;13291:366;;;:::o;13663:::-;13805:3;13826:67;13890:2;13885:3;13826:67;:::i;:::-;13819:74;;13902:93;13991:3;13902:93;:::i;:::-;14020:2;14015:3;14011:12;14004:19;;13663:366;;;:::o;14035:::-;14177:3;14198:67;14262:2;14257:3;14198:67;:::i;:::-;14191:74;;14274:93;14363:3;14274:93;:::i;:::-;14392:2;14387:3;14383:12;14376:19;;14035:366;;;:::o;14407:::-;14549:3;14570:67;14634:2;14629:3;14570:67;:::i;:::-;14563:74;;14646:93;14735:3;14646:93;:::i;:::-;14764:2;14759:3;14755:12;14748:19;;14407:366;;;:::o;14779:::-;14921:3;14942:67;15006:2;15001:3;14942:67;:::i;:::-;14935:74;;15018:93;15107:3;15018:93;:::i;:::-;15136:2;15131:3;15127:12;15120:19;;14779:366;;;:::o;15151:::-;15293:3;15314:67;15378:2;15373:3;15314:67;:::i;:::-;15307:74;;15390:93;15479:3;15390:93;:::i;:::-;15508:2;15503:3;15499:12;15492:19;;15151:366;;;:::o;15523:::-;15665:3;15686:67;15750:2;15745:3;15686:67;:::i;:::-;15679:74;;15762:93;15851:3;15762:93;:::i;:::-;15880:2;15875:3;15871:12;15864:19;;15523:366;;;:::o;15895:::-;16037:3;16058:67;16122:2;16117:3;16058:67;:::i;:::-;16051:74;;16134:93;16223:3;16134:93;:::i;:::-;16252:2;16247:3;16243:12;16236:19;;15895:366;;;:::o;16267:::-;16409:3;16430:67;16494:2;16489:3;16430:67;:::i;:::-;16423:74;;16506:93;16595:3;16506:93;:::i;:::-;16624:2;16619:3;16615:12;16608:19;;16267:366;;;:::o;16639:::-;16781:3;16802:67;16866:2;16861:3;16802:67;:::i;:::-;16795:74;;16878:93;16967:3;16878:93;:::i;:::-;16996:2;16991:3;16987:12;16980:19;;16639:366;;;:::o;17011:::-;17153:3;17174:67;17238:2;17233:3;17174:67;:::i;:::-;17167:74;;17250:93;17339:3;17250:93;:::i;:::-;17368:2;17363:3;17359:12;17352:19;;17011:366;;;:::o;17383:::-;17525:3;17546:67;17610:2;17605:3;17546:67;:::i;:::-;17539:74;;17622:93;17711:3;17622:93;:::i;:::-;17740:2;17735:3;17731:12;17724:19;;17383:366;;;:::o;17755:::-;17897:3;17918:67;17982:2;17977:3;17918:67;:::i;:::-;17911:74;;17994:93;18083:3;17994:93;:::i;:::-;18112:2;18107:3;18103:12;18096:19;;17755:366;;;:::o;18127:::-;18269:3;18290:67;18354:2;18349:3;18290:67;:::i;:::-;18283:74;;18366:93;18455:3;18366:93;:::i;:::-;18484:2;18479:3;18475:12;18468:19;;18127:366;;;:::o;18499:118::-;18586:24;18604:5;18586:24;:::i;:::-;18581:3;18574:37;18499:118;;:::o;18623:435::-;18803:3;18825:95;18916:3;18907:6;18825:95;:::i;:::-;18818:102;;18937:95;19028:3;19019:6;18937:95;:::i;:::-;18930:102;;19049:3;19042:10;;18623:435;;;;;:::o;19064:222::-;19157:4;19195:2;19184:9;19180:18;19172:26;;19208:71;19276:1;19265:9;19261:17;19252:6;19208:71;:::i;:::-;19064:222;;;;:::o;19292:640::-;19487:4;19525:3;19514:9;19510:19;19502:27;;19539:71;19607:1;19596:9;19592:17;19583:6;19539:71;:::i;:::-;19620:72;19688:2;19677:9;19673:18;19664:6;19620:72;:::i;:::-;19702;19770:2;19759:9;19755:18;19746:6;19702:72;:::i;:::-;19821:9;19815:4;19811:20;19806:2;19795:9;19791:18;19784:48;19849:76;19920:4;19911:6;19849:76;:::i;:::-;19841:84;;19292:640;;;;;;;:::o;19938:210::-;20025:4;20063:2;20052:9;20048:18;20040:26;;20076:65;20138:1;20127:9;20123:17;20114:6;20076:65;:::i;:::-;19938:210;;;;:::o;20154:222::-;20247:4;20285:2;20274:9;20270:18;20262:26;;20298:71;20366:1;20355:9;20351:17;20342:6;20298:71;:::i;:::-;20154:222;;;;:::o;20382:313::-;20495:4;20533:2;20522:9;20518:18;20510:26;;20582:9;20576:4;20572:20;20568:1;20557:9;20553:17;20546:47;20610:78;20683:4;20674:6;20610:78;:::i;:::-;20602:86;;20382:313;;;;:::o;20701:419::-;20867:4;20905:2;20894:9;20890:18;20882:26;;20954:9;20948:4;20944:20;20940:1;20929:9;20925:17;20918:47;20982:131;21108:4;20982:131;:::i;:::-;20974:139;;20701:419;;;:::o;21126:::-;21292:4;21330:2;21319:9;21315:18;21307:26;;21379:9;21373:4;21369:20;21365:1;21354:9;21350:17;21343:47;21407:131;21533:4;21407:131;:::i;:::-;21399:139;;21126:419;;;:::o;21551:::-;21717:4;21755:2;21744:9;21740:18;21732:26;;21804:9;21798:4;21794:20;21790:1;21779:9;21775:17;21768:47;21832:131;21958:4;21832:131;:::i;:::-;21824:139;;21551:419;;;:::o;21976:::-;22142:4;22180:2;22169:9;22165:18;22157:26;;22229:9;22223:4;22219:20;22215:1;22204:9;22200:17;22193:47;22257:131;22383:4;22257:131;:::i;:::-;22249:139;;21976:419;;;:::o;22401:::-;22567:4;22605:2;22594:9;22590:18;22582:26;;22654:9;22648:4;22644:20;22640:1;22629:9;22625:17;22618:47;22682:131;22808:4;22682:131;:::i;:::-;22674:139;;22401:419;;;:::o;22826:::-;22992:4;23030:2;23019:9;23015:18;23007:26;;23079:9;23073:4;23069:20;23065:1;23054:9;23050:17;23043:47;23107:131;23233:4;23107:131;:::i;:::-;23099:139;;22826:419;;;:::o;23251:::-;23417:4;23455:2;23444:9;23440:18;23432:26;;23504:9;23498:4;23494:20;23490:1;23479:9;23475:17;23468:47;23532:131;23658:4;23532:131;:::i;:::-;23524:139;;23251:419;;;:::o;23676:::-;23842:4;23880:2;23869:9;23865:18;23857:26;;23929:9;23923:4;23919:20;23915:1;23904:9;23900:17;23893:47;23957:131;24083:4;23957:131;:::i;:::-;23949:139;;23676:419;;;:::o;24101:::-;24267:4;24305:2;24294:9;24290:18;24282:26;;24354:9;24348:4;24344:20;24340:1;24329:9;24325:17;24318:47;24382:131;24508:4;24382:131;:::i;:::-;24374:139;;24101:419;;;:::o;24526:::-;24692:4;24730:2;24719:9;24715:18;24707:26;;24779:9;24773:4;24769:20;24765:1;24754:9;24750:17;24743:47;24807:131;24933:4;24807:131;:::i;:::-;24799:139;;24526:419;;;:::o;24951:::-;25117:4;25155:2;25144:9;25140:18;25132:26;;25204:9;25198:4;25194:20;25190:1;25179:9;25175:17;25168:47;25232:131;25358:4;25232:131;:::i;:::-;25224:139;;24951:419;;;:::o;25376:::-;25542:4;25580:2;25569:9;25565:18;25557:26;;25629:9;25623:4;25619:20;25615:1;25604:9;25600:17;25593:47;25657:131;25783:4;25657:131;:::i;:::-;25649:139;;25376:419;;;:::o;25801:::-;25967:4;26005:2;25994:9;25990:18;25982:26;;26054:9;26048:4;26044:20;26040:1;26029:9;26025:17;26018:47;26082:131;26208:4;26082:131;:::i;:::-;26074:139;;25801:419;;;:::o;26226:::-;26392:4;26430:2;26419:9;26415:18;26407:26;;26479:9;26473:4;26469:20;26465:1;26454:9;26450:17;26443:47;26507:131;26633:4;26507:131;:::i;:::-;26499:139;;26226:419;;;:::o;26651:::-;26817:4;26855:2;26844:9;26840:18;26832:26;;26904:9;26898:4;26894:20;26890:1;26879:9;26875:17;26868:47;26932:131;27058:4;26932:131;:::i;:::-;26924:139;;26651:419;;;:::o;27076:::-;27242:4;27280:2;27269:9;27265:18;27257:26;;27329:9;27323:4;27319:20;27315:1;27304:9;27300:17;27293:47;27357:131;27483:4;27357:131;:::i;:::-;27349:139;;27076:419;;;:::o;27501:::-;27667:4;27705:2;27694:9;27690:18;27682:26;;27754:9;27748:4;27744:20;27740:1;27729:9;27725:17;27718:47;27782:131;27908:4;27782:131;:::i;:::-;27774:139;;27501:419;;;:::o;27926:::-;28092:4;28130:2;28119:9;28115:18;28107:26;;28179:9;28173:4;28169:20;28165:1;28154:9;28150:17;28143:47;28207:131;28333:4;28207:131;:::i;:::-;28199:139;;27926:419;;;:::o;28351:::-;28517:4;28555:2;28544:9;28540:18;28532:26;;28604:9;28598:4;28594:20;28590:1;28579:9;28575:17;28568:47;28632:131;28758:4;28632:131;:::i;:::-;28624:139;;28351:419;;;:::o;28776:::-;28942:4;28980:2;28969:9;28965:18;28957:26;;29029:9;29023:4;29019:20;29015:1;29004:9;29000:17;28993:47;29057:131;29183:4;29057:131;:::i;:::-;29049:139;;28776:419;;;:::o;29201:::-;29367:4;29405:2;29394:9;29390:18;29382:26;;29454:9;29448:4;29444:20;29440:1;29429:9;29425:17;29418:47;29482:131;29608:4;29482:131;:::i;:::-;29474:139;;29201:419;;;:::o;29626:::-;29792:4;29830:2;29819:9;29815:18;29807:26;;29879:9;29873:4;29869:20;29865:1;29854:9;29850:17;29843:47;29907:131;30033:4;29907:131;:::i;:::-;29899:139;;29626:419;;;:::o;30051:::-;30217:4;30255:2;30244:9;30240:18;30232:26;;30304:9;30298:4;30294:20;30290:1;30279:9;30275:17;30268:47;30332:131;30458:4;30332:131;:::i;:::-;30324:139;;30051:419;;;:::o;30476:::-;30642:4;30680:2;30669:9;30665:18;30657:26;;30729:9;30723:4;30719:20;30715:1;30704:9;30700:17;30693:47;30757:131;30883:4;30757:131;:::i;:::-;30749:139;;30476:419;;;:::o;30901:::-;31067:4;31105:2;31094:9;31090:18;31082:26;;31154:9;31148:4;31144:20;31140:1;31129:9;31125:17;31118:47;31182:131;31308:4;31182:131;:::i;:::-;31174:139;;30901:419;;;:::o;31326:::-;31492:4;31530:2;31519:9;31515:18;31507:26;;31579:9;31573:4;31569:20;31565:1;31554:9;31550:17;31543:47;31607:131;31733:4;31607:131;:::i;:::-;31599:139;;31326:419;;;:::o;31751:::-;31917:4;31955:2;31944:9;31940:18;31932:26;;32004:9;31998:4;31994:20;31990:1;31979:9;31975:17;31968:47;32032:131;32158:4;32032:131;:::i;:::-;32024:139;;31751:419;;;:::o;32176:222::-;32269:4;32307:2;32296:9;32292:18;32284:26;;32320:71;32388:1;32377:9;32373:17;32364:6;32320:71;:::i;:::-;32176:222;;;;:::o;32404:129::-;32438:6;32465:20;;:::i;:::-;32455:30;;32494:33;32522:4;32514:6;32494:33;:::i;:::-;32404:129;;;:::o;32539:75::-;32572:6;32605:2;32599:9;32589:19;;32539:75;:::o;32620:307::-;32681:4;32771:18;32763:6;32760:30;32757:56;;;32793:18;;:::i;:::-;32757:56;32831:29;32853:6;32831:29;:::i;:::-;32823:37;;32915:4;32909;32905:15;32897:23;;32620:307;;;:::o;32933:98::-;32984:6;33018:5;33012:12;33002:22;;32933:98;;;:::o;33037:99::-;33089:6;33123:5;33117:12;33107:22;;33037:99;;;:::o;33142:168::-;33225:11;33259:6;33254:3;33247:19;33299:4;33294:3;33290:14;33275:29;;33142:168;;;;:::o;33316:169::-;33400:11;33434:6;33429:3;33422:19;33474:4;33469:3;33465:14;33450:29;;33316:169;;;;:::o;33491:148::-;33593:11;33630:3;33615:18;;33491:148;;;;:::o;33645:273::-;33685:3;33704:20;33722:1;33704:20;:::i;:::-;33699:25;;33738:20;33756:1;33738:20;:::i;:::-;33733:25;;33860:1;33824:34;33820:42;33817:1;33814:49;33811:75;;;33866:18;;:::i;:::-;33811:75;33910:1;33907;33903:9;33896:16;;33645:273;;;;:::o;33924:305::-;33964:3;33983:20;34001:1;33983:20;:::i;:::-;33978:25;;34017:20;34035:1;34017:20;:::i;:::-;34012:25;;34171:1;34103:66;34099:74;34096:1;34093:81;34090:107;;;34177:18;;:::i;:::-;34090:107;34221:1;34218;34214:9;34207:16;;33924:305;;;;:::o;34235:185::-;34275:1;34292:20;34310:1;34292:20;:::i;:::-;34287:25;;34326:20;34344:1;34326:20;:::i;:::-;34321:25;;34365:1;34355:35;;34370:18;;:::i;:::-;34355:35;34412:1;34409;34405:9;34400:14;;34235:185;;;;:::o;34426:348::-;34466:7;34489:20;34507:1;34489:20;:::i;:::-;34484:25;;34523:20;34541:1;34523:20;:::i;:::-;34518:25;;34711:1;34643:66;34639:74;34636:1;34633:81;34628:1;34621:9;34614:17;34610:105;34607:131;;;34718:18;;:::i;:::-;34607:131;34766:1;34763;34759:9;34748:20;;34426:348;;;;:::o;34780:191::-;34820:4;34840:20;34858:1;34840:20;:::i;:::-;34835:25;;34874:20;34892:1;34874:20;:::i;:::-;34869:25;;34913:1;34910;34907:8;34904:34;;;34918:18;;:::i;:::-;34904:34;34963:1;34960;34956:9;34948:17;;34780:191;;;;:::o;34977:::-;35017:4;35037:20;35055:1;35037:20;:::i;:::-;35032:25;;35071:20;35089:1;35071:20;:::i;:::-;35066:25;;35110:1;35107;35104:8;35101:34;;;35115:18;;:::i;:::-;35101:34;35160:1;35157;35153:9;35145:17;;34977:191;;;;:::o;35174:96::-;35211:7;35240:24;35258:5;35240:24;:::i;:::-;35229:35;;35174:96;;;:::o;35276:90::-;35310:7;35353:5;35346:13;35339:21;35328:32;;35276:90;;;:::o;35372:77::-;35409:7;35438:5;35427:16;;35372:77;;;:::o;35455:149::-;35491:7;35531:66;35524:5;35520:78;35509:89;;35455:149;;;:::o;35610:118::-;35647:7;35687:34;35680:5;35676:46;35665:57;;35610:118;;;:::o;35734:126::-;35771:7;35811:42;35804:5;35800:54;35789:65;;35734:126;;;:::o;35866:77::-;35903:7;35932:5;35921:16;;35866:77;;;:::o;35949:154::-;36033:6;36028:3;36023;36010:30;36095:1;36086:6;36081:3;36077:16;36070:27;35949:154;;;:::o;36109:307::-;36177:1;36187:113;36201:6;36198:1;36195:13;36187:113;;;36286:1;36281:3;36277:11;36271:18;36267:1;36262:3;36258:11;36251:39;36223:2;36220:1;36216:10;36211:15;;36187:113;;;36318:6;36315:1;36312:13;36309:101;;;36398:1;36389:6;36384:3;36380:16;36373:27;36309:101;36158:258;36109:307;;;:::o;36422:171::-;36461:3;36484:24;36502:5;36484:24;:::i;:::-;36475:33;;36530:4;36523:5;36520:15;36517:41;;;36538:18;;:::i;:::-;36517:41;36585:1;36578:5;36574:13;36567:20;;36422:171;;;:::o;36599:320::-;36643:6;36680:1;36674:4;36670:12;36660:22;;36727:1;36721:4;36717:12;36748:18;36738:81;;36804:4;36796:6;36792:17;36782:27;;36738:81;36866:2;36858:6;36855:14;36835:18;36832:38;36829:84;;;36885:18;;:::i;:::-;36829:84;36650:269;36599:320;;;:::o;36925:281::-;37008:27;37030:4;37008:27;:::i;:::-;37000:6;36996:40;37138:6;37126:10;37123:22;37102:18;37090:10;37087:34;37084:62;37081:88;;;37149:18;;:::i;:::-;37081:88;37189:10;37185:2;37178:22;36968:238;36925:281;;:::o;37212:233::-;37251:3;37274:24;37292:5;37274:24;:::i;:::-;37265:33;;37320:66;37313:5;37310:77;37307:103;;;37390:18;;:::i;:::-;37307:103;37437:1;37430:5;37426:13;37419:20;;37212:233;;;:::o;37451:176::-;37483:1;37500:20;37518:1;37500:20;:::i;:::-;37495:25;;37534:20;37552:1;37534:20;:::i;:::-;37529:25;;37573:1;37563:35;;37578:18;;:::i;:::-;37563:35;37619:1;37616;37612:9;37607:14;;37451:176;;;;:::o;37633:180::-;37681:77;37678:1;37671:88;37778:4;37775:1;37768:15;37802:4;37799:1;37792:15;37819:180;37867:77;37864:1;37857:88;37964:4;37961:1;37954:15;37988:4;37985:1;37978:15;38005:180;38053:77;38050:1;38043:88;38150:4;38147:1;38140:15;38174:4;38171:1;38164:15;38191:180;38239:77;38236:1;38229:88;38336:4;38333:1;38326:15;38360:4;38357:1;38350:15;38377:180;38425:77;38422:1;38415:88;38522:4;38519:1;38512:15;38546:4;38543:1;38536:15;38563:117;38672:1;38669;38662:12;38686:117;38795:1;38792;38785:12;38809:117;38918:1;38915;38908:12;38932:117;39041:1;39038;39031:12;39055:117;39164:1;39161;39154:12;39178:117;39287:1;39284;39277:12;39301:102;39342:6;39393:2;39389:7;39384:2;39377:5;39373:14;39369:28;39359:38;;39301:102;;;:::o;39409:241::-;39549:34;39545:1;39537:6;39533:14;39526:58;39618:24;39613:2;39605:6;39601:15;39594:49;39409:241;:::o;39656:225::-;39796:34;39792:1;39784:6;39780:14;39773:58;39865:8;39860:2;39852:6;39848:15;39841:33;39656:225;:::o;39887:171::-;40027:23;40023:1;40015:6;40011:14;40004:47;39887:171;:::o;40064:239::-;40204:34;40200:1;40192:6;40188:14;40181:58;40273:22;40268:2;40260:6;40256:15;40249:47;40064:239;:::o;40309:240::-;40449:34;40445:1;40437:6;40433:14;40426:58;40518:23;40513:2;40505:6;40501:15;40494:48;40309:240;:::o;40555:224::-;40695:34;40691:1;40683:6;40679:14;40672:58;40764:7;40759:2;40751:6;40747:15;40740:32;40555:224;:::o;40785:177::-;40925:29;40921:1;40913:6;40909:14;40902:53;40785:177;:::o;40968:233::-;41108:34;41104:1;41096:6;41092:14;41085:58;41177:16;41172:2;41164:6;41160:15;41153:41;40968:233;:::o;41207:171::-;41347:23;41343:1;41335:6;41331:14;41324:47;41207:171;:::o;41384:179::-;41524:31;41520:1;41512:6;41508:14;41501:55;41384:179;:::o;41569:223::-;41709:34;41705:1;41697:6;41693:14;41686:58;41778:6;41773:2;41765:6;41761:15;41754:31;41569:223;:::o;41798:182::-;41938:34;41934:1;41926:6;41922:14;41915:58;41798:182;:::o;41986:237::-;42126:34;42122:1;42114:6;42110:14;42103:58;42195:20;42190:2;42182:6;42178:15;42171:45;41986:237;:::o;42229:234::-;42369:34;42365:1;42357:6;42353:14;42346:58;42438:17;42433:2;42425:6;42421:15;42414:42;42229:234;:::o;42469:225::-;42609:34;42605:1;42597:6;42593:14;42586:58;42678:8;42673:2;42665:6;42661:15;42654:33;42469:225;:::o;42700:172::-;42840:24;42836:1;42828:6;42824:14;42817:48;42700:172;:::o;42878:182::-;43018:34;43014:1;43006:6;43002:14;42995:58;42878:182;:::o;43066:178::-;43206:30;43202:1;43194:6;43190:14;43183:54;43066:178;:::o;43250:247::-;43390:34;43386:1;43378:6;43374:14;43367:58;43459:30;43454:2;43446:6;43442:15;43435:55;43250:247;:::o;43503:235::-;43643:34;43639:1;43631:6;43627:14;43620:58;43712:18;43707:2;43699:6;43695:15;43688:43;43503:235;:::o;43744:164::-;43884:16;43880:1;43872:6;43868:14;43861:40;43744:164;:::o;43914:236::-;44054:34;44050:1;44042:6;44038:14;44031:58;44123:19;44118:2;44110:6;44106:15;44099:44;43914:236;:::o;44156:232::-;44296:34;44292:1;44284:6;44280:14;44273:58;44365:15;44360:2;44352:6;44348:15;44341:40;44156:232;:::o;44394:224::-;44534:34;44530:1;44522:6;44518:14;44511:58;44603:7;44598:2;44590:6;44586:15;44579:32;44394:224;:::o;44624:::-;44764:34;44760:1;44752:6;44748:14;44741:58;44833:7;44828:2;44820:6;44816:15;44809:32;44624:224;:::o;44854:228::-;44994:34;44990:1;44982:6;44978:14;44971:58;45063:11;45058:2;45050:6;45046:15;45039:36;44854:228;:::o;45088:227::-;45228:34;45224:1;45216:6;45212:14;45205:58;45297:10;45292:2;45284:6;45280:15;45273:35;45088:227;:::o;45321:122::-;45394:24;45412:5;45394:24;:::i;:::-;45387:5;45384:35;45374:63;;45433:1;45430;45423:12;45374:63;45321:122;:::o;45449:116::-;45519:21;45534:5;45519:21;:::i;:::-;45512:5;45509:32;45499:60;;45555:1;45552;45545:12;45499:60;45449:116;:::o;45571:120::-;45643:23;45660:5;45643:23;:::i;:::-;45636:5;45633:34;45623:62;;45681:1;45678;45671:12;45623:62;45571:120;:::o;45697:122::-;45770:24;45788:5;45770:24;:::i;:::-;45763:5;45760:35;45750:63;;45809:1;45806;45799:12;45750:63;45697:122;:::o
Swarm Source
ipfs://30da3435edaa1980334b860124067a80b07f4c083aaf19bcb6ce6e55499694fb
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.