ERC-721
Overview
Max Total Supply
19 MTRZN
Holders
9
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 MTRZNLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Metarzan
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-21 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/[email protected]/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.0 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/[email protected]/utils/Counters.sol // OpenZeppelin Contracts v4.4.0 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/[email protected]/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (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/[email protected]/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (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/[email protected]/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/[email protected]/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (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/[email protected]/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (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/[email protected]/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (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/[email protected]/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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/[email protected]/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 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/[email protected]/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (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/[email protected]/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/[email protected]/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/Metarzan.sol pragma solidity ^0.8.0; /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add( out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF) ) out := shl(8, out) out := add( out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF) ) out := shl(8, out) out := add( out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF) ) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } } contract Metarzan is ERC721Enumerable, ReentrancyGuard, Ownable { using Counters for Counters.Counter; using Strings for uint256; using Base64 for bytes; Counters.Counter private _tokenIdCounter; string[] private skinC = [ "FFFFFF", "A0522D", "8d5524", "FFFAFA", "DEB887", "FFF5EE", "593123", "8B4513", "FAEBD7", "eac086", "D2B48C", "242424" ]; string[] private skinCN = [ "White", "Sienna", "Brown", "Snow", "Burly Wood", "SeaShell", "Black Brown", "Saddle Brown", "Antique White", "Caucasian", "Tan", "Black" ]; uint16[] private skinCD = [ 512, 512, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024, 1024 ]; string[] private eyes = [ "M7,10H8V11H9V12H15V11H16V10H17V11H16V12H8V11H7Z", "M7,12V11H8V10H16V11H17V12H16V11H15V10H9V11H8V12Z" ]; string[] private eyesC = ["5d0070", "06f006", "fc9320", "aaa000"]; string[] private eyesCN = ["Green", "Blue", "Brown", "Black"]; uint16[] private eyesCD = [2048, 2048, 2048, 2048]; string[] private earrings = [ "M3,14V13H4V14Z", "M20,14V13H21V14Z", "M3,14V13H21V14H20V13H4V14Z" ]; string[] private earringsN = ["Right", "Left", "Both"]; uint16[] private earringsD = [2544, 2544, 3104]; string[] private earringsC = [ "1F45FC", "FDD017", "6960EC", "00FFFF", "E41B17", "4AA02C", "F9B7FF", "59E817", "F6358A" ]; string[] private earringsCN = [ "Blue Orchid", "Bright Gold", "Blue Lotus", "Cyan", "Love Red", "Blossom Pink", "Spring Green", "Nebula Green", "Violet Red" ]; uint16[] private earringsCD = [ 1024, 1024, 512, 512, 1024, 512, 512, 1024, 2048 ]; string[] private tattoos = [ "M15,6V5H16V6H17V7H16V6Z", "M10,22V21H11V22H13V21H14V22H13V23H11V22Z", "M10,23V22H11V21H13V22H14V23H13V22H11V23Z", "M9,22V21H10V22H11V21H13V22H14V21H15V22H14V23H13V22H11V23H10V22Z", "M9,23V22H10V21H11V22H13V21H14V22H15V23H14V22H13V23H11V22H10V23Z" ]; string[] private tattoosN = ["I", "II", "III", "IV", "V"]; uint16[] private tattoosD = [1536, 1536, 1536, 1536, 2048]; string[] private tattoosC = ["333333", "881111"]; string[] private tattoosCN = ["Gray", "Blood"]; uint16[] private tattoosCD = [6000, 2192]; string[] private eyePatches = [ "M4,10V8H20V10H17V9H15V10H14V12H15V13H17V12H18V10H20V14H3V16H1V14H3V13H4V11H6V12H7V13H9V12H10V10H9V9H7V10H6V11H4Z", "M3,10V9H21V10H19V13H13V10H11V13H5V10Z", "M3,10V9H21V10H19V12H18V13H14V12H13V10H11V12H10V13H6V12H5V10Z", "M3,9V8H21V9H11V12H10V13H9V14H8V13H7V12H6V9Z", "M3,9V8H21V9H18V12H17V13H16V14H15V13H14V12H13V9Z" ]; string[] private eyePatchesN = [ "Ninja", "Sun Glasses I", "Sun Glasses II", "Right Pirate Patch", "Left Pirate Patch" ]; uint16[] private eyePatchesD = [2048, 1024, 2048, 1024, 2048]; string[] private eyePatchesC = [ "827839", "C35817", "2B65EC", "8C001A", "7D0552", "43C6DB", "FCDFFF", "FF00FF", "347C2C", "4B0082", "493D26", "C9BE62", "54C571", "342D7E", "25383C", "2C3539" ]; string[] private eyePatchesCN = [ "Moccasin", "Red Fox", "Ocean Blue", "Burgundy", "Plum Velvet", "Turquoise", "Cotton Candy", "Magenta", "Jungle Green", "Indigo", "Mocha", "Ginger Brown", "Zombie Green", "Blue Whale", "Dark Slate Gray", "Gunmetal" ]; uint16[] private eyePatchesCD = [ 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512 ]; string[] private hairs = [ "M6,4V1H18V4Z", "M4,6V4H5V3H6V2H18V3H19V4H20V6H18V5H17V4H7V5H6V6Z", "M4,13V9H3V5H4V4H5V3H6V2H18V3H19V4H20V5H21V9H20V13H19V6H18V5H17V4H7V5H6V6H5V13Z", "M2,20V6H3V5H4V4H5V3H6V2H18V3H19V4H20V5H21V6H22V17H22V20H21V18H20V22H19V20H18V24H17V20H18V19H19V17H20V13H21V10H20V9H19V6H18V5H17V4H7V5H6V6H5V9H4V10H3V13H4V18H5V19H6V20H7V24H6V20H5V22H4V18H3V20H2V6Z", "M2,20V6H3V5H4V4H5V3H6V2H18V3H19V4H20V5H21V6H22V17H22V20H21V18H20V22H19V20H18V24H17V20H18V19H19V17H20V13H21V10H20V9H19V6H18V5H17V4H11V7H10V4H9V8H8V4H7V8H6V6H5V9H4V10H3V13H4V18H5V19H6V20H7V24H6V20H5V22H4V18H3V20H2V6Z", "M2,20V6H3V5H4V4H5V3H6V2H18V3H19V4H20V5H21V6H22V20H21V21H20V22H19V23H18V24H17V20H18V19H19V18H20V13H21V10H20V9H19V6H18V5H17V4H7V5H6V6H5V9H4V10H3V13H4V18H5V19H6V20H7V24H6V23H5V22H4V21H3V20Z", "M2,20V6H3V5H4V4H5V3H6V2H18V3H19V4H20V5H21V6H22V20H21V21H20V22H19V23H18V24H17V20H18V19H19V18H20V13H21V10H20V9H19V6H18V5H17V4H15V6H13V8H11V10H9V12H7V14H5V16H4V18H5V19H6V20H7V24H6V23H5V22H4V21H3V20Z" ]; string[] private hairsN = [ "Classic Fade", "High Fade", "Pompadour", "Long Pushed Back", "Tarzan Cut", "Hockey", "Macho Long" ]; uint16[] private hairsD = [256, 256, 512, 1024, 2048, 2048, 2048]; string[] private hairsC = [ "000000", "625D5D", "EDDA74", "616D7E", "806517", "F0FFFF", "FFF8C6", "C68E17", "835C3B", "FFD801", "7E3817", "EBDDE2" ]; string[] private hairsCN = [ "Black", "Carbon Gray", "Goldenrod", "Jet Gray", "Oak Brown", "Azure", "Lemon Chiffon", "Caramel", "Brown Bear", "Golden", "Sangria", "Lavender Pinocchio" ]; uint16[] private hairsCD = [ 1536, 768, 512, 512, 768, 512, 512, 768, 512, 512, 768, 512 ]; string[] private hats = [ "XXX", "M3,8V4H4V3H5V2H6V1H7V0H17V1H18V2H19V3H20V4H21V8Z", "M3,6V4H5V0H19V4H21V6Z", "M1,5V6H20V1H4V5Z" ]; string[] private hatsN = ["None", "Beret", "Panama", "Cap"]; uint16[] private hatsD = [4096, 1024, 2048, 1024]; string[] private hatsC = [ "893BFF", "7D0541", "4C787E", "483C32", "9E7BFF", "AF9B60", "4863A0", "736AFF", "483C32", "000080", "800517" ]; string[] private hatsCN = [ "Aztech Purple", "Plum Pie", "Beetle Green", "Taupe", "Purple Mimosa", "Bullet Shell", "Steel Blue", "Light Slate Blue", "Sunrise Orange", "Navy Blue", "Firebrick" ]; uint16[] private hatsCD = [ 1024, 512, 768, 512, 768, 1024, 768, 512, 768, 1024, 512 ]; string[] private beard = [ "M9,19V16H15V19H14V17H10V19Z", "M9,20V16H15V20H14V17H10V18H13V19H11V18H10V20Z", "M9,20V16H15V21H14V22H13V23H11V22H10V21H9V20H11V18H13V20H14V17H10V20Z", "M9,20H7V19H6V18H5V15H6V16H7V17H9V16H15V17H17V16H18V15H19V18H18V19H17V20H15V21H14V22H13V23H11V22H10V21H9V20H11V18H13V20H14V17H10V20Z", "M10,17H7V16H6V15H5V18H6V19H7V20H8V21H16V20H17V19H18V18H19V15H18V16H17V17H15V16H9V17H14V19H13V18H11V19H10V17Z", "M10,17H7V16H6V15H5V14H4V19H5V20H6V21H7V22H9V23H11V24H13V23H15V22H17V21H18V20H19V19H20V14H19V15H18V16H17V17H15V16H9V17H14V18H10V17Z" ]; string[] private beardN = [ "Fu Manchu", "Zappa", "Van Dyke", "Ducktail", "Boxed", "Full Untouched" ]; uint16[] private beardD = [1024, 768, 768, 1792, 2048, 1792]; string[] private beardC = [ "F0FFFF", "806517", "FFF8C6", "000000", "EDDA74", "616D7E", "625D5D", "FFD801", "C68E17", "835C3B", "7E3817", "EBDDE2" ]; string[] private beardCN = [ "Azure", "Oak Brown", "Lemon Chiffon", "Black", "Goldenrod", "Jet Gray", "Carbon Gray", "Golden", "Caramel", "Brown Bear", "Sangria", "Lavender Pinocchio" ]; uint16[] private beardCD = [ 768, 768, 768, 768, 256, 768, 768, 768, 768, 256, 768, 768 ]; function getTrait(uint256 tokenId, uint16[] memory traitD) private pure returns (uint256) { uint leapfrog = tokenId * 256; uint256 tokenHash = uint256(keccak256(bytes(leapfrog.toString()))) % 8192; uint i = 0; uint256 currentBound = traitD[i]; while (tokenHash > currentBound) { i++; currentBound += traitD[i]; } return i; } function genFace(uint256 tokenId) private view returns (string memory, string memory) { uint256 selectedTrait = getTrait(tokenId, skinCD); string memory svg = string( abi.encodePacked( '<path d="M5,6H6V5H7V4H17V5H18V6H19V18H18V19H17V20H16V24H8V20H7V19H6V18H5Z" fill="#', skinC[selectedTrait], '" />', '<path d="M8,24V20H7V19H6V18H5V6H6V5H7V4H17V5H18V6H19V18H18V19H17V20H16V24H17V20H18V19H19V18H20V13H21V9H20V6H19V5H18V4H17V3H7V4H6V5H5V6H4V9H3V13H4V18H5V19H6V20H7V24Z" fill="#333" />', '<path d="M7,13V12H6V11H5V10H7V9H9V10H10V11H11V12H13V11H14V10H15V9H17V10H19V11H18V12H17V13H15V12H9V13Z" fill="#DDD"/>', '<path d="M12,16H11V15H13V16H12V17H14V18H10V17H12V16Z" fill="#333"/>' ) ); string memory trait = string( abi.encodePacked( '{"trait_type":"Skin","value":"', skinCN[selectedTrait], '"}' ) ); return (svg, trait); } function genEyes(uint256 tokenId) private view returns (string memory, string memory) { string memory svg; uint256 selectedTrait = getTrait(tokenId, eyesCD); string memory eyesColorSet = eyesC[selectedTrait]; bytes memory eyesColorSetBytes = bytes(eyesColorSet); string memory firstEyesColor = string( abi.encodePacked( eyesColorSetBytes[0], eyesColorSetBytes[1], eyesColorSetBytes[2] ) ); string memory secondEyesColor = string( abi.encodePacked( eyesColorSetBytes[3], eyesColorSetBytes[4], eyesColorSetBytes[5] ) ); svg = string( abi.encodePacked( '<path d="', eyes[0], '" fill="#', firstEyesColor, '" />', '<path d="', eyes[1], '" fill="#', secondEyesColor, '" />' ) ); string memory trait = string( abi.encodePacked( '{"trait_type":"Eyes","value":"', eyesCN[selectedTrait], '"}' ) ); return (svg, trait); } function genEarrings(uint256 tokenId) private view returns (string memory, string memory) { string memory svg; string memory trait; uint selectedTrait = getTrait(tokenId, earringsD); uint selectedTraitColor = getTrait(tokenId, earringsCD); svg = string( abi.encodePacked( '<path d="', earrings[selectedTrait], '" fill="#', earringsC[selectedTraitColor], '" />' ) ); trait = string( abi.encodePacked( '{"trait_type":"Earring","value":"', earringsCN[selectedTraitColor], " ", earringsN[selectedTrait], '"}' ) ); return (svg, trait); } function genTattoos(uint256 tokenId) private view returns (string memory, string memory) { string memory svg; string memory trait; uint selectedTrait = getTrait(tokenId, tattoosD); uint selectedTraitColor = getTrait(tokenId, tattoosCD); svg = string( abi.encodePacked( '<path d="', tattoos[selectedTrait], '" fill="#', tattoosC[selectedTraitColor], '" />' ) ); trait = string( abi.encodePacked( '{"trait_type":"Tattoo","value":"', tattoosCN[selectedTraitColor], " ", tattoosN[selectedTrait], '"}' ) ); return (svg, trait); } function genEyePatches(uint256 tokenId) private view returns (string memory, string memory) { string memory svg; string memory trait; uint selectedTrait = getTrait(tokenId, eyePatchesD); uint selectedTraitColor = getTrait(tokenId, eyePatchesCD); svg = string( abi.encodePacked( '<path d="', eyePatches[selectedTrait], '" fill="#', eyePatchesC[selectedTraitColor], '" />' ) ); trait = string( abi.encodePacked( '{"trait_type":"Eyepatch","value":"', eyePatchesCN[selectedTraitColor], " ", eyePatchesN[selectedTrait], '"}' ) ); return (svg, trait); } function genHairs(uint256 tokenId) private view returns (string memory, string memory) { string memory svg; string memory trait; uint selectedTrait = getTrait(tokenId, hairsD); uint selectedTraitColor = getTrait(tokenId, hairsCD); svg = string( abi.encodePacked( '<path d="', hairs[selectedTrait], '" fill="#', hairsC[selectedTraitColor], '" />' ) ); trait = string( abi.encodePacked( '{"trait_type":"Hair","value":"', hairsCN[selectedTraitColor], " ", hairsN[selectedTrait], '"}' ) ); return (svg, trait); } function genHats(uint256 tokenId) private view returns (string memory, string memory) { string memory svg; string memory trait; uint selectedTrait = getTrait(tokenId, hatsD); if (keccak256("XXX") != keccak256(bytes(hats[selectedTrait]))) { uint selectedTraitColor = getTrait(tokenId, hatsCD); svg = string( abi.encodePacked( '<path d="', hats[selectedTrait], '" fill="#', hatsC[selectedTraitColor], '" />' ) ); trait = string( abi.encodePacked( '{"trait_type":"Hat","value":"', hatsCN[selectedTraitColor], " ", hatsN[selectedTrait], '"}' ) ); } else { svg = ""; trait = string( abi.encodePacked(bytes('{"trait_type":"Hat","value":"None"}')) ); } return (svg, trait); } function genBeard(uint256 tokenId) private view returns (string memory, string memory) { string memory svg; string memory trait; uint selectedTrait = getTrait(tokenId, beardD); uint selectedTraitColor = getTrait(tokenId, beardCD); svg = string( abi.encodePacked( '<path d="', beard[selectedTrait], '" fill="#', beardC[selectedTraitColor], '" />' ) ); trait = string( abi.encodePacked( '{"trait_type":"Beard","value":"', beardCN[selectedTraitColor], " ", beardN[selectedTrait], '"}' ) ); return (svg, trait); } function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: Deed does not exist!"); string memory partialSVG; string memory partialAttributes; string memory svg = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" shape-rendering="crispEdges" viewBox="0 0 24 24">'; string memory attributes = "["; (partialSVG, partialAttributes) = genFace(tokenId); attributes = string( abi.encodePacked(attributes, partialAttributes, ",") ); svg = string(abi.encodePacked(svg, partialSVG)); (partialSVG, partialAttributes) = genEyes(tokenId); attributes = string( abi.encodePacked(attributes, partialAttributes, ",") ); svg = string(abi.encodePacked(svg, partialSVG)); (partialSVG, partialAttributes) = genEarrings(tokenId); attributes = string( abi.encodePacked(attributes, partialAttributes, ",") ); svg = string(abi.encodePacked(svg, partialSVG)); (partialSVG, partialAttributes) = genTattoos(tokenId); attributes = string( abi.encodePacked(attributes, partialAttributes, ",") ); svg = string(abi.encodePacked(svg, partialSVG)); (partialSVG, partialAttributes) = genEyePatches(tokenId); attributes = string( abi.encodePacked(attributes, partialAttributes, ",") ); svg = string(abi.encodePacked(svg, partialSVG)); (partialSVG, partialAttributes) = genHairs(tokenId); attributes = string( abi.encodePacked(attributes, partialAttributes, ",") ); svg = string(abi.encodePacked(svg, partialSVG)); (partialSVG, partialAttributes) = genHats(tokenId); attributes = string( abi.encodePacked(attributes, partialAttributes, ",") ); svg = string(abi.encodePacked(svg, partialSVG)); (partialSVG, partialAttributes) = genBeard(tokenId); attributes = string(abi.encodePacked(attributes, partialAttributes)); svg = string(abi.encodePacked(svg, partialSVG)); svg = string(abi.encodePacked(svg, "</svg>")); attributes = string(abi.encodePacked(attributes, "]")); string memory _tokenURI = string( abi.encodePacked( "data:application/json;base64,", Base64.encode( abi.encodePacked( '{"name": "Metarzan #', tokenId.toString(), '", "description": "Metarzan is building a Metaverse FULLY Onchain! All the metadata and images are generated and stored 100% on-chain. No IPFS, no API. Merely Ethereum blockchain.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(svg)), '","attributes":', attributes, "}" ) ) ) ); return _tokenURI; } function safeMint() public nonReentrant { uint256 tokenId = _tokenIdCounter.current(); require(tokenId < 7680); _tokenIdCounter.increment(); _safeMint(_msgSender(), tokenId); } function safeMintOwner(uint256 tokenId) public nonReentrant onlyOwner { require(tokenId > 7679 && tokenId < 8192); _safeMint(owner(), tokenId); } constructor() ERC721("Metarzan", "MTRZN") Ownable() {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeMintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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"}]
Contract Creation Code
60806040526040518061018001604052806040518060400160405280600681526020017f464646464646000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f413035323244000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f386435353234000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464646414641000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f444542383837000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464646354545000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f353933313233000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f384234353133000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464145424437000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f656163303836000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f443242343843000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f3234323432340000000000000000000000000000000000000000000000000000815250815250600d90600c620002e492919062003b41565b506040518061018001604052806040518060400160405280600581526020017f576869746500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f5369656e6e61000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f42726f776e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f536e6f770000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4275726c7920576f6f640000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f5365615368656c6c00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f426c61636b2042726f776e00000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f536164646c652042726f776e000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f416e74697175652057686974650000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f43617563617369616e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f54616e000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f426c61636b000000000000000000000000000000000000000000000000000000815250815250600e90600c620005c592919062003b41565b5060405180610180016040528061020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161040061ffff16815260200161040061ffff16815260200161040061ffff16815260200161040061ffff16815250600f90600c6200067292919062003ba8565b5060405180604001604052806040518060600160405280602f81526020016200a711602f913981526020016040518060600160405280603081526020016200a740603091398152506010906002620006cc92919062003c59565b5060405180608001604052806040518060400160405280600681526020017f356430303730000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f303666303036000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f666339333230000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f61616130303000000000000000000000000000000000000000000000000000008152508152506011906004620007d492919062003cc0565b5060405180608001604052806040518060400160405280600581526020017f477265656e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f426c75650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f42726f776e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f426c61636b0000000000000000000000000000000000000000000000000000008152508152506012906004620008dc92919062003cc0565b50604051806080016040528061080061ffff16815260200161080061ffff16815260200161080061ffff16815260200161080061ffff1681525060139060046200092892919062003d27565b5060405180606001604052806040518060400160405280600e81526020017f4d332c313456313348345631345a00000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4d32302c31345631334832315631345a0000000000000000000000000000000081525081526020016040518060400160405280601a81526020017f4d332c313456313348323156313448323056313348345631345a0000000000008152508152506014906003620009f592919062003dd8565b5060405180606001604052806040518060400160405280600581526020017f526967687400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4c6566740000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f426f746800000000000000000000000000000000000000000000000000000000815250815250601590600362000ac292919062003dd8565b5060405180606001604052806109f061ffff1681526020016109f061ffff168152602001610c2061ffff16815250601690600362000b0292919062003e3f565b506040518061012001604052806040518060400160405280600681526020017f314634354643000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464444303137000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363936304543000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f303046464646000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f453431423137000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f344141303243000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463942374646000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f353945383137000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4636333538410000000000000000000000000000000000000000000000000000815250815250601790600962000d3292919062003ef0565b506040518061012001604052806040518060400160405280600b81526020017f426c7565204f726368696400000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f42726967687420476f6c6400000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f426c7565204c6f7475730000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4379616e0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4c6f76652052656400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f426c6f73736f6d2050696e6b000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f537072696e6720477265656e000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4e6562756c6120477265656e000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f56696f6c65742052656400000000000000000000000000000000000000000000815250815250601890600962000f6292919062003ef0565b5060405180610120016040528061040061ffff16815260200161040061ffff16815260200161020061ffff16815260200161020061ffff16815260200161040061ffff16815260200161020061ffff16815260200161020061ffff16815260200161040061ffff16815260200161080061ffff16815250601990600962000feb92919062003f57565b506040518060a001604052806040518060400160405280601781526020017f4d31352c3656354831365636483137563748313656365a00000000000000000081525081526020016040518060600160405280602881526020016200ab346028913981526020016040518060600160405280602881526020016200a9b06028913981526020016040518060600160405280603f81526020016200a7ed603f913981526020016040518060600160405280603f81526020016200a971603f9139815250601a906005620010be92919062004008565b506040518060a001604052806040518060400160405280600181526020017f490000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f494900000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f494949000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f495600000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f5600000000000000000000000000000000000000000000000000000000000000815250815250601b9060056200120192919062004008565b506040518060a0016040528061060061ffff16815260200161060061ffff16815260200161060061ffff16815260200161060061ffff16815260200161080061ffff16815250601c906005620012599291906200406f565b5060405180604001604052806040518060400160405280600681526020017f333333333333000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f3838313131310000000000000000000000000000000000000000000000000000815250815250601d906002620012eb92919062003c59565b5060405180604001604052806040518060400160405280600481526020017f477261790000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f426c6f6f64000000000000000000000000000000000000000000000000000000815250815250601e9060026200137d92919062003c59565b50604051806040016040528061177061ffff16815260200161089061ffff16815250601f906002620013b192919062004120565b506040518060a001604052806040518060a00160405280607081526020016200a6a16070913981526020016040518060600160405280602581526020016200a67c6025913981526020016040518060600160405280603c81526020016200aac8603c913981526020016040518060600160405280602b81526020016200a946602b913981526020016040518060600160405280602f81526020016200a7be602f913981525060209060056200146892919062004008565b506040518060a001604052806040518060400160405280600581526020017f4e696e6a6100000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f53756e20476c617373657320490000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f53756e20476c617373657320494900000000000000000000000000000000000081525081526020016040518060400160405280601281526020017f526967687420506972617465205061746368000000000000000000000000000081525081526020016040518060400160405280601181526020017f4c656674205069726174652050617463680000000000000000000000000000008152508152506021906005620015ab92919062004008565b506040518060a0016040528061080061ffff16815260200161040061ffff16815260200161080061ffff16815260200161040061ffff16815260200161080061ffff168152506022906005620016039291906200406f565b506040518061020001604052806040518060400160405280600681526020017f383237383339000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f433335383137000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f324236354543000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f384330303141000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f374430353532000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f343343364442000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464344464646000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464630304646000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f333437433243000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f344230303832000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f343933443236000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f433942453632000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f353443353731000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f333432443745000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f323533383343000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f32433335333900000000000000000000000000000000000000000000000000008152508152506023906010620019d0929190620041d1565b506040518061020001604052806040518060400160405280600881526020017f4d6f63636173696e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f52656420466f780000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4f6365616e20426c75650000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f42757267756e647900000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f506c756d2056656c76657400000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f54757271756f697365000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f436f74746f6e2043616e6479000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d6167656e74610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4a756e676c6520477265656e000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f496e6469676f000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4d6f63686100000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f47696e6765722042726f776e000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5a6f6d62696520477265656e000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f426c7565205768616c650000000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f4461726b20536c6174652047726179000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f47756e6d6574616c000000000000000000000000000000000000000000000000815250815250602490601062001d9d929190620041d1565b5060405180610200016040528061020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815260200161020061ffff16815250602590601062001e7a92919062004238565b506040518060e001604052806040518060400160405280600c81526020017f4d362c34563148313856345a000000000000000000000000000000000000000081525081526020016040518060600160405280603081526020016200a4996030913981526020016040518060800160405280604e81526020016200a770604e9139815260200160405180610100016040528060c481526020016200a4c960c49139815260200160405180610100016040528060d681526020016200a82c60d6913981526020016040518060e0016040528060ba81526020016200a3df60ba9139815260200160405180610100016040528060c381526020016200aa0560c39139815250602690600762001f8e929190620042e9565b506040518060e001604052806040518060400160405280600c81526020017f436c61737369632046616465000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f486967682046616465000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f506f6d7061646f7572000000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4c6f6e6720507573686564204261636b0000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f5461727a616e204375740000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f486f636b6579000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4d6163686f204c6f6e6700000000000000000000000000000000000000000000815250815250602790600762002147929190620042e9565b506040518060e0016040528061010061ffff16815260200161010061ffff16815260200161020061ffff16815260200161040061ffff16815260200161080061ffff16815260200161080061ffff16815260200161080061ffff168152506028906007620021b792919062004350565b506040518061018001604052806040518060400160405280600681526020017f303030303030000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363235443544000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f454444413734000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363136443745000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f383036353137000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f463046464646000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464646384336000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f433638453137000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f383335433342000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464644383031000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f374533383137000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4542444445320000000000000000000000000000000000000000000000000000815250815250602990600c6200249892919062003b41565b506040518061018001604052806040518060400160405280600581526020017f426c61636b00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f436172626f6e204772617900000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f476f6c64656e726f64000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4a6574204772617900000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4f616b2042726f776e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f417a75726500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4c656d6f6e2043686966666f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f436172616d656c0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f42726f776e20426561720000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f476f6c64656e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f53616e677269610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601281526020017f4c6176656e6465722050696e6f636368696f0000000000000000000000000000815250815250602a90600c6200277992919062003b41565b5060405180610180016040528061060061ffff16815260200161030061ffff16815260200161020061ffff16815260200161020061ffff16815260200161030061ffff16815260200161020061ffff16815260200161020061ffff16815260200161030061ffff16815260200161020061ffff16815260200161020061ffff16815260200161030061ffff16815260200161020061ffff16815250602b90600c6200282692919062003ba8565b5060405180608001604052806040518060400160405280600381526020017f585858000000000000000000000000000000000000000000000000000000000081525081526020016040518060600160405280603081526020016200ab046030913981526020016040518060400160405280601581526020017f4d332c36563448355630483139563448323156365a000000000000000000000081525081526020016040518060400160405280601081526020017f4d312c3556364832305631483456355a00000000000000000000000000000000815250815250602c9060046200291292919062003cc0565b5060405180608001604052806040518060400160405280600481526020017f4e6f6e650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f426572657400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f50616e616d61000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f4361700000000000000000000000000000000000000000000000000000000000815250815250602d90600462002a1a92919062003cc0565b50604051806080016040528061100061ffff16815260200161040061ffff16815260200161080061ffff16815260200161040061ffff16815250602e90600462002a6692919062003d27565b506040518061016001604052806040518060400160405280600681526020017f383933424646000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f374430353431000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f344337383745000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f343833433332000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f394537424646000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f414639423630000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f343836334130000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f373336414646000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f343833433332000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f303030303830000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f3830303531370000000000000000000000000000000000000000000000000000815250815250602f90600b62002d0c92919062004401565b506040518061016001604052806040518060400160405280600d81526020017f417a7465636820507572706c650000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f506c756d2050696500000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f426565746c6520477265656e000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f546175706500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f507572706c65204d696d6f73610000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f42756c6c6574205368656c6c000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f537465656c20426c75650000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4c6967687420536c61746520426c75650000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f53756e72697365204f72616e676500000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4e61767920426c7565000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f46697265627269636b0000000000000000000000000000000000000000000000815250815250603090600b62002fb292919062004401565b5060405180610160016040528061040061ffff16815260200161020061ffff16815260200161030061ffff16815260200161020061ffff16815260200161030061ffff16815260200161040061ffff16815260200161030061ffff16815260200161020061ffff16815260200161030061ffff16815260200161040061ffff16815260200161020061ffff16815250603190600b6200305392919062004468565b506040518060c001604052806040518060400160405280601b81526020017f4d392c31395631364831355631394831345631374831305631395a000000000081525081526020016040518060600160405280602d81526020016200a9d8602d913981526020016040518060800160405280604481526020016200a9026044913981526020016040518060c00160405280608381526020016200a5f96083913981526020016040518060a00160405280606c81526020016200a58d606c913981526020016040518060c00160405280608281526020016200ab5c6082913981525060329060066200314592919062004519565b506040518060c001604052806040518060400160405280600981526020017f4675204d616e636875000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f5a6170706100000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f56616e2044796b6500000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4475636b7461696c00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f426f78656400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f46756c6c20556e746f75636865640000000000000000000000000000000000008152508152506033906006620032c392919062004519565b506040518060c0016040528061040061ffff16815260200161030061ffff16815260200161030061ffff16815260200161070061ffff16815260200161080061ffff16815260200161070061ffff1681525060349060066200332792919062004580565b506040518061018001604052806040518060400160405280600681526020017f463046464646000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f383036353137000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464646384336000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f303030303030000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f454444413734000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363136443745000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f363235443544000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f464644383031000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f433638453137000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f383335433342000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f374533383137000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4542444445320000000000000000000000000000000000000000000000000000815250815250603590600c6200360892919062003b41565b506040518061018001604052806040518060400160405280600581526020017f417a75726500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4f616b2042726f776e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4c656d6f6e2043686966666f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f426c61636b00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f476f6c64656e726f64000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4a6574204772617900000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f436172626f6e204772617900000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f476f6c64656e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f436172616d656c0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f42726f776e20426561720000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f53616e677269610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601281526020017f4c6176656e6465722050696e6f636368696f0000000000000000000000000000815250815250603690600c620038e992919062003b41565b5060405180610180016040528061030061ffff16815260200161030061ffff16815260200161030061ffff16815260200161030061ffff16815260200161010061ffff16815260200161030061ffff16815260200161030061ffff16815260200161030061ffff16815260200161030061ffff16815260200161010061ffff16815260200161030061ffff16815260200161030061ffff16815250603790600c6200399692919062003ba8565b50348015620039a457600080fd5b506040518060400160405280600881526020017f4d657461727a616e0000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d54525a4e000000000000000000000000000000000000000000000000000000815250816000908051906020019062003a2992919062004631565b50806001908051906020019062003a4292919062004631565b5050506001600a8190555062003a6d62003a6162003a7360201b60201c565b62003a7b60201b60201c565b620047b4565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805482825590600052602060002090810192821562003b95579160200282015b8281111562003b9457825182908051906020019062003b8392919062004631565b509160200191906001019062003b62565b5b50905062003ba49190620046c2565b5090565b82805482825590600052602060002090600f0160109004810192821562003c465791602002820160005b8382111562003c1457835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262003bd2565b801562003c445782816101000a81549061ffff021916905560020160208160010104928301926001030262003c14565b505b50905062003c559190620046ea565b5090565b82805482825590600052602060002090810192821562003cad579160200282015b8281111562003cac57825182908051906020019062003c9b92919062004631565b509160200191906001019062003c7a565b5b50905062003cbc9190620046c2565b5090565b82805482825590600052602060002090810192821562003d14579160200282015b8281111562003d1357825182908051906020019062003d0292919062004631565b509160200191906001019062003ce1565b5b50905062003d239190620046c2565b5090565b82805482825590600052602060002090600f0160109004810192821562003dc55791602002820160005b8382111562003d9357835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262003d51565b801562003dc35782816101000a81549061ffff021916905560020160208160010104928301926001030262003d93565b505b50905062003dd49190620046ea565b5090565b82805482825590600052602060002090810192821562003e2c579160200282015b8281111562003e2b57825182908051906020019062003e1a92919062004631565b509160200191906001019062003df9565b5b50905062003e3b9190620046c2565b5090565b82805482825590600052602060002090600f0160109004810192821562003edd5791602002820160005b8382111562003eab57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262003e69565b801562003edb5782816101000a81549061ffff021916905560020160208160010104928301926001030262003eab565b505b50905062003eec9190620046ea565b5090565b82805482825590600052602060002090810192821562003f44579160200282015b8281111562003f4357825182908051906020019062003f3292919062004631565b509160200191906001019062003f11565b5b50905062003f539190620046c2565b5090565b82805482825590600052602060002090600f0160109004810192821562003ff55791602002820160005b8382111562003fc357835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262003f81565b801562003ff35782816101000a81549061ffff021916905560020160208160010104928301926001030262003fc3565b505b509050620040049190620046ea565b5090565b8280548282559060005260206000209081019282156200405c579160200282015b828111156200405b5782518290805190602001906200404a92919062004631565b509160200191906001019062004029565b5b5090506200406b9190620046c2565b5090565b82805482825590600052602060002090600f016010900481019282156200410d5791602002820160005b83821115620040db57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262004099565b80156200410b5782816101000a81549061ffff0219169055600201602081600101049283019260010302620040db565b505b5090506200411c9190620046ea565b5090565b82805482825590600052602060002090600f01601090048101928215620041be5791602002820160005b838211156200418c57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200414a565b8015620041bc5782816101000a81549061ffff02191690556002016020816001010492830192600103026200418c565b505b509050620041cd9190620046ea565b5090565b82805482825590600052602060002090810192821562004225579160200282015b82811115620042245782518290805190602001906200421392919062004631565b5091602001919060010190620041f2565b5b509050620042349190620046c2565b5090565b82805482825590600052602060002090600f01601090048101928215620042d65791602002820160005b83821115620042a457835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262004262565b8015620042d45782816101000a81549061ffff0219169055600201602081600101049283019260010302620042a4565b505b509050620042e59190620046ea565b5090565b8280548282559060005260206000209081019282156200433d579160200282015b828111156200433c5782518290805190602001906200432b92919062004631565b50916020019190600101906200430a565b5b5090506200434c9190620046c2565b5090565b82805482825590600052602060002090600f01601090048101928215620043ee5791602002820160005b83821115620043bc57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200437a565b8015620043ec5782816101000a81549061ffff0219169055600201602081600101049283019260010302620043bc565b505b509050620043fd9190620046ea565b5090565b82805482825590600052602060002090810192821562004455579160200282015b82811115620044545782518290805190602001906200444392919062004631565b509160200191906001019062004422565b5b509050620044649190620046c2565b5090565b82805482825590600052602060002090600f01601090048101928215620045065791602002820160005b83821115620044d457835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262004492565b8015620045045782816101000a81549061ffff0219169055600201602081600101049283019260010302620044d4565b505b509050620045159190620046ea565b5090565b8280548282559060005260206000209081019282156200456d579160200282015b828111156200456c5782518290805190602001906200455b92919062004631565b50916020019190600101906200453a565b5b5090506200457c9190620046c2565b5090565b82805482825590600052602060002090600f016010900481019282156200461e5791602002820160005b83821115620045ec57835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302620045aa565b80156200461c5782816101000a81549061ffff0219169055600201602081600101049283019260010302620045ec565b505b5090506200462d9190620046ea565b5090565b8280546200463f906200474f565b90600052602060002090601f016020900481019282620046635760008555620046af565b82601f106200467e57805160ff1916838001178555620046af565b82800160010185558215620046af579182015b82811115620046ae57825182559160200191906001019062004691565b5b509050620046be9190620046ea565b5090565b5b80821115620046e65760008181620046dc919062004709565b50600101620046c3565b5090565b5b8082111562004705576000816000905550600101620046eb565b5090565b50805462004717906200474f565b6000825580601f106200472b57506200474c565b601f0160209004906000526020600020908101906200474b9190620046ea565b5b50565b600060028204905060018216806200476857607f821691505b602082108114156200477f576200477e62004785565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615c1b80620047c46000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80636871ee40116100b857806395d89b411161007c57806395d89b411461033a578063a22cb46514610358578063b88d4fde14610374578063c87b56dd14610390578063e985e9c5146103c0578063f2fde38b146103f057610137565b80636871ee40146102bc57806370942fc1146102c657806370a08231146102e2578063715018a6146103125780638da5cb5b1461031c57610137565b806323b872dd116100ff57806323b872dd146101f45780632f745c591461021057806342842e0e146102405780634f6ccce71461025c5780636352211e1461028c57610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba57806318160ddd146101d6575b600080fd5b6101566004803603810190610151919061395a565b61040c565b60405161016391906146ee565b60405180910390f35b610174610486565b6040516101819190614709565b60405180910390f35b6101a4600480360381019061019f91906139b4565b610518565b6040516101b19190614687565b60405180910390f35b6101d460048036038101906101cf919061391a565b61059d565b005b6101de6106b5565b6040516101eb919061498b565b60405180910390f35b61020e60048036038101906102099190613804565b6106c2565b005b61022a6004803603810190610225919061391a565b610722565b604051610237919061498b565b60405180910390f35b61025a60048036038101906102559190613804565b6107c7565b005b610276600480360381019061027191906139b4565b6107e7565b604051610283919061498b565b60405180910390f35b6102a660048036038101906102a191906139b4565b610858565b6040516102b39190614687565b60405180910390f35b6102c461090a565b005b6102e060048036038101906102db91906139b4565b61099a565b005b6102fc60048036038101906102f79190613797565b610a9b565b604051610309919061498b565b60405180910390f35b61031a610b53565b005b610324610bdb565b6040516103319190614687565b60405180910390f35b610342610c05565b60405161034f9190614709565b60405180910390f35b610372600480360381019061036d91906138da565b610c97565b005b61038e60048036038101906103899190613857565b610cad565b005b6103aa60048036038101906103a591906139b4565b610d0f565b6040516103b79190614709565b60405180910390f35b6103da60048036038101906103d591906137c4565b61112b565b6040516103e791906146ee565b60405180910390f35b61040a60048036038101906104059190613797565b6111bf565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061047f575061047e826112b7565b5b9050919050565b60606000805461049590614c6b565b80601f01602080910402602001604051908101604052809291908181526020018280546104c190614c6b565b801561050e5780601f106104e35761010080835404028352916020019161050e565b820191906000526020600020905b8154815290600101906020018083116104f157829003601f168201915b5050505050905090565b600061052382611399565b610562576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610559906148ab565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105a882610858565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106109061490b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610638611405565b73ffffffffffffffffffffffffffffffffffffffff161480610667575061066681610661611405565b61112b565b5b6106a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069d9061482b565b60405180910390fd5b6106b0838361140d565b505050565b6000600880549050905090565b6106d36106cd611405565b826114c6565b610712576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107099061492b565b60405180910390fd5b61071d8383836115a4565b505050565b600061072d83610a9b565b821061076e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107659061474b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6107e283838360405180602001604052806000815250610cad565b505050565b60006107f16106b5565b8210610832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108299061494b565b60405180910390fd5b6008828154811061084657610845614e0e565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f89061486b565b60405180910390fd5b80915050919050565b6002600a541415610950576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109479061496b565b60405180910390fd5b6002600a819055506000610964600c611800565b9050611e00811061097457600080fd5b61097e600c61180e565b61098f610989611405565b82611824565b506001600a81905550565b6002600a5414156109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d79061496b565b60405180910390fd5b6002600a819055506109f0611405565b73ffffffffffffffffffffffffffffffffffffffff16610a0e610bdb565b73ffffffffffffffffffffffffffffffffffffffff1614610a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5b906148cb565b60405180910390fd5b611dff81118015610a76575061200081105b610a7f57600080fd5b610a90610a8a610bdb565b82611824565b6001600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b039061484b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b5b611405565b73ffffffffffffffffffffffffffffffffffffffff16610b79610bdb565b73ffffffffffffffffffffffffffffffffffffffff1614610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc6906148cb565b60405180910390fd5b610bd96000611842565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610c1490614c6b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4090614c6b565b8015610c8d5780601f10610c6257610100808354040283529160200191610c8d565b820191906000526020600020905b815481529060010190602001808311610c7057829003601f168201915b5050505050905090565b610ca9610ca2611405565b8383611908565b5050565b610cbe610cb8611405565b836114c6565b610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf49061492b565b60405180910390fd5b610d0984848484611a75565b50505050565b6060610d1a82611399565b610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d509061472b565b60405180910390fd5b60608060006040518060a00160405280607d8152602001615b46607d9139905060006040518060400160405280600181526020017f5b000000000000000000000000000000000000000000000000000000000000008152509050610dbc86611ad1565b80945081955050508083604051602001610dd792919061428a565b60405160208183030381529060405290508184604051602001610dfb929190614266565b6040516020818303038152906040529150610e1586611bea565b80945081955050508083604051602001610e3092919061428a565b60405160208183030381529060405290508184604051602001610e54929190614266565b6040516020818303038152906040529150610e6e86611ee0565b80945081955050508083604051602001610e8992919061428a565b60405160208183030381529060405290508184604051602001610ead929190614266565b6040516020818303038152906040529150610ec7866120bd565b80945081955050508083604051602001610ee292919061428a565b60405160208183030381529060405290508184604051602001610f06929190614266565b6040516020818303038152906040529150610f208661229a565b80945081955050508083604051602001610f3b92919061428a565b60405160208183030381529060405290508184604051602001610f5f929190614266565b6040516020818303038152906040529150610f7986612477565b80945081955050508083604051602001610f9492919061428a565b60405160208183030381529060405290508184604051602001610fb8929190614266565b6040516020818303038152906040529150610fd286612654565b80945081955050508083604051602001610fed92919061428a565b60405160208183030381529060405290508184604051602001611011929190614266565b604051602081830303815290604052915061102b866128dc565b80945081955050508083604051602001611046929190614266565b6040516020818303038152906040529050818460405160200161106a929190614266565b60405160208183030381529060405291508160405160200161108c91906142db565b6040516020818303038152906040529150806040516020016110ae91906142b9565b604051602081830303815290604052905060006110fd6110cd88612ab9565b6110d685612c1a565b846040516020016110e993929190614342565b604051602081830303815290604052612c1a565b60405160200161110d91906144ee565b60405160208183030381529060405290508095505050505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111c7611405565b73ffffffffffffffffffffffffffffffffffffffff166111e5610bdb565b73ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906148cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a29061478b565b60405180910390fd5b6112b481611842565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061138257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611392575061139182612db2565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661148083610858565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114d182611399565b611510576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115079061480b565b60405180910390fd5b600061151b83610858565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061158a57508373ffffffffffffffffffffffffffffffffffffffff1661157284610518565b73ffffffffffffffffffffffffffffffffffffffff16145b8061159b575061159a818561112b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166115c482610858565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611611906148eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561168a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611681906147cb565b60405180910390fd5b611695838383612e1c565b6116a060008261140d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116f09190614b55565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117479190614a74565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b61183e828260405180602001604052806000815250612f30565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e906147eb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a6891906146ee565b60405180910390a3505050565b611a808484846115a4565b611a8c84848484612f8b565b611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac29061476b565b60405180910390fd5b50505050565b6060806000611b5884600f805480602002602001604051908101604052809291908181526020018280548015611b4e57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611b155790505b5050505050613122565b90506000600d8281548110611b7057611b6f614e0e565b5b90600052602060002001604051602001611b8a9190614582565b60405160208183030381529060405290506000600e8381548110611bb157611bb0614e0e565b5b90600052602060002001604051602001611bcb9190614510565b6040516020818303038152906040529050818194509450505050915091565b60608060606000611c73856013805480602002602001604051908101604052809291908181526020018280548015611c6957602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611c305790505b5050505050613122565b9050600060118281548110611c8b57611c8a614e0e565b5b906000526020600020018054611ca090614c6b565b80601f0160208091040260200160405190810160405280929190818152602001828054611ccc90614c6b565b8015611d195780601f10611cee57610100808354040283529160200191611d19565b820191906000526020600020905b815481529060010190602001808311611cfc57829003601f168201915b505050505090506000819050600081600081518110611d3b57611d3a614e0e565b5b602001015160f81c60f81b82600181518110611d5a57611d59614e0e565b5b602001015160f81c60f81b83600281518110611d7957611d78614e0e565b5b602001015160f81c60f81b604051602001611d96939291906141fb565b6040516020818303038152906040529050600082600381518110611dbd57611dbc614e0e565b5b602001015160f81c60f81b83600481518110611ddc57611ddb614e0e565b5b602001015160f81c60f81b84600581518110611dfb57611dfa614e0e565b5b602001015160f81c60f81b604051602001611e18939291906141fb565b60405160208183030381529060405290506010600081548110611e3e57611e3d614e0e565b5b90600052602060002001826010600181548110611e5e57611e5d614e0e565b5b9060005260206000200183604051602001611e7c949392919061439f565b6040516020818303038152906040529550600060128681548110611ea357611ea2614e0e565b5b90600052602060002001604051602001611ebd9190614615565b604051602081830303815290604052905086819850985050505050505050915091565b6060806060806000611f6a866016805480602002602001604051908101604052809291908181526020018280548015611f6057602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611f275790505b5050505050613122565b90506000611ff0876019805480602002602001604051908101604052809291908181526020018280548015611fe657602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611fad5790505b5050505050613122565b90506014828154811061200657612005614e0e565b5b906000526020600020016017828154811061202457612023614e0e565b5b9060005260206000200160405160200161203f92919061441f565b60405160208183030381529060405293506018818154811061206457612063614e0e565b5b906000526020600020016015838154811061208257612081614e0e565b5b9060005260206000200160405160200161209d9291906142fd565b604051602081830303815290604052925083839550955050505050915091565b606080606080600061214786601c80548060200260200160405190810160405280929190818152602001828054801561213d57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116121045790505b5050505050613122565b905060006121cd87601f8054806020026020016040519081016040528092919081815260200182805480156121c357602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161218a5790505b5050505050613122565b9050601a82815481106121e3576121e2614e0e565b5b90600052602060002001601d828154811061220157612200614e0e565b5b9060005260206000200160405160200161221c92919061441f565b6040516020818303038152906040529350601e818154811061224157612240614e0e565b5b90600052602060002001601b838154811061225f5761225e614e0e565b5b9060005260206000200160405160200161227a9291906144a9565b604051602081830303815290604052925083839550955050505050915091565b606080606080600061232486602280548060200260200160405190810160405280929190818152602001828054801561231a57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116122e15790505b5050505050613122565b905060006123aa8760258054806020026020016040519081016040528092919081815260200182805480156123a057602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116123675790505b5050505050613122565b9050602082815481106123c0576123bf614e0e565b5b90600052602060002001602382815481106123de576123dd614e0e565b5b906000526020600020016040516020016123f992919061441f565b60405160208183030381529060405293506024818154811061241e5761241d614e0e565b5b906000526020600020016021838154811061243c5761243b614e0e565b5b90600052602060002001604051602001612457929190614642565b604051602081830303815290604052925083839550955050505050915091565b60608060608060006125018660288054806020026020016040519081016040528092919081815260200182805480156124f757602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116124be5790505b5050505050613122565b9050600061258787602b80548060200260200160405190810160405280929190818152602001828054801561257d57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116125445790505b5050505050613122565b90506026828154811061259d5761259c614e0e565b5b90600052602060002001602982815481106125bb576125ba614e0e565b5b906000526020600020016040516020016125d692919061441f565b6040516020818303038152906040529350602a81815481106125fb576125fa614e0e565b5b906000526020600020016027838154811061261957612618614e0e565b5b906000526020600020016040516020016126349291906145d0565b604051602081830303815290604052925083839550955050505050915091565b60608060608060006126de86602e8054806020026020016040519081016040528092919081815260200182805480156126d457602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161269b5790505b5050505050613122565b9050602c81815481106126f4576126f3614e0e565b5b9060005260206000200160405161270b919061424f565b60405180910390207fc679ad1c8c8141266b59870c14c6b333ddc707ff9b838b951279df27b722407e146128815760006127bd8760318054806020026020016040519081016040528092919081815260200182805480156127b357602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161277a5790505b5050505050613122565b9050602c82815481106127d3576127d2614e0e565b5b90600052602060002001602f82815481106127f1576127f0614e0e565b5b9060005260206000200160405160200161280c92919061441f565b60405160208183030381529060405293506030818154811061283157612830614e0e565b5b90600052602060002001602d838154811061284f5761284e614e0e565b5b9060005260206000200160405160200161286a929190614464565b6040516020818303038152906040529250506128ce565b604051806020016040528060008152509250604051806060016040528060238152602001615bc3602391396040516020016128bc9190614238565b60405160208183030381529060405291505b828294509450505050915091565b606080606080600061296686603480548060200260200160405190810160405280929190818152602001828054801561295c57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116129235790505b5050505050613122565b905060006129ec8760378054806020026020016040519081016040528092919081815260200182805480156129e257602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116129a95790505b5050505050613122565b905060328281548110612a0257612a01614e0e565b5b9060005260206000200160358281548110612a2057612a1f614e0e565b5b90600052602060002001604051602001612a3b92919061441f565b604051602081830303815290604052935060368181548110612a6057612a5f614e0e565b5b9060005260206000200160338381548110612a7e57612a7d614e0e565b5b90600052602060002001604051602001612a9992919061453d565b604051602081830303815290604052925083839550955050505050915091565b60606000821415612b01576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c15565b600082905060005b60008214612b33578080612b1c90614cce565b915050600a82612b2c9190614aca565b9150612b09565b60008167ffffffffffffffff811115612b4f57612b4e614e3d565b5b6040519080825280601f01601f191660200182016040528015612b815781602001600182028036833780820191505090505b5090505b60008514612c0e57600182612b9a9190614b55565b9150600a85612ba99190614d21565b6030612bb59190614a74565b60f81b818381518110612bcb57612bca614e0e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c079190614aca565b9450612b85565b8093505050505b919050565b60606000825190506000811415612c435760405180602001604052806000815250915050612dad565b60006003600283612c549190614a74565b612c5e9190614aca565b6004612c6a9190614afb565b90506000602082612c7b9190614a74565b67ffffffffffffffff811115612c9457612c93614e3d565b5b6040519080825280601f01601f191660200182016040528015612cc65781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001615b06604091399050600181016020830160005b86811015612d6a5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612cf1565b506003860660018114612d845760028114612d9457612d9f565b613d3d60f01b6002830352612d9f565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e278383836131d2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e6a57612e65816131d7565b612ea9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ea857612ea78382613220565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eec57612ee78161338d565b612f2b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f2a57612f29828261345e565b5b5b505050565b612f3a83836134dd565b612f476000848484612f8b565b612f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7d9061476b565b60405180910390fd5b505050565b6000612fac8473ffffffffffffffffffffffffffffffffffffffff166136ab565b15613115578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fd5611405565b8786866040518563ffffffff1660e01b8152600401612ff794939291906146a2565b602060405180830381600087803b15801561301157600080fd5b505af192505050801561304257506040513d601f19601f8201168201806040525081019061303f9190613987565b60015b6130c5573d8060008114613072576040519150601f19603f3d011682016040523d82523d6000602084013e613077565b606091505b506000815114156130bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b49061476b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061311a565b600190505b949350505050565b600080610100846131339190614afb565b9050600061200061314383612ab9565b8051906020012060001c6131579190614d21565b905060008085828151811061316f5761316e614e0e565b5b602002602001015161ffff1690505b808311156131c557818061319190614cce565b9250508582815181106131a7576131a6614e0e565b5b602002602001015161ffff16816131be9190614a74565b905061317e565b8194505050505092915050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161322d84610a9b565b6132379190614b55565b905060006007600084815260200190815260200160002054905081811461331c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133a19190614b55565b90506000600960008481526020019081526020016000205490506000600883815481106133d1576133d0614e0e565b5b9060005260206000200154905080600883815481106133f3576133f2614e0e565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061344257613441614ddf565b5b6001900381819060005260206000200160009055905550505050565b600061346983610a9b565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561354d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135449061488b565b60405180910390fd5b61355681611399565b15613596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358d906147ab565b60405180910390fd5b6135a260008383612e1c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135f29190614a74565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60006136d16136cc846149cb565b6149a6565b9050828152602081018484840111156136ed576136ec614e71565b5b6136f8848285614c29565b509392505050565b60008135905061370f81615aa9565b92915050565b60008135905061372481615ac0565b92915050565b60008135905061373981615ad7565b92915050565b60008151905061374e81615ad7565b92915050565b600082601f83011261376957613768614e6c565b5b81356137798482602086016136be565b91505092915050565b60008135905061379181615aee565b92915050565b6000602082840312156137ad576137ac614e7b565b5b60006137bb84828501613700565b91505092915050565b600080604083850312156137db576137da614e7b565b5b60006137e985828601613700565b92505060206137fa85828601613700565b9150509250929050565b60008060006060848603121561381d5761381c614e7b565b5b600061382b86828701613700565b935050602061383c86828701613700565b925050604061384d86828701613782565b9150509250925092565b6000806000806080858703121561387157613870614e7b565b5b600061387f87828801613700565b945050602061389087828801613700565b93505060406138a187828801613782565b925050606085013567ffffffffffffffff8111156138c2576138c1614e76565b5b6138ce87828801613754565b91505092959194509250565b600080604083850312156138f1576138f0614e7b565b5b60006138ff85828601613700565b925050602061391085828601613715565b9150509250929050565b6000806040838503121561393157613930614e7b565b5b600061393f85828601613700565b925050602061395085828601613782565b9150509250929050565b6000602082840312156139705761396f614e7b565b5b600061397e8482850161372a565b91505092915050565b60006020828403121561399d5761399c614e7b565b5b60006139ab8482850161373f565b91505092915050565b6000602082840312156139ca576139c9614e7b565b5b60006139d884828501613782565b91505092915050565b6139ea81614b89565b82525050565b6139f981614b9b565b82525050565b613a10613a0b82614ba7565b614d17565b82525050565b6000613a2182614a26565b613a2b8185614a3c565b9350613a3b818560208601614c38565b613a4481614e80565b840191505092915050565b6000613a5a82614a26565b613a648185614a4d565b9350613a74818560208601614c38565b80840191505092915050565b60008154613a8d81614c6b565b613a978186614a4d565b94506001821660008114613ab25760018114613ac357613af6565b60ff19831686528186019350613af6565b613acc856149fc565b60005b83811015613aee57815481890152600182019150602081019050613acf565b838801955050505b50505092915050565b6000613b0a82614a31565b613b148185614a58565b9350613b24818560208601614c38565b613b2d81614e80565b840191505092915050565b6000613b4382614a31565b613b4d8185614a69565b9350613b5d818560208601614c38565b80840191505092915050565b60008154613b7681614c6b565b613b808186614a69565b94506001821660008114613b9b5760018114613bac57613bdf565b60ff19831686528186019350613bdf565b613bb585614a11565b60005b83811015613bd757815481890152600182019150602081019050613bb8565b838801955050505b50505092915050565b6000613bf5602483614a58565b9150613c0082614e91565b604082019050919050565b6000613c1860b483614a69565b9150613c2382614ee0565b60b482019050919050565b6000613c3b600983614a69565b9150613c4682614fc7565b600982019050919050565b6000613c5e607483614a69565b9150613c6982614ff0565b607482019050919050565b6000613c81604383614a69565b9150613c8c8261508b565b604382019050919050565b6000613ca4602b83614a58565b9150613caf82615100565b604082019050919050565b6000613cc7603283614a58565b9150613cd28261514f565b604082019050919050565b6000613cea602683614a58565b9150613cf58261519e565b604082019050919050565b6000613d0d601c83614a58565b9150613d18826151ed565b602082019050919050565b6000613d30602183614a69565b9150613d3b82615216565b602182019050919050565b6000613d53600f83614a69565b9150613d5e82615265565b600f82019050919050565b6000613d76600183614a69565b9150613d818261528e565b600182019050919050565b6000613d99602483614a58565b9150613da4826152b7565b604082019050919050565b6000613dbc601983614a58565b9150613dc782615306565b602082019050919050565b6000613ddf602c83614a58565b9150613dea8261532f565b604082019050919050565b6000613e02600183614a69565b9150613e0d8261537e565b600182019050919050565b6000613e25603883614a58565b9150613e30826153a7565b604082019050919050565b6000613e48600483614a69565b9150613e53826153f6565b600482019050919050565b6000613e6b602a83614a58565b9150613e768261541f565b604082019050919050565b6000613e8e602983614a58565b9150613e998261546e565b604082019050919050565b6000613eb1601483614a69565b9150613ebc826154bd565b601482019050919050565b6000613ed4600283614a69565b9150613edf826154e6565b600282019050919050565b6000613ef7600983614a69565b9150613f028261550f565b600982019050919050565b6000613f1a602083614a58565b9150613f2582615538565b602082019050919050565b6000613f3d600183614a69565b9150613f4882615561565b600182019050919050565b6000613f60602c83614a58565b9150613f6b8261558a565b604082019050919050565b6000613f83602083614a58565b9150613f8e826155d9565b602082019050919050565b6000613fa6601d83614a69565b9150613fb182615602565b601d82019050919050565b6000613fc9602983614a58565b9150613fd48261562b565b604082019050919050565b6000613fec600183614a69565b9150613ff78261567a565b600182019050919050565b600061400f602183614a58565b915061401a826156a3565b604082019050919050565b6000614032602083614a69565b915061403d826156f2565b602082019050919050565b6000614055601d83614a69565b91506140608261571b565b601d82019050919050565b6000614078601e83614a69565b915061408382615744565b601e82019050919050565b600061409b603183614a58565b91506140a68261576d565b604082019050919050565b60006140be601f83614a69565b91506140c9826157bc565b601f82019050919050565b60006140e1602c83614a58565b91506140ec826157e5565b604082019050919050565b6000614104605283614a69565b915061410f82615834565b605282019050919050565b6000614127601e83614a69565b9150614132826158a9565b601e82019050919050565b600061414a60da83614a69565b9150614155826158d2565b60da82019050919050565b600061416d601e83614a69565b9150614178826159df565b601e82019050919050565b6000614190601f83614a58565b915061419b82615a08565b602082019050919050565b60006141b3600683614a69565b91506141be82615a31565b600682019050919050565b60006141d6602283614a69565b91506141e182615a5a565b602282019050919050565b6141f581614c1f565b82525050565b600061420782866139ff565b60018201915061421782856139ff565b60018201915061422782846139ff565b600182019150819050949350505050565b60006142448284613a4f565b915081905092915050565b600061425b8284613a80565b915081905092915050565b60006142728285613b38565b915061427e8284613b38565b91508190509392505050565b60006142968285613b38565b91506142a28284613b38565b91506142ad82613d69565b91508190509392505050565b60006142c58284613b38565b91506142d082613fdf565b915081905092915050565b60006142e78284613b38565b91506142f2826141a6565b915081905092915050565b600061430882613d23565b91506143148285613b69565b915061431f82613df5565b915061432b8284613b69565b915061433682613ec7565b91508190509392505050565b600061434d82613ea4565b91506143598286613b38565b91506143648261413d565b91506143708285613b38565b915061437b82613d46565b91506143878284613b38565b915061439282613f30565b9150819050949350505050565b60006143aa82613eea565b91506143b68287613b69565b91506143c182613c2e565b91506143cd8286613b38565b91506143d882613e3b565b91506143e382613eea565b91506143ef8285613b69565b91506143fa82613c2e565b91506144068284613b38565b915061441182613e3b565b915081905095945050505050565b600061442a82613eea565b91506144368285613b69565b915061444182613c2e565b915061444d8284613b69565b915061445882613e3b565b91508190509392505050565b600061446f82613f99565b915061447b8285613b69565b915061448682613df5565b91506144928284613b69565b915061449d82613ec7565b91508190509392505050565b60006144b482614025565b91506144c08285613b69565b91506144cb82613df5565b91506144d78284613b69565b91506144e282613ec7565b91508190509392505050565b60006144f982614048565b91506145058284613b38565b915081905092915050565b600061451b8261406b565b91506145278284613b69565b915061453282613ec7565b915081905092915050565b6000614548826140b1565b91506145548285613b69565b915061455f82613df5565b915061456b8284613b69565b915061457682613ec7565b91508190509392505050565b600061458d826140f7565b91506145998284613b69565b91506145a482613e3b565b91506145af82613c0b565b91506145ba82613c51565b91506145c582613c74565b915081905092915050565b60006145db8261411a565b91506145e78285613b69565b91506145f282613df5565b91506145fe8284613b69565b915061460982613ec7565b91508190509392505050565b600061462082614160565b915061462c8284613b69565b915061463782613ec7565b915081905092915050565b600061464d826141c9565b91506146598285613b69565b915061466482613df5565b91506146708284613b69565b915061467b82613ec7565b91508190509392505050565b600060208201905061469c60008301846139e1565b92915050565b60006080820190506146b760008301876139e1565b6146c460208301866139e1565b6146d160408301856141ec565b81810360608301526146e38184613a16565b905095945050505050565b600060208201905061470360008301846139f0565b92915050565b600060208201905081810360008301526147238184613aff565b905092915050565b6000602082019050818103600083015261474481613be8565b9050919050565b6000602082019050818103600083015261476481613c97565b9050919050565b6000602082019050818103600083015261478481613cba565b9050919050565b600060208201905081810360008301526147a481613cdd565b9050919050565b600060208201905081810360008301526147c481613d00565b9050919050565b600060208201905081810360008301526147e481613d8c565b9050919050565b6000602082019050818103600083015261480481613daf565b9050919050565b6000602082019050818103600083015261482481613dd2565b9050919050565b6000602082019050818103600083015261484481613e18565b9050919050565b6000602082019050818103600083015261486481613e5e565b9050919050565b6000602082019050818103600083015261488481613e81565b9050919050565b600060208201905081810360008301526148a481613f0d565b9050919050565b600060208201905081810360008301526148c481613f53565b9050919050565b600060208201905081810360008301526148e481613f76565b9050919050565b6000602082019050818103600083015261490481613fbc565b9050919050565b6000602082019050818103600083015261492481614002565b9050919050565b600060208201905081810360008301526149448161408e565b9050919050565b60006020820190508181036000830152614964816140d4565b9050919050565b6000602082019050818103600083015261498481614183565b9050919050565b60006020820190506149a060008301846141ec565b92915050565b60006149b06149c1565b90506149bc8282614c9d565b919050565b6000604051905090565b600067ffffffffffffffff8211156149e6576149e5614e3d565b5b6149ef82614e80565b9050602081019050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614a7f82614c1f565b9150614a8a83614c1f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614abf57614abe614d52565b5b828201905092915050565b6000614ad582614c1f565b9150614ae083614c1f565b925082614af057614aef614d81565b5b828204905092915050565b6000614b0682614c1f565b9150614b1183614c1f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b4a57614b49614d52565b5b828202905092915050565b6000614b6082614c1f565b9150614b6b83614c1f565b925082821015614b7e57614b7d614d52565b5b828203905092915050565b6000614b9482614bff565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614c56578082015181840152602081019050614c3b565b83811115614c65576000848401525b50505050565b60006002820490506001821680614c8357607f821691505b60208210811415614c9757614c96614db0565b5b50919050565b614ca682614e80565b810181811067ffffffffffffffff82111715614cc557614cc4614e3d565b5b80604052505050565b6000614cd982614c1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d0c57614d0b614d52565b5b600182019050919050565b6000819050919050565b6000614d2c82614c1f565b9150614d3783614c1f565b925082614d4757614d46614d81565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732314d657461646174613a204465656420646f6573206e6f7420657860008201527f6973742100000000000000000000000000000000000000000000000000000000602082015250565b7f3c7061746820643d224d382c323456323048375631394836563138483556364860008201527f365635483756344831375635483138563648313956313848313856313948313760208201527f563230483136563234483137563230483138563139483139563138483230563160408201527f334832315639483230563648313956354831385634483137563348375634483660608201527f563548355636483456394833563133483456313848355631394836563230483760808201527f5632345a222066696c6c3d222333333322202f3e00000000000000000000000060a082015250565b7f222066696c6c3d22230000000000000000000000000000000000000000000000600082015250565b7f3c7061746820643d224d372c313356313248365631314835563130483756394860008201527f395631304831305631314831315631324831335631314831345631304831355660208201527f394831375631304831395631314831385631324831375631334831355631324860408201527f395631335a222066696c6c3d2223444444222f3e000000000000000000000000606082015250565b7f3c7061746820643d224d31322c3136483131563135483133563136483132563160008201527f374831345631384831305631374831325631365a222066696c6c3d222333333360208201527f222f3e0000000000000000000000000000000000000000000000000000000000604082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f7b2274726169745f74797065223a2245617272696e67222c2276616c7565223a60008201527f2200000000000000000000000000000000000000000000000000000000000000602082015250565b7f222c2261747472696275746573223a0000000000000000000000000000000000600082015250565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f22202f3e00000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f7b226e616d65223a20224d657461727a616e2023000000000000000000000000600082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f3c7061746820643d220000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7b2274726169745f74797065223a22486174222c2276616c7565223a22000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5d00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f7b2274726169745f74797065223a22546174746f6f222c2276616c7565223a22600082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f7b2274726169745f74797065223a22536b696e222c2276616c7565223a220000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7b2274726169745f74797065223a224265617264222c2276616c7565223a2200600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f3c7061746820643d224d352c364836563548375634483137563548313856364860008201527f313956313848313856313948313756323048313656323448385632304837563160208201527f39483656313848355a222066696c6c3d22230000000000000000000000000000604082015250565b7f7b2274726169745f74797065223a2248616972222c2276616c7565223a220000600082015250565b7f222c20226465736372697074696f6e223a20224d657461727a616e206973206260008201527f75696c64696e672061204d65746176657273652046554c4c59204f6e6368616960208201527f6e2120416c6c20746865206d6574616461746120616e6420696d61676573206160408201527f72652067656e65726174656420616e642073746f7265642031303025206f6e2d60608201527f636861696e2e204e6f20495046532c206e6f204150492e204d6572656c79204560808201527f7468657265756d20626c6f636b636861696e2e222c2022696d616765223a202260a08201527f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000060c082015250565b7f7b2274726169745f74797065223a2245796573222c2276616c7565223a220000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f3c2f7376673e0000000000000000000000000000000000000000000000000000600082015250565b7f7b2274726169745f74797065223a224579657061746368222c2276616c75652260008201527f3a22000000000000000000000000000000000000000000000000000000000000602082015250565b615ab281614b89565b8114615abd57600080fd5b50565b615ac981614b9b565b8114615ad457600080fd5b50565b615ae081614bd3565b8114615aeb57600080fd5b50565b615af781614c1f565b8114615b0257600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222073686170652d72656e646572696e673d2263726973704564676573222076696577426f783d22302030203234203234223e7b2274726169745f74797065223a22486174222c2276616c7565223a224e6f6e65227da26469706673582212202fc8b13f59d0837385912f25b9054ab92d53632d75d73c7dbc96431ddef61a5364736f6c634300080700334d322c32305636483356354834563448355633483656324831385633483139563448323056354832315636483232563230483231563231483230563232483139563233483138563234483137563230483138563139483139563138483230563133483231563130483230563948313956364831385635483137563448375635483656364835563948345631304833563133483456313848355631394836563230483756323448365632334835563232483456323148335632305a4d342c36563448355633483656324831385633483139563448323056364831385635483137563448375635483656365a4d322c3230563648335635483456344835563348365632483138563348313956344832305635483231563648323256313748323256323048323156313848323056323248313956323048313856323448313756323048313856313948313956313748323056313348323156313048323056394831395636483138563548313756344837563548365636483556394834563130483356313348345631384835563139483656323048375632344836563230483556323248345631384833563230483256365a4d31302c313748375631364836563135483556313848365631394837563230483856323148313656323048313756313948313856313848313956313548313856313648313756313748313556313648395631374831345631394831335631384831315631394831305631375a4d392c323048375631394836563138483556313548365631364837563137483956313648313556313748313756313648313856313548313956313848313856313948313756323048313556323148313456323248313356323348313156323248313056323148395632304831315631384831335632304831345631374831305632305a4d332c3130563948323156313048313956313348313356313048313156313348355631305a4d342c3130563848323056313048313756394831355631304831345631324831355631334831375631324831385631304832305631344833563136483156313448335631334834563131483656313248375631334839563132483130563130483956394837563130483656313148345a4d372c313048385631314839563132483135563131483136563130483137563131483136563132483856313148375a4d372c31325631314838563130483136563131483137563132483136563131483135563130483956313148385631325a4d342c31335639483356354834563448355633483656324831385633483139563448323056354832315639483230563133483139563648313856354831375634483756354836563648355631335a4d332c395638483231563948313856313248313756313348313656313448313556313348313456313248313356395a4d392c32325632314831305632324831315632314831335632324831345632314831355632324831345632334831335632324831315632334831305632325a4d322c3230563648335635483456344835563348365632483138563348313956344832305635483231563648323256313748323256323048323156313848323056323248313956323048313856323448313756323048313856313948313956313748323056313348323156313048323056394831395636483138563548313756344831315637483130563448395638483856344837563848365636483556394834563130483356313348345631384835563139483656323048375632344836563230483556323248345631384833563230483256365a4d392c323056313648313556323148313456323248313356323348313156323248313056323148395632304831315631384831335632304831345631374831305632305a4d332c3956384832315639483131563132483130563133483956313448385631334837563132483656395a4d392c32335632324831305632314831315632324831335632314831345632324831355632334831345632324831335632334831315632324831305632335a4d31302c32335632324831315632314831335632324831345632334831335632324831315632335a4d392c32305631364831355632304831345631374831305631384831335631394831315631384831305632305a4d322c32305636483356354834563448355633483656324831385633483139563448323056354832315636483232563230483231563231483230563232483139563233483138563234483137563230483138563139483139563138483230563133483231563130483230563948313956364831385635483137563448313556364831335638483131563130483956313248375631344835563136483456313848355631394836563230483756323448365632334835563232483456323148335632305a4d332c31305639483231563130483139563132483138563133483134563132483133563130483131563132483130563133483656313248355631305a4d332c38563448345633483556324836563148375630483137563148313856324831395633483230563448323156385a4d31302c32325632314831315632324831335632314831345632324831335632334831315632325a4d31302c31374837563136483656313548355631344834563139483556323048365632314837563232483956323348313156323448313356323348313556323248313756323148313856323048313956313948323056313448313956313548313856313648313756313748313556313648395631374831345631384831305631375a
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c80636871ee40116100b857806395d89b411161007c57806395d89b411461033a578063a22cb46514610358578063b88d4fde14610374578063c87b56dd14610390578063e985e9c5146103c0578063f2fde38b146103f057610137565b80636871ee40146102bc57806370942fc1146102c657806370a08231146102e2578063715018a6146103125780638da5cb5b1461031c57610137565b806323b872dd116100ff57806323b872dd146101f45780632f745c591461021057806342842e0e146102405780634f6ccce71461025c5780636352211e1461028c57610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba57806318160ddd146101d6575b600080fd5b6101566004803603810190610151919061395a565b61040c565b60405161016391906146ee565b60405180910390f35b610174610486565b6040516101819190614709565b60405180910390f35b6101a4600480360381019061019f91906139b4565b610518565b6040516101b19190614687565b60405180910390f35b6101d460048036038101906101cf919061391a565b61059d565b005b6101de6106b5565b6040516101eb919061498b565b60405180910390f35b61020e60048036038101906102099190613804565b6106c2565b005b61022a6004803603810190610225919061391a565b610722565b604051610237919061498b565b60405180910390f35b61025a60048036038101906102559190613804565b6107c7565b005b610276600480360381019061027191906139b4565b6107e7565b604051610283919061498b565b60405180910390f35b6102a660048036038101906102a191906139b4565b610858565b6040516102b39190614687565b60405180910390f35b6102c461090a565b005b6102e060048036038101906102db91906139b4565b61099a565b005b6102fc60048036038101906102f79190613797565b610a9b565b604051610309919061498b565b60405180910390f35b61031a610b53565b005b610324610bdb565b6040516103319190614687565b60405180910390f35b610342610c05565b60405161034f9190614709565b60405180910390f35b610372600480360381019061036d91906138da565b610c97565b005b61038e60048036038101906103899190613857565b610cad565b005b6103aa60048036038101906103a591906139b4565b610d0f565b6040516103b79190614709565b60405180910390f35b6103da60048036038101906103d591906137c4565b61112b565b6040516103e791906146ee565b60405180910390f35b61040a60048036038101906104059190613797565b6111bf565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061047f575061047e826112b7565b5b9050919050565b60606000805461049590614c6b565b80601f01602080910402602001604051908101604052809291908181526020018280546104c190614c6b565b801561050e5780601f106104e35761010080835404028352916020019161050e565b820191906000526020600020905b8154815290600101906020018083116104f157829003601f168201915b5050505050905090565b600061052382611399565b610562576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610559906148ab565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105a882610858565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106109061490b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610638611405565b73ffffffffffffffffffffffffffffffffffffffff161480610667575061066681610661611405565b61112b565b5b6106a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069d9061482b565b60405180910390fd5b6106b0838361140d565b505050565b6000600880549050905090565b6106d36106cd611405565b826114c6565b610712576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107099061492b565b60405180910390fd5b61071d8383836115a4565b505050565b600061072d83610a9b565b821061076e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107659061474b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6107e283838360405180602001604052806000815250610cad565b505050565b60006107f16106b5565b8210610832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108299061494b565b60405180910390fd5b6008828154811061084657610845614e0e565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f89061486b565b60405180910390fd5b80915050919050565b6002600a541415610950576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109479061496b565b60405180910390fd5b6002600a819055506000610964600c611800565b9050611e00811061097457600080fd5b61097e600c61180e565b61098f610989611405565b82611824565b506001600a81905550565b6002600a5414156109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d79061496b565b60405180910390fd5b6002600a819055506109f0611405565b73ffffffffffffffffffffffffffffffffffffffff16610a0e610bdb565b73ffffffffffffffffffffffffffffffffffffffff1614610a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5b906148cb565b60405180910390fd5b611dff81118015610a76575061200081105b610a7f57600080fd5b610a90610a8a610bdb565b82611824565b6001600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b039061484b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b5b611405565b73ffffffffffffffffffffffffffffffffffffffff16610b79610bdb565b73ffffffffffffffffffffffffffffffffffffffff1614610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc6906148cb565b60405180910390fd5b610bd96000611842565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610c1490614c6b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4090614c6b565b8015610c8d5780601f10610c6257610100808354040283529160200191610c8d565b820191906000526020600020905b815481529060010190602001808311610c7057829003601f168201915b5050505050905090565b610ca9610ca2611405565b8383611908565b5050565b610cbe610cb8611405565b836114c6565b610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf49061492b565b60405180910390fd5b610d0984848484611a75565b50505050565b6060610d1a82611399565b610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d509061472b565b60405180910390fd5b60608060006040518060a00160405280607d8152602001615b46607d9139905060006040518060400160405280600181526020017f5b000000000000000000000000000000000000000000000000000000000000008152509050610dbc86611ad1565b80945081955050508083604051602001610dd792919061428a565b60405160208183030381529060405290508184604051602001610dfb929190614266565b6040516020818303038152906040529150610e1586611bea565b80945081955050508083604051602001610e3092919061428a565b60405160208183030381529060405290508184604051602001610e54929190614266565b6040516020818303038152906040529150610e6e86611ee0565b80945081955050508083604051602001610e8992919061428a565b60405160208183030381529060405290508184604051602001610ead929190614266565b6040516020818303038152906040529150610ec7866120bd565b80945081955050508083604051602001610ee292919061428a565b60405160208183030381529060405290508184604051602001610f06929190614266565b6040516020818303038152906040529150610f208661229a565b80945081955050508083604051602001610f3b92919061428a565b60405160208183030381529060405290508184604051602001610f5f929190614266565b6040516020818303038152906040529150610f7986612477565b80945081955050508083604051602001610f9492919061428a565b60405160208183030381529060405290508184604051602001610fb8929190614266565b6040516020818303038152906040529150610fd286612654565b80945081955050508083604051602001610fed92919061428a565b60405160208183030381529060405290508184604051602001611011929190614266565b604051602081830303815290604052915061102b866128dc565b80945081955050508083604051602001611046929190614266565b6040516020818303038152906040529050818460405160200161106a929190614266565b60405160208183030381529060405291508160405160200161108c91906142db565b6040516020818303038152906040529150806040516020016110ae91906142b9565b604051602081830303815290604052905060006110fd6110cd88612ab9565b6110d685612c1a565b846040516020016110e993929190614342565b604051602081830303815290604052612c1a565b60405160200161110d91906144ee565b60405160208183030381529060405290508095505050505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111c7611405565b73ffffffffffffffffffffffffffffffffffffffff166111e5610bdb565b73ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906148cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a29061478b565b60405180910390fd5b6112b481611842565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061138257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611392575061139182612db2565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661148083610858565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114d182611399565b611510576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115079061480b565b60405180910390fd5b600061151b83610858565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061158a57508373ffffffffffffffffffffffffffffffffffffffff1661157284610518565b73ffffffffffffffffffffffffffffffffffffffff16145b8061159b575061159a818561112b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166115c482610858565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611611906148eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561168a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611681906147cb565b60405180910390fd5b611695838383612e1c565b6116a060008261140d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116f09190614b55565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117479190614a74565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b61183e828260405180602001604052806000815250612f30565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e906147eb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a6891906146ee565b60405180910390a3505050565b611a808484846115a4565b611a8c84848484612f8b565b611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac29061476b565b60405180910390fd5b50505050565b6060806000611b5884600f805480602002602001604051908101604052809291908181526020018280548015611b4e57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611b155790505b5050505050613122565b90506000600d8281548110611b7057611b6f614e0e565b5b90600052602060002001604051602001611b8a9190614582565b60405160208183030381529060405290506000600e8381548110611bb157611bb0614e0e565b5b90600052602060002001604051602001611bcb9190614510565b6040516020818303038152906040529050818194509450505050915091565b60608060606000611c73856013805480602002602001604051908101604052809291908181526020018280548015611c6957602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611c305790505b5050505050613122565b9050600060118281548110611c8b57611c8a614e0e565b5b906000526020600020018054611ca090614c6b565b80601f0160208091040260200160405190810160405280929190818152602001828054611ccc90614c6b565b8015611d195780601f10611cee57610100808354040283529160200191611d19565b820191906000526020600020905b815481529060010190602001808311611cfc57829003601f168201915b505050505090506000819050600081600081518110611d3b57611d3a614e0e565b5b602001015160f81c60f81b82600181518110611d5a57611d59614e0e565b5b602001015160f81c60f81b83600281518110611d7957611d78614e0e565b5b602001015160f81c60f81b604051602001611d96939291906141fb565b6040516020818303038152906040529050600082600381518110611dbd57611dbc614e0e565b5b602001015160f81c60f81b83600481518110611ddc57611ddb614e0e565b5b602001015160f81c60f81b84600581518110611dfb57611dfa614e0e565b5b602001015160f81c60f81b604051602001611e18939291906141fb565b60405160208183030381529060405290506010600081548110611e3e57611e3d614e0e565b5b90600052602060002001826010600181548110611e5e57611e5d614e0e565b5b9060005260206000200183604051602001611e7c949392919061439f565b6040516020818303038152906040529550600060128681548110611ea357611ea2614e0e565b5b90600052602060002001604051602001611ebd9190614615565b604051602081830303815290604052905086819850985050505050505050915091565b6060806060806000611f6a866016805480602002602001604051908101604052809291908181526020018280548015611f6057602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611f275790505b5050505050613122565b90506000611ff0876019805480602002602001604051908101604052809291908181526020018280548015611fe657602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611fad5790505b5050505050613122565b90506014828154811061200657612005614e0e565b5b906000526020600020016017828154811061202457612023614e0e565b5b9060005260206000200160405160200161203f92919061441f565b60405160208183030381529060405293506018818154811061206457612063614e0e565b5b906000526020600020016015838154811061208257612081614e0e565b5b9060005260206000200160405160200161209d9291906142fd565b604051602081830303815290604052925083839550955050505050915091565b606080606080600061214786601c80548060200260200160405190810160405280929190818152602001828054801561213d57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116121045790505b5050505050613122565b905060006121cd87601f8054806020026020016040519081016040528092919081815260200182805480156121c357602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161218a5790505b5050505050613122565b9050601a82815481106121e3576121e2614e0e565b5b90600052602060002001601d828154811061220157612200614e0e565b5b9060005260206000200160405160200161221c92919061441f565b6040516020818303038152906040529350601e818154811061224157612240614e0e565b5b90600052602060002001601b838154811061225f5761225e614e0e565b5b9060005260206000200160405160200161227a9291906144a9565b604051602081830303815290604052925083839550955050505050915091565b606080606080600061232486602280548060200260200160405190810160405280929190818152602001828054801561231a57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116122e15790505b5050505050613122565b905060006123aa8760258054806020026020016040519081016040528092919081815260200182805480156123a057602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116123675790505b5050505050613122565b9050602082815481106123c0576123bf614e0e565b5b90600052602060002001602382815481106123de576123dd614e0e565b5b906000526020600020016040516020016123f992919061441f565b60405160208183030381529060405293506024818154811061241e5761241d614e0e565b5b906000526020600020016021838154811061243c5761243b614e0e565b5b90600052602060002001604051602001612457929190614642565b604051602081830303815290604052925083839550955050505050915091565b60608060608060006125018660288054806020026020016040519081016040528092919081815260200182805480156124f757602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116124be5790505b5050505050613122565b9050600061258787602b80548060200260200160405190810160405280929190818152602001828054801561257d57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116125445790505b5050505050613122565b90506026828154811061259d5761259c614e0e565b5b90600052602060002001602982815481106125bb576125ba614e0e565b5b906000526020600020016040516020016125d692919061441f565b6040516020818303038152906040529350602a81815481106125fb576125fa614e0e565b5b906000526020600020016027838154811061261957612618614e0e565b5b906000526020600020016040516020016126349291906145d0565b604051602081830303815290604052925083839550955050505050915091565b60608060608060006126de86602e8054806020026020016040519081016040528092919081815260200182805480156126d457602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161269b5790505b5050505050613122565b9050602c81815481106126f4576126f3614e0e565b5b9060005260206000200160405161270b919061424f565b60405180910390207fc679ad1c8c8141266b59870c14c6b333ddc707ff9b838b951279df27b722407e146128815760006127bd8760318054806020026020016040519081016040528092919081815260200182805480156127b357602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161277a5790505b5050505050613122565b9050602c82815481106127d3576127d2614e0e565b5b90600052602060002001602f82815481106127f1576127f0614e0e565b5b9060005260206000200160405160200161280c92919061441f565b60405160208183030381529060405293506030818154811061283157612830614e0e565b5b90600052602060002001602d838154811061284f5761284e614e0e565b5b9060005260206000200160405160200161286a929190614464565b6040516020818303038152906040529250506128ce565b604051806020016040528060008152509250604051806060016040528060238152602001615bc3602391396040516020016128bc9190614238565b60405160208183030381529060405291505b828294509450505050915091565b606080606080600061296686603480548060200260200160405190810160405280929190818152602001828054801561295c57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116129235790505b5050505050613122565b905060006129ec8760378054806020026020016040519081016040528092919081815260200182805480156129e257602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116129a95790505b5050505050613122565b905060328281548110612a0257612a01614e0e565b5b9060005260206000200160358281548110612a2057612a1f614e0e565b5b90600052602060002001604051602001612a3b92919061441f565b604051602081830303815290604052935060368181548110612a6057612a5f614e0e565b5b9060005260206000200160338381548110612a7e57612a7d614e0e565b5b90600052602060002001604051602001612a9992919061453d565b604051602081830303815290604052925083839550955050505050915091565b60606000821415612b01576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c15565b600082905060005b60008214612b33578080612b1c90614cce565b915050600a82612b2c9190614aca565b9150612b09565b60008167ffffffffffffffff811115612b4f57612b4e614e3d565b5b6040519080825280601f01601f191660200182016040528015612b815781602001600182028036833780820191505090505b5090505b60008514612c0e57600182612b9a9190614b55565b9150600a85612ba99190614d21565b6030612bb59190614a74565b60f81b818381518110612bcb57612bca614e0e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c079190614aca565b9450612b85565b8093505050505b919050565b60606000825190506000811415612c435760405180602001604052806000815250915050612dad565b60006003600283612c549190614a74565b612c5e9190614aca565b6004612c6a9190614afb565b90506000602082612c7b9190614a74565b67ffffffffffffffff811115612c9457612c93614e3d565b5b6040519080825280601f01601f191660200182016040528015612cc65781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001615b06604091399050600181016020830160005b86811015612d6a5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612cf1565b506003860660018114612d845760028114612d9457612d9f565b613d3d60f01b6002830352612d9f565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e278383836131d2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e6a57612e65816131d7565b612ea9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ea857612ea78382613220565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eec57612ee78161338d565b612f2b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f2a57612f29828261345e565b5b5b505050565b612f3a83836134dd565b612f476000848484612f8b565b612f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7d9061476b565b60405180910390fd5b505050565b6000612fac8473ffffffffffffffffffffffffffffffffffffffff166136ab565b15613115578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fd5611405565b8786866040518563ffffffff1660e01b8152600401612ff794939291906146a2565b602060405180830381600087803b15801561301157600080fd5b505af192505050801561304257506040513d601f19601f8201168201806040525081019061303f9190613987565b60015b6130c5573d8060008114613072576040519150601f19603f3d011682016040523d82523d6000602084013e613077565b606091505b506000815114156130bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b49061476b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061311a565b600190505b949350505050565b600080610100846131339190614afb565b9050600061200061314383612ab9565b8051906020012060001c6131579190614d21565b905060008085828151811061316f5761316e614e0e565b5b602002602001015161ffff1690505b808311156131c557818061319190614cce565b9250508582815181106131a7576131a6614e0e565b5b602002602001015161ffff16816131be9190614a74565b905061317e565b8194505050505092915050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161322d84610a9b565b6132379190614b55565b905060006007600084815260200190815260200160002054905081811461331c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506133a19190614b55565b90506000600960008481526020019081526020016000205490506000600883815481106133d1576133d0614e0e565b5b9060005260206000200154905080600883815481106133f3576133f2614e0e565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061344257613441614ddf565b5b6001900381819060005260206000200160009055905550505050565b600061346983610a9b565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561354d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135449061488b565b60405180910390fd5b61355681611399565b15613596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358d906147ab565b60405180910390fd5b6135a260008383612e1c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135f29190614a74565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60006136d16136cc846149cb565b6149a6565b9050828152602081018484840111156136ed576136ec614e71565b5b6136f8848285614c29565b509392505050565b60008135905061370f81615aa9565b92915050565b60008135905061372481615ac0565b92915050565b60008135905061373981615ad7565b92915050565b60008151905061374e81615ad7565b92915050565b600082601f83011261376957613768614e6c565b5b81356137798482602086016136be565b91505092915050565b60008135905061379181615aee565b92915050565b6000602082840312156137ad576137ac614e7b565b5b60006137bb84828501613700565b91505092915050565b600080604083850312156137db576137da614e7b565b5b60006137e985828601613700565b92505060206137fa85828601613700565b9150509250929050565b60008060006060848603121561381d5761381c614e7b565b5b600061382b86828701613700565b935050602061383c86828701613700565b925050604061384d86828701613782565b9150509250925092565b6000806000806080858703121561387157613870614e7b565b5b600061387f87828801613700565b945050602061389087828801613700565b93505060406138a187828801613782565b925050606085013567ffffffffffffffff8111156138c2576138c1614e76565b5b6138ce87828801613754565b91505092959194509250565b600080604083850312156138f1576138f0614e7b565b5b60006138ff85828601613700565b925050602061391085828601613715565b9150509250929050565b6000806040838503121561393157613930614e7b565b5b600061393f85828601613700565b925050602061395085828601613782565b9150509250929050565b6000602082840312156139705761396f614e7b565b5b600061397e8482850161372a565b91505092915050565b60006020828403121561399d5761399c614e7b565b5b60006139ab8482850161373f565b91505092915050565b6000602082840312156139ca576139c9614e7b565b5b60006139d884828501613782565b91505092915050565b6139ea81614b89565b82525050565b6139f981614b9b565b82525050565b613a10613a0b82614ba7565b614d17565b82525050565b6000613a2182614a26565b613a2b8185614a3c565b9350613a3b818560208601614c38565b613a4481614e80565b840191505092915050565b6000613a5a82614a26565b613a648185614a4d565b9350613a74818560208601614c38565b80840191505092915050565b60008154613a8d81614c6b565b613a978186614a4d565b94506001821660008114613ab25760018114613ac357613af6565b60ff19831686528186019350613af6565b613acc856149fc565b60005b83811015613aee57815481890152600182019150602081019050613acf565b838801955050505b50505092915050565b6000613b0a82614a31565b613b148185614a58565b9350613b24818560208601614c38565b613b2d81614e80565b840191505092915050565b6000613b4382614a31565b613b4d8185614a69565b9350613b5d818560208601614c38565b80840191505092915050565b60008154613b7681614c6b565b613b808186614a69565b94506001821660008114613b9b5760018114613bac57613bdf565b60ff19831686528186019350613bdf565b613bb585614a11565b60005b83811015613bd757815481890152600182019150602081019050613bb8565b838801955050505b50505092915050565b6000613bf5602483614a58565b9150613c0082614e91565b604082019050919050565b6000613c1860b483614a69565b9150613c2382614ee0565b60b482019050919050565b6000613c3b600983614a69565b9150613c4682614fc7565b600982019050919050565b6000613c5e607483614a69565b9150613c6982614ff0565b607482019050919050565b6000613c81604383614a69565b9150613c8c8261508b565b604382019050919050565b6000613ca4602b83614a58565b9150613caf82615100565b604082019050919050565b6000613cc7603283614a58565b9150613cd28261514f565b604082019050919050565b6000613cea602683614a58565b9150613cf58261519e565b604082019050919050565b6000613d0d601c83614a58565b9150613d18826151ed565b602082019050919050565b6000613d30602183614a69565b9150613d3b82615216565b602182019050919050565b6000613d53600f83614a69565b9150613d5e82615265565b600f82019050919050565b6000613d76600183614a69565b9150613d818261528e565b600182019050919050565b6000613d99602483614a58565b9150613da4826152b7565b604082019050919050565b6000613dbc601983614a58565b9150613dc782615306565b602082019050919050565b6000613ddf602c83614a58565b9150613dea8261532f565b604082019050919050565b6000613e02600183614a69565b9150613e0d8261537e565b600182019050919050565b6000613e25603883614a58565b9150613e30826153a7565b604082019050919050565b6000613e48600483614a69565b9150613e53826153f6565b600482019050919050565b6000613e6b602a83614a58565b9150613e768261541f565b604082019050919050565b6000613e8e602983614a58565b9150613e998261546e565b604082019050919050565b6000613eb1601483614a69565b9150613ebc826154bd565b601482019050919050565b6000613ed4600283614a69565b9150613edf826154e6565b600282019050919050565b6000613ef7600983614a69565b9150613f028261550f565b600982019050919050565b6000613f1a602083614a58565b9150613f2582615538565b602082019050919050565b6000613f3d600183614a69565b9150613f4882615561565b600182019050919050565b6000613f60602c83614a58565b9150613f6b8261558a565b604082019050919050565b6000613f83602083614a58565b9150613f8e826155d9565b602082019050919050565b6000613fa6601d83614a69565b9150613fb182615602565b601d82019050919050565b6000613fc9602983614a58565b9150613fd48261562b565b604082019050919050565b6000613fec600183614a69565b9150613ff78261567a565b600182019050919050565b600061400f602183614a58565b915061401a826156a3565b604082019050919050565b6000614032602083614a69565b915061403d826156f2565b602082019050919050565b6000614055601d83614a69565b91506140608261571b565b601d82019050919050565b6000614078601e83614a69565b915061408382615744565b601e82019050919050565b600061409b603183614a58565b91506140a68261576d565b604082019050919050565b60006140be601f83614a69565b91506140c9826157bc565b601f82019050919050565b60006140e1602c83614a58565b91506140ec826157e5565b604082019050919050565b6000614104605283614a69565b915061410f82615834565b605282019050919050565b6000614127601e83614a69565b9150614132826158a9565b601e82019050919050565b600061414a60da83614a69565b9150614155826158d2565b60da82019050919050565b600061416d601e83614a69565b9150614178826159df565b601e82019050919050565b6000614190601f83614a58565b915061419b82615a08565b602082019050919050565b60006141b3600683614a69565b91506141be82615a31565b600682019050919050565b60006141d6602283614a69565b91506141e182615a5a565b602282019050919050565b6141f581614c1f565b82525050565b600061420782866139ff565b60018201915061421782856139ff565b60018201915061422782846139ff565b600182019150819050949350505050565b60006142448284613a4f565b915081905092915050565b600061425b8284613a80565b915081905092915050565b60006142728285613b38565b915061427e8284613b38565b91508190509392505050565b60006142968285613b38565b91506142a28284613b38565b91506142ad82613d69565b91508190509392505050565b60006142c58284613b38565b91506142d082613fdf565b915081905092915050565b60006142e78284613b38565b91506142f2826141a6565b915081905092915050565b600061430882613d23565b91506143148285613b69565b915061431f82613df5565b915061432b8284613b69565b915061433682613ec7565b91508190509392505050565b600061434d82613ea4565b91506143598286613b38565b91506143648261413d565b91506143708285613b38565b915061437b82613d46565b91506143878284613b38565b915061439282613f30565b9150819050949350505050565b60006143aa82613eea565b91506143b68287613b69565b91506143c182613c2e565b91506143cd8286613b38565b91506143d882613e3b565b91506143e382613eea565b91506143ef8285613b69565b91506143fa82613c2e565b91506144068284613b38565b915061441182613e3b565b915081905095945050505050565b600061442a82613eea565b91506144368285613b69565b915061444182613c2e565b915061444d8284613b69565b915061445882613e3b565b91508190509392505050565b600061446f82613f99565b915061447b8285613b69565b915061448682613df5565b91506144928284613b69565b915061449d82613ec7565b91508190509392505050565b60006144b482614025565b91506144c08285613b69565b91506144cb82613df5565b91506144d78284613b69565b91506144e282613ec7565b91508190509392505050565b60006144f982614048565b91506145058284613b38565b915081905092915050565b600061451b8261406b565b91506145278284613b69565b915061453282613ec7565b915081905092915050565b6000614548826140b1565b91506145548285613b69565b915061455f82613df5565b915061456b8284613b69565b915061457682613ec7565b91508190509392505050565b600061458d826140f7565b91506145998284613b69565b91506145a482613e3b565b91506145af82613c0b565b91506145ba82613c51565b91506145c582613c74565b915081905092915050565b60006145db8261411a565b91506145e78285613b69565b91506145f282613df5565b91506145fe8284613b69565b915061460982613ec7565b91508190509392505050565b600061462082614160565b915061462c8284613b69565b915061463782613ec7565b915081905092915050565b600061464d826141c9565b91506146598285613b69565b915061466482613df5565b91506146708284613b69565b915061467b82613ec7565b91508190509392505050565b600060208201905061469c60008301846139e1565b92915050565b60006080820190506146b760008301876139e1565b6146c460208301866139e1565b6146d160408301856141ec565b81810360608301526146e38184613a16565b905095945050505050565b600060208201905061470360008301846139f0565b92915050565b600060208201905081810360008301526147238184613aff565b905092915050565b6000602082019050818103600083015261474481613be8565b9050919050565b6000602082019050818103600083015261476481613c97565b9050919050565b6000602082019050818103600083015261478481613cba565b9050919050565b600060208201905081810360008301526147a481613cdd565b9050919050565b600060208201905081810360008301526147c481613d00565b9050919050565b600060208201905081810360008301526147e481613d8c565b9050919050565b6000602082019050818103600083015261480481613daf565b9050919050565b6000602082019050818103600083015261482481613dd2565b9050919050565b6000602082019050818103600083015261484481613e18565b9050919050565b6000602082019050818103600083015261486481613e5e565b9050919050565b6000602082019050818103600083015261488481613e81565b9050919050565b600060208201905081810360008301526148a481613f0d565b9050919050565b600060208201905081810360008301526148c481613f53565b9050919050565b600060208201905081810360008301526148e481613f76565b9050919050565b6000602082019050818103600083015261490481613fbc565b9050919050565b6000602082019050818103600083015261492481614002565b9050919050565b600060208201905081810360008301526149448161408e565b9050919050565b60006020820190508181036000830152614964816140d4565b9050919050565b6000602082019050818103600083015261498481614183565b9050919050565b60006020820190506149a060008301846141ec565b92915050565b60006149b06149c1565b90506149bc8282614c9d565b919050565b6000604051905090565b600067ffffffffffffffff8211156149e6576149e5614e3d565b5b6149ef82614e80565b9050602081019050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614a7f82614c1f565b9150614a8a83614c1f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614abf57614abe614d52565b5b828201905092915050565b6000614ad582614c1f565b9150614ae083614c1f565b925082614af057614aef614d81565b5b828204905092915050565b6000614b0682614c1f565b9150614b1183614c1f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b4a57614b49614d52565b5b828202905092915050565b6000614b6082614c1f565b9150614b6b83614c1f565b925082821015614b7e57614b7d614d52565b5b828203905092915050565b6000614b9482614bff565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614c56578082015181840152602081019050614c3b565b83811115614c65576000848401525b50505050565b60006002820490506001821680614c8357607f821691505b60208210811415614c9757614c96614db0565b5b50919050565b614ca682614e80565b810181811067ffffffffffffffff82111715614cc557614cc4614e3d565b5b80604052505050565b6000614cd982614c1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d0c57614d0b614d52565b5b600182019050919050565b6000819050919050565b6000614d2c82614c1f565b9150614d3783614c1f565b925082614d4757614d46614d81565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732314d657461646174613a204465656420646f6573206e6f7420657860008201527f6973742100000000000000000000000000000000000000000000000000000000602082015250565b7f3c7061746820643d224d382c323456323048375631394836563138483556364860008201527f365635483756344831375635483138563648313956313848313856313948313760208201527f563230483136563234483137563230483138563139483139563138483230563160408201527f334832315639483230563648313956354831385634483137563348375634483660608201527f563548355636483456394833563133483456313848355631394836563230483760808201527f5632345a222066696c6c3d222333333322202f3e00000000000000000000000060a082015250565b7f222066696c6c3d22230000000000000000000000000000000000000000000000600082015250565b7f3c7061746820643d224d372c313356313248365631314835563130483756394860008201527f395631304831305631314831315631324831335631314831345631304831355660208201527f394831375631304831395631314831385631324831375631334831355631324860408201527f395631335a222066696c6c3d2223444444222f3e000000000000000000000000606082015250565b7f3c7061746820643d224d31322c3136483131563135483133563136483132563160008201527f374831345631384831305631374831325631365a222066696c6c3d222333333360208201527f222f3e0000000000000000000000000000000000000000000000000000000000604082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f7b2274726169745f74797065223a2245617272696e67222c2276616c7565223a60008201527f2200000000000000000000000000000000000000000000000000000000000000602082015250565b7f222c2261747472696275746573223a0000000000000000000000000000000000600082015250565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f22202f3e00000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f7b226e616d65223a20224d657461727a616e2023000000000000000000000000600082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f3c7061746820643d220000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7b2274726169745f74797065223a22486174222c2276616c7565223a22000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5d00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f7b2274726169745f74797065223a22546174746f6f222c2276616c7565223a22600082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f7b2274726169745f74797065223a22536b696e222c2276616c7565223a220000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7b2274726169745f74797065223a224265617264222c2276616c7565223a2200600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f3c7061746820643d224d352c364836563548375634483137563548313856364860008201527f313956313848313856313948313756323048313656323448385632304837563160208201527f39483656313848355a222066696c6c3d22230000000000000000000000000000604082015250565b7f7b2274726169745f74797065223a2248616972222c2276616c7565223a220000600082015250565b7f222c20226465736372697074696f6e223a20224d657461727a616e206973206260008201527f75696c64696e672061204d65746176657273652046554c4c59204f6e6368616960208201527f6e2120416c6c20746865206d6574616461746120616e6420696d61676573206160408201527f72652067656e65726174656420616e642073746f7265642031303025206f6e2d60608201527f636861696e2e204e6f20495046532c206e6f204150492e204d6572656c79204560808201527f7468657265756d20626c6f636b636861696e2e222c2022696d616765223a202260a08201527f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000060c082015250565b7f7b2274726169745f74797065223a2245796573222c2276616c7565223a220000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f3c2f7376673e0000000000000000000000000000000000000000000000000000600082015250565b7f7b2274726169745f74797065223a224579657061746368222c2276616c75652260008201527f3a22000000000000000000000000000000000000000000000000000000000000602082015250565b615ab281614b89565b8114615abd57600080fd5b50565b615ac981614b9b565b8114615ad457600080fd5b50565b615ae081614bd3565b8114615aeb57600080fd5b50565b615af781614c1f565b8114615b0257600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222073686170652d72656e646572696e673d2263726973704564676573222076696577426f783d22302030203234203234223e7b2274726169745f74797065223a22486174222c2276616c7565223a224e6f6e65227da26469706673582212202fc8b13f59d0837385912f25b9054ab92d53632d75d73c7dbc96431ddef61a5364736f6c63430008070033
Deployed Bytecode Sourcemap
50964:21570:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42607:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30095:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31654:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31177:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43247:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32404:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42915:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32814:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43437:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29789:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;72076:217;;;:::i;:::-;;72301:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29519:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9017:103;;;:::i;:::-;;8366:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30264:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31947:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33070:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;68853:3215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32173:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9275:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42607:224;42709:4;42748:35;42733:50;;;:11;:50;;;;:90;;;;42787:36;42811:11;42787:23;:36::i;:::-;42733:90;42726:97;;42607:224;;;:::o;30095:100::-;30149:13;30182:5;30175:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30095:100;:::o;31654:221::-;31730:7;31758:16;31766:7;31758;:16::i;:::-;31750:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31843:15;:24;31859:7;31843:24;;;;;;;;;;;;;;;;;;;;;31836:31;;31654:221;;;:::o;31177:411::-;31258:13;31274:23;31289:7;31274:14;:23::i;:::-;31258:39;;31322:5;31316:11;;:2;:11;;;;31308:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31416:5;31400:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31425:37;31442:5;31449:12;:10;:12::i;:::-;31425:16;:37::i;:::-;31400:62;31378:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31559:21;31568:2;31572:7;31559:8;:21::i;:::-;31247:341;31177:411;;:::o;43247:113::-;43308:7;43335:10;:17;;;;43328:24;;43247:113;:::o;32404:339::-;32599:41;32618:12;:10;:12::i;:::-;32632:7;32599:18;:41::i;:::-;32591:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32707:28;32717:4;32723:2;32727:7;32707:9;:28::i;:::-;32404:339;;;:::o;42915:256::-;43012:7;43048:23;43065:5;43048:16;:23::i;:::-;43040:5;:31;43032:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43137:12;:19;43150:5;43137:19;;;;;;;;;;;;;;;:26;43157:5;43137:26;;;;;;;;;;;;43130:33;;42915:256;;;;:::o;32814:185::-;32952:39;32969:4;32975:2;32979:7;32952:39;;;;;;;;;;;;:16;:39::i;:::-;32814:185;;;:::o;43437:233::-;43512:7;43548:30;:28;:30::i;:::-;43540:5;:38;43532:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43645:10;43656:5;43645:17;;;;;;;;:::i;:::-;;;;;;;;;;43638:24;;43437:233;;;:::o;29789:239::-;29861:7;29881:13;29897:7;:16;29905:7;29897:16;;;;;;;;;;;;;;;;;;;;;29881:32;;29949:1;29932:19;;:5;:19;;;;29924:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30015:5;30008:12;;;29789:239;;;:::o;72076:217::-;1851:1;2449:7;;:19;;2441:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1851:1;2582:7;:18;;;;72127:15:::1;72145:25;:15;:23;:25::i;:::-;72127:43;;72199:4;72189:7;:14;72181:23;;;::::0;::::1;;72215:27;:15;:25;:27::i;:::-;72253:32;72263:12;:10;:12::i;:::-;72277:7;72253:9;:32::i;:::-;72116:177;1807:1:::0;2761:7;:22;;;;72076:217::o;72301:168::-;1851:1;2449:7;;:19;;2441:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1851:1;2582:7;:18;;;;8597:12:::1;:10;:12::i;:::-;8586:23;;:7;:5;:7::i;:::-;:23;;;8578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;72400:4:::2;72390:7;:14;:32;;;;;72418:4;72408:7;:14;72390:32;72382:41;;;::::0;::::2;;72434:27;72444:7;:5;:7::i;:::-;72453;72434:9;:27::i;:::-;1807:1:::0;2761:7;:22;;;;72301:168;:::o;29519:208::-;29591:7;29636:1;29619:19;;:5;:19;;;;29611:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29703:9;:16;29713:5;29703:16;;;;;;;;;;;;;;;;29696:23;;29519:208;;;:::o;9017:103::-;8597:12;:10;:12::i;:::-;8586:23;;:7;:5;:7::i;:::-;:23;;;8578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9082:30:::1;9109:1;9082:18;:30::i;:::-;9017:103::o:0;8366:87::-;8412:7;8439:6;;;;;;;;;;;8432:13;;8366:87;:::o;30264:104::-;30320:13;30353:7;30346:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30264:104;:::o;31947:155::-;32042:52;32061:12;:10;:12::i;:::-;32075:8;32085;32042:18;:52::i;:::-;31947:155;;:::o;33070:328::-;33245:41;33264:12;:10;:12::i;:::-;33278:7;33245:18;:41::i;:::-;33237:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33351:39;33365:4;33371:2;33375:7;33384:5;33351:13;:39::i;:::-;33070:328;;;;:::o;68853:3215::-;68954:13;68993:16;69001:7;68993;:16::i;:::-;68985:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;69061:24;69096:31;69138:30;:160;;;;;;;;;;;;;;;;;;;69309:24;:30;;;;;;;;;;;;;;;;;;;69384:16;69392:7;69384;:16::i;:::-;69350:50;;;;;;;;69462:10;69474:17;69445:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;69411:97;;69549:3;69554:10;69532:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;69519:47;;69611:16;69619:7;69611;:16::i;:::-;69577:50;;;;;;;;69689:10;69701:17;69672:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;69638:97;;69776:3;69781:10;69759:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;69746:47;;69838:20;69850:7;69838:11;:20::i;:::-;69804:54;;;;;;;;69920:10;69932:17;69903:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;69869:97;;70007:3;70012:10;69990:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;69977:47;;70069:19;70080:7;70069:10;:19::i;:::-;70035:53;;;;;;;;70150:10;70162:17;70133:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;70099:97;;70237:3;70242:10;70220:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;70207:47;;70299:22;70313:7;70299:13;:22::i;:::-;70265:56;;;;;;;;70383:10;70395:17;70366:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;70332:97;;70470:3;70475:10;70453:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;70440:47;;70532:17;70541:7;70532:8;:17::i;:::-;70498:51;;;;;;;;70611:10;70623:17;70594:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;70560:97;;70698:3;70703:10;70681:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;70668:47;;70760:16;70768:7;70760;:16::i;:::-;70726:50;;;;;;;;70838:10;70850:17;70821:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;70787:97;;70925:3;70930:10;70908:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;70895:47;;70987:17;70996:7;70987:8;:17::i;:::-;70953:51;;;;;;;;71052:10;71064:17;71035:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;71015:68;;71124:3;71129:10;71107:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;71094:47;;71184:3;71167:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;71154:45;;71247:10;71230:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;71210:54;;71277:23;71409:598;71537:18;:7;:16;:18::i;:::-;71829:25;71849:3;71829:13;:25::i;:::-;71925:10;71445:543;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;71409:13;:598::i;:::-;71324:698;;;;;;;;:::i;:::-;;;;;;;;;;;;;71277:756;;72051:9;72044:16;;;;;;;68853:3215;;;:::o;32173:164::-;32270:4;32294:18;:25;32313:5;32294:25;;;;;;;;;;;;;;;:35;32320:8;32294:35;;;;;;;;;;;;;;;;;;;;;;;;;32287:42;;32173:164;;;;:::o;9275:201::-;8597:12;:10;:12::i;:::-;8586:23;;:7;:5;:7::i;:::-;:23;;;8578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9384:1:::1;9364:22;;:8;:22;;;;9356:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9440:28;9459:8;9440:18;:28::i;:::-;9275:201:::0;:::o;29150:305::-;29252:4;29304:25;29289:40;;;:11;:40;;;;:105;;;;29361:33;29346:48;;;:11;:48;;;;29289:105;:158;;;;29411:36;29435:11;29411:23;:36::i;:::-;29289:158;29269:178;;29150:305;;;:::o;34908:127::-;34973:4;35025:1;34997:30;;:7;:16;35005:7;34997:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34990:37;;34908:127;;;:::o;7084:98::-;7137:7;7164:10;7157:17;;7084:98;:::o;38890:174::-;38992:2;38965:15;:24;38981:7;38965:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39048:7;39044:2;39010:46;;39019:23;39034:7;39019:14;:23::i;:::-;39010:46;;;;;;;;;;;;38890:174;;:::o;35202:348::-;35295:4;35320:16;35328:7;35320;:16::i;:::-;35312:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35396:13;35412:23;35427:7;35412:14;:23::i;:::-;35396:39;;35465:5;35454:16;;:7;:16;;;:51;;;;35498:7;35474:31;;:20;35486:7;35474:11;:20::i;:::-;:31;;;35454:51;:87;;;;35509:32;35526:5;35533:7;35509:16;:32::i;:::-;35454:87;35446:96;;;35202:348;;;;:::o;38194:578::-;38353:4;38326:31;;:23;38341:7;38326:14;:23::i;:::-;:31;;;38318:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;38436:1;38422:16;;:2;:16;;;;38414:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38492:39;38513:4;38519:2;38523:7;38492:20;:39::i;:::-;38596:29;38613:1;38617:7;38596:8;:29::i;:::-;38657:1;38638:9;:15;38648:4;38638:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38686:1;38669:9;:13;38679:2;38669:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38717:2;38698:7;:16;38706:7;38698:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38756:7;38752:2;38737:27;;38746:4;38737:27;;;;;;;;;;;;38194:578;;;:::o;3676:114::-;3741:7;3768;:14;;;3761:21;;3676:114;;;:::o;3798:127::-;3905:1;3887:7;:14;;;:19;;;;;;;;;;;3798:127;:::o;35892:110::-;35968:26;35978:2;35982:7;35968:26;;;;;;;;;;;;:9;:26::i;:::-;35892:110;;:::o;9636:191::-;9710:16;9729:6;;;;;;;;;;;9710:25;;9755:8;9746:6;;:17;;;;;;;;;;;;;;;;;;9810:8;9779:40;;9800:8;9779:40;;;;;;;;;;;;9699:128;9636:191;:::o;39206:315::-;39361:8;39352:17;;:5;:17;;;;39344:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39448:8;39410:18;:25;39429:5;39410:25;;;;;;;;;;;;;;;:35;39436:8;39410:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39494:8;39472:41;;39487:5;39472:41;;;39504:8;39472:41;;;;;;:::i;:::-;;;;;;;;39206:315;;;:::o;34280:::-;34437:28;34447:4;34453:2;34457:7;34437:9;:28::i;:::-;34484:48;34507:4;34513:2;34517:7;34526:5;34484:22;:48::i;:::-;34476:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34280:315;;;;:::o;60796:1113::-;60879:13;60894;60925:21;60949:25;60958:7;60967:6;60949:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:25::i;:::-;60925:49;;60985:17;61164:5;61170:13;61164:20;;;;;;;;:::i;:::-;;;;;;;;;61026:624;;;;;;;;:::i;:::-;;;;;;;;;;;;;60985:676;;61672:19;61801:6;61808:13;61801:21;;;;;;;;:::i;:::-;;;;;;;;;61715:145;;;;;;;;:::i;:::-;;;;;;;;;;;;;61672:199;;61890:3;61895:5;61882:19;;;;;;;60796:1113;;;:::o;61917:1391::-;62000:13;62015;62046:17;62074:21;62098:25;62107:7;62116:6;62098:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:25::i;:::-;62074:49;;62134:26;62163:5;62169:13;62163:20;;;;;;;;:::i;:::-;;;;;;;;;62134:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62194:30;62233:12;62194:52;;62257:28;62344:17;62362:1;62344:20;;;;;;;;:::i;:::-;;;;;;;;;;62383:17;62401:1;62383:20;;;;;;;;:::i;:::-;;;;;;;;;;62422:17;62440:1;62422:20;;;;;;;;:::i;:::-;;;;;;;;;;62309:148;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;62257:211;;62479:29;62567:17;62585:1;62567:20;;;;;;;;:::i;:::-;;;;;;;;;;62606:17;62624:1;62606:20;;;;;;;;:::i;:::-;;;;;;;;;;62645:17;62663:1;62645:20;;;;;;;;:::i;:::-;;;;;;;;;;62532:148;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;62479:212;;62794:4;62799:1;62794:7;;;;;;;;:::i;:::-;;;;;;;;;62850:14;62938:4;62943:1;62938:7;;;;;;;;:::i;:::-;;;;;;;;;62994:15;62729:320;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;62702:358;;63071:19;63200:6;63207:13;63200:21;;;;;;;;:::i;:::-;;;;;;;;;63114:145;;;;;;;;:::i;:::-;;;;;;;;;;;;;63071:199;;63289:3;63294:5;63281:19;;;;;;;;;;;61917:1391;;;:::o;63316:872::-;63403:13;63418;63449:17;63477:19;63507:18;63528:28;63537:7;63546:9;63528:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:28::i;:::-;63507:49;;63567:23;63593:29;63602:7;63611:10;63593:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:29::i;:::-;63567:55;;63725:8;63734:13;63725:23;;;;;;;;:::i;:::-;;;;;;;;;63797:9;63807:18;63797:29;;;;;;;;:::i;:::-;;;;;;;;;63660:206;;;;;;;;;:::i;:::-;;;;;;;;;;;;;63633:244;;64006:10;64017:18;64006:30;;;;;;;;:::i;:::-;;;;;;;;;64077:9;64087:13;64077:24;;;;;;;;:::i;:::-;;;;;;;;;63917:222;;;;;;;;;:::i;:::-;;;;;;;;;;;;;63888:262;;64169:3;64174:5;64161:19;;;;;;;;63316:872;;;:::o;64196:864::-;64282:13;64297;64328:17;64356:19;64386:18;64407:27;64416:7;64425:8;64407:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:27::i;:::-;64386:48;;64445:23;64471:28;64480:7;64489:9;64471:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:28::i;:::-;64445:54;;64602:7;64610:13;64602:22;;;;;;;;:::i;:::-;;;;;;;;;64673:8;64682:18;64673:28;;;;;;;;:::i;:::-;;;;;;;;;64537:204;;;;;;;;;:::i;:::-;;;;;;;;;;;;;64510:242;;64880:9;64890:18;64880:29;;;;;;;;:::i;:::-;;;;;;;;;64950:8;64959:13;64950:23;;;;;;;;:::i;:::-;;;;;;;;;64792:219;;;;;;;;;:::i;:::-;;;;;;;;;;;;;64763:259;;65041:3;65046:5;65033:19;;;;;;;;64196:864;;;:::o;65068:889::-;65157:13;65172;65203:17;65231:19;65261:18;65282:30;65291:7;65300:11;65282:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:30::i;:::-;65261:51;;65323:23;65349:31;65358:7;65367:12;65349:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:31::i;:::-;65323:57;;65483:10;65494:13;65483:25;;;;;;;;:::i;:::-;;;;;;;;;65557:11;65569:18;65557:31;;;;;;;;:::i;:::-;;;;;;;;;65418:210;;;;;;;;;:::i;:::-;;;;;;;;;;;;;65391:248;;65771:12;65784:18;65771:32;;;;;;;;:::i;:::-;;;;;;;;;65844:11;65856:13;65844:26;;;;;;;;:::i;:::-;;;;;;;;;65681:227;;;;;;;;;:::i;:::-;;;;;;;;;;;;;65652:267;;65938:3;65943:5;65930:19;;;;;;;;65068:889;;;:::o;65965:848::-;66049:13;66064;66095:17;66123:19;66153:18;66174:25;66183:7;66192:6;66174:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:25::i;:::-;66153:46;;66210:23;66236:26;66245:7;66254;66236:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:26::i;:::-;66210:52;;66365:5;66371:13;66365:20;;;;;;;;:::i;:::-;;;;;;;;;66434:6;66441:18;66434:26;;;;;;;;:::i;:::-;;;;;;;;;66300:200;;;;;;;;;:::i;:::-;;;;;;;;;;;;;66273:238;;66637:7;66645:18;66637:27;;;;;;;;:::i;:::-;;;;;;;;;66705:6;66712:13;66705:21;;;;;;;;:::i;:::-;;;;;;;;;66551:213;;;;;;;;;:::i;:::-;;;;;;;;;;;;;66522:253;;66794:3;66799:5;66786:19;;;;;;;;65965:848;;;:::o;66821:1167::-;66904:13;66919;66950:17;66978:19;67008:18;67029:24;67038:7;67047:5;67029:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:24::i;:::-;67008:45;;67104:4;67109:13;67104:19;;;;;;;;:::i;:::-;;;;;;;;;67088:37;;;;;;:::i;:::-;;;;;;;;67068:16;:57;67064:887;;67142:23;67168:25;67177:7;67186:6;67168:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:25::i;:::-;67142:51;;67312:4;67317:13;67312:19;;;;;;;;:::i;:::-;;;;;;;;;67388:5;67394:18;67388:25;;;;;;;;:::i;:::-;;;;;;;;;67239:222;;;;;;;;;:::i;:::-;;;;;;;;;;;;;67208:268;;67617:6;67624:18;67617:26;;;;;;;;:::i;:::-;;;;;;;;;67692:5;67698:13;67692:20;;;;;;;;:::i;:::-;;;;;;;;;67524:234;;;;;;;;;:::i;:::-;;;;;;;;;;;;;67491:282;;67127:658;67064:887;;;67806:8;;;;;;;;;;;;;;67879:44;;;;;;;;;;;;;;;;;67862:62;;;;;;;;:::i;:::-;;;;;;;;;;;;;67829:110;;67064:887;67969:3;67974:5;67961:19;;;;;;;66821:1167;;;:::o;67996:849::-;68080:13;68095;68126:17;68154:19;68184:18;68205:25;68214:7;68223:6;68205:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:25::i;:::-;68184:46;;68241:23;68267:26;68276:7;68285;68267:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:26::i;:::-;68241:52;;68396:5;68402:13;68396:20;;;;;;;;:::i;:::-;;;;;;;;;68465:6;68472:18;68465:26;;;;;;;;:::i;:::-;;;;;;;;;68331:200;;;;;;;;;:::i;:::-;;;;;;;;;;;;;68304:238;;68669:7;68677:18;68669:27;;;;;;;;:::i;:::-;;;;;;;;;68737:6;68744:13;68737:21;;;;;;;;:::i;:::-;;;;;;;;;68582:214;;;;;;;;;:::i;:::-;;;;;;;;;;;;;68553:254;;68826:3;68831:5;68818:19;;;;;;;;67996:849;;;:::o;4640:723::-;4696:13;4926:1;4917:5;:10;4913:53;;;4944:10;;;;;;;;;;;;;;;;;;;;;4913:53;4976:12;4991:5;4976:20;;5007:14;5032:78;5047:1;5039:4;:9;5032:78;;5065:8;;;;;:::i;:::-;;;;5096:2;5088:10;;;;;:::i;:::-;;;5032:78;;;5120:19;5152:6;5142:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5120:39;;5170:154;5186:1;5177:5;:10;5170:154;;5214:1;5204:11;;;;;:::i;:::-;;;5281:2;5273:5;:10;;;;:::i;:::-;5260:2;:24;;;;:::i;:::-;5247:39;;5230:6;5237;5230:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5310:2;5301:11;;;;;:::i;:::-;;;5170:154;;;5348:6;5334:21;;;;;4640:723;;;;:::o;49183:1774::-;49241:13;49267:11;49281:4;:11;49267:25;;49314:1;49307:3;:8;49303:23;;;49317:9;;;;;;;;;;;;;;;;;49303:23;49378:18;49416:1;49411;49405:3;:7;;;;:::i;:::-;49404:13;;;;:::i;:::-;49399:1;:19;;;;:::i;:::-;49378:40;;49476:19;49521:2;49508:10;:15;;;;:::i;:::-;49498:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49476:48;;49535:18;49556:5;;;;;;;;;;;;;;;;;49535:26;;49625:1;49618:5;49614:13;49670:2;49662:6;49658:15;49719:1;49687:954;49742:3;49739:1;49736:10;49687:954;;;49797:1;49794;49790:9;49785:14;;49855:8;49850:1;49844:4;49840:12;49834:19;49830:34;49933:4;49925:5;49921:2;49917:14;49913:25;49903:8;49899:40;49893:47;49972:3;49969:1;49965:11;49958:18;;50106:4;50097;50089:5;50085:2;50081:14;50077:25;50067:8;50063:40;50057:47;50053:58;50027:3;50001:129;49994:136;;50162:3;50159:1;50155:11;50148:18;;50295:4;50286;50278:5;50275:1;50271:13;50267:24;50257:8;50253:39;50247:46;50243:57;50217:3;50191:128;50184:135;;50351:3;50348:1;50344:11;50337:18;;50476:4;50467;50460:5;50456:16;50446:8;50442:31;50436:38;50432:49;50406:3;50380:120;50373:127;;50534:3;50529;50525:13;50518:20;;50574:3;50563:9;50556:22;50624:1;50613:9;50609:17;50596:30;;49766:875;;49687:954;;;49691:44;50671:1;50666:3;50662:11;50692:1;50687:84;;;;50790:1;50785:82;;;;50655:212;;50687:84;50748:6;50743:3;50739:16;50735:1;50724:9;50720:17;50713:43;50687:84;;50785:82;50846:4;50841:3;50837:14;50833:1;50822:9;50818:17;50811:41;50655:212;;50896:10;50888:6;50881:26;49583:1335;;50942:6;50928:21;;;;;;49183:1774;;;;:::o;20822:157::-;20907:4;20946:25;20931:40;;;:11;:40;;;;20924:47;;20822:157;;;:::o;44283:589::-;44427:45;44454:4;44460:2;44464:7;44427:26;:45::i;:::-;44505:1;44489:18;;:4;:18;;;44485:187;;;44524:40;44556:7;44524:31;:40::i;:::-;44485:187;;;44594:2;44586:10;;:4;:10;;;44582:90;;44613:47;44646:4;44652:7;44613:32;:47::i;:::-;44582:90;44485:187;44700:1;44686:16;;:2;:16;;;44682:183;;;44719:45;44756:7;44719:36;:45::i;:::-;44682:183;;;44792:4;44786:10;;:2;:10;;;44782:83;;44813:40;44841:2;44845:7;44813:27;:40::i;:::-;44782:83;44682:183;44283:589;;;:::o;36229:321::-;36359:18;36365:2;36369:7;36359:5;:18::i;:::-;36410:54;36441:1;36445:2;36449:7;36458:5;36410:22;:54::i;:::-;36388:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;36229:321;;;:::o;40086:799::-;40241:4;40262:15;:2;:13;;;:15::i;:::-;40258:620;;;40314:2;40298:36;;;40335:12;:10;:12::i;:::-;40349:4;40355:7;40364:5;40298:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40294:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40557:1;40540:6;:13;:18;40536:272;;;40583:60;;;;;;;;;;:::i;:::-;;;;;;;;40536:272;40758:6;40752:13;40743:6;40739:2;40735:15;40728:38;40294:529;40431:41;;;40421:51;;;:6;:51;;;;40414:58;;;;;40258:620;40862:4;40855:11;;40086:799;;;;;;;:::o;60325:463::-;60433:7;60458:13;60484:3;60474:7;:13;;;;:::i;:::-;60458:29;;60498:17;60580:4;60542:19;:8;:17;:19::i;:::-;60526:37;;;;;;60518:46;;:66;;;;:::i;:::-;60498:86;;60595:6;60616:20;60639:6;60646:1;60639:9;;;;;;;;:::i;:::-;;;;;;;;60616:32;;;;60659:103;60678:12;60666:9;:24;60659:103;;;60707:3;;;;;:::i;:::-;;;;60741:6;60748:1;60741:9;;;;;;;;:::i;:::-;;;;;;;;60725:25;;;;;;;:::i;:::-;;;60659:103;;;60779:1;60772:8;;;;;;60325:463;;;;:::o;41457:126::-;;;;:::o;45595:164::-;45699:10;:17;;;;45672:15;:24;45688:7;45672:24;;;;;;;;;;;:44;;;;45727:10;45743:7;45727:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45595:164;:::o;46386:988::-;46652:22;46702:1;46677:22;46694:4;46677:16;:22::i;:::-;:26;;;;:::i;:::-;46652:51;;46714:18;46735:17;:26;46753:7;46735:26;;;;;;;;;;;;46714:47;;46882:14;46868:10;:28;46864:328;;46913:19;46935:12;:18;46948:4;46935:18;;;;;;;;;;;;;;;:34;46954:14;46935:34;;;;;;;;;;;;46913:56;;47019:11;46986:12;:18;46999:4;46986:18;;;;;;;;;;;;;;;:30;47005:10;46986:30;;;;;;;;;;;:44;;;;47136:10;47103:17;:30;47121:11;47103:30;;;;;;;;;;;:43;;;;46898:294;46864:328;47288:17;:26;47306:7;47288:26;;;;;;;;;;;47281:33;;;47332:12;:18;47345:4;47332:18;;;;;;;;;;;;;;;:34;47351:14;47332:34;;;;;;;;;;;47325:41;;;46467:907;;46386:988;;:::o;47669:1079::-;47922:22;47967:1;47947:10;:17;;;;:21;;;;:::i;:::-;47922:46;;47979:18;48000:15;:24;48016:7;48000:24;;;;;;;;;;;;47979:45;;48351:19;48373:10;48384:14;48373:26;;;;;;;;:::i;:::-;;;;;;;;;;48351:48;;48437:11;48412:10;48423;48412:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48548:10;48517:15;:28;48533:11;48517:28;;;;;;;;;;;:41;;;;48689:15;:24;48705:7;48689:24;;;;;;;;;;;48682:31;;;48724:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47740:1008;;;47669:1079;:::o;45173:221::-;45258:14;45275:20;45292:2;45275:16;:20::i;:::-;45258:37;;45333:7;45306:12;:16;45319:2;45306:16;;;;;;;;;;;;;;;:24;45323:6;45306:24;;;;;;;;;;;:34;;;;45380:6;45351:17;:26;45369:7;45351:26;;;;;;;;;;;:35;;;;45247:147;45173:221;;:::o;36886:382::-;36980:1;36966:16;;:2;:16;;;;36958:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37039:16;37047:7;37039;:16::i;:::-;37038:17;37030:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37101:45;37130:1;37134:2;37138:7;37101:20;:45::i;:::-;37176:1;37159:9;:13;37169:2;37159:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37207:2;37188:7;:16;37196:7;37188:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37252:7;37248:2;37227:33;;37244:1;37227:33;;;;;;;;;;;;36886:382;;:::o;10660:387::-;10720:4;10928:12;10995:7;10983:20;10975:28;;11038:1;11031:4;:8;11024:15;;;10660:387;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5865:118;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;5989:109;;:::o;6104:153::-;6207:43;6226:23;6243:5;6226:23;:::i;:::-;6207:43;:::i;:::-;6202:3;6195:56;6104:153;;:::o;6263:360::-;6349:3;6377:38;6409:5;6377:38;:::i;:::-;6431:70;6494:6;6489:3;6431:70;:::i;:::-;6424:77;;6510:52;6555:6;6550:3;6543:4;6536:5;6532:16;6510:52;:::i;:::-;6587:29;6609:6;6587:29;:::i;:::-;6582:3;6578:39;6571:46;;6353:270;6263:360;;;;:::o;6629:373::-;6733:3;6761:38;6793:5;6761:38;:::i;:::-;6815:88;6896:6;6891:3;6815:88;:::i;:::-;6808:95;;6912:52;6957:6;6952:3;6945:4;6938:5;6934:16;6912:52;:::i;:::-;6989:6;6984:3;6980:16;6973:23;;6737:265;6629:373;;;;:::o;7030:849::-;7135:3;7172:5;7166:12;7201:36;7227:9;7201:36;:::i;:::-;7253:88;7334:6;7329:3;7253:88;:::i;:::-;7246:95;;7372:1;7361:9;7357:17;7388:1;7383:137;;;;7534:1;7529:344;;;;7350:523;;7383:137;7467:4;7463:9;7452;7448:25;7443:3;7436:38;7503:6;7498:3;7494:16;7487:23;;7383:137;;7529:344;7596:41;7631:5;7596:41;:::i;:::-;7659:1;7673:154;7687:6;7684:1;7681:13;7673:154;;;7761:7;7755:14;7751:1;7746:3;7742:11;7735:35;7811:1;7802:7;7798:15;7787:26;;7709:4;7706:1;7702:12;7697:17;;7673:154;;;7856:6;7851:3;7847:16;7840:23;;7536:337;;7350:523;;7139:740;;7030:849;;;;:::o;7885:364::-;7973:3;8001:39;8034:5;8001:39;:::i;:::-;8056:71;8120:6;8115:3;8056:71;:::i;:::-;8049:78;;8136:52;8181:6;8176:3;8169:4;8162:5;8158:16;8136:52;:::i;:::-;8213:29;8235:6;8213:29;:::i;:::-;8208:3;8204:39;8197:46;;7977:272;7885:364;;;;:::o;8255:377::-;8361:3;8389:39;8422:5;8389:39;:::i;:::-;8444:89;8526:6;8521:3;8444:89;:::i;:::-;8437:96;;8542:52;8587:6;8582:3;8575:4;8568:5;8564:16;8542:52;:::i;:::-;8619:6;8614:3;8610:16;8603:23;;8365:267;8255:377;;;;:::o;8662:845::-;8765:3;8802:5;8796:12;8831:36;8857:9;8831:36;:::i;:::-;8883:89;8965:6;8960:3;8883:89;:::i;:::-;8876:96;;9003:1;8992:9;8988:17;9019:1;9014:137;;;;9165:1;9160:341;;;;8981:520;;9014:137;9098:4;9094:9;9083;9079:25;9074:3;9067:38;9134:6;9129:3;9125:16;9118:23;;9014:137;;9160:341;9227:38;9259:5;9227:38;:::i;:::-;9287:1;9301:154;9315:6;9312:1;9309:13;9301:154;;;9389:7;9383:14;9379:1;9374:3;9370:11;9363:35;9439:1;9430:7;9426:15;9415:26;;9337:4;9334:1;9330:12;9325:17;;9301:154;;;9484:6;9479:3;9475:16;9468:23;;9167:334;;8981:520;;8769:738;;8662:845;;;;:::o;9513:366::-;9655:3;9676:67;9740:2;9735:3;9676:67;:::i;:::-;9669:74;;9752:93;9841:3;9752:93;:::i;:::-;9870:2;9865:3;9861:12;9854:19;;9513:366;;;:::o;9885:404::-;10045:3;10066:86;10148:3;10143;10066:86;:::i;:::-;10059:93;;10161;10250:3;10161:93;:::i;:::-;10279:3;10274;10270:13;10263:20;;9885:404;;;:::o;10295:400::-;10455:3;10476:84;10558:1;10553:3;10476:84;:::i;:::-;10469:91;;10569:93;10658:3;10569:93;:::i;:::-;10687:1;10682:3;10678:11;10671:18;;10295:400;;;:::o;10701:404::-;10861:3;10882:86;10964:3;10959;10882:86;:::i;:::-;10875:93;;10977;11066:3;10977:93;:::i;:::-;11095:3;11090;11086:13;11079:20;;10701:404;;;:::o;11111:402::-;11271:3;11292:85;11374:2;11369:3;11292:85;:::i;:::-;11285:92;;11386:93;11475:3;11386:93;:::i;:::-;11504:2;11499:3;11495:12;11488:19;;11111:402;;;:::o;11519:366::-;11661:3;11682:67;11746:2;11741:3;11682:67;:::i;:::-;11675:74;;11758:93;11847:3;11758:93;:::i;:::-;11876:2;11871:3;11867:12;11860:19;;11519:366;;;:::o;11891:::-;12033:3;12054:67;12118:2;12113:3;12054:67;:::i;:::-;12047:74;;12130:93;12219:3;12130:93;:::i;:::-;12248:2;12243:3;12239:12;12232:19;;11891:366;;;:::o;12263:::-;12405:3;12426:67;12490:2;12485:3;12426:67;:::i;:::-;12419:74;;12502:93;12591:3;12502:93;:::i;:::-;12620:2;12615:3;12611:12;12604:19;;12263:366;;;:::o;12635:::-;12777:3;12798:67;12862:2;12857:3;12798:67;:::i;:::-;12791:74;;12874:93;12963:3;12874:93;:::i;:::-;12992:2;12987:3;12983:12;12976:19;;12635:366;;;:::o;13007:402::-;13167:3;13188:85;13270:2;13265:3;13188:85;:::i;:::-;13181:92;;13282:93;13371:3;13282:93;:::i;:::-;13400:2;13395:3;13391:12;13384:19;;13007:402;;;:::o;13415:::-;13575:3;13596:85;13678:2;13673:3;13596:85;:::i;:::-;13589:92;;13690:93;13779:3;13690:93;:::i;:::-;13808:2;13803:3;13799:12;13792:19;;13415:402;;;:::o;13823:400::-;13983:3;14004:84;14086:1;14081:3;14004:84;:::i;:::-;13997:91;;14097:93;14186:3;14097:93;:::i;:::-;14215:1;14210:3;14206:11;14199:18;;13823:400;;;:::o;14229:366::-;14371:3;14392:67;14456:2;14451:3;14392:67;:::i;:::-;14385:74;;14468:93;14557:3;14468:93;:::i;:::-;14586:2;14581:3;14577:12;14570:19;;14229:366;;;:::o;14601:::-;14743:3;14764:67;14828:2;14823:3;14764:67;:::i;:::-;14757:74;;14840:93;14929:3;14840:93;:::i;:::-;14958:2;14953:3;14949:12;14942:19;;14601:366;;;:::o;14973:::-;15115:3;15136:67;15200:2;15195:3;15136:67;:::i;:::-;15129:74;;15212:93;15301:3;15212:93;:::i;:::-;15330:2;15325:3;15321:12;15314:19;;14973:366;;;:::o;15345:400::-;15505:3;15526:84;15608:1;15603:3;15526:84;:::i;:::-;15519:91;;15619:93;15708:3;15619:93;:::i;:::-;15737:1;15732:3;15728:11;15721:18;;15345:400;;;:::o;15751:366::-;15893:3;15914:67;15978:2;15973:3;15914:67;:::i;:::-;15907:74;;15990:93;16079:3;15990:93;:::i;:::-;16108:2;16103:3;16099:12;16092:19;;15751:366;;;:::o;16123:400::-;16283:3;16304:84;16386:1;16381:3;16304:84;:::i;:::-;16297:91;;16397:93;16486:3;16397:93;:::i;:::-;16515:1;16510:3;16506:11;16499:18;;16123:400;;;:::o;16529:366::-;16671:3;16692:67;16756:2;16751:3;16692:67;:::i;:::-;16685:74;;16768:93;16857:3;16768:93;:::i;:::-;16886:2;16881:3;16877:12;16870:19;;16529:366;;;:::o;16901:::-;17043:3;17064:67;17128:2;17123:3;17064:67;:::i;:::-;17057:74;;17140:93;17229:3;17140:93;:::i;:::-;17258:2;17253:3;17249:12;17242:19;;16901:366;;;:::o;17273:402::-;17433:3;17454:85;17536:2;17531:3;17454:85;:::i;:::-;17447:92;;17548:93;17637:3;17548:93;:::i;:::-;17666:2;17661:3;17657:12;17650:19;;17273:402;;;:::o;17681:400::-;17841:3;17862:84;17944:1;17939:3;17862:84;:::i;:::-;17855:91;;17955:93;18044:3;17955:93;:::i;:::-;18073:1;18068:3;18064:11;18057:18;;17681:400;;;:::o;18087:::-;18247:3;18268:84;18350:1;18345:3;18268:84;:::i;:::-;18261:91;;18361:93;18450:3;18361:93;:::i;:::-;18479:1;18474:3;18470:11;18463:18;;18087:400;;;:::o;18493:366::-;18635:3;18656:67;18720:2;18715:3;18656:67;:::i;:::-;18649:74;;18732:93;18821:3;18732:93;:::i;:::-;18850:2;18845:3;18841:12;18834:19;;18493:366;;;:::o;18865:400::-;19025:3;19046:84;19128:1;19123:3;19046:84;:::i;:::-;19039:91;;19139:93;19228:3;19139:93;:::i;:::-;19257:1;19252:3;19248:11;19241:18;;18865:400;;;:::o;19271:366::-;19413:3;19434:67;19498:2;19493:3;19434:67;:::i;:::-;19427:74;;19510:93;19599:3;19510:93;:::i;:::-;19628:2;19623:3;19619:12;19612:19;;19271:366;;;:::o;19643:::-;19785:3;19806:67;19870:2;19865:3;19806:67;:::i;:::-;19799:74;;19882:93;19971:3;19882:93;:::i;:::-;20000:2;19995:3;19991:12;19984:19;;19643:366;;;:::o;20015:402::-;20175:3;20196:85;20278:2;20273:3;20196:85;:::i;:::-;20189:92;;20290:93;20379:3;20290:93;:::i;:::-;20408:2;20403:3;20399:12;20392:19;;20015:402;;;:::o;20423:366::-;20565:3;20586:67;20650:2;20645:3;20586:67;:::i;:::-;20579:74;;20662:93;20751:3;20662:93;:::i;:::-;20780:2;20775:3;20771:12;20764:19;;20423:366;;;:::o;20795:400::-;20955:3;20976:84;21058:1;21053:3;20976:84;:::i;:::-;20969:91;;21069:93;21158:3;21069:93;:::i;:::-;21187:1;21182:3;21178:11;21171:18;;20795:400;;;:::o;21201:366::-;21343:3;21364:67;21428:2;21423:3;21364:67;:::i;:::-;21357:74;;21440:93;21529:3;21440:93;:::i;:::-;21558:2;21553:3;21549:12;21542:19;;21201:366;;;:::o;21573:402::-;21733:3;21754:85;21836:2;21831:3;21754:85;:::i;:::-;21747:92;;21848:93;21937:3;21848:93;:::i;:::-;21966:2;21961:3;21957:12;21950:19;;21573:402;;;:::o;21981:::-;22141:3;22162:85;22244:2;22239:3;22162:85;:::i;:::-;22155:92;;22256:93;22345:3;22256:93;:::i;:::-;22374:2;22369:3;22365:12;22358:19;;21981:402;;;:::o;22389:::-;22549:3;22570:85;22652:2;22647:3;22570:85;:::i;:::-;22563:92;;22664:93;22753:3;22664:93;:::i;:::-;22782:2;22777:3;22773:12;22766:19;;22389:402;;;:::o;22797:366::-;22939:3;22960:67;23024:2;23019:3;22960:67;:::i;:::-;22953:74;;23036:93;23125:3;23036:93;:::i;:::-;23154:2;23149:3;23145:12;23138:19;;22797:366;;;:::o;23169:402::-;23329:3;23350:85;23432:2;23427:3;23350:85;:::i;:::-;23343:92;;23444:93;23533:3;23444:93;:::i;:::-;23562:2;23557:3;23553:12;23546:19;;23169:402;;;:::o;23577:366::-;23719:3;23740:67;23804:2;23799:3;23740:67;:::i;:::-;23733:74;;23816:93;23905:3;23816:93;:::i;:::-;23934:2;23929:3;23925:12;23918:19;;23577:366;;;:::o;23949:402::-;24109:3;24130:85;24212:2;24207:3;24130:85;:::i;:::-;24123:92;;24224:93;24313:3;24224:93;:::i;:::-;24342:2;24337:3;24333:12;24326:19;;23949:402;;;:::o;24357:::-;24517:3;24538:85;24620:2;24615:3;24538:85;:::i;:::-;24531:92;;24632:93;24721:3;24632:93;:::i;:::-;24750:2;24745:3;24741:12;24734:19;;24357:402;;;:::o;24765:404::-;24925:3;24946:86;25028:3;25023;24946:86;:::i;:::-;24939:93;;25041;25130:3;25041:93;:::i;:::-;25159:3;25154;25150:13;25143:20;;24765:404;;;:::o;25175:402::-;25335:3;25356:85;25438:2;25433:3;25356:85;:::i;:::-;25349:92;;25450:93;25539:3;25450:93;:::i;:::-;25568:2;25563:3;25559:12;25552:19;;25175:402;;;:::o;25583:366::-;25725:3;25746:67;25810:2;25805:3;25746:67;:::i;:::-;25739:74;;25822:93;25911:3;25822:93;:::i;:::-;25940:2;25935:3;25931:12;25924:19;;25583:366;;;:::o;25955:400::-;26115:3;26136:84;26218:1;26213:3;26136:84;:::i;:::-;26129:91;;26229:93;26318:3;26229:93;:::i;:::-;26347:1;26342:3;26338:11;26331:18;;25955:400;;;:::o;26361:402::-;26521:3;26542:85;26624:2;26619:3;26542:85;:::i;:::-;26535:92;;26636:93;26725:3;26636:93;:::i;:::-;26754:2;26749:3;26745:12;26738:19;;26361:402;;;:::o;26769:118::-;26856:24;26874:5;26856:24;:::i;:::-;26851:3;26844:37;26769:118;;:::o;26893:523::-;27055:3;27070:73;27139:3;27130:6;27070:73;:::i;:::-;27168:1;27163:3;27159:11;27152:18;;27180:73;27249:3;27240:6;27180:73;:::i;:::-;27278:1;27273:3;27269:11;27262:18;;27290:73;27359:3;27350:6;27290:73;:::i;:::-;27388:1;27383:3;27379:11;27372:18;;27407:3;27400:10;;26893:523;;;;;;:::o;27422:271::-;27552:3;27574:93;27663:3;27654:6;27574:93;:::i;:::-;27567:100;;27684:3;27677:10;;27422:271;;;;:::o;27699:273::-;27830:3;27852:94;27942:3;27933:6;27852:94;:::i;:::-;27845:101;;27963:3;27956:10;;27699:273;;;;:::o;27978:435::-;28158:3;28180:95;28271:3;28262:6;28180:95;:::i;:::-;28173:102;;28292:95;28383:3;28374:6;28292:95;:::i;:::-;28285:102;;28404:3;28397:10;;27978:435;;;;;:::o;28419:701::-;28700:3;28722:95;28813:3;28804:6;28722:95;:::i;:::-;28715:102;;28834:95;28925:3;28916:6;28834:95;:::i;:::-;28827:102;;28946:148;29090:3;28946:148;:::i;:::-;28939:155;;29111:3;29104:10;;28419:701;;;;;:::o;29126:541::-;29359:3;29381:95;29472:3;29463:6;29381:95;:::i;:::-;29374:102;;29493:148;29637:3;29493:148;:::i;:::-;29486:155;;29658:3;29651:10;;29126:541;;;;:::o;29673:::-;29906:3;29928:95;30019:3;30010:6;29928:95;:::i;:::-;29921:102;;30040:148;30184:3;30040:148;:::i;:::-;30033:155;;30205:3;30198:10;;29673:541;;;;:::o;30220:1221::-;30697:3;30719:148;30863:3;30719:148;:::i;:::-;30712:155;;30884:92;30972:3;30963:6;30884:92;:::i;:::-;30877:99;;30993:148;31137:3;30993:148;:::i;:::-;30986:155;;31158:92;31246:3;31237:6;31158:92;:::i;:::-;31151:99;;31267:148;31411:3;31267:148;:::i;:::-;31260:155;;31432:3;31425:10;;30220:1221;;;;;:::o;31447:1659::-;32079:3;32101:148;32245:3;32101:148;:::i;:::-;32094:155;;32266:95;32357:3;32348:6;32266:95;:::i;:::-;32259:102;;32378:148;32522:3;32378:148;:::i;:::-;32371:155;;32543:95;32634:3;32625:6;32543:95;:::i;:::-;32536:102;;32655:148;32799:3;32655:148;:::i;:::-;32648:155;;32820:95;32911:3;32902:6;32820:95;:::i;:::-;32813:102;;32932:148;33076:3;32932:148;:::i;:::-;32925:155;;33097:3;33090:10;;31447:1659;;;;;;:::o;33112:2339::-;33988:3;34010:148;34154:3;34010:148;:::i;:::-;34003:155;;34175:92;34263:3;34254:6;34175:92;:::i;:::-;34168:99;;34284:148;34428:3;34284:148;:::i;:::-;34277:155;;34449:95;34540:3;34531:6;34449:95;:::i;:::-;34442:102;;34561:148;34705:3;34561:148;:::i;:::-;34554:155;;34726:148;34870:3;34726:148;:::i;:::-;34719:155;;34891:92;34979:3;34970:6;34891:92;:::i;:::-;34884:99;;35000:148;35144:3;35000:148;:::i;:::-;34993:155;;35165:95;35256:3;35247:6;35165:95;:::i;:::-;35158:102;;35277:148;35421:3;35277:148;:::i;:::-;35270:155;;35442:3;35435:10;;33112:2339;;;;;;;:::o;35457:1221::-;35934:3;35956:148;36100:3;35956:148;:::i;:::-;35949:155;;36121:92;36209:3;36200:6;36121:92;:::i;:::-;36114:99;;36230:148;36374:3;36230:148;:::i;:::-;36223:155;;36395:92;36483:3;36474:6;36395:92;:::i;:::-;36388:99;;36504:148;36648:3;36504:148;:::i;:::-;36497:155;;36669:3;36662:10;;35457:1221;;;;;:::o;36684:::-;37161:3;37183:148;37327:3;37183:148;:::i;:::-;37176:155;;37348:92;37436:3;37427:6;37348:92;:::i;:::-;37341:99;;37457:148;37601:3;37457:148;:::i;:::-;37450:155;;37622:92;37710:3;37701:6;37622:92;:::i;:::-;37615:99;;37731:148;37875:3;37731:148;:::i;:::-;37724:155;;37896:3;37889:10;;36684:1221;;;;;:::o;37911:::-;38388:3;38410:148;38554:3;38410:148;:::i;:::-;38403:155;;38575:92;38663:3;38654:6;38575:92;:::i;:::-;38568:99;;38684:148;38828:3;38684:148;:::i;:::-;38677:155;;38849:92;38937:3;38928:6;38849:92;:::i;:::-;38842:99;;38958:148;39102:3;38958:148;:::i;:::-;38951:155;;39123:3;39116:10;;37911:1221;;;;;:::o;39138:541::-;39371:3;39393:148;39537:3;39393:148;:::i;:::-;39386:155;;39558:95;39649:3;39640:6;39558:95;:::i;:::-;39551:102;;39670:3;39663:10;;39138:541;;;;:::o;39685:801::-;40016:3;40038:148;40182:3;40038:148;:::i;:::-;40031:155;;40203:92;40291:3;40282:6;40203:92;:::i;:::-;40196:99;;40312:148;40456:3;40312:148;:::i;:::-;40305:155;;40477:3;40470:10;;39685:801;;;;:::o;40492:1221::-;40969:3;40991:148;41135:3;40991:148;:::i;:::-;40984:155;;41156:92;41244:3;41235:6;41156:92;:::i;:::-;41149:99;;41265:148;41409:3;41265:148;:::i;:::-;41258:155;;41430:92;41518:3;41509:6;41430:92;:::i;:::-;41423:99;;41539:148;41683:3;41539:148;:::i;:::-;41532:155;;41704:3;41697:10;;40492:1221;;;;;:::o;41719:1599::-;42353:3;42375:148;42519:3;42375:148;:::i;:::-;42368:155;;42540:92;42628:3;42619:6;42540:92;:::i;:::-;42533:99;;42649:148;42793:3;42649:148;:::i;:::-;42642:155;;42814:148;42958:3;42814:148;:::i;:::-;42807:155;;42979:148;43123:3;42979:148;:::i;:::-;42972:155;;43144:148;43288:3;43144:148;:::i;:::-;43137:155;;43309:3;43302:10;;41719:1599;;;;:::o;43324:1221::-;43801:3;43823:148;43967:3;43823:148;:::i;:::-;43816:155;;43988:92;44076:3;44067:6;43988:92;:::i;:::-;43981:99;;44097:148;44241:3;44097:148;:::i;:::-;44090:155;;44262:92;44350:3;44341:6;44262:92;:::i;:::-;44255:99;;44371:148;44515:3;44371:148;:::i;:::-;44364:155;;44536:3;44529:10;;43324:1221;;;;;:::o;44551:801::-;44882:3;44904:148;45048:3;44904:148;:::i;:::-;44897:155;;45069:92;45157:3;45148:6;45069:92;:::i;:::-;45062:99;;45178:148;45322:3;45178:148;:::i;:::-;45171:155;;45343:3;45336:10;;44551:801;;;;:::o;45358:1221::-;45835:3;45857:148;46001:3;45857:148;:::i;:::-;45850:155;;46022:92;46110:3;46101:6;46022:92;:::i;:::-;46015:99;;46131:148;46275:3;46131:148;:::i;:::-;46124:155;;46296:92;46384:3;46375:6;46296:92;:::i;:::-;46289:99;;46405:148;46549:3;46405:148;:::i;:::-;46398:155;;46570:3;46563:10;;45358:1221;;;;;:::o;46585:222::-;46678:4;46716:2;46705:9;46701:18;46693:26;;46729:71;46797:1;46786:9;46782:17;46773:6;46729:71;:::i;:::-;46585:222;;;;:::o;46813:640::-;47008:4;47046:3;47035:9;47031:19;47023:27;;47060:71;47128:1;47117:9;47113:17;47104:6;47060:71;:::i;:::-;47141:72;47209:2;47198:9;47194:18;47185:6;47141:72;:::i;:::-;47223;47291:2;47280:9;47276:18;47267:6;47223:72;:::i;:::-;47342:9;47336:4;47332:20;47327:2;47316:9;47312:18;47305:48;47370:76;47441:4;47432:6;47370:76;:::i;:::-;47362:84;;46813:640;;;;;;;:::o;47459:210::-;47546:4;47584:2;47573:9;47569:18;47561:26;;47597:65;47659:1;47648:9;47644:17;47635:6;47597:65;:::i;:::-;47459:210;;;;:::o;47675:313::-;47788:4;47826:2;47815:9;47811:18;47803:26;;47875:9;47869:4;47865:20;47861:1;47850:9;47846:17;47839:47;47903:78;47976:4;47967:6;47903:78;:::i;:::-;47895:86;;47675:313;;;;:::o;47994:419::-;48160:4;48198:2;48187:9;48183:18;48175:26;;48247:9;48241:4;48237:20;48233:1;48222:9;48218:17;48211:47;48275:131;48401:4;48275:131;:::i;:::-;48267:139;;47994:419;;;:::o;48419:::-;48585:4;48623:2;48612:9;48608:18;48600:26;;48672:9;48666:4;48662:20;48658:1;48647:9;48643:17;48636:47;48700:131;48826:4;48700:131;:::i;:::-;48692:139;;48419:419;;;:::o;48844:::-;49010:4;49048:2;49037:9;49033:18;49025:26;;49097:9;49091:4;49087:20;49083:1;49072:9;49068:17;49061:47;49125:131;49251:4;49125:131;:::i;:::-;49117:139;;48844:419;;;:::o;49269:::-;49435:4;49473:2;49462:9;49458:18;49450:26;;49522:9;49516:4;49512:20;49508:1;49497:9;49493:17;49486:47;49550:131;49676:4;49550:131;:::i;:::-;49542:139;;49269:419;;;:::o;49694:::-;49860:4;49898:2;49887:9;49883:18;49875:26;;49947:9;49941:4;49937:20;49933:1;49922:9;49918:17;49911:47;49975:131;50101:4;49975:131;:::i;:::-;49967:139;;49694:419;;;:::o;50119:::-;50285:4;50323:2;50312:9;50308:18;50300:26;;50372:9;50366:4;50362:20;50358:1;50347:9;50343:17;50336:47;50400:131;50526:4;50400:131;:::i;:::-;50392:139;;50119:419;;;:::o;50544:::-;50710:4;50748:2;50737:9;50733:18;50725:26;;50797:9;50791:4;50787:20;50783:1;50772:9;50768:17;50761:47;50825:131;50951:4;50825:131;:::i;:::-;50817:139;;50544:419;;;:::o;50969:::-;51135:4;51173:2;51162:9;51158:18;51150:26;;51222:9;51216:4;51212:20;51208:1;51197:9;51193:17;51186:47;51250:131;51376:4;51250:131;:::i;:::-;51242:139;;50969:419;;;:::o;51394:::-;51560:4;51598:2;51587:9;51583:18;51575:26;;51647:9;51641:4;51637:20;51633:1;51622:9;51618:17;51611:47;51675:131;51801:4;51675:131;:::i;:::-;51667:139;;51394:419;;;:::o;51819:::-;51985:4;52023:2;52012:9;52008:18;52000:26;;52072:9;52066:4;52062:20;52058:1;52047:9;52043:17;52036:47;52100:131;52226:4;52100:131;:::i;:::-;52092:139;;51819:419;;;:::o;52244:::-;52410:4;52448:2;52437:9;52433:18;52425:26;;52497:9;52491:4;52487:20;52483:1;52472:9;52468:17;52461:47;52525:131;52651:4;52525:131;:::i;:::-;52517:139;;52244:419;;;:::o;52669:::-;52835:4;52873:2;52862:9;52858:18;52850:26;;52922:9;52916:4;52912:20;52908:1;52897:9;52893:17;52886:47;52950:131;53076:4;52950:131;:::i;:::-;52942:139;;52669:419;;;:::o;53094:::-;53260:4;53298:2;53287:9;53283:18;53275:26;;53347:9;53341:4;53337:20;53333:1;53322:9;53318:17;53311:47;53375:131;53501:4;53375:131;:::i;:::-;53367:139;;53094:419;;;:::o;53519:::-;53685:4;53723:2;53712:9;53708:18;53700:26;;53772:9;53766:4;53762:20;53758:1;53747:9;53743:17;53736:47;53800:131;53926:4;53800:131;:::i;:::-;53792:139;;53519:419;;;:::o;53944:::-;54110:4;54148:2;54137:9;54133:18;54125:26;;54197:9;54191:4;54187:20;54183:1;54172:9;54168:17;54161:47;54225:131;54351:4;54225:131;:::i;:::-;54217:139;;53944:419;;;:::o;54369:::-;54535:4;54573:2;54562:9;54558:18;54550:26;;54622:9;54616:4;54612:20;54608:1;54597:9;54593:17;54586:47;54650:131;54776:4;54650:131;:::i;:::-;54642:139;;54369:419;;;:::o;54794:::-;54960:4;54998:2;54987:9;54983:18;54975:26;;55047:9;55041:4;55037:20;55033:1;55022:9;55018:17;55011:47;55075:131;55201:4;55075:131;:::i;:::-;55067:139;;54794:419;;;:::o;55219:::-;55385:4;55423:2;55412:9;55408:18;55400:26;;55472:9;55466:4;55462:20;55458:1;55447:9;55443:17;55436:47;55500:131;55626:4;55500:131;:::i;:::-;55492:139;;55219:419;;;:::o;55644:::-;55810:4;55848:2;55837:9;55833:18;55825:26;;55897:9;55891:4;55887:20;55883:1;55872:9;55868:17;55861:47;55925:131;56051:4;55925:131;:::i;:::-;55917:139;;55644:419;;;:::o;56069:222::-;56162:4;56200:2;56189:9;56185:18;56177:26;;56213:71;56281:1;56270:9;56266:17;56257:6;56213:71;:::i;:::-;56069:222;;;;:::o;56297:129::-;56331:6;56358:20;;:::i;:::-;56348:30;;56387:33;56415:4;56407:6;56387:33;:::i;:::-;56297:129;;;:::o;56432:75::-;56465:6;56498:2;56492:9;56482:19;;56432:75;:::o;56513:307::-;56574:4;56664:18;56656:6;56653:30;56650:56;;;56686:18;;:::i;:::-;56650:56;56724:29;56746:6;56724:29;:::i;:::-;56716:37;;56808:4;56802;56798:15;56790:23;;56513:307;;;:::o;56826:144::-;56878:4;56901:3;56893:11;;56924:3;56921:1;56914:14;56958:4;56955:1;56945:18;56937:26;;56826:144;;;:::o;56976:141::-;57025:4;57048:3;57040:11;;57071:3;57068:1;57061:14;57105:4;57102:1;57092:18;57084:26;;56976:141;;;:::o;57123:98::-;57174:6;57208:5;57202:12;57192:22;;57123:98;;;:::o;57227:99::-;57279:6;57313:5;57307:12;57297:22;;57227:99;;;:::o;57332:168::-;57415:11;57449:6;57444:3;57437:19;57489:4;57484:3;57480:14;57465:29;;57332:168;;;;:::o;57506:147::-;57607:11;57644:3;57629:18;;57506:147;;;;:::o;57659:169::-;57743:11;57777:6;57772:3;57765:19;57817:4;57812:3;57808:14;57793:29;;57659:169;;;;:::o;57834:148::-;57936:11;57973:3;57958:18;;57834:148;;;;:::o;57988:305::-;58028:3;58047:20;58065:1;58047:20;:::i;:::-;58042:25;;58081:20;58099:1;58081:20;:::i;:::-;58076:25;;58235:1;58167:66;58163:74;58160:1;58157:81;58154:107;;;58241:18;;:::i;:::-;58154:107;58285:1;58282;58278:9;58271:16;;57988:305;;;;:::o;58299:185::-;58339:1;58356:20;58374:1;58356:20;:::i;:::-;58351:25;;58390:20;58408:1;58390:20;:::i;:::-;58385:25;;58429:1;58419:35;;58434:18;;:::i;:::-;58419:35;58476:1;58473;58469:9;58464:14;;58299:185;;;;:::o;58490:348::-;58530:7;58553:20;58571:1;58553:20;:::i;:::-;58548:25;;58587:20;58605:1;58587:20;:::i;:::-;58582:25;;58775:1;58707:66;58703:74;58700:1;58697:81;58692:1;58685:9;58678:17;58674:105;58671:131;;;58782:18;;:::i;:::-;58671:131;58830:1;58827;58823:9;58812:20;;58490:348;;;;:::o;58844:191::-;58884:4;58904:20;58922:1;58904:20;:::i;:::-;58899:25;;58938:20;58956:1;58938:20;:::i;:::-;58933:25;;58977:1;58974;58971:8;58968:34;;;58982:18;;:::i;:::-;58968:34;59027:1;59024;59020:9;59012:17;;58844:191;;;;:::o;59041:96::-;59078:7;59107:24;59125:5;59107:24;:::i;:::-;59096:35;;59041:96;;;:::o;59143:90::-;59177:7;59220:5;59213:13;59206:21;59195:32;;59143:90;;;:::o;59239:149::-;59275:7;59315:66;59308:5;59304:78;59293:89;;59239:149;;;:::o;59394:::-;59430:7;59470:66;59463:5;59459:78;59448:89;;59394:149;;;:::o;59549:126::-;59586:7;59626:42;59619:5;59615:54;59604:65;;59549:126;;;:::o;59681:77::-;59718:7;59747:5;59736:16;;59681:77;;;:::o;59764:154::-;59848:6;59843:3;59838;59825:30;59910:1;59901:6;59896:3;59892:16;59885:27;59764:154;;;:::o;59924:307::-;59992:1;60002:113;60016:6;60013:1;60010:13;60002:113;;;60101:1;60096:3;60092:11;60086:18;60082:1;60077:3;60073:11;60066:39;60038:2;60035:1;60031:10;60026:15;;60002:113;;;60133:6;60130:1;60127:13;60124:101;;;60213:1;60204:6;60199:3;60195:16;60188:27;60124:101;59973:258;59924:307;;;:::o;60237:320::-;60281:6;60318:1;60312:4;60308:12;60298:22;;60365:1;60359:4;60355:12;60386:18;60376:81;;60442:4;60434:6;60430:17;60420:27;;60376:81;60504:2;60496:6;60493:14;60473:18;60470:38;60467:84;;;60523:18;;:::i;:::-;60467:84;60288:269;60237:320;;;:::o;60563:281::-;60646:27;60668:4;60646:27;:::i;:::-;60638:6;60634:40;60776:6;60764:10;60761:22;60740:18;60728:10;60725:34;60722:62;60719:88;;;60787:18;;:::i;:::-;60719:88;60827:10;60823:2;60816:22;60606:238;60563:281;;:::o;60850:233::-;60889:3;60912:24;60930:5;60912:24;:::i;:::-;60903:33;;60958:66;60951:5;60948:77;60945:103;;;61028:18;;:::i;:::-;60945:103;61075:1;61068:5;61064:13;61057:20;;60850:233;;;:::o;61089:78::-;61127:7;61156:5;61145:16;;61089:78;;;:::o;61173:176::-;61205:1;61222:20;61240:1;61222:20;:::i;:::-;61217:25;;61256:20;61274:1;61256:20;:::i;:::-;61251:25;;61295:1;61285:35;;61300:18;;:::i;:::-;61285:35;61341:1;61338;61334:9;61329:14;;61173:176;;;;:::o;61355:180::-;61403:77;61400:1;61393:88;61500:4;61497:1;61490:15;61524:4;61521:1;61514:15;61541:180;61589:77;61586:1;61579:88;61686:4;61683:1;61676:15;61710:4;61707:1;61700:15;61727:180;61775:77;61772:1;61765:88;61872:4;61869:1;61862:15;61896:4;61893:1;61886:15;61913:180;61961:77;61958:1;61951:88;62058:4;62055:1;62048:15;62082:4;62079:1;62072:15;62099:180;62147:77;62144:1;62137:88;62244:4;62241:1;62234:15;62268:4;62265:1;62258:15;62285:180;62333:77;62330:1;62323:88;62430:4;62427:1;62420:15;62454:4;62451:1;62444:15;62471:117;62580:1;62577;62570:12;62594:117;62703:1;62700;62693:12;62717:117;62826:1;62823;62816:12;62840:117;62949:1;62946;62939:12;62963:102;63004:6;63055:2;63051:7;63046:2;63039:5;63035:14;63031:28;63021:38;;62963:102;;;:::o;63071:223::-;63211:34;63207:1;63199:6;63195:14;63188:58;63280:6;63275:2;63267:6;63263:15;63256:31;63071:223;:::o;63300:593::-;63440:66;63436:1;63428:6;63424:14;63417:90;63541:34;63536:2;63528:6;63524:15;63517:59;63610:34;63605:2;63597:6;63593:15;63586:59;63679:34;63674:2;63666:6;63662:15;63655:59;63749:34;63743:3;63735:6;63731:16;63724:60;63819:66;63813:3;63805:6;63801:16;63794:92;63300:593;:::o;63899:214::-;64039:66;64035:1;64027:6;64023:14;64016:90;63899:214;:::o;64119:453::-;64259:66;64255:1;64247:6;64243:14;64236:90;64360:34;64355:2;64347:6;64343:15;64336:59;64429:34;64424:2;64416:6;64412:15;64405:59;64498:66;64493:2;64485:6;64481:15;64474:91;64119:453;:::o;64578:416::-;64718:66;64714:1;64706:6;64702:14;64695:90;64819:66;64814:2;64806:6;64802:15;64795:91;64920:66;64915:2;64907:6;64903:15;64896:91;64578:416;:::o;65000:230::-;65140:34;65136:1;65128:6;65124:14;65117:58;65209:13;65204:2;65196:6;65192:15;65185:38;65000:230;:::o;65236:237::-;65376:34;65372:1;65364:6;65360:14;65353:58;65445:20;65440:2;65432:6;65428:15;65421:45;65236:237;:::o;65479:225::-;65619:34;65615:1;65607:6;65603:14;65596:58;65688:8;65683:2;65675:6;65671:15;65664:33;65479:225;:::o;65710:178::-;65850:30;65846:1;65838:6;65834:14;65827:54;65710:178;:::o;65894:315::-;66034:66;66030:1;66022:6;66018:14;66011:90;66135:66;66130:2;66122:6;66118:15;66111:91;65894:315;:::o;66215:214::-;66355:66;66351:1;66343:6;66339:14;66332:90;66215:214;:::o;66435:151::-;66575:3;66571:1;66563:6;66559:14;66552:27;66435:151;:::o;66592:223::-;66732:34;66728:1;66720:6;66716:14;66709:58;66801:6;66796:2;66788:6;66784:15;66777:31;66592:223;:::o;66821:175::-;66961:27;66957:1;66949:6;66945:14;66938:51;66821:175;:::o;67002:231::-;67142:34;67138:1;67130:6;67126:14;67119:58;67211:14;67206:2;67198:6;67194:15;67187:39;67002:231;:::o;67239:151::-;67379:3;67375:1;67367:6;67363:14;67356:27;67239:151;:::o;67396:243::-;67536:34;67532:1;67524:6;67520:14;67513:58;67605:26;67600:2;67592:6;67588:15;67581:51;67396:243;:::o;67645:214::-;67785:66;67781:1;67773:6;67769:14;67762:90;67645:214;:::o;67865:229::-;68005:34;68001:1;67993:6;67989:14;67982:58;68074:12;68069:2;68061:6;68057:15;68050:37;67865:229;:::o;68100:228::-;68240:34;68236:1;68228:6;68224:14;68217:58;68309:11;68304:2;68296:6;68292:15;68285:36;68100:228;:::o;68334:214::-;68474:66;68470:1;68462:6;68458:14;68451:90;68334:214;:::o;68554:::-;68694:66;68690:1;68682:6;68678:14;68671:90;68554:214;:::o;68774:::-;68914:66;68910:1;68902:6;68898:14;68891:90;68774:214;:::o;68994:182::-;69134:34;69130:1;69122:6;69118:14;69111:58;68994:182;:::o;69182:143::-;69318:3;69314:1;69306:6;69302:14;69295:27;69182:143;:::o;69327:219::-;69463:34;69459:1;69451:6;69447:14;69440:58;69528:14;69523:2;69515:6;69511:15;69504:39;69327:219;:::o;69548:174::-;69684:34;69680:1;69672:6;69668:14;69661:58;69548:174;:::o;69724:206::-;69860:66;69856:1;69848:6;69844:14;69837:90;69724:206;:::o;69932:216::-;70068:34;70064:1;70056:6;70052:14;70045:58;70133:11;70128:2;70120:6;70116:15;70109:36;69932:216;:::o;70150:143::-;70286:3;70282:1;70274:6;70270:14;70263:27;70150:143;:::o;70295:208::-;70431:34;70427:1;70419:6;70415:14;70408:58;70496:3;70491:2;70483:6;70479:15;70472:28;70295:208;:::o;70505:206::-;70641:66;70637:1;70629:6;70625:14;70618:90;70505:206;:::o;70713:171::-;70849:31;70845:1;70837:6;70833:14;70826:55;70713:171;:::o;70886:206::-;71022:66;71018:1;71010:6;71006:14;70999:90;70886:206;:::o;71094:224::-;71230:34;71226:1;71218:6;71214:14;71207:58;71295:19;71290:2;71282:6;71278:15;71271:44;71094:224;:::o;71320:206::-;71456:66;71452:1;71444:6;71440:14;71433:90;71320:206;:::o;71528:219::-;71664:34;71660:1;71652:6;71648:14;71641:58;71729:14;71724:2;71716:6;71712:15;71705:39;71528:219;:::o;71749:368::-;71885:66;71881:1;71873:6;71869:14;71862:90;71982:34;71977:2;71969:6;71965:15;71958:59;72047:66;72042:2;72034:6;72030:15;72023:91;71749:368;:::o;72119:206::-;72255:66;72251:1;72243:6;72239:14;72232:90;72119:206;:::o;72327:625::-;72463:66;72459:1;72451:6;72447:14;72440:90;72560:34;72555:2;72547:6;72543:15;72536:59;72625:34;72620:2;72612:6;72608:15;72601:59;72690:34;72685:2;72677:6;72673:15;72666:59;72756:34;72750:3;72742:6;72738:16;72731:60;72822:66;72816:3;72808:6;72804:16;72797:92;72920:28;72914:3;72906:6;72902:16;72895:54;72327:625;:::o;72954:206::-;73090:66;73086:1;73078:6;73074:14;73067:90;72954:206;:::o;73162:173::-;73298:33;73294:1;73286:6;73282:14;73275:57;73162:173;:::o;73337:148::-;73473:8;73469:1;73461:6;73457:14;73450:32;73337:148;:::o;73487:303::-;73623:66;73619:1;73611:6;73607:14;73600:90;73720:66;73715:2;73707:6;73703:15;73696:91;73487:303;:::o;73792:114::-;73861:24;73879:5;73861:24;:::i;:::-;73854:5;73851:35;73841:63;;73900:1;73897;73890:12;73841:63;73792:114;:::o;73908:108::-;73974:21;73989:5;73974:21;:::i;:::-;73967:5;73964:32;73954:60;;74010:1;74007;74000:12;73954:60;73908:108;:::o;74018:112::-;74086:23;74103:5;74086:23;:::i;:::-;74079:5;74076:34;74066:62;;74124:1;74121;74114:12;74066:62;74018:112;:::o;74132:114::-;74201:24;74219:5;74201:24;:::i;:::-;74194:5;74191:35;74181:63;;74240:1;74237;74230:12;74181:63;74132:114;:::o
Swarm Source
ipfs://2fc8b13f59d0837385912f25b9054ab92d53632d75d73c7dbc96431ddef61a53
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.