ERC-721
Overview
Max Total Supply
10,000 CHOSEN
Holders
2,783
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 CHOSENLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TheChosens
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-17 */ /* ▄▄▄█████▓ ██░ ██ ▓█████ ▄████▄ ██░ ██ ▒█████ ██████ ▓█████ ███▄ █ ██████ ▓ ██▒ ▓▒▓██░ ██▒▓█ ▀ ▒██▀ ▀█ ▓██░ ██▒▒██▒ ██▒▒██ ▒ ▓█ ▀ ██ ▀█ █ ▒██ ▒ ▒ ▓██░ ▒░▒██▀▀██░▒███ ▒▓█ ▄ ▒██▀▀██░▒██░ ██▒░ ▓██▄ ▒███ ▓██ ▀█ ██▒░ ▓██▄ ░ ▓██▓ ░ ░▓█ ░██ ▒▓█ ▄ ▒▓▓▄ ▄██▒░▓█ ░██ ▒██ ██░ ▒ ██▒▒▓█ ▄ ▓██▒ ▐▌██▒ ▒ ██▒ ▒██▒ ░ ░▓█▒░██▓░▒████▒ ▒ ▓███▀ ░░▓█▒░██▓░ ████▓▒░▒██████▒▒░▒████▒▒██░ ▓██░▒██████▒▒ ▒ ░░ ▒ ░░▒░▒░░ ▒░ ░ ░ ░▒ ▒ ░ ▒ ░░▒░▒░ ▒░▒░▒░ ▒ ▒▓▒ ▒ ░░░ ▒░ ░░ ▒░ ▒ ▒ ▒ ▒▓▒ ▒ ░ ░ ▒ ░▒░ ░ ░ ░ ░ ░ ▒ ▒ ░▒░ ░ ░ ▒ ▒░ ░ ░▒ ░ ░ ░ ░ ░░ ░░ ░ ▒░░ ░▒ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░░ ░░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ */ // SPDX-License-Identifier: MIT 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/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // 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 (last updated v4.6.0) (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`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must 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 Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), 'ERC721A: global index out of bounds'); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), 'ERC721A: owner index out of bounds'); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert('ERC721A: unable to get token of owner by index'); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), 'ERC721A: balance query for the zero address'); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), 'ERC721A: number minted query for the zero address'); return uint256(_addressData[owner].numberMinted); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), 'ERC721A: owner query for nonexistent token'); unchecked { for (uint256 curr = tokenId; curr >= 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert('ERC721A: unable to determine the owner of token'); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token'); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, 'ERC721A: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721A: approve caller is not owner nor approved for all' ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), 'ERC721A: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), 'ERC721A: approve to caller'); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = currentIndex; require(to != address(0), 'ERC721A: mint to the zero address'); require(quantity != 0, 'ERC721A: quantity must be greater than 0'); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe) { require( _checkOnERC721Received(address(0), to, updatedIndex, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } updatedIndex++; } currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved'); require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner'); require(to != address(0), 'ERC721A: transfer to the zero address'); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert('ERC721A: transfer to non ERC721Receiver implementer'); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: MutantAIYachtClub.sol pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } //newerc.sol pragma solidity ^0.8.0; contract TheChosens is ERC721A, Ownable, Pausable, ReentrancyGuard { using Strings for uint256; string public baseURI; string public baseExtension = ""; string public notRevealedUri; bool public revealed = true; uint public maxPerTx = 100; uint public maxPerFree = 1; uint public totalFree = 2000; uint256 public price = 0.0022 ether; uint256 public maxSupply = 10000; uint256 public maxperAddressPublicMint = 100; bool public mintEnabled = true; uint public totalFreeMinted = 0; mapping(address => uint256) public _mintedFreeAmount; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721A(_name, _symbol) { _safeMint(msg.sender, 50); setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } function mint(uint256 count) external payable { uint256 cost = price; bool isFree = ((totalFreeMinted + count < totalFree + 1) && (_mintedFreeAmount[msg.sender] < maxPerFree)); if (isFree) { require(mintEnabled, "Mint is not live yet"); require(totalSupply() + count <= maxSupply, "No more"); require(count <= maxPerTx, "Max per TX reached."); if(count >= (maxPerFree - _mintedFreeAmount[msg.sender])) { require(msg.value >= (count * cost) - ((maxPerFree - _mintedFreeAmount[msg.sender]) * cost), "Please send the exact ETH amount"); _mintedFreeAmount[msg.sender] = maxPerFree; totalFreeMinted += maxPerFree; } else if(count < (maxPerFree - _mintedFreeAmount[msg.sender])) { require(msg.value >= 0, "Please send the exact ETH amount"); _mintedFreeAmount[msg.sender] += count; totalFreeMinted += count; } } else{ require(mintEnabled, "Mint is not live yet"); require(msg.value >= count * cost, "Please send the exact ETH amount"); require(totalSupply() + count <= maxSupply, "No more"); require(count <= maxPerTx, "Max per TX reached."); } _safeMint(msg.sender, count); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setMaxTotalFree(uint256 MaxTotalFree_) external onlyOwner { totalFree = MaxTotalFree_; } function maxFreePerWallet() public view returns (uint256) { return maxPerFree; } function setMaxPerFree(uint256 MaxPerFree_) external onlyOwner { maxPerFree = MaxPerFree_; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function reveal() public onlyOwner() { revealed = true; } function setPrice(uint256 price_) external onlyOwner { price = price_; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(""); require(success); } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } }
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":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mintedFreeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"maxFreePerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","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":"maxperAddressPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"MaxPerFree_","type":"uint256"}],"name":"setMaxPerFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"MaxTotalFree_","type":"uint256"}],"name":"setMaxTotalFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","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":"totalFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFreeMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600a90805190602001906200002b92919062000991565b506001600c60006101000a81548160ff0219169083151502179055506064600d556001600e556107d0600f556607d0e36a81800060105561271060115560646012556001601360006101000a81548160ff02191690831515021790555060006014553480156200009a57600080fd5b5060405162005d0938038062005d098339818101604052810190620000c0919062000b08565b83838160019080519060200190620000da92919062000991565b508060029080519060200190620000f392919062000991565b505050620001166200010a6200017860201b60201c565b6200018060201b60201c565b6000600760146101000a81548160ff02191690831515021790555060016008819055506200014c3360326200024660201b60201c565b6200015d826200026c60201b60201c565b6200016e816200031760201b60201c565b505050506200111c565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000268828260405180602001604052806000815250620003c260201b60201c565b5050565b6200027c6200017860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a2620003dc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f29062000d49565b60405180910390fd5b80600990805190602001906200031392919062000991565b5050565b620003276200017860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200034d620003dc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200039d9062000d49565b60405180910390fd5b80600b9080519060200190620003be92919062000991565b5050565b620003d783838360016200040660201b60201c565b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156200047f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004769062000d8d565b60405180910390fd5b6000841415620004c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004bd9062000daf565b60405180910390fd5b620004db6000868387620007a860201b60201c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156200078357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a483156200076d576200072a6000888488620007ae60201b60201c565b6200076c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007639062000d6b565b60405180910390fd5b5b81806001019250508080600101915050620006a9565b508060008190555050620007a160008683876200096860201b60201c565b5050505050565b50505050565b6000620007dc8473ffffffffffffffffffffffffffffffffffffffff166200096e60201b620023041760201c565b156200095b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200080e6200017860201b60201c565b8786866040518563ffffffff1660e01b815260040162000832949392919062000cf5565b602060405180830381600087803b1580156200084d57600080fd5b505af19250505080156200088157506040513d601f19601f820116820180604052508101906200087e919062000ad6565b60015b6200090a573d8060008114620008b4576040519150601f19603f3d011682016040523d82523d6000602084013e620008b9565b606091505b5060008151141562000902576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008f99062000d6b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000960565b600190505b949350505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546200099f9062000efd565b90600052602060002090601f016020900481019282620009c3576000855562000a0f565b82601f10620009de57805160ff191683800117855562000a0f565b8280016001018555821562000a0f579182015b8281111562000a0e578251825591602001919060010190620009f1565b5b50905062000a1e919062000a22565b5090565b5b8082111562000a3d57600081600090555060010162000a23565b5090565b600062000a5862000a528462000dfa565b62000dd1565b90508281526020810184848401111562000a775762000a7662000fcc565b5b62000a8484828562000ec7565b509392505050565b60008151905062000a9d8162001102565b92915050565b600082601f83011262000abb5762000aba62000fc7565b5b815162000acd84826020860162000a41565b91505092915050565b60006020828403121562000aef5762000aee62000fd6565b5b600062000aff8482850162000a8c565b91505092915050565b6000806000806080858703121562000b255762000b2462000fd6565b5b600085015167ffffffffffffffff81111562000b465762000b4562000fd1565b5b62000b548782880162000aa3565b945050602085015167ffffffffffffffff81111562000b785762000b7762000fd1565b5b62000b868782880162000aa3565b935050604085015167ffffffffffffffff81111562000baa5762000ba962000fd1565b5b62000bb88782880162000aa3565b925050606085015167ffffffffffffffff81111562000bdc5762000bdb62000fd1565b5b62000bea8782880162000aa3565b91505092959194509250565b62000c018162000e5d565b82525050565b600062000c148262000e30565b62000c20818562000e3b565b935062000c3281856020860162000ec7565b62000c3d8162000fdb565b840191505092915050565b600062000c5760208362000e4c565b915062000c648262000fec565b602082019050919050565b600062000c7e60338362000e4c565b915062000c8b8262001015565b604082019050919050565b600062000ca560218362000e4c565b915062000cb28262001064565b604082019050919050565b600062000ccc60288362000e4c565b915062000cd982620010b3565b604082019050919050565b62000cef8162000ebd565b82525050565b600060808201905062000d0c600083018762000bf6565b62000d1b602083018662000bf6565b62000d2a604083018562000ce4565b818103606083015262000d3e818462000c07565b905095945050505050565b6000602082019050818103600083015262000d648162000c48565b9050919050565b6000602082019050818103600083015262000d868162000c6f565b9050919050565b6000602082019050818103600083015262000da88162000c96565b9050919050565b6000602082019050818103600083015262000dca8162000cbd565b9050919050565b600062000ddd62000df0565b905062000deb828262000f33565b919050565b6000604051905090565b600067ffffffffffffffff82111562000e185762000e1762000f98565b5b62000e238262000fdb565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000e6a8262000e9d565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000ee757808201518184015260208101905062000eca565b8381111562000ef7576000848401525b50505050565b6000600282049050600182168062000f1657607f821691505b6020821081141562000f2d5762000f2c62000f69565b5b50919050565b62000f3e8262000fdb565b810181811067ffffffffffffffff8211171562000f605762000f5f62000f98565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6200110d8162000e71565b81146200111957600080fd5b50565b614bdd806200112c6000396000f3fe60806040526004361061025c5760003560e01c80638da5cb5b11610144578063c87b56dd116100b6578063e945971c1161007a578063e945971c146108ac578063e985e9c5146108d5578063f2c4ce1e14610912578063f2fde38b1461093b578063f4db2acb14610964578063f968adbe146109a15761025c565b8063c87b56dd146107c5578063d123973014610802578063d5abeb011461082d578063da3ef23f14610858578063dad7b5c9146108815761025c565b8063a22cb46511610108578063a22cb465146106db578063a475b5dd14610704578063a70273571461071b578063b88d4fde14610746578063c66828621461076f578063c7c39ffc1461079a5761025c565b80638da5cb5b1461061557806391b7f5ed1461064057806395d89b4114610669578063a035b1fe14610694578063a0712d68146106bf5761025c565b80633ccfd60b116101dd5780635a963f1b116101a15780635a963f1b146105055780635c975abb1461052e5780636352211e146105595780636c0360eb1461059657806370a08231146105c1578063715018a6146105fe5761025c565b80633ccfd60b1461044157806342842e0e1461044b5780634f6ccce71461047457806351830227146104b157806355f804b3146104dc5761025c565b806318160ddd1161022457806318160ddd1461035a57806323b872dd146103855780632f745c59146103ae578063333e44e6146103eb57806334c8fd75146104165761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063081c8c4414610306578063095ea7b314610331575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613725565b6109cc565b6040516102959190613d39565b60405180910390f35b3480156102aa57600080fd5b506102b3610b16565b6040516102c09190613d54565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906137c8565b610ba8565b6040516102fd9190613cd2565b60405180910390f35b34801561031257600080fd5b5061031b610c2d565b6040516103289190613d54565b60405180910390f35b34801561033d57600080fd5b50610358600480360381019061035391906136e5565b610cbb565b005b34801561036657600080fd5b5061036f610dd4565b60405161037c9190614056565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a791906135cf565b610ddd565b005b3480156103ba57600080fd5b506103d560048036038101906103d091906136e5565b610ded565b6040516103e29190614056565b60405180910390f35b3480156103f757600080fd5b50610400610fdf565b60405161040d9190614056565b60405180910390f35b34801561042257600080fd5b5061042b610fe5565b6040516104389190614056565b60405180910390f35b610449610feb565b005b34801561045757600080fd5b50610472600480360381019061046d91906135cf565b6110e0565b005b34801561048057600080fd5b5061049b600480360381019061049691906137c8565b611100565b6040516104a89190614056565b60405180910390f35b3480156104bd57600080fd5b506104c6611153565b6040516104d39190613d39565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe919061377f565b611166565b005b34801561051157600080fd5b5061052c600480360381019061052791906137c8565b6111fc565b005b34801561053a57600080fd5b50610543611282565b6040516105509190613d39565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b91906137c8565b611299565b60405161058d9190613cd2565b60405180910390f35b3480156105a257600080fd5b506105ab6112af565b6040516105b89190613d54565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190613562565b61133d565b6040516105f59190614056565b60405180910390f35b34801561060a57600080fd5b50610613611426565b005b34801561062157600080fd5b5061062a6114ae565b6040516106379190613cd2565b60405180910390f35b34801561064c57600080fd5b50610667600480360381019061066291906137c8565b6114d8565b005b34801561067557600080fd5b5061067e61155e565b60405161068b9190613d54565b60405180910390f35b3480156106a057600080fd5b506106a96115f0565b6040516106b69190614056565b60405180910390f35b6106d960048036038101906106d491906137c8565b6115f6565b005b3480156106e757600080fd5b5061070260048036038101906106fd91906136a5565b611b1c565b005b34801561071057600080fd5b50610719611c9d565b005b34801561072757600080fd5b50610730611d36565b60405161073d9190614056565b60405180910390f35b34801561075257600080fd5b5061076d60048036038101906107689190613622565b611d40565b005b34801561077b57600080fd5b50610784611d9c565b6040516107919190613d54565b60405180910390f35b3480156107a657600080fd5b506107af611e2a565b6040516107bc9190614056565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e791906137c8565b611e30565b6040516107f99190613d54565b60405180910390f35b34801561080e57600080fd5b50610817611f89565b6040516108249190613d39565b60405180910390f35b34801561083957600080fd5b50610842611f9c565b60405161084f9190614056565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a919061377f565b611fa2565b005b34801561088d57600080fd5b50610896612038565b6040516108a39190614056565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce91906137c8565b61203e565b005b3480156108e157600080fd5b506108fc60048036038101906108f7919061358f565b6120c4565b6040516109099190613d39565b60405180910390f35b34801561091e57600080fd5b506109396004803603810190610934919061377f565b612158565b005b34801561094757600080fd5b50610962600480360381019061095d9190613562565b6121ee565b005b34801561097057600080fd5b5061098b60048036038101906109869190613562565b6122e6565b6040516109989190614056565b60405180910390f35b3480156109ad57600080fd5b506109b66122fe565b6040516109c39190614056565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aff57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b0f5750610b0e82612327565b5b9050919050565b606060018054610b2590614326565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5190614326565b8015610b9e5780601f10610b7357610100808354040283529160200191610b9e565b820191906000526020600020905b815481529060010190602001808311610b8157829003601f168201915b5050505050905090565b6000610bb382612391565b610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be990614036565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600b8054610c3a90614326565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6690614326565b8015610cb35780601f10610c8857610100808354040283529160200191610cb3565b820191906000526020600020905b815481529060010190602001808311610c9657829003601f168201915b505050505081565b6000610cc682611299565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90613f56565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d5661239e565b73ffffffffffffffffffffffffffffffffffffffff161480610d855750610d8481610d7f61239e565b6120c4565b5b610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90613e56565b60405180910390fd5b610dcf8383836123a6565b505050565b60008054905090565b610de8838383612458565b505050565b6000610df88361133d565b8210610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613d76565b60405180910390fd5b6000610e43610dd4565b905060008060005b83811015610f9d576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f3d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f8f5786841415610f86578195505050505050610fd9565b83806001019450505b508080600101915050610e4b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090613ff6565b60405180910390fd5b92915050565b600f5481565b60125481565b610ff361239e565b73ffffffffffffffffffffffffffffffffffffffff166110116114ae565b73ffffffffffffffffffffffffffffffffffffffff1614611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90613ed6565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161108d90613cbd565b60006040518083038185875af1925050503d80600081146110ca576040519150601f19603f3d011682016040523d82523d6000602084013e6110cf565b606091505b50509050806110dd57600080fd5b50565b6110fb83838360405180602001604052806000815250611d40565b505050565b600061110a610dd4565b821061114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290613e16565b60405180910390fd5b819050919050565b600c60009054906101000a900460ff1681565b61116e61239e565b73ffffffffffffffffffffffffffffffffffffffff1661118c6114ae565b73ffffffffffffffffffffffffffffffffffffffff16146111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d990613ed6565b60405180910390fd5b80600990805190602001906111f892919061333c565b5050565b61120461239e565b73ffffffffffffffffffffffffffffffffffffffff166112226114ae565b73ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90613ed6565b60405180910390fd5b80600f8190555050565b6000600760149054906101000a900460ff16905090565b60006112a482612998565b600001519050919050565b600980546112bc90614326565b80601f01602080910402602001604051908101604052809291908181526020018280546112e890614326565b80156113355780601f1061130a57610100808354040283529160200191611335565b820191906000526020600020905b81548152906001019060200180831161131857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590613e76565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61142e61239e565b73ffffffffffffffffffffffffffffffffffffffff1661144c6114ae565b73ffffffffffffffffffffffffffffffffffffffff16146114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613ed6565b60405180910390fd5b6114ac6000612b32565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114e061239e565b73ffffffffffffffffffffffffffffffffffffffff166114fe6114ae565b73ffffffffffffffffffffffffffffffffffffffff1614611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b90613ed6565b60405180910390fd5b8060108190555050565b60606002805461156d90614326565b80601f016020809104026020016040519081016040528092919081815260200182805461159990614326565b80156115e65780601f106115bb576101008083540402835291602001916115e6565b820191906000526020600020905b8154815290600101906020018083116115c957829003601f168201915b5050505050905090565b60105481565b6000601054905060006001600f5461160e919061415b565b8360145461161c919061415b565b1080156116695750600e54601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b905080156119d357601360009054906101000a900460ff166116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b790613d96565b60405180910390fd5b601154836116cc610dd4565b6116d6919061415b565b1115611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90613db6565b60405180910390fd5b600d5483111561175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390613fd6565b60405180910390fd5b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600e546117a9919061423c565b83106118c55781601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600e546117fd919061423c565b61180791906141e2565b828461181391906141e2565b61181d919061423c565b34101561185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690613e96565b60405180910390fd5b600e54601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e54601460008282546118b9919061415b565b925050819055506119ce565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600e54611912919061423c565b8310156119cd57600034101561195d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195490613e96565b60405180910390fd5b82601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119ac919061415b565b9250508190555082601460008282546119c5919061415b565b925050819055505b5b611b0d565b601360009054906101000a900460ff16611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1990613d96565b60405180910390fd5b8183611a2e91906141e2565b341015611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6790613e96565b60405180910390fd5b60115483611a7c610dd4565b611a86919061415b565b1115611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe90613db6565b60405180910390fd5b600d54831115611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390613fd6565b60405180910390fd5b5b611b173384612bf8565b505050565b611b2461239e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8990613f16565b60405180910390fd5b8060066000611b9f61239e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c4c61239e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c919190613d39565b60405180910390a35050565b611ca561239e565b73ffffffffffffffffffffffffffffffffffffffff16611cc36114ae565b73ffffffffffffffffffffffffffffffffffffffff1614611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1090613ed6565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b6000600e54905090565b611d4b848484612458565b611d5784848484612c16565b611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90613f76565b60405180910390fd5b50505050565b600a8054611da990614326565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd590614326565b8015611e225780601f10611df757610100808354040283529160200191611e22565b820191906000526020600020905b815481529060010190602001808311611e0557829003601f168201915b505050505081565b600e5481565b6060611e3b82612391565b611e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7190613ef6565b60405180910390fd5b60001515600c60009054906101000a900460ff1615151415611f2857600b8054611ea390614326565b80601f0160208091040260200160405190810160405280929190818152602001828054611ecf90614326565b8015611f1c5780601f10611ef157610100808354040283529160200191611f1c565b820191906000526020600020905b815481529060010190602001808311611eff57829003601f168201915b50505050509050611f84565b6000611f32612dad565b90506000815111611f525760405180602001604052806000815250611f80565b80611f5c84612e3f565b600a604051602001611f7093929190613c8c565b6040516020818303038152906040525b9150505b919050565b601360009054906101000a900460ff1681565b60115481565b611faa61239e565b73ffffffffffffffffffffffffffffffffffffffff16611fc86114ae565b73ffffffffffffffffffffffffffffffffffffffff161461201e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201590613ed6565b60405180910390fd5b80600a908051906020019061203492919061333c565b5050565b60145481565b61204661239e565b73ffffffffffffffffffffffffffffffffffffffff166120646114ae565b73ffffffffffffffffffffffffffffffffffffffff16146120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190613ed6565b60405180910390fd5b80600e8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61216061239e565b73ffffffffffffffffffffffffffffffffffffffff1661217e6114ae565b73ffffffffffffffffffffffffffffffffffffffff16146121d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cb90613ed6565b60405180910390fd5b80600b90805190602001906121ea92919061333c565b5050565b6121f661239e565b73ffffffffffffffffffffffffffffffffffffffff166122146114ae565b73ffffffffffffffffffffffffffffffffffffffff161461226a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226190613ed6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d190613dd6565b60405180910390fd5b6122e381612b32565b50565b60156020528060005260406000206000915090505481565b600d5481565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061246382612998565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661248a61239e565b73ffffffffffffffffffffffffffffffffffffffff1614806124e657506124af61239e565b73ffffffffffffffffffffffffffffffffffffffff166124ce84610ba8565b73ffffffffffffffffffffffffffffffffffffffff16145b80612502575061250182600001516124fc61239e565b6120c4565b5b905080612544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253b90613f36565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146125b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ad90613eb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261d90613e36565b60405180910390fd5b6126338585856001612fa0565b61264360008484600001516123a6565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129285761288781612391565b156129275782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129918585856001612fa6565b5050505050565b6129a06133c2565b6129a982612391565b6129e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129df90613df6565b60405180910390fd5b60008290505b60008110612af1576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ae2578092505050612b2d565b508080600190039150506129ee565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2490614016565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c12828260405180602001604052806000815250612fac565b5050565b6000612c378473ffffffffffffffffffffffffffffffffffffffff16612304565b15612da0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c6061239e565b8786866040518563ffffffff1660e01b8152600401612c829493929190613ced565b602060405180830381600087803b158015612c9c57600080fd5b505af1925050508015612ccd57506040513d601f19601f82011682018060405250810190612cca9190613752565b60015b612d50573d8060008114612cfd576040519150601f19603f3d011682016040523d82523d6000602084013e612d02565b606091505b50600081511415612d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3f90613f76565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612da5565b600190505b949350505050565b606060098054612dbc90614326565b80601f0160208091040260200160405190810160405280929190818152602001828054612de890614326565b8015612e355780601f10612e0a57610100808354040283529160200191612e35565b820191906000526020600020905b815481529060010190602001808311612e1857829003601f168201915b5050505050905090565b60606000821415612e87576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f9b565b600082905060005b60008214612eb9578080612ea290614389565b915050600a82612eb291906141b1565b9150612e8f565b60008167ffffffffffffffff811115612ed557612ed46144bf565b5b6040519080825280601f01601f191660200182016040528015612f075781602001600182028036833780820191505090505b5090505b60008514612f9457600182612f20919061423c565b9150600a85612f2f91906143d2565b6030612f3b919061415b565b60f81b818381518110612f5157612f50614490565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f8d91906141b1565b9450612f0b565b8093505050505b919050565b50505050565b50505050565b612fb98383836001612fbe565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302b90613f96565b60405180910390fd5b6000841415613078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306f90613fb6565b60405180910390fd5b6130856000868387612fa0565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561331f57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561330a576132ca6000888488612c16565b613309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330090613f76565b60405180910390fd5b5b81806001019250508080600101915050613253565b5080600081905550506133356000868387612fa6565b5050505050565b82805461334890614326565b90600052602060002090601f01602090048101928261336a57600085556133b1565b82601f1061338357805160ff19168380011785556133b1565b828001600101855582156133b1579182015b828111156133b0578251825591602001919060010190613395565b5b5090506133be91906133fc565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156134155760008160009055506001016133fd565b5090565b600061342c61342784614096565b614071565b905082815260208101848484011115613448576134476144f3565b5b6134538482856142e4565b509392505050565b600061346e613469846140c7565b614071565b90508281526020810184848401111561348a576134896144f3565b5b6134958482856142e4565b509392505050565b6000813590506134ac81614b4b565b92915050565b6000813590506134c181614b62565b92915050565b6000813590506134d681614b79565b92915050565b6000815190506134eb81614b79565b92915050565b600082601f830112613506576135056144ee565b5b8135613516848260208601613419565b91505092915050565b600082601f830112613534576135336144ee565b5b813561354484826020860161345b565b91505092915050565b60008135905061355c81614b90565b92915050565b600060208284031215613578576135776144fd565b5b60006135868482850161349d565b91505092915050565b600080604083850312156135a6576135a56144fd565b5b60006135b48582860161349d565b92505060206135c58582860161349d565b9150509250929050565b6000806000606084860312156135e8576135e76144fd565b5b60006135f68682870161349d565b93505060206136078682870161349d565b92505060406136188682870161354d565b9150509250925092565b6000806000806080858703121561363c5761363b6144fd565b5b600061364a8782880161349d565b945050602061365b8782880161349d565b935050604061366c8782880161354d565b925050606085013567ffffffffffffffff81111561368d5761368c6144f8565b5b613699878288016134f1565b91505092959194509250565b600080604083850312156136bc576136bb6144fd565b5b60006136ca8582860161349d565b92505060206136db858286016134b2565b9150509250929050565b600080604083850312156136fc576136fb6144fd565b5b600061370a8582860161349d565b925050602061371b8582860161354d565b9150509250929050565b60006020828403121561373b5761373a6144fd565b5b6000613749848285016134c7565b91505092915050565b600060208284031215613768576137676144fd565b5b6000613776848285016134dc565b91505092915050565b600060208284031215613795576137946144fd565b5b600082013567ffffffffffffffff8111156137b3576137b26144f8565b5b6137bf8482850161351f565b91505092915050565b6000602082840312156137de576137dd6144fd565b5b60006137ec8482850161354d565b91505092915050565b6137fe81614270565b82525050565b61380d81614282565b82525050565b600061381e8261410d565b6138288185614123565b93506138388185602086016142f3565b61384181614502565b840191505092915050565b600061385782614118565b613861818561413f565b93506138718185602086016142f3565b61387a81614502565b840191505092915050565b600061389082614118565b61389a8185614150565b93506138aa8185602086016142f3565b80840191505092915050565b600081546138c381614326565b6138cd8186614150565b945060018216600081146138e857600181146138f95761392c565b60ff1983168652818601935061392c565b613902856140f8565b60005b8381101561392457815481890152600182019150602081019050613905565b838801955050505b50505092915050565b600061394260228361413f565b915061394d82614513565b604082019050919050565b600061396560148361413f565b915061397082614562565b602082019050919050565b600061398860078361413f565b91506139938261458b565b602082019050919050565b60006139ab60268361413f565b91506139b6826145b4565b604082019050919050565b60006139ce602a8361413f565b91506139d982614603565b604082019050919050565b60006139f160238361413f565b91506139fc82614652565b604082019050919050565b6000613a1460258361413f565b9150613a1f826146a1565b604082019050919050565b6000613a3760398361413f565b9150613a42826146f0565b604082019050919050565b6000613a5a602b8361413f565b9150613a658261473f565b604082019050919050565b6000613a7d60208361413f565b9150613a888261478e565b602082019050919050565b6000613aa060268361413f565b9150613aab826147b7565b604082019050919050565b6000613ac360208361413f565b9150613ace82614806565b602082019050919050565b6000613ae6602f8361413f565b9150613af18261482f565b604082019050919050565b6000613b09601a8361413f565b9150613b148261487e565b602082019050919050565b6000613b2c60328361413f565b9150613b37826148a7565b604082019050919050565b6000613b4f60228361413f565b9150613b5a826148f6565b604082019050919050565b6000613b72600083614134565b9150613b7d82614945565b600082019050919050565b6000613b9560338361413f565b9150613ba082614948565b604082019050919050565b6000613bb860218361413f565b9150613bc382614997565b604082019050919050565b6000613bdb60288361413f565b9150613be6826149e6565b604082019050919050565b6000613bfe60138361413f565b9150613c0982614a35565b602082019050919050565b6000613c21602e8361413f565b9150613c2c82614a5e565b604082019050919050565b6000613c44602f8361413f565b9150613c4f82614aad565b604082019050919050565b6000613c67602d8361413f565b9150613c7282614afc565b604082019050919050565b613c86816142da565b82525050565b6000613c988286613885565b9150613ca48285613885565b9150613cb082846138b6565b9150819050949350505050565b6000613cc882613b65565b9150819050919050565b6000602082019050613ce760008301846137f5565b92915050565b6000608082019050613d0260008301876137f5565b613d0f60208301866137f5565b613d1c6040830185613c7d565b8181036060830152613d2e8184613813565b905095945050505050565b6000602082019050613d4e6000830184613804565b92915050565b60006020820190508181036000830152613d6e818461384c565b905092915050565b60006020820190508181036000830152613d8f81613935565b9050919050565b60006020820190508181036000830152613daf81613958565b9050919050565b60006020820190508181036000830152613dcf8161397b565b9050919050565b60006020820190508181036000830152613def8161399e565b9050919050565b60006020820190508181036000830152613e0f816139c1565b9050919050565b60006020820190508181036000830152613e2f816139e4565b9050919050565b60006020820190508181036000830152613e4f81613a07565b9050919050565b60006020820190508181036000830152613e6f81613a2a565b9050919050565b60006020820190508181036000830152613e8f81613a4d565b9050919050565b60006020820190508181036000830152613eaf81613a70565b9050919050565b60006020820190508181036000830152613ecf81613a93565b9050919050565b60006020820190508181036000830152613eef81613ab6565b9050919050565b60006020820190508181036000830152613f0f81613ad9565b9050919050565b60006020820190508181036000830152613f2f81613afc565b9050919050565b60006020820190508181036000830152613f4f81613b1f565b9050919050565b60006020820190508181036000830152613f6f81613b42565b9050919050565b60006020820190508181036000830152613f8f81613b88565b9050919050565b60006020820190508181036000830152613faf81613bab565b9050919050565b60006020820190508181036000830152613fcf81613bce565b9050919050565b60006020820190508181036000830152613fef81613bf1565b9050919050565b6000602082019050818103600083015261400f81613c14565b9050919050565b6000602082019050818103600083015261402f81613c37565b9050919050565b6000602082019050818103600083015261404f81613c5a565b9050919050565b600060208201905061406b6000830184613c7d565b92915050565b600061407b61408c565b90506140878282614358565b919050565b6000604051905090565b600067ffffffffffffffff8211156140b1576140b06144bf565b5b6140ba82614502565b9050602081019050919050565b600067ffffffffffffffff8211156140e2576140e16144bf565b5b6140eb82614502565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614166826142da565b9150614171836142da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141a6576141a5614403565b5b828201905092915050565b60006141bc826142da565b91506141c7836142da565b9250826141d7576141d6614432565b5b828204905092915050565b60006141ed826142da565b91506141f8836142da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561423157614230614403565b5b828202905092915050565b6000614247826142da565b9150614252836142da565b92508282101561426557614264614403565b5b828203905092915050565b600061427b826142ba565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143115780820151818401526020810190506142f6565b83811115614320576000848401525b50505050565b6000600282049050600182168061433e57607f821691505b6020821081141561435257614351614461565b5b50919050565b61436182614502565b810181811067ffffffffffffffff821117156143805761437f6144bf565b5b80604052505050565b6000614394826142da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143c7576143c6614403565b5b600182019050919050565b60006143dd826142da565b91506143e8836142da565b9250826143f8576143f7614432565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74206973206e6f74206c69766520796574000000000000000000000000600082015250565b7f4e6f206d6f726500000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f506c656173652073656e64207468652065786163742045544820616d6f756e74600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614b5481614270565b8114614b5f57600080fd5b50565b614b6b81614282565b8114614b7657600080fd5b50565b614b828161428e565b8114614b8d57600080fd5b50565b614b99816142da565b8114614ba457600080fd5b5056fea264697066735822122074ba347c93fba31011a13e5438cea90a6857fe41681b2146a7454ad6ba5debb564736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000b5468652043686f73656e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000643484f53454e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d53437975594658444538316631646a4243756d484263466231413955686e7636437a767435344442756e34342f00000000000000000000000000000000000000000000000000000000000000000000000000000000000a54686543686f73656e7300000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061025c5760003560e01c80638da5cb5b11610144578063c87b56dd116100b6578063e945971c1161007a578063e945971c146108ac578063e985e9c5146108d5578063f2c4ce1e14610912578063f2fde38b1461093b578063f4db2acb14610964578063f968adbe146109a15761025c565b8063c87b56dd146107c5578063d123973014610802578063d5abeb011461082d578063da3ef23f14610858578063dad7b5c9146108815761025c565b8063a22cb46511610108578063a22cb465146106db578063a475b5dd14610704578063a70273571461071b578063b88d4fde14610746578063c66828621461076f578063c7c39ffc1461079a5761025c565b80638da5cb5b1461061557806391b7f5ed1461064057806395d89b4114610669578063a035b1fe14610694578063a0712d68146106bf5761025c565b80633ccfd60b116101dd5780635a963f1b116101a15780635a963f1b146105055780635c975abb1461052e5780636352211e146105595780636c0360eb1461059657806370a08231146105c1578063715018a6146105fe5761025c565b80633ccfd60b1461044157806342842e0e1461044b5780634f6ccce71461047457806351830227146104b157806355f804b3146104dc5761025c565b806318160ddd1161022457806318160ddd1461035a57806323b872dd146103855780632f745c59146103ae578063333e44e6146103eb57806334c8fd75146104165761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063081c8c4414610306578063095ea7b314610331575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613725565b6109cc565b6040516102959190613d39565b60405180910390f35b3480156102aa57600080fd5b506102b3610b16565b6040516102c09190613d54565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906137c8565b610ba8565b6040516102fd9190613cd2565b60405180910390f35b34801561031257600080fd5b5061031b610c2d565b6040516103289190613d54565b60405180910390f35b34801561033d57600080fd5b50610358600480360381019061035391906136e5565b610cbb565b005b34801561036657600080fd5b5061036f610dd4565b60405161037c9190614056565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a791906135cf565b610ddd565b005b3480156103ba57600080fd5b506103d560048036038101906103d091906136e5565b610ded565b6040516103e29190614056565b60405180910390f35b3480156103f757600080fd5b50610400610fdf565b60405161040d9190614056565b60405180910390f35b34801561042257600080fd5b5061042b610fe5565b6040516104389190614056565b60405180910390f35b610449610feb565b005b34801561045757600080fd5b50610472600480360381019061046d91906135cf565b6110e0565b005b34801561048057600080fd5b5061049b600480360381019061049691906137c8565b611100565b6040516104a89190614056565b60405180910390f35b3480156104bd57600080fd5b506104c6611153565b6040516104d39190613d39565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe919061377f565b611166565b005b34801561051157600080fd5b5061052c600480360381019061052791906137c8565b6111fc565b005b34801561053a57600080fd5b50610543611282565b6040516105509190613d39565b60405180910390f35b34801561056557600080fd5b50610580600480360381019061057b91906137c8565b611299565b60405161058d9190613cd2565b60405180910390f35b3480156105a257600080fd5b506105ab6112af565b6040516105b89190613d54565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190613562565b61133d565b6040516105f59190614056565b60405180910390f35b34801561060a57600080fd5b50610613611426565b005b34801561062157600080fd5b5061062a6114ae565b6040516106379190613cd2565b60405180910390f35b34801561064c57600080fd5b50610667600480360381019061066291906137c8565b6114d8565b005b34801561067557600080fd5b5061067e61155e565b60405161068b9190613d54565b60405180910390f35b3480156106a057600080fd5b506106a96115f0565b6040516106b69190614056565b60405180910390f35b6106d960048036038101906106d491906137c8565b6115f6565b005b3480156106e757600080fd5b5061070260048036038101906106fd91906136a5565b611b1c565b005b34801561071057600080fd5b50610719611c9d565b005b34801561072757600080fd5b50610730611d36565b60405161073d9190614056565b60405180910390f35b34801561075257600080fd5b5061076d60048036038101906107689190613622565b611d40565b005b34801561077b57600080fd5b50610784611d9c565b6040516107919190613d54565b60405180910390f35b3480156107a657600080fd5b506107af611e2a565b6040516107bc9190614056565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e791906137c8565b611e30565b6040516107f99190613d54565b60405180910390f35b34801561080e57600080fd5b50610817611f89565b6040516108249190613d39565b60405180910390f35b34801561083957600080fd5b50610842611f9c565b60405161084f9190614056565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a919061377f565b611fa2565b005b34801561088d57600080fd5b50610896612038565b6040516108a39190614056565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce91906137c8565b61203e565b005b3480156108e157600080fd5b506108fc60048036038101906108f7919061358f565b6120c4565b6040516109099190613d39565b60405180910390f35b34801561091e57600080fd5b506109396004803603810190610934919061377f565b612158565b005b34801561094757600080fd5b50610962600480360381019061095d9190613562565b6121ee565b005b34801561097057600080fd5b5061098b60048036038101906109869190613562565b6122e6565b6040516109989190614056565b60405180910390f35b3480156109ad57600080fd5b506109b66122fe565b6040516109c39190614056565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aff57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b0f5750610b0e82612327565b5b9050919050565b606060018054610b2590614326565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5190614326565b8015610b9e5780601f10610b7357610100808354040283529160200191610b9e565b820191906000526020600020905b815481529060010190602001808311610b8157829003601f168201915b5050505050905090565b6000610bb382612391565b610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be990614036565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600b8054610c3a90614326565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6690614326565b8015610cb35780601f10610c8857610100808354040283529160200191610cb3565b820191906000526020600020905b815481529060010190602001808311610c9657829003601f168201915b505050505081565b6000610cc682611299565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90613f56565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d5661239e565b73ffffffffffffffffffffffffffffffffffffffff161480610d855750610d8481610d7f61239e565b6120c4565b5b610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90613e56565b60405180910390fd5b610dcf8383836123a6565b505050565b60008054905090565b610de8838383612458565b505050565b6000610df88361133d565b8210610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613d76565b60405180910390fd5b6000610e43610dd4565b905060008060005b83811015610f9d576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f3d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f8f5786841415610f86578195505050505050610fd9565b83806001019450505b508080600101915050610e4b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090613ff6565b60405180910390fd5b92915050565b600f5481565b60125481565b610ff361239e565b73ffffffffffffffffffffffffffffffffffffffff166110116114ae565b73ffffffffffffffffffffffffffffffffffffffff1614611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90613ed6565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161108d90613cbd565b60006040518083038185875af1925050503d80600081146110ca576040519150601f19603f3d011682016040523d82523d6000602084013e6110cf565b606091505b50509050806110dd57600080fd5b50565b6110fb83838360405180602001604052806000815250611d40565b505050565b600061110a610dd4565b821061114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290613e16565b60405180910390fd5b819050919050565b600c60009054906101000a900460ff1681565b61116e61239e565b73ffffffffffffffffffffffffffffffffffffffff1661118c6114ae565b73ffffffffffffffffffffffffffffffffffffffff16146111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d990613ed6565b60405180910390fd5b80600990805190602001906111f892919061333c565b5050565b61120461239e565b73ffffffffffffffffffffffffffffffffffffffff166112226114ae565b73ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90613ed6565b60405180910390fd5b80600f8190555050565b6000600760149054906101000a900460ff16905090565b60006112a482612998565b600001519050919050565b600980546112bc90614326565b80601f01602080910402602001604051908101604052809291908181526020018280546112e890614326565b80156113355780601f1061130a57610100808354040283529160200191611335565b820191906000526020600020905b81548152906001019060200180831161131857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590613e76565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61142e61239e565b73ffffffffffffffffffffffffffffffffffffffff1661144c6114ae565b73ffffffffffffffffffffffffffffffffffffffff16146114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613ed6565b60405180910390fd5b6114ac6000612b32565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114e061239e565b73ffffffffffffffffffffffffffffffffffffffff166114fe6114ae565b73ffffffffffffffffffffffffffffffffffffffff1614611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b90613ed6565b60405180910390fd5b8060108190555050565b60606002805461156d90614326565b80601f016020809104026020016040519081016040528092919081815260200182805461159990614326565b80156115e65780601f106115bb576101008083540402835291602001916115e6565b820191906000526020600020905b8154815290600101906020018083116115c957829003601f168201915b5050505050905090565b60105481565b6000601054905060006001600f5461160e919061415b565b8360145461161c919061415b565b1080156116695750600e54601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b905080156119d357601360009054906101000a900460ff166116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b790613d96565b60405180910390fd5b601154836116cc610dd4565b6116d6919061415b565b1115611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90613db6565b60405180910390fd5b600d5483111561175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390613fd6565b60405180910390fd5b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600e546117a9919061423c565b83106118c55781601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600e546117fd919061423c565b61180791906141e2565b828461181391906141e2565b61181d919061423c565b34101561185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690613e96565b60405180910390fd5b600e54601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e54601460008282546118b9919061415b565b925050819055506119ce565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600e54611912919061423c565b8310156119cd57600034101561195d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195490613e96565b60405180910390fd5b82601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119ac919061415b565b9250508190555082601460008282546119c5919061415b565b925050819055505b5b611b0d565b601360009054906101000a900460ff16611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1990613d96565b60405180910390fd5b8183611a2e91906141e2565b341015611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6790613e96565b60405180910390fd5b60115483611a7c610dd4565b611a86919061415b565b1115611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe90613db6565b60405180910390fd5b600d54831115611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390613fd6565b60405180910390fd5b5b611b173384612bf8565b505050565b611b2461239e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8990613f16565b60405180910390fd5b8060066000611b9f61239e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c4c61239e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c919190613d39565b60405180910390a35050565b611ca561239e565b73ffffffffffffffffffffffffffffffffffffffff16611cc36114ae565b73ffffffffffffffffffffffffffffffffffffffff1614611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1090613ed6565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b6000600e54905090565b611d4b848484612458565b611d5784848484612c16565b611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90613f76565b60405180910390fd5b50505050565b600a8054611da990614326565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd590614326565b8015611e225780601f10611df757610100808354040283529160200191611e22565b820191906000526020600020905b815481529060010190602001808311611e0557829003601f168201915b505050505081565b600e5481565b6060611e3b82612391565b611e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7190613ef6565b60405180910390fd5b60001515600c60009054906101000a900460ff1615151415611f2857600b8054611ea390614326565b80601f0160208091040260200160405190810160405280929190818152602001828054611ecf90614326565b8015611f1c5780601f10611ef157610100808354040283529160200191611f1c565b820191906000526020600020905b815481529060010190602001808311611eff57829003601f168201915b50505050509050611f84565b6000611f32612dad565b90506000815111611f525760405180602001604052806000815250611f80565b80611f5c84612e3f565b600a604051602001611f7093929190613c8c565b6040516020818303038152906040525b9150505b919050565b601360009054906101000a900460ff1681565b60115481565b611faa61239e565b73ffffffffffffffffffffffffffffffffffffffff16611fc86114ae565b73ffffffffffffffffffffffffffffffffffffffff161461201e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201590613ed6565b60405180910390fd5b80600a908051906020019061203492919061333c565b5050565b60145481565b61204661239e565b73ffffffffffffffffffffffffffffffffffffffff166120646114ae565b73ffffffffffffffffffffffffffffffffffffffff16146120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190613ed6565b60405180910390fd5b80600e8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61216061239e565b73ffffffffffffffffffffffffffffffffffffffff1661217e6114ae565b73ffffffffffffffffffffffffffffffffffffffff16146121d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cb90613ed6565b60405180910390fd5b80600b90805190602001906121ea92919061333c565b5050565b6121f661239e565b73ffffffffffffffffffffffffffffffffffffffff166122146114ae565b73ffffffffffffffffffffffffffffffffffffffff161461226a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226190613ed6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d190613dd6565b60405180910390fd5b6122e381612b32565b50565b60156020528060005260406000206000915090505481565b600d5481565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061246382612998565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661248a61239e565b73ffffffffffffffffffffffffffffffffffffffff1614806124e657506124af61239e565b73ffffffffffffffffffffffffffffffffffffffff166124ce84610ba8565b73ffffffffffffffffffffffffffffffffffffffff16145b80612502575061250182600001516124fc61239e565b6120c4565b5b905080612544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253b90613f36565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146125b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ad90613eb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261d90613e36565b60405180910390fd5b6126338585856001612fa0565b61264360008484600001516123a6565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129285761288781612391565b156129275782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129918585856001612fa6565b5050505050565b6129a06133c2565b6129a982612391565b6129e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129df90613df6565b60405180910390fd5b60008290505b60008110612af1576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ae2578092505050612b2d565b508080600190039150506129ee565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2490614016565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c12828260405180602001604052806000815250612fac565b5050565b6000612c378473ffffffffffffffffffffffffffffffffffffffff16612304565b15612da0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c6061239e565b8786866040518563ffffffff1660e01b8152600401612c829493929190613ced565b602060405180830381600087803b158015612c9c57600080fd5b505af1925050508015612ccd57506040513d601f19601f82011682018060405250810190612cca9190613752565b60015b612d50573d8060008114612cfd576040519150601f19603f3d011682016040523d82523d6000602084013e612d02565b606091505b50600081511415612d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3f90613f76565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612da5565b600190505b949350505050565b606060098054612dbc90614326565b80601f0160208091040260200160405190810160405280929190818152602001828054612de890614326565b8015612e355780601f10612e0a57610100808354040283529160200191612e35565b820191906000526020600020905b815481529060010190602001808311612e1857829003601f168201915b5050505050905090565b60606000821415612e87576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f9b565b600082905060005b60008214612eb9578080612ea290614389565b915050600a82612eb291906141b1565b9150612e8f565b60008167ffffffffffffffff811115612ed557612ed46144bf565b5b6040519080825280601f01601f191660200182016040528015612f075781602001600182028036833780820191505090505b5090505b60008514612f9457600182612f20919061423c565b9150600a85612f2f91906143d2565b6030612f3b919061415b565b60f81b818381518110612f5157612f50614490565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f8d91906141b1565b9450612f0b565b8093505050505b919050565b50505050565b50505050565b612fb98383836001612fbe565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302b90613f96565b60405180910390fd5b6000841415613078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306f90613fb6565b60405180910390fd5b6130856000868387612fa0565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561331f57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561330a576132ca6000888488612c16565b613309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330090613f76565b60405180910390fd5b5b81806001019250508080600101915050613253565b5080600081905550506133356000868387612fa6565b5050505050565b82805461334890614326565b90600052602060002090601f01602090048101928261336a57600085556133b1565b82601f1061338357805160ff19168380011785556133b1565b828001600101855582156133b1579182015b828111156133b0578251825591602001919060010190613395565b5b5090506133be91906133fc565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156134155760008160009055506001016133fd565b5090565b600061342c61342784614096565b614071565b905082815260208101848484011115613448576134476144f3565b5b6134538482856142e4565b509392505050565b600061346e613469846140c7565b614071565b90508281526020810184848401111561348a576134896144f3565b5b6134958482856142e4565b509392505050565b6000813590506134ac81614b4b565b92915050565b6000813590506134c181614b62565b92915050565b6000813590506134d681614b79565b92915050565b6000815190506134eb81614b79565b92915050565b600082601f830112613506576135056144ee565b5b8135613516848260208601613419565b91505092915050565b600082601f830112613534576135336144ee565b5b813561354484826020860161345b565b91505092915050565b60008135905061355c81614b90565b92915050565b600060208284031215613578576135776144fd565b5b60006135868482850161349d565b91505092915050565b600080604083850312156135a6576135a56144fd565b5b60006135b48582860161349d565b92505060206135c58582860161349d565b9150509250929050565b6000806000606084860312156135e8576135e76144fd565b5b60006135f68682870161349d565b93505060206136078682870161349d565b92505060406136188682870161354d565b9150509250925092565b6000806000806080858703121561363c5761363b6144fd565b5b600061364a8782880161349d565b945050602061365b8782880161349d565b935050604061366c8782880161354d565b925050606085013567ffffffffffffffff81111561368d5761368c6144f8565b5b613699878288016134f1565b91505092959194509250565b600080604083850312156136bc576136bb6144fd565b5b60006136ca8582860161349d565b92505060206136db858286016134b2565b9150509250929050565b600080604083850312156136fc576136fb6144fd565b5b600061370a8582860161349d565b925050602061371b8582860161354d565b9150509250929050565b60006020828403121561373b5761373a6144fd565b5b6000613749848285016134c7565b91505092915050565b600060208284031215613768576137676144fd565b5b6000613776848285016134dc565b91505092915050565b600060208284031215613795576137946144fd565b5b600082013567ffffffffffffffff8111156137b3576137b26144f8565b5b6137bf8482850161351f565b91505092915050565b6000602082840312156137de576137dd6144fd565b5b60006137ec8482850161354d565b91505092915050565b6137fe81614270565b82525050565b61380d81614282565b82525050565b600061381e8261410d565b6138288185614123565b93506138388185602086016142f3565b61384181614502565b840191505092915050565b600061385782614118565b613861818561413f565b93506138718185602086016142f3565b61387a81614502565b840191505092915050565b600061389082614118565b61389a8185614150565b93506138aa8185602086016142f3565b80840191505092915050565b600081546138c381614326565b6138cd8186614150565b945060018216600081146138e857600181146138f95761392c565b60ff1983168652818601935061392c565b613902856140f8565b60005b8381101561392457815481890152600182019150602081019050613905565b838801955050505b50505092915050565b600061394260228361413f565b915061394d82614513565b604082019050919050565b600061396560148361413f565b915061397082614562565b602082019050919050565b600061398860078361413f565b91506139938261458b565b602082019050919050565b60006139ab60268361413f565b91506139b6826145b4565b604082019050919050565b60006139ce602a8361413f565b91506139d982614603565b604082019050919050565b60006139f160238361413f565b91506139fc82614652565b604082019050919050565b6000613a1460258361413f565b9150613a1f826146a1565b604082019050919050565b6000613a3760398361413f565b9150613a42826146f0565b604082019050919050565b6000613a5a602b8361413f565b9150613a658261473f565b604082019050919050565b6000613a7d60208361413f565b9150613a888261478e565b602082019050919050565b6000613aa060268361413f565b9150613aab826147b7565b604082019050919050565b6000613ac360208361413f565b9150613ace82614806565b602082019050919050565b6000613ae6602f8361413f565b9150613af18261482f565b604082019050919050565b6000613b09601a8361413f565b9150613b148261487e565b602082019050919050565b6000613b2c60328361413f565b9150613b37826148a7565b604082019050919050565b6000613b4f60228361413f565b9150613b5a826148f6565b604082019050919050565b6000613b72600083614134565b9150613b7d82614945565b600082019050919050565b6000613b9560338361413f565b9150613ba082614948565b604082019050919050565b6000613bb860218361413f565b9150613bc382614997565b604082019050919050565b6000613bdb60288361413f565b9150613be6826149e6565b604082019050919050565b6000613bfe60138361413f565b9150613c0982614a35565b602082019050919050565b6000613c21602e8361413f565b9150613c2c82614a5e565b604082019050919050565b6000613c44602f8361413f565b9150613c4f82614aad565b604082019050919050565b6000613c67602d8361413f565b9150613c7282614afc565b604082019050919050565b613c86816142da565b82525050565b6000613c988286613885565b9150613ca48285613885565b9150613cb082846138b6565b9150819050949350505050565b6000613cc882613b65565b9150819050919050565b6000602082019050613ce760008301846137f5565b92915050565b6000608082019050613d0260008301876137f5565b613d0f60208301866137f5565b613d1c6040830185613c7d565b8181036060830152613d2e8184613813565b905095945050505050565b6000602082019050613d4e6000830184613804565b92915050565b60006020820190508181036000830152613d6e818461384c565b905092915050565b60006020820190508181036000830152613d8f81613935565b9050919050565b60006020820190508181036000830152613daf81613958565b9050919050565b60006020820190508181036000830152613dcf8161397b565b9050919050565b60006020820190508181036000830152613def8161399e565b9050919050565b60006020820190508181036000830152613e0f816139c1565b9050919050565b60006020820190508181036000830152613e2f816139e4565b9050919050565b60006020820190508181036000830152613e4f81613a07565b9050919050565b60006020820190508181036000830152613e6f81613a2a565b9050919050565b60006020820190508181036000830152613e8f81613a4d565b9050919050565b60006020820190508181036000830152613eaf81613a70565b9050919050565b60006020820190508181036000830152613ecf81613a93565b9050919050565b60006020820190508181036000830152613eef81613ab6565b9050919050565b60006020820190508181036000830152613f0f81613ad9565b9050919050565b60006020820190508181036000830152613f2f81613afc565b9050919050565b60006020820190508181036000830152613f4f81613b1f565b9050919050565b60006020820190508181036000830152613f6f81613b42565b9050919050565b60006020820190508181036000830152613f8f81613b88565b9050919050565b60006020820190508181036000830152613faf81613bab565b9050919050565b60006020820190508181036000830152613fcf81613bce565b9050919050565b60006020820190508181036000830152613fef81613bf1565b9050919050565b6000602082019050818103600083015261400f81613c14565b9050919050565b6000602082019050818103600083015261402f81613c37565b9050919050565b6000602082019050818103600083015261404f81613c5a565b9050919050565b600060208201905061406b6000830184613c7d565b92915050565b600061407b61408c565b90506140878282614358565b919050565b6000604051905090565b600067ffffffffffffffff8211156140b1576140b06144bf565b5b6140ba82614502565b9050602081019050919050565b600067ffffffffffffffff8211156140e2576140e16144bf565b5b6140eb82614502565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614166826142da565b9150614171836142da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141a6576141a5614403565b5b828201905092915050565b60006141bc826142da565b91506141c7836142da565b9250826141d7576141d6614432565b5b828204905092915050565b60006141ed826142da565b91506141f8836142da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561423157614230614403565b5b828202905092915050565b6000614247826142da565b9150614252836142da565b92508282101561426557614264614403565b5b828203905092915050565b600061427b826142ba565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143115780820151818401526020810190506142f6565b83811115614320576000848401525b50505050565b6000600282049050600182168061433e57607f821691505b6020821081141561435257614351614461565b5b50919050565b61436182614502565b810181811067ffffffffffffffff821117156143805761437f6144bf565b5b80604052505050565b6000614394826142da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143c7576143c6614403565b5b600182019050919050565b60006143dd826142da565b91506143e8836142da565b9250826143f8576143f7614432565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74206973206e6f74206c69766520796574000000000000000000000000600082015250565b7f4e6f206d6f726500000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f506c656173652073656e64207468652065786163742045544820616d6f756e74600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614b5481614270565b8114614b5f57600080fd5b50565b614b6b81614282565b8114614b7657600080fd5b50565b614b828161428e565b8114614b8d57600080fd5b50565b614b99816142da565b8114614ba457600080fd5b5056fea264697066735822122074ba347c93fba31011a13e5438cea90a6857fe41681b2146a7454ad6ba5debb564736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000b5468652043686f73656e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000643484f53454e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d53437975594658444538316631646a4243756d484263466231413955686e7636437a767435344442756e34342f00000000000000000000000000000000000000000000000000000000000000000000000000000000000a54686543686f73656e7300000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): The Chosens
Arg [1] : _symbol (string): CHOSEN
Arg [2] : _initBaseURI (string): ipfs://QmSCyuYFXDE81f1djBCumHBcFb1A9Uhnv6Czvt54DBun44/
Arg [3] : _initNotRevealedUri (string): TheChosens
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [5] : 5468652043686f73656e73000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 43484f53454e0000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d53437975594658444538316631646a4243756d48426346
Arg [10] : 6231413955686e7636437a767435344442756e34342f00000000000000000000
Arg [11] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [12] : 54686543686f73656e7300000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46882:4096:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26563:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28449:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30011:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47055:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29532:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24820:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30887:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25484:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47210:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47336:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50515:192;;;:::i;:::-;;31120:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24997:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47090:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50401:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49383:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40733:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28258:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46988:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26999:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43550:94;;;;;;;;;;;;;:::i;:::-;;42899:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50303:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28618:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47255:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47866:1393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30297:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50226:69;;;;;;;;;;;;;:::i;:::-;;49502:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31368:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47016:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47168:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49716:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47387:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47297:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50715:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47425:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49602:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30656:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50847:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43799:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47467:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47124:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26563:372;26665:4;26717:25;26702:40;;;:11;:40;;;;:105;;;;26774:33;26759:48;;;:11;:48;;;;26702:105;:172;;;;26839:35;26824:50;;;:11;:50;;;;26702:172;:225;;;;26891:36;26915:11;26891:23;:36::i;:::-;26702:225;26682:245;;26563:372;;;:::o;28449:100::-;28503:13;28536:5;28529:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28449:100;:::o;30011:214::-;30079:7;30107:16;30115:7;30107;:16::i;:::-;30099:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30193:15;:24;30209:7;30193:24;;;;;;;;;;;;;;;;;;;;;30186:31;;30011:214;;;:::o;47055:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29532:413::-;29605:13;29621:24;29637:7;29621:15;:24::i;:::-;29605:40;;29670:5;29664:11;;:2;:11;;;;29656:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29765:5;29749:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29774:37;29791:5;29798:12;:10;:12::i;:::-;29774:16;:37::i;:::-;29749:62;29727:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;29909:28;29918:2;29922:7;29931:5;29909:8;:28::i;:::-;29594:351;29532:413;;:::o;24820:100::-;24873:7;24900:12;;24893:19;;24820:100;:::o;30887:162::-;31013:28;31023:4;31029:2;31033:7;31013:9;:28::i;:::-;30887:162;;;:::o;25484:1007::-;25573:7;25609:16;25619:5;25609:9;:16::i;:::-;25601:5;:24;25593:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25675:22;25700:13;:11;:13::i;:::-;25675:38;;25724:19;25754:25;25943:9;25938:466;25958:14;25954:1;:18;25938:466;;;25998:31;26032:11;:14;26044:1;26032:14;;;;;;;;;;;25998:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26095:1;26069:28;;:9;:14;;;:28;;;26065:111;;26142:9;:14;;;26122:34;;26065:111;26219:5;26198:26;;:17;:26;;;26194:195;;;26268:5;26253:11;:20;26249:85;;;26309:1;26302:8;;;;;;;;;26249:85;26356:13;;;;;;;26194:195;25979:425;25974:3;;;;;;;25938:466;;;;26427:56;;;;;;;;;;:::i;:::-;;;;;;;;25484:1007;;;;;:::o;47210:38::-;;;;:::o;47336:44::-;;;;:::o;50515:192::-;43130:12;:10;:12::i;:::-;43119:23;;:7;:5;:7::i;:::-;:23;;;43111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50572:12:::1;50598:10;50590:24;;50636:21;50590:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50571:101;;;50691:7;50683:16;;;::::0;::::1;;50560:147;50515:192::o:0;31120:177::-;31250:39;31267:4;31273:2;31277:7;31250:39;;;;;;;;;;;;:16;:39::i;:::-;31120:177;;;:::o;24997:187::-;25064:7;25100:13;:11;:13::i;:::-;25092:5;:21;25084:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;25171:5;25164:12;;24997:187;;;:::o;47090:27::-;;;;;;;;;;;;;:::o;50401:104::-;43130:12;:10;:12::i;:::-;43119:23;;:7;:5;:7::i;:::-;:23;;;43111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50486:11:::1;50476:7;:21;;;;;;;;;;;;:::i;:::-;;50401:104:::0;:::o;49383:111::-;43130:12;:10;:12::i;:::-;43119:23;;:7;:5;:7::i;:::-;:23;;;43111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49473:13:::1;49461:9;:25;;;;49383:111:::0;:::o;40733:86::-;40780:4;40804:7;;;;;;;;;;;40797:14;;40733:86;:::o;28258:124::-;28322:7;28349:20;28361:7;28349:11;:20::i;:::-;:25;;;28342:32;;28258:124;;;:::o;46988:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26999:221::-;27063:7;27108:1;27091:19;;:5;:19;;;;27083:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27184:12;:19;27197:5;27184:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;27176:36;;27169:43;;26999:221;;;:::o;43550:94::-;43130:12;:10;:12::i;:::-;43119:23;;:7;:5;:7::i;:::-;:23;;;43111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43615:21:::1;43633:1;43615:9;:21::i;:::-;43550:94::o:0;42899:87::-;42945:7;42972:6;;;;;;;;;;;42965:13;;42899:87;:::o;50303:86::-;43130:12;:10;:12::i;:::-;43119:23;;:7;:5;:7::i;:::-;:23;;;43111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50375:6:::1;50367:5;:14;;;;50303:86:::0;:::o;28618:104::-;28674:13;28707:7;28700:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28618:104;:::o;47255:35::-;;;;:::o;47866:1393::-;47923:12;47938:5;;47923:20;;47954:11;48008:1;47996:9;;:13;;;;:::i;:::-;47988:5;47970:15;;:23;;;;:::i;:::-;:39;47969:102;;;;;48060:10;;48028:17;:29;48046:10;48028:29;;;;;;;;;;;;;;;;:42;47969:102;47954:118;;48089:6;48085:1126;;;48121:11;;;;;;;;;;;48113:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;48205:9;;48196:5;48180:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:34;;48172:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;48258:8;;48249:5;:17;;48241:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;48331:17;:29;48349:10;48331:29;;;;;;;;;;;;;;;;48318:10;;:42;;;;:::i;:::-;48308:5;:53;48305:608;;48478:4;48445:17;:29;48463:10;48445:29;;;;;;;;;;;;;;;;48432:10;;:42;;;;:::i;:::-;48431:51;;;;:::i;:::-;48422:4;48414:5;:12;;;;:::i;:::-;48413:70;;;;:::i;:::-;48400:9;:83;;48392:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;48568:10;;48536:17;:29;48554:10;48536:29;;;;;;;;;;;;;;;:42;;;;48613:10;;48594:15;;:29;;;;;;;:::i;:::-;;;;;;;;48305:608;;;48683:17;:29;48701:10;48683:29;;;;;;;;;;;;;;;;48670:10;;:42;;;;:::i;:::-;48661:5;:52;48658:255;;;48765:1;48752:9;:14;;48744:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;48852:5;48819:17;:29;48837:10;48819:29;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;48892:5;48873:15;;:24;;;;;;;:::i;:::-;;;;;;;;48658:255;48305:608;48085:1126;;;48957:11;;;;;;;;;;;48949:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;49033:4;49025:5;:12;;;;:::i;:::-;49012:9;:25;;49004:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;49118:9;;49109:5;49093:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:34;;49085:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;49167:8;;49158:5;:17;;49150:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;48085:1126;49223:28;49233:10;49245:5;49223:9;:28::i;:::-;47912:1347;;47866:1393;:::o;30297:288::-;30404:12;:10;:12::i;:::-;30392:24;;:8;:24;;;;30384:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30505:8;30460:18;:32;30479:12;:10;:12::i;:::-;30460:32;;;;;;;;;;;;;;;:42;30493:8;30460:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;30558:8;30529:48;;30544:12;:10;:12::i;:::-;30529:48;;;30568:8;30529:48;;;;;;:::i;:::-;;;;;;;;30297:288;;:::o;50226:69::-;43130:12;:10;:12::i;:::-;43119:23;;:7;:5;:7::i;:::-;:23;;;43111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50283:4:::1;50272:8;;:15;;;;;;;;;;;;;;;;;;50226:69::o:0;49502:92::-;49551:7;49576:10;;49569:17;;49502:92;:::o;31368:355::-;31527:28;31537:4;31543:2;31547:7;31527:9;:28::i;:::-;31588:48;31611:4;31617:2;31621:7;31630:5;31588:22;:48::i;:::-;31566:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;31368:355;;;;:::o;47016:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47168:35::-;;;;:::o;49716:500::-;49814:13;49856:16;49864:7;49856;:16::i;:::-;49840:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;49965:5;49953:17;;:8;;;;;;;;;;;:17;;;49950:62;;;49990:14;49983:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49950:62;50020:28;50051:10;:8;:10::i;:::-;50020:41;;50106:1;50081:14;50075:28;:32;:133;;;;;;;;;;;;;;;;;50143:14;50159:18;:7;:16;:18::i;:::-;50179:13;50126:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50075:133;50068:140;;;49716:500;;;;:::o;47387:31::-;;;;;;;;;;;;;:::o;47297:32::-;;;;:::o;50715:122::-;43130:12;:10;:12::i;:::-;43119:23;;:7;:5;:7::i;:::-;:23;;;43111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50814:17:::1;50798:13;:33;;;;;;;;;;;;:::i;:::-;;50715:122:::0;:::o;47425:33::-;;;;:::o;49602:106::-;43130:12;:10;:12::i;:::-;43119:23;;:7;:5;:7::i;:::-;:23;;;43111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49689:11:::1;49676:10;:24;;;;49602:106:::0;:::o;30656:164::-;30753:4;30777:18;:25;30796:5;30777:25;;;;;;;;;;;;;;;:35;30803:8;30777:35;;;;;;;;;;;;;;;;;;;;;;;;;30770:42;;30656:164;;;;:::o;50847:120::-;43130:12;:10;:12::i;:::-;43119:23;;:7;:5;:7::i;:::-;:23;;;43111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50946:15:::1;50929:14;:32;;;;;;;;;;;;:::i;:::-;;50847:120:::0;:::o;43799:229::-;43130:12;:10;:12::i;:::-;43119:23;;:7;:5;:7::i;:::-;:23;;;43111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43922:1:::1;43902:22;;:8;:22;;;;43880:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;44001:19;44011:8;44001:9;:19::i;:::-;43799:229:::0;:::o;47467:52::-;;;;;;;;;;;;;;;;;:::o;47124:37::-;;;;:::o;5977:326::-;6037:4;6294:1;6272:7;:19;;;:23;6265:30;;5977:326;;;:::o;16083:157::-;16168:4;16207:25;16192:40;;;:11;:40;;;;16185:47;;16083:157;;;:::o;31978:111::-;32035:4;32069:12;;32059:7;:22;32052:29;;31978:111;;;:::o;4530:98::-;4583:7;4610:10;4603:17;;4530:98;:::o;36898:196::-;37040:2;37013:15;:24;37029:7;37013:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37078:7;37074:2;37058:28;;37067:5;37058:28;;;;;;;;;;;;36898:196;;;:::o;34778:2002::-;34893:35;34931:20;34943:7;34931:11;:20::i;:::-;34893:58;;34964:22;35006:13;:18;;;34990:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;35065:12;:10;:12::i;:::-;35041:36;;:20;35053:7;35041:11;:20::i;:::-;:36;;;34990:87;:154;;;;35094:50;35111:13;:18;;;35131:12;:10;:12::i;:::-;35094:16;:50::i;:::-;34990:154;34964:181;;35166:17;35158:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;35281:4;35259:26;;:13;:18;;;:26;;;35251:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;35361:1;35347:16;;:2;:16;;;;35339:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35418:43;35440:4;35446:2;35450:7;35459:1;35418:21;:43::i;:::-;35526:49;35543:1;35547:7;35556:13;:18;;;35526:8;:49::i;:::-;35901:1;35871:12;:18;35884:4;35871:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35945:1;35917:12;:16;35930:2;35917:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35991:2;35963:11;:20;35975:7;35963:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;36053:15;36008:11;:20;36020:7;36008:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;36321:19;36353:1;36343:7;:11;36321:33;;36414:1;36373:43;;:11;:24;36385:11;36373:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;36369:295;;;36441:20;36449:11;36441:7;:20::i;:::-;36437:212;;;36518:13;:18;;;36486:11;:24;36498:11;36486:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;36601:13;:28;;;36559:11;:24;36571:11;36559:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;36437:212;36369:295;35846:829;36711:7;36707:2;36692:27;;36701:4;36692:27;;;;;;;;;;;;36730:42;36751:4;36757:2;36761:7;36770:1;36730:20;:42::i;:::-;34882:1898;;34778:2002;;;:::o;27659:537::-;27720:21;;:::i;:::-;27762:16;27770:7;27762;:16::i;:::-;27754:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27868:12;27883:7;27868:22;;27863:245;27900:1;27892:4;:9;27863:245;;27930:31;27964:11;:17;27976:4;27964:17;;;;;;;;;;;27930:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28030:1;28004:28;;:9;:14;;;:28;;;28000:93;;28064:9;28057:16;;;;;;28000:93;27911:197;27903:6;;;;;;;;27863:245;;;;28131:57;;;;;;;;;;:::i;:::-;;;;;;;;27659:537;;;;:::o;44036:173::-;44092:16;44111:6;;;;;;;;;;;44092:25;;44137:8;44128:6;;:17;;;;;;;;;;;;;;;;;;44192:8;44161:40;;44182:8;44161:40;;;;;;;;;;;;44081:128;44036:173;:::o;32097:104::-;32166:27;32176:2;32180:8;32166:27;;;;;;;;;;;;:9;:27::i;:::-;32097:104;;:::o;37659:804::-;37814:4;37835:15;:2;:13;;;:15::i;:::-;37831:625;;;37887:2;37871:36;;;37908:12;:10;:12::i;:::-;37922:4;37928:7;37937:5;37871:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37867:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38134:1;38117:6;:13;:18;38113:273;;;38160:61;;;;;;;;;;:::i;:::-;;;;;;;;38113:273;38336:6;38330:13;38321:6;38317:2;38313:15;38306:38;37867:534;38004:45;;;37994:55;;;:6;:55;;;;37987:62;;;;;37831:625;38440:4;38433:11;;37659:804;;;;;;;:::o;49267:108::-;49327:13;49360:7;49353:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49267:108;:::o;2092:723::-;2148:13;2378:1;2369:5;:10;2365:53;;;2396:10;;;;;;;;;;;;;;;;;;;;;2365:53;2428:12;2443:5;2428:20;;2459:14;2484:78;2499:1;2491:4;:9;2484:78;;2517:8;;;;;:::i;:::-;;;;2548:2;2540:10;;;;;:::i;:::-;;;2484:78;;;2572:19;2604:6;2594:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2572:39;;2622:154;2638:1;2629:5;:10;2622:154;;2666:1;2656:11;;;;;:::i;:::-;;;2733:2;2725:5;:10;;;;:::i;:::-;2712:2;:24;;;;:::i;:::-;2699:39;;2682:6;2689;2682:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2762:2;2753:11;;;;;:::i;:::-;;;2622:154;;;2800:6;2786:21;;;;;2092:723;;;;:::o;38951:159::-;;;;;:::o;39522:158::-;;;;;:::o;32564:163::-;32687:32;32693:2;32697:8;32707:5;32714:4;32687:5;:32::i;:::-;32564:163;;;:::o;32986:1538::-;33125:20;33148:12;;33125:35;;33193:1;33179:16;;:2;:16;;;;33171:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33264:1;33252:8;:13;;33244:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33323:61;33353:1;33357:2;33361:12;33375:8;33323:21;:61::i;:::-;33698:8;33662:12;:16;33675:2;33662:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33763:8;33722:12;:16;33735:2;33722:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33822:2;33789:11;:25;33801:12;33789:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;33889:15;33839:11;:25;33851:12;33839:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;33922:20;33945:12;33922:35;;33979:9;33974:415;33994:8;33990:1;:12;33974:415;;;34058:12;34054:2;34033:38;;34050:1;34033:38;;;;;;;;;;;;34094:4;34090:249;;;34157:59;34188:1;34192:2;34196:12;34210:5;34157:22;:59::i;:::-;34123:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;34090:249;34359:14;;;;;;;34004:3;;;;;;;33974:415;;;;34420:12;34405;:27;;;;33637:807;34456:60;34485:1;34489:2;34493:12;34507:8;34456:20;:60::i;:::-;33114:1410;32986:1538;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7282:109;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;7397:360;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;7763:364;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;8133:377;;;;:::o;8540:845::-;8643:3;8680:5;8674:12;8709:36;8735:9;8709:36;:::i;:::-;8761:89;8843:6;8838:3;8761:89;:::i;:::-;8754:96;;8881:1;8870:9;8866:17;8897:1;8892:137;;;;9043:1;9038:341;;;;8859:520;;8892:137;8976:4;8972:9;8961;8957:25;8952:3;8945:38;9012:6;9007:3;9003:16;8996:23;;8892:137;;9038:341;9105:38;9137:5;9105:38;:::i;:::-;9165:1;9179:154;9193:6;9190:1;9187:13;9179:154;;;9267:7;9261:14;9257:1;9252:3;9248:11;9241:35;9317:1;9308:7;9304:15;9293:26;;9215:4;9212:1;9208:12;9203:17;;9179:154;;;9362:6;9357:3;9353:16;9346:23;;9045:334;;8859:520;;8647:738;;8540:845;;;;:::o;9391:366::-;9533:3;9554:67;9618:2;9613:3;9554:67;:::i;:::-;9547:74;;9630:93;9719:3;9630:93;:::i;:::-;9748:2;9743:3;9739:12;9732:19;;9391:366;;;:::o;9763:::-;9905:3;9926:67;9990:2;9985:3;9926:67;:::i;:::-;9919:74;;10002:93;10091:3;10002:93;:::i;:::-;10120:2;10115:3;10111:12;10104:19;;9763:366;;;:::o;10135:365::-;10277:3;10298:66;10362:1;10357:3;10298:66;:::i;:::-;10291:73;;10373:93;10462:3;10373:93;:::i;:::-;10491:2;10486:3;10482:12;10475:19;;10135:365;;;:::o;10506:366::-;10648:3;10669:67;10733:2;10728:3;10669:67;:::i;:::-;10662:74;;10745:93;10834:3;10745:93;:::i;:::-;10863:2;10858:3;10854:12;10847:19;;10506:366;;;:::o;10878:::-;11020:3;11041:67;11105:2;11100:3;11041:67;:::i;:::-;11034:74;;11117:93;11206:3;11117:93;:::i;:::-;11235:2;11230:3;11226:12;11219:19;;10878:366;;;:::o;11250:::-;11392:3;11413:67;11477:2;11472:3;11413:67;:::i;:::-;11406:74;;11489:93;11578:3;11489:93;:::i;:::-;11607:2;11602:3;11598:12;11591:19;;11250:366;;;:::o;11622:::-;11764:3;11785:67;11849:2;11844:3;11785:67;:::i;:::-;11778:74;;11861:93;11950:3;11861:93;:::i;:::-;11979:2;11974:3;11970:12;11963:19;;11622:366;;;:::o;11994:::-;12136:3;12157:67;12221:2;12216:3;12157:67;:::i;:::-;12150:74;;12233:93;12322:3;12233:93;:::i;:::-;12351:2;12346:3;12342:12;12335:19;;11994:366;;;:::o;12366:::-;12508:3;12529:67;12593:2;12588:3;12529:67;:::i;:::-;12522:74;;12605:93;12694:3;12605:93;:::i;:::-;12723:2;12718:3;12714:12;12707:19;;12366:366;;;:::o;12738:::-;12880:3;12901:67;12965:2;12960:3;12901:67;:::i;:::-;12894:74;;12977:93;13066:3;12977:93;:::i;:::-;13095:2;13090:3;13086:12;13079:19;;12738:366;;;:::o;13110:::-;13252:3;13273:67;13337:2;13332:3;13273:67;:::i;:::-;13266:74;;13349:93;13438:3;13349:93;:::i;:::-;13467:2;13462:3;13458:12;13451:19;;13110:366;;;:::o;13482:::-;13624:3;13645:67;13709:2;13704:3;13645:67;:::i;:::-;13638:74;;13721:93;13810:3;13721:93;:::i;:::-;13839:2;13834:3;13830:12;13823:19;;13482:366;;;:::o;13854:::-;13996:3;14017:67;14081:2;14076:3;14017:67;:::i;:::-;14010:74;;14093:93;14182:3;14093:93;:::i;:::-;14211:2;14206:3;14202:12;14195:19;;13854:366;;;:::o;14226:::-;14368:3;14389:67;14453:2;14448:3;14389:67;:::i;:::-;14382:74;;14465:93;14554:3;14465:93;:::i;:::-;14583:2;14578:3;14574:12;14567:19;;14226:366;;;:::o;14598:::-;14740:3;14761:67;14825:2;14820:3;14761:67;:::i;:::-;14754:74;;14837:93;14926:3;14837:93;:::i;:::-;14955:2;14950:3;14946:12;14939:19;;14598:366;;;:::o;14970:::-;15112:3;15133:67;15197:2;15192:3;15133:67;:::i;:::-;15126:74;;15209:93;15298:3;15209:93;:::i;:::-;15327:2;15322:3;15318:12;15311:19;;14970:366;;;:::o;15342:398::-;15501:3;15522:83;15603:1;15598:3;15522:83;:::i;:::-;15515:90;;15614:93;15703:3;15614:93;:::i;:::-;15732:1;15727:3;15723:11;15716:18;;15342:398;;;:::o;15746:366::-;15888:3;15909:67;15973:2;15968:3;15909:67;:::i;:::-;15902:74;;15985:93;16074:3;15985:93;:::i;:::-;16103:2;16098:3;16094:12;16087:19;;15746:366;;;:::o;16118:::-;16260:3;16281:67;16345:2;16340:3;16281:67;:::i;:::-;16274:74;;16357:93;16446:3;16357:93;:::i;:::-;16475:2;16470:3;16466:12;16459:19;;16118:366;;;:::o;16490:::-;16632:3;16653:67;16717:2;16712:3;16653:67;:::i;:::-;16646:74;;16729:93;16818:3;16729:93;:::i;:::-;16847:2;16842:3;16838:12;16831:19;;16490:366;;;:::o;16862:::-;17004:3;17025:67;17089:2;17084:3;17025:67;:::i;:::-;17018:74;;17101:93;17190:3;17101:93;:::i;:::-;17219:2;17214:3;17210:12;17203:19;;16862:366;;;:::o;17234:::-;17376:3;17397:67;17461:2;17456:3;17397:67;:::i;:::-;17390:74;;17473:93;17562:3;17473:93;:::i;:::-;17591:2;17586:3;17582:12;17575:19;;17234:366;;;:::o;17606:::-;17748:3;17769:67;17833:2;17828:3;17769:67;:::i;:::-;17762:74;;17845:93;17934:3;17845:93;:::i;:::-;17963:2;17958:3;17954:12;17947:19;;17606:366;;;:::o;17978:::-;18120:3;18141:67;18205:2;18200:3;18141:67;:::i;:::-;18134:74;;18217:93;18306:3;18217:93;:::i;:::-;18335:2;18330:3;18326:12;18319:19;;17978:366;;;:::o;18350:118::-;18437:24;18455:5;18437:24;:::i;:::-;18432:3;18425:37;18350:118;;:::o;18474:589::-;18699:3;18721:95;18812:3;18803:6;18721:95;:::i;:::-;18714:102;;18833:95;18924:3;18915:6;18833:95;:::i;:::-;18826:102;;18945:92;19033:3;19024:6;18945:92;:::i;:::-;18938:99;;19054:3;19047:10;;18474:589;;;;;;:::o;19069:379::-;19253:3;19275:147;19418:3;19275:147;:::i;:::-;19268:154;;19439:3;19432:10;;19069:379;;;:::o;19454:222::-;19547:4;19585:2;19574:9;19570:18;19562:26;;19598:71;19666:1;19655:9;19651:17;19642:6;19598:71;:::i;:::-;19454:222;;;;:::o;19682:640::-;19877:4;19915:3;19904:9;19900:19;19892:27;;19929:71;19997:1;19986:9;19982:17;19973:6;19929:71;:::i;:::-;20010:72;20078:2;20067:9;20063:18;20054:6;20010:72;:::i;:::-;20092;20160:2;20149:9;20145:18;20136:6;20092:72;:::i;:::-;20211:9;20205:4;20201:20;20196:2;20185:9;20181:18;20174:48;20239:76;20310:4;20301:6;20239:76;:::i;:::-;20231:84;;19682:640;;;;;;;:::o;20328:210::-;20415:4;20453:2;20442:9;20438:18;20430:26;;20466:65;20528:1;20517:9;20513:17;20504:6;20466:65;:::i;:::-;20328:210;;;;:::o;20544:313::-;20657:4;20695:2;20684:9;20680:18;20672:26;;20744:9;20738:4;20734:20;20730:1;20719:9;20715:17;20708:47;20772:78;20845:4;20836:6;20772:78;:::i;:::-;20764:86;;20544:313;;;;:::o;20863:419::-;21029:4;21067:2;21056:9;21052:18;21044:26;;21116:9;21110:4;21106:20;21102:1;21091:9;21087:17;21080:47;21144:131;21270:4;21144:131;:::i;:::-;21136:139;;20863:419;;;:::o;21288:::-;21454:4;21492:2;21481:9;21477:18;21469:26;;21541:9;21535:4;21531:20;21527:1;21516:9;21512:17;21505:47;21569:131;21695:4;21569:131;:::i;:::-;21561:139;;21288:419;;;:::o;21713:::-;21879:4;21917:2;21906:9;21902:18;21894:26;;21966:9;21960:4;21956:20;21952:1;21941:9;21937:17;21930:47;21994:131;22120:4;21994:131;:::i;:::-;21986:139;;21713:419;;;:::o;22138:::-;22304:4;22342:2;22331:9;22327:18;22319:26;;22391:9;22385:4;22381:20;22377:1;22366:9;22362:17;22355:47;22419:131;22545:4;22419:131;:::i;:::-;22411:139;;22138:419;;;:::o;22563:::-;22729:4;22767:2;22756:9;22752:18;22744:26;;22816:9;22810:4;22806:20;22802:1;22791:9;22787:17;22780:47;22844:131;22970:4;22844:131;:::i;:::-;22836:139;;22563:419;;;:::o;22988:::-;23154:4;23192:2;23181:9;23177:18;23169:26;;23241:9;23235:4;23231:20;23227:1;23216:9;23212:17;23205:47;23269:131;23395:4;23269:131;:::i;:::-;23261:139;;22988:419;;;:::o;23413:::-;23579:4;23617:2;23606:9;23602:18;23594:26;;23666:9;23660:4;23656:20;23652:1;23641:9;23637:17;23630:47;23694:131;23820:4;23694:131;:::i;:::-;23686:139;;23413:419;;;:::o;23838:::-;24004:4;24042:2;24031:9;24027:18;24019:26;;24091:9;24085:4;24081:20;24077:1;24066:9;24062:17;24055:47;24119:131;24245:4;24119:131;:::i;:::-;24111:139;;23838:419;;;:::o;24263:::-;24429:4;24467:2;24456:9;24452:18;24444:26;;24516:9;24510:4;24506:20;24502:1;24491:9;24487:17;24480:47;24544:131;24670:4;24544:131;:::i;:::-;24536:139;;24263:419;;;:::o;24688:::-;24854:4;24892:2;24881:9;24877:18;24869:26;;24941:9;24935:4;24931:20;24927:1;24916:9;24912:17;24905:47;24969:131;25095:4;24969:131;:::i;:::-;24961:139;;24688:419;;;:::o;25113:::-;25279:4;25317:2;25306:9;25302:18;25294:26;;25366:9;25360:4;25356:20;25352:1;25341:9;25337:17;25330:47;25394:131;25520:4;25394:131;:::i;:::-;25386:139;;25113:419;;;:::o;25538:::-;25704:4;25742:2;25731:9;25727:18;25719:26;;25791:9;25785:4;25781:20;25777:1;25766:9;25762:17;25755:47;25819:131;25945:4;25819:131;:::i;:::-;25811:139;;25538:419;;;:::o;25963:::-;26129:4;26167:2;26156:9;26152:18;26144:26;;26216:9;26210:4;26206:20;26202:1;26191:9;26187:17;26180:47;26244:131;26370:4;26244:131;:::i;:::-;26236:139;;25963:419;;;:::o;26388:::-;26554:4;26592:2;26581:9;26577:18;26569:26;;26641:9;26635:4;26631:20;26627:1;26616:9;26612:17;26605:47;26669:131;26795:4;26669:131;:::i;:::-;26661:139;;26388:419;;;:::o;26813:::-;26979:4;27017:2;27006:9;27002:18;26994:26;;27066:9;27060:4;27056:20;27052:1;27041:9;27037:17;27030:47;27094:131;27220:4;27094:131;:::i;:::-;27086:139;;26813:419;;;:::o;27238:::-;27404:4;27442:2;27431:9;27427:18;27419:26;;27491:9;27485:4;27481:20;27477:1;27466:9;27462:17;27455:47;27519:131;27645:4;27519:131;:::i;:::-;27511:139;;27238:419;;;:::o;27663:::-;27829:4;27867:2;27856:9;27852:18;27844:26;;27916:9;27910:4;27906:20;27902:1;27891:9;27887:17;27880:47;27944:131;28070:4;27944:131;:::i;:::-;27936:139;;27663:419;;;:::o;28088:::-;28254:4;28292:2;28281:9;28277:18;28269:26;;28341:9;28335:4;28331:20;28327:1;28316:9;28312:17;28305:47;28369:131;28495:4;28369:131;:::i;:::-;28361:139;;28088:419;;;:::o;28513:::-;28679:4;28717:2;28706:9;28702:18;28694:26;;28766:9;28760:4;28756:20;28752:1;28741:9;28737:17;28730:47;28794:131;28920:4;28794:131;:::i;:::-;28786:139;;28513:419;;;:::o;28938:::-;29104:4;29142:2;29131:9;29127:18;29119:26;;29191:9;29185:4;29181:20;29177:1;29166:9;29162:17;29155:47;29219:131;29345:4;29219:131;:::i;:::-;29211:139;;28938:419;;;:::o;29363:::-;29529:4;29567:2;29556:9;29552:18;29544:26;;29616:9;29610:4;29606:20;29602:1;29591:9;29587:17;29580:47;29644:131;29770:4;29644:131;:::i;:::-;29636:139;;29363:419;;;:::o;29788:::-;29954:4;29992:2;29981:9;29977:18;29969:26;;30041:9;30035:4;30031:20;30027:1;30016:9;30012:17;30005:47;30069:131;30195:4;30069:131;:::i;:::-;30061:139;;29788:419;;;:::o;30213:::-;30379:4;30417:2;30406:9;30402:18;30394:26;;30466:9;30460:4;30456:20;30452:1;30441:9;30437:17;30430:47;30494:131;30620:4;30494:131;:::i;:::-;30486:139;;30213:419;;;:::o;30638:222::-;30731:4;30769:2;30758:9;30754:18;30746:26;;30782:71;30850:1;30839:9;30835:17;30826:6;30782:71;:::i;:::-;30638:222;;;;:::o;30866:129::-;30900:6;30927:20;;:::i;:::-;30917:30;;30956:33;30984:4;30976:6;30956:33;:::i;:::-;30866:129;;;:::o;31001:75::-;31034:6;31067:2;31061:9;31051:19;;31001:75;:::o;31082:307::-;31143:4;31233:18;31225:6;31222:30;31219:56;;;31255:18;;:::i;:::-;31219:56;31293:29;31315:6;31293:29;:::i;:::-;31285:37;;31377:4;31371;31367:15;31359:23;;31082:307;;;:::o;31395:308::-;31457:4;31547:18;31539:6;31536:30;31533:56;;;31569:18;;:::i;:::-;31533:56;31607:29;31629:6;31607:29;:::i;:::-;31599:37;;31691:4;31685;31681:15;31673:23;;31395:308;;;:::o;31709:141::-;31758:4;31781:3;31773:11;;31804:3;31801:1;31794:14;31838:4;31835:1;31825:18;31817:26;;31709:141;;;:::o;31856:98::-;31907:6;31941:5;31935:12;31925:22;;31856:98;;;:::o;31960:99::-;32012:6;32046:5;32040:12;32030:22;;31960:99;;;:::o;32065:168::-;32148:11;32182:6;32177:3;32170:19;32222:4;32217:3;32213:14;32198:29;;32065:168;;;;:::o;32239:147::-;32340:11;32377:3;32362:18;;32239:147;;;;:::o;32392:169::-;32476:11;32510:6;32505:3;32498:19;32550:4;32545:3;32541:14;32526:29;;32392:169;;;;:::o;32567:148::-;32669:11;32706:3;32691:18;;32567:148;;;;:::o;32721:305::-;32761:3;32780:20;32798:1;32780:20;:::i;:::-;32775:25;;32814:20;32832:1;32814:20;:::i;:::-;32809:25;;32968:1;32900:66;32896:74;32893:1;32890:81;32887:107;;;32974:18;;:::i;:::-;32887:107;33018:1;33015;33011:9;33004:16;;32721:305;;;;:::o;33032:185::-;33072:1;33089:20;33107:1;33089:20;:::i;:::-;33084:25;;33123:20;33141:1;33123:20;:::i;:::-;33118:25;;33162:1;33152:35;;33167:18;;:::i;:::-;33152:35;33209:1;33206;33202:9;33197:14;;33032:185;;;;:::o;33223:348::-;33263:7;33286:20;33304:1;33286:20;:::i;:::-;33281:25;;33320:20;33338:1;33320:20;:::i;:::-;33315:25;;33508:1;33440:66;33436:74;33433:1;33430:81;33425:1;33418:9;33411:17;33407:105;33404:131;;;33515:18;;:::i;:::-;33404:131;33563:1;33560;33556:9;33545:20;;33223:348;;;;:::o;33577:191::-;33617:4;33637:20;33655:1;33637:20;:::i;:::-;33632:25;;33671:20;33689:1;33671:20;:::i;:::-;33666:25;;33710:1;33707;33704:8;33701:34;;;33715:18;;:::i;:::-;33701:34;33760:1;33757;33753:9;33745:17;;33577:191;;;;:::o;33774:96::-;33811:7;33840:24;33858:5;33840:24;:::i;:::-;33829:35;;33774:96;;;:::o;33876:90::-;33910:7;33953:5;33946:13;33939:21;33928:32;;33876:90;;;:::o;33972:149::-;34008:7;34048:66;34041:5;34037:78;34026:89;;33972:149;;;:::o;34127:126::-;34164:7;34204:42;34197:5;34193:54;34182:65;;34127:126;;;:::o;34259:77::-;34296:7;34325:5;34314:16;;34259:77;;;:::o;34342:154::-;34426:6;34421:3;34416;34403:30;34488:1;34479:6;34474:3;34470:16;34463:27;34342:154;;;:::o;34502:307::-;34570:1;34580:113;34594:6;34591:1;34588:13;34580:113;;;34679:1;34674:3;34670:11;34664:18;34660:1;34655:3;34651:11;34644:39;34616:2;34613:1;34609:10;34604:15;;34580:113;;;34711:6;34708:1;34705:13;34702:101;;;34791:1;34782:6;34777:3;34773:16;34766:27;34702:101;34551:258;34502:307;;;:::o;34815:320::-;34859:6;34896:1;34890:4;34886:12;34876:22;;34943:1;34937:4;34933:12;34964:18;34954:81;;35020:4;35012:6;35008:17;34998:27;;34954:81;35082:2;35074:6;35071:14;35051:18;35048:38;35045:84;;;35101:18;;:::i;:::-;35045:84;34866:269;34815:320;;;:::o;35141:281::-;35224:27;35246:4;35224:27;:::i;:::-;35216:6;35212:40;35354:6;35342:10;35339:22;35318:18;35306:10;35303:34;35300:62;35297:88;;;35365:18;;:::i;:::-;35297:88;35405:10;35401:2;35394:22;35184:238;35141:281;;:::o;35428:233::-;35467:3;35490:24;35508:5;35490:24;:::i;:::-;35481:33;;35536:66;35529:5;35526:77;35523:103;;;35606:18;;:::i;:::-;35523:103;35653:1;35646:5;35642:13;35635:20;;35428:233;;;:::o;35667:176::-;35699:1;35716:20;35734:1;35716:20;:::i;:::-;35711:25;;35750:20;35768:1;35750:20;:::i;:::-;35745:25;;35789:1;35779:35;;35794:18;;:::i;:::-;35779:35;35835:1;35832;35828:9;35823:14;;35667:176;;;;:::o;35849:180::-;35897:77;35894:1;35887:88;35994:4;35991:1;35984:15;36018:4;36015:1;36008:15;36035:180;36083:77;36080:1;36073:88;36180:4;36177:1;36170:15;36204:4;36201:1;36194:15;36221:180;36269:77;36266:1;36259:88;36366:4;36363:1;36356:15;36390:4;36387:1;36380:15;36407:180;36455:77;36452:1;36445:88;36552:4;36549:1;36542:15;36576:4;36573:1;36566:15;36593:180;36641:77;36638:1;36631:88;36738:4;36735:1;36728:15;36762:4;36759:1;36752:15;36779:117;36888:1;36885;36878:12;36902:117;37011:1;37008;37001:12;37025:117;37134:1;37131;37124:12;37148:117;37257:1;37254;37247:12;37271:102;37312:6;37363:2;37359:7;37354:2;37347:5;37343:14;37339:28;37329:38;;37271:102;;;:::o;37379:221::-;37519:34;37515:1;37507:6;37503:14;37496:58;37588:4;37583:2;37575:6;37571:15;37564:29;37379:221;:::o;37606:170::-;37746:22;37742:1;37734:6;37730:14;37723:46;37606:170;:::o;37782:157::-;37922:9;37918:1;37910:6;37906:14;37899:33;37782:157;:::o;37945:225::-;38085:34;38081:1;38073:6;38069:14;38062:58;38154:8;38149:2;38141:6;38137:15;38130:33;37945:225;:::o;38176:229::-;38316:34;38312:1;38304:6;38300:14;38293:58;38385:12;38380:2;38372:6;38368:15;38361:37;38176:229;:::o;38411:222::-;38551:34;38547:1;38539:6;38535:14;38528:58;38620:5;38615:2;38607:6;38603:15;38596:30;38411:222;:::o;38639:224::-;38779:34;38775:1;38767:6;38763:14;38756:58;38848:7;38843:2;38835:6;38831:15;38824:32;38639:224;:::o;38869:244::-;39009:34;39005:1;38997:6;38993:14;38986:58;39078:27;39073:2;39065:6;39061:15;39054:52;38869:244;:::o;39119:230::-;39259:34;39255:1;39247:6;39243:14;39236:58;39328:13;39323:2;39315:6;39311:15;39304:38;39119:230;:::o;39355:182::-;39495:34;39491:1;39483:6;39479:14;39472:58;39355:182;:::o;39543:225::-;39683:34;39679:1;39671:6;39667:14;39660:58;39752:8;39747:2;39739:6;39735:15;39728:33;39543:225;:::o;39774:182::-;39914:34;39910:1;39902:6;39898:14;39891:58;39774:182;:::o;39962:234::-;40102:34;40098:1;40090:6;40086:14;40079:58;40171:17;40166:2;40158:6;40154:15;40147:42;39962:234;:::o;40202:176::-;40342:28;40338:1;40330:6;40326:14;40319:52;40202:176;:::o;40384:237::-;40524:34;40520:1;40512:6;40508:14;40501:58;40593:20;40588:2;40580:6;40576:15;40569:45;40384:237;:::o;40627:221::-;40767:34;40763:1;40755:6;40751:14;40744:58;40836:4;40831:2;40823:6;40819:15;40812:29;40627:221;:::o;40854:114::-;;:::o;40974:238::-;41114:34;41110:1;41102:6;41098:14;41091:58;41183:21;41178:2;41170:6;41166:15;41159:46;40974:238;:::o;41218:220::-;41358:34;41354:1;41346:6;41342:14;41335:58;41427:3;41422:2;41414:6;41410:15;41403:28;41218:220;:::o;41444:227::-;41584:34;41580:1;41572:6;41568:14;41561:58;41653:10;41648:2;41640:6;41636:15;41629:35;41444:227;:::o;41677:169::-;41817:21;41813:1;41805:6;41801:14;41794:45;41677:169;:::o;41852:233::-;41992:34;41988:1;41980:6;41976:14;41969:58;42061:16;42056:2;42048:6;42044:15;42037:41;41852:233;:::o;42091:234::-;42231:34;42227:1;42219:6;42215:14;42208:58;42300:17;42295:2;42287:6;42283:15;42276:42;42091:234;:::o;42331:232::-;42471:34;42467:1;42459:6;42455:14;42448:58;42540:15;42535:2;42527:6;42523:15;42516:40;42331:232;:::o;42569:122::-;42642:24;42660:5;42642:24;:::i;:::-;42635:5;42632:35;42622:63;;42681:1;42678;42671:12;42622:63;42569:122;:::o;42697:116::-;42767:21;42782:5;42767:21;:::i;:::-;42760:5;42757:32;42747:60;;42803:1;42800;42793:12;42747:60;42697:116;:::o;42819:120::-;42891:23;42908:5;42891:23;:::i;:::-;42884:5;42881:34;42871:62;;42929:1;42926;42919:12;42871:62;42819:120;:::o;42945:122::-;43018:24;43036:5;43018:24;:::i;:::-;43011:5;43008:35;42998:63;;43057:1;43054;43047:12;42998:63;42945:122;:::o
Swarm Source
ipfs://74ba347c93fba31011a13e5438cea90a6857fe41681b2146a7454ad6ba5debb5
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.