Polygon Sponsored slots available. Book your slot here!
Contract Overview
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
PolyPupPunks
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-10-01 */ // SPDX-License-Identifier: MIT OR Apache-2.0 // File: @openzeppelin/contracts/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; } } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/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 make 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; } } // File: @openzeppelin/contracts/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); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/security/Pausable.sol pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol pragma solidity ^0.8.0; /** * @dev ERC721 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. */ abstract contract ERC721Pausable is ERC721, Pausable { /** * @dev See {ERC721-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); require(!paused(), "ERC721Pausable: token transfer while paused"); } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Counters.sol pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: contracts/2_Owner.sol // @title: PolyPup Punks NFT // @author: Neothon // .______ ______ __ ____ ____ .______ __ __ .______ .______ __ __ .__ __. __ ___ _______. // | _ \ / __ \ | | \ \ / / | _ \ | | | | | _ \ | _ \ | | | | | \ | | | |/ / / | // | |_) | | | | | | | \ \/ / | |_) | | | | | | |_) | | |_) | | | | | | \| | | ' / | (----` // | ___/ | | | | | | \_ _/ | ___/ | | | | | ___/ | ___/ | | | | | . ` | | < \ \ // | | | `--' | | `----. | | | | | `--' | | | | | | `--' | | |\ | | . \ .----) | // | _| \______/ |_______| |__| | _| \______/ | _| | _| \______/ |__| \__| |__|\__\ |_______/ pragma solidity ^0.8.4; contract PolyPupPunks is ERC721Pausable, ERC721Burnable, Ownable, ERC721Enumerable, ReentrancyGuard { using Counters for Counters.Counter; bool private sale; uint256 public constant TOKEN_LIMIT = 10000; uint256 public constant PRICE = 75 ether; uint256 public constant MAX_MINT_AT_ONCE = 10; address payable public immutable developer; string public baseTokenURI; Counters.Counter private _numberOfTokens; // Random index assignment uint256 internal nonce = 0; uint256[TOKEN_LIMIT] internal indices; address public constant pairAddress = 0x853Ee4b2A13f8a742d64C8F088bE7bA2131f670d; // USDC/WETH QuickSwap Pair Address /** * Event emitted when poly pup punk minted */ event PolyPupPunkMinted(uint256 indexed id); /** * Event emitted when the public sale begins. */ event SaleBegins(); /** * Event emitted when base uri is updated */ event BaseURIUpdated(); constructor(string memory baseURI, address payable _developer) ERC721('PolyPup Punks', 'PUPPUNK') { setBaseURI(baseURI); developer = _developer; pause(true); sale = false; } /** * Start sale only owner allowed */ function startSale() external onlyOwner { sale = true; pause(false); emit SaleBegins(); } /** * Function modifier to pause sale if owner is not calling the function. */ modifier saleIsOpen() { require(_totalSupply() <= TOKEN_LIMIT, 'Sale ended'); if (_msgSender() != owner()) { require(!paused(), 'Pausable: paused'); } _; } modifier validNFToken(uint256 _tokenId) { require(_exists(_tokenId), 'Invalid token.'); _; } /** * Public method to start minting PolyPup Punks */ function mint(uint256 _count) external payable nonReentrant { uint256 total = _totalSupply(); require(sale == true, 'Sale has not yet started'); require(total + _count <= TOKEN_LIMIT, 'Max limit'); require(_count <= MAX_MINT_AT_ONCE, 'Exceeds number'); require(msg.value == price(_count), 'Value below price'); require(tx.origin == msg.sender, 'Caller cannot be a contract'); // Only EOA can mint and not a contract for (uint256 i = 0; i < _count; i++) { _mintAnElement(msg.sender); } Address.sendValue(developer, msg.value); } function _mintAnElement(address _to) private { uint256 id = _randomIndex(); _numberOfTokens.increment(); _safeMint(_to, id); emit PolyPupPunkMinted(id); } /** * Returns a random index within the unminited token id range */ function _randomIndex() internal returns (uint256) { uint256 totalSize = TOKEN_LIMIT - _numberOfTokens.current(); //Fetching current balances of USDC/WETH QS Pair for increasing Randomness Entropy (uint256 balance1, uint256 balance2) = getCurrentBalanceQSPair(); uint256 index = uint256( keccak256( abi.encodePacked( nonce, msg.sender, balance1, balance2, block.difficulty, block.timestamp ) ) ) % totalSize; uint256 value = 0; if (indices[index] != 0) { value = indices[index]; } else { value = index; } // Move last value to selected position if (indices[totalSize - 1] == 0) { // Array position not initialized, so use position indices[index] = totalSize - 1; } else { // Array position holds a value so use that indices[index] = indices[totalSize - 1]; } nonce++; // Don't allow a zero index, start counting at 1 return value + 1; } /** * @dev Getting current reserves of USDC and WETH pairs on QuickSwap */ function getCurrentBalanceQSPair() public view returns (uint256, uint256) { IUniswapV2Pair pair = IUniswapV2Pair( pairAddress // Address of USDC/WETH Pair on QuickSwap ); (uint256 res0, uint256 res1, ) = pair.getReserves(); return (res0, res1); } /** Returns total minted at that point of time */ function totalMint() external view returns (uint256) { return _totalSupply(); } /** Returns total price for total numbrer of minting */ function price(uint256 _count) public pure returns (uint256) { return PRICE * _count; } /** Defining Internal Methods */ /** * Returns the total current supply */ function _totalSupply() internal view returns (uint256) { return _numberOfTokens.current(); } /* * Function set base URI. Only Contract Owner can do this */ function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; emit BaseURIUpdated(); } /** * @dev A distinct URI (RFC 3986) for a given NFT. * @param _tokenId Id for which we want uri. * @return _tokenId URI of _tokenId. */ function tokenURI(uint256 _tokenId) public view virtual override validNFToken(_tokenId) returns (string memory) { // returning only baseTokenURI followed by the ID. return string(abi.encodePacked(baseTokenURI, Strings.toString(_tokenId))); } /** * Pause and unpause sale */ function pause(bool val) public onlyOwner { // Allowing pause only if the sale hasn't started if (val == true && sale == false) { _pause(); return; } _unpause(); } // return NFTs in owner wallet function walletOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](tokenCount); for (uint256 i = 0; i < tokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override(ERC721, ERC721Enumerable, ERC721Pausable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"address payable","name":"_developer","type":"address"}],"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":[],"name":"BaseURIUpdated","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"PolyPupPunkMinted","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleBegins","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_MINT_AT_ONCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developer","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentBalanceQSPair","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":[],"name":"startSale","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":"totalMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040526000600f553480156200001657600080fd5b5060405162005a8238038062005a8283398181016040528101906200003c919062000887565b6040518060400160405280600d81526020017f506f6c795075702050756e6b73000000000000000000000000000000000000008152506040518060400160405280600781526020017f50555050554e4b000000000000000000000000000000000000000000000000008152508160009080519060200190620000c0929190620005d5565b508060019080519060200190620000d9929190620005d5565b5050506000600660006101000a81548160ff021916908315150217905550620001176200010b6200019960201b60201c565b620001a160201b60201c565b6001600b8190555062000130826200026760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200017660016200033e60201b60201c565b6000600c60006101000a81548160ff021916908315150217905550505062000afb565b600033905090565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002776200019960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200029d6200042560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ed906200094e565b60405180910390fd5b80600d90805190602001906200030e929190620005d5565b507fa1731ca444c73d019f0dbb4ee5546c98730f4ffcdaa1c29776ab542aa64d5e1b60405160405180910390a150565b6200034e6200019960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003746200042560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c4906200094e565b60405180910390fd5b60011515811515148015620003f5575060001515600c60009054906101000a900460ff161515145b1562000411576200040b6200044f60201b60201c565b62000422565b620004216200050760201b60201c565b5b50565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200045f620005be60201b60201c565b15620004a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200049990620009c0565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620004ee6200019960201b60201c565b604051620004fd919062000a07565b60405180910390a1565b62000517620005be60201b60201c565b62000559576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005509062000a74565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa620005a56200019960201b60201c565b604051620005b4919062000a07565b60405180910390a1565b6000600660009054906101000a900460ff16905090565b828054620005e39062000ac5565b90600052602060002090601f01602090048101928262000607576000855562000653565b82601f106200062257805160ff191683800117855562000653565b8280016001018555821562000653579182015b828111156200065257825182559160200191906001019062000635565b5b50905062000662919062000666565b5090565b5b808211156200068157600081600090555060010162000667565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006ee82620006a3565b810181811067ffffffffffffffff8211171562000710576200070f620006b4565b5b80604052505050565b60006200072562000685565b9050620007338282620006e3565b919050565b600067ffffffffffffffff821115620007565762000755620006b4565b5b6200076182620006a3565b9050602081019050919050565b60005b838110156200078e57808201518184015260208101905062000771565b838111156200079e576000848401525b50505050565b6000620007bb620007b58462000738565b62000719565b905082815260208101848484011115620007da57620007d96200069e565b5b620007e78482856200076e565b509392505050565b600082601f83011262000807576200080662000699565b5b815162000819848260208601620007a4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200084f8262000822565b9050919050565b620008618162000842565b81146200086d57600080fd5b50565b600081519050620008818162000856565b92915050565b60008060408385031215620008a157620008a06200068f565b5b600083015167ffffffffffffffff811115620008c257620008c162000694565b5b620008d085828601620007ef565b9250506020620008e38582860162000870565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000936602083620008ed565b91506200094382620008fe565b602082019050919050565b60006020820190508181036000830152620009698162000927565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000620009a8601083620008ed565b9150620009b58262000970565b602082019050919050565b60006020820190508181036000830152620009db8162000999565b9050919050565b6000620009ef8262000822565b9050919050565b62000a0181620009e2565b82525050565b600060208201905062000a1e6000830184620009f6565b92915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600062000a5c601483620008ed565b915062000a698262000a24565b602082019050919050565b6000602082019050818103600083015262000a8f8162000a4d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ade57607f821691505b6020821081141562000af55762000af462000a96565b5b50919050565b608051614f6462000b1e600039600081816113fa01526117750152614f646000f3fe6080604052600436106102045760003560e01c80635c975abb11610118578063a8b08982116100a0578063ca4b208b1161006f578063ca4b208b1461076e578063d547cfb714610799578063e825b213146107c4578063e985e9c5146107f0578063f2fde38b1461082d57610204565b8063a8b08982146106c6578063b66a0e5d146106f1578063b88d4fde14610708578063c87b56dd1461073157610204565b80638d859f3e116100e75780638d859f3e146106005780638da5cb5b1461062b57806395d89b4114610656578063a0712d6814610681578063a22cb4651461069d57610204565b80635c975abb146105445780636352211e1461056f57806370a08231146105ac578063715018a6146105e957610204565b806323b872dd1161019b57806342966c681161016a57806342966c681461044d578063438b6300146104765780634f6ccce7146104b357806355f804b3146104f057806359a7715a1461051957610204565b806323b872dd1461038157806326a49e37146103aa5780632f745c59146103e757806342842e0e1461042457610204565b806306fdde03116101d757806306fdde03146102c5578063081812fc146102f0578063095ea7b31461032d57806318160ddd1461035657610204565b806301ffc9a71461020957806302329a2914610246578063031bd4c41461026f57806305394dcc1461029a575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906131fc565b610856565b60405161023d9190613244565b60405180910390f35b34801561025257600080fd5b5061026d6004803603810190610268919061328b565b610868565b005b34801561027b57600080fd5b50610284610929565b60405161029191906132d1565b60405180910390f35b3480156102a657600080fd5b506102af61092f565b6040516102bc91906132d1565b60405180910390f35b3480156102d157600080fd5b506102da610934565b6040516102e79190613385565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906133d3565b6109c6565b6040516103249190613441565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f9190613488565b610a4b565b005b34801561036257600080fd5b5061036b610b63565b60405161037891906132d1565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906134c8565b610b70565b005b3480156103b657600080fd5b506103d160048036038101906103cc91906133d3565b610bd0565b6040516103de91906132d1565b60405180910390f35b3480156103f357600080fd5b5061040e60048036038101906104099190613488565b610bee565b60405161041b91906132d1565b60405180910390f35b34801561043057600080fd5b5061044b600480360381019061044691906134c8565b610c93565b005b34801561045957600080fd5b50610474600480360381019061046f91906133d3565b610cb3565b005b34801561048257600080fd5b5061049d6004803603810190610498919061351b565b610d0f565b6040516104aa9190613606565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d591906133d3565b610dbd565b6040516104e791906132d1565b60405180910390f35b3480156104fc57600080fd5b506105176004803603810190610512919061375d565b610e2e565b005b34801561052557600080fd5b5061052e610ef0565b60405161053b91906132d1565b60405180910390f35b34801561055057600080fd5b50610559610eff565b6040516105669190613244565b60405180910390f35b34801561057b57600080fd5b50610596600480360381019061059191906133d3565b610f16565b6040516105a39190613441565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce919061351b565b610fc8565b6040516105e091906132d1565b60405180910390f35b3480156105f557600080fd5b506105fe611080565b005b34801561060c57600080fd5b50610615611108565b60405161062291906132d1565b60405180910390f35b34801561063757600080fd5b50610640611115565b60405161064d9190613441565b60405180910390f35b34801561066257600080fd5b5061066b61113f565b6040516106789190613385565b60405180910390f35b61069b600480360381019061069691906133d3565b6111d1565b005b3480156106a957600080fd5b506106c460048036038101906106bf91906137a6565b61142b565b005b3480156106d257600080fd5b506106db6115ac565b6040516106e89190613441565b60405180910390f35b3480156106fd57600080fd5b506107066115c4565b005b34801561071457600080fd5b5061072f600480360381019061072a9190613887565b611693565b005b34801561073d57600080fd5b50610758600480360381019061075391906133d3565b6116f5565b6040516107659190613385565b60405180910390f35b34801561077a57600080fd5b50610783611773565b604051610790919061392b565b60405180910390f35b3480156107a557600080fd5b506107ae611797565b6040516107bb9190613385565b60405180910390f35b3480156107d057600080fd5b506107d9611825565b6040516107e7929190613946565b60405180910390f35b3480156107fc57600080fd5b506108176004803603810190610812919061396f565b6118f4565b6040516108249190613244565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f919061351b565b611988565b005b600061086182611a80565b9050919050565b610870611afa565b73ffffffffffffffffffffffffffffffffffffffff1661088e611115565b73ffffffffffffffffffffffffffffffffffffffff16146108e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108db906139fb565b60405180910390fd5b6001151581151514801561090b575060001515600c60009054906101000a900460ff161515145b1561091d57610918611b02565b610926565b610925611ba5565b5b50565b61271081565b600a81565b60606000805461094390613a4a565b80601f016020809104026020016040519081016040528092919081815260200182805461096f90613a4a565b80156109bc5780601f10610991576101008083540402835291602001916109bc565b820191906000526020600020905b81548152906001019060200180831161099f57829003601f168201915b5050505050905090565b60006109d182611c47565b610a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0790613aee565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a5682610f16565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe90613b80565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ae6611afa565b73ffffffffffffffffffffffffffffffffffffffff161480610b155750610b1481610b0f611afa565b6118f4565b5b610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b90613c12565b60405180910390fd5b610b5e8383611cb3565b505050565b6000600980549050905090565b610b81610b7b611afa565b82611d6c565b610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790613ca4565b60405180910390fd5b610bcb838383611e4a565b505050565b600081680410d586a20a4c0000610be79190613cf3565b9050919050565b6000610bf983610fc8565b8210610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190613dbf565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cae83838360405180602001604052806000815250611693565b505050565b610cc4610cbe611afa565b82611d6c565b610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa90613e51565b60405180910390fd5b610d0c816120a6565b50565b60606000610d1c83610fc8565b905060008167ffffffffffffffff811115610d3a57610d39613632565b5b604051908082528060200260200182016040528015610d685781602001602082028036833780820191505090505b50905060005b82811015610db257610d808582610bee565b828281518110610d9357610d92613e71565b5b6020026020010181815250508080610daa90613ea0565b915050610d6e565b508092505050919050565b6000610dc7610b63565b8210610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff90613f5b565b60405180910390fd5b60098281548110610e1c57610e1b613e71565b5b90600052602060002001549050919050565b610e36611afa565b73ffffffffffffffffffffffffffffffffffffffff16610e54611115565b73ffffffffffffffffffffffffffffffffffffffff1614610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea1906139fb565b60405180910390fd5b80600d9080519060200190610ec09291906130ed565b507fa1731ca444c73d019f0dbb4ee5546c98730f4ffcdaa1c29776ab542aa64d5e1b60405160405180910390a150565b6000610efa6121b7565b905090565b6000600660009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb690613fed565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611039576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110309061407f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611088611afa565b73ffffffffffffffffffffffffffffffffffffffff166110a6611115565b73ffffffffffffffffffffffffffffffffffffffff16146110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f3906139fb565b60405180910390fd5b61110660006121c8565b565b680410d586a20a4c000081565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461114e90613a4a565b80601f016020809104026020016040519081016040528092919081815260200182805461117a90613a4a565b80156111c75780601f1061119c576101008083540402835291602001916111c7565b820191906000526020600020905b8154815290600101906020018083116111aa57829003601f168201915b5050505050905090565b6002600b541415611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e906140eb565b60405180910390fd5b6002600b8190555060006112296121b7565b905060011515600c60009054906101000a900460ff16151514611281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127890614157565b60405180910390fd5b61271082826112909190614177565b11156112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890614219565b60405180910390fd5b600a821115611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90614285565b60405180910390fd5b61131e82610bd0565b341461135f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611356906142f1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c49061435d565b60405180910390fd5b60005b828110156113f4576113e13361228e565b80806113ec90613ea0565b9150506113d0565b5061141f7f0000000000000000000000000000000000000000000000000000000000000000346122df565b506001600b8190555050565b611433611afa565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611498906143c9565b60405180910390fd5b80600560006114ae611afa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661155b611afa565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115a09190613244565b60405180910390a35050565b73853ee4b2a13f8a742d64c8f088be7ba2131f670d81565b6115cc611afa565b73ffffffffffffffffffffffffffffffffffffffff166115ea611115565b73ffffffffffffffffffffffffffffffffffffffff1614611640576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611637906139fb565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506116656000610868565b7f771cfe172460b7d64cc46cca57a1e1f40f52b47cf1d16fe30c78a2935b3dd58060405160405180910390a1565b6116a461169e611afa565b83611d6c565b6116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da90613ca4565b60405180910390fd5b6116ef848484846123d3565b50505050565b60608161170181611c47565b611740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173790614435565b60405180910390fd5b600d61174b8461242f565b60405160200161175c929190614525565b604051602081830303815290604052915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d80546117a490613a4a565b80601f01602080910402602001604051908101604052809291908181526020018280546117d090613a4a565b801561181d5780601f106117f25761010080835404028352916020019161181d565b820191906000526020600020905b81548152906001019060200180831161180057829003601f168201915b505050505081565b600080600073853ee4b2a13f8a742d64c8f088be7ba2131f670d90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561188a57600080fd5b505afa15801561189e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c291906145cb565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508181945094505050509091565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611990611afa565b73ffffffffffffffffffffffffffffffffffffffff166119ae611115565b73ffffffffffffffffffffffffffffffffffffffff1614611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb906139fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b90614690565b60405180910390fd5b611a7d816121c8565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611af35750611af282612590565b5b9050919050565b600033905090565b611b0a610eff565b15611b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b41906146fc565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611b8e611afa565b604051611b9b9190613441565b60405180910390a1565b611bad610eff565b611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be390614768565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611c30611afa565b604051611c3d9190613441565b60405180910390a1565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d2683610f16565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d7782611c47565b611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad906147fa565b60405180910390fd5b6000611dc183610f16565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e3057508373ffffffffffffffffffffffffffffffffffffffff16611e18846109c6565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e415750611e4081856118f4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e6a82610f16565b73ffffffffffffffffffffffffffffffffffffffff1614611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb79061488c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f279061491e565b60405180910390fd5b611f3b838383612672565b611f46600082611cb3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f96919061493e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fed9190614177565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006120b182610f16565b90506120bf81600084612672565b6120ca600083611cb3565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461211a919061493e565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006121c3600e612682565b905090565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612298612690565b90506122a4600e612805565b6122ae828261281b565b807f0b4f7fd7d572650e7234b9e49323857217a4bc3821ea6fca0839ed26e044e83960405160405180910390a25050565b80471015612322576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612319906149be565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161234890614a0f565b60006040518083038185875af1925050503d8060008114612385576040519150601f19603f3d011682016040523d82523d6000602084013e61238a565b606091505b50509050806123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c590614a96565b60405180910390fd5b505050565b6123de848484611e4a565b6123ea84848484612839565b612429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242090614b28565b60405180910390fd5b50505050565b60606000821415612477576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061258b565b600082905060005b600082146124a957808061249290613ea0565b915050600a826124a29190614b77565b915061247f565b60008167ffffffffffffffff8111156124c5576124c4613632565b5b6040519080825280601f01601f1916602001820160405280156124f75781602001600182028036833780820191505090505b5090505b6000851461258457600182612510919061493e565b9150600a8561251f9190614ba8565b603061252b9190614177565b60f81b81838151811061254157612540613e71565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561257d9190614b77565b94506124fb565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061265b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061266b575061266a826129d0565b5b9050919050565b61267d838383612a3a565b505050565b600081600001549050919050565b60008061269d600e612682565b6127106126aa919061493e565b90506000806126b7611825565b91509150600083600f5433858544426040516020016126db96959493929190614c42565b6040516020818303038152906040528051906020012060001c6126fe9190614ba8565b9050600080601083612710811061271857612717613e71565b5b01541461273d57601082612710811061273457612733613e71565b5b01549050612741565b8190505b60006010600187612752919061493e565b612710811061276457612763613e71565b5b0154141561279857600185612779919061493e565b601083612710811061278e5761278d613e71565b5b01819055506127d6565b60106001866127a7919061493e565b61271081106127b9576127b8613e71565b5b015460108361271081106127d0576127cf613e71565b5b01819055505b600f60008154809291906127e990613ea0565b91905055506001816127fb9190614177565b9550505050505090565b6001816000016000828254019250508190555050565b612835828260405180602001604052806000815250612b4e565b5050565b600061285a8473ffffffffffffffffffffffffffffffffffffffff16612ba9565b156129c3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612883611afa565b8786866040518563ffffffff1660e01b81526004016128a59493929190614d07565b602060405180830381600087803b1580156128bf57600080fd5b505af19250505080156128f057506040513d601f19601f820116820180604052508101906128ed9190614d68565b60015b612973573d8060008114612920576040519150601f19603f3d011682016040523d82523d6000602084013e612925565b606091505b5060008151141561296b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296290614b28565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129c8565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a45838383612bbc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a8857612a8381612c14565b612ac7565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ac657612ac58382612c5d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b0a57612b0581612dca565b612b49565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b4857612b478282612e9b565b5b5b505050565b612b588383612f1a565b612b656000848484612839565b612ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9b90614b28565b60405180910390fd5b505050565b600080823b905060008111915050919050565b612bc78383836130e8565b612bcf610eff565b15612c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0690614e07565b60405180910390fd5b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c6a84610fc8565b612c74919061493e565b9050600060086000848152602001908152602001600020549050818114612d59576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612dde919061493e565b90506000600a6000848152602001908152602001600020549050600060098381548110612e0e57612e0d613e71565b5b906000526020600020015490508060098381548110612e3057612e2f613e71565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612e7f57612e7e614e27565b5b6001900381819060005260206000200160009055905550505050565b6000612ea683610fc8565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8190614ea2565b60405180910390fd5b612f9381611c47565b15612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca90614f0e565b60405180910390fd5b612fdf60008383612672565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461302f9190614177565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b8280546130f990613a4a565b90600052602060002090601f01602090048101928261311b5760008555613162565b82601f1061313457805160ff1916838001178555613162565b82800160010185558215613162579182015b82811115613161578251825591602001919060010190613146565b5b50905061316f9190613173565b5090565b5b8082111561318c576000816000905550600101613174565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131d9816131a4565b81146131e457600080fd5b50565b6000813590506131f6816131d0565b92915050565b6000602082840312156132125761321161319a565b5b6000613220848285016131e7565b91505092915050565b60008115159050919050565b61323e81613229565b82525050565b60006020820190506132596000830184613235565b92915050565b61326881613229565b811461327357600080fd5b50565b6000813590506132858161325f565b92915050565b6000602082840312156132a1576132a061319a565b5b60006132af84828501613276565b91505092915050565b6000819050919050565b6132cb816132b8565b82525050565b60006020820190506132e660008301846132c2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561332657808201518184015260208101905061330b565b83811115613335576000848401525b50505050565b6000601f19601f8301169050919050565b6000613357826132ec565b61336181856132f7565b9350613371818560208601613308565b61337a8161333b565b840191505092915050565b6000602082019050818103600083015261339f818461334c565b905092915050565b6133b0816132b8565b81146133bb57600080fd5b50565b6000813590506133cd816133a7565b92915050565b6000602082840312156133e9576133e861319a565b5b60006133f7848285016133be565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061342b82613400565b9050919050565b61343b81613420565b82525050565b60006020820190506134566000830184613432565b92915050565b61346581613420565b811461347057600080fd5b50565b6000813590506134828161345c565b92915050565b6000806040838503121561349f5761349e61319a565b5b60006134ad85828601613473565b92505060206134be858286016133be565b9150509250929050565b6000806000606084860312156134e1576134e061319a565b5b60006134ef86828701613473565b935050602061350086828701613473565b9250506040613511868287016133be565b9150509250925092565b6000602082840312156135315761353061319a565b5b600061353f84828501613473565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61357d816132b8565b82525050565b600061358f8383613574565b60208301905092915050565b6000602082019050919050565b60006135b382613548565b6135bd8185613553565b93506135c883613564565b8060005b838110156135f95781516135e08882613583565b97506135eb8361359b565b9250506001810190506135cc565b5085935050505092915050565b6000602082019050818103600083015261362081846135a8565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61366a8261333b565b810181811067ffffffffffffffff8211171561368957613688613632565b5b80604052505050565b600061369c613190565b90506136a88282613661565b919050565b600067ffffffffffffffff8211156136c8576136c7613632565b5b6136d18261333b565b9050602081019050919050565b82818337600083830152505050565b60006137006136fb846136ad565b613692565b90508281526020810184848401111561371c5761371b61362d565b5b6137278482856136de565b509392505050565b600082601f83011261374457613743613628565b5b81356137548482602086016136ed565b91505092915050565b6000602082840312156137735761377261319a565b5b600082013567ffffffffffffffff8111156137915761379061319f565b5b61379d8482850161372f565b91505092915050565b600080604083850312156137bd576137bc61319a565b5b60006137cb85828601613473565b92505060206137dc85828601613276565b9150509250929050565b600067ffffffffffffffff82111561380157613800613632565b5b61380a8261333b565b9050602081019050919050565b600061382a613825846137e6565b613692565b9050828152602081018484840111156138465761384561362d565b5b6138518482856136de565b509392505050565b600082601f83011261386e5761386d613628565b5b813561387e848260208601613817565b91505092915050565b600080600080608085870312156138a1576138a061319a565b5b60006138af87828801613473565b94505060206138c087828801613473565b93505060406138d1878288016133be565b925050606085013567ffffffffffffffff8111156138f2576138f161319f565b5b6138fe87828801613859565b91505092959194509250565b600061391582613400565b9050919050565b6139258161390a565b82525050565b6000602082019050613940600083018461391c565b92915050565b600060408201905061395b60008301856132c2565b61396860208301846132c2565b9392505050565b600080604083850312156139865761398561319a565b5b600061399485828601613473565b92505060206139a585828601613473565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139e56020836132f7565b91506139f0826139af565b602082019050919050565b60006020820190508181036000830152613a14816139d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a6257607f821691505b60208210811415613a7657613a75613a1b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ad8602c836132f7565b9150613ae382613a7c565b604082019050919050565b60006020820190508181036000830152613b0781613acb565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b6a6021836132f7565b9150613b7582613b0e565b604082019050919050565b60006020820190508181036000830152613b9981613b5d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613bfc6038836132f7565b9150613c0782613ba0565b604082019050919050565b60006020820190508181036000830152613c2b81613bef565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613c8e6031836132f7565b9150613c9982613c32565b604082019050919050565b60006020820190508181036000830152613cbd81613c81565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cfe826132b8565b9150613d09836132b8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d4257613d41613cc4565b5b828202905092915050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613da9602b836132f7565b9150613db482613d4d565b604082019050919050565b60006020820190508181036000830152613dd881613d9c565b9050919050565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6000613e3b6030836132f7565b9150613e4682613ddf565b604082019050919050565b60006020820190508181036000830152613e6a81613e2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613eab826132b8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ede57613edd613cc4565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613f45602c836132f7565b9150613f5082613ee9565b604082019050919050565b60006020820190508181036000830152613f7481613f38565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613fd76029836132f7565b9150613fe282613f7b565b604082019050919050565b6000602082019050818103600083015261400681613fca565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614069602a836132f7565b91506140748261400d565b604082019050919050565b600060208201905081810360008301526140988161405c565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006140d5601f836132f7565b91506140e08261409f565b602082019050919050565b60006020820190508181036000830152614104816140c8565b9050919050565b7f53616c6520686173206e6f742079657420737461727465640000000000000000600082015250565b60006141416018836132f7565b915061414c8261410b565b602082019050919050565b6000602082019050818103600083015261417081614134565b9050919050565b6000614182826132b8565b915061418d836132b8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141c2576141c1613cc4565b5b828201905092915050565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b60006142036009836132f7565b915061420e826141cd565b602082019050919050565b60006020820190508181036000830152614232816141f6565b9050919050565b7f45786365656473206e756d626572000000000000000000000000000000000000600082015250565b600061426f600e836132f7565b915061427a82614239565b602082019050919050565b6000602082019050818103600083015261429e81614262565b9050919050565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b60006142db6011836132f7565b91506142e6826142a5565b602082019050919050565b6000602082019050818103600083015261430a816142ce565b9050919050565b7f43616c6c65722063616e6e6f74206265206120636f6e74726163740000000000600082015250565b6000614347601b836132f7565b915061435282614311565b602082019050919050565b600060208201905081810360008301526143768161433a565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006143b36019836132f7565b91506143be8261437d565b602082019050919050565b600060208201905081810360008301526143e2816143a6565b9050919050565b7f496e76616c696420746f6b656e2e000000000000000000000000000000000000600082015250565b600061441f600e836132f7565b915061442a826143e9565b602082019050919050565b6000602082019050818103600083015261444e81614412565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461448281613a4a565b61448c8186614455565b945060018216600081146144a757600181146144b8576144eb565b60ff198316865281860193506144eb565b6144c185614460565b60005b838110156144e3578154818901526001820191506020810190506144c4565b838801955050505b50505092915050565b60006144ff826132ec565b6145098185614455565b9350614519818560208601613308565b80840191505092915050565b60006145318285614475565b915061453d82846144f4565b91508190509392505050565b60006dffffffffffffffffffffffffffff82169050919050565b61456c81614549565b811461457757600080fd5b50565b60008151905061458981614563565b92915050565b600063ffffffff82169050919050565b6145a88161458f565b81146145b357600080fd5b50565b6000815190506145c58161459f565b92915050565b6000806000606084860312156145e4576145e361319a565b5b60006145f28682870161457a565b93505060206146038682870161457a565b9250506040614614868287016145b6565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061467a6026836132f7565b91506146858261461e565b604082019050919050565b600060208201905081810360008301526146a98161466d565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006146e66010836132f7565b91506146f1826146b0565b602082019050919050565b60006020820190508181036000830152614715816146d9565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006147526014836132f7565b915061475d8261471c565b602082019050919050565b6000602082019050818103600083015261478181614745565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006147e4602c836132f7565b91506147ef82614788565b604082019050919050565b60006020820190508181036000830152614813816147d7565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006148766029836132f7565b91506148818261481a565b604082019050919050565b600060208201905081810360008301526148a581614869565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006149086024836132f7565b9150614913826148ac565b604082019050919050565b60006020820190508181036000830152614937816148fb565b9050919050565b6000614949826132b8565b9150614954836132b8565b92508282101561496757614966613cc4565b5b828203905092915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006149a8601d836132f7565b91506149b382614972565b602082019050919050565b600060208201905081810360008301526149d78161499b565b9050919050565b600081905092915050565b50565b60006149f96000836149de565b9150614a04826149e9565b600082019050919050565b6000614a1a826149ec565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000614a80603a836132f7565b9150614a8b82614a24565b604082019050919050565b60006020820190508181036000830152614aaf81614a73565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614b126032836132f7565b9150614b1d82614ab6565b604082019050919050565b60006020820190508181036000830152614b4181614b05565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b82826132b8565b9150614b8d836132b8565b925082614b9d57614b9c614b48565b5b828204905092915050565b6000614bb3826132b8565b9150614bbe836132b8565b925082614bce57614bcd614b48565b5b828206905092915050565b6000819050919050565b614bf4614bef826132b8565b614bd9565b82525050565b60008160601b9050919050565b6000614c1282614bfa565b9050919050565b6000614c2482614c07565b9050919050565b614c3c614c3782613420565b614c19565b82525050565b6000614c4e8289614be3565b602082019150614c5e8288614c2b565b601482019150614c6e8287614be3565b602082019150614c7e8286614be3565b602082019150614c8e8285614be3565b602082019150614c9e8284614be3565b602082019150819050979650505050505050565b600081519050919050565b600082825260208201905092915050565b6000614cd982614cb2565b614ce38185614cbd565b9350614cf3818560208601613308565b614cfc8161333b565b840191505092915050565b6000608082019050614d1c6000830187613432565b614d296020830186613432565b614d3660408301856132c2565b8181036060830152614d488184614cce565b905095945050505050565b600081519050614d62816131d0565b92915050565b600060208284031215614d7e57614d7d61319a565b5b6000614d8c84828501614d53565b91505092915050565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b6000614df1602b836132f7565b9150614dfc82614d95565b604082019050919050565b60006020820190508181036000830152614e2081614de4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614e8c6020836132f7565b9150614e9782614e56565b602082019050919050565b60006020820190508181036000830152614ebb81614e7f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614ef8601c836132f7565b9150614f0382614ec2565b602082019050919050565b60006020820190508181036000830152614f2781614eeb565b905091905056fea2646970667358221220298050e817d6aaad65fb49fa0c081348f65359682f50d94ebf9ade8522a2b08864736f6c634300080900330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000022e72098480a4fbf0412c9c70c6a90162c4a000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f70757070756e6b732e73332e616d617a6f6e6177732e636f6d2f6a736f6e2f00000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000022e72098480a4fbf0412c9c70c6a90162c4a000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f70757070756e6b732e73332e616d617a6f6e6177732e636f6d2f6a736f6e2f00000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): https://puppunks.s3.amazonaws.com/json/
Arg [1] : _developer (address): 0x000022e72098480a4fbf0412c9c70c6a90162c4a
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000000022e72098480a4fbf0412c9c70c6a90162c4a
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000027
Arg [3] : 68747470733a2f2f70757070756e6b732e73332e616d617a6f6e6177732e636f
Arg [4] : 6d2f6a736f6e2f00000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
56524:5969:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62303:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61539:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56703:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56794:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19004:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20563:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20086:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31752:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21453:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60593:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31420:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21863:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40858:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61762:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31942:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60951:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60446:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38334:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18698:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18428:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5082:94;;;;;;;;;;;;;:::i;:::-;;56750:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4431:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19173:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58251:564;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20856:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57067:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57712:100;;;;;;;;;;;;;:::i;:::-;;22119:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61225:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56843:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56889:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60125:264;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;21222:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5331:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62303:187;62429:4;62449:36;62473:11;62449:23;:36::i;:::-;62442:43;;62303:187;;;:::o;61539:185::-;4662:12;:10;:12::i;:::-;4651:23;;:7;:5;:7::i;:::-;:23;;;4643:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61650:4:::1;61643:11;;:3;:11;;;:28;;;;;61666:5;61658:13;;:4;;;;;;;;;;;:13;;;61643:28;61639:66;;;61679:8;:6;:8::i;:::-;61693:7;;61639:66;61709:10;:8;:10::i;:::-;4722:1;61539:185:::0;:::o;56703:43::-;56741:5;56703:43;:::o;56794:45::-;56837:2;56794:45;:::o;19004:100::-;19058:13;19091:5;19084:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19004:100;:::o;20563:221::-;20639:7;20667:16;20675:7;20667;:16::i;:::-;20659:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20752:15;:24;20768:7;20752:24;;;;;;;;;;;;;;;;;;;;;20745:31;;20563:221;;;:::o;20086:411::-;20167:13;20183:23;20198:7;20183:14;:23::i;:::-;20167:39;;20231:5;20225:11;;:2;:11;;;;20217:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20325:5;20309:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;20334:37;20351:5;20358:12;:10;:12::i;:::-;20334:16;:37::i;:::-;20309:62;20287:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;20468:21;20477:2;20481:7;20468:8;:21::i;:::-;20156:341;20086:411;;:::o;31752:113::-;31813:7;31840:10;:17;;;;31833:24;;31752:113;:::o;21453:339::-;21648:41;21667:12;:10;:12::i;:::-;21681:7;21648:18;:41::i;:::-;21640:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21756:28;21766:4;21772:2;21776:7;21756:9;:28::i;:::-;21453:339;;;:::o;60593:92::-;60645:7;60674:6;56782:8;60666:14;;;;:::i;:::-;60659:21;;60593:92;;;:::o;31420:256::-;31517:7;31553:23;31570:5;31553:16;:23::i;:::-;31545:5;:31;31537:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;31642:12;:19;31655:5;31642:19;;;;;;;;;;;;;;;:26;31662:5;31642:26;;;;;;;;;;;;31635:33;;31420:256;;;;:::o;21863:185::-;22001:39;22018:4;22024:2;22028:7;22001:39;;;;;;;;;;;;:16;:39::i;:::-;21863:185;;;:::o;40858:245::-;40976:41;40995:12;:10;:12::i;:::-;41009:7;40976:18;:41::i;:::-;40968:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;41081:14;41087:7;41081:5;:14::i;:::-;40858:245;:::o;61762:322::-;61833:16;61858:18;61879:17;61889:6;61879:9;:17::i;:::-;61858:38;;61903:25;61945:10;61931:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61903:53;;61966:9;61961:97;61985:10;61981:1;:14;61961:97;;;62022:30;62042:6;62050:1;62022:19;:30::i;:::-;62008:8;62017:1;62008:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;61997:3;;;;;:::i;:::-;;;;61961:97;;;;62071:8;62064:15;;;;61762:322;;;:::o;31942:233::-;32017:7;32053:30;:28;:30::i;:::-;32045:5;:38;32037:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;32150:10;32161:5;32150:17;;;;;;;;:::i;:::-;;;;;;;;;;32143:24;;31942:233;;;:::o;60951:118::-;4662:12;:10;:12::i;:::-;4651:23;;:7;:5;:7::i;:::-;:23;;;4643:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61031:7:::1;61016:12;:22;;;;;;;;;;;;:::i;:::-;;61048:16;;;;;;;;;;60951:118:::0;:::o;60446:84::-;60490:7;60511:14;:12;:14::i;:::-;60504:21;;60446:84;:::o;38334:86::-;38381:4;38405:7;;;;;;;;;;;38398:14;;38334:86;:::o;18698:239::-;18770:7;18790:13;18806:7;:16;18814:7;18806:16;;;;;;;;;;;;;;;;;;;;;18790:32;;18858:1;18841:19;;:5;:19;;;;18833:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18924:5;18917:12;;;18698:239;;;:::o;18428:208::-;18500:7;18545:1;18528:19;;:5;:19;;;;18520:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18612:9;:16;18622:5;18612:16;;;;;;;;;;;;;;;;18605:23;;18428:208;;;:::o;5082:94::-;4662:12;:10;:12::i;:::-;4651:23;;:7;:5;:7::i;:::-;:23;;;4643:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5147:21:::1;5165:1;5147:9;:21::i;:::-;5082:94::o:0;56750:40::-;56782:8;56750:40;:::o;4431:87::-;4477:7;4504:6;;;;;;;;;;;4497:13;;4431:87;:::o;19173:104::-;19229:13;19262:7;19255:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19173:104;:::o;58251:564::-;7458:1;8054:7;;:19;;8046:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7458:1;8187:7;:18;;;;58316:13:::1;58332:14;:12;:14::i;:::-;58316:30;;58367:4;58359:12;;:4;;;;;;;;;;;:12;;;58351:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;56741:5;58421:6;58413:5;:14;;;;:::i;:::-;:29;;58405:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;56837:2;58469:6;:26;;58461:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;58540:13;58546:6;58540:5;:13::i;:::-;58527:9;:26;58519:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;58601:10;58588:23;;:9;:23;;;58580:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;58695:9;58690:75;58714:6;58710:1;:10;58690:75;;;58733:26;58748:10;58733:14;:26::i;:::-;58722:3;;;;;:::i;:::-;;;;58690:75;;;;58771:39;58789:9;58800;58771:17;:39::i;:::-;58311:504;7414:1:::0;8366:7;:22;;;;58251:564;:::o;20856:295::-;20971:12;:10;:12::i;:::-;20959:24;;:8;:24;;;;20951:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21071:8;21026:18;:32;21045:12;:10;:12::i;:::-;21026:32;;;;;;;;;;;;;;;:42;21059:8;21026:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;21124:8;21095:48;;21110:12;:10;:12::i;:::-;21095:48;;;21134:8;21095:48;;;;;;:::i;:::-;;;;;;;;20856:295;;:::o;57067:83::-;57108:42;57067:83;:::o;57712:100::-;4662:12;:10;:12::i;:::-;4651:23;;:7;:5;:7::i;:::-;:23;;;4643:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57764:4:::1;57757;;:11;;;;;;;;;;;;;;;;;;57773:12;57779:5;57773;:12::i;:::-;57795;;;;;;;;;;57712:100::o:0;22119:328::-;22294:41;22313:12;:10;:12::i;:::-;22327:7;22294:18;:41::i;:::-;22286:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22400:39;22414:4;22420:2;22424:7;22433:5;22400:13;:39::i;:::-;22119:328;;;;:::o;61225:269::-;61340:13;61318:8;58135:17;58143:8;58135:7;:17::i;:::-;58127:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;61447:12:::1;61461:26;61478:8;61461:16;:26::i;:::-;61430:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;61416:73;;61225:269:::0;;;;:::o;56843:42::-;;;:::o;56889:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;60125:264::-;60181:7;60190;60204:19;57108:42;60204:100;;60310:12;60324;60342:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60309:51;;;;;;;;;60373:4;60379;60365:19;;;;;;;60125:264;;:::o;21222:164::-;21319:4;21343:18;:25;21362:5;21343:25;;;;;;;;;;;;;;;:35;21369:8;21343:35;;;;;;;;;;;;;;;;;;;;;;;;;21336:42;;21222:164;;;;:::o;5331:192::-;4662:12;:10;:12::i;:::-;4651:23;;:7;:5;:7::i;:::-;:23;;;4643:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5440:1:::1;5420:22;;:8;:22;;;;5412:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5496:19;5506:8;5496:9;:19::i;:::-;5331:192:::0;:::o;31112:224::-;31214:4;31253:35;31238:50;;;:11;:50;;;;:90;;;;31292:36;31316:11;31292:23;:36::i;:::-;31238:90;31231:97;;31112:224;;;:::o;672:98::-;725:7;752:10;745:17;;672:98;:::o;39134:118::-;38660:8;:6;:8::i;:::-;38659:9;38651:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;39204:4:::1;39194:7;;:14;;;;;;;;;;;;;;;;;;39224:20;39231:12;:10;:12::i;:::-;39224:20;;;;;;:::i;:::-;;;;;;;;39134:118::o:0;39393:120::-;38937:8;:6;:8::i;:::-;38929:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;39462:5:::1;39452:7;;:15;;;;;;;;;;;;;;;;;;39483:22;39492:12;:10;:12::i;:::-;39483:22;;;;;;:::i;:::-;;;;;;;;39393:120::o:0;23957:127::-;24022:4;24074:1;24046:30;;:7;:16;24054:7;24046:16;;;;;;;;;;;;;;;;;;;;;:30;;;;24039:37;;23957:127;;;:::o;27939:174::-;28041:2;28014:15;:24;28030:7;28014:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28097:7;28093:2;28059:46;;28068:23;28083:7;28068:14;:23::i;:::-;28059:46;;;;;;;;;;;;27939:174;;:::o;24251:348::-;24344:4;24369:16;24377:7;24369;:16::i;:::-;24361:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24445:13;24461:23;24476:7;24461:14;:23::i;:::-;24445:39;;24514:5;24503:16;;:7;:16;;;:51;;;;24547:7;24523:31;;:20;24535:7;24523:11;:20::i;:::-;:31;;;24503:51;:87;;;;24558:32;24575:5;24582:7;24558:16;:32::i;:::-;24503:87;24495:96;;;24251:348;;;;:::o;27243:578::-;27402:4;27375:31;;:23;27390:7;27375:14;:23::i;:::-;:31;;;27367:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27485:1;27471:16;;:2;:16;;;;27463:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27541:39;27562:4;27568:2;27572:7;27541:20;:39::i;:::-;27645:29;27662:1;27666:7;27645:8;:29::i;:::-;27706:1;27687:9;:15;27697:4;27687:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;27735:1;27718:9;:13;27728:2;27718:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27766:2;27747:7;:16;27755:7;27747:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27805:7;27801:2;27786:27;;27795:4;27786:27;;;;;;;;;;;;27243:578;;;:::o;26546:360::-;26606:13;26622:23;26637:7;26622:14;:23::i;:::-;26606:39;;26658:48;26679:5;26694:1;26698:7;26658:20;:48::i;:::-;26747:29;26764:1;26768:7;26747:8;:29::i;:::-;26809:1;26789:9;:16;26799:5;26789:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;26828:7;:16;26836:7;26828:16;;;;;;;;;;;;26821:23;;;;;;;;;;;26890:7;26886:1;26862:36;;26871:5;26862:36;;;;;;;;;;;;26595:311;26546:360;:::o;60777:98::-;60824:7;60845:25;:15;:23;:25::i;:::-;60838:32;;60777:98;:::o;5531:173::-;5587:16;5606:6;;;;;;;;;;;5587:25;;5632:8;5623:6;;:17;;;;;;;;;;;;;;;;;;5687:8;5656:40;;5677:8;5656:40;;;;;;;;;;;;5576:128;5531:173;:::o;58820:170::-;58870:10;58883:14;:12;:14::i;:::-;58870:27;;58902;:15;:25;:27::i;:::-;58936:18;58946:3;58951:2;58936:9;:18::i;:::-;58982:2;58964:21;;;;;;;;;;58865:125;58820:170;:::o;47198:317::-;47313:6;47288:21;:31;;47280:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47367:12;47385:9;:14;;47407:6;47385:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47366:52;;;47437:7;47429:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;47269:246;47198:317;;:::o;23329:315::-;23486:28;23496:4;23502:2;23506:7;23486:9;:28::i;:::-;23533:48;23556:4;23562:2;23566:7;23575:5;23533:22;:48::i;:::-;23525:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23329:315;;;;:::o;43349:723::-;43405:13;43635:1;43626:5;:10;43622:53;;;43653:10;;;;;;;;;;;;;;;;;;;;;43622:53;43685:12;43700:5;43685:20;;43716:14;43741:78;43756:1;43748:4;:9;43741:78;;43774:8;;;;;:::i;:::-;;;;43805:2;43797:10;;;;;:::i;:::-;;;43741:78;;;43829:19;43861:6;43851:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43829:39;;43879:154;43895:1;43886:5;:10;43879:154;;43923:1;43913:11;;;;;:::i;:::-;;;43990:2;43982:5;:10;;;;:::i;:::-;43969:2;:24;;;;:::i;:::-;43956:39;;43939:6;43946;43939:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;44019:2;44010:11;;;;;:::i;:::-;;;43879:154;;;44057:6;44043:21;;;;;43349:723;;;;:::o;18059:305::-;18161:4;18213:25;18198:40;;;:11;:40;;;;:105;;;;18270:33;18255:48;;;:11;:48;;;;18198:105;:158;;;;18320:36;18344:11;18320:23;:36::i;:::-;18198:158;18178:178;;18059:305;;;:::o;62089:209::-;62248:45;62275:4;62281:2;62285:7;62248:26;:45::i;:::-;62089:209;;;:::o;54990:114::-;55055:7;55082;:14;;;55075:21;;54990:114;;;:::o;59071:966::-;59113:7;59127:17;59161:25;:15;:23;:25::i;:::-;56741:5;59147:39;;;;:::i;:::-;59127:59;;59278:16;59296;59316:25;:23;:25::i;:::-;59277:64;;;;59346:13;59538:9;59415:5;;59428:10;59446:8;59462;59478:16;59502:15;59391:133;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59375:155;;;;;;59362:173;;:185;;;;:::i;:::-;59346:201;;59552:13;59596:1;59578:7;59586:5;59578:14;;;;;;;:::i;:::-;;;;:19;59574:90;;59613:7;59621:5;59613:14;;;;;;;:::i;:::-;;;;59605:22;;59574:90;;;59653:5;59645:13;;59574:90;59743:1;59717:7;59737:1;59725:9;:13;;;;:::i;:::-;59717:22;;;;;;;:::i;:::-;;;;:27;59713:235;;;59836:1;59824:9;:13;;;;:::i;:::-;59807:7;59815:5;59807:14;;;;;;;:::i;:::-;;;:30;;;;59713:235;;;59920:7;59940:1;59928:9;:13;;;;:::i;:::-;59920:22;;;;;;;:::i;:::-;;;;59903:7;59911:5;59903:14;;;;;;;:::i;:::-;;;:39;;;;59713:235;59952:5;;:7;;;;;;;;;:::i;:::-;;;;;;60031:1;60023:5;:9;;;;:::i;:::-;60016:16;;;;;;;59071:966;:::o;55112:127::-;55219:1;55201:7;:14;;;:19;;;;;;;;;;;55112:127;:::o;24941:110::-;25017:26;25027:2;25031:7;25017:26;;;;;;;;;;;;:9;:26::i;:::-;24941:110;;:::o;28678:799::-;28833:4;28854:15;:2;:13;;;:15::i;:::-;28850:620;;;28906:2;28890:36;;;28927:12;:10;:12::i;:::-;28941:4;28947:7;28956:5;28890:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28886:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29149:1;29132:6;:13;:18;29128:272;;;29175:60;;;;;;;;;;:::i;:::-;;;;;;;;29128:272;29350:6;29344:13;29335:6;29331:2;29327:15;29320:38;28886:529;29023:41;;;29013:51;;;:6;:51;;;;29006:58;;;;;28850:620;29454:4;29447:11;;28678:799;;;;;;;:::o;15844:157::-;15929:4;15968:25;15953:40;;;:11;:40;;;;15946:47;;15844:157;;;:::o;32788:589::-;32932:45;32959:4;32965:2;32969:7;32932:26;:45::i;:::-;33010:1;32994:18;;:4;:18;;;32990:187;;;33029:40;33061:7;33029:31;:40::i;:::-;32990:187;;;33099:2;33091:10;;:4;:10;;;33087:90;;33118:47;33151:4;33157:7;33118:32;:47::i;:::-;33087:90;32990:187;33205:1;33191:16;;:2;:16;;;33187:183;;;33224:45;33261:7;33224:36;:45::i;:::-;33187:183;;;33297:4;33291:10;;:2;:10;;;33287:83;;33318:40;33346:2;33350:7;33318:27;:40::i;:::-;33287:83;33187:183;32788:589;;;:::o;25278:321::-;25408:18;25414:2;25418:7;25408:5;:18::i;:::-;25459:54;25490:1;25494:2;25498:7;25507:5;25459:22;:54::i;:::-;25437:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;25278:321;;;:::o;45876:387::-;45936:4;46144:12;46211:7;46199:20;46191:28;;46254:1;46247:4;:8;46240:15;;;45876:387;;;:::o;40119:275::-;40263:45;40290:4;40296:2;40300:7;40263:26;:45::i;:::-;40330:8;:6;:8::i;:::-;40329:9;40321:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40119:275;;;:::o;34100:164::-;34204:10;:17;;;;34177:15;:24;34193:7;34177:24;;;;;;;;;;;:44;;;;34232:10;34248:7;34232:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34100:164;:::o;34891:988::-;35157:22;35207:1;35182:22;35199:4;35182:16;:22::i;:::-;:26;;;;:::i;:::-;35157:51;;35219:18;35240:17;:26;35258:7;35240:26;;;;;;;;;;;;35219:47;;35387:14;35373:10;:28;35369:328;;35418:19;35440:12;:18;35453:4;35440:18;;;;;;;;;;;;;;;:34;35459:14;35440:34;;;;;;;;;;;;35418:56;;35524:11;35491:12;:18;35504:4;35491:18;;;;;;;;;;;;;;;:30;35510:10;35491:30;;;;;;;;;;;:44;;;;35641:10;35608:17;:30;35626:11;35608:30;;;;;;;;;;;:43;;;;35403:294;35369:328;35793:17;:26;35811:7;35793:26;;;;;;;;;;;35786:33;;;35837:12;:18;35850:4;35837:18;;;;;;;;;;;;;;;:34;35856:14;35837:34;;;;;;;;;;;35830:41;;;34972:907;;34891:988;;:::o;36174:1079::-;36427:22;36472:1;36452:10;:17;;;;:21;;;;:::i;:::-;36427:46;;36484:18;36505:15;:24;36521:7;36505:24;;;;;;;;;;;;36484:45;;36856:19;36878:10;36889:14;36878:26;;;;;;;;:::i;:::-;;;;;;;;;;36856:48;;36942:11;36917:10;36928;36917:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;37053:10;37022:15;:28;37038:11;37022:28;;;;;;;;;;;:41;;;;37194:15;:24;37210:7;37194:24;;;;;;;;;;;37187:31;;;37229:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36245:1008;;;36174:1079;:::o;33678:221::-;33763:14;33780:20;33797:2;33780:16;:20::i;:::-;33763:37;;33838:7;33811:12;:16;33824:2;33811:16;;;;;;;;;;;;;;;:24;33828:6;33811:24;;;;;;;;;;;:34;;;;33885:6;33856:17;:26;33874:7;33856:26;;;;;;;;;;;:35;;;;33752:147;33678:221;;:::o;25935:382::-;26029:1;26015:16;;:2;:16;;;;26007:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26088:16;26096:7;26088;:16::i;:::-;26087:17;26079:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26150:45;26179:1;26183:2;26187:7;26150:20;:45::i;:::-;26225:1;26208:9;:13;26218:2;26208:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;26256:2;26237:7;:16;26245:7;26237:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26301:7;26297:2;26276:33;;26293:1;26276:33;;;;;;;;;;;;25935:382;;:::o;30049:126::-;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:77::-;2145:7;2174:5;2163:16;;2108:77;;;:::o;2191:118::-;2278:24;2296:5;2278:24;:::i;:::-;2273:3;2266:37;2191:118;;:::o;2315:222::-;2408:4;2446:2;2435:9;2431:18;2423:26;;2459:71;2527:1;2516:9;2512:17;2503:6;2459:71;:::i;:::-;2315:222;;;;:::o;2543:99::-;2595:6;2629:5;2623:12;2613:22;;2543:99;;;:::o;2648:169::-;2732:11;2766:6;2761:3;2754:19;2806:4;2801:3;2797:14;2782:29;;2648:169;;;;:::o;2823:307::-;2891:1;2901:113;2915:6;2912:1;2909:13;2901:113;;;3000:1;2995:3;2991:11;2985:18;2981:1;2976:3;2972:11;2965:39;2937:2;2934:1;2930:10;2925:15;;2901:113;;;3032:6;3029:1;3026:13;3023:101;;;3112:1;3103:6;3098:3;3094:16;3087:27;3023:101;2872:258;2823:307;;;:::o;3136:102::-;3177:6;3228:2;3224:7;3219:2;3212:5;3208:14;3204:28;3194:38;;3136:102;;;:::o;3244:364::-;3332:3;3360:39;3393:5;3360:39;:::i;:::-;3415:71;3479:6;3474:3;3415:71;:::i;:::-;3408:78;;3495:52;3540:6;3535:3;3528:4;3521:5;3517:16;3495:52;:::i;:::-;3572:29;3594:6;3572:29;:::i;:::-;3567:3;3563:39;3556:46;;3336:272;3244:364;;;;:::o;3614:313::-;3727:4;3765:2;3754:9;3750:18;3742:26;;3814:9;3808:4;3804:20;3800:1;3789:9;3785:17;3778:47;3842:78;3915:4;3906:6;3842:78;:::i;:::-;3834:86;;3614:313;;;;:::o;3933:122::-;4006:24;4024:5;4006:24;:::i;:::-;3999:5;3996:35;3986:63;;4045:1;4042;4035:12;3986:63;3933:122;:::o;4061:139::-;4107:5;4145:6;4132:20;4123:29;;4161:33;4188:5;4161:33;:::i;:::-;4061:139;;;;:::o;4206:329::-;4265:6;4314:2;4302:9;4293:7;4289:23;4285:32;4282:119;;;4320:79;;:::i;:::-;4282:119;4440:1;4465:53;4510:7;4501:6;4490:9;4486:22;4465:53;:::i;:::-;4455:63;;4411:117;4206:329;;;;:::o;4541:126::-;4578:7;4618:42;4611:5;4607:54;4596:65;;4541:126;;;:::o;4673:96::-;4710:7;4739:24;4757:5;4739:24;:::i;:::-;4728:35;;4673:96;;;:::o;4775:118::-;4862:24;4880:5;4862:24;:::i;:::-;4857:3;4850:37;4775:118;;:::o;4899:222::-;4992:4;5030:2;5019:9;5015:18;5007:26;;5043:71;5111:1;5100:9;5096:17;5087:6;5043:71;:::i;:::-;4899:222;;;;:::o;5127:122::-;5200:24;5218:5;5200:24;:::i;:::-;5193:5;5190:35;5180:63;;5239:1;5236;5229:12;5180:63;5127:122;:::o;5255:139::-;5301:5;5339:6;5326:20;5317:29;;5355:33;5382:5;5355:33;:::i;:::-;5255:139;;;;:::o;5400:474::-;5468:6;5476;5525:2;5513:9;5504:7;5500:23;5496:32;5493:119;;;5531:79;;:::i;:::-;5493:119;5651:1;5676:53;5721:7;5712:6;5701:9;5697:22;5676:53;:::i;:::-;5666:63;;5622:117;5778:2;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5749:118;5400:474;;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:329::-;6564:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:119;;;6619:79;;:::i;:::-;6581:119;6739:1;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6710:117;6505:329;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:104::-;14028:7;14057:24;14075:5;14057:24;:::i;:::-;14046:35;;13983:104;;;:::o;14093:142::-;14196:32;14222:5;14196:32;:::i;:::-;14191:3;14184:45;14093:142;;:::o;14241:254::-;14350:4;14388:2;14377:9;14373:18;14365:26;;14401:87;14485:1;14474:9;14470:17;14461:6;14401:87;:::i;:::-;14241:254;;;;:::o;14501:332::-;14622:4;14660:2;14649:9;14645:18;14637:26;;14673:71;14741:1;14730:9;14726:17;14717:6;14673:71;:::i;:::-;14754:72;14822:2;14811:9;14807:18;14798:6;14754:72;:::i;:::-;14501:332;;;;;:::o;14839:474::-;14907:6;14915;14964:2;14952:9;14943:7;14939:23;14935:32;14932:119;;;14970:79;;:::i;:::-;14932:119;15090:1;15115:53;15160:7;15151:6;15140:9;15136:22;15115:53;:::i;:::-;15105:63;;15061:117;15217:2;15243:53;15288:7;15279:6;15268:9;15264:22;15243:53;:::i;:::-;15233:63;;15188:118;14839:474;;;;;:::o;15319:182::-;15459:34;15455:1;15447:6;15443:14;15436:58;15319:182;:::o;15507:366::-;15649:3;15670:67;15734:2;15729:3;15670:67;:::i;:::-;15663:74;;15746:93;15835:3;15746:93;:::i;:::-;15864:2;15859:3;15855:12;15848:19;;15507:366;;;:::o;15879:419::-;16045:4;16083:2;16072:9;16068:18;16060:26;;16132:9;16126:4;16122:20;16118:1;16107:9;16103:17;16096:47;16160:131;16286:4;16160:131;:::i;:::-;16152:139;;15879:419;;;:::o;16304:180::-;16352:77;16349:1;16342:88;16449:4;16446:1;16439:15;16473:4;16470:1;16463:15;16490:320;16534:6;16571:1;16565:4;16561:12;16551:22;;16618:1;16612:4;16608:12;16639:18;16629:81;;16695:4;16687:6;16683:17;16673:27;;16629:81;16757:2;16749:6;16746:14;16726:18;16723:38;16720:84;;;16776:18;;:::i;:::-;16720:84;16541:269;16490:320;;;:::o;16816:231::-;16956:34;16952:1;16944:6;16940:14;16933:58;17025:14;17020:2;17012:6;17008:15;17001:39;16816:231;:::o;17053:366::-;17195:3;17216:67;17280:2;17275:3;17216:67;:::i;:::-;17209:74;;17292:93;17381:3;17292:93;:::i;:::-;17410:2;17405:3;17401:12;17394:19;;17053:366;;;:::o;17425:419::-;17591:4;17629:2;17618:9;17614:18;17606:26;;17678:9;17672:4;17668:20;17664:1;17653:9;17649:17;17642:47;17706:131;17832:4;17706:131;:::i;:::-;17698:139;;17425:419;;;:::o;17850:220::-;17990:34;17986:1;17978:6;17974:14;17967:58;18059:3;18054:2;18046:6;18042:15;18035:28;17850:220;:::o;18076:366::-;18218:3;18239:67;18303:2;18298:3;18239:67;:::i;:::-;18232:74;;18315:93;18404:3;18315:93;:::i;:::-;18433:2;18428:3;18424:12;18417:19;;18076:366;;;:::o;18448:419::-;18614:4;18652:2;18641:9;18637:18;18629:26;;18701:9;18695:4;18691:20;18687:1;18676:9;18672:17;18665:47;18729:131;18855:4;18729:131;:::i;:::-;18721:139;;18448:419;;;:::o;18873:243::-;19013:34;19009:1;19001:6;18997:14;18990:58;19082:26;19077:2;19069:6;19065:15;19058:51;18873:243;:::o;19122:366::-;19264:3;19285:67;19349:2;19344:3;19285:67;:::i;:::-;19278:74;;19361:93;19450:3;19361:93;:::i;:::-;19479:2;19474:3;19470:12;19463:19;;19122:366;;;:::o;19494:419::-;19660:4;19698:2;19687:9;19683:18;19675:26;;19747:9;19741:4;19737:20;19733:1;19722:9;19718:17;19711:47;19775:131;19901:4;19775:131;:::i;:::-;19767:139;;19494:419;;;:::o;19919:236::-;20059:34;20055:1;20047:6;20043:14;20036:58;20128:19;20123:2;20115:6;20111:15;20104:44;19919:236;:::o;20161:366::-;20303:3;20324:67;20388:2;20383:3;20324:67;:::i;:::-;20317:74;;20400:93;20489:3;20400:93;:::i;:::-;20518:2;20513:3;20509:12;20502:19;;20161:366;;;:::o;20533:419::-;20699:4;20737:2;20726:9;20722:18;20714:26;;20786:9;20780:4;20776:20;20772:1;20761:9;20757:17;20750:47;20814:131;20940:4;20814:131;:::i;:::-;20806:139;;20533:419;;;:::o;20958:180::-;21006:77;21003:1;20996:88;21103:4;21100:1;21093:15;21127:4;21124:1;21117:15;21144:348;21184:7;21207:20;21225:1;21207:20;:::i;:::-;21202:25;;21241:20;21259:1;21241:20;:::i;:::-;21236:25;;21429:1;21361:66;21357:74;21354:1;21351:81;21346:1;21339:9;21332:17;21328:105;21325:131;;;21436:18;;:::i;:::-;21325:131;21484:1;21481;21477:9;21466:20;;21144:348;;;;:::o;21498:230::-;21638:34;21634:1;21626:6;21622:14;21615:58;21707:13;21702:2;21694:6;21690:15;21683:38;21498:230;:::o;21734:366::-;21876:3;21897:67;21961:2;21956:3;21897:67;:::i;:::-;21890:74;;21973:93;22062:3;21973:93;:::i;:::-;22091:2;22086:3;22082:12;22075:19;;21734:366;;;:::o;22106:419::-;22272:4;22310:2;22299:9;22295:18;22287:26;;22359:9;22353:4;22349:20;22345:1;22334:9;22330:17;22323:47;22387:131;22513:4;22387:131;:::i;:::-;22379:139;;22106:419;;;:::o;22531:235::-;22671:34;22667:1;22659:6;22655:14;22648:58;22740:18;22735:2;22727:6;22723:15;22716:43;22531:235;:::o;22772:366::-;22914:3;22935:67;22999:2;22994:3;22935:67;:::i;:::-;22928:74;;23011:93;23100:3;23011:93;:::i;:::-;23129:2;23124:3;23120:12;23113:19;;22772:366;;;:::o;23144:419::-;23310:4;23348:2;23337:9;23333:18;23325:26;;23397:9;23391:4;23387:20;23383:1;23372:9;23368:17;23361:47;23425:131;23551:4;23425:131;:::i;:::-;23417:139;;23144:419;;;:::o;23569:180::-;23617:77;23614:1;23607:88;23714:4;23711:1;23704:15;23738:4;23735:1;23728:15;23755:233;23794:3;23817:24;23835:5;23817:24;:::i;:::-;23808:33;;23863:66;23856:5;23853:77;23850:103;;;23933:18;;:::i;:::-;23850:103;23980:1;23973:5;23969:13;23962:20;;23755:233;;;:::o;23994:231::-;24134:34;24130:1;24122:6;24118:14;24111:58;24203:14;24198:2;24190:6;24186:15;24179:39;23994:231;:::o;24231:366::-;24373:3;24394:67;24458:2;24453:3;24394:67;:::i;:::-;24387:74;;24470:93;24559:3;24470:93;:::i;:::-;24588:2;24583:3;24579:12;24572:19;;24231:366;;;:::o;24603:419::-;24769:4;24807:2;24796:9;24792:18;24784:26;;24856:9;24850:4;24846:20;24842:1;24831:9;24827:17;24820:47;24884:131;25010:4;24884:131;:::i;:::-;24876:139;;24603:419;;;:::o;25028:228::-;25168:34;25164:1;25156:6;25152:14;25145:58;25237:11;25232:2;25224:6;25220:15;25213:36;25028:228;:::o;25262:366::-;25404:3;25425:67;25489:2;25484:3;25425:67;:::i;:::-;25418:74;;25501:93;25590:3;25501:93;:::i;:::-;25619:2;25614:3;25610:12;25603:19;;25262:366;;;:::o;25634:419::-;25800:4;25838:2;25827:9;25823:18;25815:26;;25887:9;25881:4;25877:20;25873:1;25862:9;25858:17;25851:47;25915:131;26041:4;25915:131;:::i;:::-;25907:139;;25634:419;;;:::o;26059:229::-;26199:34;26195:1;26187:6;26183:14;26176:58;26268:12;26263:2;26255:6;26251:15;26244:37;26059:229;:::o;26294:366::-;26436:3;26457:67;26521:2;26516:3;26457:67;:::i;:::-;26450:74;;26533:93;26622:3;26533:93;:::i;:::-;26651:2;26646:3;26642:12;26635:19;;26294:366;;;:::o;26666:419::-;26832:4;26870:2;26859:9;26855:18;26847:26;;26919:9;26913:4;26909:20;26905:1;26894:9;26890:17;26883:47;26947:131;27073:4;26947:131;:::i;:::-;26939:139;;26666:419;;;:::o;27091:181::-;27231:33;27227:1;27219:6;27215:14;27208:57;27091:181;:::o;27278:366::-;27420:3;27441:67;27505:2;27500:3;27441:67;:::i;:::-;27434:74;;27517:93;27606:3;27517:93;:::i;:::-;27635:2;27630:3;27626:12;27619:19;;27278:366;;;:::o;27650:419::-;27816:4;27854:2;27843:9;27839:18;27831:26;;27903:9;27897:4;27893:20;27889:1;27878:9;27874:17;27867:47;27931:131;28057:4;27931:131;:::i;:::-;27923:139;;27650:419;;;:::o;28075:174::-;28215:26;28211:1;28203:6;28199:14;28192:50;28075:174;:::o;28255:366::-;28397:3;28418:67;28482:2;28477:3;28418:67;:::i;:::-;28411:74;;28494:93;28583:3;28494:93;:::i;:::-;28612:2;28607:3;28603:12;28596:19;;28255:366;;;:::o;28627:419::-;28793:4;28831:2;28820:9;28816:18;28808:26;;28880:9;28874:4;28870:20;28866:1;28855:9;28851:17;28844:47;28908:131;29034:4;28908:131;:::i;:::-;28900:139;;28627:419;;;:::o;29052:305::-;29092:3;29111:20;29129:1;29111:20;:::i;:::-;29106:25;;29145:20;29163:1;29145:20;:::i;:::-;29140:25;;29299:1;29231:66;29227:74;29224:1;29221:81;29218:107;;;29305:18;;:::i;:::-;29218:107;29349:1;29346;29342:9;29335:16;;29052:305;;;;:::o;29363:159::-;29503:11;29499:1;29491:6;29487:14;29480:35;29363:159;:::o;29528:365::-;29670:3;29691:66;29755:1;29750:3;29691:66;:::i;:::-;29684:73;;29766:93;29855:3;29766:93;:::i;:::-;29884:2;29879:3;29875:12;29868:19;;29528:365;;;:::o;29899:419::-;30065:4;30103:2;30092:9;30088:18;30080:26;;30152:9;30146:4;30142:20;30138:1;30127:9;30123:17;30116:47;30180:131;30306:4;30180:131;:::i;:::-;30172:139;;29899:419;;;:::o;30324:164::-;30464:16;30460:1;30452:6;30448:14;30441:40;30324:164;:::o;30494:366::-;30636:3;30657:67;30721:2;30716:3;30657:67;:::i;:::-;30650:74;;30733:93;30822:3;30733:93;:::i;:::-;30851:2;30846:3;30842:12;30835:19;;30494:366;;;:::o;30866:419::-;31032:4;31070:2;31059:9;31055:18;31047:26;;31119:9;31113:4;31109:20;31105:1;31094:9;31090:17;31083:47;31147:131;31273:4;31147:131;:::i;:::-;31139:139;;30866:419;;;:::o;31291:167::-;31431:19;31427:1;31419:6;31415:14;31408:43;31291:167;:::o;31464:366::-;31606:3;31627:67;31691:2;31686:3;31627:67;:::i;:::-;31620:74;;31703:93;31792:3;31703:93;:::i;:::-;31821:2;31816:3;31812:12;31805:19;;31464:366;;;:::o;31836:419::-;32002:4;32040:2;32029:9;32025:18;32017:26;;32089:9;32083:4;32079:20;32075:1;32064:9;32060:17;32053:47;32117:131;32243:4;32117:131;:::i;:::-;32109:139;;31836:419;;;:::o;32261:177::-;32401:29;32397:1;32389:6;32385:14;32378:53;32261:177;:::o;32444:366::-;32586:3;32607:67;32671:2;32666:3;32607:67;:::i;:::-;32600:74;;32683:93;32772:3;32683:93;:::i;:::-;32801:2;32796:3;32792:12;32785:19;;32444:366;;;:::o;32816:419::-;32982:4;33020:2;33009:9;33005:18;32997:26;;33069:9;33063:4;33059:20;33055:1;33044:9;33040:17;33033:47;33097:131;33223:4;33097:131;:::i;:::-;33089:139;;32816:419;;;:::o;33241:175::-;33381:27;33377:1;33369:6;33365:14;33358:51;33241:175;:::o;33422:366::-;33564:3;33585:67;33649:2;33644:3;33585:67;:::i;:::-;33578:74;;33661:93;33750:3;33661:93;:::i;:::-;33779:2;33774:3;33770:12;33763:19;;33422:366;;;:::o;33794:419::-;33960:4;33998:2;33987:9;33983:18;33975:26;;34047:9;34041:4;34037:20;34033:1;34022:9;34018:17;34011:47;34075:131;34201:4;34075:131;:::i;:::-;34067:139;;33794:419;;;:::o;34219:164::-;34359:16;34355:1;34347:6;34343:14;34336:40;34219:164;:::o;34389:366::-;34531:3;34552:67;34616:2;34611:3;34552:67;:::i;:::-;34545:74;;34628:93;34717:3;34628:93;:::i;:::-;34746:2;34741:3;34737:12;34730:19;;34389:366;;;:::o;34761:419::-;34927:4;34965:2;34954:9;34950:18;34942:26;;35014:9;35008:4;35004:20;35000:1;34989:9;34985:17;34978:47;35042:131;35168:4;35042:131;:::i;:::-;35034:139;;34761:419;;;:::o;35186:148::-;35288:11;35325:3;35310:18;;35186:148;;;;:::o;35340:141::-;35389:4;35412:3;35404:11;;35435:3;35432:1;35425:14;35469:4;35466:1;35456:18;35448:26;;35340:141;;;:::o;35511:845::-;35614:3;35651:5;35645:12;35680:36;35706:9;35680:36;:::i;:::-;35732:89;35814:6;35809:3;35732:89;:::i;:::-;35725:96;;35852:1;35841:9;35837:17;35868:1;35863:137;;;;36014:1;36009:341;;;;35830:520;;35863:137;35947:4;35943:9;35932;35928:25;35923:3;35916:38;35983:6;35978:3;35974:16;35967:23;;35863:137;;36009:341;36076:38;36108:5;36076:38;:::i;:::-;36136:1;36150:154;36164:6;36161:1;36158:13;36150:154;;;36238:7;36232:14;36228:1;36223:3;36219:11;36212:35;36288:1;36279:7;36275:15;36264:26;;36186:4;36183:1;36179:12;36174:17;;36150:154;;;36333:6;36328:3;36324:16;36317:23;;36016:334;;35830:520;;35618:738;;35511:845;;;;:::o;36362:377::-;36468:3;36496:39;36529:5;36496:39;:::i;:::-;36551:89;36633:6;36628:3;36551:89;:::i;:::-;36544:96;;36649:52;36694:6;36689:3;36682:4;36675:5;36671:16;36649:52;:::i;:::-;36726:6;36721:3;36717:16;36710:23;;36472:267;36362:377;;;;:::o;36745:429::-;36922:3;36944:92;37032:3;37023:6;36944:92;:::i;:::-;36937:99;;37053:95;37144:3;37135:6;37053:95;:::i;:::-;37046:102;;37165:3;37158:10;;36745:429;;;;;:::o;37180:114::-;37217:7;37257:30;37250:5;37246:42;37235:53;;37180:114;;;:::o;37300:122::-;37373:24;37391:5;37373:24;:::i;:::-;37366:5;37363:35;37353:63;;37412:1;37409;37402:12;37353:63;37300:122;:::o;37428:143::-;37485:5;37516:6;37510:13;37501:22;;37532:33;37559:5;37532:33;:::i;:::-;37428:143;;;;:::o;37577:93::-;37613:7;37653:10;37646:5;37642:22;37631:33;;37577:93;;;:::o;37676:120::-;37748:23;37765:5;37748:23;:::i;:::-;37741:5;37738:34;37728:62;;37786:1;37783;37776:12;37728:62;37676:120;:::o;37802:141::-;37858:5;37889:6;37883:13;37874:22;;37905:32;37931:5;37905:32;:::i;:::-;37802:141;;;;:::o;37949:661::-;38036:6;38044;38052;38101:2;38089:9;38080:7;38076:23;38072:32;38069:119;;;38107:79;;:::i;:::-;38069:119;38227:1;38252:64;38308:7;38299:6;38288:9;38284:22;38252:64;:::i;:::-;38242:74;;38198:128;38365:2;38391:64;38447:7;38438:6;38427:9;38423:22;38391:64;:::i;:::-;38381:74;;38336:129;38504:2;38530:63;38585:7;38576:6;38565:9;38561:22;38530:63;:::i;:::-;38520:73;;38475:128;37949:661;;;;;:::o;38616:225::-;38756:34;38752:1;38744:6;38740:14;38733:58;38825:8;38820:2;38812:6;38808:15;38801:33;38616:225;:::o;38847:366::-;38989:3;39010:67;39074:2;39069:3;39010:67;:::i;:::-;39003:74;;39086:93;39175:3;39086:93;:::i;:::-;39204:2;39199:3;39195:12;39188:19;;38847:366;;;:::o;39219:419::-;39385:4;39423:2;39412:9;39408:18;39400:26;;39472:9;39466:4;39462:20;39458:1;39447:9;39443:17;39436:47;39500:131;39626:4;39500:131;:::i;:::-;39492:139;;39219:419;;;:::o;39644:166::-;39784:18;39780:1;39772:6;39768:14;39761:42;39644:166;:::o;39816:366::-;39958:3;39979:67;40043:2;40038:3;39979:67;:::i;:::-;39972:74;;40055:93;40144:3;40055:93;:::i;:::-;40173:2;40168:3;40164:12;40157:19;;39816:366;;;:::o;40188:419::-;40354:4;40392:2;40381:9;40377:18;40369:26;;40441:9;40435:4;40431:20;40427:1;40416:9;40412:17;40405:47;40469:131;40595:4;40469:131;:::i;:::-;40461:139;;40188:419;;;:::o;40613:170::-;40753:22;40749:1;40741:6;40737:14;40730:46;40613:170;:::o;40789:366::-;40931:3;40952:67;41016:2;41011:3;40952:67;:::i;:::-;40945:74;;41028:93;41117:3;41028:93;:::i;:::-;41146:2;41141:3;41137:12;41130:19;;40789:366;;;:::o;41161:419::-;41327:4;41365:2;41354:9;41350:18;41342:26;;41414:9;41408:4;41404:20;41400:1;41389:9;41385:17;41378:47;41442:131;41568:4;41442:131;:::i;:::-;41434:139;;41161:419;;;:::o;41586:231::-;41726:34;41722:1;41714:6;41710:14;41703:58;41795:14;41790:2;41782:6;41778:15;41771:39;41586:231;:::o;41823:366::-;41965:3;41986:67;42050:2;42045:3;41986:67;:::i;:::-;41979:74;;42062:93;42151:3;42062:93;:::i;:::-;42180:2;42175:3;42171:12;42164:19;;41823:366;;;:::o;42195:419::-;42361:4;42399:2;42388:9;42384:18;42376:26;;42448:9;42442:4;42438:20;42434:1;42423:9;42419:17;42412:47;42476:131;42602:4;42476:131;:::i;:::-;42468:139;;42195:419;;;:::o;42620:228::-;42760:34;42756:1;42748:6;42744:14;42737:58;42829:11;42824:2;42816:6;42812:15;42805:36;42620:228;:::o;42854:366::-;42996:3;43017:67;43081:2;43076:3;43017:67;:::i;:::-;43010:74;;43093:93;43182:3;43093:93;:::i;:::-;43211:2;43206:3;43202:12;43195:19;;42854:366;;;:::o;43226:419::-;43392:4;43430:2;43419:9;43415:18;43407:26;;43479:9;43473:4;43469:20;43465:1;43454:9;43450:17;43443:47;43507:131;43633:4;43507:131;:::i;:::-;43499:139;;43226:419;;;:::o;43651:223::-;43791:34;43787:1;43779:6;43775:14;43768:58;43860:6;43855:2;43847:6;43843:15;43836:31;43651:223;:::o;43880:366::-;44022:3;44043:67;44107:2;44102:3;44043:67;:::i;:::-;44036:74;;44119:93;44208:3;44119:93;:::i;:::-;44237:2;44232:3;44228:12;44221:19;;43880:366;;;:::o;44252:419::-;44418:4;44456:2;44445:9;44441:18;44433:26;;44505:9;44499:4;44495:20;44491:1;44480:9;44476:17;44469:47;44533:131;44659:4;44533:131;:::i;:::-;44525:139;;44252:419;;;:::o;44677:191::-;44717:4;44737:20;44755:1;44737:20;:::i;:::-;44732:25;;44771:20;44789:1;44771:20;:::i;:::-;44766:25;;44810:1;44807;44804:8;44801:34;;;44815:18;;:::i;:::-;44801:34;44860:1;44857;44853:9;44845:17;;44677:191;;;;:::o;44874:179::-;45014:31;45010:1;45002:6;44998:14;44991:55;44874:179;:::o;45059:366::-;45201:3;45222:67;45286:2;45281:3;45222:67;:::i;:::-;45215:74;;45298:93;45387:3;45298:93;:::i;:::-;45416:2;45411:3;45407:12;45400:19;;45059:366;;;:::o;45431:419::-;45597:4;45635:2;45624:9;45620:18;45612:26;;45684:9;45678:4;45674:20;45670:1;45659:9;45655:17;45648:47;45712:131;45838:4;45712:131;:::i;:::-;45704:139;;45431:419;;;:::o;45856:147::-;45957:11;45994:3;45979:18;;45856:147;;;;:::o;46009:114::-;;:::o;46129:398::-;46288:3;46309:83;46390:1;46385:3;46309:83;:::i;:::-;46302:90;;46401:93;46490:3;46401:93;:::i;:::-;46519:1;46514:3;46510:11;46503:18;;46129:398;;;:::o;46533:379::-;46717:3;46739:147;46882:3;46739:147;:::i;:::-;46732:154;;46903:3;46896:10;;46533:379;;;:::o;46918:245::-;47058:34;47054:1;47046:6;47042:14;47035:58;47127:28;47122:2;47114:6;47110:15;47103:53;46918:245;:::o;47169:366::-;47311:3;47332:67;47396:2;47391:3;47332:67;:::i;:::-;47325:74;;47408:93;47497:3;47408:93;:::i;:::-;47526:2;47521:3;47517:12;47510:19;;47169:366;;;:::o;47541:419::-;47707:4;47745:2;47734:9;47730:18;47722:26;;47794:9;47788:4;47784:20;47780:1;47769:9;47765:17;47758:47;47822:131;47948:4;47822:131;:::i;:::-;47814:139;;47541:419;;;:::o;47966:237::-;48106:34;48102:1;48094:6;48090:14;48083:58;48175:20;48170:2;48162:6;48158:15;48151:45;47966:237;:::o;48209:366::-;48351:3;48372:67;48436:2;48431:3;48372:67;:::i;:::-;48365:74;;48448:93;48537:3;48448:93;:::i;:::-;48566:2;48561:3;48557:12;48550:19;;48209:366;;;:::o;48581:419::-;48747:4;48785:2;48774:9;48770:18;48762:26;;48834:9;48828:4;48824:20;48820:1;48809:9;48805:17;48798:47;48862:131;48988:4;48862:131;:::i;:::-;48854:139;;48581:419;;;:::o;49006:180::-;49054:77;49051:1;49044:88;49151:4;49148:1;49141:15;49175:4;49172:1;49165:15;49192:185;49232:1;49249:20;49267:1;49249:20;:::i;:::-;49244:25;;49283:20;49301:1;49283:20;:::i;:::-;49278:25;;49322:1;49312:35;;49327:18;;:::i;:::-;49312:35;49369:1;49366;49362:9;49357:14;;49192:185;;;;:::o;49383:176::-;49415:1;49432:20;49450:1;49432:20;:::i;:::-;49427:25;;49466:20;49484:1;49466:20;:::i;:::-;49461:25;;49505:1;49495:35;;49510:18;;:::i;:::-;49495:35;49551:1;49548;49544:9;49539:14;;49383:176;;;;:::o;49565:79::-;49604:7;49633:5;49622:16;;49565:79;;;:::o;49650:157::-;49755:45;49775:24;49793:5;49775:24;:::i;:::-;49755:45;:::i;:::-;49750:3;49743:58;49650:157;;:::o;49813:94::-;49846:8;49894:5;49890:2;49886:14;49865:35;;49813:94;;;:::o;49913:::-;49952:7;49981:20;49995:5;49981:20;:::i;:::-;49970:31;;49913:94;;;:::o;50013:100::-;50052:7;50081:26;50101:5;50081:26;:::i;:::-;50070:37;;50013:100;;;:::o;50119:157::-;50224:45;50244:24;50262:5;50244:24;:::i;:::-;50224:45;:::i;:::-;50219:3;50212:58;50119:157;;:::o;50282:961::-;50534:3;50549:75;50620:3;50611:6;50549:75;:::i;:::-;50649:2;50644:3;50640:12;50633:19;;50662:75;50733:3;50724:6;50662:75;:::i;:::-;50762:2;50757:3;50753:12;50746:19;;50775:75;50846:3;50837:6;50775:75;:::i;:::-;50875:2;50870:3;50866:12;50859:19;;50888:75;50959:3;50950:6;50888:75;:::i;:::-;50988:2;50983:3;50979:12;50972:19;;51001:75;51072:3;51063:6;51001:75;:::i;:::-;51101:2;51096:3;51092:12;51085:19;;51114:75;51185:3;51176:6;51114:75;:::i;:::-;51214:2;51209:3;51205:12;51198:19;;51234:3;51227:10;;50282:961;;;;;;;;;:::o;51249:98::-;51300:6;51334:5;51328:12;51318:22;;51249:98;;;:::o;51353:168::-;51436:11;51470:6;51465:3;51458:19;51510:4;51505:3;51501:14;51486:29;;51353:168;;;;:::o;51527:360::-;51613:3;51641:38;51673:5;51641:38;:::i;:::-;51695:70;51758:6;51753:3;51695:70;:::i;:::-;51688:77;;51774:52;51819:6;51814:3;51807:4;51800:5;51796:16;51774:52;:::i;:::-;51851:29;51873:6;51851:29;:::i;:::-;51846:3;51842:39;51835:46;;51617:270;51527:360;;;;:::o;51893:640::-;52088:4;52126:3;52115:9;52111:19;52103:27;;52140:71;52208:1;52197:9;52193:17;52184:6;52140:71;:::i;:::-;52221:72;52289:2;52278:9;52274:18;52265:6;52221:72;:::i;:::-;52303;52371:2;52360:9;52356:18;52347:6;52303:72;:::i;:::-;52422:9;52416:4;52412:20;52407:2;52396:9;52392:18;52385:48;52450:76;52521:4;52512:6;52450:76;:::i;:::-;52442:84;;51893:640;;;;;;;:::o;52539:141::-;52595:5;52626:6;52620:13;52611:22;;52642:32;52668:5;52642:32;:::i;:::-;52539:141;;;;:::o;52686:349::-;52755:6;52804:2;52792:9;52783:7;52779:23;52775:32;52772:119;;;52810:79;;:::i;:::-;52772:119;52930:1;52955:63;53010:7;53001:6;52990:9;52986:22;52955:63;:::i;:::-;52945:73;;52901:127;52686:349;;;;:::o;53041:230::-;53181:34;53177:1;53169:6;53165:14;53158:58;53250:13;53245:2;53237:6;53233:15;53226:38;53041:230;:::o;53277:366::-;53419:3;53440:67;53504:2;53499:3;53440:67;:::i;:::-;53433:74;;53516:93;53605:3;53516:93;:::i;:::-;53634:2;53629:3;53625:12;53618:19;;53277:366;;;:::o;53649:419::-;53815:4;53853:2;53842:9;53838:18;53830:26;;53902:9;53896:4;53892:20;53888:1;53877:9;53873:17;53866:47;53930:131;54056:4;53930:131;:::i;:::-;53922:139;;53649:419;;;:::o;54074:180::-;54122:77;54119:1;54112:88;54219:4;54216:1;54209:15;54243:4;54240:1;54233:15;54260:182;54400:34;54396:1;54388:6;54384:14;54377:58;54260:182;:::o;54448:366::-;54590:3;54611:67;54675:2;54670:3;54611:67;:::i;:::-;54604:74;;54687:93;54776:3;54687:93;:::i;:::-;54805:2;54800:3;54796:12;54789:19;;54448:366;;;:::o;54820:419::-;54986:4;55024:2;55013:9;55009:18;55001:26;;55073:9;55067:4;55063:20;55059:1;55048:9;55044:17;55037:47;55101:131;55227:4;55101:131;:::i;:::-;55093:139;;54820:419;;;:::o;55245:178::-;55385:30;55381:1;55373:6;55369:14;55362:54;55245:178;:::o;55429:366::-;55571:3;55592:67;55656:2;55651:3;55592:67;:::i;:::-;55585:74;;55668:93;55757:3;55668:93;:::i;:::-;55786:2;55781:3;55777:12;55770:19;;55429:366;;;:::o;55801:419::-;55967:4;56005:2;55994:9;55990:18;55982:26;;56054:9;56048:4;56044:20;56040:1;56029:9;56025:17;56018:47;56082:131;56208:4;56082:131;:::i;:::-;56074:139;;55801:419;;;:::o
Swarm Source
ipfs://298050e817d6aaad65fb49fa0c081348f65359682f50d94ebf9ade8522a2b088
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.