Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 63 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 20309674 | 479 days ago | IN | 0 ETH | 0.00012898 | ||||
| Set Approval For... | 20309451 | 479 days ago | IN | 0 ETH | 0.00013055 | ||||
| Set Approval For... | 14093571 | 1377 days ago | IN | 0 ETH | 0.00367142 | ||||
| Withdraw | 14056522 | 1383 days ago | IN | 0 ETH | 0.00709494 | ||||
| Set Approval For... | 14040967 | 1385 days ago | IN | 0 ETH | 0.00388189 | ||||
| Publicsale Aftp | 14017641 | 1389 days ago | IN | 0.06 ETH | 0.00697916 | ||||
| Set Approval For... | 14014176 | 1390 days ago | IN | 0 ETH | 0.00463861 | ||||
| Reveal | 14004610 | 1391 days ago | IN | 0 ETH | 0.01318576 | ||||
| Publicsale Aftp | 14004055 | 1391 days ago | IN | 0.06 ETH | 0.02417349 | ||||
| Publicsale Aftp | 14003753 | 1391 days ago | IN | 0.06 ETH | 0.00980321 | ||||
| Transfer From | 14002075 | 1391 days ago | IN | 0 ETH | 0.00737468 | ||||
| Publicsale Aftp | 14000251 | 1392 days ago | IN | 0.06 ETH | 0.01301073 | ||||
| Transfer From | 13999394 | 1392 days ago | IN | 0 ETH | 0.00899149 | ||||
| Transfer From | 13999165 | 1392 days ago | IN | 0 ETH | 0.00659071 | ||||
| Transfer From | 13999076 | 1392 days ago | IN | 0 ETH | 0.01032243 | ||||
| Transfer From | 13998935 | 1392 days ago | IN | 0 ETH | 0.01007941 | ||||
| Publicsale Aftp | 13998163 | 1392 days ago | IN | 0.06 ETH | 0.01290245 | ||||
| Set Public Sale ... | 13998135 | 1392 days ago | IN | 0 ETH | 0.00631417 | ||||
| Publicsale Aftp | 13998127 | 1392 days ago | IN | 0.06 ETH | 0.01772908 | ||||
| Publicsale Aftp | 13998119 | 1392 days ago | IN | 0.03 ETH | 0.01662337 | ||||
| Publicsale Aftp | 13997815 | 1392 days ago | IN | 0.03 ETH | 0.0162708 | ||||
| Publicsale Aftp | 13996659 | 1392 days ago | IN | 0.06 ETH | 0.01167876 | ||||
| Publicsale Aftp | 13995809 | 1392 days ago | IN | 0.06 ETH | 0.01130688 | ||||
| Publicsale Aftp | 13995792 | 1392 days ago | IN | 0.03 ETH | 0.00807393 | ||||
| Set Approval For... | 13995705 | 1392 days ago | IN | 0 ETH | 0.00491249 |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AfterPartyApeClub
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-01-12
*/
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);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// 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/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/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/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/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/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: @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/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);
}
}
pragma solidity ^0.8.9;
// @title: afterparty.sol
contract AfterPartyApeClub is ERC721, Ownable {
using Strings for uint256;
using SafeMath for uint256;
uint256 public constant MAX_SUPPLY = 8420;
uint256 public reserved = 120; // Team and free giveaway
uint256 public presaleSupply = 1500;
uint256 public presalePrice = 0.03 ether;
uint256 public publicsalePrice = 0.06 ether;
uint256 public totalSupply;
uint256 public MINT_CAP = 21;
address public dev = 0x756cDB0bAB8622A31676Ac0c70b6AA124E99D470; //Dev address
address public pm = 0x2B61356A126D9732D5C1d4D6BE85C9024bfE7Be0; // PM address
struct WhitelistEntry {
bool isApproved;
uint reservedQuantity;
}
mapping(address => WhitelistEntry) public whitelist;
bool public presale;
bool public publicsale;
string public baseUri;
bool public revealed = false;
string public notRevealedUri;
string public baseExtension = ".json";
constructor(string memory _baseuri, string memory _NotRevealedUri) ERC721("After Party Ape Club", "AFTP") {
setBaseURI(_baseuri);
setNotRevealedURI(_NotRevealedUri);
totalSupply = 0;
}
function _mintAftp(uint256 num) internal returns (bool) {
for (uint256 i = 1; i <= num; i++) {
uint256 tokenIndex = totalSupply + i;
if (tokenIndex < MAX_SUPPLY) _safeMint(_msgSender(), tokenIndex);
}
totalSupply += num;
return true;
}
function presaleAftp(uint256 num) public payable returns (bool) {
uint256 currentSupply = totalSupply;
require(presale, 'The presale have NOT started, please be patient.');
require(whitelist[msg.sender].isApproved, "You are not in the whitelist to mint");
require(currentSupply + num <= presaleSupply, 'Exceeded pre-sale supply');
require(whitelist[msg.sender].reservedQuantity >= num, "Insufficient reserved presale quantity");
require(msg.value >= presalePrice * num,'Ether value sent is not sufficient');
whitelist[msg.sender].reservedQuantity -= num;
return _mintAftp(num);
}
function publicsaleAftp(uint256 num) public payable returns (bool) {
uint256 currentSupply = totalSupply;
require(publicsale, 'The publicsale have NOT started, please be patient.');
require(num < MINT_CAP,'You are trying to mint too many at a time');
require(currentSupply + num <= MAX_SUPPLY - reserved, 'Exceeded total supply');
require(msg.value >= publicsalePrice * num,'Ether value sent is not sufficient');
return _mintAftp(num);
}
function addToWhitelist(address _address, uint256 reservedQty) public onlyOwner {
whitelist[_address] = WhitelistEntry(true, reservedQty);
}
function getReservedPresaleQuantity(address _address) public view returns (uint256) {
return whitelist[_address].reservedQuantity;
}
function initPresaleWhitelist(address [] memory addr, uint [] memory quantities) public onlyOwner {
for (uint i = 0; i < addr.length; i++) {
whitelist[addr[i]] = WhitelistEntry(true, quantities[i]);
}
}
function togglePublicsale() public onlyOwner {
publicsale = !publicsale;
}
function togglePresale() public onlyOwner {
presale = !presale;
}
function reveal() public onlyOwner() {
revealed = true;
}
function setPresaleSupply(uint256 _presaleSupply) public onlyOwner {
presaleSupply = _presaleSupply;
}
function setReserve(uint256 _reserved) public onlyOwner {
reserved = _reserved;
}
function setPreSalePrice(uint256 _newPrice) public onlyOwner {
presalePrice = _newPrice;
}
function setPublicSalePrice(uint256 _newPrice) public onlyOwner {
publicsalePrice = _newPrice;
}
function setMintCap(uint256 _mintCap) public onlyOwner {
MINT_CAP = _mintCap;
}
function withdraw() public onlyOwner {
uint256 balance = address(this).balance;
uint256 devShare = balance.mul(10).div(100);
uint256 pmShare = balance.mul(15).div(100);
uint256 tmp = balance.sub(devShare);
uint256 ownerShare = tmp.sub(pmShare);
payable(msg.sender).transfer(ownerShare);
payable(dev).transfer(devShare);
payable(pm).transfer(pmShare);
}
function reserve(uint256 num) public onlyOwner {
require(num <= reserved, "Exceeds reserved fighter supply" );
for (uint256 i = 1; i <= num; i++) {
uint256 mintIndex = totalSupply + i;
_safeMint(msg.sender, mintIndex);
}
totalSupply += num;
reserved -= num;
}
function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
notRevealedUri = _notRevealedURI;
}
function setBaseURI(string memory _baseUri) public onlyOwner {
baseUri = _baseUri;
}
function tokenURI(uint256 tokenId)
public
view
virtual
override
returns (string memory)
{
require(
_exists(tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
if(revealed == false) {
return notRevealedUri;
}
string memory currentBaseURI = _baseURI();
return bytes(currentBaseURI).length > 0
? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
: "";
}
// INTERNAL FUNCTIONS
function _baseURI() internal view virtual override returns (string memory) {
return baseUri;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_baseuri","type":"string"},{"internalType":"string","name":"_NotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_CAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"reservedQty","type":"uint256"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dev","outputs":[{"internalType":"address","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":[{"internalType":"address","name":"_address","type":"address"}],"name":"getReservedPresaleQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"uint256[]","name":"quantities","type":"uint256[]"}],"name":"initPresaleWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"pm","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"presaleAftp","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicsale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"publicsaleAftp","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicsalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintCap","type":"uint256"}],"name":"setMintCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPreSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleSupply","type":"uint256"}],"name":"setPresaleSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPublicSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reserved","type":"uint256"}],"name":"setReserve","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":[],"name":"togglePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicsale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"isApproved","type":"bool"},{"internalType":"uint256","name":"reservedQuantity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405260786007556105dc600855666a94d74f43000060095566d529ae9e860000600a556015600c5573756cdb0bab8622a31676ac0c70b6aa124e99d470600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732b61356a126d9732d5c1d4d6be85c9024bfe7be0600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601260006101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250601490805190602001906200013c929190620004b0565b503480156200014a57600080fd5b506040516200586f3803806200586f8339818101604052810190620001709190620006fd565b6040518060400160405280601481526020017f41667465722050617274792041706520436c75620000000000000000000000008152506040518060400160405280600481526020017f41465450000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001f4929190620004b0565b5080600190805190602001906200020d929190620004b0565b50505062000230620002246200026260201b60201c565b6200026a60201b60201c565b62000241826200033060201b60201c565b6200025281620003db60201b60201c565b6000600b8190555050506200086a565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003406200026260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003666200048660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003b690620007e3565b60405180910390fd5b8060119080519060200190620003d7929190620004b0565b5050565b620003eb6200026260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004116200048660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200046a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200046190620007e3565b60405180910390fd5b806013908051906020019062000482929190620004b0565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620004be9062000834565b90600052602060002090601f016020900481019282620004e257600085556200052e565b82601f10620004fd57805160ff19168380011785556200052e565b828001600101855582156200052e579182015b828111156200052d57825182559160200191906001019062000510565b5b5090506200053d919062000541565b5090565b5b808211156200055c57600081600090555060010162000542565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620005c9826200057e565b810181811067ffffffffffffffff82111715620005eb57620005ea6200058f565b5b80604052505050565b60006200060062000560565b90506200060e8282620005be565b919050565b600067ffffffffffffffff8211156200063157620006306200058f565b5b6200063c826200057e565b9050602081019050919050565b60005b83811015620006695780820151818401526020810190506200064c565b8381111562000679576000848401525b50505050565b600062000696620006908462000613565b620005f4565b905082815260208101848484011115620006b557620006b462000579565b5b620006c284828562000649565b509392505050565b600082601f830112620006e257620006e162000574565b5b8151620006f48482602086016200067f565b91505092915050565b600080604083850312156200071757620007166200056a565b5b600083015167ffffffffffffffff8111156200073857620007376200056f565b5b6200074685828601620006ca565b925050602083015167ffffffffffffffff8111156200076a57620007696200056f565b5b6200077885828601620006ca565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620007cb60208362000782565b9150620007d88262000793565b602082019050919050565b60006020820190508181036000830152620007fe81620007bc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200084d57607f821691505b6020821081141562000864576200086362000805565b5b50919050565b614ff5806200087a6000396000f3fe6080604052600436106102ad5760003560e01c80637eff4b6711610175578063a475b5dd116100dc578063c87b56dd11610095578063f2c4ce1e1161006f578063f2c4ce1e14610a5c578063f2fde38b14610a85578063fdea8e0b14610aae578063fe60d12c14610ad9576102ad565b8063c87b56dd146109b2578063e3991c4b146109ef578063e985e9c514610a1f576102ad565b8063a475b5dd146108c8578063b3a196e9146108df578063b88d4fde1461090a578063b94805a214610933578063b96502cb1461095e578063c668286214610987576102ad565b806395d89b411161012e57806395d89b41146107b057806396cc95b1146107db57806398f1312e1461080b5780639abc8320146108365780639b19251a14610861578063a22cb4651461089f576102ad565b80637eff4b67146106c4578063819b25ba146106ef5780638970cdff146107185780638da5cb5b1461074357806391cca3db1461076e578063953c802514610799576102ad565b80633ccfd60b116102195780636352211e116101d25780636352211e146105b857806370a08231146105f5578063715018a6146106325780637445968e14610649578063791a2519146106725780637d7eee421461069b576102ad565b80633ccfd60b146104d25780634070a0c9146104e95780634256dbe31461051257806342842e0e1461053b578063518302271461056457806355f804b31461058f576102ad565b806318160ddd1161026b57806318160ddd146103d65780631faf046b14610401578063214405fc1461043e57806323b872dd1461046757806332cb6b0c1461049057806334393743146104bb576102ad565b80620e7fa8146102b257806301ffc9a7146102dd57806306fdde031461031a578063081812fc14610345578063081c8c4414610382578063095ea7b3146103ad575b600080fd5b3480156102be57600080fd5b506102c7610b04565b6040516102d49190613566565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff91906135ed565b610b0a565b6040516103119190613635565b60405180910390f35b34801561032657600080fd5b5061032f610bec565b60405161033c91906136e9565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613737565b610c7e565b60405161037991906137a5565b60405180910390f35b34801561038e57600080fd5b50610397610d03565b6040516103a491906136e9565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906137ec565b610d91565b005b3480156103e257600080fd5b506103eb610ea9565b6040516103f89190613566565b60405180910390f35b34801561040d57600080fd5b506104286004803603810190610423919061382c565b610eaf565b6040516104359190613566565b60405180910390f35b34801561044a57600080fd5b50610465600480360381019061046091906137ec565b610efb565b005b34801561047357600080fd5b5061048e60048036038101906104899190613859565b610fff565b005b34801561049c57600080fd5b506104a561105f565b6040516104b29190613566565b60405180910390f35b3480156104c757600080fd5b506104d0611065565b005b3480156104de57600080fd5b506104e761110d565b005b3480156104f557600080fd5b50610510600480360381019061050b9190613737565b611332565b005b34801561051e57600080fd5b5061053960048036038101906105349190613737565b6113b8565b005b34801561054757600080fd5b50610562600480360381019061055d9190613859565b61143e565b005b34801561057057600080fd5b5061057961145e565b6040516105869190613635565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b191906139e1565b611471565b005b3480156105c457600080fd5b506105df60048036038101906105da9190613737565b611507565b6040516105ec91906137a5565b60405180910390f35b34801561060157600080fd5b5061061c6004803603810190610617919061382c565b6115b9565b6040516106299190613566565b60405180910390f35b34801561063e57600080fd5b50610647611671565b005b34801561065557600080fd5b50610670600480360381019061066b9190613bb5565b6116f9565b005b34801561067e57600080fd5b5061069960048036038101906106949190613737565b611851565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190613737565b6118d7565b005b3480156106d057600080fd5b506106d961195d565b6040516106e69190613566565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190613737565b611963565b005b34801561072457600080fd5b5061072d611a98565b60405161073a91906137a5565b60405180910390f35b34801561074f57600080fd5b50610758611abe565b60405161076591906137a5565b60405180910390f35b34801561077a57600080fd5b50610783611ae8565b60405161079091906137a5565b60405180910390f35b3480156107a557600080fd5b506107ae611b0e565b005b3480156107bc57600080fd5b506107c5611bb6565b6040516107d291906136e9565b60405180910390f35b6107f560048036038101906107f09190613737565b611c48565b6040516108029190613635565b60405180910390f35b34801561081757600080fd5b50610820611da1565b60405161082d9190613566565b60405180910390f35b34801561084257600080fd5b5061084b611da7565b60405161085891906136e9565b60405180910390f35b34801561086d57600080fd5b506108886004803603810190610883919061382c565b611e35565b604051610896929190613c2d565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c19190613c82565b611e66565b005b3480156108d457600080fd5b506108dd611fe7565b005b3480156108eb57600080fd5b506108f4612080565b6040516109019190613566565b60405180910390f35b34801561091657600080fd5b50610931600480360381019061092c9190613d63565b612086565b005b34801561093f57600080fd5b506109486120e8565b6040516109559190613635565b60405180910390f35b34801561096a57600080fd5b5061098560048036038101906109809190613737565b6120fb565b005b34801561099357600080fd5b5061099c612181565b6040516109a991906136e9565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d49190613737565b61220f565b6040516109e691906136e9565b60405180910390f35b610a096004803603810190610a049190613737565b612368565b604051610a169190613635565b60405180910390f35b348015610a2b57600080fd5b50610a466004803603810190610a419190613de6565b6125dd565b604051610a539190613635565b60405180910390f35b348015610a6857600080fd5b50610a836004803603810190610a7e91906139e1565b612671565b005b348015610a9157600080fd5b50610aac6004803603810190610aa7919061382c565b612707565b005b348015610aba57600080fd5b50610ac36127ff565b604051610ad09190613635565b60405180910390f35b348015610ae557600080fd5b50610aee612812565b604051610afb9190613566565b60405180910390f35b60095481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bd557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610be55750610be482612818565b5b9050919050565b606060008054610bfb90613e55565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2790613e55565b8015610c745780601f10610c4957610100808354040283529160200191610c74565b820191906000526020600020905b815481529060010190602001808311610c5757829003601f168201915b5050505050905090565b6000610c8982612882565b610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90613ef9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60138054610d1090613e55565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3c90613e55565b8015610d895780601f10610d5e57610100808354040283529160200191610d89565b820191906000526020600020905b815481529060010190602001808311610d6c57829003601f168201915b505050505081565b6000610d9c82611507565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490613f8b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e2c6128ee565b73ffffffffffffffffffffffffffffffffffffffff161480610e5b5750610e5a81610e556128ee565b6125dd565b5b610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e919061401d565b60405180910390fd5b610ea483836128f6565b505050565b600b5481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b610f036128ee565b73ffffffffffffffffffffffffffffffffffffffff16610f21611abe565b73ffffffffffffffffffffffffffffffffffffffff1614610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e90614089565b60405180910390fd5b604051806040016040528060011515815260200182815250600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050505050565b61101061100a6128ee565b826129af565b61104f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110469061411b565b60405180910390fd5b61105a838383612a8d565b505050565b6120e481565b61106d6128ee565b73ffffffffffffffffffffffffffffffffffffffff1661108b611abe565b73ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890614089565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b6111156128ee565b73ffffffffffffffffffffffffffffffffffffffff16611133611abe565b73ffffffffffffffffffffffffffffffffffffffff1614611189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118090614089565b60405180910390fd5b600047905060006111b760646111a9600a85612ce990919063ffffffff16565b612cff90919063ffffffff16565b905060006111e260646111d4600f86612ce990919063ffffffff16565b612cff90919063ffffffff16565b905060006111f98385612d1590919063ffffffff16565b905060006112108383612d1590919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611258573d6000803e3d6000fd5b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156112c1573d6000803e3d6000fd5b50600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561132a573d6000803e3d6000fd5b505050505050565b61133a6128ee565b73ffffffffffffffffffffffffffffffffffffffff16611358611abe565b73ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590614089565b60405180910390fd5b80600c8190555050565b6113c06128ee565b73ffffffffffffffffffffffffffffffffffffffff166113de611abe565b73ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b90614089565b60405180910390fd5b8060078190555050565b61145983838360405180602001604052806000815250612086565b505050565b601260009054906101000a900460ff1681565b6114796128ee565b73ffffffffffffffffffffffffffffffffffffffff16611497611abe565b73ffffffffffffffffffffffffffffffffffffffff16146114ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e490614089565b60405180910390fd5b80601190805190602001906115039291906134aa565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a7906141ad565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561162a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116219061423f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116796128ee565b73ffffffffffffffffffffffffffffffffffffffff16611697611abe565b73ffffffffffffffffffffffffffffffffffffffff16146116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e490614089565b60405180910390fd5b6116f76000612d2b565b565b6117016128ee565b73ffffffffffffffffffffffffffffffffffffffff1661171f611abe565b73ffffffffffffffffffffffffffffffffffffffff1614611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c90614089565b60405180910390fd5b60005b825181101561184c5760405180604001604052806001151581526020018383815181106117a8576117a761425f565b5b6020026020010151815250600f60008584815181106117ca576117c961425f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050508080611844906142bd565b915050611778565b505050565b6118596128ee565b73ffffffffffffffffffffffffffffffffffffffff16611877611abe565b73ffffffffffffffffffffffffffffffffffffffff16146118cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c490614089565b60405180910390fd5b80600a8190555050565b6118df6128ee565b73ffffffffffffffffffffffffffffffffffffffff166118fd611abe565b73ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a90614089565b60405180910390fd5b8060098190555050565b600a5481565b61196b6128ee565b73ffffffffffffffffffffffffffffffffffffffff16611989611abe565b73ffffffffffffffffffffffffffffffffffffffff16146119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d690614089565b60405180910390fd5b600754811115611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b90614352565b60405180910390fd5b6000600190505b818111611a6257600081600b54611a429190614372565b9050611a4e3382612df1565b508080611a5a906142bd565b915050611a2b565b5080600b6000828254611a759190614372565b925050819055508060076000828254611a8e91906143c8565b9250508190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b166128ee565b73ffffffffffffffffffffffffffffffffffffffff16611b34611abe565b73ffffffffffffffffffffffffffffffffffffffff1614611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190614089565b60405180910390fd5b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b606060018054611bc590613e55565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf190613e55565b8015611c3e5780601f10611c1357610100808354040283529160200191611c3e565b820191906000526020600020905b815481529060010190602001808311611c2157829003601f168201915b5050505050905090565b600080600b549050601060019054906101000a900460ff16611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c969061446e565b60405180910390fd5b600c548310611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda90614500565b60405180910390fd5b6007546120e4611cf391906143c8565b8382611cff9190614372565b1115611d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d379061456c565b60405180910390fd5b82600a54611d4e919061458c565b341015611d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8790614658565b60405180910390fd5b611d9983612e0f565b915050919050565b600c5481565b60118054611db490613e55565b80601f0160208091040260200160405190810160405280929190818152602001828054611de090613e55565b8015611e2d5780601f10611e0257610100808354040283529160200191611e2d565b820191906000526020600020905b815481529060010190602001808311611e1057829003601f168201915b505050505081565b600f6020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154905082565b611e6e6128ee565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed3906146c4565b60405180910390fd5b8060056000611ee96128ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f966128ee565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fdb9190613635565b60405180910390a35050565b611fef6128ee565b73ffffffffffffffffffffffffffffffffffffffff1661200d611abe565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90614089565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b60085481565b6120976120916128ee565b836129af565b6120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd9061411b565b60405180910390fd5b6120e284848484612e83565b50505050565b601060019054906101000a900460ff1681565b6121036128ee565b73ffffffffffffffffffffffffffffffffffffffff16612121611abe565b73ffffffffffffffffffffffffffffffffffffffff1614612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e90614089565b60405180910390fd5b8060088190555050565b6014805461218e90613e55565b80601f01602080910402602001604051908101604052809291908181526020018280546121ba90613e55565b80156122075780601f106121dc57610100808354040283529160200191612207565b820191906000526020600020905b8154815290600101906020018083116121ea57829003601f168201915b505050505081565b606061221a82612882565b612259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225090614756565b60405180910390fd5b60001515601260009054906101000a900460ff1615151415612307576013805461228290613e55565b80601f01602080910402602001604051908101604052809291908181526020018280546122ae90613e55565b80156122fb5780601f106122d0576101008083540402835291602001916122fb565b820191906000526020600020905b8154815290600101906020018083116122de57829003601f168201915b50505050509050612363565b6000612311612edf565b90506000815111612331576040518060200160405280600081525061235f565b8061233b84612f71565b601460405160200161234f93929190614846565b6040516020818303038152906040525b9150505b919050565b600080600b549050601060009054906101000a900460ff166123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b6906148e9565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1661244e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124459061497b565b60405180910390fd5b600854838261245d9190614372565b111561249e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612495906149e7565b60405180910390fd5b82600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541015612523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251a90614a79565b60405180910390fd5b82600954612531919061458c565b341015612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614658565b60405180910390fd5b82600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282546125c591906143c8565b925050819055506125d583612e0f565b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126796128ee565b73ffffffffffffffffffffffffffffffffffffffff16612697611abe565b73ffffffffffffffffffffffffffffffffffffffff16146126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e490614089565b60405180910390fd5b80601390805190602001906127039291906134aa565b5050565b61270f6128ee565b73ffffffffffffffffffffffffffffffffffffffff1661272d611abe565b73ffffffffffffffffffffffffffffffffffffffff1614612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277a90614089565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ea90614b0b565b60405180910390fd5b6127fc81612d2b565b50565b601060009054906101000a900460ff1681565b60075481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661296983611507565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006129ba82612882565b6129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f090614b9d565b60405180910390fd5b6000612a0483611507565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a7357508373ffffffffffffffffffffffffffffffffffffffff16612a5b84610c7e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a845750612a8381856125dd565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612aad82611507565b73ffffffffffffffffffffffffffffffffffffffff1614612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa90614c2f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a90614cc1565b60405180910390fd5b612b7e8383836130d2565b612b896000826128f6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bd991906143c8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c309190614372565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612cf7919061458c565b905092915050565b60008183612d0d9190614d10565b905092915050565b60008183612d2391906143c8565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612e0b8282604051806020016040528060008152506130d7565b5050565b600080600190505b828111612e6057600081600b54612e2e9190614372565b90506120e4811015612e4c57612e4b612e456128ee565b82612df1565b5b508080612e58906142bd565b915050612e17565b5081600b6000828254612e739190614372565b9250508190555060019050919050565b612e8e848484612a8d565b612e9a84848484613132565b612ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed090614db3565b60405180910390fd5b50505050565b606060118054612eee90613e55565b80601f0160208091040260200160405190810160405280929190818152602001828054612f1a90613e55565b8015612f675780601f10612f3c57610100808354040283529160200191612f67565b820191906000526020600020905b815481529060010190602001808311612f4a57829003601f168201915b5050505050905090565b60606000821415612fb9576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130cd565b600082905060005b60008214612feb578080612fd4906142bd565b915050600a82612fe49190614d10565b9150612fc1565b60008167ffffffffffffffff811115613007576130066138b6565b5b6040519080825280601f01601f1916602001820160405280156130395781602001600182028036833780820191505090505b5090505b600085146130c65760018261305291906143c8565b9150600a856130619190614dd3565b603061306d9190614372565b60f81b8183815181106130835761308261425f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130bf9190614d10565b945061303d565b8093505050505b919050565b505050565b6130e183836132c9565b6130ee6000848484613132565b61312d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312490614db3565b60405180910390fd5b505050565b60006131538473ffffffffffffffffffffffffffffffffffffffff16613497565b156132bc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261317c6128ee565b8786866040518563ffffffff1660e01b815260040161319e9493929190614e59565b602060405180830381600087803b1580156131b857600080fd5b505af19250505080156131e957506040513d601f19601f820116820180604052508101906131e69190614eba565b60015b61326c573d8060008114613219576040519150601f19603f3d011682016040523d82523d6000602084013e61321e565b606091505b50600081511415613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325b90614db3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132c1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333090614f33565b60405180910390fd5b61334281612882565b15613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614f9f565b60405180910390fd5b61338e600083836130d2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133de9190614372565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546134b690613e55565b90600052602060002090601f0160209004810192826134d8576000855561351f565b82601f106134f157805160ff191683800117855561351f565b8280016001018555821561351f579182015b8281111561351e578251825591602001919060010190613503565b5b50905061352c9190613530565b5090565b5b80821115613549576000816000905550600101613531565b5090565b6000819050919050565b6135608161354d565b82525050565b600060208201905061357b6000830184613557565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135ca81613595565b81146135d557600080fd5b50565b6000813590506135e7816135c1565b92915050565b6000602082840312156136035761360261358b565b5b6000613611848285016135d8565b91505092915050565b60008115159050919050565b61362f8161361a565b82525050565b600060208201905061364a6000830184613626565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561368a57808201518184015260208101905061366f565b83811115613699576000848401525b50505050565b6000601f19601f8301169050919050565b60006136bb82613650565b6136c5818561365b565b93506136d581856020860161366c565b6136de8161369f565b840191505092915050565b6000602082019050818103600083015261370381846136b0565b905092915050565b6137148161354d565b811461371f57600080fd5b50565b6000813590506137318161370b565b92915050565b60006020828403121561374d5761374c61358b565b5b600061375b84828501613722565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061378f82613764565b9050919050565b61379f81613784565b82525050565b60006020820190506137ba6000830184613796565b92915050565b6137c981613784565b81146137d457600080fd5b50565b6000813590506137e6816137c0565b92915050565b600080604083850312156138035761380261358b565b5b6000613811858286016137d7565b925050602061382285828601613722565b9150509250929050565b6000602082840312156138425761384161358b565b5b6000613850848285016137d7565b91505092915050565b6000806000606084860312156138725761387161358b565b5b6000613880868287016137d7565b9350506020613891868287016137d7565b92505060406138a286828701613722565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138ee8261369f565b810181811067ffffffffffffffff8211171561390d5761390c6138b6565b5b80604052505050565b6000613920613581565b905061392c82826138e5565b919050565b600067ffffffffffffffff82111561394c5761394b6138b6565b5b6139558261369f565b9050602081019050919050565b82818337600083830152505050565b600061398461397f84613931565b613916565b9050828152602081018484840111156139a05761399f6138b1565b5b6139ab848285613962565b509392505050565b600082601f8301126139c8576139c76138ac565b5b81356139d8848260208601613971565b91505092915050565b6000602082840312156139f7576139f661358b565b5b600082013567ffffffffffffffff811115613a1557613a14613590565b5b613a21848285016139b3565b91505092915050565b600067ffffffffffffffff821115613a4557613a446138b6565b5b602082029050602081019050919050565b600080fd5b6000613a6e613a6984613a2a565b613916565b90508083825260208201905060208402830185811115613a9157613a90613a56565b5b835b81811015613aba5780613aa688826137d7565b845260208401935050602081019050613a93565b5050509392505050565b600082601f830112613ad957613ad86138ac565b5b8135613ae9848260208601613a5b565b91505092915050565b600067ffffffffffffffff821115613b0d57613b0c6138b6565b5b602082029050602081019050919050565b6000613b31613b2c84613af2565b613916565b90508083825260208201905060208402830185811115613b5457613b53613a56565b5b835b81811015613b7d5780613b698882613722565b845260208401935050602081019050613b56565b5050509392505050565b600082601f830112613b9c57613b9b6138ac565b5b8135613bac848260208601613b1e565b91505092915050565b60008060408385031215613bcc57613bcb61358b565b5b600083013567ffffffffffffffff811115613bea57613be9613590565b5b613bf685828601613ac4565b925050602083013567ffffffffffffffff811115613c1757613c16613590565b5b613c2385828601613b87565b9150509250929050565b6000604082019050613c426000830185613626565b613c4f6020830184613557565b9392505050565b613c5f8161361a565b8114613c6a57600080fd5b50565b600081359050613c7c81613c56565b92915050565b60008060408385031215613c9957613c9861358b565b5b6000613ca7858286016137d7565b9250506020613cb885828601613c6d565b9150509250929050565b600067ffffffffffffffff821115613cdd57613cdc6138b6565b5b613ce68261369f565b9050602081019050919050565b6000613d06613d0184613cc2565b613916565b905082815260208101848484011115613d2257613d216138b1565b5b613d2d848285613962565b509392505050565b600082601f830112613d4a57613d496138ac565b5b8135613d5a848260208601613cf3565b91505092915050565b60008060008060808587031215613d7d57613d7c61358b565b5b6000613d8b878288016137d7565b9450506020613d9c878288016137d7565b9350506040613dad87828801613722565b925050606085013567ffffffffffffffff811115613dce57613dcd613590565b5b613dda87828801613d35565b91505092959194509250565b60008060408385031215613dfd57613dfc61358b565b5b6000613e0b858286016137d7565b9250506020613e1c858286016137d7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e6d57607f821691505b60208210811415613e8157613e80613e26565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ee3602c8361365b565b9150613eee82613e87565b604082019050919050565b60006020820190508181036000830152613f1281613ed6565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f7560218361365b565b9150613f8082613f19565b604082019050919050565b60006020820190508181036000830152613fa481613f68565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061400760388361365b565b915061401282613fab565b604082019050919050565b6000602082019050818103600083015261403681613ffa565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061407360208361365b565b915061407e8261403d565b602082019050919050565b600060208201905081810360008301526140a281614066565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061410560318361365b565b9150614110826140a9565b604082019050919050565b60006020820190508181036000830152614134816140f8565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061419760298361365b565b91506141a28261413b565b604082019050919050565b600060208201905081810360008301526141c68161418a565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614229602a8361365b565b9150614234826141cd565b604082019050919050565b600060208201905081810360008301526142588161421c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142c88261354d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142fb576142fa61428e565b5b600182019050919050565b7f45786365656473207265736572766564206669676874657220737570706c7900600082015250565b600061433c601f8361365b565b915061434782614306565b602082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b600061437d8261354d565b91506143888361354d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143bd576143bc61428e565b5b828201905092915050565b60006143d38261354d565b91506143de8361354d565b9250828210156143f1576143f061428e565b5b828203905092915050565b7f546865207075626c696373616c652068617665204e4f5420737461727465642c60008201527f20706c656173652062652070617469656e742e00000000000000000000000000602082015250565b600061445860338361365b565b9150614463826143fc565b604082019050919050565b600060208201905081810360008301526144878161444b565b9050919050565b7f596f752061726520747279696e6720746f206d696e7420746f6f206d616e792060008201527f617420612074696d650000000000000000000000000000000000000000000000602082015250565b60006144ea60298361365b565b91506144f58261448e565b604082019050919050565b60006020820190508181036000830152614519816144dd565b9050919050565b7f457863656564656420746f74616c20737570706c790000000000000000000000600082015250565b600061455660158361365b565b915061456182614520565b602082019050919050565b6000602082019050818103600083015261458581614549565b9050919050565b60006145978261354d565b91506145a28361354d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145db576145da61428e565b5b828202905092915050565b7f45746865722076616c75652073656e74206973206e6f7420737566666963696560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b600061464260228361365b565b915061464d826145e6565b604082019050919050565b6000602082019050818103600083015261467181614635565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006146ae60198361365b565b91506146b982614678565b602082019050919050565b600060208201905081810360008301526146dd816146a1565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614740602f8361365b565b915061474b826146e4565b604082019050919050565b6000602082019050818103600083015261476f81614733565b9050919050565b600081905092915050565b600061478c82613650565b6147968185614776565b93506147a681856020860161366c565b80840191505092915050565b60008190508160005260206000209050919050565b600081546147d481613e55565b6147de8186614776565b945060018216600081146147f9576001811461480a5761483d565b60ff1983168652818601935061483d565b614813856147b2565b60005b8381101561483557815481890152600182019150602081019050614816565b838801955050505b50505092915050565b60006148528286614781565b915061485e8285614781565b915061486a82846147c7565b9150819050949350505050565b7f5468652070726573616c652068617665204e4f5420737461727465642c20706c60008201527f656173652062652070617469656e742e00000000000000000000000000000000602082015250565b60006148d360308361365b565b91506148de82614877565b604082019050919050565b60006020820190508181036000830152614902816148c6565b9050919050565b7f596f7520617265206e6f7420696e207468652077686974656c69737420746f2060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061496560248361365b565b915061497082614909565b604082019050919050565b6000602082019050818103600083015261499481614958565b9050919050565b7f4578636565646564207072652d73616c6520737570706c790000000000000000600082015250565b60006149d160188361365b565b91506149dc8261499b565b602082019050919050565b60006020820190508181036000830152614a00816149c4565b9050919050565b7f496e73756666696369656e742072657365727665642070726573616c6520717560008201527f616e746974790000000000000000000000000000000000000000000000000000602082015250565b6000614a6360268361365b565b9150614a6e82614a07565b604082019050919050565b60006020820190508181036000830152614a9281614a56565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614af560268361365b565b9150614b0082614a99565b604082019050919050565b60006020820190508181036000830152614b2481614ae8565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614b87602c8361365b565b9150614b9282614b2b565b604082019050919050565b60006020820190508181036000830152614bb681614b7a565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614c1960298361365b565b9150614c2482614bbd565b604082019050919050565b60006020820190508181036000830152614c4881614c0c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cab60248361365b565b9150614cb682614c4f565b604082019050919050565b60006020820190508181036000830152614cda81614c9e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d1b8261354d565b9150614d268361354d565b925082614d3657614d35614ce1565b5b828204905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614d9d60328361365b565b9150614da882614d41565b604082019050919050565b60006020820190508181036000830152614dcc81614d90565b9050919050565b6000614dde8261354d565b9150614de98361354d565b925082614df957614df8614ce1565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614e2b82614e04565b614e358185614e0f565b9350614e4581856020860161366c565b614e4e8161369f565b840191505092915050565b6000608082019050614e6e6000830187613796565b614e7b6020830186613796565b614e886040830185613557565b8181036060830152614e9a8184614e20565b905095945050505050565b600081519050614eb4816135c1565b92915050565b600060208284031215614ed057614ecf61358b565b5b6000614ede84828501614ea5565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614f1d60208361365b565b9150614f2882614ee7565b602082019050919050565b60006020820190508181036000830152614f4c81614f10565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614f89601c8361365b565b9150614f9482614f53565b602082019050919050565b60006020820190508181036000830152614fb881614f7c565b905091905056fea2646970667358221220edbf41aef1514e910de2e3a91571fe1a052ab2da32cb5c46b3dcb3c6fd6c31ac64736f6c63430008090033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000037697066733a2f2f516d58703447577a68514b514e797a4d744a687975514135434c686d343233713754526844344b723242645a55432f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d61533253346b3771753863794851315168426652363263395a4a395a4a4c4a743658746579533438365a736a2f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102ad5760003560e01c80637eff4b6711610175578063a475b5dd116100dc578063c87b56dd11610095578063f2c4ce1e1161006f578063f2c4ce1e14610a5c578063f2fde38b14610a85578063fdea8e0b14610aae578063fe60d12c14610ad9576102ad565b8063c87b56dd146109b2578063e3991c4b146109ef578063e985e9c514610a1f576102ad565b8063a475b5dd146108c8578063b3a196e9146108df578063b88d4fde1461090a578063b94805a214610933578063b96502cb1461095e578063c668286214610987576102ad565b806395d89b411161012e57806395d89b41146107b057806396cc95b1146107db57806398f1312e1461080b5780639abc8320146108365780639b19251a14610861578063a22cb4651461089f576102ad565b80637eff4b67146106c4578063819b25ba146106ef5780638970cdff146107185780638da5cb5b1461074357806391cca3db1461076e578063953c802514610799576102ad565b80633ccfd60b116102195780636352211e116101d25780636352211e146105b857806370a08231146105f5578063715018a6146106325780637445968e14610649578063791a2519146106725780637d7eee421461069b576102ad565b80633ccfd60b146104d25780634070a0c9146104e95780634256dbe31461051257806342842e0e1461053b578063518302271461056457806355f804b31461058f576102ad565b806318160ddd1161026b57806318160ddd146103d65780631faf046b14610401578063214405fc1461043e57806323b872dd1461046757806332cb6b0c1461049057806334393743146104bb576102ad565b80620e7fa8146102b257806301ffc9a7146102dd57806306fdde031461031a578063081812fc14610345578063081c8c4414610382578063095ea7b3146103ad575b600080fd5b3480156102be57600080fd5b506102c7610b04565b6040516102d49190613566565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff91906135ed565b610b0a565b6040516103119190613635565b60405180910390f35b34801561032657600080fd5b5061032f610bec565b60405161033c91906136e9565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613737565b610c7e565b60405161037991906137a5565b60405180910390f35b34801561038e57600080fd5b50610397610d03565b6040516103a491906136e9565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906137ec565b610d91565b005b3480156103e257600080fd5b506103eb610ea9565b6040516103f89190613566565b60405180910390f35b34801561040d57600080fd5b506104286004803603810190610423919061382c565b610eaf565b6040516104359190613566565b60405180910390f35b34801561044a57600080fd5b50610465600480360381019061046091906137ec565b610efb565b005b34801561047357600080fd5b5061048e60048036038101906104899190613859565b610fff565b005b34801561049c57600080fd5b506104a561105f565b6040516104b29190613566565b60405180910390f35b3480156104c757600080fd5b506104d0611065565b005b3480156104de57600080fd5b506104e761110d565b005b3480156104f557600080fd5b50610510600480360381019061050b9190613737565b611332565b005b34801561051e57600080fd5b5061053960048036038101906105349190613737565b6113b8565b005b34801561054757600080fd5b50610562600480360381019061055d9190613859565b61143e565b005b34801561057057600080fd5b5061057961145e565b6040516105869190613635565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b191906139e1565b611471565b005b3480156105c457600080fd5b506105df60048036038101906105da9190613737565b611507565b6040516105ec91906137a5565b60405180910390f35b34801561060157600080fd5b5061061c6004803603810190610617919061382c565b6115b9565b6040516106299190613566565b60405180910390f35b34801561063e57600080fd5b50610647611671565b005b34801561065557600080fd5b50610670600480360381019061066b9190613bb5565b6116f9565b005b34801561067e57600080fd5b5061069960048036038101906106949190613737565b611851565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190613737565b6118d7565b005b3480156106d057600080fd5b506106d961195d565b6040516106e69190613566565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190613737565b611963565b005b34801561072457600080fd5b5061072d611a98565b60405161073a91906137a5565b60405180910390f35b34801561074f57600080fd5b50610758611abe565b60405161076591906137a5565b60405180910390f35b34801561077a57600080fd5b50610783611ae8565b60405161079091906137a5565b60405180910390f35b3480156107a557600080fd5b506107ae611b0e565b005b3480156107bc57600080fd5b506107c5611bb6565b6040516107d291906136e9565b60405180910390f35b6107f560048036038101906107f09190613737565b611c48565b6040516108029190613635565b60405180910390f35b34801561081757600080fd5b50610820611da1565b60405161082d9190613566565b60405180910390f35b34801561084257600080fd5b5061084b611da7565b60405161085891906136e9565b60405180910390f35b34801561086d57600080fd5b506108886004803603810190610883919061382c565b611e35565b604051610896929190613c2d565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c19190613c82565b611e66565b005b3480156108d457600080fd5b506108dd611fe7565b005b3480156108eb57600080fd5b506108f4612080565b6040516109019190613566565b60405180910390f35b34801561091657600080fd5b50610931600480360381019061092c9190613d63565b612086565b005b34801561093f57600080fd5b506109486120e8565b6040516109559190613635565b60405180910390f35b34801561096a57600080fd5b5061098560048036038101906109809190613737565b6120fb565b005b34801561099357600080fd5b5061099c612181565b6040516109a991906136e9565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d49190613737565b61220f565b6040516109e691906136e9565b60405180910390f35b610a096004803603810190610a049190613737565b612368565b604051610a169190613635565b60405180910390f35b348015610a2b57600080fd5b50610a466004803603810190610a419190613de6565b6125dd565b604051610a539190613635565b60405180910390f35b348015610a6857600080fd5b50610a836004803603810190610a7e91906139e1565b612671565b005b348015610a9157600080fd5b50610aac6004803603810190610aa7919061382c565b612707565b005b348015610aba57600080fd5b50610ac36127ff565b604051610ad09190613635565b60405180910390f35b348015610ae557600080fd5b50610aee612812565b604051610afb9190613566565b60405180910390f35b60095481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bd557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610be55750610be482612818565b5b9050919050565b606060008054610bfb90613e55565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2790613e55565b8015610c745780601f10610c4957610100808354040283529160200191610c74565b820191906000526020600020905b815481529060010190602001808311610c5757829003601f168201915b5050505050905090565b6000610c8982612882565b610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90613ef9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60138054610d1090613e55565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3c90613e55565b8015610d895780601f10610d5e57610100808354040283529160200191610d89565b820191906000526020600020905b815481529060010190602001808311610d6c57829003601f168201915b505050505081565b6000610d9c82611507565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490613f8b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e2c6128ee565b73ffffffffffffffffffffffffffffffffffffffff161480610e5b5750610e5a81610e556128ee565b6125dd565b5b610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e919061401d565b60405180910390fd5b610ea483836128f6565b505050565b600b5481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b610f036128ee565b73ffffffffffffffffffffffffffffffffffffffff16610f21611abe565b73ffffffffffffffffffffffffffffffffffffffff1614610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e90614089565b60405180910390fd5b604051806040016040528060011515815260200182815250600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050505050565b61101061100a6128ee565b826129af565b61104f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110469061411b565b60405180910390fd5b61105a838383612a8d565b505050565b6120e481565b61106d6128ee565b73ffffffffffffffffffffffffffffffffffffffff1661108b611abe565b73ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890614089565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b6111156128ee565b73ffffffffffffffffffffffffffffffffffffffff16611133611abe565b73ffffffffffffffffffffffffffffffffffffffff1614611189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118090614089565b60405180910390fd5b600047905060006111b760646111a9600a85612ce990919063ffffffff16565b612cff90919063ffffffff16565b905060006111e260646111d4600f86612ce990919063ffffffff16565b612cff90919063ffffffff16565b905060006111f98385612d1590919063ffffffff16565b905060006112108383612d1590919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611258573d6000803e3d6000fd5b50600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156112c1573d6000803e3d6000fd5b50600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561132a573d6000803e3d6000fd5b505050505050565b61133a6128ee565b73ffffffffffffffffffffffffffffffffffffffff16611358611abe565b73ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590614089565b60405180910390fd5b80600c8190555050565b6113c06128ee565b73ffffffffffffffffffffffffffffffffffffffff166113de611abe565b73ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b90614089565b60405180910390fd5b8060078190555050565b61145983838360405180602001604052806000815250612086565b505050565b601260009054906101000a900460ff1681565b6114796128ee565b73ffffffffffffffffffffffffffffffffffffffff16611497611abe565b73ffffffffffffffffffffffffffffffffffffffff16146114ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e490614089565b60405180910390fd5b80601190805190602001906115039291906134aa565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a7906141ad565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561162a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116219061423f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116796128ee565b73ffffffffffffffffffffffffffffffffffffffff16611697611abe565b73ffffffffffffffffffffffffffffffffffffffff16146116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e490614089565b60405180910390fd5b6116f76000612d2b565b565b6117016128ee565b73ffffffffffffffffffffffffffffffffffffffff1661171f611abe565b73ffffffffffffffffffffffffffffffffffffffff1614611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c90614089565b60405180910390fd5b60005b825181101561184c5760405180604001604052806001151581526020018383815181106117a8576117a761425f565b5b6020026020010151815250600f60008584815181106117ca576117c961425f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050508080611844906142bd565b915050611778565b505050565b6118596128ee565b73ffffffffffffffffffffffffffffffffffffffff16611877611abe565b73ffffffffffffffffffffffffffffffffffffffff16146118cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c490614089565b60405180910390fd5b80600a8190555050565b6118df6128ee565b73ffffffffffffffffffffffffffffffffffffffff166118fd611abe565b73ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a90614089565b60405180910390fd5b8060098190555050565b600a5481565b61196b6128ee565b73ffffffffffffffffffffffffffffffffffffffff16611989611abe565b73ffffffffffffffffffffffffffffffffffffffff16146119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d690614089565b60405180910390fd5b600754811115611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b90614352565b60405180910390fd5b6000600190505b818111611a6257600081600b54611a429190614372565b9050611a4e3382612df1565b508080611a5a906142bd565b915050611a2b565b5080600b6000828254611a759190614372565b925050819055508060076000828254611a8e91906143c8565b9250508190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b166128ee565b73ffffffffffffffffffffffffffffffffffffffff16611b34611abe565b73ffffffffffffffffffffffffffffffffffffffff1614611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190614089565b60405180910390fd5b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b606060018054611bc590613e55565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf190613e55565b8015611c3e5780601f10611c1357610100808354040283529160200191611c3e565b820191906000526020600020905b815481529060010190602001808311611c2157829003601f168201915b5050505050905090565b600080600b549050601060019054906101000a900460ff16611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c969061446e565b60405180910390fd5b600c548310611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda90614500565b60405180910390fd5b6007546120e4611cf391906143c8565b8382611cff9190614372565b1115611d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d379061456c565b60405180910390fd5b82600a54611d4e919061458c565b341015611d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8790614658565b60405180910390fd5b611d9983612e0f565b915050919050565b600c5481565b60118054611db490613e55565b80601f0160208091040260200160405190810160405280929190818152602001828054611de090613e55565b8015611e2d5780601f10611e0257610100808354040283529160200191611e2d565b820191906000526020600020905b815481529060010190602001808311611e1057829003601f168201915b505050505081565b600f6020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154905082565b611e6e6128ee565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed3906146c4565b60405180910390fd5b8060056000611ee96128ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f966128ee565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fdb9190613635565b60405180910390a35050565b611fef6128ee565b73ffffffffffffffffffffffffffffffffffffffff1661200d611abe565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a90614089565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b60085481565b6120976120916128ee565b836129af565b6120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd9061411b565b60405180910390fd5b6120e284848484612e83565b50505050565b601060019054906101000a900460ff1681565b6121036128ee565b73ffffffffffffffffffffffffffffffffffffffff16612121611abe565b73ffffffffffffffffffffffffffffffffffffffff1614612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e90614089565b60405180910390fd5b8060088190555050565b6014805461218e90613e55565b80601f01602080910402602001604051908101604052809291908181526020018280546121ba90613e55565b80156122075780601f106121dc57610100808354040283529160200191612207565b820191906000526020600020905b8154815290600101906020018083116121ea57829003601f168201915b505050505081565b606061221a82612882565b612259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225090614756565b60405180910390fd5b60001515601260009054906101000a900460ff1615151415612307576013805461228290613e55565b80601f01602080910402602001604051908101604052809291908181526020018280546122ae90613e55565b80156122fb5780601f106122d0576101008083540402835291602001916122fb565b820191906000526020600020905b8154815290600101906020018083116122de57829003601f168201915b50505050509050612363565b6000612311612edf565b90506000815111612331576040518060200160405280600081525061235f565b8061233b84612f71565b601460405160200161234f93929190614846565b6040516020818303038152906040525b9150505b919050565b600080600b549050601060009054906101000a900460ff166123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b6906148e9565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1661244e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124459061497b565b60405180910390fd5b600854838261245d9190614372565b111561249e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612495906149e7565b60405180910390fd5b82600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541015612523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251a90614a79565b60405180910390fd5b82600954612531919061458c565b341015612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614658565b60405180910390fd5b82600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282546125c591906143c8565b925050819055506125d583612e0f565b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6126796128ee565b73ffffffffffffffffffffffffffffffffffffffff16612697611abe565b73ffffffffffffffffffffffffffffffffffffffff16146126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e490614089565b60405180910390fd5b80601390805190602001906127039291906134aa565b5050565b61270f6128ee565b73ffffffffffffffffffffffffffffffffffffffff1661272d611abe565b73ffffffffffffffffffffffffffffffffffffffff1614612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277a90614089565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ea90614b0b565b60405180910390fd5b6127fc81612d2b565b50565b601060009054906101000a900460ff1681565b60075481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661296983611507565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006129ba82612882565b6129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f090614b9d565b60405180910390fd5b6000612a0483611507565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a7357508373ffffffffffffffffffffffffffffffffffffffff16612a5b84610c7e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a845750612a8381856125dd565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612aad82611507565b73ffffffffffffffffffffffffffffffffffffffff1614612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa90614c2f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a90614cc1565b60405180910390fd5b612b7e8383836130d2565b612b896000826128f6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bd991906143c8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c309190614372565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612cf7919061458c565b905092915050565b60008183612d0d9190614d10565b905092915050565b60008183612d2391906143c8565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612e0b8282604051806020016040528060008152506130d7565b5050565b600080600190505b828111612e6057600081600b54612e2e9190614372565b90506120e4811015612e4c57612e4b612e456128ee565b82612df1565b5b508080612e58906142bd565b915050612e17565b5081600b6000828254612e739190614372565b9250508190555060019050919050565b612e8e848484612a8d565b612e9a84848484613132565b612ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed090614db3565b60405180910390fd5b50505050565b606060118054612eee90613e55565b80601f0160208091040260200160405190810160405280929190818152602001828054612f1a90613e55565b8015612f675780601f10612f3c57610100808354040283529160200191612f67565b820191906000526020600020905b815481529060010190602001808311612f4a57829003601f168201915b5050505050905090565b60606000821415612fb9576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130cd565b600082905060005b60008214612feb578080612fd4906142bd565b915050600a82612fe49190614d10565b9150612fc1565b60008167ffffffffffffffff811115613007576130066138b6565b5b6040519080825280601f01601f1916602001820160405280156130395781602001600182028036833780820191505090505b5090505b600085146130c65760018261305291906143c8565b9150600a856130619190614dd3565b603061306d9190614372565b60f81b8183815181106130835761308261425f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130bf9190614d10565b945061303d565b8093505050505b919050565b505050565b6130e183836132c9565b6130ee6000848484613132565b61312d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312490614db3565b60405180910390fd5b505050565b60006131538473ffffffffffffffffffffffffffffffffffffffff16613497565b156132bc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261317c6128ee565b8786866040518563ffffffff1660e01b815260040161319e9493929190614e59565b602060405180830381600087803b1580156131b857600080fd5b505af19250505080156131e957506040513d601f19601f820116820180604052508101906131e69190614eba565b60015b61326c573d8060008114613219576040519150601f19603f3d011682016040523d82523d6000602084013e61321e565b606091505b50600081511415613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325b90614db3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132c1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333090614f33565b60405180910390fd5b61334281612882565b15613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990614f9f565b60405180910390fd5b61338e600083836130d2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133de9190614372565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546134b690613e55565b90600052602060002090601f0160209004810192826134d8576000855561351f565b82601f106134f157805160ff191683800117855561351f565b8280016001018555821561351f579182015b8281111561351e578251825591602001919060010190613503565b5b50905061352c9190613530565b5090565b5b80821115613549576000816000905550600101613531565b5090565b6000819050919050565b6135608161354d565b82525050565b600060208201905061357b6000830184613557565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135ca81613595565b81146135d557600080fd5b50565b6000813590506135e7816135c1565b92915050565b6000602082840312156136035761360261358b565b5b6000613611848285016135d8565b91505092915050565b60008115159050919050565b61362f8161361a565b82525050565b600060208201905061364a6000830184613626565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561368a57808201518184015260208101905061366f565b83811115613699576000848401525b50505050565b6000601f19601f8301169050919050565b60006136bb82613650565b6136c5818561365b565b93506136d581856020860161366c565b6136de8161369f565b840191505092915050565b6000602082019050818103600083015261370381846136b0565b905092915050565b6137148161354d565b811461371f57600080fd5b50565b6000813590506137318161370b565b92915050565b60006020828403121561374d5761374c61358b565b5b600061375b84828501613722565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061378f82613764565b9050919050565b61379f81613784565b82525050565b60006020820190506137ba6000830184613796565b92915050565b6137c981613784565b81146137d457600080fd5b50565b6000813590506137e6816137c0565b92915050565b600080604083850312156138035761380261358b565b5b6000613811858286016137d7565b925050602061382285828601613722565b9150509250929050565b6000602082840312156138425761384161358b565b5b6000613850848285016137d7565b91505092915050565b6000806000606084860312156138725761387161358b565b5b6000613880868287016137d7565b9350506020613891868287016137d7565b92505060406138a286828701613722565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138ee8261369f565b810181811067ffffffffffffffff8211171561390d5761390c6138b6565b5b80604052505050565b6000613920613581565b905061392c82826138e5565b919050565b600067ffffffffffffffff82111561394c5761394b6138b6565b5b6139558261369f565b9050602081019050919050565b82818337600083830152505050565b600061398461397f84613931565b613916565b9050828152602081018484840111156139a05761399f6138b1565b5b6139ab848285613962565b509392505050565b600082601f8301126139c8576139c76138ac565b5b81356139d8848260208601613971565b91505092915050565b6000602082840312156139f7576139f661358b565b5b600082013567ffffffffffffffff811115613a1557613a14613590565b5b613a21848285016139b3565b91505092915050565b600067ffffffffffffffff821115613a4557613a446138b6565b5b602082029050602081019050919050565b600080fd5b6000613a6e613a6984613a2a565b613916565b90508083825260208201905060208402830185811115613a9157613a90613a56565b5b835b81811015613aba5780613aa688826137d7565b845260208401935050602081019050613a93565b5050509392505050565b600082601f830112613ad957613ad86138ac565b5b8135613ae9848260208601613a5b565b91505092915050565b600067ffffffffffffffff821115613b0d57613b0c6138b6565b5b602082029050602081019050919050565b6000613b31613b2c84613af2565b613916565b90508083825260208201905060208402830185811115613b5457613b53613a56565b5b835b81811015613b7d5780613b698882613722565b845260208401935050602081019050613b56565b5050509392505050565b600082601f830112613b9c57613b9b6138ac565b5b8135613bac848260208601613b1e565b91505092915050565b60008060408385031215613bcc57613bcb61358b565b5b600083013567ffffffffffffffff811115613bea57613be9613590565b5b613bf685828601613ac4565b925050602083013567ffffffffffffffff811115613c1757613c16613590565b5b613c2385828601613b87565b9150509250929050565b6000604082019050613c426000830185613626565b613c4f6020830184613557565b9392505050565b613c5f8161361a565b8114613c6a57600080fd5b50565b600081359050613c7c81613c56565b92915050565b60008060408385031215613c9957613c9861358b565b5b6000613ca7858286016137d7565b9250506020613cb885828601613c6d565b9150509250929050565b600067ffffffffffffffff821115613cdd57613cdc6138b6565b5b613ce68261369f565b9050602081019050919050565b6000613d06613d0184613cc2565b613916565b905082815260208101848484011115613d2257613d216138b1565b5b613d2d848285613962565b509392505050565b600082601f830112613d4a57613d496138ac565b5b8135613d5a848260208601613cf3565b91505092915050565b60008060008060808587031215613d7d57613d7c61358b565b5b6000613d8b878288016137d7565b9450506020613d9c878288016137d7565b9350506040613dad87828801613722565b925050606085013567ffffffffffffffff811115613dce57613dcd613590565b5b613dda87828801613d35565b91505092959194509250565b60008060408385031215613dfd57613dfc61358b565b5b6000613e0b858286016137d7565b9250506020613e1c858286016137d7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e6d57607f821691505b60208210811415613e8157613e80613e26565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ee3602c8361365b565b9150613eee82613e87565b604082019050919050565b60006020820190508181036000830152613f1281613ed6565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f7560218361365b565b9150613f8082613f19565b604082019050919050565b60006020820190508181036000830152613fa481613f68565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061400760388361365b565b915061401282613fab565b604082019050919050565b6000602082019050818103600083015261403681613ffa565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061407360208361365b565b915061407e8261403d565b602082019050919050565b600060208201905081810360008301526140a281614066565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061410560318361365b565b9150614110826140a9565b604082019050919050565b60006020820190508181036000830152614134816140f8565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061419760298361365b565b91506141a28261413b565b604082019050919050565b600060208201905081810360008301526141c68161418a565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614229602a8361365b565b9150614234826141cd565b604082019050919050565b600060208201905081810360008301526142588161421c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142c88261354d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142fb576142fa61428e565b5b600182019050919050565b7f45786365656473207265736572766564206669676874657220737570706c7900600082015250565b600061433c601f8361365b565b915061434782614306565b602082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b600061437d8261354d565b91506143888361354d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143bd576143bc61428e565b5b828201905092915050565b60006143d38261354d565b91506143de8361354d565b9250828210156143f1576143f061428e565b5b828203905092915050565b7f546865207075626c696373616c652068617665204e4f5420737461727465642c60008201527f20706c656173652062652070617469656e742e00000000000000000000000000602082015250565b600061445860338361365b565b9150614463826143fc565b604082019050919050565b600060208201905081810360008301526144878161444b565b9050919050565b7f596f752061726520747279696e6720746f206d696e7420746f6f206d616e792060008201527f617420612074696d650000000000000000000000000000000000000000000000602082015250565b60006144ea60298361365b565b91506144f58261448e565b604082019050919050565b60006020820190508181036000830152614519816144dd565b9050919050565b7f457863656564656420746f74616c20737570706c790000000000000000000000600082015250565b600061455660158361365b565b915061456182614520565b602082019050919050565b6000602082019050818103600083015261458581614549565b9050919050565b60006145978261354d565b91506145a28361354d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145db576145da61428e565b5b828202905092915050565b7f45746865722076616c75652073656e74206973206e6f7420737566666963696560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b600061464260228361365b565b915061464d826145e6565b604082019050919050565b6000602082019050818103600083015261467181614635565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006146ae60198361365b565b91506146b982614678565b602082019050919050565b600060208201905081810360008301526146dd816146a1565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614740602f8361365b565b915061474b826146e4565b604082019050919050565b6000602082019050818103600083015261476f81614733565b9050919050565b600081905092915050565b600061478c82613650565b6147968185614776565b93506147a681856020860161366c565b80840191505092915050565b60008190508160005260206000209050919050565b600081546147d481613e55565b6147de8186614776565b945060018216600081146147f9576001811461480a5761483d565b60ff1983168652818601935061483d565b614813856147b2565b60005b8381101561483557815481890152600182019150602081019050614816565b838801955050505b50505092915050565b60006148528286614781565b915061485e8285614781565b915061486a82846147c7565b9150819050949350505050565b7f5468652070726573616c652068617665204e4f5420737461727465642c20706c60008201527f656173652062652070617469656e742e00000000000000000000000000000000602082015250565b60006148d360308361365b565b91506148de82614877565b604082019050919050565b60006020820190508181036000830152614902816148c6565b9050919050565b7f596f7520617265206e6f7420696e207468652077686974656c69737420746f2060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b600061496560248361365b565b915061497082614909565b604082019050919050565b6000602082019050818103600083015261499481614958565b9050919050565b7f4578636565646564207072652d73616c6520737570706c790000000000000000600082015250565b60006149d160188361365b565b91506149dc8261499b565b602082019050919050565b60006020820190508181036000830152614a00816149c4565b9050919050565b7f496e73756666696369656e742072657365727665642070726573616c6520717560008201527f616e746974790000000000000000000000000000000000000000000000000000602082015250565b6000614a6360268361365b565b9150614a6e82614a07565b604082019050919050565b60006020820190508181036000830152614a9281614a56565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614af560268361365b565b9150614b0082614a99565b604082019050919050565b60006020820190508181036000830152614b2481614ae8565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614b87602c8361365b565b9150614b9282614b2b565b604082019050919050565b60006020820190508181036000830152614bb681614b7a565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614c1960298361365b565b9150614c2482614bbd565b604082019050919050565b60006020820190508181036000830152614c4881614c0c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cab60248361365b565b9150614cb682614c4f565b604082019050919050565b60006020820190508181036000830152614cda81614c9e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d1b8261354d565b9150614d268361354d565b925082614d3657614d35614ce1565b5b828204905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614d9d60328361365b565b9150614da882614d41565b604082019050919050565b60006020820190508181036000830152614dcc81614d90565b9050919050565b6000614dde8261354d565b9150614de98361354d565b925082614df957614df8614ce1565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614e2b82614e04565b614e358185614e0f565b9350614e4581856020860161366c565b614e4e8161369f565b840191505092915050565b6000608082019050614e6e6000830187613796565b614e7b6020830186613796565b614e886040830185613557565b8181036060830152614e9a8184614e20565b905095945050505050565b600081519050614eb4816135c1565b92915050565b600060208284031215614ed057614ecf61358b565b5b6000614ede84828501614ea5565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614f1d60208361365b565b9150614f2882614ee7565b602082019050919050565b60006020820190508181036000830152614f4c81614f10565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614f89601c8361365b565b9150614f9482614f53565b602082019050919050565b60006020820190508181036000830152614fb881614f7c565b905091905056fea2646970667358221220edbf41aef1514e910de2e3a91571fe1a052ab2da32cb5c46b3dcb3c6fd6c31ac64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000037697066733a2f2f516d58703447577a68514b514e797a4d744a687975514135434c686d343233713754526844344b723242645a55432f6f0000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d61533253346b3771753863794851315168426652363263395a4a395a4a4c4a743658746579533438365a736a2f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _baseuri (string): ipfs://QmXp4GWzhQKQNyzMtJhyuQA5CLhm423q7TRhD4Kr2BdZUC/o
Arg [1] : _NotRevealedUri (string): ipfs://QmaS2S4k7qu8cyHQ1QhBfR62c9ZJ9ZJLJt6XteyS486Zsj/hidden.json
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000037
Arg [3] : 697066733a2f2f516d58703447577a68514b514e797a4d744a68797551413543
Arg [4] : 4c686d343233713754526844344b723242645a55432f6f000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [6] : 697066733a2f2f516d61533253346b3771753863794851315168426652363263
Arg [7] : 395a4a395a4a4c4a743658746579533438365a736a2f68696464656e2e6a736f
Arg [8] : 6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
41984:5847:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42256:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27517:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28462:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30027:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42882:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29550:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42357:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44866:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44700:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30917:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42104:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45362:79;;;;;;;;;;;;;:::i;:::-;;46095:432;;;;;;;;;;;;;:::i;:::-;;45994:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45657:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31327:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42847:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47010:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28156:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27886:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41295:94;;;;;;;;;;;;;:::i;:::-;;45020:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45872:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45760:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42303:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46535:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42515:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40644:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42431:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45266:88;;;;;;;;;;;;;:::i;:::-;;28631:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44188:504;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42390:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42819:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42696:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;30320:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45456:69;;;;;;;;;;;;;:::i;:::-;;42214:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31583:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42786:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45533:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42917:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47118:563;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43516:664;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30686:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46878:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41544:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42760:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42152:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42256:40;;;;:::o;27517:305::-;27619:4;27671:25;27656:40;;;:11;:40;;;;:105;;;;27728:33;27713:48;;;:11;:48;;;;27656:105;:158;;;;27778:36;27802:11;27778:23;:36::i;:::-;27656:158;27636:178;;27517:305;;;:::o;28462:100::-;28516:13;28549:5;28542:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28462:100;:::o;30027:221::-;30103:7;30131:16;30139:7;30131;:16::i;:::-;30123:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30216:15;:24;30232:7;30216:24;;;;;;;;;;;;;;;;;;;;;30209:31;;30027:221;;;:::o;42882:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29550:411::-;29631:13;29647:23;29662:7;29647:14;:23::i;:::-;29631:39;;29695:5;29689:11;;:2;:11;;;;29681:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29789:5;29773:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29798:37;29815:5;29822:12;:10;:12::i;:::-;29798:16;:37::i;:::-;29773:62;29751:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29932:21;29941:2;29945:7;29932:8;:21::i;:::-;29620:341;29550:411;;:::o;42357:26::-;;;;:::o;44866:146::-;44941:7;44968:9;:19;44978:8;44968:19;;;;;;;;;;;;;;;:36;;;44961:43;;44866:146;;;:::o;44700:154::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44813:33:::1;;;;;;;;44828:4;44813:33;;;;;;44834:11;44813:33;;::::0;44791:9:::1;:19;44801:8;44791:19;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44700:154:::0;;:::o;30917:339::-;31112:41;31131:12;:10;:12::i;:::-;31145:7;31112:18;:41::i;:::-;31104:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31220:28;31230:4;31236:2;31240:7;31220:9;:28::i;:::-;30917:339;;;:::o;42104:41::-;42141:4;42104:41;:::o;45362:79::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45426:7:::1;;;;;;;;;;;45425:8;45415:7;;:18;;;;;;;;;;;;;;;;;;45362:79::o:0;46095:432::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46143:15:::1;46161:21;46143:39;;46193:16;46212:24;46232:3;46212:15;46224:2;46212:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;46193:43;;46248:15;46266:24;46286:3;46266:15;46278:2;46266:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;46248:42;;46302:11;46316:21;46328:8;46316:7;:11;;:21;;;;:::i;:::-;46302:35;;46348:18;46369:16;46377:7;46369:3;:7;;:16;;;;:::i;:::-;46348:37;;46405:10;46397:28;;:40;46426:10;46397:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46456:3;;;;;;;;;;;46448:21;;:31;46470:8;46448:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46498:2;;;;;;;;;;;46490:20;;:29;46511:7;46490:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46132:395;;;;;46095:432::o:0;45994:93::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46071:8:::1;46060;:19;;;;45994:93:::0;:::o;45657:95::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45735:9:::1;45724:8;:20;;;;45657:95:::0;:::o;31327:185::-;31465:39;31482:4;31488:2;31492:7;31465:39;;;;;;;;;;;;:16;:39::i;:::-;31327:185;;;:::o;42847:28::-;;;;;;;;;;;;;:::o;47010:98::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47092:8:::1;47082:7;:18;;;;;;;;;;;;:::i;:::-;;47010:98:::0;:::o;28156:239::-;28228:7;28248:13;28264:7;:16;28272:7;28264:16;;;;;;;;;;;;;;;;;;;;;28248:32;;28316:1;28299:19;;:5;:19;;;;28291:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28382:5;28375:12;;;28156:239;;;:::o;27886:208::-;27958:7;28003:1;27986:19;;:5;:19;;;;27978:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28070:9;:16;28080:5;28070:16;;;;;;;;;;;;;;;;28063:23;;27886:208;;;:::o;41295:94::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41360:21:::1;41378:1;41360:9;:21::i;:::-;41295:94::o:0;45020:238::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45134:6:::1;45129:122;45150:4;:11;45146:1;:15;45129:122;;;45204:35;;;;;;;;45219:4;45204:35;;;;;;45225:10;45236:1;45225:13;;;;;;;;:::i;:::-;;;;;;;;45204:35;;::::0;45183:9:::1;:18;45193:4;45198:1;45193:7;;;;;;;;:::i;:::-;;;;;;;;45183:18;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45163:3;;;;;:::i;:::-;;;;45129:122;;;;45020:238:::0;;:::o;45872:110::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45965:9:::1;45947:15;:27;;;;45872:110:::0;:::o;45760:104::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45847:9:::1;45832:12;:24;;;;45760:104:::0;:::o;42303:43::-;;;;:::o;46535:335::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46608:8:::1;;46601:3;:15;;46593:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46669:9;46681:1;46669:13;;46664:144;46689:3;46684:1;:8;46664:144;;46714:17;46748:1;46734:11;;:15;;;;:::i;:::-;46714:35;;46764:32;46774:10;46786:9;46764;:32::i;:::-;46699:109;46694:3;;;;;:::i;:::-;;;;46664:144;;;;46833:3;46818:11;;:18;;;;;;;:::i;:::-;;;;;;;;46859:3;46847:8;;:15;;;;;;;:::i;:::-;;;;;;;;46535:335:::0;:::o;42515:62::-;;;;;;;;;;;;;:::o;40644:87::-;40690:7;40717:6;;;;;;;;;;;40710:13;;40644:87;:::o;42431:63::-;;;;;;;;;;;;;:::o;45266:88::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45336:10:::1;;;;;;;;;;;45335:11;45322:10;;:24;;;;;;;;;;;;;;;;;;45266:88::o:0;28631:104::-;28687:13;28720:7;28713:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28631:104;:::o;44188:504::-;44249:4;44266:21;44290:11;;44266:35;;44320:10;;;;;;;;;;;44312:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;44411:8;;44405:3;:14;44397:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44519:8;;42141:4;44506:21;;;;:::i;:::-;44499:3;44483:13;:19;;;;:::i;:::-;:44;;44475:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44603:3;44585:15;;:21;;;;:::i;:::-;44572:9;:34;;44564:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;44670:14;44680:3;44670:9;:14::i;:::-;44663:21;;;44188:504;;;:::o;42390:28::-;;;;:::o;42819:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42696:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30320:295::-;30435:12;:10;:12::i;:::-;30423:24;;:8;:24;;;;30415:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30535:8;30490:18;:32;30509:12;:10;:12::i;:::-;30490:32;;;;;;;;;;;;;;;:42;30523:8;30490:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;30588:8;30559:48;;30574:12;:10;:12::i;:::-;30559:48;;;30598:8;30559:48;;;;;;:::i;:::-;;;;;;;;30320:295;;:::o;45456:69::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45513:4:::1;45502:8;;:15;;;;;;;;;;;;;;;;;;45456:69::o:0;42214:35::-;;;;:::o;31583:328::-;31758:41;31777:12;:10;:12::i;:::-;31791:7;31758:18;:41::i;:::-;31750:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31864:39;31878:4;31884:2;31888:7;31897:5;31864:13;:39::i;:::-;31583:328;;;;:::o;42786:22::-;;;;;;;;;;;;;:::o;45533:116::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45627:14:::1;45611:13;:30;;;;45533:116:::0;:::o;42917:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47118:563::-;47236:13;47289:16;47297:7;47289;:16::i;:::-;47267:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;47408:5;47396:17;;:8;;;;;;;;;;;:17;;;47393:68;;;47435:14;47428:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47393:68;47473:28;47504:10;:8;:10::i;:::-;47473:41;;47563:1;47538:14;47532:28;:32;:141;;;;;;;;;;;;;;;;;47604:14;47620:18;:7;:16;:18::i;:::-;47640:13;47587:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47532:141;47525:148;;;47118:563;;;;:::o;43516:664::-;43574:4;43591:21;43615:11;;43591:35;;43645:7;;;;;;;;;;;43637:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43724:9;:21;43734:10;43724:21;;;;;;;;;;;;;;;:32;;;;;;;;;;;;43716:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;43847:13;;43840:3;43824:13;:19;;;;:::i;:::-;:36;;43816:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43950:3;43908:9;:21;43918:10;43908:21;;;;;;;;;;;;;;;:38;;;:45;;43900:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;44043:3;44028:12;;:18;;;;:::i;:::-;44015:9;:31;;44007:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44137:3;44095:9;:21;44105:10;44095:21;;;;;;;;;;;;;;;:38;;;:45;;;;;;;:::i;:::-;;;;;;;;44158:14;44168:3;44158:9;:14::i;:::-;44151:21;;;43516:664;;;:::o;30686:164::-;30783:4;30807:18;:25;30826:5;30807:25;;;;;;;;;;;;;;;:35;30833:8;30807:35;;;;;;;;;;;;;;;;;;;;;;;;;30800:42;;30686:164;;;;:::o;46878:124::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46979:15:::1;46962:14;:32;;;;;;;;;;;;:::i;:::-;;46878:124:::0;:::o;41544:192::-;40875:12;:10;:12::i;:::-;40864:23;;:7;:5;:7::i;:::-;:23;;;40856:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41653:1:::1;41633:22;;:8;:22;;;;41625:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41709:19;41719:8;41709:9;:19::i;:::-;41544:192:::0;:::o;42760:19::-;;;;;;;;;;;;;:::o;42152:29::-;;;;:::o;19648:157::-;19733:4;19772:25;19757:40;;;:11;:40;;;;19750:47;;19648:157;;;:::o;33421:127::-;33486:4;33538:1;33510:30;;:7;:16;33518:7;33510:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33503:37;;33421:127;;;:::o;25971:98::-;26024:7;26051:10;26044:17;;25971:98;:::o;37403:174::-;37505:2;37478:15;:24;37494:7;37478:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37561:7;37557:2;37523:46;;37532:23;37547:7;37532:14;:23::i;:::-;37523:46;;;;;;;;;;;;37403:174;;:::o;33715:348::-;33808:4;33833:16;33841:7;33833;:16::i;:::-;33825:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33909:13;33925:23;33940:7;33925:14;:23::i;:::-;33909:39;;33978:5;33967:16;;:7;:16;;;:51;;;;34011:7;33987:31;;:20;33999:7;33987:11;:20::i;:::-;:31;;;33967:51;:87;;;;34022:32;34039:5;34046:7;34022:16;:32::i;:::-;33967:87;33959:96;;;33715:348;;;;:::o;36707:578::-;36866:4;36839:31;;:23;36854:7;36839:14;:23::i;:::-;:31;;;36831:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36949:1;36935:16;;:2;:16;;;;36927:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37005:39;37026:4;37032:2;37036:7;37005:20;:39::i;:::-;37109:29;37126:1;37130:7;37109:8;:29::i;:::-;37170:1;37151:9;:15;37161:4;37151:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37199:1;37182:9;:13;37192:2;37182:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37230:2;37211:7;:16;37219:7;37211:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37269:7;37265:2;37250:27;;37259:4;37250:27;;;;;;;;;;;;36707:578;;;:::o;5513:98::-;5571:7;5602:1;5598;:5;;;;:::i;:::-;5591:12;;5513:98;;;;:::o;5912:::-;5970:7;6001:1;5997;:5;;;;:::i;:::-;5990:12;;5912:98;;;;:::o;5156:::-;5214:7;5245:1;5241;:5;;;;:::i;:::-;5234:12;;5156:98;;;;:::o;41744:173::-;41800:16;41819:6;;;;;;;;;;;41800:25;;41845:8;41836:6;;:17;;;;;;;;;;;;;;;;;;41900:8;41869:40;;41890:8;41869:40;;;;;;;;;;;;41789:128;41744:173;:::o;34405:110::-;34481:26;34491:2;34495:7;34481:26;;;;;;;;;;;;:9;:26::i;:::-;34405:110;;:::o;43206:302::-;43256:4;43278:9;43290:1;43278:13;;43273:177;43298:3;43293:1;:8;43273:177;;43323:18;43358:1;43344:11;;:15;;;;:::i;:::-;43323:36;;42141:4;43378:10;:23;43374:64;;;43403:35;43413:12;:10;:12::i;:::-;43427:10;43403:9;:35::i;:::-;43374:64;43308:142;43303:3;;;;;:::i;:::-;;;;43273:177;;;;43475:3;43460:11;;:18;;;;;;;:::i;:::-;;;;;;;;43496:4;43489:11;;43206:302;;;:::o;32793:315::-;32950:28;32960:4;32966:2;32970:7;32950:9;:28::i;:::-;32997:48;33020:4;33026:2;33030:7;33039:5;32997:22;:48::i;:::-;32989:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32793:315;;;;:::o;47718:108::-;47778:13;47811:7;47804:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47718:108;:::o;253:723::-;309:13;539:1;530:5;:10;526:53;;;557:10;;;;;;;;;;;;;;;;;;;;;526:53;589:12;604:5;589:20;;620:14;645:78;660:1;652:4;:9;645:78;;678:8;;;;;:::i;:::-;;;;709:2;701:10;;;;;:::i;:::-;;;645:78;;;733:19;765:6;755:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;733:39;;783:154;799:1;790:5;:10;783:154;;827:1;817:11;;;;;:::i;:::-;;;894:2;886:5;:10;;;;:::i;:::-;873:2;:24;;;;:::i;:::-;860:39;;843:6;850;843:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;923:2;914:11;;;;;:::i;:::-;;;783:154;;;961:6;947:21;;;;;253:723;;;;:::o;39513:126::-;;;;:::o;34742:321::-;34872:18;34878:2;34882:7;34872:5;:18::i;:::-;34923:54;34954:1;34958:2;34962:7;34971:5;34923:22;:54::i;:::-;34901:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34742:321;;;:::o;38142:799::-;38297:4;38318:15;:2;:13;;;:15::i;:::-;38314:620;;;38370:2;38354:36;;;38391:12;:10;:12::i;:::-;38405:4;38411:7;38420:5;38354:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38350:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38613:1;38596:6;:13;:18;38592:272;;;38639:60;;;;;;;;;;:::i;:::-;;;;;;;;38592:272;38814:6;38808:13;38799:6;38795:2;38791:15;38784:38;38350:529;38487:41;;;38477:51;;;:6;:51;;;;38470:58;;;;;38314:620;38918:4;38911:11;;38142:799;;;;;;;:::o;35399:382::-;35493:1;35479:16;;:2;:16;;;;35471:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35552:16;35560:7;35552;:16::i;:::-;35551:17;35543:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35614:45;35643:1;35647:2;35651:7;35614:20;:45::i;:::-;35689:1;35672:9;:13;35682:2;35672:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35720:2;35701:7;:16;35709:7;35701:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35765:7;35761:2;35740:33;;35757:1;35740:33;;;;;;;;;;;;35399:382;;:::o;9708:387::-;9768:4;9976:12;10043:7;10031:20;10023:28;;10086:1;10079:4;:8;10072:15;;;9708:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:149;805:7;845:66;838:5;834:78;823:89;;769:149;;;:::o;924:120::-;996:23;1013:5;996:23;:::i;:::-;989:5;986:34;976:62;;1034:1;1031;1024:12;976:62;924:120;:::o;1050:137::-;1095:5;1133:6;1120:20;1111:29;;1149:32;1175:5;1149:32;:::i;:::-;1050:137;;;;:::o;1193:327::-;1251:6;1300:2;1288:9;1279:7;1275:23;1271:32;1268:119;;;1306:79;;:::i;:::-;1268:119;1426:1;1451:52;1495:7;1486:6;1475:9;1471:22;1451:52;:::i;:::-;1441:62;;1397:116;1193:327;;;;:::o;1526:90::-;1560:7;1603:5;1596:13;1589:21;1578:32;;1526:90;;;:::o;1622:109::-;1703:21;1718:5;1703:21;:::i;:::-;1698:3;1691:34;1622:109;;:::o;1737:210::-;1824:4;1862:2;1851:9;1847:18;1839:26;;1875:65;1937:1;1926:9;1922:17;1913:6;1875:65;:::i;:::-;1737:210;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:307::-;2301:1;2311:113;2325:6;2322:1;2319:13;2311:113;;;2410:1;2405:3;2401:11;2395:18;2391:1;2386:3;2382:11;2375:39;2347:2;2344:1;2340:10;2335:15;;2311:113;;;2442:6;2439:1;2436:13;2433:101;;;2522:1;2513:6;2508:3;2504:16;2497:27;2433:101;2282:258;2233:307;;;:::o;2546:102::-;2587:6;2638:2;2634:7;2629:2;2622:5;2618:14;2614:28;2604:38;;2546:102;;;:::o;2654:364::-;2742:3;2770:39;2803:5;2770:39;:::i;:::-;2825:71;2889:6;2884:3;2825:71;:::i;:::-;2818:78;;2905:52;2950:6;2945:3;2938:4;2931:5;2927:16;2905:52;:::i;:::-;2982:29;3004:6;2982:29;:::i;:::-;2977:3;2973:39;2966:46;;2746:272;2654:364;;;;:::o;3024:313::-;3137:4;3175:2;3164:9;3160:18;3152:26;;3224:9;3218:4;3214:20;3210:1;3199:9;3195:17;3188:47;3252:78;3325:4;3316:6;3252:78;:::i;:::-;3244:86;;3024:313;;;;:::o;3343:122::-;3416:24;3434:5;3416:24;:::i;:::-;3409:5;3406:35;3396:63;;3455:1;3452;3445:12;3396:63;3343:122;:::o;3471:139::-;3517:5;3555:6;3542:20;3533:29;;3571:33;3598:5;3571:33;:::i;:::-;3471:139;;;;:::o;3616:329::-;3675:6;3724:2;3712:9;3703:7;3699:23;3695:32;3692:119;;;3730:79;;:::i;:::-;3692:119;3850:1;3875:53;3920:7;3911:6;3900:9;3896:22;3875:53;:::i;:::-;3865:63;;3821:117;3616:329;;;;:::o;3951:126::-;3988:7;4028:42;4021:5;4017:54;4006:65;;3951:126;;;:::o;4083:96::-;4120:7;4149:24;4167:5;4149:24;:::i;:::-;4138:35;;4083:96;;;:::o;4185:118::-;4272:24;4290:5;4272:24;:::i;:::-;4267:3;4260:37;4185:118;;:::o;4309:222::-;4402:4;4440:2;4429:9;4425:18;4417:26;;4453:71;4521:1;4510:9;4506:17;4497:6;4453:71;:::i;:::-;4309:222;;;;:::o;4537:122::-;4610:24;4628:5;4610:24;:::i;:::-;4603:5;4600:35;4590:63;;4649:1;4646;4639:12;4590:63;4537:122;:::o;4665:139::-;4711:5;4749:6;4736:20;4727:29;;4765:33;4792:5;4765:33;:::i;:::-;4665:139;;;;:::o;4810:474::-;4878:6;4886;4935:2;4923:9;4914:7;4910:23;4906:32;4903:119;;;4941:79;;:::i;:::-;4903:119;5061:1;5086:53;5131:7;5122:6;5111:9;5107:22;5086:53;:::i;:::-;5076:63;;5032:117;5188:2;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5159:118;4810:474;;;;;:::o;5290:329::-;5349:6;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5290:329;;;;:::o;5625:619::-;5702:6;5710;5718;5767:2;5755:9;5746:7;5742:23;5738:32;5735:119;;;5773:79;;:::i;:::-;5735:119;5893:1;5918:53;5963:7;5954:6;5943:9;5939:22;5918:53;:::i;:::-;5908:63;;5864:117;6020:2;6046:53;6091:7;6082:6;6071:9;6067:22;6046:53;:::i;:::-;6036:63;;5991:118;6148:2;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6119:118;5625:619;;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:117;6482:1;6479;6472:12;6496:180;6544:77;6541:1;6534:88;6641:4;6638:1;6631:15;6665:4;6662:1;6655:15;6682:281;6765:27;6787:4;6765:27;:::i;:::-;6757:6;6753:40;6895:6;6883:10;6880:22;6859:18;6847:10;6844:34;6841:62;6838:88;;;6906:18;;:::i;:::-;6838:88;6946:10;6942:2;6935:22;6725:238;6682:281;;:::o;6969:129::-;7003:6;7030:20;;:::i;:::-;7020:30;;7059:33;7087:4;7079:6;7059:33;:::i;:::-;6969:129;;;:::o;7104:308::-;7166:4;7256:18;7248:6;7245:30;7242:56;;;7278:18;;:::i;:::-;7242:56;7316:29;7338:6;7316:29;:::i;:::-;7308:37;;7400:4;7394;7390:15;7382:23;;7104:308;;;:::o;7418:154::-;7502:6;7497:3;7492;7479:30;7564:1;7555:6;7550:3;7546:16;7539:27;7418:154;;;:::o;7578:412::-;7656:5;7681:66;7697:49;7739:6;7697:49;:::i;:::-;7681:66;:::i;:::-;7672:75;;7770:6;7763:5;7756:21;7808:4;7801:5;7797:16;7846:3;7837:6;7832:3;7828:16;7825:25;7822:112;;;7853:79;;:::i;:::-;7822:112;7943:41;7977:6;7972:3;7967;7943:41;:::i;:::-;7662:328;7578:412;;;;;:::o;8010:340::-;8066:5;8115:3;8108:4;8100:6;8096:17;8092:27;8082:122;;8123:79;;:::i;:::-;8082:122;8240:6;8227:20;8265:79;8340:3;8332:6;8325:4;8317:6;8313:17;8265:79;:::i;:::-;8256:88;;8072:278;8010:340;;;;:::o;8356:509::-;8425:6;8474:2;8462:9;8453:7;8449:23;8445:32;8442:119;;;8480:79;;:::i;:::-;8442:119;8628:1;8617:9;8613:17;8600:31;8658:18;8650:6;8647:30;8644:117;;;8680:79;;:::i;:::-;8644:117;8785:63;8840:7;8831:6;8820:9;8816:22;8785:63;:::i;:::-;8775:73;;8571:287;8356:509;;;;:::o;8871:311::-;8948:4;9038:18;9030:6;9027:30;9024:56;;;9060:18;;:::i;:::-;9024:56;9110:4;9102:6;9098:17;9090:25;;9170:4;9164;9160:15;9152:23;;8871:311;;;:::o;9188:117::-;9297:1;9294;9287:12;9328:710;9424:5;9449:81;9465:64;9522:6;9465:64;:::i;:::-;9449:81;:::i;:::-;9440:90;;9550:5;9579:6;9572:5;9565:21;9613:4;9606:5;9602:16;9595:23;;9666:4;9658:6;9654:17;9646:6;9642:30;9695:3;9687:6;9684:15;9681:122;;;9714:79;;:::i;:::-;9681:122;9829:6;9812:220;9846:6;9841:3;9838:15;9812:220;;;9921:3;9950:37;9983:3;9971:10;9950:37;:::i;:::-;9945:3;9938:50;10017:4;10012:3;10008:14;10001:21;;9888:144;9872:4;9867:3;9863:14;9856:21;;9812:220;;;9816:21;9430:608;;9328:710;;;;;:::o;10061:370::-;10132:5;10181:3;10174:4;10166:6;10162:17;10158:27;10148:122;;10189:79;;:::i;:::-;10148:122;10306:6;10293:20;10331:94;10421:3;10413:6;10406:4;10398:6;10394:17;10331:94;:::i;:::-;10322:103;;10138:293;10061:370;;;;:::o;10437:311::-;10514:4;10604:18;10596:6;10593:30;10590:56;;;10626:18;;:::i;:::-;10590:56;10676:4;10668:6;10664:17;10656:25;;10736:4;10730;10726:15;10718:23;;10437:311;;;:::o;10771:710::-;10867:5;10892:81;10908:64;10965:6;10908:64;:::i;:::-;10892:81;:::i;:::-;10883:90;;10993:5;11022:6;11015:5;11008:21;11056:4;11049:5;11045:16;11038:23;;11109:4;11101:6;11097:17;11089:6;11085:30;11138:3;11130:6;11127:15;11124:122;;;11157:79;;:::i;:::-;11124:122;11272:6;11255:220;11289:6;11284:3;11281:15;11255:220;;;11364:3;11393:37;11426:3;11414:10;11393:37;:::i;:::-;11388:3;11381:50;11460:4;11455:3;11451:14;11444:21;;11331:144;11315:4;11310:3;11306:14;11299:21;;11255:220;;;11259:21;10873:608;;10771:710;;;;;:::o;11504:370::-;11575:5;11624:3;11617:4;11609:6;11605:17;11601:27;11591:122;;11632:79;;:::i;:::-;11591:122;11749:6;11736:20;11774:94;11864:3;11856:6;11849:4;11841:6;11837:17;11774:94;:::i;:::-;11765:103;;11581:293;11504:370;;;;:::o;11880:894::-;11998:6;12006;12055:2;12043:9;12034:7;12030:23;12026:32;12023:119;;;12061:79;;:::i;:::-;12023:119;12209:1;12198:9;12194:17;12181:31;12239:18;12231:6;12228:30;12225:117;;;12261:79;;:::i;:::-;12225:117;12366:78;12436:7;12427:6;12416:9;12412:22;12366:78;:::i;:::-;12356:88;;12152:302;12521:2;12510:9;12506:18;12493:32;12552:18;12544:6;12541:30;12538:117;;;12574:79;;:::i;:::-;12538:117;12679:78;12749:7;12740:6;12729:9;12725:22;12679:78;:::i;:::-;12669:88;;12464:303;11880:894;;;;;:::o;12780:320::-;12895:4;12933:2;12922:9;12918:18;12910:26;;12946:65;13008:1;12997:9;12993:17;12984:6;12946:65;:::i;:::-;13021:72;13089:2;13078:9;13074:18;13065:6;13021:72;:::i;:::-;12780:320;;;;;:::o;13106:116::-;13176:21;13191:5;13176:21;:::i;:::-;13169:5;13166:32;13156:60;;13212:1;13209;13202:12;13156:60;13106:116;:::o;13228:133::-;13271:5;13309:6;13296:20;13287:29;;13325:30;13349:5;13325:30;:::i;:::-;13228:133;;;;:::o;13367:468::-;13432:6;13440;13489:2;13477:9;13468:7;13464:23;13460:32;13457:119;;;13495:79;;:::i;:::-;13457:119;13615:1;13640:53;13685:7;13676:6;13665:9;13661:22;13640:53;:::i;:::-;13630:63;;13586:117;13742:2;13768:50;13810:7;13801:6;13790:9;13786:22;13768:50;:::i;:::-;13758:60;;13713:115;13367:468;;;;;:::o;13841:307::-;13902:4;13992:18;13984:6;13981:30;13978:56;;;14014:18;;:::i;:::-;13978:56;14052:29;14074:6;14052:29;:::i;:::-;14044:37;;14136:4;14130;14126:15;14118:23;;13841:307;;;:::o;14154:410::-;14231:5;14256:65;14272:48;14313:6;14272:48;:::i;:::-;14256:65;:::i;:::-;14247:74;;14344:6;14337:5;14330:21;14382:4;14375:5;14371:16;14420:3;14411:6;14406:3;14402:16;14399:25;14396:112;;;14427:79;;:::i;:::-;14396:112;14517:41;14551:6;14546:3;14541;14517:41;:::i;:::-;14237:327;14154:410;;;;;:::o;14583:338::-;14638:5;14687:3;14680:4;14672:6;14668:17;14664:27;14654:122;;14695:79;;:::i;:::-;14654:122;14812:6;14799:20;14837:78;14911:3;14903:6;14896:4;14888:6;14884:17;14837:78;:::i;:::-;14828:87;;14644:277;14583:338;;;;:::o;14927:943::-;15022:6;15030;15038;15046;15095:3;15083:9;15074:7;15070:23;15066:33;15063:120;;;15102:79;;:::i;:::-;15063:120;15222:1;15247:53;15292:7;15283:6;15272:9;15268:22;15247:53;:::i;:::-;15237:63;;15193:117;15349:2;15375:53;15420:7;15411:6;15400:9;15396:22;15375:53;:::i;:::-;15365:63;;15320:118;15477:2;15503:53;15548:7;15539:6;15528:9;15524:22;15503:53;:::i;:::-;15493:63;;15448:118;15633:2;15622:9;15618:18;15605:32;15664:18;15656:6;15653:30;15650:117;;;15686:79;;:::i;:::-;15650:117;15791:62;15845:7;15836:6;15825:9;15821:22;15791:62;:::i;:::-;15781:72;;15576:287;14927:943;;;;;;;:::o;15876:474::-;15944:6;15952;16001:2;15989:9;15980:7;15976:23;15972:32;15969:119;;;16007:79;;:::i;:::-;15969:119;16127:1;16152:53;16197:7;16188:6;16177:9;16173:22;16152:53;:::i;:::-;16142:63;;16098:117;16254:2;16280:53;16325:7;16316:6;16305:9;16301:22;16280:53;:::i;:::-;16270:63;;16225:118;15876:474;;;;;:::o;16356:180::-;16404:77;16401:1;16394:88;16501:4;16498:1;16491:15;16525:4;16522:1;16515:15;16542:320;16586:6;16623:1;16617:4;16613:12;16603:22;;16670:1;16664:4;16660:12;16691:18;16681:81;;16747:4;16739:6;16735:17;16725:27;;16681:81;16809:2;16801:6;16798:14;16778:18;16775:38;16772:84;;;16828:18;;:::i;:::-;16772:84;16593:269;16542:320;;;:::o;16868:231::-;17008:34;17004:1;16996:6;16992:14;16985:58;17077:14;17072:2;17064:6;17060:15;17053:39;16868:231;:::o;17105:366::-;17247:3;17268:67;17332:2;17327:3;17268:67;:::i;:::-;17261:74;;17344:93;17433:3;17344:93;:::i;:::-;17462:2;17457:3;17453:12;17446:19;;17105:366;;;:::o;17477:419::-;17643:4;17681:2;17670:9;17666:18;17658:26;;17730:9;17724:4;17720:20;17716:1;17705:9;17701:17;17694:47;17758:131;17884:4;17758:131;:::i;:::-;17750:139;;17477:419;;;:::o;17902:220::-;18042:34;18038:1;18030:6;18026:14;18019:58;18111:3;18106:2;18098:6;18094:15;18087:28;17902:220;:::o;18128:366::-;18270:3;18291:67;18355:2;18350:3;18291:67;:::i;:::-;18284:74;;18367:93;18456:3;18367:93;:::i;:::-;18485:2;18480:3;18476:12;18469:19;;18128:366;;;:::o;18500:419::-;18666:4;18704:2;18693:9;18689:18;18681:26;;18753:9;18747:4;18743:20;18739:1;18728:9;18724:17;18717:47;18781:131;18907:4;18781:131;:::i;:::-;18773:139;;18500:419;;;:::o;18925:243::-;19065:34;19061:1;19053:6;19049:14;19042:58;19134:26;19129:2;19121:6;19117:15;19110:51;18925:243;:::o;19174:366::-;19316:3;19337:67;19401:2;19396:3;19337:67;:::i;:::-;19330:74;;19413:93;19502:3;19413:93;:::i;:::-;19531:2;19526:3;19522:12;19515:19;;19174:366;;;:::o;19546:419::-;19712:4;19750:2;19739:9;19735:18;19727:26;;19799:9;19793:4;19789:20;19785:1;19774:9;19770:17;19763:47;19827:131;19953:4;19827:131;:::i;:::-;19819:139;;19546:419;;;:::o;19971:182::-;20111:34;20107:1;20099:6;20095:14;20088:58;19971:182;:::o;20159:366::-;20301:3;20322:67;20386:2;20381:3;20322:67;:::i;:::-;20315:74;;20398:93;20487:3;20398:93;:::i;:::-;20516:2;20511:3;20507:12;20500:19;;20159:366;;;:::o;20531:419::-;20697:4;20735:2;20724:9;20720:18;20712:26;;20784:9;20778:4;20774:20;20770:1;20759:9;20755:17;20748:47;20812:131;20938:4;20812:131;:::i;:::-;20804:139;;20531:419;;;:::o;20956:236::-;21096:34;21092:1;21084:6;21080:14;21073:58;21165:19;21160:2;21152:6;21148:15;21141:44;20956:236;:::o;21198:366::-;21340:3;21361:67;21425:2;21420:3;21361:67;:::i;:::-;21354:74;;21437:93;21526:3;21437:93;:::i;:::-;21555:2;21550:3;21546:12;21539:19;;21198:366;;;:::o;21570:419::-;21736:4;21774:2;21763:9;21759:18;21751:26;;21823:9;21817:4;21813:20;21809:1;21798:9;21794:17;21787:47;21851:131;21977:4;21851:131;:::i;:::-;21843:139;;21570:419;;;:::o;21995:228::-;22135:34;22131:1;22123:6;22119:14;22112:58;22204:11;22199:2;22191:6;22187:15;22180:36;21995:228;:::o;22229:366::-;22371:3;22392:67;22456:2;22451:3;22392:67;:::i;:::-;22385:74;;22468:93;22557:3;22468:93;:::i;:::-;22586:2;22581:3;22577:12;22570:19;;22229:366;;;:::o;22601:419::-;22767:4;22805:2;22794:9;22790:18;22782:26;;22854:9;22848:4;22844:20;22840:1;22829:9;22825:17;22818:47;22882:131;23008:4;22882:131;:::i;:::-;22874:139;;22601:419;;;:::o;23026:229::-;23166:34;23162:1;23154:6;23150:14;23143:58;23235:12;23230:2;23222:6;23218:15;23211:37;23026:229;:::o;23261:366::-;23403:3;23424:67;23488:2;23483:3;23424:67;:::i;:::-;23417:74;;23500:93;23589:3;23500:93;:::i;:::-;23618:2;23613:3;23609:12;23602:19;;23261:366;;;:::o;23633:419::-;23799:4;23837:2;23826:9;23822:18;23814:26;;23886:9;23880:4;23876:20;23872:1;23861:9;23857:17;23850:47;23914:131;24040:4;23914:131;:::i;:::-;23906:139;;23633:419;;;:::o;24058:180::-;24106:77;24103:1;24096:88;24203:4;24200:1;24193:15;24227:4;24224:1;24217:15;24244:180;24292:77;24289:1;24282:88;24389:4;24386:1;24379:15;24413:4;24410:1;24403:15;24430:233;24469:3;24492:24;24510:5;24492:24;:::i;:::-;24483:33;;24538:66;24531:5;24528:77;24525:103;;;24608:18;;:::i;:::-;24525:103;24655:1;24648:5;24644:13;24637:20;;24430:233;;;:::o;24669:181::-;24809:33;24805:1;24797:6;24793:14;24786:57;24669:181;:::o;24856:366::-;24998:3;25019:67;25083:2;25078:3;25019:67;:::i;:::-;25012:74;;25095:93;25184:3;25095:93;:::i;:::-;25213:2;25208:3;25204:12;25197:19;;24856:366;;;:::o;25228:419::-;25394:4;25432:2;25421:9;25417:18;25409:26;;25481:9;25475:4;25471:20;25467:1;25456:9;25452:17;25445:47;25509:131;25635:4;25509:131;:::i;:::-;25501:139;;25228:419;;;:::o;25653:305::-;25693:3;25712:20;25730:1;25712:20;:::i;:::-;25707:25;;25746:20;25764:1;25746:20;:::i;:::-;25741:25;;25900:1;25832:66;25828:74;25825:1;25822:81;25819:107;;;25906:18;;:::i;:::-;25819:107;25950:1;25947;25943:9;25936:16;;25653:305;;;;:::o;25964:191::-;26004:4;26024:20;26042:1;26024:20;:::i;:::-;26019:25;;26058:20;26076:1;26058:20;:::i;:::-;26053:25;;26097:1;26094;26091:8;26088:34;;;26102:18;;:::i;:::-;26088:34;26147:1;26144;26140:9;26132:17;;25964:191;;;;:::o;26161:238::-;26301:34;26297:1;26289:6;26285:14;26278:58;26370:21;26365:2;26357:6;26353:15;26346:46;26161:238;:::o;26405:366::-;26547:3;26568:67;26632:2;26627:3;26568:67;:::i;:::-;26561:74;;26644:93;26733:3;26644:93;:::i;:::-;26762:2;26757:3;26753:12;26746:19;;26405:366;;;:::o;26777:419::-;26943:4;26981:2;26970:9;26966:18;26958:26;;27030:9;27024:4;27020:20;27016:1;27005:9;27001:17;26994:47;27058:131;27184:4;27058:131;:::i;:::-;27050:139;;26777:419;;;:::o;27202:228::-;27342:34;27338:1;27330:6;27326:14;27319:58;27411:11;27406:2;27398:6;27394:15;27387:36;27202:228;:::o;27436:366::-;27578:3;27599:67;27663:2;27658:3;27599:67;:::i;:::-;27592:74;;27675:93;27764:3;27675:93;:::i;:::-;27793:2;27788:3;27784:12;27777:19;;27436:366;;;:::o;27808:419::-;27974:4;28012:2;28001:9;27997:18;27989:26;;28061:9;28055:4;28051:20;28047:1;28036:9;28032:17;28025:47;28089:131;28215:4;28089:131;:::i;:::-;28081:139;;27808:419;;;:::o;28233:171::-;28373:23;28369:1;28361:6;28357:14;28350:47;28233:171;:::o;28410:366::-;28552:3;28573:67;28637:2;28632:3;28573:67;:::i;:::-;28566:74;;28649:93;28738:3;28649:93;:::i;:::-;28767:2;28762:3;28758:12;28751:19;;28410:366;;;:::o;28782:419::-;28948:4;28986:2;28975:9;28971:18;28963:26;;29035:9;29029:4;29025:20;29021:1;29010:9;29006:17;28999:47;29063:131;29189:4;29063:131;:::i;:::-;29055:139;;28782:419;;;:::o;29207:348::-;29247:7;29270:20;29288:1;29270:20;:::i;:::-;29265:25;;29304:20;29322:1;29304:20;:::i;:::-;29299:25;;29492:1;29424:66;29420:74;29417:1;29414:81;29409:1;29402:9;29395:17;29391:105;29388:131;;;29499:18;;:::i;:::-;29388:131;29547:1;29544;29540:9;29529:20;;29207:348;;;;:::o;29561:221::-;29701:34;29697:1;29689:6;29685:14;29678:58;29770:4;29765:2;29757:6;29753:15;29746:29;29561:221;:::o;29788:366::-;29930:3;29951:67;30015:2;30010:3;29951:67;:::i;:::-;29944:74;;30027:93;30116:3;30027:93;:::i;:::-;30145:2;30140:3;30136:12;30129:19;;29788:366;;;:::o;30160:419::-;30326:4;30364:2;30353:9;30349:18;30341:26;;30413:9;30407:4;30403:20;30399:1;30388:9;30384:17;30377:47;30441:131;30567:4;30441:131;:::i;:::-;30433:139;;30160:419;;;:::o;30585:175::-;30725:27;30721:1;30713:6;30709:14;30702:51;30585:175;:::o;30766:366::-;30908:3;30929:67;30993:2;30988:3;30929:67;:::i;:::-;30922:74;;31005:93;31094:3;31005:93;:::i;:::-;31123:2;31118:3;31114:12;31107:19;;30766:366;;;:::o;31138:419::-;31304:4;31342:2;31331:9;31327:18;31319:26;;31391:9;31385:4;31381:20;31377:1;31366:9;31362:17;31355:47;31419:131;31545:4;31419:131;:::i;:::-;31411:139;;31138:419;;;:::o;31563:234::-;31703:34;31699:1;31691:6;31687:14;31680:58;31772:17;31767:2;31759:6;31755:15;31748:42;31563:234;:::o;31803:366::-;31945:3;31966:67;32030:2;32025:3;31966:67;:::i;:::-;31959:74;;32042:93;32131:3;32042:93;:::i;:::-;32160:2;32155:3;32151:12;32144:19;;31803:366;;;:::o;32175:419::-;32341:4;32379:2;32368:9;32364:18;32356:26;;32428:9;32422:4;32418:20;32414:1;32403:9;32399:17;32392:47;32456:131;32582:4;32456:131;:::i;:::-;32448:139;;32175:419;;;:::o;32600:148::-;32702:11;32739:3;32724:18;;32600:148;;;;:::o;32754:377::-;32860:3;32888:39;32921:5;32888:39;:::i;:::-;32943:89;33025:6;33020:3;32943:89;:::i;:::-;32936:96;;33041:52;33086:6;33081:3;33074:4;33067:5;33063:16;33041:52;:::i;:::-;33118:6;33113:3;33109:16;33102:23;;32864:267;32754:377;;;;:::o;33137:141::-;33186:4;33209:3;33201:11;;33232:3;33229:1;33222:14;33266:4;33263:1;33253:18;33245:26;;33137:141;;;:::o;33308:845::-;33411:3;33448:5;33442:12;33477:36;33503:9;33477:36;:::i;:::-;33529:89;33611:6;33606:3;33529:89;:::i;:::-;33522:96;;33649:1;33638:9;33634:17;33665:1;33660:137;;;;33811:1;33806:341;;;;33627:520;;33660:137;33744:4;33740:9;33729;33725:25;33720:3;33713:38;33780:6;33775:3;33771:16;33764:23;;33660:137;;33806:341;33873:38;33905:5;33873:38;:::i;:::-;33933:1;33947:154;33961:6;33958:1;33955:13;33947:154;;;34035:7;34029:14;34025:1;34020:3;34016:11;34009:35;34085:1;34076:7;34072:15;34061:26;;33983:4;33980:1;33976:12;33971:17;;33947:154;;;34130:6;34125:3;34121:16;34114:23;;33813:334;;33627:520;;33415:738;;33308:845;;;;:::o;34159:589::-;34384:3;34406:95;34497:3;34488:6;34406:95;:::i;:::-;34399:102;;34518:95;34609:3;34600:6;34518:95;:::i;:::-;34511:102;;34630:92;34718:3;34709:6;34630:92;:::i;:::-;34623:99;;34739:3;34732:10;;34159:589;;;;;;:::o;34754:235::-;34894:34;34890:1;34882:6;34878:14;34871:58;34963:18;34958:2;34950:6;34946:15;34939:43;34754:235;:::o;34995:366::-;35137:3;35158:67;35222:2;35217:3;35158:67;:::i;:::-;35151:74;;35234:93;35323:3;35234:93;:::i;:::-;35352:2;35347:3;35343:12;35336:19;;34995:366;;;:::o;35367:419::-;35533:4;35571:2;35560:9;35556:18;35548:26;;35620:9;35614:4;35610:20;35606:1;35595:9;35591:17;35584:47;35648:131;35774:4;35648:131;:::i;:::-;35640:139;;35367:419;;;:::o;35792:223::-;35932:34;35928:1;35920:6;35916:14;35909:58;36001:6;35996:2;35988:6;35984:15;35977:31;35792:223;:::o;36021:366::-;36163:3;36184:67;36248:2;36243:3;36184:67;:::i;:::-;36177:74;;36260:93;36349:3;36260:93;:::i;:::-;36378:2;36373:3;36369:12;36362:19;;36021:366;;;:::o;36393:419::-;36559:4;36597:2;36586:9;36582:18;36574:26;;36646:9;36640:4;36636:20;36632:1;36621:9;36617:17;36610:47;36674:131;36800:4;36674:131;:::i;:::-;36666:139;;36393:419;;;:::o;36818:174::-;36958:26;36954:1;36946:6;36942:14;36935:50;36818:174;:::o;36998:366::-;37140:3;37161:67;37225:2;37220:3;37161:67;:::i;:::-;37154:74;;37237:93;37326:3;37237:93;:::i;:::-;37355:2;37350:3;37346:12;37339:19;;36998:366;;;:::o;37370:419::-;37536:4;37574:2;37563:9;37559:18;37551:26;;37623:9;37617:4;37613:20;37609:1;37598:9;37594:17;37587:47;37651:131;37777:4;37651:131;:::i;:::-;37643:139;;37370:419;;;:::o;37795:225::-;37935:34;37931:1;37923:6;37919:14;37912:58;38004:8;37999:2;37991:6;37987:15;37980:33;37795:225;:::o;38026:366::-;38168:3;38189:67;38253:2;38248:3;38189:67;:::i;:::-;38182:74;;38265:93;38354:3;38265:93;:::i;:::-;38383:2;38378:3;38374:12;38367:19;;38026:366;;;:::o;38398:419::-;38564:4;38602:2;38591:9;38587:18;38579:26;;38651:9;38645:4;38641:20;38637:1;38626:9;38622:17;38615:47;38679:131;38805:4;38679:131;:::i;:::-;38671:139;;38398:419;;;:::o;38823:225::-;38963:34;38959:1;38951:6;38947:14;38940:58;39032:8;39027:2;39019:6;39015:15;39008:33;38823:225;:::o;39054:366::-;39196:3;39217:67;39281:2;39276:3;39217:67;:::i;:::-;39210:74;;39293:93;39382:3;39293:93;:::i;:::-;39411:2;39406:3;39402:12;39395:19;;39054:366;;;:::o;39426:419::-;39592:4;39630:2;39619:9;39615:18;39607:26;;39679:9;39673:4;39669:20;39665:1;39654:9;39650:17;39643:47;39707:131;39833:4;39707:131;:::i;:::-;39699:139;;39426:419;;;:::o;39851:231::-;39991:34;39987:1;39979:6;39975:14;39968:58;40060:14;40055:2;40047:6;40043:15;40036:39;39851:231;:::o;40088:366::-;40230:3;40251:67;40315:2;40310:3;40251:67;:::i;:::-;40244:74;;40327:93;40416:3;40327:93;:::i;:::-;40445:2;40440:3;40436:12;40429:19;;40088:366;;;:::o;40460:419::-;40626:4;40664:2;40653:9;40649:18;40641:26;;40713:9;40707:4;40703:20;40699:1;40688:9;40684:17;40677:47;40741:131;40867:4;40741:131;:::i;:::-;40733:139;;40460:419;;;:::o;40885:228::-;41025:34;41021:1;41013:6;41009:14;41002:58;41094:11;41089:2;41081:6;41077:15;41070:36;40885:228;:::o;41119:366::-;41261:3;41282:67;41346:2;41341:3;41282:67;:::i;:::-;41275:74;;41358:93;41447:3;41358:93;:::i;:::-;41476:2;41471:3;41467:12;41460:19;;41119:366;;;:::o;41491:419::-;41657:4;41695:2;41684:9;41680:18;41672:26;;41744:9;41738:4;41734:20;41730:1;41719:9;41715:17;41708:47;41772:131;41898:4;41772:131;:::i;:::-;41764:139;;41491:419;;;:::o;41916:223::-;42056:34;42052:1;42044:6;42040:14;42033:58;42125:6;42120:2;42112:6;42108:15;42101:31;41916:223;:::o;42145:366::-;42287:3;42308:67;42372:2;42367:3;42308:67;:::i;:::-;42301:74;;42384:93;42473:3;42384:93;:::i;:::-;42502:2;42497:3;42493:12;42486:19;;42145:366;;;:::o;42517:419::-;42683:4;42721:2;42710:9;42706:18;42698:26;;42770:9;42764:4;42760:20;42756:1;42745:9;42741:17;42734:47;42798:131;42924:4;42798:131;:::i;:::-;42790:139;;42517:419;;;:::o;42942:180::-;42990:77;42987:1;42980:88;43087:4;43084:1;43077:15;43111:4;43108:1;43101:15;43128:185;43168:1;43185:20;43203:1;43185:20;:::i;:::-;43180:25;;43219:20;43237:1;43219:20;:::i;:::-;43214:25;;43258:1;43248:35;;43263:18;;:::i;:::-;43248:35;43305:1;43302;43298:9;43293:14;;43128:185;;;;:::o;43319:237::-;43459:34;43455:1;43447:6;43443:14;43436:58;43528:20;43523:2;43515:6;43511:15;43504:45;43319:237;:::o;43562:366::-;43704:3;43725:67;43789:2;43784:3;43725:67;:::i;:::-;43718:74;;43801:93;43890:3;43801:93;:::i;:::-;43919:2;43914:3;43910:12;43903:19;;43562:366;;;:::o;43934:419::-;44100:4;44138:2;44127:9;44123:18;44115:26;;44187:9;44181:4;44177:20;44173:1;44162:9;44158:17;44151:47;44215:131;44341:4;44215:131;:::i;:::-;44207:139;;43934:419;;;:::o;44359:176::-;44391:1;44408:20;44426:1;44408:20;:::i;:::-;44403:25;;44442:20;44460:1;44442:20;:::i;:::-;44437:25;;44481:1;44471:35;;44486:18;;:::i;:::-;44471:35;44527:1;44524;44520:9;44515:14;;44359:176;;;;:::o;44541:98::-;44592:6;44626:5;44620:12;44610:22;;44541:98;;;:::o;44645:168::-;44728:11;44762:6;44757:3;44750:19;44802:4;44797:3;44793:14;44778:29;;44645:168;;;;:::o;44819:360::-;44905:3;44933:38;44965:5;44933:38;:::i;:::-;44987:70;45050:6;45045:3;44987:70;:::i;:::-;44980:77;;45066:52;45111:6;45106:3;45099:4;45092:5;45088:16;45066:52;:::i;:::-;45143:29;45165:6;45143:29;:::i;:::-;45138:3;45134:39;45127:46;;44909:270;44819:360;;;;:::o;45185:640::-;45380:4;45418:3;45407:9;45403:19;45395:27;;45432:71;45500:1;45489:9;45485:17;45476:6;45432:71;:::i;:::-;45513:72;45581:2;45570:9;45566:18;45557:6;45513:72;:::i;:::-;45595;45663:2;45652:9;45648:18;45639:6;45595:72;:::i;:::-;45714:9;45708:4;45704:20;45699:2;45688:9;45684:18;45677:48;45742:76;45813:4;45804:6;45742:76;:::i;:::-;45734:84;;45185:640;;;;;;;:::o;45831:141::-;45887:5;45918:6;45912:13;45903:22;;45934:32;45960:5;45934:32;:::i;:::-;45831:141;;;;:::o;45978:349::-;46047:6;46096:2;46084:9;46075:7;46071:23;46067:32;46064:119;;;46102:79;;:::i;:::-;46064:119;46222:1;46247:63;46302:7;46293:6;46282:9;46278:22;46247:63;:::i;:::-;46237:73;;46193:127;45978:349;;;;:::o;46333:182::-;46473:34;46469:1;46461:6;46457:14;46450:58;46333:182;:::o;46521:366::-;46663:3;46684:67;46748:2;46743:3;46684:67;:::i;:::-;46677:74;;46760:93;46849:3;46760:93;:::i;:::-;46878:2;46873:3;46869:12;46862:19;;46521:366;;;:::o;46893:419::-;47059:4;47097:2;47086:9;47082:18;47074:26;;47146:9;47140:4;47136:20;47132:1;47121:9;47117:17;47110:47;47174:131;47300:4;47174:131;:::i;:::-;47166:139;;46893:419;;;:::o;47318:178::-;47458:30;47454:1;47446:6;47442:14;47435:54;47318:178;:::o;47502:366::-;47644:3;47665:67;47729:2;47724:3;47665:67;:::i;:::-;47658:74;;47741:93;47830:3;47741:93;:::i;:::-;47859:2;47854:3;47850:12;47843:19;;47502:366;;;:::o;47874:419::-;48040:4;48078:2;48067:9;48063:18;48055:26;;48127:9;48121:4;48117:20;48113:1;48102:9;48098:17;48091:47;48155:131;48281:4;48155:131;:::i;:::-;48147:139;;47874:419;;;:::o
Swarm Source
ipfs://edbf41aef1514e910de2e3a91571fe1a052ab2da32cb5c46b3dcb3c6fd6c31ac
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.