Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
10,000 GC
Holders
2,369
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 GCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GutterCraniums
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-23 */ // 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/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: @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: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // 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 v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/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/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/GutterCraniums.sol pragma solidity 0.8.0; contract GutterCraniums is ERC721Enumerable, Ownable { using Strings for uint256; string public PROVENANCE_HASH = "d0e4634596d2bb4801c5b1b5f5847d59d331058ebdf6e4a715b83d33e63b070b"; string public baseURI; uint256 public cost; uint256 public costWhitelist; uint256 public maxSupply = 10000; uint256 public maxSupplyWhitelist = 0; uint256 public maxMintAmount = 20; bool public isPaused = true; bool public isOnlyWhitelisted = false; mapping(address => bool) public whitelist; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, uint256 _numTokensPreMint ) ERC721(_name, _symbol) { baseURI = _initBaseURI; mint(_numTokensPreMint); } function mint(uint256 _numTokens) public payable { uint256 supply = totalSupply(); require(_numTokens > 0, "Tokens must be > 0"); require( supply + _numTokens <= maxSupply, "Requesting more than remaining tokens" ); if (msg.sender != owner()) { require(!isPaused, "Contract is paused"); require( _numTokens <= maxMintAmount, "Minting more than maximum allowed tokens" ); if (isOnlyWhitelisted) { require(whitelist[msg.sender], "Address is not whitelisted"); require( supply + _numTokens <= maxSupplyWhitelist, "Requesting more than remaining presale tokens" ); require( msg.value >= costWhitelist * _numTokens, "Insufficient funds transferred for presale" ); } else { require( msg.value >= cost * _numTokens, "Insufficient funds transferred" ); } } for (uint256 i = 0; i < _numTokens; i++) { _safeMint(msg.sender, supply + i); } } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setBaseURI(string memory _newBaseURI) external onlyOwner { baseURI = _newBaseURI; } function setCost(uint256 _newCost) external onlyOwner { cost = _newCost; } function setCostWhitelist(uint256 _newCost) external onlyOwner { costWhitelist = _newCost; } function setMaxMintAmount(uint256 _newmaxMintAmount) external onlyOwner { maxMintAmount = _newmaxMintAmount; } function setMaxSupplyWhitelist(uint256 _newmaxMintAmount) external onlyOwner { maxSupplyWhitelist = _newmaxMintAmount; } function pause(bool _state) external onlyOwner { isPaused = _state; } function onlyWhitelisted(bool _state) external onlyOwner { isOnlyWhitelisted = _state; } function whitelistUsersAdd(address[] calldata _users) external onlyOwner { for (uint256 i = 0; i < _users.length; i++) { whitelist[_users[i]] = true; } } function whitelistUsersRemove(address[] calldata _users) external onlyOwner { for (uint256 i = 0; i < _users.length; i++) { whitelist[_users[i]] = false; } } function withdraw() external payable onlyOwner { (bool success, ) = payable(owner()).call{value: address(this).balance}( "" ); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"uint256","name":"_numTokensPreMint","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PROVENANCE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"costWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOnlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"onlyWhitelisted","outputs":[],"stateMutability":"nonpayable","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":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCostWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setMaxSupplyWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsersAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsersRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060600160405280604081526020016200664a60409139600b90805190602001906200003592919062001011565b50612710600f55600060105560146011556001601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055503480156200008957600080fd5b506040516200668a3803806200668a8339818101604052810190620000af91906200118d565b83838160009080519060200190620000c992919062001011565b508060019080519060200190620000e292919062001011565b50505062000105620000f96200013960201b60201c565b6200014160201b60201c565b81600c90805190602001906200011d92919062001011565b506200012f816200020760201b60201c565b5050505062001c12565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000620002196200058660201b60201c565b90506000821162000261576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025890620017c3565b60405180910390fd5b600f54828262000272919062001923565b1115620002b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ad906200184b565b60405180910390fd5b620002c66200059360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200054057601260009054906101000a900460ff16156200034c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003439062001829565b60405180910390fd5b60115482111562000394576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038b906200186d565b60405180910390fd5b601260019054906101000a900460ff1615620004e957601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1662000439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000430906200173b565b60405180910390fd5b60105482826200044a919062001923565b11156200048e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200048590620017e5565b60405180910390fd5b81600e546200049e919062001980565b341015620004e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004da906200175d565b60405180910390fd5b6200053f565b81600d54620004f9919062001980565b3410156200053e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005359062001807565b60405180910390fd5b5b5b60005b8281101562000581576200056b3382846200055f919062001923565b620005bd60201b60201c565b8080620005789062001af2565b91505062000543565b505050565b6000600880549050905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005df828260405180602001604052806000815250620005e360201b60201c565b5050565b620005f583836200065160201b60201c565b6200060a60008484846200083760201b60201c565b6200064c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064390620016f7565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620006c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006bb90620017a1565b60405180910390fd5b620006d581620009f160201b60201c565b1562000718576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070f9062001719565b60405180910390fd5b6200072c6000838362000a5d60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200077e919062001923565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620008658473ffffffffffffffffffffffffffffffffffffffff1662000ba460201b62001f2b1760201c565b15620009e4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620008976200013960201b60201c565b8786866040518563ffffffff1660e01b8152600401620008bb9493929190620016a3565b602060405180830381600087803b158015620008d657600080fd5b505af19250505080156200090a57506040513d601f19601f8201168201806040525081019062000907919062001161565b60015b62000993573d80600081146200093d576040519150601f19603f3d011682016040523d82523d6000602084013e62000942565b606091505b506000815114156200098b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098290620016f7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620009e9565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000a7583838362000bb760201b62001f3e1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000ac25762000abc8162000bbc60201b60201c565b62000b0a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000b095762000b08838262000c0560201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b575762000b518162000d8260201b60201c565b62000b9f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000b9e5762000b9d828262000eca60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000c1f8462000f5660201b620013d81760201c565b62000c2b9190620019e1565b905060006007600084815260200190815260200160002054905081811462000d11576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000d989190620019e1565b905060006009600084815260200190815260200160002054905060006008838154811062000def577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000e38577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000eae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000ee28362000f5660201b620013d81760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000fca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000fc1906200177f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8280546200101f9062001abc565b90600052602060002090601f0160209004810192826200104357600085556200108f565b82601f106200105e57805160ff19168380011785556200108f565b828001600101855582156200108f579182015b828111156200108e57825182559160200191906001019062001071565b5b5090506200109e9190620010a2565b5090565b5b80821115620010bd576000816000905550600101620010a3565b5090565b6000620010d8620010d284620018c3565b6200188f565b905082815260208101848484011115620010f157600080fd5b620010fe84828562001a86565b509392505050565b600081519050620011178162001bde565b92915050565b600082601f8301126200112f57600080fd5b815162001141848260208601620010c1565b91505092915050565b6000815190506200115b8162001bf8565b92915050565b6000602082840312156200117457600080fd5b6000620011848482850162001106565b91505092915050565b60008060008060808587031215620011a457600080fd5b600085015167ffffffffffffffff811115620011bf57600080fd5b620011cd878288016200111d565b945050602085015167ffffffffffffffff811115620011eb57600080fd5b620011f9878288016200111d565b935050604085015167ffffffffffffffff8111156200121757600080fd5b62001225878288016200111d565b925050606062001238878288016200114a565b91505092959194509250565b6200124f8162001a1c565b82525050565b60006200126282620018f6565b6200126e818562001901565b93506200128081856020860162001a86565b6200128b8162001bcd565b840191505092915050565b6000620012a560328362001912565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006200130d601c8362001912565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006200134f601a8362001912565b91507f41646472657373206973206e6f742077686974656c69737465640000000000006000830152602082019050919050565b600062001391602a8362001912565b91507f496e73756666696369656e742066756e6473207472616e73666572726564206660008301527f6f722070726573616c65000000000000000000000000000000000000000000006020830152604082019050919050565b6000620013f9602a8362001912565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006200146160208362001912565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000620014a360128362001912565b91507f546f6b656e73206d757374206265203e203000000000000000000000000000006000830152602082019050919050565b6000620014e5602d8362001912565b91507f52657175657374696e67206d6f7265207468616e2072656d61696e696e67207060008301527f726573616c6520746f6b656e73000000000000000000000000000000000000006020830152604082019050919050565b60006200154d601e8362001912565b91507f496e73756666696369656e742066756e6473207472616e7366657272656400006000830152602082019050919050565b60006200158f60128362001912565b91507f436f6e74726163742069732070617573656400000000000000000000000000006000830152602082019050919050565b6000620015d160258362001912565b91507f52657175657374696e67206d6f7265207468616e2072656d61696e696e67207460008301527f6f6b656e730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006200163960288362001912565b91507f4d696e74696e67206d6f7265207468616e206d6178696d756d20616c6c6f776560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b6200169d8162001a7c565b82525050565b6000608082019050620016ba600083018762001244565b620016c9602083018662001244565b620016d8604083018562001692565b8181036060830152620016ec818462001255565b905095945050505050565b60006020820190508181036000830152620017128162001296565b9050919050565b600060208201905081810360008301526200173481620012fe565b9050919050565b60006020820190508181036000830152620017568162001340565b9050919050565b60006020820190508181036000830152620017788162001382565b9050919050565b600060208201905081810360008301526200179a81620013ea565b9050919050565b60006020820190508181036000830152620017bc8162001452565b9050919050565b60006020820190508181036000830152620017de8162001494565b9050919050565b600060208201905081810360008301526200180081620014d6565b9050919050565b6000602082019050818103600083015262001822816200153e565b9050919050565b60006020820190508181036000830152620018448162001580565b9050919050565b600060208201905081810360008301526200186681620015c2565b9050919050565b6000602082019050818103600083015262001888816200162a565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620018b957620018b862001b9e565b5b8060405250919050565b600067ffffffffffffffff821115620018e157620018e062001b9e565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620019308262001a7c565b91506200193d8362001a7c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001975576200197462001b40565b5b828201905092915050565b60006200198d8262001a7c565b91506200199a8362001a7c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620019d657620019d562001b40565b5b828202905092915050565b6000620019ee8262001a7c565b9150620019fb8362001a7c565b92508282101562001a115762001a1062001b40565b5b828203905092915050565b600062001a298262001a5c565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562001aa657808201518184015260208101905062001a89565b8381111562001ab6576000848401525b50505050565b6000600282049050600182168062001ad557607f821691505b6020821081141562001aec5762001aeb62001b6f565b5b50919050565b600062001aff8262001a7c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001b355762001b3462001b40565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b62001be98162001a30565b811462001bf557600080fd5b50565b62001c038162001a7c565b811462001c0f57600080fd5b50565b614a288062001c226000396000f3fe60806040526004361061023b5760003560e01c806363b1eb791161012e578063a0712d68116100ab578063c87b56dd1161006f578063c87b56dd1461083f578063d5abeb011461087c578063e985e9c5146108a7578063f2fde38b146108e4578063ff1b65561461090d5761023b565b8063a0712d681461077d578063a22cb46514610799578063a8ea3254146107c2578063b187bd26146107eb578063b88d4fde146108165761023b565b8063897dd5ef116100f2578063897dd5ef146106945780638da5cb5b146106bf57806395d89b41146106ea5780639b19251a146107155780639c7cbec6146107525761023b565b806363b1eb79146105c35780636c0360eb146105ec57806370a0823114610617578063715018a6146106545780637c5e93ff1461066b5761023b565b806323b872dd116101bc57806344a0d68a1161018057806344a0d68a146104cc5780634bf9bdc8146104f55780634f6ccce71461052057806355f804b31461055d5780636352211e146105865761023b565b806323b872dd1461040a5780632adda04b146104335780632f745c591461045c5780633ccfd60b1461049957806342842e0e146104a35761023b565b8063095ea7b311610203578063095ea7b314610337578063121c93ca1461036057806313faede61461038957806318160ddd146103b4578063239c70ae146103df5761023b565b806301ffc9a71461024057806302329a291461027d57806306fdde03146102a6578063081812fc146102d1578063088a4ed01461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613669565b610938565b60405161027491906141db565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190613640565b6109b2565b005b3480156102b257600080fd5b506102bb610a4b565b6040516102c891906141f6565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f391906136fc565b610add565b6040516103059190614174565b60405180910390f35b34801561031a57600080fd5b50610335600480360381019061033091906136fc565b610b62565b005b34801561034357600080fd5b5061035e600480360381019061035991906135bf565b610be8565b005b34801561036c57600080fd5b50610387600480360381019061038291906136fc565b610d00565b005b34801561039557600080fd5b5061039e610d86565b6040516103ab9190614558565b60405180910390f35b3480156103c057600080fd5b506103c9610d8c565b6040516103d69190614558565b60405180910390f35b3480156103eb57600080fd5b506103f4610d99565b6040516104019190614558565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c91906134b9565b610d9f565b005b34801561043f57600080fd5b5061045a600480360381019061045591906136fc565b610dff565b005b34801561046857600080fd5b50610483600480360381019061047e91906135bf565b610e85565b6040516104909190614558565b60405180910390f35b6104a1610f2a565b005b3480156104af57600080fd5b506104ca60048036038101906104c591906134b9565b611026565b005b3480156104d857600080fd5b506104f360048036038101906104ee91906136fc565b611046565b005b34801561050157600080fd5b5061050a6110cc565b6040516105179190614558565b60405180910390f35b34801561052c57600080fd5b50610547600480360381019061054291906136fc565b6110d2565b6040516105549190614558565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f91906136bb565b611169565b005b34801561059257600080fd5b506105ad60048036038101906105a891906136fc565b6111ff565b6040516105ba9190614174565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190613640565b6112b1565b005b3480156105f857600080fd5b5061060161134a565b60405161060e91906141f6565b60405180910390f35b34801561062357600080fd5b5061063e60048036038101906106399190613454565b6113d8565b60405161064b9190614558565b60405180910390f35b34801561066057600080fd5b50610669611490565b005b34801561067757600080fd5b50610692600480360381019061068d91906135fb565b611518565b005b3480156106a057600080fd5b506106a961165f565b6040516106b69190614558565b60405180910390f35b3480156106cb57600080fd5b506106d4611665565b6040516106e19190614174565b60405180910390f35b3480156106f657600080fd5b506106ff61168f565b60405161070c91906141f6565b60405180910390f35b34801561072157600080fd5b5061073c60048036038101906107379190613454565b611721565b60405161074991906141db565b60405180910390f35b34801561075e57600080fd5b50610767611741565b60405161077491906141db565b60405180910390f35b610797600480360381019061079291906136fc565b611754565b005b3480156107a557600080fd5b506107c060048036038101906107bb9190613583565b611a92565b005b3480156107ce57600080fd5b506107e960048036038101906107e491906135fb565b611aa8565b005b3480156107f757600080fd5b50610800611bef565b60405161080d91906141db565b60405180910390f35b34801561082257600080fd5b5061083d60048036038101906108389190613508565b611c02565b005b34801561084b57600080fd5b50610866600480360381019061086191906136fc565b611c64565b60405161087391906141f6565b60405180910390f35b34801561088857600080fd5b50610891611d0b565b60405161089e9190614558565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c9919061347d565b611d11565b6040516108db91906141db565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190613454565b611da5565b005b34801561091957600080fd5b50610922611e9d565b60405161092f91906141f6565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ab57506109aa82611f43565b5b9050919050565b6109ba612025565b73ffffffffffffffffffffffffffffffffffffffff166109d8611665565b73ffffffffffffffffffffffffffffffffffffffff1614610a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a25906143f8565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610a5a9061481d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a869061481d565b8015610ad35780601f10610aa857610100808354040283529160200191610ad3565b820191906000526020600020905b815481529060010190602001808311610ab657829003601f168201915b5050505050905090565b6000610ae88261202d565b610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e906143b8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b6a612025565b73ffffffffffffffffffffffffffffffffffffffff16610b88611665565b73ffffffffffffffffffffffffffffffffffffffff1614610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd5906143f8565b60405180910390fd5b8060118190555050565b6000610bf3826111ff565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90614458565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c83612025565b73ffffffffffffffffffffffffffffffffffffffff161480610cb25750610cb181610cac612025565b611d11565b5b610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890614338565b60405180910390fd5b610cfb8383612099565b505050565b610d08612025565b73ffffffffffffffffffffffffffffffffffffffff16610d26611665565b73ffffffffffffffffffffffffffffffffffffffff1614610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d73906143f8565b60405180910390fd5b80600e8190555050565b600d5481565b6000600880549050905090565b60115481565b610db0610daa612025565b82612152565b610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690614478565b60405180910390fd5b610dfa838383612230565b505050565b610e07612025565b73ffffffffffffffffffffffffffffffffffffffff16610e25611665565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e72906143f8565b60405180910390fd5b8060108190555050565b6000610e90836113d8565b8210610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec890614218565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f32612025565b73ffffffffffffffffffffffffffffffffffffffff16610f50611665565b73ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d906143f8565b60405180910390fd5b6000610fb0611665565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fd39061415f565b60006040518083038185875af1925050503d8060008114611010576040519150601f19603f3d011682016040523d82523d6000602084013e611015565b606091505b505090508061102357600080fd5b50565b61104183838360405180602001604052806000815250611c02565b505050565b61104e612025565b73ffffffffffffffffffffffffffffffffffffffff1661106c611665565b73ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b9906143f8565b60405180910390fd5b80600d8190555050565b60105481565b60006110dc610d8c565b821061111d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611114906144b8565b60405180910390fd5b60088281548110611157577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611171612025565b73ffffffffffffffffffffffffffffffffffffffff1661118f611665565b73ffffffffffffffffffffffffffffffffffffffff16146111e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dc906143f8565b60405180910390fd5b80600c90805190602001906111fb92919061322e565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90614378565b60405180910390fd5b80915050919050565b6112b9612025565b73ffffffffffffffffffffffffffffffffffffffff166112d7611665565b73ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611324906143f8565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b600c80546113579061481d565b80601f01602080910402602001604051908101604052809291908181526020018280546113839061481d565b80156113d05780601f106113a5576101008083540402835291602001916113d0565b820191906000526020600020905b8154815290600101906020018083116113b357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090614358565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611498612025565b73ffffffffffffffffffffffffffffffffffffffff166114b6611665565b73ffffffffffffffffffffffffffffffffffffffff161461150c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611503906143f8565b60405180910390fd5b611516600061248c565b565b611520612025565b73ffffffffffffffffffffffffffffffffffffffff1661153e611665565b73ffffffffffffffffffffffffffffffffffffffff1614611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b906143f8565b60405180910390fd5b60005b8282905081101561165a576000601360008585858181106115e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906115f69190613454565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806116529061484f565b915050611597565b505050565b600e5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461169e9061481d565b80601f01602080910402602001604051908101604052809291908181526020018280546116ca9061481d565b80156117175780601f106116ec57610100808354040283529160200191611717565b820191906000526020600020905b8154815290600101906020018083116116fa57829003601f168201915b5050505050905090565b60136020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b600061175e610d8c565b9050600082116117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a906143d8565b60405180910390fd5b600f5482826117b29190614652565b11156117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea90614518565b60405180910390fd5b6117fb611665565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a5a57601260009054906101000a900460ff161561187d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611874906144f8565b60405180910390fd5b6011548211156118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b990614538565b60405180910390fd5b601260019054906101000a900460ff1615611a0857601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a906142d8565b60405180910390fd5b60105482826119729190614652565b11156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90614498565b60405180910390fd5b81600e546119c191906146d9565b341015611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90614318565b60405180910390fd5b611a59565b81600d54611a1691906146d9565b341015611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f906144d8565b60405180910390fd5b5b5b60005b82811015611a8d57611a7a338284611a759190614652565b612552565b8080611a859061484f565b915050611a5d565b505050565b611aa4611a9d612025565b8383612570565b5050565b611ab0612025565b73ffffffffffffffffffffffffffffffffffffffff16611ace611665565b73ffffffffffffffffffffffffffffffffffffffff1614611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b906143f8565b60405180910390fd5b60005b82829050811015611bea57600160136000858585818110611b71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611b869190613454565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611be29061484f565b915050611b27565b505050565b601260009054906101000a900460ff1681565b611c13611c0d612025565b83612152565b611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990614478565b60405180910390fd5b611c5e848484846126dd565b50505050565b6060611c6f8261202d565b611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca590614438565b60405180910390fd5b6000611cb8612739565b90506000815111611cd85760405180602001604052806000815250611d03565b80611ce2846127cb565b604051602001611cf392919061413b565b6040516020818303038152906040525b915050919050565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611dad612025565b73ffffffffffffffffffffffffffffffffffffffff16611dcb611665565b73ffffffffffffffffffffffffffffffffffffffff1614611e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e18906143f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890614258565b60405180910390fd5b611e9a8161248c565b50565b600b8054611eaa9061481d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed69061481d565b8015611f235780601f10611ef857610100808354040283529160200191611f23565b820191906000526020600020905b815481529060010190602001808311611f0657829003601f168201915b505050505081565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061200e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061201e575061201d82612978565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661210c836111ff565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061215d8261202d565b61219c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612193906142f8565b60405180910390fd5b60006121a7836111ff565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061221657508373ffffffffffffffffffffffffffffffffffffffff166121fe84610add565b73ffffffffffffffffffffffffffffffffffffffff16145b8061222757506122268185611d11565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612250826111ff565b73ffffffffffffffffffffffffffffffffffffffff16146122a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229d90614418565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230d90614298565b60405180910390fd5b6123218383836129e2565b61232c600082612099565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461237c9190614733565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123d39190614652565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61256c828260405180602001604052806000815250612af6565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d6906142b8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126d091906141db565b60405180910390a3505050565b6126e8848484612230565b6126f484848484612b51565b612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a90614238565b60405180910390fd5b50505050565b6060600c80546127489061481d565b80601f01602080910402602001604051908101604052809291908181526020018280546127749061481d565b80156127c15780601f10612796576101008083540402835291602001916127c1565b820191906000526020600020905b8154815290600101906020018083116127a457829003601f168201915b5050505050905090565b60606000821415612813576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612973565b600082905060005b6000821461284557808061282e9061484f565b915050600a8261283e91906146a8565b915061281b565b60008167ffffffffffffffff811115612887577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128b95781602001600182028036833780820191505090505b5090505b6000851461296c576001826128d29190614733565b9150600a856128e19190614898565b60306128ed9190614652565b60f81b818381518110612929577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561296591906146a8565b94506128bd565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6129ed838383611f3e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a3057612a2b81612ce8565b612a6f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a6e57612a6d8382612d31565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ab257612aad81612e9e565b612af1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612af057612aef8282612fe1565b5b5b505050565b612b008383613060565b612b0d6000848484612b51565b612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4390614238565b60405180910390fd5b505050565b6000612b728473ffffffffffffffffffffffffffffffffffffffff16611f2b565b15612cdb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b9b612025565b8786866040518563ffffffff1660e01b8152600401612bbd949392919061418f565b602060405180830381600087803b158015612bd757600080fd5b505af1925050508015612c0857506040513d601f19601f82011682018060405250810190612c059190613692565b60015b612c8b573d8060008114612c38576040519150601f19603f3d011682016040523d82523d6000602084013e612c3d565b606091505b50600081511415612c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7a90614238565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ce0565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d3e846113d8565b612d489190614733565b9050600060076000848152602001908152602001600020549050818114612e2d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612eb29190614733565b9050600060096000848152602001908152602001600020549050600060088381548110612f08577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612fc5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612fec836113d8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c790614398565b60405180910390fd5b6130d98161202d565b15613119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311090614278565b60405180910390fd5b613125600083836129e2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131759190614652565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461323a9061481d565b90600052602060002090601f01602090048101928261325c57600085556132a3565b82601f1061327557805160ff19168380011785556132a3565b828001600101855582156132a3579182015b828111156132a2578251825591602001919060010190613287565b5b5090506132b091906132b4565b5090565b5b808211156132cd5760008160009055506001016132b5565b5090565b60006132e46132df846145a4565b614573565b9050828152602081018484840111156132fc57600080fd5b6133078482856147db565b509392505050565b600061332261331d846145d4565b614573565b90508281526020810184848401111561333a57600080fd5b6133458482856147db565b509392505050565b60008135905061335c81614996565b92915050565b60008083601f84011261337457600080fd5b8235905067ffffffffffffffff81111561338d57600080fd5b6020830191508360208202830111156133a557600080fd5b9250929050565b6000813590506133bb816149ad565b92915050565b6000813590506133d0816149c4565b92915050565b6000815190506133e5816149c4565b92915050565b600082601f8301126133fc57600080fd5b813561340c8482602086016132d1565b91505092915050565b600082601f83011261342657600080fd5b813561343684826020860161330f565b91505092915050565b60008135905061344e816149db565b92915050565b60006020828403121561346657600080fd5b60006134748482850161334d565b91505092915050565b6000806040838503121561349057600080fd5b600061349e8582860161334d565b92505060206134af8582860161334d565b9150509250929050565b6000806000606084860312156134ce57600080fd5b60006134dc8682870161334d565b93505060206134ed8682870161334d565b92505060406134fe8682870161343f565b9150509250925092565b6000806000806080858703121561351e57600080fd5b600061352c8782880161334d565b945050602061353d8782880161334d565b935050604061354e8782880161343f565b925050606085013567ffffffffffffffff81111561356b57600080fd5b613577878288016133eb565b91505092959194509250565b6000806040838503121561359657600080fd5b60006135a48582860161334d565b92505060206135b5858286016133ac565b9150509250929050565b600080604083850312156135d257600080fd5b60006135e08582860161334d565b92505060206135f18582860161343f565b9150509250929050565b6000806020838503121561360e57600080fd5b600083013567ffffffffffffffff81111561362857600080fd5b61363485828601613362565b92509250509250929050565b60006020828403121561365257600080fd5b6000613660848285016133ac565b91505092915050565b60006020828403121561367b57600080fd5b6000613689848285016133c1565b91505092915050565b6000602082840312156136a457600080fd5b60006136b2848285016133d6565b91505092915050565b6000602082840312156136cd57600080fd5b600082013567ffffffffffffffff8111156136e757600080fd5b6136f384828501613415565b91505092915050565b60006020828403121561370e57600080fd5b600061371c8482850161343f565b91505092915050565b61372e81614767565b82525050565b61373d81614779565b82525050565b600061374e82614604565b613758818561461a565b93506137688185602086016147ea565b61377181614985565b840191505092915050565b60006137878261460f565b6137918185614636565b93506137a18185602086016147ea565b6137aa81614985565b840191505092915050565b60006137c08261460f565b6137ca8185614647565b93506137da8185602086016147ea565b80840191505092915050565b60006137f3602b83614636565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613859603283614636565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006138bf602683614636565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613925601c83614636565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613965602483614636565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139cb601983614636565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613a0b601a83614636565b91507f41646472657373206973206e6f742077686974656c69737465640000000000006000830152602082019050919050565b6000613a4b602c83614636565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613ab1602a83614636565b91507f496e73756666696369656e742066756e6473207472616e73666572726564206660008301527f6f722070726573616c65000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b17603883614636565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613b7d602a83614636565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613be3602983614636565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c49602083614636565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613c89602c83614636565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613cef601283614636565b91507f546f6b656e73206d757374206265203e203000000000000000000000000000006000830152602082019050919050565b6000613d2f602083614636565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613d6f602983614636565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dd5602f83614636565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613e3b602183614636565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ea160008361462b565b9150600082019050919050565b6000613ebb603183614636565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613f21602d83614636565b91507f52657175657374696e67206d6f7265207468616e2072656d61696e696e67207060008301527f726573616c6520746f6b656e73000000000000000000000000000000000000006020830152604082019050919050565b6000613f87602c83614636565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613fed601e83614636565b91507f496e73756666696369656e742066756e6473207472616e7366657272656400006000830152602082019050919050565b600061402d601283614636565b91507f436f6e74726163742069732070617573656400000000000000000000000000006000830152602082019050919050565b600061406d602583614636565b91507f52657175657374696e67206d6f7265207468616e2072656d61696e696e67207460008301527f6f6b656e730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140d3602883614636565b91507f4d696e74696e67206d6f7265207468616e206d6178696d756d20616c6c6f776560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b614135816147d1565b82525050565b600061414782856137b5565b915061415382846137b5565b91508190509392505050565b600061416a82613e94565b9150819050919050565b60006020820190506141896000830184613725565b92915050565b60006080820190506141a46000830187613725565b6141b16020830186613725565b6141be604083018561412c565b81810360608301526141d08184613743565b905095945050505050565b60006020820190506141f06000830184613734565b92915050565b60006020820190508181036000830152614210818461377c565b905092915050565b60006020820190508181036000830152614231816137e6565b9050919050565b600060208201905081810360008301526142518161384c565b9050919050565b60006020820190508181036000830152614271816138b2565b9050919050565b6000602082019050818103600083015261429181613918565b9050919050565b600060208201905081810360008301526142b181613958565b9050919050565b600060208201905081810360008301526142d1816139be565b9050919050565b600060208201905081810360008301526142f1816139fe565b9050919050565b6000602082019050818103600083015261431181613a3e565b9050919050565b6000602082019050818103600083015261433181613aa4565b9050919050565b6000602082019050818103600083015261435181613b0a565b9050919050565b6000602082019050818103600083015261437181613b70565b9050919050565b6000602082019050818103600083015261439181613bd6565b9050919050565b600060208201905081810360008301526143b181613c3c565b9050919050565b600060208201905081810360008301526143d181613c7c565b9050919050565b600060208201905081810360008301526143f181613ce2565b9050919050565b6000602082019050818103600083015261441181613d22565b9050919050565b6000602082019050818103600083015261443181613d62565b9050919050565b6000602082019050818103600083015261445181613dc8565b9050919050565b6000602082019050818103600083015261447181613e2e565b9050919050565b6000602082019050818103600083015261449181613eae565b9050919050565b600060208201905081810360008301526144b181613f14565b9050919050565b600060208201905081810360008301526144d181613f7a565b9050919050565b600060208201905081810360008301526144f181613fe0565b9050919050565b6000602082019050818103600083015261451181614020565b9050919050565b6000602082019050818103600083015261453181614060565b9050919050565b60006020820190508181036000830152614551816140c6565b9050919050565b600060208201905061456d600083018461412c565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561459a57614599614956565b5b8060405250919050565b600067ffffffffffffffff8211156145bf576145be614956565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156145ef576145ee614956565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061465d826147d1565b9150614668836147d1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561469d5761469c6148c9565b5b828201905092915050565b60006146b3826147d1565b91506146be836147d1565b9250826146ce576146cd6148f8565b5b828204905092915050565b60006146e4826147d1565b91506146ef836147d1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614728576147276148c9565b5b828202905092915050565b600061473e826147d1565b9150614749836147d1565b92508282101561475c5761475b6148c9565b5b828203905092915050565b6000614772826147b1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148085780820151818401526020810190506147ed565b83811115614817576000848401525b50505050565b6000600282049050600182168061483557607f821691505b6020821081141561484957614848614927565b5b50919050565b600061485a826147d1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561488d5761488c6148c9565b5b600182019050919050565b60006148a3826147d1565b91506148ae836147d1565b9250826148be576148bd6148f8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61499f81614767565b81146149aa57600080fd5b50565b6149b681614779565b81146149c157600080fd5b50565b6149cd81614785565b81146149d857600080fd5b50565b6149e4816147d1565b81146149ef57600080fd5b5056fea2646970667358221220cbfe416e1774018dcb0aabcaa03a0f7db423f74f0b149a603ec85a6151cecc2364736f6c6343000800003364306534363334353936643262623438303163356231623566353834376435396433333130353865626466366534613731356238336433336536336230373062000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000000f477574746572204372616e69756d73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024743000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004968747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f6775747465726372616e69756d732f6775747465726372616e69756d736d6574612f6d61696e2f0000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061023b5760003560e01c806363b1eb791161012e578063a0712d68116100ab578063c87b56dd1161006f578063c87b56dd1461083f578063d5abeb011461087c578063e985e9c5146108a7578063f2fde38b146108e4578063ff1b65561461090d5761023b565b8063a0712d681461077d578063a22cb46514610799578063a8ea3254146107c2578063b187bd26146107eb578063b88d4fde146108165761023b565b8063897dd5ef116100f2578063897dd5ef146106945780638da5cb5b146106bf57806395d89b41146106ea5780639b19251a146107155780639c7cbec6146107525761023b565b806363b1eb79146105c35780636c0360eb146105ec57806370a0823114610617578063715018a6146106545780637c5e93ff1461066b5761023b565b806323b872dd116101bc57806344a0d68a1161018057806344a0d68a146104cc5780634bf9bdc8146104f55780634f6ccce71461052057806355f804b31461055d5780636352211e146105865761023b565b806323b872dd1461040a5780632adda04b146104335780632f745c591461045c5780633ccfd60b1461049957806342842e0e146104a35761023b565b8063095ea7b311610203578063095ea7b314610337578063121c93ca1461036057806313faede61461038957806318160ddd146103b4578063239c70ae146103df5761023b565b806301ffc9a71461024057806302329a291461027d57806306fdde03146102a6578063081812fc146102d1578063088a4ed01461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613669565b610938565b60405161027491906141db565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190613640565b6109b2565b005b3480156102b257600080fd5b506102bb610a4b565b6040516102c891906141f6565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f391906136fc565b610add565b6040516103059190614174565b60405180910390f35b34801561031a57600080fd5b50610335600480360381019061033091906136fc565b610b62565b005b34801561034357600080fd5b5061035e600480360381019061035991906135bf565b610be8565b005b34801561036c57600080fd5b50610387600480360381019061038291906136fc565b610d00565b005b34801561039557600080fd5b5061039e610d86565b6040516103ab9190614558565b60405180910390f35b3480156103c057600080fd5b506103c9610d8c565b6040516103d69190614558565b60405180910390f35b3480156103eb57600080fd5b506103f4610d99565b6040516104019190614558565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c91906134b9565b610d9f565b005b34801561043f57600080fd5b5061045a600480360381019061045591906136fc565b610dff565b005b34801561046857600080fd5b50610483600480360381019061047e91906135bf565b610e85565b6040516104909190614558565b60405180910390f35b6104a1610f2a565b005b3480156104af57600080fd5b506104ca60048036038101906104c591906134b9565b611026565b005b3480156104d857600080fd5b506104f360048036038101906104ee91906136fc565b611046565b005b34801561050157600080fd5b5061050a6110cc565b6040516105179190614558565b60405180910390f35b34801561052c57600080fd5b50610547600480360381019061054291906136fc565b6110d2565b6040516105549190614558565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f91906136bb565b611169565b005b34801561059257600080fd5b506105ad60048036038101906105a891906136fc565b6111ff565b6040516105ba9190614174565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190613640565b6112b1565b005b3480156105f857600080fd5b5061060161134a565b60405161060e91906141f6565b60405180910390f35b34801561062357600080fd5b5061063e60048036038101906106399190613454565b6113d8565b60405161064b9190614558565b60405180910390f35b34801561066057600080fd5b50610669611490565b005b34801561067757600080fd5b50610692600480360381019061068d91906135fb565b611518565b005b3480156106a057600080fd5b506106a961165f565b6040516106b69190614558565b60405180910390f35b3480156106cb57600080fd5b506106d4611665565b6040516106e19190614174565b60405180910390f35b3480156106f657600080fd5b506106ff61168f565b60405161070c91906141f6565b60405180910390f35b34801561072157600080fd5b5061073c60048036038101906107379190613454565b611721565b60405161074991906141db565b60405180910390f35b34801561075e57600080fd5b50610767611741565b60405161077491906141db565b60405180910390f35b610797600480360381019061079291906136fc565b611754565b005b3480156107a557600080fd5b506107c060048036038101906107bb9190613583565b611a92565b005b3480156107ce57600080fd5b506107e960048036038101906107e491906135fb565b611aa8565b005b3480156107f757600080fd5b50610800611bef565b60405161080d91906141db565b60405180910390f35b34801561082257600080fd5b5061083d60048036038101906108389190613508565b611c02565b005b34801561084b57600080fd5b50610866600480360381019061086191906136fc565b611c64565b60405161087391906141f6565b60405180910390f35b34801561088857600080fd5b50610891611d0b565b60405161089e9190614558565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c9919061347d565b611d11565b6040516108db91906141db565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190613454565b611da5565b005b34801561091957600080fd5b50610922611e9d565b60405161092f91906141f6565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ab57506109aa82611f43565b5b9050919050565b6109ba612025565b73ffffffffffffffffffffffffffffffffffffffff166109d8611665565b73ffffffffffffffffffffffffffffffffffffffff1614610a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a25906143f8565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610a5a9061481d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a869061481d565b8015610ad35780601f10610aa857610100808354040283529160200191610ad3565b820191906000526020600020905b815481529060010190602001808311610ab657829003601f168201915b5050505050905090565b6000610ae88261202d565b610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e906143b8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b6a612025565b73ffffffffffffffffffffffffffffffffffffffff16610b88611665565b73ffffffffffffffffffffffffffffffffffffffff1614610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd5906143f8565b60405180910390fd5b8060118190555050565b6000610bf3826111ff565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90614458565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c83612025565b73ffffffffffffffffffffffffffffffffffffffff161480610cb25750610cb181610cac612025565b611d11565b5b610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890614338565b60405180910390fd5b610cfb8383612099565b505050565b610d08612025565b73ffffffffffffffffffffffffffffffffffffffff16610d26611665565b73ffffffffffffffffffffffffffffffffffffffff1614610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d73906143f8565b60405180910390fd5b80600e8190555050565b600d5481565b6000600880549050905090565b60115481565b610db0610daa612025565b82612152565b610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690614478565b60405180910390fd5b610dfa838383612230565b505050565b610e07612025565b73ffffffffffffffffffffffffffffffffffffffff16610e25611665565b73ffffffffffffffffffffffffffffffffffffffff1614610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e72906143f8565b60405180910390fd5b8060108190555050565b6000610e90836113d8565b8210610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec890614218565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f32612025565b73ffffffffffffffffffffffffffffffffffffffff16610f50611665565b73ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d906143f8565b60405180910390fd5b6000610fb0611665565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fd39061415f565b60006040518083038185875af1925050503d8060008114611010576040519150601f19603f3d011682016040523d82523d6000602084013e611015565b606091505b505090508061102357600080fd5b50565b61104183838360405180602001604052806000815250611c02565b505050565b61104e612025565b73ffffffffffffffffffffffffffffffffffffffff1661106c611665565b73ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b9906143f8565b60405180910390fd5b80600d8190555050565b60105481565b60006110dc610d8c565b821061111d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611114906144b8565b60405180910390fd5b60088281548110611157577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611171612025565b73ffffffffffffffffffffffffffffffffffffffff1661118f611665565b73ffffffffffffffffffffffffffffffffffffffff16146111e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dc906143f8565b60405180910390fd5b80600c90805190602001906111fb92919061322e565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90614378565b60405180910390fd5b80915050919050565b6112b9612025565b73ffffffffffffffffffffffffffffffffffffffff166112d7611665565b73ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611324906143f8565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b600c80546113579061481d565b80601f01602080910402602001604051908101604052809291908181526020018280546113839061481d565b80156113d05780601f106113a5576101008083540402835291602001916113d0565b820191906000526020600020905b8154815290600101906020018083116113b357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090614358565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611498612025565b73ffffffffffffffffffffffffffffffffffffffff166114b6611665565b73ffffffffffffffffffffffffffffffffffffffff161461150c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611503906143f8565b60405180910390fd5b611516600061248c565b565b611520612025565b73ffffffffffffffffffffffffffffffffffffffff1661153e611665565b73ffffffffffffffffffffffffffffffffffffffff1614611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b906143f8565b60405180910390fd5b60005b8282905081101561165a576000601360008585858181106115e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906115f69190613454565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806116529061484f565b915050611597565b505050565b600e5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461169e9061481d565b80601f01602080910402602001604051908101604052809291908181526020018280546116ca9061481d565b80156117175780601f106116ec57610100808354040283529160200191611717565b820191906000526020600020905b8154815290600101906020018083116116fa57829003601f168201915b5050505050905090565b60136020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b600061175e610d8c565b9050600082116117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a906143d8565b60405180910390fd5b600f5482826117b29190614652565b11156117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea90614518565b60405180910390fd5b6117fb611665565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a5a57601260009054906101000a900460ff161561187d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611874906144f8565b60405180910390fd5b6011548211156118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b990614538565b60405180910390fd5b601260019054906101000a900460ff1615611a0857601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a906142d8565b60405180910390fd5b60105482826119729190614652565b11156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90614498565b60405180910390fd5b81600e546119c191906146d9565b341015611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90614318565b60405180910390fd5b611a59565b81600d54611a1691906146d9565b341015611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f906144d8565b60405180910390fd5b5b5b60005b82811015611a8d57611a7a338284611a759190614652565b612552565b8080611a859061484f565b915050611a5d565b505050565b611aa4611a9d612025565b8383612570565b5050565b611ab0612025565b73ffffffffffffffffffffffffffffffffffffffff16611ace611665565b73ffffffffffffffffffffffffffffffffffffffff1614611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b906143f8565b60405180910390fd5b60005b82829050811015611bea57600160136000858585818110611b71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611b869190613454565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611be29061484f565b915050611b27565b505050565b601260009054906101000a900460ff1681565b611c13611c0d612025565b83612152565b611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990614478565b60405180910390fd5b611c5e848484846126dd565b50505050565b6060611c6f8261202d565b611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca590614438565b60405180910390fd5b6000611cb8612739565b90506000815111611cd85760405180602001604052806000815250611d03565b80611ce2846127cb565b604051602001611cf392919061413b565b6040516020818303038152906040525b915050919050565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611dad612025565b73ffffffffffffffffffffffffffffffffffffffff16611dcb611665565b73ffffffffffffffffffffffffffffffffffffffff1614611e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e18906143f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890614258565b60405180910390fd5b611e9a8161248c565b50565b600b8054611eaa9061481d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed69061481d565b8015611f235780601f10611ef857610100808354040283529160200191611f23565b820191906000526020600020905b815481529060010190602001808311611f0657829003601f168201915b505050505081565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061200e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061201e575061201d82612978565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661210c836111ff565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061215d8261202d565b61219c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612193906142f8565b60405180910390fd5b60006121a7836111ff565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061221657508373ffffffffffffffffffffffffffffffffffffffff166121fe84610add565b73ffffffffffffffffffffffffffffffffffffffff16145b8061222757506122268185611d11565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612250826111ff565b73ffffffffffffffffffffffffffffffffffffffff16146122a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229d90614418565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230d90614298565b60405180910390fd5b6123218383836129e2565b61232c600082612099565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461237c9190614733565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123d39190614652565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61256c828260405180602001604052806000815250612af6565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d6906142b8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126d091906141db565b60405180910390a3505050565b6126e8848484612230565b6126f484848484612b51565b612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a90614238565b60405180910390fd5b50505050565b6060600c80546127489061481d565b80601f01602080910402602001604051908101604052809291908181526020018280546127749061481d565b80156127c15780601f10612796576101008083540402835291602001916127c1565b820191906000526020600020905b8154815290600101906020018083116127a457829003601f168201915b5050505050905090565b60606000821415612813576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612973565b600082905060005b6000821461284557808061282e9061484f565b915050600a8261283e91906146a8565b915061281b565b60008167ffffffffffffffff811115612887577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128b95781602001600182028036833780820191505090505b5090505b6000851461296c576001826128d29190614733565b9150600a856128e19190614898565b60306128ed9190614652565b60f81b818381518110612929577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561296591906146a8565b94506128bd565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6129ed838383611f3e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a3057612a2b81612ce8565b612a6f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a6e57612a6d8382612d31565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ab257612aad81612e9e565b612af1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612af057612aef8282612fe1565b5b5b505050565b612b008383613060565b612b0d6000848484612b51565b612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4390614238565b60405180910390fd5b505050565b6000612b728473ffffffffffffffffffffffffffffffffffffffff16611f2b565b15612cdb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b9b612025565b8786866040518563ffffffff1660e01b8152600401612bbd949392919061418f565b602060405180830381600087803b158015612bd757600080fd5b505af1925050508015612c0857506040513d601f19601f82011682018060405250810190612c059190613692565b60015b612c8b573d8060008114612c38576040519150601f19603f3d011682016040523d82523d6000602084013e612c3d565b606091505b50600081511415612c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7a90614238565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ce0565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d3e846113d8565b612d489190614733565b9050600060076000848152602001908152602001600020549050818114612e2d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612eb29190614733565b9050600060096000848152602001908152602001600020549050600060088381548110612f08577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612f50577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612fc5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612fec836113d8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c790614398565b60405180910390fd5b6130d98161202d565b15613119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311090614278565b60405180910390fd5b613125600083836129e2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131759190614652565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461323a9061481d565b90600052602060002090601f01602090048101928261325c57600085556132a3565b82601f1061327557805160ff19168380011785556132a3565b828001600101855582156132a3579182015b828111156132a2578251825591602001919060010190613287565b5b5090506132b091906132b4565b5090565b5b808211156132cd5760008160009055506001016132b5565b5090565b60006132e46132df846145a4565b614573565b9050828152602081018484840111156132fc57600080fd5b6133078482856147db565b509392505050565b600061332261331d846145d4565b614573565b90508281526020810184848401111561333a57600080fd5b6133458482856147db565b509392505050565b60008135905061335c81614996565b92915050565b60008083601f84011261337457600080fd5b8235905067ffffffffffffffff81111561338d57600080fd5b6020830191508360208202830111156133a557600080fd5b9250929050565b6000813590506133bb816149ad565b92915050565b6000813590506133d0816149c4565b92915050565b6000815190506133e5816149c4565b92915050565b600082601f8301126133fc57600080fd5b813561340c8482602086016132d1565b91505092915050565b600082601f83011261342657600080fd5b813561343684826020860161330f565b91505092915050565b60008135905061344e816149db565b92915050565b60006020828403121561346657600080fd5b60006134748482850161334d565b91505092915050565b6000806040838503121561349057600080fd5b600061349e8582860161334d565b92505060206134af8582860161334d565b9150509250929050565b6000806000606084860312156134ce57600080fd5b60006134dc8682870161334d565b93505060206134ed8682870161334d565b92505060406134fe8682870161343f565b9150509250925092565b6000806000806080858703121561351e57600080fd5b600061352c8782880161334d565b945050602061353d8782880161334d565b935050604061354e8782880161343f565b925050606085013567ffffffffffffffff81111561356b57600080fd5b613577878288016133eb565b91505092959194509250565b6000806040838503121561359657600080fd5b60006135a48582860161334d565b92505060206135b5858286016133ac565b9150509250929050565b600080604083850312156135d257600080fd5b60006135e08582860161334d565b92505060206135f18582860161343f565b9150509250929050565b6000806020838503121561360e57600080fd5b600083013567ffffffffffffffff81111561362857600080fd5b61363485828601613362565b92509250509250929050565b60006020828403121561365257600080fd5b6000613660848285016133ac565b91505092915050565b60006020828403121561367b57600080fd5b6000613689848285016133c1565b91505092915050565b6000602082840312156136a457600080fd5b60006136b2848285016133d6565b91505092915050565b6000602082840312156136cd57600080fd5b600082013567ffffffffffffffff8111156136e757600080fd5b6136f384828501613415565b91505092915050565b60006020828403121561370e57600080fd5b600061371c8482850161343f565b91505092915050565b61372e81614767565b82525050565b61373d81614779565b82525050565b600061374e82614604565b613758818561461a565b93506137688185602086016147ea565b61377181614985565b840191505092915050565b60006137878261460f565b6137918185614636565b93506137a18185602086016147ea565b6137aa81614985565b840191505092915050565b60006137c08261460f565b6137ca8185614647565b93506137da8185602086016147ea565b80840191505092915050565b60006137f3602b83614636565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613859603283614636565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006138bf602683614636565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613925601c83614636565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613965602483614636565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139cb601983614636565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613a0b601a83614636565b91507f41646472657373206973206e6f742077686974656c69737465640000000000006000830152602082019050919050565b6000613a4b602c83614636565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613ab1602a83614636565b91507f496e73756666696369656e742066756e6473207472616e73666572726564206660008301527f6f722070726573616c65000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b17603883614636565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613b7d602a83614636565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613be3602983614636565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c49602083614636565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613c89602c83614636565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613cef601283614636565b91507f546f6b656e73206d757374206265203e203000000000000000000000000000006000830152602082019050919050565b6000613d2f602083614636565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613d6f602983614636565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dd5602f83614636565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613e3b602183614636565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ea160008361462b565b9150600082019050919050565b6000613ebb603183614636565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613f21602d83614636565b91507f52657175657374696e67206d6f7265207468616e2072656d61696e696e67207060008301527f726573616c6520746f6b656e73000000000000000000000000000000000000006020830152604082019050919050565b6000613f87602c83614636565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613fed601e83614636565b91507f496e73756666696369656e742066756e6473207472616e7366657272656400006000830152602082019050919050565b600061402d601283614636565b91507f436f6e74726163742069732070617573656400000000000000000000000000006000830152602082019050919050565b600061406d602583614636565b91507f52657175657374696e67206d6f7265207468616e2072656d61696e696e67207460008301527f6f6b656e730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006140d3602883614636565b91507f4d696e74696e67206d6f7265207468616e206d6178696d756d20616c6c6f776560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b614135816147d1565b82525050565b600061414782856137b5565b915061415382846137b5565b91508190509392505050565b600061416a82613e94565b9150819050919050565b60006020820190506141896000830184613725565b92915050565b60006080820190506141a46000830187613725565b6141b16020830186613725565b6141be604083018561412c565b81810360608301526141d08184613743565b905095945050505050565b60006020820190506141f06000830184613734565b92915050565b60006020820190508181036000830152614210818461377c565b905092915050565b60006020820190508181036000830152614231816137e6565b9050919050565b600060208201905081810360008301526142518161384c565b9050919050565b60006020820190508181036000830152614271816138b2565b9050919050565b6000602082019050818103600083015261429181613918565b9050919050565b600060208201905081810360008301526142b181613958565b9050919050565b600060208201905081810360008301526142d1816139be565b9050919050565b600060208201905081810360008301526142f1816139fe565b9050919050565b6000602082019050818103600083015261431181613a3e565b9050919050565b6000602082019050818103600083015261433181613aa4565b9050919050565b6000602082019050818103600083015261435181613b0a565b9050919050565b6000602082019050818103600083015261437181613b70565b9050919050565b6000602082019050818103600083015261439181613bd6565b9050919050565b600060208201905081810360008301526143b181613c3c565b9050919050565b600060208201905081810360008301526143d181613c7c565b9050919050565b600060208201905081810360008301526143f181613ce2565b9050919050565b6000602082019050818103600083015261441181613d22565b9050919050565b6000602082019050818103600083015261443181613d62565b9050919050565b6000602082019050818103600083015261445181613dc8565b9050919050565b6000602082019050818103600083015261447181613e2e565b9050919050565b6000602082019050818103600083015261449181613eae565b9050919050565b600060208201905081810360008301526144b181613f14565b9050919050565b600060208201905081810360008301526144d181613f7a565b9050919050565b600060208201905081810360008301526144f181613fe0565b9050919050565b6000602082019050818103600083015261451181614020565b9050919050565b6000602082019050818103600083015261453181614060565b9050919050565b60006020820190508181036000830152614551816140c6565b9050919050565b600060208201905061456d600083018461412c565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561459a57614599614956565b5b8060405250919050565b600067ffffffffffffffff8211156145bf576145be614956565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156145ef576145ee614956565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061465d826147d1565b9150614668836147d1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561469d5761469c6148c9565b5b828201905092915050565b60006146b3826147d1565b91506146be836147d1565b9250826146ce576146cd6148f8565b5b828204905092915050565b60006146e4826147d1565b91506146ef836147d1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614728576147276148c9565b5b828202905092915050565b600061473e826147d1565b9150614749836147d1565b92508282101561475c5761475b6148c9565b5b828203905092915050565b6000614772826147b1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148085780820151818401526020810190506147ed565b83811115614817576000848401525b50505050565b6000600282049050600182168061483557607f821691505b6020821081141561484957614848614927565b5b50919050565b600061485a826147d1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561488d5761488c6148c9565b5b600182019050919050565b60006148a3826147d1565b91506148ae836147d1565b9250826148be576148bd6148f8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61499f81614767565b81146149aa57600080fd5b50565b6149b681614779565b81146149c157600080fd5b50565b6149cd81614785565b81146149d857600080fd5b50565b6149e4816147d1565b81146149ef57600080fd5b5056fea2646970667358221220cbfe416e1774018dcb0aabcaa03a0f7db423f74f0b149a603ec85a6151cecc2364736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000000f477574746572204372616e69756d73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024743000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004968747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f6775747465726372616e69756d732f6775747465726372616e69756d736d6574612f6d61696e2f0000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Gutter Craniums
Arg [1] : _symbol (string): GC
Arg [2] : _initBaseURI (string): https://raw.githubusercontent.com/guttercraniums/guttercraniumsmeta/main/
Arg [3] : _numTokensPreMint (uint256): 60
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 477574746572204372616e69756d730000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4743000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000049
Arg [9] : 68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f
Arg [10] : 6d2f6775747465726372616e69756d732f6775747465726372616e69756d736d
Arg [11] : 6574612f6d61696e2f0000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44489:3680:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38266:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47353:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25760:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27319:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47056:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26842:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46942:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44727:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38906:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44871:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28069:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47188:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38574:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47975:191;;;:::i;:::-;;28479:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46846:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44827:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39096:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46732:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25454:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47444:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44699:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25184:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;47751:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44753:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25929:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44989:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44945:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45299:1309;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27612:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47554:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44911:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28735:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26104:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44788:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27838:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44583:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38266:224;38368:4;38407:35;38392:50;;;:11;:50;;;;:90;;;;38446:36;38470:11;38446:23;:36::i;:::-;38392:90;38385:97;;38266:224;;;:::o;47353:83::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47422:6:::1;47411:8;;:17;;;;;;;;;;;;;;;;;;47353:83:::0;:::o;25760:100::-;25814:13;25847:5;25840:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25760:100;:::o;27319:221::-;27395:7;27423:16;27431:7;27423;:16::i;:::-;27415:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27508:15;:24;27524:7;27508:24;;;;;;;;;;;;;;;;;;;;;27501:31;;27319:221;;;:::o;47056:124::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47155:17:::1;47139:13;:33;;;;47056:124:::0;:::o;26842:411::-;26923:13;26939:23;26954:7;26939:14;:23::i;:::-;26923:39;;26987:5;26981:11;;:2;:11;;;;26973:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27081:5;27065:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27090:37;27107:5;27114:12;:10;:12::i;:::-;27090:16;:37::i;:::-;27065:62;27043:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27224:21;27233:2;27237:7;27224:8;:21::i;:::-;26842:411;;;:::o;46942:106::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47032:8:::1;47016:13;:24;;;;46942:106:::0;:::o;44727:19::-;;;;:::o;38906:113::-;38967:7;38994:10;:17;;;;38987:24;;38906:113;:::o;44871:33::-;;;;:::o;28069:339::-;28264:41;28283:12;:10;:12::i;:::-;28297:7;28264:18;:41::i;:::-;28256:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28372:28;28382:4;28388:2;28392:7;28372:9;:28::i;:::-;28069:339;;;:::o;47188:157::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47320:17:::1;47299:18;:38;;;;47188:157:::0;:::o;38574:256::-;38671:7;38707:23;38724:5;38707:16;:23::i;:::-;38699:5;:31;38691:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38796:12;:19;38809:5;38796:19;;;;;;;;;;;;;;;:26;38816:5;38796:26;;;;;;;;;;;;38789:33;;38574:256;;;;:::o;47975:191::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48034:12:::1;48060:7;:5;:7::i;:::-;48052:21;;48081;48052:79;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48033:98;;;48150:7;48142:16;;;::::0;::::1;;4370:1;47975:191::o:0;28479:185::-;28617:39;28634:4;28640:2;28644:7;28617:39;;;;;;;;;;;;:16;:39::i;:::-;28479:185;;;:::o;46846:88::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46918:8:::1;46911:4;:15;;;;46846:88:::0;:::o;44827:37::-;;;;:::o;39096:233::-;39171:7;39207:30;:28;:30::i;:::-;39199:5;:38;39191:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39304:10;39315:5;39304:17;;;;;;;;;;;;;;;;;;;;;;;;39297:24;;39096:233;;;:::o;46732:106::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46819:11:::1;46809:7;:21;;;;;;;;;;;;:::i;:::-;;46732:106:::0;:::o;25454:239::-;25526:7;25546:13;25562:7;:16;25570:7;25562:16;;;;;;;;;;;;;;;;;;;;;25546:32;;25614:1;25597:19;;:5;:19;;;;25589:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25680:5;25673:12;;;25454:239;;;:::o;47444:102::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47532:6:::1;47512:17;;:26;;;;;;;;;;;;;;;;;;47444:102:::0;:::o;44699:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25184:208::-;25256:7;25301:1;25284:19;;:5;:19;;;;25276:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25368:9;:16;25378:5;25368:16;;;;;;;;;;;;;;;;25361:23;;25184:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;47751:216::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47866:9:::1;47861:99;47885:6;;:13;;47881:1;:17;47861:99;;;47943:5;47920:9;:20;47930:6;;47937:1;47930:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47920:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;47900:3;;;;;:::i;:::-;;;;47861:99;;;;47751:216:::0;;:::o;44753:28::-;;;;:::o;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;25929:104::-;25985:13;26018:7;26011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25929:104;:::o;44989:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;44945:37::-;;;;;;;;;;;;;:::o;45299:1309::-;45359:14;45376:13;:11;:13::i;:::-;45359:30;;45421:1;45408:10;:14;45400:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;45501:9;;45487:10;45478:6;:19;;;;:::i;:::-;:32;;45456:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;45606:7;:5;:7::i;:::-;45592:21;;:10;:21;;;45588:900;;45639:8;;;;;;;;;;;45638:9;45630:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;45725:13;;45711:10;:27;;45685:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;45835:17;;;;;;;;;;;45831:646;;;45881:9;:21;45891:10;45881:21;;;;;;;;;;;;;;;;;;;;;;;;;45873:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46005:18;;45991:10;45982:6;:19;;;;:::i;:::-;:41;;45952:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;46190:10;46174:13;;:26;;;;:::i;:::-;46161:9;:39;;46131:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;45831:646;;;46377:10;46370:4;;:17;;;;:::i;:::-;46357:9;:30;;46327:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;45831:646;45588:900;46505:9;46500:101;46524:10;46520:1;:14;46500:101;;;46556:33;46566:10;46587:1;46578:6;:10;;;;:::i;:::-;46556:9;:33::i;:::-;46536:3;;;;;:::i;:::-;;;;46500:101;;;;45299:1309;;:::o;27612:155::-;27707:52;27726:12;:10;:12::i;:::-;27740:8;27750;27707:18;:52::i;:::-;27612:155;;:::o;47554:189::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47643:9:::1;47638:98;47662:6;;:13;;47658:1;:17;47638:98;;;47720:4;47697:9;:20;47707:6;;47714:1;47707:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47697:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;47677:3;;;;;:::i;:::-;;;;47638:98;;;;47554:189:::0;;:::o;44911:27::-;;;;;;;;;;;;;:::o;28735:328::-;28910:41;28929:12;:10;:12::i;:::-;28943:7;28910:18;:41::i;:::-;28902:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29016:39;29030:4;29036:2;29040:7;29049:5;29016:13;:39::i;:::-;28735:328;;;;:::o;26104:334::-;26177:13;26211:16;26219:7;26211;:16::i;:::-;26203:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26292:21;26316:10;:8;:10::i;:::-;26292:34;;26368:1;26350:7;26344:21;:25;:86;;;;;;;;;;;;;;;;;26396:7;26405:18;:7;:16;:18::i;:::-;26379:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26344:86;26337:93;;;26104:334;;;:::o;44788:32::-;;;;:::o;27838:164::-;27935:4;27959:18;:25;27978:5;27959:25;;;;;;;;;;;;;;;:35;27985:8;27959:35;;;;;;;;;;;;;;;;;;;;;;;;;27952:42;;27838:164;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;44583:107::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6367:387::-;6427:4;6635:12;6702:7;6690:20;6682:28;;6745:1;6738:4;:8;6731:15;;;6367:387;;;:::o;37122:126::-;;;;:::o;24815:305::-;24917:4;24969:25;24954:40;;;:11;:40;;;;:105;;;;25026:33;25011:48;;;:11;:48;;;;24954:105;:158;;;;25076:36;25100:11;25076:23;:36::i;:::-;24954:158;24934:178;;24815:305;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;30573:127::-;30638:4;30690:1;30662:30;;:7;:16;30670:7;30662:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30655:37;;30573:127;;;:::o;34555:174::-;34657:2;34630:15;:24;34646:7;34630:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34713:7;34709:2;34675:46;;34684:23;34699:7;34684:14;:23::i;:::-;34675:46;;;;;;;;;;;;34555:174;;:::o;30867:348::-;30960:4;30985:16;30993:7;30985;:16::i;:::-;30977:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31061:13;31077:23;31092:7;31077:14;:23::i;:::-;31061:39;;31130:5;31119:16;;:7;:16;;;:51;;;;31163:7;31139:31;;:20;31151:7;31139:11;:20::i;:::-;:31;;;31119:51;:87;;;;31174:32;31191:5;31198:7;31174:16;:32::i;:::-;31119:87;31111:96;;;30867:348;;;;:::o;33859:578::-;34018:4;33991:31;;:23;34006:7;33991:14;:23::i;:::-;:31;;;33983:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34101:1;34087:16;;:2;:16;;;;34079:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34157:39;34178:4;34184:2;34188:7;34157:20;:39::i;:::-;34261:29;34278:1;34282:7;34261:8;:29::i;:::-;34322:1;34303:9;:15;34313:4;34303:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34351:1;34334:9;:13;34344:2;34334:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34382:2;34363:7;:16;34371:7;34363:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34421:7;34417:2;34402:27;;34411:4;34402:27;;;;;;;;;;;;33859:578;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5349:191;;:::o;31557:110::-;31633:26;31643:2;31647:7;31633:26;;;;;;;;;;;;:9;:26::i;:::-;31557:110;;:::o;34871:315::-;35026:8;35017:17;;:5;:17;;;;35009:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35113:8;35075:18;:25;35094:5;35075:25;;;;;;;;;;;;;;;:35;35101:8;35075:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35159:8;35137:41;;35152:5;35137:41;;;35169:8;35137:41;;;;;;:::i;:::-;;;;;;;;34871:315;;;:::o;29945:::-;30102:28;30112:4;30118:2;30122:7;30102:9;:28::i;:::-;30149:48;30172:4;30178:2;30182:7;30191:5;30149:22;:48::i;:::-;30141:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29945:315;;;;:::o;46616:108::-;46676:13;46709:7;46702:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46616:108;:::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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;16511:157::-;16596:4;16635:25;16620:40;;;:11;:40;;;;16613:47;;16511:157;;;:::o;39942:589::-;40086:45;40113:4;40119:2;40123:7;40086:26;:45::i;:::-;40164:1;40148:18;;:4;:18;;;40144:187;;;40183:40;40215:7;40183:31;:40::i;:::-;40144:187;;;40253:2;40245:10;;:4;:10;;;40241:90;;40272:47;40305:4;40311:7;40272:32;:47::i;:::-;40241:90;40144:187;40359:1;40345:16;;:2;:16;;;40341:183;;;40378:45;40415:7;40378:36;:45::i;:::-;40341:183;;;40451:4;40445:10;;:2;:10;;;40441:83;;40472:40;40500:2;40504:7;40472:27;:40::i;:::-;40441:83;40341:183;39942:589;;;:::o;31894:321::-;32024:18;32030:2;32034:7;32024:5;:18::i;:::-;32075:54;32106:1;32110:2;32114:7;32123:5;32075:22;:54::i;:::-;32053:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31894:321;;;:::o;35751:799::-;35906:4;35927:15;:2;:13;;;:15::i;:::-;35923:620;;;35979:2;35963:36;;;36000:12;:10;:12::i;:::-;36014:4;36020:7;36029:5;35963:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35959:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36222:1;36205:6;:13;:18;36201:272;;;36248:60;;;;;;;;;;:::i;:::-;;;;;;;;36201:272;36423:6;36417:13;36408:6;36404:2;36400:15;36393:38;35959:529;36096:41;;;36086:51;;;:6;:51;;;;36079:58;;;;;35923:620;36527:4;36520:11;;35751:799;;;;;;;:::o;41254:164::-;41358:10;:17;;;;41331:15;:24;41347:7;41331:24;;;;;;;;;;;:44;;;;41386:10;41402:7;41386:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41254:164;:::o;42045:988::-;42311:22;42361:1;42336:22;42353:4;42336:16;:22::i;:::-;:26;;;;:::i;:::-;42311:51;;42373:18;42394:17;:26;42412:7;42394:26;;;;;;;;;;;;42373:47;;42541:14;42527:10;:28;42523:328;;42572:19;42594:12;:18;42607:4;42594:18;;;;;;;;;;;;;;;:34;42613:14;42594:34;;;;;;;;;;;;42572:56;;42678:11;42645:12;:18;42658:4;42645:18;;;;;;;;;;;;;;;:30;42664:10;42645:30;;;;;;;;;;;:44;;;;42795:10;42762:17;:30;42780:11;42762:30;;;;;;;;;;;:43;;;;42523:328;;42947:17;:26;42965:7;42947:26;;;;;;;;;;;42940:33;;;42991:12;:18;43004:4;42991:18;;;;;;;;;;;;;;;:34;43010:14;42991:34;;;;;;;;;;;42984:41;;;42045:988;;;;:::o;43328:1079::-;43581:22;43626:1;43606:10;:17;;;;:21;;;;:::i;:::-;43581:46;;43638:18;43659:15;:24;43675:7;43659:24;;;;;;;;;;;;43638:45;;44010:19;44032:10;44043:14;44032:26;;;;;;;;;;;;;;;;;;;;;;;;44010:48;;44096:11;44071:10;44082;44071:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;44207:10;44176:15;:28;44192:11;44176:28;;;;;;;;;;;:41;;;;44348:15;:24;44364:7;44348:24;;;;;;;;;;;44341:31;;;44383:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43328:1079;;;;:::o;40832:221::-;40917:14;40934:20;40951:2;40934:16;:20::i;:::-;40917:37;;40992:7;40965:12;:16;40978:2;40965:16;;;;;;;;;;;;;;;:24;40982:6;40965:24;;;;;;;;;;;:34;;;;41039:6;41010:17;:26;41028:7;41010:26;;;;;;;;;;;:35;;;;40832:221;;;:::o;32551:382::-;32645:1;32631:16;;:2;:16;;;;32623:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32704:16;32712:7;32704;:16::i;:::-;32703:17;32695:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32766:45;32795:1;32799:2;32803:7;32766:20;:45::i;:::-;32841:1;32824:9;:13;32834:2;32824:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32872:2;32853:7;:16;32861:7;32853:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32917:7;32913:2;32892:33;;32909:1;32892:33;;;;;;;;;;;;32551:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;867:367::-;;;1000:3;993:4;985:6;981:17;977:27;967:2;;1018:1;1015;1008:12;967:2;1054:6;1041:20;1031:30;;1084:18;1076:6;1073:30;1070:2;;;1116:1;1113;1106:12;1070:2;1153:4;1145:6;1141:17;1129:29;;1207:3;1199:4;1191:6;1187:17;1177:8;1173:32;1170:41;1167:2;;;1224:1;1221;1214:12;1167:2;957:277;;;;;:::o;1240:133::-;;1321:6;1308:20;1299:29;;1337:30;1361:5;1337:30;:::i;:::-;1289:84;;;;:::o;1379:137::-;;1462:6;1449:20;1440:29;;1478:32;1504:5;1478:32;:::i;:::-;1430:86;;;;:::o;1522:141::-;;1609:6;1603:13;1594:22;;1625:32;1651:5;1625:32;:::i;:::-;1584:79;;;;:::o;1682:271::-;;1786:3;1779:4;1771:6;1767:17;1763:27;1753:2;;1804:1;1801;1794:12;1753:2;1844:6;1831:20;1869:78;1943:3;1935:6;1928:4;1920:6;1916:17;1869:78;:::i;:::-;1860:87;;1743:210;;;;;:::o;1973:273::-;;2078:3;2071:4;2063:6;2059:17;2055:27;2045:2;;2096:1;2093;2086:12;2045:2;2136:6;2123:20;2161:79;2236:3;2228:6;2221:4;2213:6;2209:17;2161:79;:::i;:::-;2152:88;;2035:211;;;;;:::o;2252:139::-;;2336:6;2323:20;2314:29;;2352:33;2379:5;2352:33;:::i;:::-;2304:87;;;;:::o;2397:262::-;;2505:2;2493:9;2484:7;2480:23;2476:32;2473:2;;;2521:1;2518;2511:12;2473:2;2564:1;2589:53;2634:7;2625:6;2614:9;2610:22;2589:53;:::i;:::-;2579:63;;2535:117;2463:196;;;;:::o;2665:407::-;;;2790:2;2778:9;2769:7;2765:23;2761:32;2758:2;;;2806:1;2803;2796:12;2758:2;2849:1;2874:53;2919:7;2910:6;2899:9;2895:22;2874:53;:::i;:::-;2864:63;;2820:117;2976:2;3002:53;3047:7;3038:6;3027:9;3023:22;3002:53;:::i;:::-;2992:63;;2947:118;2748:324;;;;;:::o;3078:552::-;;;;3220:2;3208:9;3199:7;3195:23;3191:32;3188:2;;;3236:1;3233;3226:12;3188:2;3279:1;3304:53;3349:7;3340:6;3329:9;3325:22;3304:53;:::i;:::-;3294:63;;3250:117;3406:2;3432:53;3477:7;3468:6;3457:9;3453:22;3432:53;:::i;:::-;3422:63;;3377:118;3534:2;3560:53;3605:7;3596:6;3585:9;3581:22;3560:53;:::i;:::-;3550:63;;3505:118;3178:452;;;;;:::o;3636:809::-;;;;;3804:3;3792:9;3783:7;3779:23;3775:33;3772:2;;;3821:1;3818;3811:12;3772:2;3864:1;3889:53;3934:7;3925:6;3914:9;3910:22;3889:53;:::i;:::-;3879:63;;3835:117;3991:2;4017:53;4062:7;4053:6;4042:9;4038:22;4017:53;:::i;:::-;4007:63;;3962:118;4119:2;4145:53;4190:7;4181:6;4170:9;4166:22;4145:53;:::i;:::-;4135:63;;4090:118;4275:2;4264:9;4260:18;4247:32;4306:18;4298:6;4295:30;4292:2;;;4338:1;4335;4328:12;4292:2;4366:62;4420:7;4411:6;4400:9;4396:22;4366:62;:::i;:::-;4356:72;;4218:220;3762:683;;;;;;;:::o;4451:401::-;;;4573:2;4561:9;4552:7;4548:23;4544:32;4541:2;;;4589:1;4586;4579:12;4541:2;4632:1;4657:53;4702:7;4693:6;4682:9;4678:22;4657:53;:::i;:::-;4647:63;;4603:117;4759:2;4785:50;4827:7;4818:6;4807:9;4803:22;4785:50;:::i;:::-;4775:60;;4730:115;4531:321;;;;;:::o;4858:407::-;;;4983:2;4971:9;4962:7;4958:23;4954:32;4951:2;;;4999:1;4996;4989:12;4951:2;5042:1;5067:53;5112:7;5103:6;5092:9;5088:22;5067:53;:::i;:::-;5057:63;;5013:117;5169:2;5195:53;5240:7;5231:6;5220:9;5216:22;5195:53;:::i;:::-;5185:63;;5140:118;4941:324;;;;;:::o;5271:425::-;;;5414:2;5402:9;5393:7;5389:23;5385:32;5382:2;;;5430:1;5427;5420:12;5382:2;5501:1;5490:9;5486:17;5473:31;5531:18;5523:6;5520:30;5517:2;;;5563:1;5560;5553:12;5517:2;5599:80;5671:7;5662:6;5651:9;5647:22;5599:80;:::i;:::-;5581:98;;;;5444:245;5372:324;;;;;:::o;5702:256::-;;5807:2;5795:9;5786:7;5782:23;5778:32;5775:2;;;5823:1;5820;5813:12;5775:2;5866:1;5891:50;5933:7;5924:6;5913:9;5909:22;5891:50;:::i;:::-;5881:60;;5837:114;5765:193;;;;:::o;5964:260::-;;6071:2;6059:9;6050:7;6046:23;6042:32;6039:2;;;6087:1;6084;6077:12;6039:2;6130:1;6155:52;6199:7;6190:6;6179:9;6175:22;6155:52;:::i;:::-;6145:62;;6101:116;6029:195;;;;:::o;6230:282::-;;6348:2;6336:9;6327:7;6323:23;6319:32;6316:2;;;6364:1;6361;6354:12;6316:2;6407:1;6432:63;6487:7;6478:6;6467:9;6463:22;6432:63;:::i;:::-;6422:73;;6378:127;6306:206;;;;:::o;6518:375::-;;6636:2;6624:9;6615:7;6611:23;6607:32;6604:2;;;6652:1;6649;6642:12;6604:2;6723:1;6712:9;6708:17;6695:31;6753:18;6745:6;6742:30;6739:2;;;6785:1;6782;6775:12;6739:2;6813:63;6868:7;6859:6;6848:9;6844:22;6813:63;:::i;:::-;6803:73;;6666:220;6594:299;;;;:::o;6899:262::-;;7007:2;6995:9;6986:7;6982:23;6978:32;6975:2;;;7023:1;7020;7013:12;6975:2;7066:1;7091:53;7136:7;7127:6;7116:9;7112:22;7091:53;:::i;:::-;7081:63;;7037:117;6965:196;;;;:::o;7167:118::-;7254:24;7272:5;7254:24;:::i;:::-;7249:3;7242:37;7232:53;;:::o;7291:109::-;7372:21;7387:5;7372:21;:::i;:::-;7367:3;7360:34;7350:50;;:::o;7406:360::-;;7520:38;7552:5;7520:38;:::i;:::-;7574:70;7637:6;7632:3;7574:70;:::i;:::-;7567:77;;7653:52;7698:6;7693:3;7686:4;7679:5;7675:16;7653:52;:::i;:::-;7730:29;7752:6;7730:29;:::i;:::-;7725:3;7721:39;7714:46;;7496:270;;;;;:::o;7772:364::-;;7888:39;7921:5;7888:39;:::i;:::-;7943:71;8007:6;8002:3;7943:71;:::i;:::-;7936:78;;8023:52;8068:6;8063:3;8056:4;8049:5;8045:16;8023:52;:::i;:::-;8100:29;8122:6;8100:29;:::i;:::-;8095:3;8091:39;8084:46;;7864:272;;;;;:::o;8142:377::-;;8276:39;8309:5;8276:39;:::i;:::-;8331:89;8413:6;8408:3;8331:89;:::i;:::-;8324:96;;8429:52;8474:6;8469:3;8462:4;8455:5;8451:16;8429:52;:::i;:::-;8506:6;8501:3;8497:16;8490:23;;8252:267;;;;;:::o;8525:375::-;;8688:67;8752:2;8747:3;8688:67;:::i;:::-;8681:74;;8785:34;8781:1;8776:3;8772:11;8765:55;8851:13;8846:2;8841:3;8837:12;8830:35;8891:2;8886:3;8882:12;8875:19;;8671:229;;;:::o;8906:382::-;;9069:67;9133:2;9128:3;9069:67;:::i;:::-;9062:74;;9166:34;9162:1;9157:3;9153:11;9146:55;9232:20;9227:2;9222:3;9218:12;9211:42;9279:2;9274:3;9270:12;9263:19;;9052:236;;;:::o;9294:370::-;;9457:67;9521:2;9516:3;9457:67;:::i;:::-;9450:74;;9554:34;9550:1;9545:3;9541:11;9534:55;9620:8;9615:2;9610:3;9606:12;9599:30;9655:2;9650:3;9646:12;9639:19;;9440:224;;;:::o;9670:326::-;;9833:67;9897:2;9892:3;9833:67;:::i;:::-;9826:74;;9930:30;9926:1;9921:3;9917:11;9910:51;9987:2;9982:3;9978:12;9971:19;;9816:180;;;:::o;10002:368::-;;10165:67;10229:2;10224:3;10165:67;:::i;:::-;10158:74;;10262:34;10258:1;10253:3;10249:11;10242:55;10328:6;10323:2;10318:3;10314:12;10307:28;10361:2;10356:3;10352:12;10345:19;;10148:222;;;:::o;10376:323::-;;10539:67;10603:2;10598:3;10539:67;:::i;:::-;10532:74;;10636:27;10632:1;10627:3;10623:11;10616:48;10690:2;10685:3;10681:12;10674:19;;10522:177;;;:::o;10705:324::-;;10868:67;10932:2;10927:3;10868:67;:::i;:::-;10861:74;;10965:28;10961:1;10956:3;10952:11;10945:49;11020:2;11015:3;11011:12;11004:19;;10851:178;;;:::o;11035:376::-;;11198:67;11262:2;11257:3;11198:67;:::i;:::-;11191:74;;11295:34;11291:1;11286:3;11282:11;11275:55;11361:14;11356:2;11351:3;11347:12;11340:36;11402:2;11397:3;11393:12;11386:19;;11181:230;;;:::o;11417:374::-;;11580:67;11644:2;11639:3;11580:67;:::i;:::-;11573:74;;11677:34;11673:1;11668:3;11664:11;11657:55;11743:12;11738:2;11733:3;11729:12;11722:34;11782:2;11777:3;11773:12;11766:19;;11563:228;;;:::o;11797:388::-;;11960:67;12024:2;12019:3;11960:67;:::i;:::-;11953:74;;12057:34;12053:1;12048:3;12044:11;12037:55;12123:26;12118:2;12113:3;12109:12;12102:48;12176:2;12171:3;12167:12;12160:19;;11943:242;;;:::o;12191:374::-;;12354:67;12418:2;12413:3;12354:67;:::i;:::-;12347:74;;12451:34;12447:1;12442:3;12438:11;12431:55;12517:12;12512:2;12507:3;12503:12;12496:34;12556:2;12551:3;12547:12;12540:19;;12337:228;;;:::o;12571:373::-;;12734:67;12798:2;12793:3;12734:67;:::i;:::-;12727:74;;12831:34;12827:1;12822:3;12818:11;12811:55;12897:11;12892:2;12887:3;12883:12;12876:33;12935:2;12930:3;12926:12;12919:19;;12717:227;;;:::o;12950:330::-;;13113:67;13177:2;13172:3;13113:67;:::i;:::-;13106:74;;13210:34;13206:1;13201:3;13197:11;13190:55;13271:2;13266:3;13262:12;13255:19;;13096:184;;;:::o;13286:376::-;;13449:67;13513:2;13508:3;13449:67;:::i;:::-;13442:74;;13546:34;13542:1;13537:3;13533:11;13526:55;13612:14;13607:2;13602:3;13598:12;13591:36;13653:2;13648:3;13644:12;13637:19;;13432:230;;;:::o;13668:316::-;;13831:67;13895:2;13890:3;13831:67;:::i;:::-;13824:74;;13928:20;13924:1;13919:3;13915:11;13908:41;13975:2;13970:3;13966:12;13959:19;;13814:170;;;:::o;13990:330::-;;14153:67;14217:2;14212:3;14153:67;:::i;:::-;14146:74;;14250:34;14246:1;14241:3;14237:11;14230:55;14311:2;14306:3;14302:12;14295:19;;14136:184;;;:::o;14326:373::-;;14489:67;14553:2;14548:3;14489:67;:::i;:::-;14482:74;;14586:34;14582:1;14577:3;14573:11;14566:55;14652:11;14647:2;14642:3;14638:12;14631:33;14690:2;14685:3;14681:12;14674:19;;14472:227;;;:::o;14705:379::-;;14868:67;14932:2;14927:3;14868:67;:::i;:::-;14861:74;;14965:34;14961:1;14956:3;14952:11;14945:55;15031:17;15026:2;15021:3;15017:12;15010:39;15075:2;15070:3;15066:12;15059:19;;14851:233;;;:::o;15090:365::-;;15253:67;15317:2;15312:3;15253:67;:::i;:::-;15246:74;;15350:34;15346:1;15341:3;15337:11;15330:55;15416:3;15411:2;15406:3;15402:12;15395:25;15446:2;15441:3;15437:12;15430:19;;15236:219;;;:::o;15461:297::-;;15641:83;15722:1;15717:3;15641:83;:::i;:::-;15634:90;;15750:1;15745:3;15741:11;15734:18;;15624:134;;;:::o;15764:381::-;;15927:67;15991:2;15986:3;15927:67;:::i;:::-;15920:74;;16024:34;16020:1;16015:3;16011:11;16004:55;16090:19;16085:2;16080:3;16076:12;16069:41;16136:2;16131:3;16127:12;16120:19;;15910:235;;;:::o;16151:377::-;;16314:67;16378:2;16373:3;16314:67;:::i;:::-;16307:74;;16411:34;16407:1;16402:3;16398:11;16391:55;16477:15;16472:2;16467:3;16463:12;16456:37;16519:2;16514:3;16510:12;16503:19;;16297:231;;;:::o;16534:376::-;;16697:67;16761:2;16756:3;16697:67;:::i;:::-;16690:74;;16794:34;16790:1;16785:3;16781:11;16774:55;16860:14;16855:2;16850:3;16846:12;16839:36;16901:2;16896:3;16892:12;16885:19;;16680:230;;;:::o;16916:328::-;;17079:67;17143:2;17138:3;17079:67;:::i;:::-;17072:74;;17176:32;17172:1;17167:3;17163:11;17156:53;17235:2;17230:3;17226:12;17219:19;;17062:182;;;:::o;17250:316::-;;17413:67;17477:2;17472:3;17413:67;:::i;:::-;17406:74;;17510:20;17506:1;17501:3;17497:11;17490:41;17557:2;17552:3;17548:12;17541:19;;17396:170;;;:::o;17572:369::-;;17735:67;17799:2;17794:3;17735:67;:::i;:::-;17728:74;;17832:34;17828:1;17823:3;17819:11;17812:55;17898:7;17893:2;17888:3;17884:12;17877:29;17932:2;17927:3;17923:12;17916:19;;17718:223;;;:::o;17947:372::-;;18110:67;18174:2;18169:3;18110:67;:::i;:::-;18103:74;;18207:34;18203:1;18198:3;18194:11;18187:55;18273:10;18268:2;18263:3;18259:12;18252:32;18310:2;18305:3;18301:12;18294:19;;18093:226;;;:::o;18325:118::-;18412:24;18430:5;18412:24;:::i;:::-;18407:3;18400:37;18390:53;;:::o;18449:435::-;;18651:95;18742:3;18733:6;18651:95;:::i;:::-;18644:102;;18763:95;18854:3;18845:6;18763:95;:::i;:::-;18756:102;;18875:3;18868:10;;18633:251;;;;;:::o;18890:379::-;;19096:147;19239:3;19096:147;:::i;:::-;19089:154;;19260:3;19253:10;;19078:191;;;:::o;19275:222::-;;19406:2;19395:9;19391:18;19383:26;;19419:71;19487:1;19476:9;19472:17;19463:6;19419:71;:::i;:::-;19373:124;;;;:::o;19503:640::-;;19736:3;19725:9;19721:19;19713:27;;19750:71;19818:1;19807:9;19803:17;19794:6;19750:71;:::i;:::-;19831:72;19899:2;19888:9;19884:18;19875:6;19831:72;:::i;:::-;19913;19981:2;19970:9;19966:18;19957:6;19913:72;:::i;:::-;20032:9;20026:4;20022:20;20017:2;20006:9;20002:18;19995:48;20060:76;20131:4;20122:6;20060:76;:::i;:::-;20052:84;;19703:440;;;;;;;:::o;20149:210::-;;20274:2;20263:9;20259:18;20251:26;;20287:65;20349:1;20338:9;20334:17;20325:6;20287:65;:::i;:::-;20241:118;;;;:::o;20365:313::-;;20516:2;20505:9;20501:18;20493:26;;20565:9;20559:4;20555:20;20551:1;20540:9;20536:17;20529:47;20593:78;20666:4;20657:6;20593:78;:::i;:::-;20585:86;;20483:195;;;;:::o;20684:419::-;;20888:2;20877:9;20873:18;20865:26;;20937:9;20931:4;20927:20;20923:1;20912:9;20908:17;20901:47;20965:131;21091:4;20965:131;:::i;:::-;20957:139;;20855:248;;;:::o;21109:419::-;;21313:2;21302:9;21298:18;21290:26;;21362:9;21356:4;21352:20;21348:1;21337:9;21333:17;21326:47;21390:131;21516:4;21390:131;:::i;:::-;21382:139;;21280:248;;;:::o;21534:419::-;;21738:2;21727:9;21723:18;21715:26;;21787:9;21781:4;21777:20;21773:1;21762:9;21758:17;21751:47;21815:131;21941:4;21815:131;:::i;:::-;21807:139;;21705:248;;;:::o;21959:419::-;;22163:2;22152:9;22148:18;22140:26;;22212:9;22206:4;22202:20;22198:1;22187:9;22183:17;22176:47;22240:131;22366:4;22240:131;:::i;:::-;22232:139;;22130:248;;;:::o;22384:419::-;;22588:2;22577:9;22573:18;22565:26;;22637:9;22631:4;22627:20;22623:1;22612:9;22608:17;22601:47;22665:131;22791:4;22665:131;:::i;:::-;22657:139;;22555:248;;;:::o;22809:419::-;;23013:2;23002:9;22998:18;22990:26;;23062:9;23056:4;23052:20;23048:1;23037:9;23033:17;23026:47;23090:131;23216:4;23090:131;:::i;:::-;23082:139;;22980:248;;;:::o;23234:419::-;;23438:2;23427:9;23423:18;23415:26;;23487:9;23481:4;23477:20;23473:1;23462:9;23458:17;23451:47;23515:131;23641:4;23515:131;:::i;:::-;23507:139;;23405:248;;;:::o;23659:419::-;;23863:2;23852:9;23848:18;23840:26;;23912:9;23906:4;23902:20;23898:1;23887:9;23883:17;23876:47;23940:131;24066:4;23940:131;:::i;:::-;23932:139;;23830:248;;;:::o;24084:419::-;;24288:2;24277:9;24273:18;24265:26;;24337:9;24331:4;24327:20;24323:1;24312:9;24308:17;24301:47;24365:131;24491:4;24365:131;:::i;:::-;24357:139;;24255:248;;;:::o;24509:419::-;;24713:2;24702:9;24698:18;24690:26;;24762:9;24756:4;24752:20;24748:1;24737:9;24733:17;24726:47;24790:131;24916:4;24790:131;:::i;:::-;24782:139;;24680:248;;;:::o;24934:419::-;;25138:2;25127:9;25123:18;25115:26;;25187:9;25181:4;25177:20;25173:1;25162:9;25158:17;25151:47;25215:131;25341:4;25215:131;:::i;:::-;25207:139;;25105:248;;;:::o;25359:419::-;;25563:2;25552:9;25548:18;25540:26;;25612:9;25606:4;25602:20;25598:1;25587:9;25583:17;25576:47;25640:131;25766:4;25640:131;:::i;:::-;25632:139;;25530:248;;;:::o;25784:419::-;;25988:2;25977:9;25973:18;25965:26;;26037:9;26031:4;26027:20;26023:1;26012:9;26008:17;26001:47;26065:131;26191:4;26065:131;:::i;:::-;26057:139;;25955:248;;;:::o;26209:419::-;;26413:2;26402:9;26398:18;26390:26;;26462:9;26456:4;26452:20;26448:1;26437:9;26433:17;26426:47;26490:131;26616:4;26490:131;:::i;:::-;26482:139;;26380:248;;;:::o;26634:419::-;;26838:2;26827:9;26823:18;26815:26;;26887:9;26881:4;26877:20;26873:1;26862:9;26858:17;26851:47;26915:131;27041:4;26915:131;:::i;:::-;26907:139;;26805:248;;;:::o;27059:419::-;;27263:2;27252:9;27248:18;27240:26;;27312:9;27306:4;27302:20;27298:1;27287:9;27283:17;27276:47;27340:131;27466:4;27340:131;:::i;:::-;27332:139;;27230:248;;;:::o;27484:419::-;;27688:2;27677:9;27673:18;27665:26;;27737:9;27731:4;27727:20;27723:1;27712:9;27708:17;27701:47;27765:131;27891:4;27765:131;:::i;:::-;27757:139;;27655:248;;;:::o;27909:419::-;;28113:2;28102:9;28098:18;28090:26;;28162:9;28156:4;28152:20;28148:1;28137:9;28133:17;28126:47;28190:131;28316:4;28190:131;:::i;:::-;28182:139;;28080:248;;;:::o;28334:419::-;;28538:2;28527:9;28523:18;28515:26;;28587:9;28581:4;28577:20;28573:1;28562:9;28558:17;28551:47;28615:131;28741:4;28615:131;:::i;:::-;28607:139;;28505:248;;;:::o;28759:419::-;;28963:2;28952:9;28948:18;28940:26;;29012:9;29006:4;29002:20;28998:1;28987:9;28983:17;28976:47;29040:131;29166:4;29040:131;:::i;:::-;29032:139;;28930:248;;;:::o;29184:419::-;;29388:2;29377:9;29373:18;29365:26;;29437:9;29431:4;29427:20;29423:1;29412:9;29408:17;29401:47;29465:131;29591:4;29465:131;:::i;:::-;29457:139;;29355:248;;;:::o;29609:419::-;;29813:2;29802:9;29798:18;29790:26;;29862:9;29856:4;29852:20;29848:1;29837:9;29833:17;29826:47;29890:131;30016:4;29890:131;:::i;:::-;29882:139;;29780:248;;;:::o;30034:419::-;;30238:2;30227:9;30223:18;30215:26;;30287:9;30281:4;30277:20;30273:1;30262:9;30258:17;30251:47;30315:131;30441:4;30315:131;:::i;:::-;30307:139;;30205:248;;;:::o;30459:419::-;;30663:2;30652:9;30648:18;30640:26;;30712:9;30706:4;30702:20;30698:1;30687:9;30683:17;30676:47;30740:131;30866:4;30740:131;:::i;:::-;30732:139;;30630:248;;;:::o;30884:419::-;;31088:2;31077:9;31073:18;31065:26;;31137:9;31131:4;31127:20;31123:1;31112:9;31108:17;31101:47;31165:131;31291:4;31165:131;:::i;:::-;31157:139;;31055:248;;;:::o;31309:419::-;;31513:2;31502:9;31498:18;31490:26;;31562:9;31556:4;31552:20;31548:1;31537:9;31533:17;31526:47;31590:131;31716:4;31590:131;:::i;:::-;31582:139;;31480:248;;;:::o;31734:222::-;;31865:2;31854:9;31850:18;31842:26;;31878:71;31946:1;31935:9;31931:17;31922:6;31878:71;:::i;:::-;31832:124;;;;:::o;31962:283::-;;32028:2;32022:9;32012:19;;32070:4;32062:6;32058:17;32177:6;32165:10;32162:22;32141:18;32129:10;32126:34;32123:62;32120:2;;;32188:18;;:::i;:::-;32120:2;32228:10;32224:2;32217:22;32002:243;;;;:::o;32251:331::-;;32402:18;32394:6;32391:30;32388:2;;;32424:18;;:::i;:::-;32388:2;32509:4;32505:9;32498:4;32490:6;32486:17;32482:33;32474:41;;32570:4;32564;32560:15;32552:23;;32317:265;;;:::o;32588:332::-;;32740:18;32732:6;32729:30;32726:2;;;32762:18;;:::i;:::-;32726:2;32847:4;32843:9;32836:4;32828:6;32824:17;32820:33;32812:41;;32908:4;32902;32898:15;32890:23;;32655:265;;;:::o;32926:98::-;;33011:5;33005:12;32995:22;;32984:40;;;:::o;33030:99::-;;33116:5;33110:12;33100:22;;33089:40;;;:::o;33135:168::-;;33252:6;33247:3;33240:19;33292:4;33287:3;33283:14;33268:29;;33230:73;;;;:::o;33309:147::-;;33447:3;33432:18;;33422:34;;;;:::o;33462:169::-;;33580:6;33575:3;33568:19;33620:4;33615:3;33611:14;33596:29;;33558:73;;;;:::o;33637:148::-;;33776:3;33761:18;;33751:34;;;;:::o;33791:305::-;;33850:20;33868:1;33850:20;:::i;:::-;33845:25;;33884:20;33902:1;33884:20;:::i;:::-;33879:25;;34038:1;33970:66;33966:74;33963:1;33960:81;33957:2;;;34044:18;;:::i;:::-;33957:2;34088:1;34085;34081:9;34074:16;;33835:261;;;;:::o;34102:185::-;;34159:20;34177:1;34159:20;:::i;:::-;34154:25;;34193:20;34211:1;34193:20;:::i;:::-;34188:25;;34232:1;34222:2;;34237:18;;:::i;:::-;34222:2;34279:1;34276;34272:9;34267:14;;34144:143;;;;:::o;34293:348::-;;34356:20;34374:1;34356:20;:::i;:::-;34351:25;;34390:20;34408:1;34390:20;:::i;:::-;34385:25;;34578:1;34510:66;34506:74;34503:1;34500:81;34495:1;34488:9;34481:17;34477:105;34474:2;;;34585:18;;:::i;:::-;34474:2;34633:1;34630;34626:9;34615:20;;34341:300;;;;:::o;34647:191::-;;34707:20;34725:1;34707:20;:::i;:::-;34702:25;;34741:20;34759:1;34741:20;:::i;:::-;34736:25;;34780:1;34777;34774:8;34771:2;;;34785:18;;:::i;:::-;34771:2;34830:1;34827;34823:9;34815:17;;34692:146;;;;:::o;34844:96::-;;34910:24;34928:5;34910:24;:::i;:::-;34899:35;;34889:51;;;:::o;34946:90::-;;35023:5;35016:13;35009:21;34998:32;;34988:48;;;:::o;35042:149::-;;35118:66;35111:5;35107:78;35096:89;;35086:105;;;:::o;35197:126::-;;35274:42;35267:5;35263:54;35252:65;;35242:81;;;:::o;35329:77::-;;35395:5;35384:16;;35374:32;;;:::o;35412:154::-;35496:6;35491:3;35486;35473:30;35558:1;35549:6;35544:3;35540:16;35533:27;35463:103;;;:::o;35572:307::-;35640:1;35650:113;35664:6;35661:1;35658:13;35650:113;;;35749:1;35744:3;35740:11;35734:18;35730:1;35725:3;35721:11;35714:39;35686:2;35683:1;35679:10;35674:15;;35650:113;;;35781:6;35778:1;35775:13;35772:2;;;35861:1;35852:6;35847:3;35843:16;35836:27;35772:2;35621:258;;;;:::o;35885:320::-;;35966:1;35960:4;35956:12;35946:22;;36013:1;36007:4;36003:12;36034:18;36024:2;;36090:4;36082:6;36078:17;36068:27;;36024:2;36152;36144:6;36141:14;36121:18;36118:38;36115:2;;;36171:18;;:::i;:::-;36115:2;35936:269;;;;:::o;36211:233::-;;36273:24;36291:5;36273:24;:::i;:::-;36264:33;;36319:66;36312:5;36309:77;36306:2;;;36389:18;;:::i;:::-;36306:2;36436:1;36429:5;36425:13;36418:20;;36254:190;;;:::o;36450:176::-;;36499:20;36517:1;36499:20;:::i;:::-;36494:25;;36533:20;36551:1;36533:20;:::i;:::-;36528:25;;36572:1;36562:2;;36577:18;;:::i;:::-;36562:2;36618:1;36615;36611:9;36606:14;;36484:142;;;;:::o;36632:180::-;36680:77;36677:1;36670:88;36777:4;36774:1;36767:15;36801:4;36798:1;36791:15;36818:180;36866:77;36863:1;36856:88;36963:4;36960:1;36953:15;36987:4;36984:1;36977:15;37004:180;37052:77;37049:1;37042:88;37149:4;37146:1;37139:15;37173:4;37170:1;37163:15;37190:180;37238:77;37235:1;37228:88;37335:4;37332:1;37325:15;37359:4;37356:1;37349:15;37376:102;;37468:2;37464:7;37459:2;37452:5;37448:14;37444:28;37434:38;;37424:54;;;:::o;37484:122::-;37557:24;37575:5;37557:24;:::i;:::-;37550:5;37547:35;37537:2;;37596:1;37593;37586:12;37537:2;37527:79;:::o;37612:116::-;37682:21;37697:5;37682:21;:::i;:::-;37675:5;37672:32;37662:2;;37718:1;37715;37708:12;37662:2;37652:76;:::o;37734:120::-;37806:23;37823:5;37806:23;:::i;:::-;37799:5;37796:34;37786:2;;37844:1;37841;37834:12;37786:2;37776:78;:::o;37860:122::-;37933:24;37951:5;37933:24;:::i;:::-;37926:5;37923:35;37913:2;;37972:1;37969;37962:12;37913:2;37903:79;:::o
Swarm Source
ipfs://cbfe416e1774018dcb0aabcaa03a0f7db423f74f0b149a603ec85a6151cecc23
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.