Token Cat_Council
Overview CRC721
Total Supply:
486 CC
Holders:
36 addresses
Contract:
Balance
4 CC
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CatCouncil
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-10-01 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity >=0.7.0 <0.9.0; contract CatCouncil is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 150 ether; uint256 public maxSupply = 500; uint256 public maxMintAmount = 10; uint256 public nftPerAddressLimit = 1000; bool public paused = false; bool public revealed = true; bool public onlyWhitelisted = true; address[] public whitelistedAddresses; mapping(address => uint256) public addressMintedBalance; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { require(!paused, "Plese Wait for the council."); uint256 supply = totalSupply(); require(_mintAmount > 0, "How many do you want?"); require(_mintAmount <= maxMintAmount, "You party look full still want to mint them?"); require(supply + _mintAmount <= maxSupply, "You party look full still want to mint them?"); if (msg.sender != owner()) { if(onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "Do you have an Invite Card ?"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "You party look full still want to mint them?"); } require(msg.value >= cost * _mintAmount, "insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); } } function isWhitelisted(address _user) public view returns (bool) { for (uint i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } 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)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function withdraw() public payable onlyOwner { // This will payout the owner 95% of the contract balance. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } }
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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","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":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a91906200061b565b50680821ab0d4414980000600e556101f4600f55600a6010556103e86011556000601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff021916908315150217905550348015620000c757600080fd5b5060405162005ad138038062005ad18339818101604052810190620000ed919062000866565b838381600090816200010091906200061b565b5080600190816200011291906200061b565b50505062000135620001296200016160201b60201c565b6200016960201b60201c565b62000146826200022f60201b60201c565b6200015781620002d360201b60201c565b50505050620009d7565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200023f6200016160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002656200037760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b590620009b5565b60405180910390fd5b80600b9081620002cf91906200061b565b5050565b620002e36200016160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003096200037760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035990620009b5565b60405180910390fd5b80600d90816200037391906200061b565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200042357607f821691505b602082108103620004395762000438620003db565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000464565b620004af868362000464565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004fc620004f6620004f084620004c7565b620004d1565b620004c7565b9050919050565b6000819050919050565b6200051883620004db565b62000530620005278262000503565b84845462000471565b825550505050565b600090565b6200054762000538565b620005548184846200050d565b505050565b5b818110156200057c57620005706000826200053d565b6001810190506200055a565b5050565b601f821115620005cb5762000595816200043f565b620005a08462000454565b81016020851015620005b0578190505b620005c8620005bf8562000454565b83018262000559565b50505b505050565b600082821c905092915050565b6000620005f060001984600802620005d0565b1980831691505092915050565b60006200060b8383620005dd565b9150826002028217905092915050565b6200062682620003a1565b67ffffffffffffffff811115620006425762000641620003ac565b5b6200064e82546200040a565b6200065b82828562000580565b600060209050601f8311600181146200069357600084156200067e578287015190505b6200068a8582620005fd565b865550620006fa565b601f198416620006a3866200043f565b60005b82811015620006cd57848901518255600182019150602085019450602081019050620006a6565b86831015620006ed5784890151620006e9601f891682620005dd565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200073c8262000720565b810181811067ffffffffffffffff821117156200075e576200075d620003ac565b5b80604052505050565b60006200077362000702565b905062000781828262000731565b919050565b600067ffffffffffffffff821115620007a457620007a3620003ac565b5b620007af8262000720565b9050602081019050919050565b60005b83811015620007dc578082015181840152602081019050620007bf565b60008484015250505050565b6000620007ff620007f98462000786565b62000767565b9050828152602081018484840111156200081e576200081d6200071b565b5b6200082b848285620007bc565b509392505050565b600082601f8301126200084b576200084a62000716565b5b81516200085d848260208601620007e8565b91505092915050565b600080600080608085870312156200088357620008826200070c565b5b600085015167ffffffffffffffff811115620008a457620008a362000711565b5b620008b28782880162000833565b945050602085015167ffffffffffffffff811115620008d657620008d562000711565b5b620008e48782880162000833565b935050604085015167ffffffffffffffff81111562000908576200090762000711565b5b620009168782880162000833565b925050606085015167ffffffffffffffff8111156200093a576200093962000711565b5b620009488782880162000833565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200099d60208362000954565b9150620009aa8262000965565b602082019050919050565b60006020820190508181036000830152620009d0816200098e565b9050919050565b6150ea80620009e76000396000f3fe6080604052600436106102725760003560e01c80636352211e1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb011461095c578063da3ef23f14610987578063e985e9c5146109b0578063edec5f27146109ed578063f2c4ce1e14610a16578063f2fde38b14610a3f57610272565b8063b88d4fde1461083a578063ba4e5c4914610863578063ba7d2c76146108a0578063c6682862146108cb578063c87b56dd146108f6578063d0eb26b01461093357610272565b80638da5cb5b116101135780638da5cb5b1461075d57806395d89b41146107885780639c70b512146107b3578063a0712d68146107de578063a22cb465146107fa578063a475b5dd1461082357610272565b80636352211e146106785780636c0360eb146106b557806370a08231146106e0578063715018a61461071d5780637f00c7a61461073457610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461055657806344a0d68a146105935780634f6ccce7146105bc57806351830227146105f957806355f804b3146106245780635c975abb1461064d57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461052d57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906135cd565b610a68565b6040516102ab9190613615565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d6919061365c565b610ae2565b005b3480156102e957600080fd5b506102f2610b7b565b6040516102ff9190613719565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613771565b610c0d565b60405161033c91906137df565b60405180910390f35b34801561035157600080fd5b5061035a610c92565b6040516103679190613719565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613826565b610d20565b005b3480156103a557600080fd5b506103ae610e37565b6040516103bb9190613875565b60405180910390f35b3480156103d057600080fd5b506103d9610e3d565b6040516103e69190613875565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613890565b610e4a565b6040516104239190613875565b60405180910390f35b34801561043857600080fd5b50610441610e62565b60405161044e9190613875565b60405180910390f35b34801561046357600080fd5b5061047e600480360381019061047991906138bd565b610e68565b005b34801561048c57600080fd5b506104a760048036038101906104a29190613826565b610ec8565b6040516104b49190613875565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613890565b610f6d565b6040516104f19190613615565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c919061365c565b61101b565b005b61052b6110b4565b005b34801561053957600080fd5b50610554600480360381019061054f91906138bd565b6111b0565b005b34801561056257600080fd5b5061057d60048036038101906105789190613890565b6111d0565b60405161058a91906139ce565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190613771565b61127e565b005b3480156105c857600080fd5b506105e360048036038101906105de9190613771565b611304565b6040516105f09190613875565b60405180910390f35b34801561060557600080fd5b5061060e611375565b60405161061b9190613615565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613b25565b611388565b005b34801561065957600080fd5b50610662611417565b60405161066f9190613615565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190613771565b61142a565b6040516106ac91906137df565b60405180910390f35b3480156106c157600080fd5b506106ca6114db565b6040516106d79190613719565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613890565b611569565b6040516107149190613875565b60405180910390f35b34801561072957600080fd5b50610732611620565b005b34801561074057600080fd5b5061075b60048036038101906107569190613771565b6116a8565b005b34801561076957600080fd5b5061077261172e565b60405161077f91906137df565b60405180910390f35b34801561079457600080fd5b5061079d611758565b6040516107aa9190613719565b60405180910390f35b3480156107bf57600080fd5b506107c86117ea565b6040516107d59190613615565b60405180910390f35b6107f860048036038101906107f39190613771565b6117fd565b005b34801561080657600080fd5b50610821600480360381019061081c9190613b6e565b611b45565b005b34801561082f57600080fd5b50610838611cc5565b005b34801561084657600080fd5b50610861600480360381019061085c9190613c4f565b611d5e565b005b34801561086f57600080fd5b5061088a60048036038101906108859190613771565b611dc0565b60405161089791906137df565b60405180910390f35b3480156108ac57600080fd5b506108b5611dff565b6040516108c29190613875565b60405180910390f35b3480156108d757600080fd5b506108e0611e05565b6040516108ed9190613719565b60405180910390f35b34801561090257600080fd5b5061091d60048036038101906109189190613771565b611e93565b60405161092a9190613719565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613771565b611feb565b005b34801561096857600080fd5b50610971612071565b60405161097e9190613875565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a99190613b25565b612077565b005b3480156109bc57600080fd5b506109d760048036038101906109d29190613cd2565b612106565b6040516109e49190613615565b60405180910390f35b3480156109f957600080fd5b50610a146004803603810190610a0f9190613d72565b61219a565b005b348015610a2257600080fd5b50610a3d6004803603810190610a389190613b25565b61223a565b005b348015610a4b57600080fd5b50610a666004803603810190610a619190613890565b6122c9565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610adb5750610ada826123c0565b5b9050919050565b610aea6124a2565b73ffffffffffffffffffffffffffffffffffffffff16610b0861172e565b73ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590613e0b565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b8a90613e5a565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb690613e5a565b8015610c035780601f10610bd857610100808354040283529160200191610c03565b820191906000526020600020905b815481529060010190602001808311610be657829003601f168201915b5050505050905090565b6000610c18826124aa565b610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e90613efd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610c9f90613e5a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccb90613e5a565b8015610d185780601f10610ced57610100808354040283529160200191610d18565b820191906000526020600020905b815481529060010190602001808311610cfb57829003601f168201915b505050505081565b6000610d2b8261142a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613f8f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dba6124a2565b73ffffffffffffffffffffffffffffffffffffffff161480610de95750610de881610de36124a2565b612106565b5b610e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1f90614021565b60405180910390fd5b610e328383612516565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610e79610e736124a2565b826125cf565b610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf906140b3565b60405180910390fd5b610ec38383836126ad565b505050565b6000610ed383611569565b8210610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90614145565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015611010578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610fad57610fac614165565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610ffd576001915050611016565b8080611008906141c3565b915050610f75565b50600090505b919050565b6110236124a2565b73ffffffffffffffffffffffffffffffffffffffff1661104161172e565b73ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90613e0b565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b6110bc6124a2565b73ffffffffffffffffffffffffffffffffffffffff166110da61172e565b73ffffffffffffffffffffffffffffffffffffffff1614611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790613e0b565b60405180910390fd5b600061113a61172e565b73ffffffffffffffffffffffffffffffffffffffff164760405161115d9061423c565b60006040518083038185875af1925050503d806000811461119a576040519150601f19603f3d011682016040523d82523d6000602084013e61119f565b606091505b50509050806111ad57600080fd5b50565b6111cb83838360405180602001604052806000815250611d5e565b505050565b606060006111dd83611569565b905060008167ffffffffffffffff8111156111fb576111fa6139fa565b5b6040519080825280602002602001820160405280156112295781602001602082028036833780820191505090505b50905060005b82811015611273576112418582610ec8565b82828151811061125457611253614165565b5b602002602001018181525050808061126b906141c3565b91505061122f565b508092505050919050565b6112866124a2565b73ffffffffffffffffffffffffffffffffffffffff166112a461172e565b73ffffffffffffffffffffffffffffffffffffffff16146112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f190613e0b565b60405180910390fd5b80600e8190555050565b600061130e610e3d565b821061134f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611346906142c3565b60405180910390fd5b6008828154811061136357611362614165565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6113906124a2565b73ffffffffffffffffffffffffffffffffffffffff166113ae61172e565b73ffffffffffffffffffffffffffffffffffffffff1614611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90613e0b565b60405180910390fd5b80600b9081611413919061448f565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c9906145d3565b60405180910390fd5b80915050919050565b600b80546114e890613e5a565b80601f016020809104026020016040519081016040528092919081815260200182805461151490613e5a565b80156115615780601f1061153657610100808354040283529160200191611561565b820191906000526020600020905b81548152906001019060200180831161154457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090614665565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116286124a2565b73ffffffffffffffffffffffffffffffffffffffff1661164661172e565b73ffffffffffffffffffffffffffffffffffffffff161461169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169390613e0b565b60405180910390fd5b6116a66000612908565b565b6116b06124a2565b73ffffffffffffffffffffffffffffffffffffffff166116ce61172e565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613e0b565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461176790613e5a565b80601f016020809104026020016040519081016040528092919081815260200182805461179390613e5a565b80156117e05780601f106117b5576101008083540402835291602001916117e0565b820191906000526020600020905b8154815290600101906020018083116117c357829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff161561184d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611844906146d1565b60405180910390fd5b6000611857610e3d565b90506000821161189c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118939061473d565b60405180910390fd5b6010548211156118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d8906147cf565b60405180910390fd5b600f5482826118f091906147ef565b1115611931576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611928906147cf565b60405180910390fd5b61193961172e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ab55760011515601260029054906101000a900460ff16151503611a645761198f33610f6d565b6119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c59061486f565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506011548382611a2191906147ef565b1115611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a59906147cf565b60405180910390fd5b505b81600e54611a72919061488f565b341015611ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aab9061491d565b60405180910390fd5b5b6000600190505b828111611b4057601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611b13906141c3565b9190505550611b2d338284611b2891906147ef565b6129ce565b8080611b38906141c3565b915050611abc565b505050565b611b4d6124a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb190614989565b60405180910390fd5b8060056000611bc76124a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c746124a2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cb99190613615565b60405180910390a35050565b611ccd6124a2565b73ffffffffffffffffffffffffffffffffffffffff16611ceb61172e565b73ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890613e0b565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b611d6f611d696124a2565b836125cf565b611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da5906140b3565b60405180910390fd5b611dba848484846129ec565b50505050565b60138181548110611dd057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c8054611e1290613e5a565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3e90613e5a565b8015611e8b5780601f10611e6057610100808354040283529160200191611e8b565b820191906000526020600020905b815481529060010190602001808311611e6e57829003601f168201915b505050505081565b6060611e9e826124aa565b611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed490614a1b565b60405180910390fd5b60001515601260019054906101000a900460ff16151503611f8a57600d8054611f0590613e5a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3190613e5a565b8015611f7e5780601f10611f5357610100808354040283529160200191611f7e565b820191906000526020600020905b815481529060010190602001808311611f6157829003601f168201915b50505050509050611fe6565b6000611f94612a48565b90506000815111611fb45760405180602001604052806000815250611fe2565b80611fbe84612ada565b600c604051602001611fd293929190614afa565b6040516020818303038152906040525b9150505b919050565b611ff36124a2565b73ffffffffffffffffffffffffffffffffffffffff1661201161172e565b73ffffffffffffffffffffffffffffffffffffffff1614612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90613e0b565b60405180910390fd5b8060118190555050565b600f5481565b61207f6124a2565b73ffffffffffffffffffffffffffffffffffffffff1661209d61172e565b73ffffffffffffffffffffffffffffffffffffffff16146120f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ea90613e0b565b60405180910390fd5b80600c9081612102919061448f565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121a26124a2565b73ffffffffffffffffffffffffffffffffffffffff166121c061172e565b73ffffffffffffffffffffffffffffffffffffffff1614612216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220d90613e0b565b60405180910390fd5b601360006122249190613483565b8181601391906122359291906134a4565b505050565b6122426124a2565b73ffffffffffffffffffffffffffffffffffffffff1661226061172e565b73ffffffffffffffffffffffffffffffffffffffff16146122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90613e0b565b60405180910390fd5b80600d90816122c5919061448f565b5050565b6122d16124a2565b73ffffffffffffffffffffffffffffffffffffffff166122ef61172e565b73ffffffffffffffffffffffffffffffffffffffff1614612345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233c90613e0b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90614b9d565b60405180910390fd5b6123bd81612908565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061248b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061249b575061249a82612c3a565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125898361142a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125da826124aa565b612619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261090614c2f565b60405180910390fd5b60006126248361142a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061269357508373ffffffffffffffffffffffffffffffffffffffff1661267b84610c0d565b73ffffffffffffffffffffffffffffffffffffffff16145b806126a457506126a38185612106565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126cd8261142a565b73ffffffffffffffffffffffffffffffffffffffff1614612723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271a90614cc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278990614d53565b60405180910390fd5b61279d838383612ca4565b6127a8600082612516565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127f89190614d73565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461284f91906147ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129e8828260405180602001604052806000815250612db6565b5050565b6129f78484846126ad565b612a0384848484612e11565b612a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3990614e19565b60405180910390fd5b50505050565b6060600b8054612a5790613e5a565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8390613e5a565b8015612ad05780601f10612aa557610100808354040283529160200191612ad0565b820191906000526020600020905b815481529060010190602001808311612ab357829003601f168201915b5050505050905090565b606060008203612b21576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c35565b600082905060005b60008214612b53578080612b3c906141c3565b915050600a82612b4c9190614e68565b9150612b29565b60008167ffffffffffffffff811115612b6f57612b6e6139fa565b5b6040519080825280601f01601f191660200182016040528015612ba15781602001600182028036833780820191505090505b5090505b60008514612c2e57600182612bba9190614d73565b9150600a85612bc99190614e99565b6030612bd591906147ef565b60f81b818381518110612beb57612bea614165565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c279190614e68565b9450612ba5565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612caf838383612f98565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cf157612cec81612f9d565b612d30565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d2f57612d2e8382612fe6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d7257612d6d81613153565b612db1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612db057612daf8282613224565b5b5b505050565b612dc083836132a3565b612dcd6000848484612e11565b612e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0390614e19565b60405180910390fd5b505050565b6000612e328473ffffffffffffffffffffffffffffffffffffffff16613470565b15612f8b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e5b6124a2565b8786866040518563ffffffff1660e01b8152600401612e7d9493929190614f1f565b6020604051808303816000875af1925050508015612eb957506040513d601f19601f82011682018060405250810190612eb69190614f80565b60015b612f3b573d8060008114612ee9576040519150601f19603f3d011682016040523d82523d6000602084013e612eee565b606091505b506000815103612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614e19565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f90565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ff384611569565b612ffd9190614d73565b90506000600760008481526020019081526020016000205490508181146130e2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131679190614d73565b905060006009600084815260200190815260200160002054905060006008838154811061319757613196614165565b5b9060005260206000200154905080600883815481106131b9576131b8614165565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061320857613207614fad565b5b6001900381819060005260206000200160009055905550505050565b600061322f83611569565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330990615028565b60405180910390fd5b61331b816124aa565b1561335b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335290615094565b60405180910390fd5b61336760008383612ca4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133b791906147ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b50805460008255906000526020600020908101906134a19190613544565b50565b828054828255906000526020600020908101928215613533579160200282015b8281111561353257823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906134c4565b5b5090506135409190613544565b5090565b5b8082111561355d576000816000905550600101613545565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135aa81613575565b81146135b557600080fd5b50565b6000813590506135c7816135a1565b92915050565b6000602082840312156135e3576135e261356b565b5b60006135f1848285016135b8565b91505092915050565b60008115159050919050565b61360f816135fa565b82525050565b600060208201905061362a6000830184613606565b92915050565b613639816135fa565b811461364457600080fd5b50565b60008135905061365681613630565b92915050565b6000602082840312156136725761367161356b565b5b600061368084828501613647565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136c35780820151818401526020810190506136a8565b60008484015250505050565b6000601f19601f8301169050919050565b60006136eb82613689565b6136f58185613694565b93506137058185602086016136a5565b61370e816136cf565b840191505092915050565b6000602082019050818103600083015261373381846136e0565b905092915050565b6000819050919050565b61374e8161373b565b811461375957600080fd5b50565b60008135905061376b81613745565b92915050565b6000602082840312156137875761378661356b565b5b60006137958482850161375c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137c98261379e565b9050919050565b6137d9816137be565b82525050565b60006020820190506137f460008301846137d0565b92915050565b613803816137be565b811461380e57600080fd5b50565b600081359050613820816137fa565b92915050565b6000806040838503121561383d5761383c61356b565b5b600061384b85828601613811565b925050602061385c8582860161375c565b9150509250929050565b61386f8161373b565b82525050565b600060208201905061388a6000830184613866565b92915050565b6000602082840312156138a6576138a561356b565b5b60006138b484828501613811565b91505092915050565b6000806000606084860312156138d6576138d561356b565b5b60006138e486828701613811565b93505060206138f586828701613811565b92505060406139068682870161375c565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139458161373b565b82525050565b6000613957838361393c565b60208301905092915050565b6000602082019050919050565b600061397b82613910565b613985818561391b565b93506139908361392c565b8060005b838110156139c15781516139a8888261394b565b97506139b383613963565b925050600181019050613994565b5085935050505092915050565b600060208201905081810360008301526139e88184613970565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a32826136cf565b810181811067ffffffffffffffff82111715613a5157613a506139fa565b5b80604052505050565b6000613a64613561565b9050613a708282613a29565b919050565b600067ffffffffffffffff821115613a9057613a8f6139fa565b5b613a99826136cf565b9050602081019050919050565b82818337600083830152505050565b6000613ac8613ac384613a75565b613a5a565b905082815260208101848484011115613ae457613ae36139f5565b5b613aef848285613aa6565b509392505050565b600082601f830112613b0c57613b0b6139f0565b5b8135613b1c848260208601613ab5565b91505092915050565b600060208284031215613b3b57613b3a61356b565b5b600082013567ffffffffffffffff811115613b5957613b58613570565b5b613b6584828501613af7565b91505092915050565b60008060408385031215613b8557613b8461356b565b5b6000613b9385828601613811565b9250506020613ba485828601613647565b9150509250929050565b600067ffffffffffffffff821115613bc957613bc86139fa565b5b613bd2826136cf565b9050602081019050919050565b6000613bf2613bed84613bae565b613a5a565b905082815260208101848484011115613c0e57613c0d6139f5565b5b613c19848285613aa6565b509392505050565b600082601f830112613c3657613c356139f0565b5b8135613c46848260208601613bdf565b91505092915050565b60008060008060808587031215613c6957613c6861356b565b5b6000613c7787828801613811565b9450506020613c8887828801613811565b9350506040613c998782880161375c565b925050606085013567ffffffffffffffff811115613cba57613cb9613570565b5b613cc687828801613c21565b91505092959194509250565b60008060408385031215613ce957613ce861356b565b5b6000613cf785828601613811565b9250506020613d0885828601613811565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613d3257613d316139f0565b5b8235905067ffffffffffffffff811115613d4f57613d4e613d12565b5b602083019150836020820283011115613d6b57613d6a613d17565b5b9250929050565b60008060208385031215613d8957613d8861356b565b5b600083013567ffffffffffffffff811115613da757613da6613570565b5b613db385828601613d1c565b92509250509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613df5602083613694565b9150613e0082613dbf565b602082019050919050565b60006020820190508181036000830152613e2481613de8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e7257607f821691505b602082108103613e8557613e84613e2b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ee7602c83613694565b9150613ef282613e8b565b604082019050919050565b60006020820190508181036000830152613f1681613eda565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f79602183613694565b9150613f8482613f1d565b604082019050919050565b60006020820190508181036000830152613fa881613f6c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061400b603883613694565b915061401682613faf565b604082019050919050565b6000602082019050818103600083015261403a81613ffe565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061409d603183613694565b91506140a882614041565b604082019050919050565b600060208201905081810360008301526140cc81614090565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061412f602b83613694565b915061413a826140d3565b604082019050919050565b6000602082019050818103600083015261415e81614122565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141ce8261373b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614200576141ff614194565b5b600182019050919050565b600081905092915050565b50565b600061422660008361420b565b915061423182614216565b600082019050919050565b600061424782614219565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006142ad602c83613694565b91506142b882614251565b604082019050919050565b600060208201905081810360008301526142dc816142a0565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026143457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614308565b61434f8683614308565b95508019841693508086168417925050509392505050565b6000819050919050565b600061438c6143876143828461373b565b614367565b61373b565b9050919050565b6000819050919050565b6143a683614371565b6143ba6143b282614393565b848454614315565b825550505050565b600090565b6143cf6143c2565b6143da81848461439d565b505050565b5b818110156143fe576143f36000826143c7565b6001810190506143e0565b5050565b601f82111561444357614414816142e3565b61441d846142f8565b8101602085101561442c578190505b614440614438856142f8565b8301826143df565b50505b505050565b600082821c905092915050565b600061446660001984600802614448565b1980831691505092915050565b600061447f8383614455565b9150826002028217905092915050565b61449882613689565b67ffffffffffffffff8111156144b1576144b06139fa565b5b6144bb8254613e5a565b6144c6828285614402565b600060209050601f8311600181146144f957600084156144e7578287015190505b6144f18582614473565b865550614559565b601f198416614507866142e3565b60005b8281101561452f5784890151825560018201915060208501945060208101905061450a565b8683101561454c5784890151614548601f891682614455565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006145bd602983613694565b91506145c882614561565b604082019050919050565b600060208201905081810360008301526145ec816145b0565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061464f602a83613694565b915061465a826145f3565b604082019050919050565b6000602082019050818103600083015261467e81614642565b9050919050565b7f506c657365205761697420666f722074686520636f756e63696c2e0000000000600082015250565b60006146bb601b83613694565b91506146c682614685565b602082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b7f486f77206d616e7920646f20796f752077616e743f0000000000000000000000600082015250565b6000614727601583613694565b9150614732826146f1565b602082019050919050565b600060208201905081810360008301526147568161471a565b9050919050565b7f596f75207061727479206c6f6f6b2066756c6c207374696c6c2077616e74207460008201527f6f206d696e74207468656d3f0000000000000000000000000000000000000000602082015250565b60006147b9602c83613694565b91506147c48261475d565b604082019050919050565b600060208201905081810360008301526147e8816147ac565b9050919050565b60006147fa8261373b565b91506148058361373b565b925082820190508082111561481d5761481c614194565b5b92915050565b7f446f20796f75206861766520616e20496e766974652043617264203f00000000600082015250565b6000614859601c83613694565b915061486482614823565b602082019050919050565b600060208201905081810360008301526148888161484c565b9050919050565b600061489a8261373b565b91506148a58361373b565b92508282026148b38161373b565b915082820484148315176148ca576148c9614194565b5b5092915050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b6000614907601283613694565b9150614912826148d1565b602082019050919050565b60006020820190508181036000830152614936816148fa565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614973601983613694565b915061497e8261493d565b602082019050919050565b600060208201905081810360008301526149a281614966565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614a05602f83613694565b9150614a10826149a9565b604082019050919050565b60006020820190508181036000830152614a34816149f8565b9050919050565b600081905092915050565b6000614a5182613689565b614a5b8185614a3b565b9350614a6b8185602086016136a5565b80840191505092915050565b60008154614a8481613e5a565b614a8e8186614a3b565b94506001821660008114614aa95760018114614abe57614af1565b60ff1983168652811515820286019350614af1565b614ac7856142e3565b60005b83811015614ae957815481890152600182019150602081019050614aca565b838801955050505b50505092915050565b6000614b068286614a46565b9150614b128285614a46565b9150614b1e8284614a77565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b87602683613694565b9150614b9282614b2b565b604082019050919050565b60006020820190508181036000830152614bb681614b7a565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614c19602c83613694565b9150614c2482614bbd565b604082019050919050565b60006020820190508181036000830152614c4881614c0c565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614cab602983613694565b9150614cb682614c4f565b604082019050919050565b60006020820190508181036000830152614cda81614c9e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d3d602483613694565b9150614d4882614ce1565b604082019050919050565b60006020820190508181036000830152614d6c81614d30565b9050919050565b6000614d7e8261373b565b9150614d898361373b565b9250828203905081811115614da157614da0614194565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614e03603283613694565b9150614e0e82614da7565b604082019050919050565b60006020820190508181036000830152614e3281614df6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e738261373b565b9150614e7e8361373b565b925082614e8e57614e8d614e39565b5b828204905092915050565b6000614ea48261373b565b9150614eaf8361373b565b925082614ebf57614ebe614e39565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614ef182614eca565b614efb8185614ed5565b9350614f0b8185602086016136a5565b614f14816136cf565b840191505092915050565b6000608082019050614f3460008301876137d0565b614f4160208301866137d0565b614f4e6040830185613866565b8181036060830152614f608184614ee6565b905095945050505050565b600081519050614f7a816135a1565b92915050565b600060208284031215614f9657614f9561356b565b5b6000614fa484828501614f6b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615012602083613694565b915061501d82614fdc565b602082019050919050565b6000602082019050818103600083015261504181615005565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061507e601c83613694565b915061508982615048565b602082019050919050565b600060208201905081810360008301526150ad81615071565b905091905056fea264697066735822122039ca8096080d446f70111ba10b8dc392488f003b8b6ae239ee02491b34ce66ce64736f6c63430008110033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000b4361745f436f756e63696c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002434300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102725760003560e01c80636352211e1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb011461095c578063da3ef23f14610987578063e985e9c5146109b0578063edec5f27146109ed578063f2c4ce1e14610a16578063f2fde38b14610a3f57610272565b8063b88d4fde1461083a578063ba4e5c4914610863578063ba7d2c76146108a0578063c6682862146108cb578063c87b56dd146108f6578063d0eb26b01461093357610272565b80638da5cb5b116101135780638da5cb5b1461075d57806395d89b41146107885780639c70b512146107b3578063a0712d68146107de578063a22cb465146107fa578063a475b5dd1461082357610272565b80636352211e146106785780636c0360eb146106b557806370a08231146106e0578063715018a61461071d5780637f00c7a61461073457610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461055657806344a0d68a146105935780634f6ccce7146105bc57806351830227146105f957806355f804b3146106245780635c975abb1461064d57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461052d57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906135cd565b610a68565b6040516102ab9190613615565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d6919061365c565b610ae2565b005b3480156102e957600080fd5b506102f2610b7b565b6040516102ff9190613719565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613771565b610c0d565b60405161033c91906137df565b60405180910390f35b34801561035157600080fd5b5061035a610c92565b6040516103679190613719565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613826565b610d20565b005b3480156103a557600080fd5b506103ae610e37565b6040516103bb9190613875565b60405180910390f35b3480156103d057600080fd5b506103d9610e3d565b6040516103e69190613875565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613890565b610e4a565b6040516104239190613875565b60405180910390f35b34801561043857600080fd5b50610441610e62565b60405161044e9190613875565b60405180910390f35b34801561046357600080fd5b5061047e600480360381019061047991906138bd565b610e68565b005b34801561048c57600080fd5b506104a760048036038101906104a29190613826565b610ec8565b6040516104b49190613875565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613890565b610f6d565b6040516104f19190613615565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c919061365c565b61101b565b005b61052b6110b4565b005b34801561053957600080fd5b50610554600480360381019061054f91906138bd565b6111b0565b005b34801561056257600080fd5b5061057d60048036038101906105789190613890565b6111d0565b60405161058a91906139ce565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190613771565b61127e565b005b3480156105c857600080fd5b506105e360048036038101906105de9190613771565b611304565b6040516105f09190613875565b60405180910390f35b34801561060557600080fd5b5061060e611375565b60405161061b9190613615565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613b25565b611388565b005b34801561065957600080fd5b50610662611417565b60405161066f9190613615565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190613771565b61142a565b6040516106ac91906137df565b60405180910390f35b3480156106c157600080fd5b506106ca6114db565b6040516106d79190613719565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613890565b611569565b6040516107149190613875565b60405180910390f35b34801561072957600080fd5b50610732611620565b005b34801561074057600080fd5b5061075b60048036038101906107569190613771565b6116a8565b005b34801561076957600080fd5b5061077261172e565b60405161077f91906137df565b60405180910390f35b34801561079457600080fd5b5061079d611758565b6040516107aa9190613719565b60405180910390f35b3480156107bf57600080fd5b506107c86117ea565b6040516107d59190613615565b60405180910390f35b6107f860048036038101906107f39190613771565b6117fd565b005b34801561080657600080fd5b50610821600480360381019061081c9190613b6e565b611b45565b005b34801561082f57600080fd5b50610838611cc5565b005b34801561084657600080fd5b50610861600480360381019061085c9190613c4f565b611d5e565b005b34801561086f57600080fd5b5061088a60048036038101906108859190613771565b611dc0565b60405161089791906137df565b60405180910390f35b3480156108ac57600080fd5b506108b5611dff565b6040516108c29190613875565b60405180910390f35b3480156108d757600080fd5b506108e0611e05565b6040516108ed9190613719565b60405180910390f35b34801561090257600080fd5b5061091d60048036038101906109189190613771565b611e93565b60405161092a9190613719565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613771565b611feb565b005b34801561096857600080fd5b50610971612071565b60405161097e9190613875565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a99190613b25565b612077565b005b3480156109bc57600080fd5b506109d760048036038101906109d29190613cd2565b612106565b6040516109e49190613615565b60405180910390f35b3480156109f957600080fd5b50610a146004803603810190610a0f9190613d72565b61219a565b005b348015610a2257600080fd5b50610a3d6004803603810190610a389190613b25565b61223a565b005b348015610a4b57600080fd5b50610a666004803603810190610a619190613890565b6122c9565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610adb5750610ada826123c0565b5b9050919050565b610aea6124a2565b73ffffffffffffffffffffffffffffffffffffffff16610b0861172e565b73ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590613e0b565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b8a90613e5a565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb690613e5a565b8015610c035780601f10610bd857610100808354040283529160200191610c03565b820191906000526020600020905b815481529060010190602001808311610be657829003601f168201915b5050505050905090565b6000610c18826124aa565b610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e90613efd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610c9f90613e5a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccb90613e5a565b8015610d185780601f10610ced57610100808354040283529160200191610d18565b820191906000526020600020905b815481529060010190602001808311610cfb57829003601f168201915b505050505081565b6000610d2b8261142a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613f8f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dba6124a2565b73ffffffffffffffffffffffffffffffffffffffff161480610de95750610de881610de36124a2565b612106565b5b610e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1f90614021565b60405180910390fd5b610e328383612516565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610e79610e736124a2565b826125cf565b610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf906140b3565b60405180910390fd5b610ec38383836126ad565b505050565b6000610ed383611569565b8210610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90614145565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015611010578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610fad57610fac614165565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610ffd576001915050611016565b8080611008906141c3565b915050610f75565b50600090505b919050565b6110236124a2565b73ffffffffffffffffffffffffffffffffffffffff1661104161172e565b73ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90613e0b565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b6110bc6124a2565b73ffffffffffffffffffffffffffffffffffffffff166110da61172e565b73ffffffffffffffffffffffffffffffffffffffff1614611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790613e0b565b60405180910390fd5b600061113a61172e565b73ffffffffffffffffffffffffffffffffffffffff164760405161115d9061423c565b60006040518083038185875af1925050503d806000811461119a576040519150601f19603f3d011682016040523d82523d6000602084013e61119f565b606091505b50509050806111ad57600080fd5b50565b6111cb83838360405180602001604052806000815250611d5e565b505050565b606060006111dd83611569565b905060008167ffffffffffffffff8111156111fb576111fa6139fa565b5b6040519080825280602002602001820160405280156112295781602001602082028036833780820191505090505b50905060005b82811015611273576112418582610ec8565b82828151811061125457611253614165565b5b602002602001018181525050808061126b906141c3565b91505061122f565b508092505050919050565b6112866124a2565b73ffffffffffffffffffffffffffffffffffffffff166112a461172e565b73ffffffffffffffffffffffffffffffffffffffff16146112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f190613e0b565b60405180910390fd5b80600e8190555050565b600061130e610e3d565b821061134f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611346906142c3565b60405180910390fd5b6008828154811061136357611362614165565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6113906124a2565b73ffffffffffffffffffffffffffffffffffffffff166113ae61172e565b73ffffffffffffffffffffffffffffffffffffffff1614611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90613e0b565b60405180910390fd5b80600b9081611413919061448f565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c9906145d3565b60405180910390fd5b80915050919050565b600b80546114e890613e5a565b80601f016020809104026020016040519081016040528092919081815260200182805461151490613e5a565b80156115615780601f1061153657610100808354040283529160200191611561565b820191906000526020600020905b81548152906001019060200180831161154457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090614665565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116286124a2565b73ffffffffffffffffffffffffffffffffffffffff1661164661172e565b73ffffffffffffffffffffffffffffffffffffffff161461169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169390613e0b565b60405180910390fd5b6116a66000612908565b565b6116b06124a2565b73ffffffffffffffffffffffffffffffffffffffff166116ce61172e565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613e0b565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461176790613e5a565b80601f016020809104026020016040519081016040528092919081815260200182805461179390613e5a565b80156117e05780601f106117b5576101008083540402835291602001916117e0565b820191906000526020600020905b8154815290600101906020018083116117c357829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff161561184d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611844906146d1565b60405180910390fd5b6000611857610e3d565b90506000821161189c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118939061473d565b60405180910390fd5b6010548211156118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d8906147cf565b60405180910390fd5b600f5482826118f091906147ef565b1115611931576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611928906147cf565b60405180910390fd5b61193961172e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ab55760011515601260029054906101000a900460ff16151503611a645761198f33610f6d565b6119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c59061486f565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506011548382611a2191906147ef565b1115611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a59906147cf565b60405180910390fd5b505b81600e54611a72919061488f565b341015611ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aab9061491d565b60405180910390fd5b5b6000600190505b828111611b4057601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611b13906141c3565b9190505550611b2d338284611b2891906147ef565b6129ce565b8080611b38906141c3565b915050611abc565b505050565b611b4d6124a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb190614989565b60405180910390fd5b8060056000611bc76124a2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c746124a2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cb99190613615565b60405180910390a35050565b611ccd6124a2565b73ffffffffffffffffffffffffffffffffffffffff16611ceb61172e565b73ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890613e0b565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b611d6f611d696124a2565b836125cf565b611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da5906140b3565b60405180910390fd5b611dba848484846129ec565b50505050565b60138181548110611dd057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c8054611e1290613e5a565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3e90613e5a565b8015611e8b5780601f10611e6057610100808354040283529160200191611e8b565b820191906000526020600020905b815481529060010190602001808311611e6e57829003601f168201915b505050505081565b6060611e9e826124aa565b611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed490614a1b565b60405180910390fd5b60001515601260019054906101000a900460ff16151503611f8a57600d8054611f0590613e5a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3190613e5a565b8015611f7e5780601f10611f5357610100808354040283529160200191611f7e565b820191906000526020600020905b815481529060010190602001808311611f6157829003601f168201915b50505050509050611fe6565b6000611f94612a48565b90506000815111611fb45760405180602001604052806000815250611fe2565b80611fbe84612ada565b600c604051602001611fd293929190614afa565b6040516020818303038152906040525b9150505b919050565b611ff36124a2565b73ffffffffffffffffffffffffffffffffffffffff1661201161172e565b73ffffffffffffffffffffffffffffffffffffffff1614612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90613e0b565b60405180910390fd5b8060118190555050565b600f5481565b61207f6124a2565b73ffffffffffffffffffffffffffffffffffffffff1661209d61172e565b73ffffffffffffffffffffffffffffffffffffffff16146120f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ea90613e0b565b60405180910390fd5b80600c9081612102919061448f565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121a26124a2565b73ffffffffffffffffffffffffffffffffffffffff166121c061172e565b73ffffffffffffffffffffffffffffffffffffffff1614612216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220d90613e0b565b60405180910390fd5b601360006122249190613483565b8181601391906122359291906134a4565b505050565b6122426124a2565b73ffffffffffffffffffffffffffffffffffffffff1661226061172e565b73ffffffffffffffffffffffffffffffffffffffff16146122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90613e0b565b60405180910390fd5b80600d90816122c5919061448f565b5050565b6122d16124a2565b73ffffffffffffffffffffffffffffffffffffffff166122ef61172e565b73ffffffffffffffffffffffffffffffffffffffff1614612345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233c90613e0b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90614b9d565b60405180910390fd5b6123bd81612908565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061248b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061249b575061249a82612c3a565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125898361142a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125da826124aa565b612619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261090614c2f565b60405180910390fd5b60006126248361142a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061269357508373ffffffffffffffffffffffffffffffffffffffff1661267b84610c0d565b73ffffffffffffffffffffffffffffffffffffffff16145b806126a457506126a38185612106565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126cd8261142a565b73ffffffffffffffffffffffffffffffffffffffff1614612723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271a90614cc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278990614d53565b60405180910390fd5b61279d838383612ca4565b6127a8600082612516565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127f89190614d73565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461284f91906147ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129e8828260405180602001604052806000815250612db6565b5050565b6129f78484846126ad565b612a0384848484612e11565b612a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3990614e19565b60405180910390fd5b50505050565b6060600b8054612a5790613e5a565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8390613e5a565b8015612ad05780601f10612aa557610100808354040283529160200191612ad0565b820191906000526020600020905b815481529060010190602001808311612ab357829003601f168201915b5050505050905090565b606060008203612b21576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c35565b600082905060005b60008214612b53578080612b3c906141c3565b915050600a82612b4c9190614e68565b9150612b29565b60008167ffffffffffffffff811115612b6f57612b6e6139fa565b5b6040519080825280601f01601f191660200182016040528015612ba15781602001600182028036833780820191505090505b5090505b60008514612c2e57600182612bba9190614d73565b9150600a85612bc99190614e99565b6030612bd591906147ef565b60f81b818381518110612beb57612bea614165565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c279190614e68565b9450612ba5565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612caf838383612f98565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cf157612cec81612f9d565b612d30565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d2f57612d2e8382612fe6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d7257612d6d81613153565b612db1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612db057612daf8282613224565b5b5b505050565b612dc083836132a3565b612dcd6000848484612e11565b612e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0390614e19565b60405180910390fd5b505050565b6000612e328473ffffffffffffffffffffffffffffffffffffffff16613470565b15612f8b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e5b6124a2565b8786866040518563ffffffff1660e01b8152600401612e7d9493929190614f1f565b6020604051808303816000875af1925050508015612eb957506040513d601f19601f82011682018060405250810190612eb69190614f80565b60015b612f3b573d8060008114612ee9576040519150601f19603f3d011682016040523d82523d6000602084013e612eee565b606091505b506000815103612f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2a90614e19565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f90565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ff384611569565b612ffd9190614d73565b90506000600760008481526020019081526020016000205490508181146130e2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131679190614d73565b905060006009600084815260200190815260200160002054905060006008838154811061319757613196614165565b5b9060005260206000200154905080600883815481106131b9576131b8614165565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061320857613207614fad565b5b6001900381819060005260206000200160009055905550505050565b600061322f83611569565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330990615028565b60405180910390fd5b61331b816124aa565b1561335b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335290615094565b60405180910390fd5b61336760008383612ca4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133b791906147ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b50805460008255906000526020600020908101906134a19190613544565b50565b828054828255906000526020600020908101928215613533579160200282015b8281111561353257823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906134c4565b5b5090506135409190613544565b5090565b5b8082111561355d576000816000905550600101613545565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135aa81613575565b81146135b557600080fd5b50565b6000813590506135c7816135a1565b92915050565b6000602082840312156135e3576135e261356b565b5b60006135f1848285016135b8565b91505092915050565b60008115159050919050565b61360f816135fa565b82525050565b600060208201905061362a6000830184613606565b92915050565b613639816135fa565b811461364457600080fd5b50565b60008135905061365681613630565b92915050565b6000602082840312156136725761367161356b565b5b600061368084828501613647565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136c35780820151818401526020810190506136a8565b60008484015250505050565b6000601f19601f8301169050919050565b60006136eb82613689565b6136f58185613694565b93506137058185602086016136a5565b61370e816136cf565b840191505092915050565b6000602082019050818103600083015261373381846136e0565b905092915050565b6000819050919050565b61374e8161373b565b811461375957600080fd5b50565b60008135905061376b81613745565b92915050565b6000602082840312156137875761378661356b565b5b60006137958482850161375c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137c98261379e565b9050919050565b6137d9816137be565b82525050565b60006020820190506137f460008301846137d0565b92915050565b613803816137be565b811461380e57600080fd5b50565b600081359050613820816137fa565b92915050565b6000806040838503121561383d5761383c61356b565b5b600061384b85828601613811565b925050602061385c8582860161375c565b9150509250929050565b61386f8161373b565b82525050565b600060208201905061388a6000830184613866565b92915050565b6000602082840312156138a6576138a561356b565b5b60006138b484828501613811565b91505092915050565b6000806000606084860312156138d6576138d561356b565b5b60006138e486828701613811565b93505060206138f586828701613811565b92505060406139068682870161375c565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139458161373b565b82525050565b6000613957838361393c565b60208301905092915050565b6000602082019050919050565b600061397b82613910565b613985818561391b565b93506139908361392c565b8060005b838110156139c15781516139a8888261394b565b97506139b383613963565b925050600181019050613994565b5085935050505092915050565b600060208201905081810360008301526139e88184613970565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a32826136cf565b810181811067ffffffffffffffff82111715613a5157613a506139fa565b5b80604052505050565b6000613a64613561565b9050613a708282613a29565b919050565b600067ffffffffffffffff821115613a9057613a8f6139fa565b5b613a99826136cf565b9050602081019050919050565b82818337600083830152505050565b6000613ac8613ac384613a75565b613a5a565b905082815260208101848484011115613ae457613ae36139f5565b5b613aef848285613aa6565b509392505050565b600082601f830112613b0c57613b0b6139f0565b5b8135613b1c848260208601613ab5565b91505092915050565b600060208284031215613b3b57613b3a61356b565b5b600082013567ffffffffffffffff811115613b5957613b58613570565b5b613b6584828501613af7565b91505092915050565b60008060408385031215613b8557613b8461356b565b5b6000613b9385828601613811565b9250506020613ba485828601613647565b9150509250929050565b600067ffffffffffffffff821115613bc957613bc86139fa565b5b613bd2826136cf565b9050602081019050919050565b6000613bf2613bed84613bae565b613a5a565b905082815260208101848484011115613c0e57613c0d6139f5565b5b613c19848285613aa6565b509392505050565b600082601f830112613c3657613c356139f0565b5b8135613c46848260208601613bdf565b91505092915050565b60008060008060808587031215613c6957613c6861356b565b5b6000613c7787828801613811565b9450506020613c8887828801613811565b9350506040613c998782880161375c565b925050606085013567ffffffffffffffff811115613cba57613cb9613570565b5b613cc687828801613c21565b91505092959194509250565b60008060408385031215613ce957613ce861356b565b5b6000613cf785828601613811565b9250506020613d0885828601613811565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613d3257613d316139f0565b5b8235905067ffffffffffffffff811115613d4f57613d4e613d12565b5b602083019150836020820283011115613d6b57613d6a613d17565b5b9250929050565b60008060208385031215613d8957613d8861356b565b5b600083013567ffffffffffffffff811115613da757613da6613570565b5b613db385828601613d1c565b92509250509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613df5602083613694565b9150613e0082613dbf565b602082019050919050565b60006020820190508181036000830152613e2481613de8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e7257607f821691505b602082108103613e8557613e84613e2b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ee7602c83613694565b9150613ef282613e8b565b604082019050919050565b60006020820190508181036000830152613f1681613eda565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f79602183613694565b9150613f8482613f1d565b604082019050919050565b60006020820190508181036000830152613fa881613f6c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061400b603883613694565b915061401682613faf565b604082019050919050565b6000602082019050818103600083015261403a81613ffe565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061409d603183613694565b91506140a882614041565b604082019050919050565b600060208201905081810360008301526140cc81614090565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061412f602b83613694565b915061413a826140d3565b604082019050919050565b6000602082019050818103600083015261415e81614122565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141ce8261373b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614200576141ff614194565b5b600182019050919050565b600081905092915050565b50565b600061422660008361420b565b915061423182614216565b600082019050919050565b600061424782614219565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006142ad602c83613694565b91506142b882614251565b604082019050919050565b600060208201905081810360008301526142dc816142a0565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026143457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614308565b61434f8683614308565b95508019841693508086168417925050509392505050565b6000819050919050565b600061438c6143876143828461373b565b614367565b61373b565b9050919050565b6000819050919050565b6143a683614371565b6143ba6143b282614393565b848454614315565b825550505050565b600090565b6143cf6143c2565b6143da81848461439d565b505050565b5b818110156143fe576143f36000826143c7565b6001810190506143e0565b5050565b601f82111561444357614414816142e3565b61441d846142f8565b8101602085101561442c578190505b614440614438856142f8565b8301826143df565b50505b505050565b600082821c905092915050565b600061446660001984600802614448565b1980831691505092915050565b600061447f8383614455565b9150826002028217905092915050565b61449882613689565b67ffffffffffffffff8111156144b1576144b06139fa565b5b6144bb8254613e5a565b6144c6828285614402565b600060209050601f8311600181146144f957600084156144e7578287015190505b6144f18582614473565b865550614559565b601f198416614507866142e3565b60005b8281101561452f5784890151825560018201915060208501945060208101905061450a565b8683101561454c5784890151614548601f891682614455565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006145bd602983613694565b91506145c882614561565b604082019050919050565b600060208201905081810360008301526145ec816145b0565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061464f602a83613694565b915061465a826145f3565b604082019050919050565b6000602082019050818103600083015261467e81614642565b9050919050565b7f506c657365205761697420666f722074686520636f756e63696c2e0000000000600082015250565b60006146bb601b83613694565b91506146c682614685565b602082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b7f486f77206d616e7920646f20796f752077616e743f0000000000000000000000600082015250565b6000614727601583613694565b9150614732826146f1565b602082019050919050565b600060208201905081810360008301526147568161471a565b9050919050565b7f596f75207061727479206c6f6f6b2066756c6c207374696c6c2077616e74207460008201527f6f206d696e74207468656d3f0000000000000000000000000000000000000000602082015250565b60006147b9602c83613694565b91506147c48261475d565b604082019050919050565b600060208201905081810360008301526147e8816147ac565b9050919050565b60006147fa8261373b565b91506148058361373b565b925082820190508082111561481d5761481c614194565b5b92915050565b7f446f20796f75206861766520616e20496e766974652043617264203f00000000600082015250565b6000614859601c83613694565b915061486482614823565b602082019050919050565b600060208201905081810360008301526148888161484c565b9050919050565b600061489a8261373b565b91506148a58361373b565b92508282026148b38161373b565b915082820484148315176148ca576148c9614194565b5b5092915050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b6000614907601283613694565b9150614912826148d1565b602082019050919050565b60006020820190508181036000830152614936816148fa565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614973601983613694565b915061497e8261493d565b602082019050919050565b600060208201905081810360008301526149a281614966565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614a05602f83613694565b9150614a10826149a9565b604082019050919050565b60006020820190508181036000830152614a34816149f8565b9050919050565b600081905092915050565b6000614a5182613689565b614a5b8185614a3b565b9350614a6b8185602086016136a5565b80840191505092915050565b60008154614a8481613e5a565b614a8e8186614a3b565b94506001821660008114614aa95760018114614abe57614af1565b60ff1983168652811515820286019350614af1565b614ac7856142e3565b60005b83811015614ae957815481890152600182019150602081019050614aca565b838801955050505b50505092915050565b6000614b068286614a46565b9150614b128285614a46565b9150614b1e8284614a77565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b87602683613694565b9150614b9282614b2b565b604082019050919050565b60006020820190508181036000830152614bb681614b7a565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614c19602c83613694565b9150614c2482614bbd565b604082019050919050565b60006020820190508181036000830152614c4881614c0c565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614cab602983613694565b9150614cb682614c4f565b604082019050919050565b60006020820190508181036000830152614cda81614c9e565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d3d602483613694565b9150614d4882614ce1565b604082019050919050565b60006020820190508181036000830152614d6c81614d30565b9050919050565b6000614d7e8261373b565b9150614d898361373b565b9250828203905081811115614da157614da0614194565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614e03603283613694565b9150614e0e82614da7565b604082019050919050565b60006020820190508181036000830152614e3281614df6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e738261373b565b9150614e7e8361373b565b925082614e8e57614e8d614e39565b5b828204905092915050565b6000614ea48261373b565b9150614eaf8361373b565b925082614ebf57614ebe614e39565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614ef182614eca565b614efb8185614ed5565b9350614f0b8185602086016136a5565b614f14816136cf565b840191505092915050565b6000608082019050614f3460008301876137d0565b614f4160208301866137d0565b614f4e6040830185613866565b8181036060830152614f608184614ee6565b905095945050505050565b600081519050614f7a816135a1565b92915050565b600060208284031215614f9657614f9561356b565b5b6000614fa484828501614f6b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615012602083613694565b915061501d82614fdc565b602082019050919050565b6000602082019050818103600083015261504181615005565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061507e601c83613694565b915061508982615048565b602082019050919050565b600060208201905081810360008301526150ad81615071565b905091905056fea264697066735822122039ca8096080d446f70111ba10b8dc392488f003b8b6ae239ee02491b34ce66ce64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000b4361745f436f756e63696c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002434300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Cat_Council
Arg [1] : _symbol (string): CC
Arg [2] : _initBaseURI (string): ,
Arg [3] : _initNotRevealedUri (string):
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [5] : 4361745f436f756e63696c000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4343000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [9] : 2c00000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
43119:4598:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34666:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46917:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22558:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24117:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43273:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23640:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43306:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35306:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43604:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43377:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25007:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34974:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45046:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46998:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47252:462;;;:::i;:::-;;25417:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45291:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46349:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35496:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43491:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46557:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43460:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22252:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43205:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21982:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42455:94;;;;;;;;;;;;;:::i;:::-;;46435:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41804:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22727:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43523:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44057:981;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24410:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46164:65;;;;;;;;;;;;;:::i;:::-;;25673:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43562:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43415:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43231:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45645:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46237:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43342:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46661:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24776:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47101:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46791:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42704:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34666:224;34768:4;34807:35;34792:50;;;:11;:50;;;;:90;;;;34846:36;34870:11;34846:23;:36::i;:::-;34792:90;34785:97;;34666:224;;;:::o;46917:73::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46978:6:::1;46969;;:15;;;;;;;;;;;;;;;;;;46917:73:::0;:::o;22558:100::-;22612:13;22645:5;22638:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22558:100;:::o;24117:221::-;24193:7;24221:16;24229:7;24221;:16::i;:::-;24213:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24306:15;:24;24322:7;24306:24;;;;;;;;;;;;;;;;;;;;;24299:31;;24117:221;;;:::o;43273:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23640:411::-;23721:13;23737:23;23752:7;23737:14;:23::i;:::-;23721:39;;23785:5;23779:11;;:2;:11;;;23771:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23879:5;23863:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23888:37;23905:5;23912:12;:10;:12::i;:::-;23888:16;:37::i;:::-;23863:62;23841:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24022:21;24031:2;24035:7;24022:8;:21::i;:::-;23710:341;23640:411;;:::o;43306:31::-;;;;:::o;35306:113::-;35367:7;35394:10;:17;;;;35387:24;;35306:113;:::o;43604:55::-;;;;;;;;;;;;;;;;;:::o;43377:33::-;;;;:::o;25007:339::-;25202:41;25221:12;:10;:12::i;:::-;25235:7;25202:18;:41::i;:::-;25194:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25310:28;25320:4;25326:2;25330:7;25310:9;:28::i;:::-;25007:339;;;:::o;34974:256::-;35071:7;35107:23;35124:5;35107:16;:23::i;:::-;35099:5;:31;35091:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35196:12;:19;35209:5;35196:19;;;;;;;;;;;;;;;:26;35216:5;35196:26;;;;;;;;;;;;35189:33;;34974:256;;;;:::o;45046:239::-;45105:4;45123:6;45132:1;45123:10;;45118:143;45139:20;:27;;;;45135:1;:31;45118:143;;;45213:5;45186:32;;:20;45207:1;45186:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;45182:72;;45240:4;45233:11;;;;;45182:72;45168:3;;;;;:::i;:::-;;;;45118:143;;;;45274:5;45267:12;;45046:239;;;;:::o;46998:95::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47081:6:::1;47063:15;;:24;;;;;;;;;;;;;;;;;;46998:95:::0;:::o;47252:462::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47536:7:::1;47557;:5;:7::i;:::-;47549:21;;47578;47549:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47535:69;;;47619:2;47611:11;;;::::0;::::1;;47297:417;47252:462::o:0;25417:185::-;25555:39;25572:4;25578:2;25582:7;25555:39;;;;;;;;;;;;:16;:39::i;:::-;25417:185;;;:::o;45291:348::-;45366:16;45394:23;45420:17;45430:6;45420:9;:17::i;:::-;45394:43;;45444:25;45486:15;45472:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45444:58;;45514:9;45509:103;45529:15;45525:1;:19;45509:103;;;45574:30;45594:6;45602:1;45574:19;:30::i;:::-;45560:8;45569:1;45560:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;45546:3;;;;;:::i;:::-;;;;45509:103;;;;45625:8;45618:15;;;;45291:348;;;:::o;46349:80::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46415:8:::1;46408:4;:15;;;;46349:80:::0;:::o;35496:233::-;35571:7;35607:30;:28;:30::i;:::-;35599:5;:38;35591:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35704:10;35715:5;35704:17;;;;;;;;:::i;:::-;;;;;;;;;;35697:24;;35496:233;;;:::o;43491:27::-;;;;;;;;;;;;;:::o;46557:98::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46638:11:::1;46628:7;:21;;;;;;:::i;:::-;;46557:98:::0;:::o;43460:26::-;;;;;;;;;;;;;:::o;22252:239::-;22324:7;22344:13;22360:7;:16;22368:7;22360:16;;;;;;;;;;;;;;;;;;;;;22344:32;;22412:1;22395:19;;:5;:19;;;22387:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22478:5;22471:12;;;22252:239;;;:::o;43205:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21982:208::-;22054:7;22099:1;22082:19;;:5;:19;;;22074:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22166:9;:16;22176:5;22166:16;;;;;;;;;;;;;;;;22159:23;;21982:208;;;:::o;42455:94::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42520:21:::1;42538:1;42520:9;:21::i;:::-;42455:94::o:0;46435:116::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46528:17:::1;46512:13;:33;;;;46435:116:::0;:::o;41804:87::-;41850:7;41877:6;;;;;;;;;;;41870:13;;41804:87;:::o;22727:104::-;22783:13;22816:7;22809:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22727:104;:::o;43523:34::-;;;;;;;;;;;;;:::o;44057:981::-;44123:6;;;;;;;;;;;44122:7;44114:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;44168:14;44185:13;:11;:13::i;:::-;44168:30;;44227:1;44213:11;:15;44205:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;44284:13;;44269:11;:28;;44261:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;44385:9;;44370:11;44361:6;:20;;;;:::i;:::-;:33;;44353:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;44470:7;:5;:7::i;:::-;44456:21;;:10;:21;;;44452:437;;44512:4;44493:23;;:15;;;;;;;;;;;:23;;;44490:319;;44541:25;44555:10;44541:13;:25::i;:::-;44533:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;44614:24;44641:20;:32;44662:10;44641:32;;;;;;;;;;;;;;;;44614:59;;44730:18;;44715:11;44696:16;:30;;;;:::i;:::-;:52;;44688:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;44518:291;44490:319;44847:11;44840:4;;:18;;;;:::i;:::-;44827:9;:31;;44819:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44452:437;44902:9;44914:1;44902:13;;44897:136;44922:11;44917:1;:16;44897:136;;44949:20;:32;44970:10;44949:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;44992:33;45002:10;45023:1;45014:6;:10;;;;:::i;:::-;44992:9;:33::i;:::-;44935:3;;;;;:::i;:::-;;;;44897:136;;;;44107:931;44057:981;:::o;24410:295::-;24525:12;:10;:12::i;:::-;24513:24;;:8;:24;;;24505:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24625:8;24580:18;:32;24599:12;:10;:12::i;:::-;24580:32;;;;;;;;;;;;;;;:42;24613:8;24580:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24678:8;24649:48;;24664:12;:10;:12::i;:::-;24649:48;;;24688:8;24649:48;;;;;;:::i;:::-;;;;;;;;24410:295;;:::o;46164:65::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46219:4:::1;46208:8;;:15;;;;;;;;;;;;;;;;;;46164:65::o:0;25673:328::-;25848:41;25867:12;:10;:12::i;:::-;25881:7;25848:18;:41::i;:::-;25840:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25954:39;25968:4;25974:2;25978:7;25987:5;25954:13;:39::i;:::-;25673:328;;;;:::o;43562:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43415:40::-;;;;:::o;43231:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45645:497::-;45743:13;45784:16;45792:7;45784;:16::i;:::-;45768:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;45893:5;45881:17;;:8;;;;;;;;;;;:17;;;45878:62;;45918:14;45911:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45878:62;45948:28;45979:10;:8;:10::i;:::-;45948:41;;46034:1;46009:14;46003:28;:32;:133;;;;;;;;;;;;;;;;;46071:14;46087:18;:7;:16;:18::i;:::-;46107:13;46054:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46003:133;45996:140;;;45645:497;;;;:::o;46237:104::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46329:6:::1;46308:18;:27;;;;46237:104:::0;:::o;43342:30::-;;;;:::o;46661:122::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46760:17:::1;46744:13;:33;;;;;;:::i;:::-;;46661:122:::0;:::o;24776:164::-;24873:4;24897:18;:25;24916:5;24897:25;;;;;;;;;;;;;;;:35;24923:8;24897:35;;;;;;;;;;;;;;;;;;;;;;;;;24890:42;;24776:164;;;;:::o;47101:144::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47183:20:::1;;47176:27;;;;:::i;:::-;47233:6;;47210:20;:29;;;;;;;:::i;:::-;;47101:144:::0;;:::o;46791:120::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46890:15:::1;46873:14;:32;;;;;;:::i;:::-;;46791:120:::0;:::o;42704:192::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42813:1:::1;42793:22;;:8;:22;;::::0;42785:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42869:19;42879:8;42869:9;:19::i;:::-;42704:192:::0;:::o;21613:305::-;21715:4;21767:25;21752:40;;;:11;:40;;;;:105;;;;21824:33;21809:48;;;:11;:48;;;;21752:105;:158;;;;21874:36;21898:11;21874:23;:36::i;:::-;21752:158;21732:178;;21613:305;;;:::o;20087:98::-;20140:7;20167:10;20160:17;;20087:98;:::o;27511:127::-;27576:4;27628:1;27600:30;;:7;:16;27608:7;27600:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27593:37;;27511:127;;;:::o;31493:174::-;31595:2;31568:15;:24;31584:7;31568:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31651:7;31647:2;31613:46;;31622:23;31637:7;31622:14;:23::i;:::-;31613:46;;;;;;;;;;;;31493:174;;:::o;27805:348::-;27898:4;27923:16;27931:7;27923;:16::i;:::-;27915:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27999:13;28015:23;28030:7;28015:14;:23::i;:::-;27999:39;;28068:5;28057:16;;:7;:16;;;:51;;;;28101:7;28077:31;;:20;28089:7;28077:11;:20::i;:::-;:31;;;28057:51;:87;;;;28112:32;28129:5;28136:7;28112:16;:32::i;:::-;28057:87;28049:96;;;27805:348;;;;:::o;30797:578::-;30956:4;30929:31;;:23;30944:7;30929:14;:23::i;:::-;:31;;;30921:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31039:1;31025:16;;:2;:16;;;31017:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31095:39;31116:4;31122:2;31126:7;31095:20;:39::i;:::-;31199:29;31216:1;31220:7;31199:8;:29::i;:::-;31260:1;31241:9;:15;31251:4;31241:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31289:1;31272:9;:13;31282:2;31272:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31320:2;31301:7;:16;31309:7;31301:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31359:7;31355:2;31340:27;;31349:4;31340:27;;;;;;;;;;;;30797:578;;;:::o;42904:173::-;42960:16;42979:6;;;;;;;;;;;42960:25;;43005:8;42996:6;;:17;;;;;;;;;;;;;;;;;;43060:8;43029:40;;43050:8;43029:40;;;;;;;;;;;;42949:128;42904:173;:::o;28495:110::-;28571:26;28581:2;28585:7;28571:26;;;;;;;;;;;;:9;:26::i;:::-;28495:110;;:::o;26883:315::-;27040:28;27050:4;27056:2;27060:7;27040:9;:28::i;:::-;27087:48;27110:4;27116:2;27120:7;27129:5;27087:22;:48::i;:::-;27079:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26883:315;;;;:::o;43936:102::-;43996:13;44025:7;44018:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43936:102;:::o;7919:723::-;7975:13;8205:1;8196:5;:10;8192:53;;8223:10;;;;;;;;;;;;;;;;;;;;;8192:53;8255:12;8270:5;8255:20;;8286:14;8311:78;8326:1;8318:4;:9;8311:78;;8344:8;;;;;:::i;:::-;;;;8375:2;8367:10;;;;;:::i;:::-;;;8311:78;;;8399:19;8431:6;8421:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8399:39;;8449:154;8465:1;8456:5;:10;8449:154;;8493:1;8483:11;;;;;:::i;:::-;;;8560:2;8552:5;:10;;;;:::i;:::-;8539:2;:24;;;;:::i;:::-;8526:39;;8509:6;8516;8509:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8589:2;8580:11;;;;;:::i;:::-;;;8449:154;;;8627:6;8613:21;;;;;7919:723;;;;:::o;7444:157::-;7529:4;7568:25;7553:40;;;:11;:40;;;;7546:47;;7444:157;;;:::o;36342:589::-;36486:45;36513:4;36519:2;36523:7;36486:26;:45::i;:::-;36564:1;36548:18;;:4;:18;;;36544:187;;36583:40;36615:7;36583:31;:40::i;:::-;36544:187;;;36653:2;36645:10;;:4;:10;;;36641:90;;36672:47;36705:4;36711:7;36672:32;:47::i;:::-;36641:90;36544:187;36759:1;36745:16;;:2;:16;;;36741:183;;36778:45;36815:7;36778:36;:45::i;:::-;36741:183;;;36851:4;36845:10;;:2;:10;;;36841:83;;36872:40;36900:2;36904:7;36872:27;:40::i;:::-;36841:83;36741:183;36342:589;;;:::o;28832:321::-;28962:18;28968:2;28972:7;28962:5;:18::i;:::-;29013:54;29044:1;29048:2;29052:7;29061:5;29013:22;:54::i;:::-;28991:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28832:321;;;:::o;32232:799::-;32387:4;32408:15;:2;:13;;;:15::i;:::-;32404:620;;;32460:2;32444:36;;;32481:12;:10;:12::i;:::-;32495:4;32501:7;32510:5;32444:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32440:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32703:1;32686:6;:13;:18;32682:272;;32729:60;;;;;;;;;;:::i;:::-;;;;;;;;32682:272;32904:6;32898:13;32889:6;32885:2;32881:15;32874:38;32440:529;32577:41;;;32567:51;;;:6;:51;;;;32560:58;;;;;32404:620;33008:4;33001:11;;32232:799;;;;;;;:::o;33603:126::-;;;;:::o;37654:164::-;37758:10;:17;;;;37731:15;:24;37747:7;37731:24;;;;;;;;;;;:44;;;;37786:10;37802:7;37786:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37654:164;:::o;38445:988::-;38711:22;38761:1;38736:22;38753:4;38736:16;:22::i;:::-;:26;;;;:::i;:::-;38711:51;;38773:18;38794:17;:26;38812:7;38794:26;;;;;;;;;;;;38773:47;;38941:14;38927:10;:28;38923:328;;38972:19;38994:12;:18;39007:4;38994:18;;;;;;;;;;;;;;;:34;39013:14;38994:34;;;;;;;;;;;;38972:56;;39078:11;39045:12;:18;39058:4;39045:18;;;;;;;;;;;;;;;:30;39064:10;39045:30;;;;;;;;;;;:44;;;;39195:10;39162:17;:30;39180:11;39162:30;;;;;;;;;;;:43;;;;38957:294;38923:328;39347:17;:26;39365:7;39347:26;;;;;;;;;;;39340:33;;;39391:12;:18;39404:4;39391:18;;;;;;;;;;;;;;;:34;39410:14;39391:34;;;;;;;;;;;39384:41;;;38526:907;;38445:988;;:::o;39728:1079::-;39981:22;40026:1;40006:10;:17;;;;:21;;;;:::i;:::-;39981:46;;40038:18;40059:15;:24;40075:7;40059:24;;;;;;;;;;;;40038:45;;40410:19;40432:10;40443:14;40432:26;;;;;;;;:::i;:::-;;;;;;;;;;40410:48;;40496:11;40471:10;40482;40471:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40607:10;40576:15;:28;40592:11;40576:28;;;;;;;;;;;:41;;;;40748:15;:24;40764:7;40748:24;;;;;;;;;;;40741:31;;;40783:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39799:1008;;;39728:1079;:::o;37232:221::-;37317:14;37334:20;37351:2;37334:16;:20::i;:::-;37317:37;;37392:7;37365:12;:16;37378:2;37365:16;;;;;;;;;;;;;;;:24;37382:6;37365:24;;;;;;;;;;;:34;;;;37439:6;37410:17;:26;37428:7;37410:26;;;;;;;;;;;:35;;;;37306:147;37232:221;;:::o;29489:382::-;29583:1;29569:16;;:2;:16;;;29561:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29642:16;29650:7;29642;:16::i;:::-;29641:17;29633:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29704:45;29733:1;29737:2;29741:7;29704:20;:45::i;:::-;29779:1;29762:9;:13;29772:2;29762:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29810:2;29791:7;:16;29799:7;29791:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29855:7;29851:2;29830:33;;29847:1;29830:33;;;;;;;;;;;;29489:382;;:::o;10444:387::-;10504:4;10712:12;10779:7;10767:20;10759:28;;10822:1;10815:4;:8;10808:15;;;10444:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:246::-;2469:1;2479:113;2493:6;2490:1;2487:13;2479:113;;;2578:1;2573:3;2569:11;2563:18;2559:1;2554:3;2550:11;2543:39;2515:2;2512:1;2508:10;2503:15;;2479:113;;;2626:1;2617:6;2612:3;2608:16;2601:27;2450:184;2388:246;;;:::o;2640:102::-;2681:6;2732:2;2728:7;2723:2;2716:5;2712:14;2708:28;2698:38;;2640:102;;;:::o;2748:377::-;2836:3;2864:39;2897:5;2864:39;:::i;:::-;2919:71;2983:6;2978:3;2919:71;:::i;:::-;2912:78;;2999:65;3057:6;3052:3;3045:4;3038:5;3034:16;2999:65;:::i;:::-;3089:29;3111:6;3089:29;:::i;:::-;3084:3;3080:39;3073:46;;2840:285;2748:377;;;;:::o;3131:313::-;3244:4;3282:2;3271:9;3267:18;3259:26;;3331:9;3325:4;3321:20;3317:1;3306:9;3302:17;3295:47;3359:78;3432:4;3423:6;3359:78;:::i;:::-;3351:86;;3131:313;;;;:::o;3450:77::-;3487:7;3516:5;3505:16;;3450:77;;;:::o;3533:122::-;3606:24;3624:5;3606:24;:::i;:::-;3599:5;3596:35;3586:63;;3645:1;3642;3635:12;3586:63;3533:122;:::o;3661:139::-;3707:5;3745:6;3732:20;3723:29;;3761:33;3788:5;3761:33;:::i;:::-;3661:139;;;;:::o;3806:329::-;3865:6;3914:2;3902:9;3893:7;3889:23;3885:32;3882:119;;;3920:79;;:::i;:::-;3882:119;4040:1;4065:53;4110:7;4101:6;4090:9;4086:22;4065:53;:::i;:::-;4055:63;;4011:117;3806:329;;;;:::o;4141:126::-;4178:7;4218:42;4211:5;4207:54;4196:65;;4141:126;;;:::o;4273:96::-;4310:7;4339:24;4357:5;4339:24;:::i;:::-;4328:35;;4273:96;;;:::o;4375:118::-;4462:24;4480:5;4462:24;:::i;:::-;4457:3;4450:37;4375:118;;:::o;4499:222::-;4592:4;4630:2;4619:9;4615:18;4607:26;;4643:71;4711:1;4700:9;4696:17;4687:6;4643:71;:::i;:::-;4499:222;;;;:::o;4727:122::-;4800:24;4818:5;4800:24;:::i;:::-;4793:5;4790:35;4780:63;;4839:1;4836;4829:12;4780:63;4727:122;:::o;4855:139::-;4901:5;4939:6;4926:20;4917:29;;4955:33;4982:5;4955:33;:::i;:::-;4855:139;;;;:::o;5000:474::-;5068:6;5076;5125:2;5113:9;5104:7;5100:23;5096:32;5093:119;;;5131:79;;:::i;:::-;5093:119;5251:1;5276:53;5321:7;5312:6;5301:9;5297:22;5276:53;:::i;:::-;5266:63;;5222:117;5378:2;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5349:118;5000:474;;;;;:::o;5480:118::-;5567:24;5585:5;5567:24;:::i;:::-;5562:3;5555:37;5480:118;;:::o;5604:222::-;5697:4;5735:2;5724:9;5720:18;5712:26;;5748:71;5816:1;5805:9;5801:17;5792:6;5748:71;:::i;:::-;5604:222;;;;:::o;5832:329::-;5891:6;5940:2;5928:9;5919:7;5915:23;5911:32;5908:119;;;5946:79;;:::i;:::-;5908:119;6066:1;6091:53;6136:7;6127:6;6116:9;6112:22;6091:53;:::i;:::-;6081:63;;6037:117;5832:329;;;;:::o;6167:619::-;6244:6;6252;6260;6309:2;6297:9;6288:7;6284:23;6280:32;6277:119;;;6315:79;;:::i;:::-;6277:119;6435:1;6460:53;6505:7;6496:6;6485:9;6481:22;6460:53;:::i;:::-;6450:63;;6406:117;6562:2;6588:53;6633:7;6624:6;6613:9;6609:22;6588:53;:::i;:::-;6578:63;;6533:118;6690:2;6716:53;6761:7;6752:6;6741:9;6737:22;6716:53;:::i;:::-;6706:63;;6661:118;6167:619;;;;;:::o;6792:114::-;6859:6;6893:5;6887:12;6877:22;;6792:114;;;:::o;6912:184::-;7011:11;7045:6;7040:3;7033:19;7085:4;7080:3;7076:14;7061:29;;6912:184;;;;:::o;7102:132::-;7169:4;7192:3;7184:11;;7222:4;7217:3;7213:14;7205:22;;7102:132;;;:::o;7240:108::-;7317:24;7335:5;7317:24;:::i;:::-;7312:3;7305:37;7240:108;;:::o;7354:179::-;7423:10;7444:46;7486:3;7478:6;7444:46;:::i;:::-;7522:4;7517:3;7513:14;7499:28;;7354:179;;;;:::o;7539:113::-;7609:4;7641;7636:3;7632:14;7624:22;;7539:113;;;:::o;7688:732::-;7807:3;7836:54;7884:5;7836:54;:::i;:::-;7906:86;7985:6;7980:3;7906:86;:::i;:::-;7899:93;;8016:56;8066:5;8016:56;:::i;:::-;8095:7;8126:1;8111:284;8136:6;8133:1;8130:13;8111:284;;;8212:6;8206:13;8239:63;8298:3;8283:13;8239:63;:::i;:::-;8232:70;;8325:60;8378:6;8325:60;:::i;:::-;8315:70;;8171:224;8158:1;8155;8151:9;8146:14;;8111:284;;;8115:14;8411:3;8404:10;;7812:608;;;7688:732;;;;:::o;8426:373::-;8569:4;8607:2;8596:9;8592:18;8584:26;;8656:9;8650:4;8646:20;8642:1;8631:9;8627:17;8620:47;8684:108;8787:4;8778:6;8684:108;:::i;:::-;8676:116;;8426:373;;;;:::o;8805:117::-;8914:1;8911;8904:12;8928:117;9037:1;9034;9027:12;9051:180;9099:77;9096:1;9089:88;9196:4;9193:1;9186:15;9220:4;9217:1;9210:15;9237:281;9320:27;9342:4;9320:27;:::i;:::-;9312:6;9308:40;9450:6;9438:10;9435:22;9414:18;9402:10;9399:34;9396:62;9393:88;;;9461:18;;:::i;:::-;9393:88;9501:10;9497:2;9490:22;9280:238;9237:281;;:::o;9524:129::-;9558:6;9585:20;;:::i;:::-;9575:30;;9614:33;9642:4;9634:6;9614:33;:::i;:::-;9524:129;;;:::o;9659:308::-;9721:4;9811:18;9803:6;9800:30;9797:56;;;9833:18;;:::i;:::-;9797:56;9871:29;9893:6;9871:29;:::i;:::-;9863:37;;9955:4;9949;9945:15;9937:23;;9659:308;;;:::o;9973:146::-;10070:6;10065:3;10060;10047:30;10111:1;10102:6;10097:3;10093:16;10086:27;9973:146;;;:::o;10125:425::-;10203:5;10228:66;10244:49;10286:6;10244:49;:::i;:::-;10228:66;:::i;:::-;10219:75;;10317:6;10310:5;10303:21;10355:4;10348:5;10344:16;10393:3;10384:6;10379:3;10375:16;10372:25;10369:112;;;10400:79;;:::i;:::-;10369:112;10490:54;10537:6;10532:3;10527;10490:54;:::i;:::-;10209:341;10125:425;;;;;:::o;10570:340::-;10626:5;10675:3;10668:4;10660:6;10656:17;10652:27;10642:122;;10683:79;;:::i;:::-;10642:122;10800:6;10787:20;10825:79;10900:3;10892:6;10885:4;10877:6;10873:17;10825:79;:::i;:::-;10816:88;;10632:278;10570:340;;;;:::o;10916:509::-;10985:6;11034:2;11022:9;11013:7;11009:23;11005:32;11002:119;;;11040:79;;:::i;:::-;11002:119;11188:1;11177:9;11173:17;11160:31;11218:18;11210:6;11207:30;11204:117;;;11240:79;;:::i;:::-;11204:117;11345:63;11400:7;11391:6;11380:9;11376:22;11345:63;:::i;:::-;11335:73;;11131:287;10916:509;;;;:::o;11431:468::-;11496:6;11504;11553:2;11541:9;11532:7;11528:23;11524:32;11521:119;;;11559:79;;:::i;:::-;11521:119;11679:1;11704:53;11749:7;11740:6;11729:9;11725:22;11704:53;:::i;:::-;11694:63;;11650:117;11806:2;11832:50;11874:7;11865:6;11854:9;11850:22;11832:50;:::i;:::-;11822:60;;11777:115;11431:468;;;;;:::o;11905:307::-;11966:4;12056:18;12048:6;12045:30;12042:56;;;12078:18;;:::i;:::-;12042:56;12116:29;12138:6;12116:29;:::i;:::-;12108:37;;12200:4;12194;12190:15;12182:23;;11905:307;;;:::o;12218:423::-;12295:5;12320:65;12336:48;12377:6;12336:48;:::i;:::-;12320:65;:::i;:::-;12311:74;;12408:6;12401:5;12394:21;12446:4;12439:5;12435:16;12484:3;12475:6;12470:3;12466:16;12463:25;12460:112;;;12491:79;;:::i;:::-;12460:112;12581:54;12628:6;12623:3;12618;12581:54;:::i;:::-;12301:340;12218:423;;;;;:::o;12660:338::-;12715:5;12764:3;12757:4;12749:6;12745:17;12741:27;12731:122;;12772:79;;:::i;:::-;12731:122;12889:6;12876:20;12914:78;12988:3;12980:6;12973:4;12965:6;12961:17;12914:78;:::i;:::-;12905:87;;12721:277;12660:338;;;;:::o;13004:943::-;13099:6;13107;13115;13123;13172:3;13160:9;13151:7;13147:23;13143:33;13140:120;;;13179:79;;:::i;:::-;13140:120;13299:1;13324:53;13369:7;13360:6;13349:9;13345:22;13324:53;:::i;:::-;13314:63;;13270:117;13426:2;13452:53;13497:7;13488:6;13477:9;13473:22;13452:53;:::i;:::-;13442:63;;13397:118;13554:2;13580:53;13625:7;13616:6;13605:9;13601:22;13580:53;:::i;:::-;13570:63;;13525:118;13710:2;13699:9;13695:18;13682:32;13741:18;13733:6;13730:30;13727:117;;;13763:79;;:::i;:::-;13727:117;13868:62;13922:7;13913:6;13902:9;13898:22;13868:62;:::i;:::-;13858:72;;13653:287;13004:943;;;;;;;:::o;13953:474::-;14021:6;14029;14078:2;14066:9;14057:7;14053:23;14049:32;14046:119;;;14084:79;;:::i;:::-;14046:119;14204:1;14229:53;14274:7;14265:6;14254:9;14250:22;14229:53;:::i;:::-;14219:63;;14175:117;14331:2;14357:53;14402:7;14393:6;14382:9;14378:22;14357:53;:::i;:::-;14347:63;;14302:118;13953:474;;;;;:::o;14433:117::-;14542:1;14539;14532:12;14556:117;14665:1;14662;14655:12;14696:568;14769:8;14779:6;14829:3;14822:4;14814:6;14810:17;14806:27;14796:122;;14837:79;;:::i;:::-;14796:122;14950:6;14937:20;14927:30;;14980:18;14972:6;14969:30;14966:117;;;15002:79;;:::i;:::-;14966:117;15116:4;15108:6;15104:17;15092:29;;15170:3;15162:4;15154:6;15150:17;15140:8;15136:32;15133:41;15130:128;;;15177:79;;:::i;:::-;15130:128;14696:568;;;;;:::o;15270:559::-;15356:6;15364;15413:2;15401:9;15392:7;15388:23;15384:32;15381:119;;;15419:79;;:::i;:::-;15381:119;15567:1;15556:9;15552:17;15539:31;15597:18;15589:6;15586:30;15583:117;;;15619:79;;:::i;:::-;15583:117;15732:80;15804:7;15795:6;15784:9;15780:22;15732:80;:::i;:::-;15714:98;;;;15510:312;15270:559;;;;;:::o;15835:182::-;15975:34;15971:1;15963:6;15959:14;15952:58;15835:182;:::o;16023:366::-;16165:3;16186:67;16250:2;16245:3;16186:67;:::i;:::-;16179:74;;16262:93;16351:3;16262:93;:::i;:::-;16380:2;16375:3;16371:12;16364:19;;16023:366;;;:::o;16395:419::-;16561:4;16599:2;16588:9;16584:18;16576:26;;16648:9;16642:4;16638:20;16634:1;16623:9;16619:17;16612:47;16676:131;16802:4;16676:131;:::i;:::-;16668:139;;16395:419;;;:::o;16820:180::-;16868:77;16865:1;16858:88;16965:4;16962:1;16955:15;16989:4;16986:1;16979:15;17006:320;17050:6;17087:1;17081:4;17077:12;17067:22;;17134:1;17128:4;17124:12;17155:18;17145:81;;17211:4;17203:6;17199:17;17189:27;;17145:81;17273:2;17265:6;17262:14;17242:18;17239:38;17236:84;;17292:18;;:::i;:::-;17236:84;17057:269;17006:320;;;:::o;17332:231::-;17472:34;17468:1;17460:6;17456:14;17449:58;17541:14;17536:2;17528:6;17524:15;17517:39;17332:231;:::o;17569:366::-;17711:3;17732:67;17796:2;17791:3;17732:67;:::i;:::-;17725:74;;17808:93;17897:3;17808:93;:::i;:::-;17926:2;17921:3;17917:12;17910:19;;17569:366;;;:::o;17941:419::-;18107:4;18145:2;18134:9;18130:18;18122:26;;18194:9;18188:4;18184:20;18180:1;18169:9;18165:17;18158:47;18222:131;18348:4;18222:131;:::i;:::-;18214:139;;17941:419;;;:::o;18366:220::-;18506:34;18502:1;18494:6;18490:14;18483:58;18575:3;18570:2;18562:6;18558:15;18551:28;18366:220;:::o;18592:366::-;18734:3;18755:67;18819:2;18814:3;18755:67;:::i;:::-;18748:74;;18831:93;18920:3;18831:93;:::i;:::-;18949:2;18944:3;18940:12;18933:19;;18592:366;;;:::o;18964:419::-;19130:4;19168:2;19157:9;19153:18;19145:26;;19217:9;19211:4;19207:20;19203:1;19192:9;19188:17;19181:47;19245:131;19371:4;19245:131;:::i;:::-;19237:139;;18964:419;;;:::o;19389:243::-;19529:34;19525:1;19517:6;19513:14;19506:58;19598:26;19593:2;19585:6;19581:15;19574:51;19389:243;:::o;19638:366::-;19780:3;19801:67;19865:2;19860:3;19801:67;:::i;:::-;19794:74;;19877:93;19966:3;19877:93;:::i;:::-;19995:2;19990:3;19986:12;19979:19;;19638:366;;;:::o;20010:419::-;20176:4;20214:2;20203:9;20199:18;20191:26;;20263:9;20257:4;20253:20;20249:1;20238:9;20234:17;20227:47;20291:131;20417:4;20291:131;:::i;:::-;20283:139;;20010:419;;;:::o;20435:236::-;20575:34;20571:1;20563:6;20559:14;20552:58;20644:19;20639:2;20631:6;20627:15;20620:44;20435:236;:::o;20677:366::-;20819:3;20840:67;20904:2;20899:3;20840:67;:::i;:::-;20833:74;;20916:93;21005:3;20916:93;:::i;:::-;21034:2;21029:3;21025:12;21018:19;;20677:366;;;:::o;21049:419::-;21215:4;21253:2;21242:9;21238:18;21230:26;;21302:9;21296:4;21292:20;21288:1;21277:9;21273:17;21266:47;21330:131;21456:4;21330:131;:::i;:::-;21322:139;;21049:419;;;:::o;21474:230::-;21614:34;21610:1;21602:6;21598:14;21591:58;21683:13;21678:2;21670:6;21666:15;21659:38;21474:230;:::o;21710:366::-;21852:3;21873:67;21937:2;21932:3;21873:67;:::i;:::-;21866:74;;21949:93;22038:3;21949:93;:::i;:::-;22067:2;22062:3;22058:12;22051:19;;21710:366;;;:::o;22082:419::-;22248:4;22286:2;22275:9;22271:18;22263:26;;22335:9;22329:4;22325:20;22321:1;22310:9;22306:17;22299:47;22363:131;22489:4;22363:131;:::i;:::-;22355:139;;22082:419;;;:::o;22507:180::-;22555:77;22552:1;22545:88;22652:4;22649:1;22642:15;22676:4;22673:1;22666:15;22693:180;22741:77;22738:1;22731:88;22838:4;22835:1;22828:15;22862:4;22859:1;22852:15;22879:233;22918:3;22941:24;22959:5;22941:24;:::i;:::-;22932:33;;22987:66;22980:5;22977:77;22974:103;;23057:18;;:::i;:::-;22974:103;23104:1;23097:5;23093:13;23086:20;;22879:233;;;:::o;23118:147::-;23219:11;23256:3;23241:18;;23118:147;;;;:::o;23271:114::-;;:::o;23391:398::-;23550:3;23571:83;23652:1;23647:3;23571:83;:::i;:::-;23564:90;;23663:93;23752:3;23663:93;:::i;:::-;23781:1;23776:3;23772:11;23765:18;;23391:398;;;:::o;23795:379::-;23979:3;24001:147;24144:3;24001:147;:::i;:::-;23994:154;;24165:3;24158:10;;23795:379;;;:::o;24180:231::-;24320:34;24316:1;24308:6;24304:14;24297:58;24389:14;24384:2;24376:6;24372:15;24365:39;24180:231;:::o;24417:366::-;24559:3;24580:67;24644:2;24639:3;24580:67;:::i;:::-;24573:74;;24656:93;24745:3;24656:93;:::i;:::-;24774:2;24769:3;24765:12;24758:19;;24417:366;;;:::o;24789:419::-;24955:4;24993:2;24982:9;24978:18;24970:26;;25042:9;25036:4;25032:20;25028:1;25017:9;25013:17;25006:47;25070:131;25196:4;25070:131;:::i;:::-;25062:139;;24789:419;;;:::o;25214:141::-;25263:4;25286:3;25278:11;;25309:3;25306:1;25299:14;25343:4;25340:1;25330:18;25322:26;;25214:141;;;:::o;25361:93::-;25398:6;25445:2;25440;25433:5;25429:14;25425:23;25415:33;;25361:93;;;:::o;25460:107::-;25504:8;25554:5;25548:4;25544:16;25523:37;;25460:107;;;;:::o;25573:393::-;25642:6;25692:1;25680:10;25676:18;25715:97;25745:66;25734:9;25715:97;:::i;:::-;25833:39;25863:8;25852:9;25833:39;:::i;:::-;25821:51;;25905:4;25901:9;25894:5;25890:21;25881:30;;25954:4;25944:8;25940:19;25933:5;25930:30;25920:40;;25649:317;;25573:393;;;;;:::o;25972:60::-;26000:3;26021:5;26014:12;;25972:60;;;:::o;26038:142::-;26088:9;26121:53;26139:34;26148:24;26166:5;26148:24;:::i;:::-;26139:34;:::i;:::-;26121:53;:::i;:::-;26108:66;;26038:142;;;:::o;26186:75::-;26229:3;26250:5;26243:12;;26186:75;;;:::o;26267:269::-;26377:39;26408:7;26377:39;:::i;:::-;26438:91;26487:41;26511:16;26487:41;:::i;:::-;26479:6;26472:4;26466:11;26438:91;:::i;:::-;26432:4;26425:105;26343:193;26267:269;;;:::o;26542:73::-;26587:3;26542:73;:::o;26621:189::-;26698:32;;:::i;:::-;26739:65;26797:6;26789;26783:4;26739:65;:::i;:::-;26674:136;26621:189;;:::o;26816:186::-;26876:120;26893:3;26886:5;26883:14;26876:120;;;26947:39;26984:1;26977:5;26947:39;:::i;:::-;26920:1;26913:5;26909:13;26900:22;;26876:120;;;26816:186;;:::o;27008:543::-;27109:2;27104:3;27101:11;27098:446;;;27143:38;27175:5;27143:38;:::i;:::-;27227:29;27245:10;27227:29;:::i;:::-;27217:8;27213:44;27410:2;27398:10;27395:18;27392:49;;;27431:8;27416:23;;27392:49;27454:80;27510:22;27528:3;27510:22;:::i;:::-;27500:8;27496:37;27483:11;27454:80;:::i;:::-;27113:431;;27098:446;27008:543;;;:::o;27557:117::-;27611:8;27661:5;27655:4;27651:16;27630:37;;27557:117;;;;:::o;27680:169::-;27724:6;27757:51;27805:1;27801:6;27793:5;27790:1;27786:13;27757:51;:::i;:::-;27753:56;27838:4;27832;27828:15;27818:25;;27731:118;27680:169;;;;:::o;27854:295::-;27930:4;28076:29;28101:3;28095:4;28076:29;:::i;:::-;28068:37;;28138:3;28135:1;28131:11;28125:4;28122:21;28114:29;;27854:295;;;;:::o;28154:1395::-;28271:37;28304:3;28271:37;:::i;:::-;28373:18;28365:6;28362:30;28359:56;;;28395:18;;:::i;:::-;28359:56;28439:38;28471:4;28465:11;28439:38;:::i;:::-;28524:67;28584:6;28576;28570:4;28524:67;:::i;:::-;28618:1;28642:4;28629:17;;28674:2;28666:6;28663:14;28691:1;28686:618;;;;29348:1;29365:6;29362:77;;;29414:9;29409:3;29405:19;29399:26;29390:35;;29362:77;29465:67;29525:6;29518:5;29465:67;:::i;:::-;29459:4;29452:81;29321:222;28656:887;;28686:618;28738:4;28734:9;28726:6;28722:22;28772:37;28804:4;28772:37;:::i;:::-;28831:1;28845:208;28859:7;28856:1;28853:14;28845:208;;;28938:9;28933:3;28929:19;28923:26;28915:6;28908:42;28989:1;28981:6;28977:14;28967:24;;29036:2;29025:9;29021:18;29008:31;;28882:4;28879:1;28875:12;28870:17;;28845:208;;;29081:6;29072:7;29069:19;29066:179;;;29139:9;29134:3;29130:19;29124:26;29182:48;29224:4;29216:6;29212:17;29201:9;29182:48;:::i;:::-;29174:6;29167:64;29089:156;29066:179;29291:1;29287;29279:6;29275:14;29271:22;29265:4;29258:36;28693:611;;;28656:887;;28246:1303;;;28154:1395;;:::o;29555:228::-;29695:34;29691:1;29683:6;29679:14;29672:58;29764:11;29759:2;29751:6;29747:15;29740:36;29555:228;:::o;29789:366::-;29931:3;29952:67;30016:2;30011:3;29952:67;:::i;:::-;29945:74;;30028:93;30117:3;30028:93;:::i;:::-;30146:2;30141:3;30137:12;30130:19;;29789:366;;;:::o;30161:419::-;30327:4;30365:2;30354:9;30350:18;30342:26;;30414:9;30408:4;30404:20;30400:1;30389:9;30385:17;30378:47;30442:131;30568:4;30442:131;:::i;:::-;30434:139;;30161:419;;;:::o;30586:229::-;30726:34;30722:1;30714:6;30710:14;30703:58;30795:12;30790:2;30782:6;30778:15;30771:37;30586:229;:::o;30821:366::-;30963:3;30984:67;31048:2;31043:3;30984:67;:::i;:::-;30977:74;;31060:93;31149:3;31060:93;:::i;:::-;31178:2;31173:3;31169:12;31162:19;;30821:366;;;:::o;31193:419::-;31359:4;31397:2;31386:9;31382:18;31374:26;;31446:9;31440:4;31436:20;31432:1;31421:9;31417:17;31410:47;31474:131;31600:4;31474:131;:::i;:::-;31466:139;;31193:419;;;:::o;31618:177::-;31758:29;31754:1;31746:6;31742:14;31735:53;31618:177;:::o;31801:366::-;31943:3;31964:67;32028:2;32023:3;31964:67;:::i;:::-;31957:74;;32040:93;32129:3;32040:93;:::i;:::-;32158:2;32153:3;32149:12;32142:19;;31801:366;;;:::o;32173:419::-;32339:4;32377:2;32366:9;32362:18;32354:26;;32426:9;32420:4;32416:20;32412:1;32401:9;32397:17;32390:47;32454:131;32580:4;32454:131;:::i;:::-;32446:139;;32173:419;;;:::o;32598:171::-;32738:23;32734:1;32726:6;32722:14;32715:47;32598:171;:::o;32775:366::-;32917:3;32938:67;33002:2;32997:3;32938:67;:::i;:::-;32931:74;;33014:93;33103:3;33014:93;:::i;:::-;33132:2;33127:3;33123:12;33116:19;;32775:366;;;:::o;33147:419::-;33313:4;33351:2;33340:9;33336:18;33328:26;;33400:9;33394:4;33390:20;33386:1;33375:9;33371:17;33364:47;33428:131;33554:4;33428:131;:::i;:::-;33420:139;;33147:419;;;:::o;33572:231::-;33712:34;33708:1;33700:6;33696:14;33689:58;33781:14;33776:2;33768:6;33764:15;33757:39;33572:231;:::o;33809:366::-;33951:3;33972:67;34036:2;34031:3;33972:67;:::i;:::-;33965:74;;34048:93;34137:3;34048:93;:::i;:::-;34166:2;34161:3;34157:12;34150:19;;33809:366;;;:::o;34181:419::-;34347:4;34385:2;34374:9;34370:18;34362:26;;34434:9;34428:4;34424:20;34420:1;34409:9;34405:17;34398:47;34462:131;34588:4;34462:131;:::i;:::-;34454:139;;34181:419;;;:::o;34606:191::-;34646:3;34665:20;34683:1;34665:20;:::i;:::-;34660:25;;34699:20;34717:1;34699:20;:::i;:::-;34694:25;;34742:1;34739;34735:9;34728:16;;34763:3;34760:1;34757:10;34754:36;;;34770:18;;:::i;:::-;34754:36;34606:191;;;;:::o;34803:178::-;34943:30;34939:1;34931:6;34927:14;34920:54;34803:178;:::o;34987:366::-;35129:3;35150:67;35214:2;35209:3;35150:67;:::i;:::-;35143:74;;35226:93;35315:3;35226:93;:::i;:::-;35344:2;35339:3;35335:12;35328:19;;34987:366;;;:::o;35359:419::-;35525:4;35563:2;35552:9;35548:18;35540:26;;35612:9;35606:4;35602:20;35598:1;35587:9;35583:17;35576:47;35640:131;35766:4;35640:131;:::i;:::-;35632:139;;35359:419;;;:::o;35784:410::-;35824:7;35847:20;35865:1;35847:20;:::i;:::-;35842:25;;35881:20;35899:1;35881:20;:::i;:::-;35876:25;;35936:1;35933;35929:9;35958:30;35976:11;35958:30;:::i;:::-;35947:41;;36137:1;36128:7;36124:15;36121:1;36118:22;36098:1;36091:9;36071:83;36048:139;;36167:18;;:::i;:::-;36048:139;35832:362;35784:410;;;;:::o;36200:168::-;36340:20;36336:1;36328:6;36324:14;36317:44;36200:168;:::o;36374:366::-;36516:3;36537:67;36601:2;36596:3;36537:67;:::i;:::-;36530:74;;36613:93;36702:3;36613:93;:::i;:::-;36731:2;36726:3;36722:12;36715:19;;36374:366;;;:::o;36746:419::-;36912:4;36950:2;36939:9;36935:18;36927:26;;36999:9;36993:4;36989:20;36985:1;36974:9;36970:17;36963:47;37027:131;37153:4;37027:131;:::i;:::-;37019:139;;36746:419;;;:::o;37171:175::-;37311:27;37307:1;37299:6;37295:14;37288:51;37171:175;:::o;37352:366::-;37494:3;37515:67;37579:2;37574:3;37515:67;:::i;:::-;37508:74;;37591:93;37680:3;37591:93;:::i;:::-;37709:2;37704:3;37700:12;37693:19;;37352:366;;;:::o;37724:419::-;37890:4;37928:2;37917:9;37913:18;37905:26;;37977:9;37971:4;37967:20;37963:1;37952:9;37948:17;37941:47;38005:131;38131:4;38005:131;:::i;:::-;37997:139;;37724:419;;;:::o;38149:234::-;38289:34;38285:1;38277:6;38273:14;38266:58;38358:17;38353:2;38345:6;38341:15;38334:42;38149:234;:::o;38389:366::-;38531:3;38552:67;38616:2;38611:3;38552:67;:::i;:::-;38545:74;;38628:93;38717:3;38628:93;:::i;:::-;38746:2;38741:3;38737:12;38730:19;;38389:366;;;:::o;38761:419::-;38927:4;38965:2;38954:9;38950:18;38942:26;;39014:9;39008:4;39004:20;39000:1;38989:9;38985:17;38978:47;39042:131;39168:4;39042:131;:::i;:::-;39034:139;;38761:419;;;:::o;39186:148::-;39288:11;39325:3;39310:18;;39186:148;;;;:::o;39340:390::-;39446:3;39474:39;39507:5;39474:39;:::i;:::-;39529:89;39611:6;39606:3;39529:89;:::i;:::-;39522:96;;39627:65;39685:6;39680:3;39673:4;39666:5;39662:16;39627:65;:::i;:::-;39717:6;39712:3;39708:16;39701:23;;39450:280;39340:390;;;;:::o;39760:874::-;39863:3;39900:5;39894:12;39929:36;39955:9;39929:36;:::i;:::-;39981:89;40063:6;40058:3;39981:89;:::i;:::-;39974:96;;40101:1;40090:9;40086:17;40117:1;40112:166;;;;40292:1;40287:341;;;;40079:549;;40112:166;40196:4;40192:9;40181;40177:25;40172:3;40165:38;40258:6;40251:14;40244:22;40236:6;40232:35;40227:3;40223:45;40216:52;;40112:166;;40287:341;40354:38;40386:5;40354:38;:::i;:::-;40414:1;40428:154;40442:6;40439:1;40436:13;40428:154;;;40516:7;40510:14;40506:1;40501:3;40497:11;40490:35;40566:1;40557:7;40553:15;40542:26;;40464:4;40461:1;40457:12;40452:17;;40428:154;;;40611:6;40606:3;40602:16;40595:23;;40294:334;;40079:549;;39867:767;;39760:874;;;;:::o;40640:589::-;40865:3;40887:95;40978:3;40969:6;40887:95;:::i;:::-;40880:102;;40999:95;41090:3;41081:6;40999:95;:::i;:::-;40992:102;;41111:92;41199:3;41190:6;41111:92;:::i;:::-;41104:99;;41220:3;41213:10;;40640:589;;;;;;:::o;41235:225::-;41375:34;41371:1;41363:6;41359:14;41352:58;41444:8;41439:2;41431:6;41427:15;41420:33;41235:225;:::o;41466:366::-;41608:3;41629:67;41693:2;41688:3;41629:67;:::i;:::-;41622:74;;41705:93;41794:3;41705:93;:::i;:::-;41823:2;41818:3;41814:12;41807:19;;41466:366;;;:::o;41838:419::-;42004:4;42042:2;42031:9;42027:18;42019:26;;42091:9;42085:4;42081:20;42077:1;42066:9;42062:17;42055:47;42119:131;42245:4;42119:131;:::i;:::-;42111:139;;41838:419;;;:::o;42263:231::-;42403:34;42399:1;42391:6;42387:14;42380:58;42472:14;42467:2;42459:6;42455:15;42448:39;42263:231;:::o;42500:366::-;42642:3;42663:67;42727:2;42722:3;42663:67;:::i;:::-;42656:74;;42739:93;42828:3;42739:93;:::i;:::-;42857:2;42852:3;42848:12;42841:19;;42500:366;;;:::o;42872:419::-;43038:4;43076:2;43065:9;43061:18;43053:26;;43125:9;43119:4;43115:20;43111:1;43100:9;43096:17;43089:47;43153:131;43279:4;43153:131;:::i;:::-;43145:139;;42872:419;;;:::o;43297:228::-;43437:34;43433:1;43425:6;43421:14;43414:58;43506:11;43501:2;43493:6;43489:15;43482:36;43297:228;:::o;43531:366::-;43673:3;43694:67;43758:2;43753:3;43694:67;:::i;:::-;43687:74;;43770:93;43859:3;43770:93;:::i;:::-;43888:2;43883:3;43879:12;43872:19;;43531:366;;;:::o;43903:419::-;44069:4;44107:2;44096:9;44092:18;44084:26;;44156:9;44150:4;44146:20;44142:1;44131:9;44127:17;44120:47;44184:131;44310:4;44184:131;:::i;:::-;44176:139;;43903:419;;;:::o;44328:223::-;44468:34;44464:1;44456:6;44452:14;44445:58;44537:6;44532:2;44524:6;44520:15;44513:31;44328:223;:::o;44557:366::-;44699:3;44720:67;44784:2;44779:3;44720:67;:::i;:::-;44713:74;;44796:93;44885:3;44796:93;:::i;:::-;44914:2;44909:3;44905:12;44898:19;;44557:366;;;:::o;44929:419::-;45095:4;45133:2;45122:9;45118:18;45110:26;;45182:9;45176:4;45172:20;45168:1;45157:9;45153:17;45146:47;45210:131;45336:4;45210:131;:::i;:::-;45202:139;;44929:419;;;:::o;45354:194::-;45394:4;45414:20;45432:1;45414:20;:::i;:::-;45409:25;;45448:20;45466:1;45448:20;:::i;:::-;45443:25;;45492:1;45489;45485:9;45477:17;;45516:1;45510:4;45507:11;45504:37;;;45521:18;;:::i;:::-;45504:37;45354:194;;;;:::o;45554:237::-;45694:34;45690:1;45682:6;45678:14;45671:58;45763:20;45758:2;45750:6;45746:15;45739:45;45554:237;:::o;45797:366::-;45939:3;45960:67;46024:2;46019:3;45960:67;:::i;:::-;45953:74;;46036:93;46125:3;46036:93;:::i;:::-;46154:2;46149:3;46145:12;46138:19;;45797:366;;;:::o;46169:419::-;46335:4;46373:2;46362:9;46358:18;46350:26;;46422:9;46416:4;46412:20;46408:1;46397:9;46393:17;46386:47;46450:131;46576:4;46450:131;:::i;:::-;46442:139;;46169:419;;;:::o;46594:180::-;46642:77;46639:1;46632:88;46739:4;46736:1;46729:15;46763:4;46760:1;46753:15;46780:185;46820:1;46837:20;46855:1;46837:20;:::i;:::-;46832:25;;46871:20;46889:1;46871:20;:::i;:::-;46866:25;;46910:1;46900:35;;46915:18;;:::i;:::-;46900:35;46957:1;46954;46950:9;46945:14;;46780:185;;;;:::o;46971:176::-;47003:1;47020:20;47038:1;47020:20;:::i;:::-;47015:25;;47054:20;47072:1;47054:20;:::i;:::-;47049:25;;47093:1;47083:35;;47098:18;;:::i;:::-;47083:35;47139:1;47136;47132:9;47127:14;;46971:176;;;;:::o;47153:98::-;47204:6;47238:5;47232:12;47222:22;;47153:98;;;:::o;47257:168::-;47340:11;47374:6;47369:3;47362:19;47414:4;47409:3;47405:14;47390:29;;47257:168;;;;:::o;47431:373::-;47517:3;47545:38;47577:5;47545:38;:::i;:::-;47599:70;47662:6;47657:3;47599:70;:::i;:::-;47592:77;;47678:65;47736:6;47731:3;47724:4;47717:5;47713:16;47678:65;:::i;:::-;47768:29;47790:6;47768:29;:::i;:::-;47763:3;47759:39;47752:46;;47521:283;47431:373;;;;:::o;47810:640::-;48005:4;48043:3;48032:9;48028:19;48020:27;;48057:71;48125:1;48114:9;48110:17;48101:6;48057:71;:::i;:::-;48138:72;48206:2;48195:9;48191:18;48182:6;48138:72;:::i;:::-;48220;48288:2;48277:9;48273:18;48264:6;48220:72;:::i;:::-;48339:9;48333:4;48329:20;48324:2;48313:9;48309:18;48302:48;48367:76;48438:4;48429:6;48367:76;:::i;:::-;48359:84;;47810:640;;;;;;;:::o;48456:141::-;48512:5;48543:6;48537:13;48528:22;;48559:32;48585:5;48559:32;:::i;:::-;48456:141;;;;:::o;48603:349::-;48672:6;48721:2;48709:9;48700:7;48696:23;48692:32;48689:119;;;48727:79;;:::i;:::-;48689:119;48847:1;48872:63;48927:7;48918:6;48907:9;48903:22;48872:63;:::i;:::-;48862:73;;48818:127;48603:349;;;;:::o;48958:180::-;49006:77;49003:1;48996:88;49103:4;49100:1;49093:15;49127:4;49124:1;49117:15;49144:182;49284:34;49280:1;49272:6;49268:14;49261:58;49144:182;:::o;49332:366::-;49474:3;49495:67;49559:2;49554:3;49495:67;:::i;:::-;49488:74;;49571:93;49660:3;49571:93;:::i;:::-;49689:2;49684:3;49680:12;49673:19;;49332:366;;;:::o;49704:419::-;49870:4;49908:2;49897:9;49893:18;49885:26;;49957:9;49951:4;49947:20;49943:1;49932:9;49928:17;49921:47;49985:131;50111:4;49985:131;:::i;:::-;49977:139;;49704:419;;;:::o;50129:178::-;50269:30;50265:1;50257:6;50253:14;50246:54;50129:178;:::o;50313:366::-;50455:3;50476:67;50540:2;50535:3;50476:67;:::i;:::-;50469:74;;50552:93;50641:3;50552:93;:::i;:::-;50670:2;50665:3;50661:12;50654:19;;50313:366;;;:::o;50685:419::-;50851:4;50889:2;50878:9;50874:18;50866:26;;50938:9;50932:4;50928:20;50924:1;50913:9;50909:17;50902:47;50966:131;51092:4;50966:131;:::i;:::-;50958:139;;50685:419;;;:::o
Swarm Source
ipfs://39ca8096080d446f70111ba10b8dc392488f003b8b6ae239ee02491b34ce66ce