Feature Tip: Add private address tag to any address under My Name Tag !
This token is reported to have been spammed to a large number of addresses. Please treat it with caution.
ERC-721
Overview
Max Total Supply
2,000 ERC-721 TOKEN*
Holders
407
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
0 ERC-721 TOKEN*Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GoodFriday
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-15 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (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 // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (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 // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (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/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: contracts/ERC721A.sol pragma solidity ^0.8.0; contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/GoodFriday.sol pragma solidity ^0.8.0; contract GoodFriday is Ownable, ERC721A, ReentrancyGuard { uint256 public immutable maxPerAddressDuringMint; uint256 public immutable amountForDevs; uint256 public constant PRICE = 0 ether; string public constant suffix = ".json"; uint8 public status = 0; string private tokenBaseURI; string public notRevealedUri; bool public revealed = true; mapping(address => uint256) public allowlist; constructor( uint256 maxBatchSize_, uint256 collectionSize_, uint256 amountForDevs_, string memory _tokenBaseURI, string memory _initNotRevealedUri ) ERC721A("GoodFriday", "gfriday", maxBatchSize_, collectionSize_) { maxPerAddressDuringMint = maxBatchSize_; amountForDevs = amountForDevs_; setBaseURI(_tokenBaseURI); setNotRevealedURI(_initNotRevealedUri); } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function publicSaleMint(uint256 quantity) external callerIsUser { require(status == 2, "not publicsale phase"); require(totalSupply() + quantity <= collectionSize, "reached max supply"); require( numberMinted(msg.sender) + quantity <= maxPerAddressDuringMint, "can not mint this many" ); _safeMint(msg.sender, quantity); } function refundIfOver(uint256 price) private { require(msg.value >= price, "Need to send more ETH."); if (msg.value > price) { payable(msg.sender).transfer(msg.value - price); } } function setStatus(uint8 _code) external onlyOwner { status = _code; } function reveal() public onlyOwner() { revealed = true; } function setBaseURI(string memory URI) public onlyOwner { tokenBaseURI = URI; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function _baseURI() internal view virtual override returns (string memory) { return tokenBaseURI; } 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 baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, Strings.toString(tokenId), suffix)) : ""; } function seedAllowlist(address[] memory addresses, uint256[] memory numSlots) external onlyOwner { require( addresses.length == numSlots.length, "addresses does not match numSlots length" ); for (uint256 i = 0; i < addresses.length; i++) { allowlist[addresses[i]] = numSlots[i]; } } function devMint(uint256 quantity) external onlyOwner { require( totalSupply() + quantity <= amountForDevs, "too many already minted before dev mint" ); require( quantity % maxBatchSize == 0, "can only mint a multiple of the maxBatchSize" ); uint256 numChunks = quantity / maxBatchSize; for (uint256 i = 0; i < numChunks; i++) { _safeMint(msg.sender, maxBatchSize); } } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant { _setOwnersExplicit(quantity); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"},{"internalType":"uint256","name":"amountForDevs_","type":"uint256"},{"internalType":"string","name":"_tokenBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","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":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountForDevs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"numSlots","type":"uint256[]"}],"name":"seedAllowlist","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":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_code","type":"uint8"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"suffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
610100604052600060015560006008556000600a60006101000a81548160ff021916908360ff1602179055506001600d60006101000a81548160ff0219169083151502179055503480156200005357600080fd5b5060405162005ff638038062005ff68339818101604052810190620000799190620005ae565b6040518060400160405280600a81526020017f476f6f64467269646179000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f6766726964617900000000000000000000000000000000000000000000000000815250868662000107620000fb6200021e60201b60201c565b6200022660201b60201c565b600081116200014d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000144906200072d565b60405180910390fd5b6000821162000193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018a90620006e9565b60405180910390fd5b8360029080519060200190620001ab92919062000469565b508260039080519060200190620001c492919062000469565b508160a0818152505080608081815250505050505060016009819055508460c081815250508260e081815250506200020282620002ea60201b60201c565b62000213816200039560201b60201c565b5050505050620009cf565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002fa6200021e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003206200044060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000370906200070b565b60405180910390fd5b80600b90805190602001906200039192919062000469565b5050565b620003a56200021e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003cb6200044060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041b906200070b565b60405180910390fd5b80600c90805190602001906200043c92919062000469565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200047790620007ff565b90600052602060002090601f0160209004810192826200049b5760008555620004e7565b82601f10620004b657805160ff1916838001178555620004e7565b82800160010185558215620004e7579182015b82811115620004e6578251825591602001919060010190620004c9565b5b509050620004f69190620004fa565b5090565b5b8082111562000515576000816000905550600101620004fb565b5090565b6000620005306200052a8462000778565b6200074f565b9050828152602081018484840111156200054f576200054e620008ce565b5b6200055c848285620007c9565b509392505050565b600082601f8301126200057c576200057b620008c9565b5b81516200058e84826020860162000519565b91505092915050565b600081519050620005a881620009b5565b92915050565b600080600080600060a08688031215620005cd57620005cc620008d8565b5b6000620005dd8882890162000597565b9550506020620005f08882890162000597565b9450506040620006038882890162000597565b935050606086015167ffffffffffffffff811115620006275762000626620008d3565b5b620006358882890162000564565b925050608086015167ffffffffffffffff811115620006595762000658620008d3565b5b620006678882890162000564565b9150509295509295909350565b600062000683602783620007ae565b91506200069082620008ee565b604082019050919050565b6000620006aa602083620007ae565b9150620006b7826200093d565b602082019050919050565b6000620006d1602e83620007ae565b9150620006de8262000966565b604082019050919050565b60006020820190508181036000830152620007048162000674565b9050919050565b6000602082019050818103600083015262000726816200069b565b9050919050565b600060208201905081810360008301526200074881620006c2565b9050919050565b60006200075b6200076e565b905062000769828262000835565b919050565b6000604051905090565b600067ffffffffffffffff8211156200079657620007956200089a565b5b620007a182620008dd565b9050602081019050919050565b600082825260208201905092915050565b6000819050919050565b60005b83811015620007e9578082015181840152602081019050620007cc565b83811115620007f9576000848401525b50505050565b600060028204905060018216806200081857607f821691505b602082108114156200082f576200082e6200086b565b5b50919050565b6200084082620008dd565b810181811067ffffffffffffffff821117156200086257620008616200089a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b620009c081620007bf565b8114620009cc57600080fd5b50565b60805160a05160c05160e0516155ae62000a4860003960008181610f6d0152611f920152600081816113700152611ab3015260008181610fe4015281816110520152818161108f0152818161299f015281816129c80152613153015260008181611a3e01528181612709015261273d01526155ae6000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c80638bc35c2f1161013b578063b3ab66b0116100b8578063e985e9c51161007c578063e985e9c5146106a0578063f2c4ce1e146106d0578063f2fde38b146106ec578063f7073c3a14610708578063fbe1aa51146107265761023d565b8063b3ab66b0146105ea578063b88d4fde14610606578063c87b56dd14610622578063d7224ba014610652578063dc33e681146106705761023d565b8063a22cb465116100ff578063a22cb4651461056e578063a475b5dd1461058a578063a7cd52cb14610594578063ac446002146105c4578063b05863d5146105ce5761023d565b80638bc35c2f146104c65780638d859f3e146104e45780638da5cb5b146105025780639231ab2a1461052057806395d89b41146105505761023d565b80632e49d78b116101c9578063518302271161018d578063518302271461042257806355f804b3146104405780636352211e1461045c57806370a082311461048c578063715018a6146104bc5761023d565b80632e49d78b1461036e5780632f745c591461038a578063375a069a146103ba57806342842e0e146103d65780634f6ccce7146103f25761023d565b8063095ea7b311610210578063095ea7b3146102de57806318160ddd146102fa578063200d2ed21461031857806323b872dd146103365780632d20fb60146103525761023d565b806301ffc9a71461024257806306fdde0314610272578063081812fc14610290578063081c8c44146102c0575b600080fd5b61025c60048036038101906102579190613b46565b610744565b604051610269919061429f565b60405180910390f35b61027a61088e565b60405161028791906142ba565b60405180910390f35b6102aa60048036038101906102a59190613be9565b610920565b6040516102b79190614238565b60405180910390f35b6102c86109a5565b6040516102d591906142ba565b60405180910390f35b6102f860048036038101906102f39190613a8e565b610a33565b005b610302610b4c565b60405161030f91906146f7565b60405180910390f35b610320610b56565b60405161032d9190614712565b60405180910390f35b610350600480360381019061034b9190613978565b610b69565b005b61036c60048036038101906103679190613be9565b610b79565b005b61038860048036038101906103839190613c16565b610c57565b005b6103a4600480360381019061039f9190613a8e565b610cf1565b6040516103b191906146f7565b60405180910390f35b6103d460048036038101906103cf9190613be9565b610eef565b005b6103f060048036038101906103eb9190613978565b6110cb565b005b61040c60048036038101906104079190613be9565b6110eb565b60405161041991906146f7565b60405180910390f35b61042a61113e565b604051610437919061429f565b60405180910390f35b61045a60048036038101906104559190613ba0565b611151565b005b61047660048036038101906104719190613be9565b6111e7565b6040516104839190614238565b60405180910390f35b6104a660048036038101906104a1919061390b565b6111fd565b6040516104b391906146f7565b60405180910390f35b6104c46112e6565b005b6104ce61136e565b6040516104db91906146f7565b60405180910390f35b6104ec611392565b6040516104f991906146f7565b60405180910390f35b61050a611397565b6040516105179190614238565b60405180910390f35b61053a60048036038101906105359190613be9565b6113c0565b60405161054791906146dc565b60405180910390f35b6105586113d8565b60405161056591906142ba565b60405180910390f35b61058860048036038101906105839190613a4e565b61146a565b005b6105926115eb565b005b6105ae60048036038101906105a9919061390b565b611684565b6040516105bb91906146f7565b60405180910390f35b6105cc61169c565b005b6105e860048036038101906105e39190613ace565b61181d565b005b61060460048036038101906105ff9190613be9565b611979565b005b610620600480360381019061061b91906139cb565b611b34565b005b61063c60048036038101906106379190613be9565b611b90565b60405161064991906142ba565b60405180910390f35b61065a611d1d565b60405161066791906146f7565b60405180910390f35b61068a6004803603810190610685919061390b565b611d23565b60405161069791906146f7565b60405180910390f35b6106ba60048036038101906106b59190613938565b611d35565b6040516106c7919061429f565b60405180910390f35b6106ea60048036038101906106e59190613ba0565b611dc9565b005b6107066004803603810190610701919061390b565b611e5f565b005b610710611f57565b60405161071d91906142ba565b60405180910390f35b61072e611f90565b60405161073b91906146f7565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061087757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610887575061088682611fb4565b5b9050919050565b60606002805461089d90614aac565b80601f01602080910402602001604051908101604052809291908181526020018280546108c990614aac565b80156109165780601f106108eb57610100808354040283529160200191610916565b820191906000526020600020905b8154815290600101906020018083116108f957829003601f168201915b5050505050905090565b600061092b8261201e565b61096a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109619061467c565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600c80546109b290614aac565b80601f01602080910402602001604051908101604052809291908181526020018280546109de90614aac565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b505050505081565b6000610a3e826111e7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa69061451c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ace61202c565b73ffffffffffffffffffffffffffffffffffffffff161480610afd5750610afc81610af761202c565b611d35565b5b610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b33906143dc565b60405180910390fd5b610b47838383612034565b505050565b6000600154905090565b600a60009054906101000a900460ff1681565b610b748383836120e6565b505050565b610b8161202c565b73ffffffffffffffffffffffffffffffffffffffff16610b9f611397565b73ffffffffffffffffffffffffffffffffffffffff1614610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec9061449c565b60405180910390fd5b60026009541415610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c329061463c565b60405180910390fd5b6002600981905550610c4c8161269f565b600160098190555050565b610c5f61202c565b73ffffffffffffffffffffffffffffffffffffffff16610c7d611397565b73ffffffffffffffffffffffffffffffffffffffff1614610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca9061449c565b60405180910390fd5b80600a60006101000a81548160ff021916908360ff16021790555050565b6000610cfc836111fd565b8210610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d34906142dc565b60405180910390fd5b6000610d47610b4c565b905060008060005b83811015610ead576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e4157806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e995786841415610e8a578195505050505050610ee9565b8380610e9590614b0f565b9450505b508080610ea590614b0f565b915050610d4f565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee0906145fc565b60405180910390fd5b92915050565b610ef761202c565b73ffffffffffffffffffffffffffffffffffffffff16610f15611397565b73ffffffffffffffffffffffffffffffffffffffff1614610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f629061449c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081610f95610b4c565b610f9f91906148a0565b1115610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd7906145dc565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008261100e9190614b58565b1461104e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110459061433c565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008261107c91906148f6565b905060005b818110156110c6576110b3337f000000000000000000000000000000000000000000000000000000000000000061292d565b80806110be90614b0f565b915050611081565b505050565b6110e683838360405180602001604052806000815250611b34565b505050565b60006110f5610b4c565b8210611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d9061435c565b60405180910390fd5b819050919050565b600d60009054906101000a900460ff1681565b61115961202c565b73ffffffffffffffffffffffffffffffffffffffff16611177611397565b73ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c49061449c565b60405180910390fd5b80600b90805190602001906111e3929190613594565b5050565b60006111f28261294b565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112659061441c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112ee61202c565b73ffffffffffffffffffffffffffffffffffffffff1661130c611397565b73ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113599061449c565b60405180910390fd5b61136c6000612b4e565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b600081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113c861361a565b6113d18261294b565b9050919050565b6060600380546113e790614aac565b80601f016020809104026020016040519081016040528092919081815260200182805461141390614aac565b80156114605780601f1061143557610100808354040283529160200191611460565b820191906000526020600020905b81548152906001019060200180831161144357829003601f168201915b5050505050905090565b61147261202c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d7906144dc565b60405180910390fd5b80600760006114ed61202c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661159a61202c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115df919061429f565b60405180910390a35050565b6115f361202c565b73ffffffffffffffffffffffffffffffffffffffff16611611611397565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e9061449c565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b600e6020528060005260406000206000915090505481565b6116a461202c565b73ffffffffffffffffffffffffffffffffffffffff166116c2611397565b73ffffffffffffffffffffffffffffffffffffffff1614611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f9061449c565b60405180910390fd5b6002600954141561175e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117559061463c565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161178c90614223565b60006040518083038185875af1925050503d80600081146117c9576040519150601f19603f3d011682016040523d82523d6000602084013e6117ce565b606091505b5050905080611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118099061453c565b60405180910390fd5b506001600981905550565b61182561202c565b73ffffffffffffffffffffffffffffffffffffffff16611843611397565b73ffffffffffffffffffffffffffffffffffffffff1614611899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118909061449c565b60405180910390fd5b80518251146118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d4906146bc565b60405180910390fd5b60005b8251811015611974578181815181106118fc576118fb614c16565b5b6020026020010151600e600085848151811061191b5761191a614c16565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061196c90614b0f565b9150506118e0565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de906143bc565b60405180910390fd5b6002600a60009054906101000a900460ff1660ff1614611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a339061445c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081611a66610b4c565b611a7091906148a0565b1115611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa89061443c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081611adc33611d23565b611ae691906148a0565b1115611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e906145bc565b60405180910390fd5b611b31338261292d565b50565b611b3f8484846120e6565b611b4b84848484612c12565b611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b819061455c565b60405180910390fd5b50505050565b6060611b9b8261201e565b611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd1906144bc565b60405180910390fd5b60001515600d60009054906101000a900460ff1615151415611c8857600c8054611c0390614aac565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2f90614aac565b8015611c7c5780601f10611c5157610100808354040283529160200191611c7c565b820191906000526020600020905b815481529060010190602001808311611c5f57829003601f168201915b50505050509050611d18565b6000611c92612da9565b90506000815111611cb25760405180602001604052806000815250611d14565b80611cbc84612e3b565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250604051602001611d04939291906141f2565b6040516020818303038152906040525b9150505b919050565b60085481565b6000611d2e82612f9c565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611dd161202c565b73ffffffffffffffffffffffffffffffffffffffff16611def611397565b73ffffffffffffffffffffffffffffffffffffffff1614611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c9061449c565b60405180910390fd5b80600c9080519060200190611e5b929190613594565b5050565b611e6761202c565b73ffffffffffffffffffffffffffffffffffffffff16611e85611397565b73ffffffffffffffffffffffffffffffffffffffff1614611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed29061449c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f42906142fc565b60405180910390fd5b611f5481612b4e565b50565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006120f18261294b565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661211861202c565b73ffffffffffffffffffffffffffffffffffffffff161480612174575061213d61202c565b73ffffffffffffffffffffffffffffffffffffffff1661215c84610920565b73ffffffffffffffffffffffffffffffffffffffff16145b80612190575061218f826000015161218a61202c565b611d35565b5b9050806121d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c9906144fc565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b9061447c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab9061437c565b60405180910390fd5b6122c18585856001613085565b6122d16000848460000151612034565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661233f9190614927565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166123e3919061485a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846124e991906148a0565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561262f5761255f8161201e565b1561262e576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612697868686600161308b565b505050505050565b60006008549050600082116126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e0906143fc565b60405180910390fd5b6000600183836126f991906148a0565b612703919061495b565b905060017f0000000000000000000000000000000000000000000000000000000000000000612732919061495b565b8111156127695760017f0000000000000000000000000000000000000000000000000000000000000000612766919061495b565b90505b6127728161201e565b6127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a89061461c565b60405180910390fd5b60008290505b81811161291457600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129015760006128348261294b565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061290c90614b0f565b9150506127b7565b5060018161292291906148a0565b600881905550505050565b612947828260405180602001604052806000815250613091565b5050565b61295361361a565b61295c8261201e565b61299b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129929061431c565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106129ff5760017f0000000000000000000000000000000000000000000000000000000000000000846129f2919061495b565b6129fc91906148a0565b90505b60008390505b818110612b0d576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612af957809350505050612b49565b508080612b0590614a82565b915050612a05565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b409061465c565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612c338473ffffffffffffffffffffffffffffffffffffffff16613571565b15612d9c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c5c61202c565b8786866040518563ffffffff1660e01b8152600401612c7e9493929190614253565b602060405180830381600087803b158015612c9857600080fd5b505af1925050508015612cc957506040513d601f19601f82011682018060405250810190612cc69190613b73565b60015b612d4c573d8060008114612cf9576040519150601f19603f3d011682016040523d82523d6000602084013e612cfe565b606091505b50600081511415612d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3b9061455c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612da1565b600190505b949350505050565b6060600b8054612db890614aac565b80601f0160208091040260200160405190810160405280929190818152602001828054612de490614aac565b8015612e315780601f10612e0657610100808354040283529160200191612e31565b820191906000526020600020905b815481529060010190602001808311612e1457829003601f168201915b5050505050905090565b60606000821415612e83576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f97565b600082905060005b60008214612eb5578080612e9e90614b0f565b915050600a82612eae91906148f6565b9150612e8b565b60008167ffffffffffffffff811115612ed157612ed0614c45565b5b6040519080825280601f01601f191660200182016040528015612f035781602001600182028036833780820191505090505b5090505b60008514612f9057600182612f1c919061495b565b9150600a85612f2b9190614b58565b6030612f3791906148a0565b60f81b818381518110612f4d57612f4c614c16565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f8991906148f6565b9450612f07565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561300d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130049061439c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ff9061459c565b60405180910390fd5b6131118161201e565b15613151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131489061457c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156131b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ab9061469c565b60405180910390fd5b6131c16000858386613085565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132be919061485a565b6fffffffffffffffffffffffffffffffff1681526020018583602001516132e5919061485a565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561355457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134f46000888488612c12565b613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352a9061455c565b60405180910390fd5b818061353e90614b0f565b925050808061354c90614b0f565b915050613483565b5080600181905550613569600087858861308b565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546135a090614aac565b90600052602060002090601f0160209004810192826135c25760008555613609565b82601f106135db57805160ff1916838001178555613609565b82800160010185558215613609579182015b828111156136085782518255916020019190600101906135ed565b5b5090506136169190613654565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561366d576000816000905550600101613655565b5090565b600061368461367f84614752565b61472d565b905080838252602082019050828560208602820111156136a7576136a6614c79565b5b60005b858110156136d757816136bd88826137d5565b8452602084019350602083019250506001810190506136aa565b5050509392505050565b60006136f46136ef8461477e565b61472d565b9050808382526020820190508285602086028201111561371757613716614c79565b5b60005b85811015613747578161372d88826138e1565b84526020840193506020830192505060018101905061371a565b5050509392505050565b600061376461375f846147aa565b61472d565b9050828152602081018484840111156137805761377f614c7e565b5b61378b848285614a40565b509392505050565b60006137a66137a1846147db565b61472d565b9050828152602081018484840111156137c2576137c1614c7e565b5b6137cd848285614a40565b509392505050565b6000813590506137e481615505565b92915050565b600082601f8301126137ff576137fe614c74565b5b813561380f848260208601613671565b91505092915050565b600082601f83011261382d5761382c614c74565b5b813561383d8482602086016136e1565b91505092915050565b6000813590506138558161551c565b92915050565b60008135905061386a81615533565b92915050565b60008151905061387f81615533565b92915050565b600082601f83011261389a57613899614c74565b5b81356138aa848260208601613751565b91505092915050565b600082601f8301126138c8576138c7614c74565b5b81356138d8848260208601613793565b91505092915050565b6000813590506138f08161554a565b92915050565b60008135905061390581615561565b92915050565b60006020828403121561392157613920614c88565b5b600061392f848285016137d5565b91505092915050565b6000806040838503121561394f5761394e614c88565b5b600061395d858286016137d5565b925050602061396e858286016137d5565b9150509250929050565b60008060006060848603121561399157613990614c88565b5b600061399f868287016137d5565b93505060206139b0868287016137d5565b92505060406139c1868287016138e1565b9150509250925092565b600080600080608085870312156139e5576139e4614c88565b5b60006139f3878288016137d5565b9450506020613a04878288016137d5565b9350506040613a15878288016138e1565b925050606085013567ffffffffffffffff811115613a3657613a35614c83565b5b613a4287828801613885565b91505092959194509250565b60008060408385031215613a6557613a64614c88565b5b6000613a73858286016137d5565b9250506020613a8485828601613846565b9150509250929050565b60008060408385031215613aa557613aa4614c88565b5b6000613ab3858286016137d5565b9250506020613ac4858286016138e1565b9150509250929050565b60008060408385031215613ae557613ae4614c88565b5b600083013567ffffffffffffffff811115613b0357613b02614c83565b5b613b0f858286016137ea565b925050602083013567ffffffffffffffff811115613b3057613b2f614c83565b5b613b3c85828601613818565b9150509250929050565b600060208284031215613b5c57613b5b614c88565b5b6000613b6a8482850161385b565b91505092915050565b600060208284031215613b8957613b88614c88565b5b6000613b9784828501613870565b91505092915050565b600060208284031215613bb657613bb5614c88565b5b600082013567ffffffffffffffff811115613bd457613bd3614c83565b5b613be0848285016138b3565b91505092915050565b600060208284031215613bff57613bfe614c88565b5b6000613c0d848285016138e1565b91505092915050565b600060208284031215613c2c57613c2b614c88565b5b6000613c3a848285016138f6565b91505092915050565b613c4c8161498f565b82525050565b613c5b8161498f565b82525050565b613c6a816149a1565b82525050565b6000613c7b8261480c565b613c858185614822565b9350613c95818560208601614a4f565b613c9e81614c8d565b840191505092915050565b6000613cb482614817565b613cbe818561483e565b9350613cce818560208601614a4f565b613cd781614c8d565b840191505092915050565b6000613ced82614817565b613cf7818561484f565b9350613d07818560208601614a4f565b80840191505092915050565b6000613d2060228361483e565b9150613d2b82614c9e565b604082019050919050565b6000613d4360268361483e565b9150613d4e82614ced565b604082019050919050565b6000613d66602a8361483e565b9150613d7182614d3c565b604082019050919050565b6000613d89602c8361483e565b9150613d9482614d8b565b604082019050919050565b6000613dac60238361483e565b9150613db782614dda565b604082019050919050565b6000613dcf60258361483e565b9150613dda82614e29565b604082019050919050565b6000613df260318361483e565b9150613dfd82614e78565b604082019050919050565b6000613e15601e8361483e565b9150613e2082614ec7565b602082019050919050565b6000613e3860398361483e565b9150613e4382614ef0565b604082019050919050565b6000613e5b60188361483e565b9150613e6682614f3f565b602082019050919050565b6000613e7e602b8361483e565b9150613e8982614f68565b604082019050919050565b6000613ea160128361483e565b9150613eac82614fb7565b602082019050919050565b6000613ec460148361483e565b9150613ecf82614fe0565b602082019050919050565b6000613ee760268361483e565b9150613ef282615009565b604082019050919050565b6000613f0a60208361483e565b9150613f1582615058565b602082019050919050565b6000613f2d602f8361483e565b9150613f3882615081565b604082019050919050565b6000613f50601a8361483e565b9150613f5b826150d0565b602082019050919050565b6000613f7360328361483e565b9150613f7e826150f9565b604082019050919050565b6000613f9660228361483e565b9150613fa182615148565b604082019050919050565b6000613fb9600083614833565b9150613fc482615197565b600082019050919050565b6000613fdc60108361483e565b9150613fe78261519a565b602082019050919050565b6000613fff60338361483e565b915061400a826151c3565b604082019050919050565b6000614022601d8361483e565b915061402d82615212565b602082019050919050565b600061404560218361483e565b91506140508261523b565b604082019050919050565b600061406860168361483e565b91506140738261528a565b602082019050919050565b600061408b60278361483e565b9150614096826152b3565b604082019050919050565b60006140ae602e8361483e565b91506140b982615302565b604082019050919050565b60006140d160268361483e565b91506140dc82615351565b604082019050919050565b60006140f4601f8361483e565b91506140ff826153a0565b602082019050919050565b6000614117602f8361483e565b9150614122826153c9565b604082019050919050565b600061413a602d8361483e565b915061414582615418565b604082019050919050565b600061415d60228361483e565b915061416882615467565b604082019050919050565b600061418060288361483e565b915061418b826154b6565b604082019050919050565b6040820160008201516141ac6000850182613c43565b5060208201516141bf60208501826141d4565b50505050565b6141ce81614a15565b82525050565b6141dd81614a1f565b82525050565b6141ec81614a33565b82525050565b60006141fe8286613ce2565b915061420a8285613ce2565b91506142168284613ce2565b9150819050949350505050565b600061422e82613fac565b9150819050919050565b600060208201905061424d6000830184613c52565b92915050565b60006080820190506142686000830187613c52565b6142756020830186613c52565b61428260408301856141c5565b81810360608301526142948184613c70565b905095945050505050565b60006020820190506142b46000830184613c61565b92915050565b600060208201905081810360008301526142d48184613ca9565b905092915050565b600060208201905081810360008301526142f581613d13565b9050919050565b6000602082019050818103600083015261431581613d36565b9050919050565b6000602082019050818103600083015261433581613d59565b9050919050565b6000602082019050818103600083015261435581613d7c565b9050919050565b6000602082019050818103600083015261437581613d9f565b9050919050565b6000602082019050818103600083015261439581613dc2565b9050919050565b600060208201905081810360008301526143b581613de5565b9050919050565b600060208201905081810360008301526143d581613e08565b9050919050565b600060208201905081810360008301526143f581613e2b565b9050919050565b6000602082019050818103600083015261441581613e4e565b9050919050565b6000602082019050818103600083015261443581613e71565b9050919050565b6000602082019050818103600083015261445581613e94565b9050919050565b6000602082019050818103600083015261447581613eb7565b9050919050565b6000602082019050818103600083015261449581613eda565b9050919050565b600060208201905081810360008301526144b581613efd565b9050919050565b600060208201905081810360008301526144d581613f20565b9050919050565b600060208201905081810360008301526144f581613f43565b9050919050565b6000602082019050818103600083015261451581613f66565b9050919050565b6000602082019050818103600083015261453581613f89565b9050919050565b6000602082019050818103600083015261455581613fcf565b9050919050565b6000602082019050818103600083015261457581613ff2565b9050919050565b6000602082019050818103600083015261459581614015565b9050919050565b600060208201905081810360008301526145b581614038565b9050919050565b600060208201905081810360008301526145d58161405b565b9050919050565b600060208201905081810360008301526145f58161407e565b9050919050565b60006020820190508181036000830152614615816140a1565b9050919050565b60006020820190508181036000830152614635816140c4565b9050919050565b60006020820190508181036000830152614655816140e7565b9050919050565b600060208201905081810360008301526146758161410a565b9050919050565b600060208201905081810360008301526146958161412d565b9050919050565b600060208201905081810360008301526146b581614150565b9050919050565b600060208201905081810360008301526146d581614173565b9050919050565b60006040820190506146f16000830184614196565b92915050565b600060208201905061470c60008301846141c5565b92915050565b600060208201905061472760008301846141e3565b92915050565b6000614737614748565b90506147438282614ade565b919050565b6000604051905090565b600067ffffffffffffffff82111561476d5761476c614c45565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561479957614798614c45565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147c5576147c4614c45565b5b6147ce82614c8d565b9050602081019050919050565b600067ffffffffffffffff8211156147f6576147f5614c45565b5b6147ff82614c8d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614865826149d9565b9150614870836149d9565b9250826fffffffffffffffffffffffffffffffff0382111561489557614894614b89565b5b828201905092915050565b60006148ab82614a15565b91506148b683614a15565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148eb576148ea614b89565b5b828201905092915050565b600061490182614a15565b915061490c83614a15565b92508261491c5761491b614bb8565b5b828204905092915050565b6000614932826149d9565b915061493d836149d9565b9250828210156149505761494f614b89565b5b828203905092915050565b600061496682614a15565b915061497183614a15565b92508282101561498457614983614b89565b5b828203905092915050565b600061499a826149f5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614a6d578082015181840152602081019050614a52565b83811115614a7c576000848401525b50505050565b6000614a8d82614a15565b91506000821415614aa157614aa0614b89565b5b600182039050919050565b60006002820490506001821680614ac457607f821691505b60208210811415614ad857614ad7614be7565b5b50919050565b614ae782614c8d565b810181811067ffffffffffffffff82111715614b0657614b05614c45565b5b80604052505050565b6000614b1a82614a15565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b4d57614b4c614b89565b5b600182019050919050565b6000614b6382614a15565b9150614b6e83614a15565b925082614b7e57614b7d614bb8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f6e6f74207075626c696373616c65207068617365000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f7460008201527f73206c656e677468000000000000000000000000000000000000000000000000602082015250565b61550e8161498f565b811461551957600080fd5b50565b615525816149a1565b811461553057600080fd5b50565b61553c816149ad565b811461554757600080fd5b50565b61555381614a15565b811461555e57600080fd5b50565b61556a81614a33565b811461557557600080fd5b5056fea264697066735822122054324b3d59d4831e3dbca51c02e1a7740cc6f03edc041dbb91d9e2650f369ee964736f6c63430008070033000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5470397a3466794258366252366736434a545045756e3875346e706f345467345364516e32696f383466696a2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d64387a464c556673396a73445656764373747258676756654b656e7a616e77345036504b647948703777783800000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061023d5760003560e01c80638bc35c2f1161013b578063b3ab66b0116100b8578063e985e9c51161007c578063e985e9c5146106a0578063f2c4ce1e146106d0578063f2fde38b146106ec578063f7073c3a14610708578063fbe1aa51146107265761023d565b8063b3ab66b0146105ea578063b88d4fde14610606578063c87b56dd14610622578063d7224ba014610652578063dc33e681146106705761023d565b8063a22cb465116100ff578063a22cb4651461056e578063a475b5dd1461058a578063a7cd52cb14610594578063ac446002146105c4578063b05863d5146105ce5761023d565b80638bc35c2f146104c65780638d859f3e146104e45780638da5cb5b146105025780639231ab2a1461052057806395d89b41146105505761023d565b80632e49d78b116101c9578063518302271161018d578063518302271461042257806355f804b3146104405780636352211e1461045c57806370a082311461048c578063715018a6146104bc5761023d565b80632e49d78b1461036e5780632f745c591461038a578063375a069a146103ba57806342842e0e146103d65780634f6ccce7146103f25761023d565b8063095ea7b311610210578063095ea7b3146102de57806318160ddd146102fa578063200d2ed21461031857806323b872dd146103365780632d20fb60146103525761023d565b806301ffc9a71461024257806306fdde0314610272578063081812fc14610290578063081c8c44146102c0575b600080fd5b61025c60048036038101906102579190613b46565b610744565b604051610269919061429f565b60405180910390f35b61027a61088e565b60405161028791906142ba565b60405180910390f35b6102aa60048036038101906102a59190613be9565b610920565b6040516102b79190614238565b60405180910390f35b6102c86109a5565b6040516102d591906142ba565b60405180910390f35b6102f860048036038101906102f39190613a8e565b610a33565b005b610302610b4c565b60405161030f91906146f7565b60405180910390f35b610320610b56565b60405161032d9190614712565b60405180910390f35b610350600480360381019061034b9190613978565b610b69565b005b61036c60048036038101906103679190613be9565b610b79565b005b61038860048036038101906103839190613c16565b610c57565b005b6103a4600480360381019061039f9190613a8e565b610cf1565b6040516103b191906146f7565b60405180910390f35b6103d460048036038101906103cf9190613be9565b610eef565b005b6103f060048036038101906103eb9190613978565b6110cb565b005b61040c60048036038101906104079190613be9565b6110eb565b60405161041991906146f7565b60405180910390f35b61042a61113e565b604051610437919061429f565b60405180910390f35b61045a60048036038101906104559190613ba0565b611151565b005b61047660048036038101906104719190613be9565b6111e7565b6040516104839190614238565b60405180910390f35b6104a660048036038101906104a1919061390b565b6111fd565b6040516104b391906146f7565b60405180910390f35b6104c46112e6565b005b6104ce61136e565b6040516104db91906146f7565b60405180910390f35b6104ec611392565b6040516104f991906146f7565b60405180910390f35b61050a611397565b6040516105179190614238565b60405180910390f35b61053a60048036038101906105359190613be9565b6113c0565b60405161054791906146dc565b60405180910390f35b6105586113d8565b60405161056591906142ba565b60405180910390f35b61058860048036038101906105839190613a4e565b61146a565b005b6105926115eb565b005b6105ae60048036038101906105a9919061390b565b611684565b6040516105bb91906146f7565b60405180910390f35b6105cc61169c565b005b6105e860048036038101906105e39190613ace565b61181d565b005b61060460048036038101906105ff9190613be9565b611979565b005b610620600480360381019061061b91906139cb565b611b34565b005b61063c60048036038101906106379190613be9565b611b90565b60405161064991906142ba565b60405180910390f35b61065a611d1d565b60405161066791906146f7565b60405180910390f35b61068a6004803603810190610685919061390b565b611d23565b60405161069791906146f7565b60405180910390f35b6106ba60048036038101906106b59190613938565b611d35565b6040516106c7919061429f565b60405180910390f35b6106ea60048036038101906106e59190613ba0565b611dc9565b005b6107066004803603810190610701919061390b565b611e5f565b005b610710611f57565b60405161071d91906142ba565b60405180910390f35b61072e611f90565b60405161073b91906146f7565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061087757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610887575061088682611fb4565b5b9050919050565b60606002805461089d90614aac565b80601f01602080910402602001604051908101604052809291908181526020018280546108c990614aac565b80156109165780601f106108eb57610100808354040283529160200191610916565b820191906000526020600020905b8154815290600101906020018083116108f957829003601f168201915b5050505050905090565b600061092b8261201e565b61096a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109619061467c565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600c80546109b290614aac565b80601f01602080910402602001604051908101604052809291908181526020018280546109de90614aac565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b505050505081565b6000610a3e826111e7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa69061451c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ace61202c565b73ffffffffffffffffffffffffffffffffffffffff161480610afd5750610afc81610af761202c565b611d35565b5b610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b33906143dc565b60405180910390fd5b610b47838383612034565b505050565b6000600154905090565b600a60009054906101000a900460ff1681565b610b748383836120e6565b505050565b610b8161202c565b73ffffffffffffffffffffffffffffffffffffffff16610b9f611397565b73ffffffffffffffffffffffffffffffffffffffff1614610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec9061449c565b60405180910390fd5b60026009541415610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c329061463c565b60405180910390fd5b6002600981905550610c4c8161269f565b600160098190555050565b610c5f61202c565b73ffffffffffffffffffffffffffffffffffffffff16610c7d611397565b73ffffffffffffffffffffffffffffffffffffffff1614610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca9061449c565b60405180910390fd5b80600a60006101000a81548160ff021916908360ff16021790555050565b6000610cfc836111fd565b8210610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d34906142dc565b60405180910390fd5b6000610d47610b4c565b905060008060005b83811015610ead576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e4157806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e995786841415610e8a578195505050505050610ee9565b8380610e9590614b0f565b9450505b508080610ea590614b0f565b915050610d4f565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee0906145fc565b60405180910390fd5b92915050565b610ef761202c565b73ffffffffffffffffffffffffffffffffffffffff16610f15611397565b73ffffffffffffffffffffffffffffffffffffffff1614610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f629061449c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000003281610f95610b4c565b610f9f91906148a0565b1115610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd7906145dc565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000058261100e9190614b58565b1461104e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110459061433c565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000058261107c91906148f6565b905060005b818110156110c6576110b3337f000000000000000000000000000000000000000000000000000000000000000561292d565b80806110be90614b0f565b915050611081565b505050565b6110e683838360405180602001604052806000815250611b34565b505050565b60006110f5610b4c565b8210611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d9061435c565b60405180910390fd5b819050919050565b600d60009054906101000a900460ff1681565b61115961202c565b73ffffffffffffffffffffffffffffffffffffffff16611177611397565b73ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c49061449c565b60405180910390fd5b80600b90805190602001906111e3929190613594565b5050565b60006111f28261294b565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112659061441c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112ee61202c565b73ffffffffffffffffffffffffffffffffffffffff1661130c611397565b73ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113599061449c565b60405180910390fd5b61136c6000612b4e565b565b7f000000000000000000000000000000000000000000000000000000000000000581565b600081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113c861361a565b6113d18261294b565b9050919050565b6060600380546113e790614aac565b80601f016020809104026020016040519081016040528092919081815260200182805461141390614aac565b80156114605780601f1061143557610100808354040283529160200191611460565b820191906000526020600020905b81548152906001019060200180831161144357829003601f168201915b5050505050905090565b61147261202c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d7906144dc565b60405180910390fd5b80600760006114ed61202c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661159a61202c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115df919061429f565b60405180910390a35050565b6115f361202c565b73ffffffffffffffffffffffffffffffffffffffff16611611611397565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e9061449c565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b600e6020528060005260406000206000915090505481565b6116a461202c565b73ffffffffffffffffffffffffffffffffffffffff166116c2611397565b73ffffffffffffffffffffffffffffffffffffffff1614611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f9061449c565b60405180910390fd5b6002600954141561175e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117559061463c565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161178c90614223565b60006040518083038185875af1925050503d80600081146117c9576040519150601f19603f3d011682016040523d82523d6000602084013e6117ce565b606091505b5050905080611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118099061453c565b60405180910390fd5b506001600981905550565b61182561202c565b73ffffffffffffffffffffffffffffffffffffffff16611843611397565b73ffffffffffffffffffffffffffffffffffffffff1614611899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118909061449c565b60405180910390fd5b80518251146118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d4906146bc565b60405180910390fd5b60005b8251811015611974578181815181106118fc576118fb614c16565b5b6020026020010151600e600085848151811061191b5761191a614c16565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061196c90614b0f565b9150506118e0565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de906143bc565b60405180910390fd5b6002600a60009054906101000a900460ff1660ff1614611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a339061445c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000007d081611a66610b4c565b611a7091906148a0565b1115611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa89061443c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000581611adc33611d23565b611ae691906148a0565b1115611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e906145bc565b60405180910390fd5b611b31338261292d565b50565b611b3f8484846120e6565b611b4b84848484612c12565b611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b819061455c565b60405180910390fd5b50505050565b6060611b9b8261201e565b611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd1906144bc565b60405180910390fd5b60001515600d60009054906101000a900460ff1615151415611c8857600c8054611c0390614aac565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2f90614aac565b8015611c7c5780601f10611c5157610100808354040283529160200191611c7c565b820191906000526020600020905b815481529060010190602001808311611c5f57829003601f168201915b50505050509050611d18565b6000611c92612da9565b90506000815111611cb25760405180602001604052806000815250611d14565b80611cbc84612e3b565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250604051602001611d04939291906141f2565b6040516020818303038152906040525b9150505b919050565b60085481565b6000611d2e82612f9c565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611dd161202c565b73ffffffffffffffffffffffffffffffffffffffff16611def611397565b73ffffffffffffffffffffffffffffffffffffffff1614611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c9061449c565b60405180910390fd5b80600c9080519060200190611e5b929190613594565b5050565b611e6761202c565b73ffffffffffffffffffffffffffffffffffffffff16611e85611397565b73ffffffffffffffffffffffffffffffffffffffff1614611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed29061449c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f42906142fc565b60405180910390fd5b611f5481612b4e565b50565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b7f000000000000000000000000000000000000000000000000000000000000003281565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006120f18261294b565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661211861202c565b73ffffffffffffffffffffffffffffffffffffffff161480612174575061213d61202c565b73ffffffffffffffffffffffffffffffffffffffff1661215c84610920565b73ffffffffffffffffffffffffffffffffffffffff16145b80612190575061218f826000015161218a61202c565b611d35565b5b9050806121d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c9906144fc565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b9061447c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab9061437c565b60405180910390fd5b6122c18585856001613085565b6122d16000848460000151612034565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661233f9190614927565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166123e3919061485a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846124e991906148a0565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561262f5761255f8161201e565b1561262e576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612697868686600161308b565b505050505050565b60006008549050600082116126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e0906143fc565b60405180910390fd5b6000600183836126f991906148a0565b612703919061495b565b905060017f00000000000000000000000000000000000000000000000000000000000007d0612732919061495b565b8111156127695760017f00000000000000000000000000000000000000000000000000000000000007d0612766919061495b565b90505b6127728161201e565b6127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a89061461c565b60405180910390fd5b60008290505b81811161291457600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129015760006128348261294b565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061290c90614b0f565b9150506127b7565b5060018161292291906148a0565b600881905550505050565b612947828260405180602001604052806000815250613091565b5050565b61295361361a565b61295c8261201e565b61299b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129929061431c565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000583106129ff5760017f0000000000000000000000000000000000000000000000000000000000000005846129f2919061495b565b6129fc91906148a0565b90505b60008390505b818110612b0d576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612af957809350505050612b49565b508080612b0590614a82565b915050612a05565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b409061465c565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612c338473ffffffffffffffffffffffffffffffffffffffff16613571565b15612d9c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c5c61202c565b8786866040518563ffffffff1660e01b8152600401612c7e9493929190614253565b602060405180830381600087803b158015612c9857600080fd5b505af1925050508015612cc957506040513d601f19601f82011682018060405250810190612cc69190613b73565b60015b612d4c573d8060008114612cf9576040519150601f19603f3d011682016040523d82523d6000602084013e612cfe565b606091505b50600081511415612d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3b9061455c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612da1565b600190505b949350505050565b6060600b8054612db890614aac565b80601f0160208091040260200160405190810160405280929190818152602001828054612de490614aac565b8015612e315780601f10612e0657610100808354040283529160200191612e31565b820191906000526020600020905b815481529060010190602001808311612e1457829003601f168201915b5050505050905090565b60606000821415612e83576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f97565b600082905060005b60008214612eb5578080612e9e90614b0f565b915050600a82612eae91906148f6565b9150612e8b565b60008167ffffffffffffffff811115612ed157612ed0614c45565b5b6040519080825280601f01601f191660200182016040528015612f035781602001600182028036833780820191505090505b5090505b60008514612f9057600182612f1c919061495b565b9150600a85612f2b9190614b58565b6030612f3791906148a0565b60f81b818381518110612f4d57612f4c614c16565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f8991906148f6565b9450612f07565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561300d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130049061439c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ff9061459c565b60405180910390fd5b6131118161201e565b15613151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131489061457c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000058311156131b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ab9061469c565b60405180910390fd5b6131c16000858386613085565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132be919061485a565b6fffffffffffffffffffffffffffffffff1681526020018583602001516132e5919061485a565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561355457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134f46000888488612c12565b613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352a9061455c565b60405180910390fd5b818061353e90614b0f565b925050808061354c90614b0f565b915050613483565b5080600181905550613569600087858861308b565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546135a090614aac565b90600052602060002090601f0160209004810192826135c25760008555613609565b82601f106135db57805160ff1916838001178555613609565b82800160010185558215613609579182015b828111156136085782518255916020019190600101906135ed565b5b5090506136169190613654565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561366d576000816000905550600101613655565b5090565b600061368461367f84614752565b61472d565b905080838252602082019050828560208602820111156136a7576136a6614c79565b5b60005b858110156136d757816136bd88826137d5565b8452602084019350602083019250506001810190506136aa565b5050509392505050565b60006136f46136ef8461477e565b61472d565b9050808382526020820190508285602086028201111561371757613716614c79565b5b60005b85811015613747578161372d88826138e1565b84526020840193506020830192505060018101905061371a565b5050509392505050565b600061376461375f846147aa565b61472d565b9050828152602081018484840111156137805761377f614c7e565b5b61378b848285614a40565b509392505050565b60006137a66137a1846147db565b61472d565b9050828152602081018484840111156137c2576137c1614c7e565b5b6137cd848285614a40565b509392505050565b6000813590506137e481615505565b92915050565b600082601f8301126137ff576137fe614c74565b5b813561380f848260208601613671565b91505092915050565b600082601f83011261382d5761382c614c74565b5b813561383d8482602086016136e1565b91505092915050565b6000813590506138558161551c565b92915050565b60008135905061386a81615533565b92915050565b60008151905061387f81615533565b92915050565b600082601f83011261389a57613899614c74565b5b81356138aa848260208601613751565b91505092915050565b600082601f8301126138c8576138c7614c74565b5b81356138d8848260208601613793565b91505092915050565b6000813590506138f08161554a565b92915050565b60008135905061390581615561565b92915050565b60006020828403121561392157613920614c88565b5b600061392f848285016137d5565b91505092915050565b6000806040838503121561394f5761394e614c88565b5b600061395d858286016137d5565b925050602061396e858286016137d5565b9150509250929050565b60008060006060848603121561399157613990614c88565b5b600061399f868287016137d5565b93505060206139b0868287016137d5565b92505060406139c1868287016138e1565b9150509250925092565b600080600080608085870312156139e5576139e4614c88565b5b60006139f3878288016137d5565b9450506020613a04878288016137d5565b9350506040613a15878288016138e1565b925050606085013567ffffffffffffffff811115613a3657613a35614c83565b5b613a4287828801613885565b91505092959194509250565b60008060408385031215613a6557613a64614c88565b5b6000613a73858286016137d5565b9250506020613a8485828601613846565b9150509250929050565b60008060408385031215613aa557613aa4614c88565b5b6000613ab3858286016137d5565b9250506020613ac4858286016138e1565b9150509250929050565b60008060408385031215613ae557613ae4614c88565b5b600083013567ffffffffffffffff811115613b0357613b02614c83565b5b613b0f858286016137ea565b925050602083013567ffffffffffffffff811115613b3057613b2f614c83565b5b613b3c85828601613818565b9150509250929050565b600060208284031215613b5c57613b5b614c88565b5b6000613b6a8482850161385b565b91505092915050565b600060208284031215613b8957613b88614c88565b5b6000613b9784828501613870565b91505092915050565b600060208284031215613bb657613bb5614c88565b5b600082013567ffffffffffffffff811115613bd457613bd3614c83565b5b613be0848285016138b3565b91505092915050565b600060208284031215613bff57613bfe614c88565b5b6000613c0d848285016138e1565b91505092915050565b600060208284031215613c2c57613c2b614c88565b5b6000613c3a848285016138f6565b91505092915050565b613c4c8161498f565b82525050565b613c5b8161498f565b82525050565b613c6a816149a1565b82525050565b6000613c7b8261480c565b613c858185614822565b9350613c95818560208601614a4f565b613c9e81614c8d565b840191505092915050565b6000613cb482614817565b613cbe818561483e565b9350613cce818560208601614a4f565b613cd781614c8d565b840191505092915050565b6000613ced82614817565b613cf7818561484f565b9350613d07818560208601614a4f565b80840191505092915050565b6000613d2060228361483e565b9150613d2b82614c9e565b604082019050919050565b6000613d4360268361483e565b9150613d4e82614ced565b604082019050919050565b6000613d66602a8361483e565b9150613d7182614d3c565b604082019050919050565b6000613d89602c8361483e565b9150613d9482614d8b565b604082019050919050565b6000613dac60238361483e565b9150613db782614dda565b604082019050919050565b6000613dcf60258361483e565b9150613dda82614e29565b604082019050919050565b6000613df260318361483e565b9150613dfd82614e78565b604082019050919050565b6000613e15601e8361483e565b9150613e2082614ec7565b602082019050919050565b6000613e3860398361483e565b9150613e4382614ef0565b604082019050919050565b6000613e5b60188361483e565b9150613e6682614f3f565b602082019050919050565b6000613e7e602b8361483e565b9150613e8982614f68565b604082019050919050565b6000613ea160128361483e565b9150613eac82614fb7565b602082019050919050565b6000613ec460148361483e565b9150613ecf82614fe0565b602082019050919050565b6000613ee760268361483e565b9150613ef282615009565b604082019050919050565b6000613f0a60208361483e565b9150613f1582615058565b602082019050919050565b6000613f2d602f8361483e565b9150613f3882615081565b604082019050919050565b6000613f50601a8361483e565b9150613f5b826150d0565b602082019050919050565b6000613f7360328361483e565b9150613f7e826150f9565b604082019050919050565b6000613f9660228361483e565b9150613fa182615148565b604082019050919050565b6000613fb9600083614833565b9150613fc482615197565b600082019050919050565b6000613fdc60108361483e565b9150613fe78261519a565b602082019050919050565b6000613fff60338361483e565b915061400a826151c3565b604082019050919050565b6000614022601d8361483e565b915061402d82615212565b602082019050919050565b600061404560218361483e565b91506140508261523b565b604082019050919050565b600061406860168361483e565b91506140738261528a565b602082019050919050565b600061408b60278361483e565b9150614096826152b3565b604082019050919050565b60006140ae602e8361483e565b91506140b982615302565b604082019050919050565b60006140d160268361483e565b91506140dc82615351565b604082019050919050565b60006140f4601f8361483e565b91506140ff826153a0565b602082019050919050565b6000614117602f8361483e565b9150614122826153c9565b604082019050919050565b600061413a602d8361483e565b915061414582615418565b604082019050919050565b600061415d60228361483e565b915061416882615467565b604082019050919050565b600061418060288361483e565b915061418b826154b6565b604082019050919050565b6040820160008201516141ac6000850182613c43565b5060208201516141bf60208501826141d4565b50505050565b6141ce81614a15565b82525050565b6141dd81614a1f565b82525050565b6141ec81614a33565b82525050565b60006141fe8286613ce2565b915061420a8285613ce2565b91506142168284613ce2565b9150819050949350505050565b600061422e82613fac565b9150819050919050565b600060208201905061424d6000830184613c52565b92915050565b60006080820190506142686000830187613c52565b6142756020830186613c52565b61428260408301856141c5565b81810360608301526142948184613c70565b905095945050505050565b60006020820190506142b46000830184613c61565b92915050565b600060208201905081810360008301526142d48184613ca9565b905092915050565b600060208201905081810360008301526142f581613d13565b9050919050565b6000602082019050818103600083015261431581613d36565b9050919050565b6000602082019050818103600083015261433581613d59565b9050919050565b6000602082019050818103600083015261435581613d7c565b9050919050565b6000602082019050818103600083015261437581613d9f565b9050919050565b6000602082019050818103600083015261439581613dc2565b9050919050565b600060208201905081810360008301526143b581613de5565b9050919050565b600060208201905081810360008301526143d581613e08565b9050919050565b600060208201905081810360008301526143f581613e2b565b9050919050565b6000602082019050818103600083015261441581613e4e565b9050919050565b6000602082019050818103600083015261443581613e71565b9050919050565b6000602082019050818103600083015261445581613e94565b9050919050565b6000602082019050818103600083015261447581613eb7565b9050919050565b6000602082019050818103600083015261449581613eda565b9050919050565b600060208201905081810360008301526144b581613efd565b9050919050565b600060208201905081810360008301526144d581613f20565b9050919050565b600060208201905081810360008301526144f581613f43565b9050919050565b6000602082019050818103600083015261451581613f66565b9050919050565b6000602082019050818103600083015261453581613f89565b9050919050565b6000602082019050818103600083015261455581613fcf565b9050919050565b6000602082019050818103600083015261457581613ff2565b9050919050565b6000602082019050818103600083015261459581614015565b9050919050565b600060208201905081810360008301526145b581614038565b9050919050565b600060208201905081810360008301526145d58161405b565b9050919050565b600060208201905081810360008301526145f58161407e565b9050919050565b60006020820190508181036000830152614615816140a1565b9050919050565b60006020820190508181036000830152614635816140c4565b9050919050565b60006020820190508181036000830152614655816140e7565b9050919050565b600060208201905081810360008301526146758161410a565b9050919050565b600060208201905081810360008301526146958161412d565b9050919050565b600060208201905081810360008301526146b581614150565b9050919050565b600060208201905081810360008301526146d581614173565b9050919050565b60006040820190506146f16000830184614196565b92915050565b600060208201905061470c60008301846141c5565b92915050565b600060208201905061472760008301846141e3565b92915050565b6000614737614748565b90506147438282614ade565b919050565b6000604051905090565b600067ffffffffffffffff82111561476d5761476c614c45565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561479957614798614c45565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147c5576147c4614c45565b5b6147ce82614c8d565b9050602081019050919050565b600067ffffffffffffffff8211156147f6576147f5614c45565b5b6147ff82614c8d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614865826149d9565b9150614870836149d9565b9250826fffffffffffffffffffffffffffffffff0382111561489557614894614b89565b5b828201905092915050565b60006148ab82614a15565b91506148b683614a15565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148eb576148ea614b89565b5b828201905092915050565b600061490182614a15565b915061490c83614a15565b92508261491c5761491b614bb8565b5b828204905092915050565b6000614932826149d9565b915061493d836149d9565b9250828210156149505761494f614b89565b5b828203905092915050565b600061496682614a15565b915061497183614a15565b92508282101561498457614983614b89565b5b828203905092915050565b600061499a826149f5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614a6d578082015181840152602081019050614a52565b83811115614a7c576000848401525b50505050565b6000614a8d82614a15565b91506000821415614aa157614aa0614b89565b5b600182039050919050565b60006002820490506001821680614ac457607f821691505b60208210811415614ad857614ad7614be7565b5b50919050565b614ae782614c8d565b810181811067ffffffffffffffff82111715614b0657614b05614c45565b5b80604052505050565b6000614b1a82614a15565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b4d57614b4c614b89565b5b600182019050919050565b6000614b6382614a15565b9150614b6e83614a15565b925082614b7e57614b7d614bb8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f6e6f74207075626c696373616c65207068617365000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f7460008201527f73206c656e677468000000000000000000000000000000000000000000000000602082015250565b61550e8161498f565b811461551957600080fd5b50565b615525816149a1565b811461553057600080fd5b50565b61553c816149ad565b811461554757600080fd5b50565b61555381614a15565b811461555e57600080fd5b50565b61556a81614a33565b811461557557600080fd5b5056fea264697066735822122054324b3d59d4831e3dbca51c02e1a7740cc6f03edc041dbb91d9e2650f369ee964736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5470397a3466794258366252366736434a545045756e3875346e706f345467345364516e32696f383466696a2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d64387a464c556673396a73445656764373747258676756654b656e7a616e77345036504b647948703777783800000000000000000000000000000000
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 5
Arg [1] : collectionSize_ (uint256): 2000
Arg [2] : amountForDevs_ (uint256): 50
Arg [3] : _tokenBaseURI (string): https://gateway.pinata.cloud/ipfs/QmTp9z4fyBX6bR6g6CJTPEun8u4npo4Tg4SdQn2io84fij/
Arg [4] : _initNotRevealedUri (string): https://gateway.pinata.cloud/ipfs/Qmd8zFLUfs9jsDVVvCstrXggVeKenzanw4P6PKdyHp7wx8
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [1] : 00000000000000000000000000000000000000000000000000000000000007d0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [6] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [7] : 732f516d5470397a3466794258366252366736434a545045756e3875346e706f
Arg [8] : 345467345364516e32696f383466696a2f000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [10] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [11] : 732f516d64387a464c556673396a73445656764373747258676756654b656e7a
Arg [12] : 616e77345036504b647948703777783800000000000000000000000000000000
Deployed Bytecode Sourcemap
42217:3838:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27311:370;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29037:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30562:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42525:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30125:379;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25872:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42465:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31412:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45668:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43772:80;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26503:744;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45033:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31617:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26035:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42558:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43931:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28860:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27737:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41326:103;;;:::i;:::-;;42279:48;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42375:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40675:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45905:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29192:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30830:274;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43858:67;;;:::i;:::-;;42592:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45481:181;;;:::i;:::-;;44688:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43175:381;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31837:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44267:415;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36252:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45792:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31167:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44026:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41584:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42419:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42332:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27311:370;27438:4;27483:25;27468:40;;;:11;:40;;;;:99;;;;27534:33;27519:48;;;:11;:48;;;;27468:99;:160;;;;27593:35;27578:50;;;:11;:50;;;;27468:160;:207;;;;27639:36;27663:11;27639:23;:36::i;:::-;27468:207;27454:221;;27311:370;;;:::o;29037:94::-;29091:13;29120:5;29113:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29037:94;:::o;30562:204::-;30630:7;30654:16;30662:7;30654;:16::i;:::-;30646:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30736:15;:24;30752:7;30736:24;;;;;;;;;;;;;;;;;;;;;30729:31;;30562:204;;;:::o;42525:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30125:379::-;30194:13;30210:24;30226:7;30210:15;:24::i;:::-;30194:40;;30255:5;30249:11;;:2;:11;;;;30241:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30340:5;30324:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30349:37;30366:5;30373:12;:10;:12::i;:::-;30349:16;:37::i;:::-;30324:62;30308:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;30470:28;30479:2;30483:7;30492:5;30470:8;:28::i;:::-;30187:317;30125:379;;:::o;25872:94::-;25925:7;25948:12;;25941:19;;25872:94;:::o;42465:23::-;;;;;;;;;;;;;:::o;31412:142::-;31520:28;31530:4;31536:2;31540:7;31520:9;:28::i;:::-;31412:142;;;:::o;45668:118::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1:::1;22769:7;;:19;;22761:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1;22902:7;:18;;;;45752:28:::2;45771:8;45752:18;:28::i;:::-;22127:1:::1;23081:7;:22;;;;45668:118:::0;:::o;43772:80::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43841:5:::1;43832:6;;:14;;;;;;;;;;;;;;;;;;43772:80:::0;:::o;26503:744::-;26612:7;26647:16;26657:5;26647:9;:16::i;:::-;26639:5;:24;26631:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26709:22;26734:13;:11;:13::i;:::-;26709:38;;26754:19;26784:25;26834:9;26829:350;26853:14;26849:1;:18;26829:350;;;26883:31;26917:11;:14;26929:1;26917:14;;;;;;;;;;;26883:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26970:1;26944:28;;:9;:14;;;:28;;;26940:89;;27005:9;:14;;;26985:34;;26940:89;27062:5;27041:26;;:17;:26;;;27037:135;;;27099:5;27084:11;:20;27080:59;;;27126:1;27119:8;;;;;;;;;27080:59;27149:13;;;;;:::i;:::-;;;;27037:135;26874:305;26869:3;;;;;:::i;:::-;;;;26829:350;;;;27185:56;;;;;;;;;;:::i;:::-;;;;;;;;26503:744;;;;;:::o;45033:442::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45138:13:::1;45126:8;45110:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:41;;45094:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;45258:1;45242:12;45231:8;:23;;;;:::i;:::-;:28;45215:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;45328:17;45359:12;45348:8;:23;;;;:::i;:::-;45328:43;;45383:9;45378:92;45402:9;45398:1;:13;45378:92;;;45427:35;45437:10;45449:12;45427:9;:35::i;:::-;45413:3;;;;;:::i;:::-;;;;45378:92;;;;45087:388;45033:442:::0;:::o;31617:157::-;31729:39;31746:4;31752:2;31756:7;31729:39;;;;;;;;;;;;:16;:39::i;:::-;31617:157;;;:::o;26035:177::-;26102:7;26134:13;:11;:13::i;:::-;26126:5;:21;26118:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26201:5;26194:12;;26035:177;;;:::o;42558:27::-;;;;;;;;;;;;;:::o;43931:89::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44011:3:::1;43996:12;:18;;;;;;;;;;;;:::i;:::-;;43931:89:::0;:::o;28860:118::-;28924:7;28947:20;28959:7;28947:11;:20::i;:::-;:25;;;28940:32;;28860:118;;;:::o;27737:211::-;27801:7;27842:1;27825:19;;:5;:19;;;;27817:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27914:12;:19;27927:5;27914:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;27906:36;;27899:43;;27737:211;;;:::o;41326:103::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41391:30:::1;41418:1;41391:18;:30::i;:::-;41326:103::o:0;42279:48::-;;;:::o;42375:39::-;42407:7;42375:39;:::o;40675:87::-;40721:7;40748:6;;;;;;;;;;;40741:13;;40675:87;:::o;45905:147::-;45986:21;;:::i;:::-;46026:20;46038:7;46026:11;:20::i;:::-;46019:27;;45905:147;;;:::o;29192:98::-;29248:13;29277:7;29270:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29192:98;:::o;30830:274::-;30933:12;:10;:12::i;:::-;30921:24;;:8;:24;;;;30913:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31030:8;30985:18;:32;31004:12;:10;:12::i;:::-;30985:32;;;;;;;;;;;;;;;:42;31018:8;30985:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31079:8;31050:48;;31065:12;:10;:12::i;:::-;31050:48;;;31089:8;31050:48;;;;;;:::i;:::-;;;;;;;;30830:274;;:::o;43858:67::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43915:4:::1;43904:8;;:15;;;;;;;;;;;;;;;;;;43858:67::o:0;42592:44::-;;;;;;;;;;;;;;;;;:::o;45481:181::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1:::1;22769:7;;:19;;22761:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1;22902:7;:18;;;;45546:12:::2;45564:10;:15;;45587:21;45564:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45545:68;;;45628:7;45620:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;45538:124;22127:1:::1;23081:7;:22;;;;45481:181::o:0;44688:339::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44841:8:::1;:15;44821:9;:16;:35;44805:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;44926:9;44921:101;44945:9;:16;44941:1;:20;44921:101;;;45003:8;45012:1;45003:11;;;;;;;;:::i;:::-;;;;;;;;44977:9;:23;44987:9;44997:1;44987:12;;;;;;;;:::i;:::-;;;;;;;;44977:23;;;;;;;;;;;;;;;:37;;;;44963:3;;;;;:::i;:::-;;;;44921:101;;;;44688:339:::0;;:::o;43175:381::-;43110:10;43097:23;;:9;:23;;;43089:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43277:1:::1;43267:6;;;;;;;;;;;:11;;;43259:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;43346:14;43334:8;43318:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;43310:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43445:23;43433:8;43406:24;43419:10;43406:12;:24::i;:::-;:35;;;;:::i;:::-;:62;;43390:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;43519:31;43529:10;43541:8;43519:9;:31::i;:::-;43175:381:::0;:::o;31837:311::-;31974:28;31984:4;31990:2;31994:7;31974:9;:28::i;:::-;32025:48;32048:4;32054:2;32058:7;32067:5;32025:22;:48::i;:::-;32009:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;31837:311;;;;:::o;44267:415::-;44340:13;44372:16;44380:7;44372;:16::i;:::-;44364:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44466:5;44454:17;;:8;;;;;;;;;;;:17;;;44451:66;;;44493:14;44486:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44451:66;44525:21;44549:10;:8;:10::i;:::-;44525:34;;44599:1;44581:7;44575:21;:25;:101;;;;;;;;;;;;;;;;;44627:7;44636:25;44653:7;44636:16;:25::i;:::-;44663:6;;;;;;;;;;;;;;;;;44610:60;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44575:101;44568:108;;;44267:415;;;;:::o;36252:43::-;;;;:::o;45792:107::-;45850:7;45873:20;45887:5;45873:13;:20::i;:::-;45866:27;;45792:107;;;:::o;31167:186::-;31289:4;31312:18;:25;31331:5;31312:25;;;;;;;;;;;;;;;:35;31338:8;31312:35;;;;;;;;;;;;;;;;;;;;;;;;;31305:42;;31167:186;;;;:::o;44026:122::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44127:15:::1;44110:14;:32;;;;;;;;;;;;:::i;:::-;;44026:122:::0;:::o;41584:201::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41693:1:::1;41673:22;;:8;:22;;;;41665:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41749:28;41768:8;41749:18;:28::i;:::-;41584:201:::0;:::o;42419:39::-;;;;;;;;;;;;;;;;;;;:::o;42332:38::-;;;:::o;13440:157::-;13525:4;13564:25;13549:40;;;:11;:40;;;;13542:47;;13440:157;;;:::o;32387:105::-;32444:4;32474:12;;32464:7;:22;32457:29;;32387:105;;;:::o;23797:98::-;23850:7;23877:10;23870:17;;23797:98;:::o;36074:172::-;36198:2;36171:15;:24;36187:7;36171:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36232:7;36228:2;36212:28;;36221:5;36212:28;;;;;;;;;;;;36074:172;;;:::o;34439:1529::-;34536:35;34574:20;34586:7;34574:11;:20::i;:::-;34536:58;;34603:22;34645:13;:18;;;34629:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;34698:12;:10;:12::i;:::-;34674:36;;:20;34686:7;34674:11;:20::i;:::-;:36;;;34629:81;:142;;;;34721:50;34738:13;:18;;;34758:12;:10;:12::i;:::-;34721:16;:50::i;:::-;34629:142;34603:169;;34797:17;34781:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34929:4;34907:26;;:13;:18;;;:26;;;34891:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35018:1;35004:16;;:2;:16;;;;34996:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35071:43;35093:4;35099:2;35103:7;35112:1;35071:21;:43::i;:::-;35171:49;35188:1;35192:7;35201:13;:18;;;35171:8;:49::i;:::-;35259:1;35229:12;:18;35242:4;35229:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35295:1;35267:12;:16;35280:2;35267:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35326:43;;;;;;;;35341:2;35326:43;;;;;;35352:15;35326:43;;;;;35303:11;:20;35315:7;35303:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35597:19;35629:1;35619:7;:11;;;;:::i;:::-;35597:33;;35682:1;35641:43;;:11;:24;35653:11;35641:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;35637:236;;;35699:20;35707:11;35699:7;:20::i;:::-;35695:171;;;35759:97;;;;;;;;35786:13;:18;;;35759:97;;;;;;35817:13;:28;;;35759:97;;;;;35732:11;:24;35744:11;35732:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35695:171;35637:236;35905:7;35901:2;35886:27;;35895:4;35886:27;;;;;;;;;;;;35920:42;35941:4;35947:2;35951:7;35960:1;35920:20;:42::i;:::-;34529:1439;;;34439:1529;;;:::o;36400:846::-;36462:25;36490:24;;36462:52;;36540:1;36529:8;:12;36521:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;36577:16;36627:1;36616:8;36596:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;36577:51;;36667:1;36650:14;:18;;;;:::i;:::-;36639:8;:29;36635:81;;;36707:1;36690:14;:18;;;;:::i;:::-;36679:29;;36635:81;36831:17;36839:8;36831:7;:17::i;:::-;36823:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36903:9;36915:17;36903:29;;36898:297;36939:8;36934:1;:13;36898:297;;36998:1;36967:33;;:11;:14;36979:1;36967:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;36963:225;;;37013:31;37047:14;37059:1;37047:11;:14::i;:::-;37013:48;;37089:89;;;;;;;;37116:9;:14;;;37089:89;;;;;;37143:9;:24;;;37089:89;;;;;37072:11;:14;37084:1;37072:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37002:186;36963:225;36949:3;;;;;:::i;:::-;;;;36898:297;;;;37239:1;37228:8;:12;;;;:::i;:::-;37201:24;:39;;;;36455:791;;36400:846;:::o;32498:98::-;32563:27;32573:2;32577:8;32563:27;;;;;;;;;;;;:9;:27::i;:::-;32498:98;;:::o;28200:606::-;28276:21;;:::i;:::-;28317:16;28325:7;28317;:16::i;:::-;28309:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28389:26;28437:12;28426:7;:23;28422:93;;28506:1;28491:12;28481:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;28460:47;;28422:93;28528:12;28543:7;28528:22;;28523:212;28560:18;28552:4;:26;28523:212;;28597:31;28631:11;:17;28643:4;28631:17;;;;;;;;;;;28597:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28687:1;28661:28;;:9;:14;;;:28;;;28657:71;;28709:9;28702:16;;;;;;;28657:71;28588:147;28580:6;;;;;:::i;:::-;;;;28523:212;;;;28743:57;;;;;;;;;;:::i;:::-;;;;;;;;28200:606;;;;:::o;41945:191::-;42019:16;42038:6;;;;;;;;;;;42019:25;;42064:8;42055:6;;:17;;;;;;;;;;;;;;;;;;42119:8;42088:40;;42109:8;42088:40;;;;;;;;;;;;42008:128;41945:191;:::o;37789:690::-;37926:4;37943:15;:2;:13;;;:15::i;:::-;37939:535;;;37998:2;37982:36;;;38019:12;:10;:12::i;:::-;38033:4;38039:7;38048:5;37982:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37969:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38230:1;38213:6;:13;:18;38209:215;;;38246:61;;;;;;;;;;:::i;:::-;;;;;;;;38209:215;38392:6;38386:13;38377:6;38373:2;38369:15;38362:38;37969:464;38114:45;;;38104:55;;;:6;:55;;;;38097:62;;;;;37939:535;38462:4;38455:11;;37789:690;;;;;;;:::o;44154:107::-;44214:13;44243:12;44236:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44154:107;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;27954:240::-;28015:7;28064:1;28047:19;;:5;:19;;;;28031:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;28155:12;:19;28168:5;28155:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;28147:41;;28140:48;;27954:240;;;:::o;38941:141::-;;;;;:::o;39468:140::-;;;;;:::o;32935:1272::-;33040:20;33063:12;;33040:35;;33104:1;33090:16;;:2;:16;;;;33082:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33281:21;33289:12;33281:7;:21::i;:::-;33280:22;33272:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33363:12;33351:8;:24;;33343:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33423:61;33453:1;33457:2;33461:12;33475:8;33423:21;:61::i;:::-;33493:30;33526:12;:16;33539:2;33526:16;;;;;;;;;;;;;;;33493:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33568:119;;;;;;;;33618:8;33588:11;:19;;;:39;;;;:::i;:::-;33568:119;;;;;;33671:8;33636:11;:24;;;:44;;;;:::i;:::-;33568:119;;;;;33549:12;:16;33562:2;33549:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33722:43;;;;;;;;33737:2;33722:43;;;;;;33748:15;33722:43;;;;;33694:11;:25;33706:12;33694:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33774:20;33797:12;33774:35;;33823:9;33818:281;33842:8;33838:1;:12;33818:281;;;33896:12;33892:2;33871:38;;33888:1;33871:38;;;;;;;;;;;;33936:59;33967:1;33971:2;33975:12;33989:5;33936:22;:59::i;:::-;33918:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;34077:14;;;;;:::i;:::-;;;;33852:3;;;;;:::i;:::-;;;;33818:281;;;;34122:12;34107;:27;;;;34141:60;34170:1;34174:2;34178:12;34192:8;34141:20;:60::i;:::-;33033:1174;;;32935:1272;;;:::o;3357:326::-;3417:4;3674:1;3652:7;:19;;;:23;3645:30;;3357:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:135::-;4597:5;4635:6;4622:20;4613:29;;4651:31;4676:5;4651:31;:::i;:::-;4553:135;;;;:::o;4694:329::-;4753:6;4802:2;4790:9;4781:7;4777:23;4773:32;4770:119;;;4808:79;;:::i;:::-;4770:119;4928:1;4953:53;4998:7;4989:6;4978:9;4974:22;4953:53;:::i;:::-;4943:63;;4899:117;4694:329;;;;:::o;5029:474::-;5097:6;5105;5154:2;5142:9;5133:7;5129:23;5125:32;5122:119;;;5160:79;;:::i;:::-;5122:119;5280:1;5305:53;5350:7;5341:6;5330:9;5326:22;5305:53;:::i;:::-;5295:63;;5251:117;5407:2;5433:53;5478:7;5469:6;5458:9;5454:22;5433:53;:::i;:::-;5423:63;;5378:118;5029:474;;;;;:::o;5509:619::-;5586:6;5594;5602;5651:2;5639:9;5630:7;5626:23;5622:32;5619:119;;;5657:79;;:::i;:::-;5619:119;5777:1;5802:53;5847:7;5838:6;5827:9;5823:22;5802:53;:::i;:::-;5792:63;;5748:117;5904:2;5930:53;5975:7;5966:6;5955:9;5951:22;5930:53;:::i;:::-;5920:63;;5875:118;6032:2;6058:53;6103:7;6094:6;6083:9;6079:22;6058:53;:::i;:::-;6048:63;;6003:118;5509:619;;;;;:::o;6134:943::-;6229:6;6237;6245;6253;6302:3;6290:9;6281:7;6277:23;6273:33;6270:120;;;6309:79;;:::i;:::-;6270:120;6429:1;6454:53;6499:7;6490:6;6479:9;6475:22;6454:53;:::i;:::-;6444:63;;6400:117;6556:2;6582:53;6627:7;6618:6;6607:9;6603:22;6582:53;:::i;:::-;6572:63;;6527:118;6684:2;6710:53;6755:7;6746:6;6735:9;6731:22;6710:53;:::i;:::-;6700:63;;6655:118;6840:2;6829:9;6825:18;6812:32;6871:18;6863:6;6860:30;6857:117;;;6893:79;;:::i;:::-;6857:117;6998:62;7052:7;7043:6;7032:9;7028:22;6998:62;:::i;:::-;6988:72;;6783:287;6134:943;;;;;;;:::o;7083:468::-;7148:6;7156;7205:2;7193:9;7184:7;7180:23;7176:32;7173:119;;;7211:79;;:::i;:::-;7173:119;7331:1;7356:53;7401:7;7392:6;7381:9;7377:22;7356:53;:::i;:::-;7346:63;;7302:117;7458:2;7484:50;7526:7;7517:6;7506:9;7502:22;7484:50;:::i;:::-;7474:60;;7429:115;7083:468;;;;;:::o;7557:474::-;7625:6;7633;7682:2;7670:9;7661:7;7657:23;7653:32;7650:119;;;7688:79;;:::i;:::-;7650:119;7808:1;7833:53;7878:7;7869:6;7858:9;7854:22;7833:53;:::i;:::-;7823:63;;7779:117;7935:2;7961:53;8006:7;7997:6;7986:9;7982:22;7961:53;:::i;:::-;7951:63;;7906:118;7557:474;;;;;:::o;8037:894::-;8155:6;8163;8212:2;8200:9;8191:7;8187:23;8183:32;8180:119;;;8218:79;;:::i;:::-;8180:119;8366:1;8355:9;8351:17;8338:31;8396:18;8388:6;8385:30;8382:117;;;8418:79;;:::i;:::-;8382:117;8523:78;8593:7;8584:6;8573:9;8569:22;8523:78;:::i;:::-;8513:88;;8309:302;8678:2;8667:9;8663:18;8650:32;8709:18;8701:6;8698:30;8695:117;;;8731:79;;:::i;:::-;8695:117;8836:78;8906:7;8897:6;8886:9;8882:22;8836:78;:::i;:::-;8826:88;;8621:303;8037:894;;;;;:::o;8937:327::-;8995:6;9044:2;9032:9;9023:7;9019:23;9015:32;9012:119;;;9050:79;;:::i;:::-;9012:119;9170:1;9195:52;9239:7;9230:6;9219:9;9215:22;9195:52;:::i;:::-;9185:62;;9141:116;8937:327;;;;:::o;9270:349::-;9339:6;9388:2;9376:9;9367:7;9363:23;9359:32;9356:119;;;9394:79;;:::i;:::-;9356:119;9514:1;9539:63;9594:7;9585:6;9574:9;9570:22;9539:63;:::i;:::-;9529:73;;9485:127;9270:349;;;;:::o;9625:509::-;9694:6;9743:2;9731:9;9722:7;9718:23;9714:32;9711:119;;;9749:79;;:::i;:::-;9711:119;9897:1;9886:9;9882:17;9869:31;9927:18;9919:6;9916:30;9913:117;;;9949:79;;:::i;:::-;9913:117;10054:63;10109:7;10100:6;10089:9;10085:22;10054:63;:::i;:::-;10044:73;;9840:287;9625:509;;;;:::o;10140:329::-;10199:6;10248:2;10236:9;10227:7;10223:23;10219:32;10216:119;;;10254:79;;:::i;:::-;10216:119;10374:1;10399:53;10444:7;10435:6;10424:9;10420:22;10399:53;:::i;:::-;10389:63;;10345:117;10140:329;;;;:::o;10475:325::-;10532:6;10581:2;10569:9;10560:7;10556:23;10552:32;10549:119;;;10587:79;;:::i;:::-;10549:119;10707:1;10732:51;10775:7;10766:6;10755:9;10751:22;10732:51;:::i;:::-;10722:61;;10678:115;10475:325;;;;:::o;10806:108::-;10883:24;10901:5;10883:24;:::i;:::-;10878:3;10871:37;10806:108;;:::o;10920:118::-;11007:24;11025:5;11007:24;:::i;:::-;11002:3;10995:37;10920:118;;:::o;11044:109::-;11125:21;11140:5;11125:21;:::i;:::-;11120:3;11113:34;11044:109;;:::o;11159:360::-;11245:3;11273:38;11305:5;11273:38;:::i;:::-;11327:70;11390:6;11385:3;11327:70;:::i;:::-;11320:77;;11406:52;11451:6;11446:3;11439:4;11432:5;11428:16;11406:52;:::i;:::-;11483:29;11505:6;11483:29;:::i;:::-;11478:3;11474:39;11467:46;;11249:270;11159:360;;;;:::o;11525:364::-;11613:3;11641:39;11674:5;11641:39;:::i;:::-;11696:71;11760:6;11755:3;11696:71;:::i;:::-;11689:78;;11776:52;11821:6;11816:3;11809:4;11802:5;11798:16;11776:52;:::i;:::-;11853:29;11875:6;11853:29;:::i;:::-;11848:3;11844:39;11837:46;;11617:272;11525:364;;;;:::o;11895:377::-;12001:3;12029:39;12062:5;12029:39;:::i;:::-;12084:89;12166:6;12161:3;12084:89;:::i;:::-;12077:96;;12182:52;12227:6;12222:3;12215:4;12208:5;12204:16;12182:52;:::i;:::-;12259:6;12254:3;12250:16;12243:23;;12005:267;11895:377;;;;:::o;12278:366::-;12420:3;12441:67;12505:2;12500:3;12441:67;:::i;:::-;12434:74;;12517:93;12606:3;12517:93;:::i;:::-;12635:2;12630:3;12626:12;12619:19;;12278:366;;;:::o;12650:::-;12792:3;12813:67;12877:2;12872:3;12813:67;:::i;:::-;12806:74;;12889:93;12978:3;12889:93;:::i;:::-;13007:2;13002:3;12998:12;12991:19;;12650:366;;;:::o;13022:::-;13164:3;13185:67;13249:2;13244:3;13185:67;:::i;:::-;13178:74;;13261:93;13350:3;13261:93;:::i;:::-;13379:2;13374:3;13370:12;13363:19;;13022:366;;;:::o;13394:::-;13536:3;13557:67;13621:2;13616:3;13557:67;:::i;:::-;13550:74;;13633:93;13722:3;13633:93;:::i;:::-;13751:2;13746:3;13742:12;13735:19;;13394:366;;;:::o;13766:::-;13908:3;13929:67;13993:2;13988:3;13929:67;:::i;:::-;13922:74;;14005:93;14094:3;14005:93;:::i;:::-;14123:2;14118:3;14114:12;14107:19;;13766:366;;;:::o;14138:::-;14280:3;14301:67;14365:2;14360:3;14301:67;:::i;:::-;14294:74;;14377:93;14466:3;14377:93;:::i;:::-;14495:2;14490:3;14486:12;14479:19;;14138:366;;;:::o;14510:::-;14652:3;14673:67;14737:2;14732:3;14673:67;:::i;:::-;14666:74;;14749:93;14838:3;14749:93;:::i;:::-;14867:2;14862:3;14858:12;14851:19;;14510:366;;;:::o;14882:::-;15024:3;15045:67;15109:2;15104:3;15045:67;:::i;:::-;15038:74;;15121:93;15210:3;15121:93;:::i;:::-;15239:2;15234:3;15230:12;15223:19;;14882:366;;;:::o;15254:::-;15396:3;15417:67;15481:2;15476:3;15417:67;:::i;:::-;15410:74;;15493:93;15582:3;15493:93;:::i;:::-;15611:2;15606:3;15602:12;15595:19;;15254:366;;;:::o;15626:::-;15768:3;15789:67;15853:2;15848:3;15789:67;:::i;:::-;15782:74;;15865:93;15954:3;15865:93;:::i;:::-;15983:2;15978:3;15974:12;15967:19;;15626:366;;;:::o;15998:::-;16140:3;16161:67;16225:2;16220:3;16161:67;:::i;:::-;16154:74;;16237:93;16326:3;16237:93;:::i;:::-;16355:2;16350:3;16346:12;16339:19;;15998:366;;;:::o;16370:::-;16512:3;16533:67;16597:2;16592:3;16533:67;:::i;:::-;16526:74;;16609:93;16698:3;16609:93;:::i;:::-;16727:2;16722:3;16718:12;16711:19;;16370:366;;;:::o;16742:::-;16884:3;16905:67;16969:2;16964:3;16905:67;:::i;:::-;16898:74;;16981:93;17070:3;16981:93;:::i;:::-;17099:2;17094:3;17090:12;17083:19;;16742:366;;;:::o;17114:::-;17256:3;17277:67;17341:2;17336:3;17277:67;:::i;:::-;17270:74;;17353:93;17442:3;17353:93;:::i;:::-;17471:2;17466:3;17462:12;17455:19;;17114:366;;;:::o;17486:::-;17628:3;17649:67;17713:2;17708:3;17649:67;:::i;:::-;17642:74;;17725:93;17814:3;17725:93;:::i;:::-;17843:2;17838:3;17834:12;17827:19;;17486:366;;;:::o;17858:::-;18000:3;18021:67;18085:2;18080:3;18021:67;:::i;:::-;18014:74;;18097:93;18186:3;18097:93;:::i;:::-;18215:2;18210:3;18206:12;18199:19;;17858:366;;;:::o;18230:::-;18372:3;18393:67;18457:2;18452:3;18393:67;:::i;:::-;18386:74;;18469:93;18558:3;18469:93;:::i;:::-;18587:2;18582:3;18578:12;18571:19;;18230:366;;;:::o;18602:::-;18744:3;18765:67;18829:2;18824:3;18765:67;:::i;:::-;18758:74;;18841:93;18930:3;18841:93;:::i;:::-;18959:2;18954:3;18950:12;18943:19;;18602:366;;;:::o;18974:::-;19116:3;19137:67;19201:2;19196:3;19137:67;:::i;:::-;19130:74;;19213:93;19302:3;19213:93;:::i;:::-;19331:2;19326:3;19322:12;19315:19;;18974:366;;;:::o;19346:398::-;19505:3;19526:83;19607:1;19602:3;19526:83;:::i;:::-;19519:90;;19618:93;19707:3;19618:93;:::i;:::-;19736:1;19731:3;19727:11;19720:18;;19346:398;;;:::o;19750:366::-;19892:3;19913:67;19977:2;19972:3;19913:67;:::i;:::-;19906:74;;19989:93;20078:3;19989:93;:::i;:::-;20107:2;20102:3;20098:12;20091:19;;19750:366;;;:::o;20122:::-;20264:3;20285:67;20349:2;20344:3;20285:67;:::i;:::-;20278:74;;20361:93;20450:3;20361:93;:::i;:::-;20479:2;20474:3;20470:12;20463:19;;20122:366;;;:::o;20494:::-;20636:3;20657:67;20721:2;20716:3;20657:67;:::i;:::-;20650:74;;20733:93;20822:3;20733:93;:::i;:::-;20851:2;20846:3;20842:12;20835:19;;20494:366;;;:::o;20866:::-;21008:3;21029:67;21093:2;21088:3;21029:67;:::i;:::-;21022:74;;21105:93;21194:3;21105:93;:::i;:::-;21223:2;21218:3;21214:12;21207:19;;20866:366;;;:::o;21238:::-;21380:3;21401:67;21465:2;21460:3;21401:67;:::i;:::-;21394:74;;21477:93;21566:3;21477:93;:::i;:::-;21595:2;21590:3;21586:12;21579:19;;21238:366;;;:::o;21610:::-;21752:3;21773:67;21837:2;21832:3;21773:67;:::i;:::-;21766:74;;21849:93;21938:3;21849:93;:::i;:::-;21967:2;21962:3;21958:12;21951:19;;21610:366;;;:::o;21982:::-;22124:3;22145:67;22209:2;22204:3;22145:67;:::i;:::-;22138:74;;22221:93;22310:3;22221:93;:::i;:::-;22339:2;22334:3;22330:12;22323:19;;21982:366;;;:::o;22354:::-;22496:3;22517:67;22581:2;22576:3;22517:67;:::i;:::-;22510:74;;22593:93;22682:3;22593:93;:::i;:::-;22711:2;22706:3;22702:12;22695:19;;22354:366;;;:::o;22726:::-;22868:3;22889:67;22953:2;22948:3;22889:67;:::i;:::-;22882:74;;22965:93;23054:3;22965:93;:::i;:::-;23083:2;23078:3;23074:12;23067:19;;22726:366;;;:::o;23098:::-;23240:3;23261:67;23325:2;23320:3;23261:67;:::i;:::-;23254:74;;23337:93;23426:3;23337:93;:::i;:::-;23455:2;23450:3;23446:12;23439:19;;23098:366;;;:::o;23470:::-;23612:3;23633:67;23697:2;23692:3;23633:67;:::i;:::-;23626:74;;23709:93;23798:3;23709:93;:::i;:::-;23827:2;23822:3;23818:12;23811:19;;23470:366;;;:::o;23842:::-;23984:3;24005:67;24069:2;24064:3;24005:67;:::i;:::-;23998:74;;24081:93;24170:3;24081:93;:::i;:::-;24199:2;24194:3;24190:12;24183:19;;23842:366;;;:::o;24214:::-;24356:3;24377:67;24441:2;24436:3;24377:67;:::i;:::-;24370:74;;24453:93;24542:3;24453:93;:::i;:::-;24571:2;24566:3;24562:12;24555:19;;24214:366;;;:::o;24656:527::-;24815:4;24810:3;24806:14;24902:4;24895:5;24891:16;24885:23;24921:63;24978:4;24973:3;24969:14;24955:12;24921:63;:::i;:::-;24830:164;25086:4;25079:5;25075:16;25069:23;25105:61;25160:4;25155:3;25151:14;25137:12;25105:61;:::i;:::-;25004:172;24784:399;24656:527;;:::o;25189:118::-;25276:24;25294:5;25276:24;:::i;:::-;25271:3;25264:37;25189:118;;:::o;25313:105::-;25388:23;25405:5;25388:23;:::i;:::-;25383:3;25376:36;25313:105;;:::o;25424:112::-;25507:22;25523:5;25507:22;:::i;:::-;25502:3;25495:35;25424:112;;:::o;25542:595::-;25770:3;25792:95;25883:3;25874:6;25792:95;:::i;:::-;25785:102;;25904:95;25995:3;25986:6;25904:95;:::i;:::-;25897:102;;26016:95;26107:3;26098:6;26016:95;:::i;:::-;26009:102;;26128:3;26121:10;;25542:595;;;;;;:::o;26143:379::-;26327:3;26349:147;26492:3;26349:147;:::i;:::-;26342:154;;26513:3;26506:10;;26143:379;;;:::o;26528:222::-;26621:4;26659:2;26648:9;26644:18;26636:26;;26672:71;26740:1;26729:9;26725:17;26716:6;26672:71;:::i;:::-;26528:222;;;;:::o;26756:640::-;26951:4;26989:3;26978:9;26974:19;26966:27;;27003:71;27071:1;27060:9;27056:17;27047:6;27003:71;:::i;:::-;27084:72;27152:2;27141:9;27137:18;27128:6;27084:72;:::i;:::-;27166;27234:2;27223:9;27219:18;27210:6;27166:72;:::i;:::-;27285:9;27279:4;27275:20;27270:2;27259:9;27255:18;27248:48;27313:76;27384:4;27375:6;27313:76;:::i;:::-;27305:84;;26756:640;;;;;;;:::o;27402:210::-;27489:4;27527:2;27516:9;27512:18;27504:26;;27540:65;27602:1;27591:9;27587:17;27578:6;27540:65;:::i;:::-;27402:210;;;;:::o;27618:313::-;27731:4;27769:2;27758:9;27754:18;27746:26;;27818:9;27812:4;27808:20;27804:1;27793:9;27789:17;27782:47;27846:78;27919:4;27910:6;27846:78;:::i;:::-;27838:86;;27618:313;;;;:::o;27937:419::-;28103:4;28141:2;28130:9;28126:18;28118:26;;28190:9;28184:4;28180:20;28176:1;28165:9;28161:17;28154:47;28218:131;28344:4;28218:131;:::i;:::-;28210:139;;27937:419;;;:::o;28362:::-;28528:4;28566:2;28555:9;28551:18;28543:26;;28615:9;28609:4;28605:20;28601:1;28590:9;28586:17;28579:47;28643:131;28769:4;28643:131;:::i;:::-;28635:139;;28362:419;;;:::o;28787:::-;28953:4;28991:2;28980:9;28976:18;28968:26;;29040:9;29034:4;29030:20;29026:1;29015:9;29011:17;29004:47;29068:131;29194:4;29068:131;:::i;:::-;29060:139;;28787:419;;;:::o;29212:::-;29378:4;29416:2;29405:9;29401:18;29393:26;;29465:9;29459:4;29455:20;29451:1;29440:9;29436:17;29429:47;29493:131;29619:4;29493:131;:::i;:::-;29485:139;;29212:419;;;:::o;29637:::-;29803:4;29841:2;29830:9;29826:18;29818:26;;29890:9;29884:4;29880:20;29876:1;29865:9;29861:17;29854:47;29918:131;30044:4;29918:131;:::i;:::-;29910:139;;29637:419;;;:::o;30062:::-;30228:4;30266:2;30255:9;30251:18;30243:26;;30315:9;30309:4;30305:20;30301:1;30290:9;30286:17;30279:47;30343:131;30469:4;30343:131;:::i;:::-;30335:139;;30062:419;;;:::o;30487:::-;30653:4;30691:2;30680:9;30676:18;30668:26;;30740:9;30734:4;30730:20;30726:1;30715:9;30711:17;30704:47;30768:131;30894:4;30768:131;:::i;:::-;30760:139;;30487:419;;;:::o;30912:::-;31078:4;31116:2;31105:9;31101:18;31093:26;;31165:9;31159:4;31155:20;31151:1;31140:9;31136:17;31129:47;31193:131;31319:4;31193:131;:::i;:::-;31185:139;;30912:419;;;:::o;31337:::-;31503:4;31541:2;31530:9;31526:18;31518:26;;31590:9;31584:4;31580:20;31576:1;31565:9;31561:17;31554:47;31618:131;31744:4;31618:131;:::i;:::-;31610:139;;31337:419;;;:::o;31762:::-;31928:4;31966:2;31955:9;31951:18;31943:26;;32015:9;32009:4;32005:20;32001:1;31990:9;31986:17;31979:47;32043:131;32169:4;32043:131;:::i;:::-;32035:139;;31762:419;;;:::o;32187:::-;32353:4;32391:2;32380:9;32376:18;32368:26;;32440:9;32434:4;32430:20;32426:1;32415:9;32411:17;32404:47;32468:131;32594:4;32468:131;:::i;:::-;32460:139;;32187:419;;;:::o;32612:::-;32778:4;32816:2;32805:9;32801:18;32793:26;;32865:9;32859:4;32855:20;32851:1;32840:9;32836:17;32829:47;32893:131;33019:4;32893:131;:::i;:::-;32885:139;;32612:419;;;:::o;33037:::-;33203:4;33241:2;33230:9;33226:18;33218:26;;33290:9;33284:4;33280:20;33276:1;33265:9;33261:17;33254:47;33318:131;33444:4;33318:131;:::i;:::-;33310:139;;33037:419;;;:::o;33462:::-;33628:4;33666:2;33655:9;33651:18;33643:26;;33715:9;33709:4;33705:20;33701:1;33690:9;33686:17;33679:47;33743:131;33869:4;33743:131;:::i;:::-;33735:139;;33462:419;;;:::o;33887:::-;34053:4;34091:2;34080:9;34076:18;34068:26;;34140:9;34134:4;34130:20;34126:1;34115:9;34111:17;34104:47;34168:131;34294:4;34168:131;:::i;:::-;34160:139;;33887:419;;;:::o;34312:::-;34478:4;34516:2;34505:9;34501:18;34493:26;;34565:9;34559:4;34555:20;34551:1;34540:9;34536:17;34529:47;34593:131;34719:4;34593:131;:::i;:::-;34585:139;;34312:419;;;:::o;34737:::-;34903:4;34941:2;34930:9;34926:18;34918:26;;34990:9;34984:4;34980:20;34976:1;34965:9;34961:17;34954:47;35018:131;35144:4;35018:131;:::i;:::-;35010:139;;34737:419;;;:::o;35162:::-;35328:4;35366:2;35355:9;35351:18;35343:26;;35415:9;35409:4;35405:20;35401:1;35390:9;35386:17;35379:47;35443:131;35569:4;35443:131;:::i;:::-;35435:139;;35162:419;;;:::o;35587:::-;35753:4;35791:2;35780:9;35776:18;35768:26;;35840:9;35834:4;35830:20;35826:1;35815:9;35811:17;35804:47;35868:131;35994:4;35868:131;:::i;:::-;35860:139;;35587:419;;;:::o;36012:::-;36178:4;36216:2;36205:9;36201:18;36193:26;;36265:9;36259:4;36255:20;36251:1;36240:9;36236:17;36229:47;36293:131;36419:4;36293:131;:::i;:::-;36285:139;;36012:419;;;:::o;36437:::-;36603:4;36641:2;36630:9;36626:18;36618:26;;36690:9;36684:4;36680:20;36676:1;36665:9;36661:17;36654:47;36718:131;36844:4;36718:131;:::i;:::-;36710:139;;36437:419;;;:::o;36862:::-;37028:4;37066:2;37055:9;37051:18;37043:26;;37115:9;37109:4;37105:20;37101:1;37090:9;37086:17;37079:47;37143:131;37269:4;37143:131;:::i;:::-;37135:139;;36862:419;;;:::o;37287:::-;37453:4;37491:2;37480:9;37476:18;37468:26;;37540:9;37534:4;37530:20;37526:1;37515:9;37511:17;37504:47;37568:131;37694:4;37568:131;:::i;:::-;37560:139;;37287:419;;;:::o;37712:::-;37878:4;37916:2;37905:9;37901:18;37893:26;;37965:9;37959:4;37955:20;37951:1;37940:9;37936:17;37929:47;37993:131;38119:4;37993:131;:::i;:::-;37985:139;;37712:419;;;:::o;38137:::-;38303:4;38341:2;38330:9;38326:18;38318:26;;38390:9;38384:4;38380:20;38376:1;38365:9;38361:17;38354:47;38418:131;38544:4;38418:131;:::i;:::-;38410:139;;38137:419;;;:::o;38562:::-;38728:4;38766:2;38755:9;38751:18;38743:26;;38815:9;38809:4;38805:20;38801:1;38790:9;38786:17;38779:47;38843:131;38969:4;38843:131;:::i;:::-;38835:139;;38562:419;;;:::o;38987:::-;39153:4;39191:2;39180:9;39176:18;39168:26;;39240:9;39234:4;39230:20;39226:1;39215:9;39211:17;39204:47;39268:131;39394:4;39268:131;:::i;:::-;39260:139;;38987:419;;;:::o;39412:::-;39578:4;39616:2;39605:9;39601:18;39593:26;;39665:9;39659:4;39655:20;39651:1;39640:9;39636:17;39629:47;39693:131;39819:4;39693:131;:::i;:::-;39685:139;;39412:419;;;:::o;39837:::-;40003:4;40041:2;40030:9;40026:18;40018:26;;40090:9;40084:4;40080:20;40076:1;40065:9;40061:17;40054:47;40118:131;40244:4;40118:131;:::i;:::-;40110:139;;39837:419;;;:::o;40262:::-;40428:4;40466:2;40455:9;40451:18;40443:26;;40515:9;40509:4;40505:20;40501:1;40490:9;40486:17;40479:47;40543:131;40669:4;40543:131;:::i;:::-;40535:139;;40262:419;;;:::o;40687:::-;40853:4;40891:2;40880:9;40876:18;40868:26;;40940:9;40934:4;40930:20;40926:1;40915:9;40911:17;40904:47;40968:131;41094:4;40968:131;:::i;:::-;40960:139;;40687:419;;;:::o;41112:::-;41278:4;41316:2;41305:9;41301:18;41293:26;;41365:9;41359:4;41355:20;41351:1;41340:9;41336:17;41329:47;41393:131;41519:4;41393:131;:::i;:::-;41385:139;;41112:419;;;:::o;41537:346::-;41692:4;41730:2;41719:9;41715:18;41707:26;;41743:133;41873:1;41862:9;41858:17;41849:6;41743:133;:::i;:::-;41537:346;;;;:::o;41889:222::-;41982:4;42020:2;42009:9;42005:18;41997:26;;42033:71;42101:1;42090:9;42086:17;42077:6;42033:71;:::i;:::-;41889:222;;;;:::o;42117:214::-;42206:4;42244:2;42233:9;42229:18;42221:26;;42257:67;42321:1;42310:9;42306:17;42297:6;42257:67;:::i;:::-;42117:214;;;;:::o;42337:129::-;42371:6;42398:20;;:::i;:::-;42388:30;;42427:33;42455:4;42447:6;42427:33;:::i;:::-;42337:129;;;:::o;42472:75::-;42505:6;42538:2;42532:9;42522:19;;42472:75;:::o;42553:311::-;42630:4;42720:18;42712:6;42709:30;42706:56;;;42742:18;;:::i;:::-;42706:56;42792:4;42784:6;42780:17;42772:25;;42852:4;42846;42842:15;42834:23;;42553:311;;;:::o;42870:::-;42947:4;43037:18;43029:6;43026:30;43023:56;;;43059:18;;:::i;:::-;43023:56;43109:4;43101:6;43097:17;43089:25;;43169:4;43163;43159:15;43151:23;;42870:311;;;:::o;43187:307::-;43248:4;43338:18;43330:6;43327:30;43324:56;;;43360:18;;:::i;:::-;43324:56;43398:29;43420:6;43398:29;:::i;:::-;43390:37;;43482:4;43476;43472:15;43464:23;;43187:307;;;:::o;43500:308::-;43562:4;43652:18;43644:6;43641:30;43638:56;;;43674:18;;:::i;:::-;43638:56;43712:29;43734:6;43712:29;:::i;:::-;43704:37;;43796:4;43790;43786:15;43778:23;;43500:308;;;:::o;43814:98::-;43865:6;43899:5;43893:12;43883:22;;43814:98;;;:::o;43918:99::-;43970:6;44004:5;43998:12;43988:22;;43918:99;;;:::o;44023:168::-;44106:11;44140:6;44135:3;44128:19;44180:4;44175:3;44171:14;44156:29;;44023:168;;;;:::o;44197:147::-;44298:11;44335:3;44320:18;;44197:147;;;;:::o;44350:169::-;44434:11;44468:6;44463:3;44456:19;44508:4;44503:3;44499:14;44484:29;;44350:169;;;;:::o;44525:148::-;44627:11;44664:3;44649:18;;44525:148;;;;:::o;44679:273::-;44719:3;44738:20;44756:1;44738:20;:::i;:::-;44733:25;;44772:20;44790:1;44772:20;:::i;:::-;44767:25;;44894:1;44858:34;44854:42;44851:1;44848:49;44845:75;;;44900:18;;:::i;:::-;44845:75;44944:1;44941;44937:9;44930:16;;44679:273;;;;:::o;44958:305::-;44998:3;45017:20;45035:1;45017:20;:::i;:::-;45012:25;;45051:20;45069:1;45051:20;:::i;:::-;45046:25;;45205:1;45137:66;45133:74;45130:1;45127:81;45124:107;;;45211:18;;:::i;:::-;45124:107;45255:1;45252;45248:9;45241:16;;44958:305;;;;:::o;45269:185::-;45309:1;45326:20;45344:1;45326:20;:::i;:::-;45321:25;;45360:20;45378:1;45360:20;:::i;:::-;45355:25;;45399:1;45389:35;;45404:18;;:::i;:::-;45389:35;45446:1;45443;45439:9;45434:14;;45269:185;;;;:::o;45460:191::-;45500:4;45520:20;45538:1;45520:20;:::i;:::-;45515:25;;45554:20;45572:1;45554:20;:::i;:::-;45549:25;;45593:1;45590;45587:8;45584:34;;;45598:18;;:::i;:::-;45584:34;45643:1;45640;45636:9;45628:17;;45460:191;;;;:::o;45657:::-;45697:4;45717:20;45735:1;45717:20;:::i;:::-;45712:25;;45751:20;45769:1;45751:20;:::i;:::-;45746:25;;45790:1;45787;45784:8;45781:34;;;45795:18;;:::i;:::-;45781:34;45840:1;45837;45833:9;45825:17;;45657:191;;;;:::o;45854:96::-;45891:7;45920:24;45938:5;45920:24;:::i;:::-;45909:35;;45854:96;;;:::o;45956:90::-;45990:7;46033:5;46026:13;46019:21;46008:32;;45956:90;;;:::o;46052:149::-;46088:7;46128:66;46121:5;46117:78;46106:89;;46052:149;;;:::o;46207:118::-;46244:7;46284:34;46277:5;46273:46;46262:57;;46207:118;;;:::o;46331:126::-;46368:7;46408:42;46401:5;46397:54;46386:65;;46331:126;;;:::o;46463:77::-;46500:7;46529:5;46518:16;;46463:77;;;:::o;46546:101::-;46582:7;46622:18;46615:5;46611:30;46600:41;;46546:101;;;:::o;46653:86::-;46688:7;46728:4;46721:5;46717:16;46706:27;;46653:86;;;:::o;46745:154::-;46829:6;46824:3;46819;46806:30;46891:1;46882:6;46877:3;46873:16;46866:27;46745:154;;;:::o;46905:307::-;46973:1;46983:113;46997:6;46994:1;46991:13;46983:113;;;47082:1;47077:3;47073:11;47067:18;47063:1;47058:3;47054:11;47047:39;47019:2;47016:1;47012:10;47007:15;;46983:113;;;47114:6;47111:1;47108:13;47105:101;;;47194:1;47185:6;47180:3;47176:16;47169:27;47105:101;46954:258;46905:307;;;:::o;47218:171::-;47257:3;47280:24;47298:5;47280:24;:::i;:::-;47271:33;;47326:4;47319:5;47316:15;47313:41;;;47334:18;;:::i;:::-;47313:41;47381:1;47374:5;47370:13;47363:20;;47218:171;;;:::o;47395:320::-;47439:6;47476:1;47470:4;47466:12;47456:22;;47523:1;47517:4;47513:12;47544:18;47534:81;;47600:4;47592:6;47588:17;47578:27;;47534:81;47662:2;47654:6;47651:14;47631:18;47628:38;47625:84;;;47681:18;;:::i;:::-;47625:84;47446:269;47395:320;;;:::o;47721:281::-;47804:27;47826:4;47804:27;:::i;:::-;47796:6;47792:40;47934:6;47922:10;47919:22;47898:18;47886:10;47883:34;47880:62;47877:88;;;47945:18;;:::i;:::-;47877:88;47985:10;47981:2;47974:22;47764:238;47721:281;;:::o;48008:233::-;48047:3;48070:24;48088:5;48070:24;:::i;:::-;48061:33;;48116:66;48109:5;48106:77;48103:103;;;48186:18;;:::i;:::-;48103:103;48233:1;48226:5;48222:13;48215:20;;48008:233;;;:::o;48247:176::-;48279:1;48296:20;48314:1;48296:20;:::i;:::-;48291:25;;48330:20;48348:1;48330:20;:::i;:::-;48325:25;;48369:1;48359:35;;48374:18;;:::i;:::-;48359:35;48415:1;48412;48408:9;48403:14;;48247:176;;;;:::o;48429:180::-;48477:77;48474:1;48467:88;48574:4;48571:1;48564:15;48598:4;48595:1;48588:15;48615:180;48663:77;48660:1;48653:88;48760:4;48757:1;48750:15;48784:4;48781:1;48774:15;48801:180;48849:77;48846:1;48839:88;48946:4;48943:1;48936:15;48970:4;48967:1;48960:15;48987:180;49035:77;49032:1;49025:88;49132:4;49129:1;49122:15;49156:4;49153:1;49146:15;49173:180;49221:77;49218:1;49211:88;49318:4;49315:1;49308:15;49342:4;49339:1;49332:15;49359:117;49468:1;49465;49458:12;49482:117;49591:1;49588;49581:12;49605:117;49714:1;49711;49704:12;49728:117;49837:1;49834;49827:12;49851:117;49960:1;49957;49950:12;49974:102;50015:6;50066:2;50062:7;50057:2;50050:5;50046:14;50042:28;50032:38;;49974:102;;;:::o;50082:221::-;50222:34;50218:1;50210:6;50206:14;50199:58;50291:4;50286:2;50278:6;50274:15;50267:29;50082:221;:::o;50309:225::-;50449:34;50445:1;50437:6;50433:14;50426:58;50518:8;50513:2;50505:6;50501:15;50494:33;50309:225;:::o;50540:229::-;50680:34;50676:1;50668:6;50664:14;50657:58;50749:12;50744:2;50736:6;50732:15;50725:37;50540:229;:::o;50775:231::-;50915:34;50911:1;50903:6;50899:14;50892:58;50984:14;50979:2;50971:6;50967:15;50960:39;50775:231;:::o;51012:222::-;51152:34;51148:1;51140:6;51136:14;51129:58;51221:5;51216:2;51208:6;51204:15;51197:30;51012:222;:::o;51240:224::-;51380:34;51376:1;51368:6;51364:14;51357:58;51449:7;51444:2;51436:6;51432:15;51425:32;51240:224;:::o;51470:236::-;51610:34;51606:1;51598:6;51594:14;51587:58;51679:19;51674:2;51666:6;51662:15;51655:44;51470:236;:::o;51712:180::-;51852:32;51848:1;51840:6;51836:14;51829:56;51712:180;:::o;51898:244::-;52038:34;52034:1;52026:6;52022:14;52015:58;52107:27;52102:2;52094:6;52090:15;52083:52;51898:244;:::o;52148:174::-;52288:26;52284:1;52276:6;52272:14;52265:50;52148:174;:::o;52328:230::-;52468:34;52464:1;52456:6;52452:14;52445:58;52537:13;52532:2;52524:6;52520:15;52513:38;52328:230;:::o;52564:168::-;52704:20;52700:1;52692:6;52688:14;52681:44;52564:168;:::o;52738:170::-;52878:22;52874:1;52866:6;52862:14;52855:46;52738:170;:::o;52914:225::-;53054:34;53050:1;53042:6;53038:14;53031:58;53123:8;53118:2;53110:6;53106:15;53099:33;52914:225;:::o;53145:182::-;53285:34;53281:1;53273:6;53269:14;53262:58;53145:182;:::o;53333:234::-;53473:34;53469:1;53461:6;53457:14;53450:58;53542:17;53537:2;53529:6;53525:15;53518:42;53333:234;:::o;53573:176::-;53713:28;53709:1;53701:6;53697:14;53690:52;53573:176;:::o;53755:237::-;53895:34;53891:1;53883:6;53879:14;53872:58;53964:20;53959:2;53951:6;53947:15;53940:45;53755:237;:::o;53998:221::-;54138:34;54134:1;54126:6;54122:14;54115:58;54207:4;54202:2;54194:6;54190:15;54183:29;53998:221;:::o;54225:114::-;;:::o;54345:166::-;54485:18;54481:1;54473:6;54469:14;54462:42;54345:166;:::o;54517:238::-;54657:34;54653:1;54645:6;54641:14;54634:58;54726:21;54721:2;54713:6;54709:15;54702:46;54517:238;:::o;54761:179::-;54901:31;54897:1;54889:6;54885:14;54878:55;54761:179;:::o;54946:220::-;55086:34;55082:1;55074:6;55070:14;55063:58;55155:3;55150:2;55142:6;55138:15;55131:28;54946:220;:::o;55172:172::-;55312:24;55308:1;55300:6;55296:14;55289:48;55172:172;:::o;55350:226::-;55490:34;55486:1;55478:6;55474:14;55467:58;55559:9;55554:2;55546:6;55542:15;55535:34;55350:226;:::o;55582:233::-;55722:34;55718:1;55710:6;55706:14;55699:58;55791:16;55786:2;55778:6;55774:15;55767:41;55582:233;:::o;55821:225::-;55961:34;55957:1;55949:6;55945:14;55938:58;56030:8;56025:2;56017:6;56013:15;56006:33;55821:225;:::o;56052:181::-;56192:33;56188:1;56180:6;56176:14;56169:57;56052:181;:::o;56239:234::-;56379:34;56375:1;56367:6;56363:14;56356:58;56448:17;56443:2;56435:6;56431:15;56424:42;56239:234;:::o;56479:232::-;56619:34;56615:1;56607:6;56603:14;56596:58;56688:15;56683:2;56675:6;56671:15;56664:40;56479:232;:::o;56717:221::-;56857:34;56853:1;56845:6;56841:14;56834:58;56926:4;56921:2;56913:6;56909:15;56902:29;56717:221;:::o;56944:227::-;57084:34;57080:1;57072:6;57068:14;57061:58;57153:10;57148:2;57140:6;57136:15;57129:35;56944:227;:::o;57177:122::-;57250:24;57268:5;57250:24;:::i;:::-;57243:5;57240:35;57230:63;;57289:1;57286;57279:12;57230:63;57177:122;:::o;57305:116::-;57375:21;57390:5;57375:21;:::i;:::-;57368:5;57365:32;57355:60;;57411:1;57408;57401:12;57355:60;57305:116;:::o;57427:120::-;57499:23;57516:5;57499:23;:::i;:::-;57492:5;57489:34;57479:62;;57537:1;57534;57527:12;57479:62;57427:120;:::o;57553:122::-;57626:24;57644:5;57626:24;:::i;:::-;57619:5;57616:35;57606:63;;57665:1;57662;57655:12;57606:63;57553:122;:::o;57681:118::-;57752:22;57768:5;57752:22;:::i;:::-;57745:5;57742:33;57732:61;;57789:1;57786;57779:12;57732:61;57681:118;:::o
Swarm Source
ipfs://54324b3d59d4831e3dbca51c02e1a7740cc6f03edc041dbb91d9e2650f369ee9
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.