ERC-721
Overview
Max Total Supply
445 NCG
Holders
120
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
2 NCGLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
NovaChimpGang
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-03-11 */ // SPDX-License-Identifier: MIT /* ____ _ ____ _ _ ____ | __ ) __ _| |__ _ _ / ___| |__ (_)_ __ ___ _ __ / ___| __ _ _ __ __ _ | _ \ / _` | '_ \| | | | | | '_ \| | '_ ` _ \| '_ \| | _ / _` | '_ \ / _` | | |_) | (_| | |_) | |_| | |___| | | | | | | | | | |_) | |_| | (_| | | | | (_| | |____/ \__,_|_.__/ \__, |\____|_| |_|_|_| |_| |_| .__/ \____|\__,_|_| |_|\__, | |___/ |_| |___/ */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (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/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Burnable.sol) pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: nova.sol /* ____ _ ____ _ _ ____ | __ ) __ _| |__ _ _ / ___| |__ (_)_ __ ___ _ __ / ___| __ _ _ __ __ _ | _ \ / _` | '_ \| | | | | | '_ \| | '_ ` _ \| '_ \| | _ / _` | '_ \ / _` | | |_) | (_| | |_) | |_| | |___| | | | | | | | | | |_) | |_| | (_| | | | | (_| | |____/ \__,_|_.__/ \__, |\____|_| |_|_|_| |_| |_| .__/ \____|\__,_|_| |_|\__, | |___/ |_| |___/ */ pragma solidity ^0.8.4; contract NovaChimpGang is ERC721, ERC721Enumerable, ERC721Burnable, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; bool private mintable = false; bool private whitelist_mintable = false; uint256 public constant MAX_CHIMPS = 445; //set (exclusive) uint256 public constant MINT_PRICE = 35 ether; //set mapping(address => uint8) private _whiteList; //set constructor() ERC721("NovaChimpGang", "NCG") {} function _baseURI() internal pure override returns (string memory) { return "ipfs://QmeQkvWZw97Q6Ja9M2ZXJuiCZBZqTWdkr5y1mtWXE3utNA/"; } function safeMint(address to) public onlyOwner { uint256 tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); _safeMint(to, tokenId); } function tokensOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } function setWhiteList(address[] calldata addresses, uint8 numAllowedToMint) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { _whiteList[addresses[i]] = numAllowedToMint; } } function numAvailableWhiteListMints(address addr) external view returns (uint8) { return _whiteList[addr]; } function mintWhiteList(uint8 amount) public payable { require(whitelist_mintable, "White list is not active"); require(amount <= _whiteList[msg.sender], "Exceeded max available purchase"); require(_tokenIdCounter.current() + amount - 1 < MAX_CHIMPS, "All Chimps are minted."); require(msg.value >= MINT_PRICE * amount, "Not the right payment."); _whiteList[msg.sender] -= amount; uint256 index; for (index = 0; index < amount; index++) { _safeMint(msg.sender, _tokenIdCounter.current()); _tokenIdCounter.increment(); } } function MintAmountChimps(uint256 amount) public payable { require(mintable, "Chimps are not mintable yet."); require(amount <= 50, "Too many Chimps per transaction."); require(_tokenIdCounter.current() + amount - 1 < MAX_CHIMPS, "All Chimps are minted."); require(msg.value >= MINT_PRICE * amount, "Not the right payment."); uint256 index; for (index = 0; index < amount; index++) { _safeMint(msg.sender, _tokenIdCounter.current()); _tokenIdCounter.increment(); } } ///Set the mintable states function enableMinting() public onlyOwner { mintable = true; } function disableMinting() public onlyOwner { mintable = false; } function enableWhiteListMinting() public onlyOwner { whitelist_mintable = true; } function disableWhiteListMinting() public onlyOwner { whitelist_mintable = false; } function withdraw() public onlyOwner { Address.sendValue(payable(msg.sender),address(this).balance); } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
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":[],"name":"MAX_CHIMPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MintAmountChimps","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableWhiteListMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableWhiteListMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"amount","type":"uint8"}],"name":"mintWhiteList","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"numAvailableWhiteListMints","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":[{"internalType":"address","name":"to","type":"address"}],"name":"safeMint","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":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint8","name":"numAllowedToMint","type":"uint8"}],"name":"setWhiteList","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600d81526020017f4e6f76614368696d7047616e67000000000000000000000000000000000000008152506040518060400160405280600381526020017f4e434700000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000cc929190620001dc565b508060019080519060200190620000e5929190620001dc565b50505062000108620000fc6200010e60201b60201c565b6200011660201b60201c565b620002f1565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ea906200028c565b90600052602060002090601f0160209004810192826200020e57600085556200025a565b82601f106200022957805160ff19168380011785556200025a565b828001600101855582156200025a579182015b82811115620002595782518255916020019190600101906200023c565b5b5090506200026991906200026d565b5090565b5b80821115620002885760008160009055506001016200026e565b5090565b60006002820490506001821680620002a557607f821691505b60208210811415620002bc57620002bb620002c2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614a7780620003016000396000f3fe6080604052600436106101ee5760003560e01c806370a082311161010d578063b88d4fde116100a0578063e27f0f621161006f578063e27f0f62146106b9578063e797ec1b146106e4578063e985e9c5146106fb578063f2fde38b14610738578063f6dc6bf814610761576101ee565b8063b88d4fde14610611578063c002d23d1461063a578063c87b56dd14610665578063e09814b5146106a2576101ee565b80638da5cb5b116100dc5780638da5cb5b1461057657806395d89b41146105a1578063a22cb465146105cc578063b4993152146105f5576101ee565b806370a08231146104ce578063715018a61461050b5780637e5cd5c1146105225780638462151c14610539576101ee565b80633ccfd60b116101855780634f6ccce7116101545780634f6ccce7146104215780636352211e1461045e5780636386816f1461049b5780636d4af71c146104b7576101ee565b80633ccfd60b1461038f57806340d097c3146103a657806342842e0e146103cf57806342966c68146103f8576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632d8a6e03146103155780632f745c5914610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613352565b61078a565b6040516102279190613a00565b60405180910390f35b34801561023c57600080fd5b5061024561079c565b6040516102529190613a1b565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d91906133ac565b61082e565b60405161028f9190613977565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba91906132b2565b6108b3565b005b3480156102cd57600080fd5b506102d66109cb565b6040516102e39190613d9d565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e919061319c565b6109d8565b005b34801561032157600080fd5b5061033c6004803603810190610337919061312f565b610a38565b6040516103499190613db8565b60405180910390f35b34801561035e57600080fd5b50610379600480360381019061037491906132b2565b610a8e565b6040516103869190613d9d565b60405180910390f35b34801561039b57600080fd5b506103a4610b33565b005b3480156103b257600080fd5b506103cd60048036038101906103c8919061312f565b610bbb565b005b3480156103db57600080fd5b506103f660048036038101906103f1919061319c565b610c5d565b005b34801561040457600080fd5b5061041f600480360381019061041a91906133ac565b610c7d565b005b34801561042d57600080fd5b50610448600480360381019061044391906133ac565b610cd9565b6040516104559190613d9d565b60405180910390f35b34801561046a57600080fd5b50610485600480360381019061048091906133ac565b610d4a565b6040516104929190613977565b60405180910390f35b6104b560048036038101906104b091906133ac565b610dfc565b005b3480156104c357600080fd5b506104cc610f89565b005b3480156104da57600080fd5b506104f560048036038101906104f0919061312f565b611022565b6040516105029190613d9d565b60405180910390f35b34801561051757600080fd5b506105206110da565b005b34801561052e57600080fd5b50610537611162565b005b34801561054557600080fd5b50610560600480360381019061055b919061312f565b6111fb565b60405161056d91906139de565b60405180910390f35b34801561058257600080fd5b5061058b611305565b6040516105989190613977565b60405180910390f35b3480156105ad57600080fd5b506105b661132f565b6040516105c39190613a1b565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190613272565b6113c1565b005b61060f600480360381019061060a91906133d9565b6113d7565b005b34801561061d57600080fd5b50610638600480360381019061063391906131ef565b611631565b005b34801561064657600080fd5b5061064f611693565b60405161065c9190613d9d565b60405180910390f35b34801561067157600080fd5b5061068c600480360381019061068791906133ac565b6116a0565b6040516106999190613a1b565b60405180910390f35b3480156106ae57600080fd5b506106b7611747565b005b3480156106c557600080fd5b506106ce6117e0565b6040516106db9190613d9d565b60405180910390f35b3480156106f057600080fd5b506106f96117e6565b005b34801561070757600080fd5b50610722600480360381019061071d919061315c565b61187f565b60405161072f9190613a00565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a919061312f565b611913565b005b34801561076d57600080fd5b50610788600480360381019061078391906132f2565b611a0b565b005b600061079582611b2d565b9050919050565b6060600080546107ab906140bc565b80601f01602080910402602001604051908101604052809291908181526020018280546107d7906140bc565b80156108245780601f106107f957610100808354040283529160200191610824565b820191906000526020600020905b81548152906001019060200180831161080757829003601f168201915b5050505050905090565b600061083982611ba7565b610878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086f90613c3d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108be82610d4a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561092f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092690613cbd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661094e611c13565b73ffffffffffffffffffffffffffffffffffffffff16148061097d575061097c81610977611c13565b61187f565b5b6109bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b390613bbd565b60405180910390fd5b6109c68383611c1b565b505050565b6000600880549050905090565b6109e96109e3611c13565b82611cd4565b610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f90613cdd565b60405180910390fd5b610a33838383611db2565b505050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610a9983611022565b8210610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad190613a3d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b3b611c13565b73ffffffffffffffffffffffffffffffffffffffff16610b59611305565b73ffffffffffffffffffffffffffffffffffffffff1614610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690613c5d565b60405180910390fd5b610bb93347612019565b565b610bc3611c13565b73ffffffffffffffffffffffffffffffffffffffff16610be1611305565b73ffffffffffffffffffffffffffffffffffffffff1614610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90613c5d565b60405180910390fd5b6000610c43600b61210d565b9050610c4f600b61211b565b610c598282612131565b5050565b610c7883838360405180602001604052806000815250611631565b505050565b610c8e610c88611c13565b82611cd4565b610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc490613d5d565b60405180910390fd5b610cd68161214f565b50565b6000610ce36109cb565b8210610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b90613cfd565b60405180910390fd5b60088281548110610d3857610d37614255565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90613bfd565b60405180910390fd5b80915050919050565b600c60009054906101000a900460ff16610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4290613b9d565b60405180910390fd5b6032811115610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690613d3d565b60405180910390fd5b6101bd600182610e9f600b61210d565b610ea99190613eb0565b610eb39190613f91565b10610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90613d7d565b60405180910390fd5b806801e5b8fa8fe2ac0000610f089190613f37565b341015610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190613c9d565b60405180910390fd5b60005b81811015610f8557610f6833610f63600b61210d565b612131565b610f72600b61211b565b8080610f7d9061411f565b915050610f4d565b5050565b610f91611c13565b73ffffffffffffffffffffffffffffffffffffffff16610faf611305565b73ffffffffffffffffffffffffffffffffffffffff1614611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc90613c5d565b60405180910390fd5b6001600c60016101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90613bdd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110e2611c13565b73ffffffffffffffffffffffffffffffffffffffff16611100611305565b73ffffffffffffffffffffffffffffffffffffffff1614611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90613c5d565b60405180910390fd5b611160600061226c565b565b61116a611c13565b73ffffffffffffffffffffffffffffffffffffffff16611188611305565b73ffffffffffffffffffffffffffffffffffffffff16146111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590613c5d565b60405180910390fd5b6000600c60006101000a81548160ff021916908315150217905550565b6060600061120883611022565b9050600081141561126557600067ffffffffffffffff81111561122e5761122d614284565b5b60405190808252806020026020018201604052801561125c5781602001602082028036833780820191505090505b50915050611300565b60008167ffffffffffffffff81111561128157611280614284565b5b6040519080825280602002602001820160405280156112af5781602001602082028036833780820191505090505b50905060005b828110156112f9576112c78582610a8e565b8282815181106112da576112d9614255565b5b60200260200101818152505080806112f19061411f565b9150506112b5565b8193505050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461133e906140bc565b80601f016020809104026020016040519081016040528092919081815260200182805461136a906140bc565b80156113b75780601f1061138c576101008083540402835291602001916113b7565b820191906000526020600020905b81548152906001019060200180831161139a57829003601f168201915b5050505050905090565b6113d36113cc611c13565b8383612332565b5050565b600c60019054906101000a900460ff16611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90613d1d565b60405180910390fd5b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff168160ff1611156114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290613add565b60405180910390fd5b6101bd60018260ff166114ce600b61210d565b6114d89190613eb0565b6114e29190613f91565b10611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151990613d7d565b60405180910390fd5b8060ff166801e5b8fa8fe2ac000061153a9190613f37565b34101561157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390613c9d565b60405180910390fd5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166115d79190613fc5565b92506101000a81548160ff021916908360ff16021790555060005b8160ff1681101561162d576116103361160b600b61210d565b612131565b61161a600b61211b565b80806116259061411f565b9150506115f2565b5050565b61164261163c611c13565b83611cd4565b611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890613cdd565b60405180910390fd5b61168d8484848461249f565b50505050565b6801e5b8fa8fe2ac000081565b60606116ab82611ba7565b6116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613c7d565b60405180910390fd5b60006116f46124fb565b90506000815111611714576040518060200160405280600081525061173f565b8061171e8461251b565b60405160200161172f92919061393e565b6040516020818303038152906040525b915050919050565b61174f611c13565b73ffffffffffffffffffffffffffffffffffffffff1661176d611305565b73ffffffffffffffffffffffffffffffffffffffff16146117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90613c5d565b60405180910390fd5b6000600c60016101000a81548160ff021916908315150217905550565b6101bd81565b6117ee611c13565b73ffffffffffffffffffffffffffffffffffffffff1661180c611305565b73ffffffffffffffffffffffffffffffffffffffff1614611862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185990613c5d565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61191b611c13565b73ffffffffffffffffffffffffffffffffffffffff16611939611305565b73ffffffffffffffffffffffffffffffffffffffff161461198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198690613c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f690613a7d565b60405180910390fd5b611a088161226c565b50565b611a13611c13565b73ffffffffffffffffffffffffffffffffffffffff16611a31611305565b73ffffffffffffffffffffffffffffffffffffffff1614611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613c5d565b60405180910390fd5b60005b83839050811015611b275781600d6000868685818110611aad57611aac614255565b5b9050602002016020810190611ac2919061312f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508080611b1f9061411f565b915050611a8a565b50505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ba05750611b9f8261267c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c8e83610d4a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611cdf82611ba7565b611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1590613b7d565b60405180910390fd5b6000611d2983610d4a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d9857508373ffffffffffffffffffffffffffffffffffffffff16611d808461082e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611da95750611da8818561187f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611dd282610d4a565b73ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f90613a9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90613afd565b60405180910390fd5b611ea383838361275e565b611eae600082611c1b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611efe9190613f91565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f559190613eb0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461201483838361276e565b505050565b8047101561205c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205390613b5d565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161208290613962565b60006040518083038185875af1925050503d80600081146120bf576040519150601f19603f3d011682016040523d82523d6000602084013e6120c4565b606091505b5050905080612108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ff90613b3d565b60405180910390fd5b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b61214b828260405180602001604052806000815250612773565b5050565b600061215a82610d4a565b90506121688160008461275e565b612173600083611c1b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121c39190613f91565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122688160008461276e565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239890613b1d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124929190613a00565b60405180910390a3505050565b6124aa848484611db2565b6124b6848484846127ce565b6124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec90613a5d565b60405180910390fd5b50505050565b6060604051806060016040528060368152602001614a0c60369139905090565b60606000821415612563576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612677565b600082905060005b6000821461259557808061257e9061411f565b915050600a8261258e9190613f06565b915061256b565b60008167ffffffffffffffff8111156125b1576125b0614284565b5b6040519080825280601f01601f1916602001820160405280156125e35781602001600182028036833780820191505090505b5090505b60008514612670576001826125fc9190613f91565b9150600a8561260b9190614168565b60306126179190613eb0565b60f81b81838151811061262d5761262c614255565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126699190613f06565b94506125e7565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061274757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612757575061275682612965565b5b9050919050565b6127698383836129cf565b505050565b505050565b61277d8383612ae3565b61278a60008484846127ce565b6127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c090613a5d565b60405180910390fd5b505050565b60006127ef8473ffffffffffffffffffffffffffffffffffffffff16612cbd565b15612958578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612818611c13565b8786866040518563ffffffff1660e01b815260040161283a9493929190613992565b602060405180830381600087803b15801561285457600080fd5b505af192505050801561288557506040513d601f19601f82011682018060405250810190612882919061337f565b60015b612908573d80600081146128b5576040519150601f19603f3d011682016040523d82523d6000602084013e6128ba565b606091505b50600081511415612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f790613a5d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061295d565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6129da838383612ce0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a1d57612a1881612ce5565b612a5c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a5b57612a5a8382612d2e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a9f57612a9a81612e9b565b612ade565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612add57612adc8282612f6c565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4a90613c1d565b60405180910390fd5b612b5c81611ba7565b15612b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9390613abd565b60405180910390fd5b612ba86000838361275e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bf89190613eb0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612cb96000838361276e565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d3b84611022565b612d459190613f91565b9050600060076000848152602001908152602001600020549050818114612e2a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612eaf9190613f91565b9050600060096000848152602001908152602001600020549050600060088381548110612edf57612ede614255565b5b906000526020600020015490508060088381548110612f0157612f00614255565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f5057612f4f614226565b5b6001900381819060005260206000200160009055905550505050565b6000612f7783611022565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000612ffe612ff984613df8565b613dd3565b90508281526020810184848401111561301a576130196142c2565b5b61302584828561407a565b509392505050565b60008135905061303c81614998565b92915050565b60008083601f840112613058576130576142b8565b5b8235905067ffffffffffffffff811115613075576130746142b3565b5b602083019150836020820283011115613091576130906142bd565b5b9250929050565b6000813590506130a7816149af565b92915050565b6000813590506130bc816149c6565b92915050565b6000815190506130d1816149c6565b92915050565b600082601f8301126130ec576130eb6142b8565b5b81356130fc848260208601612feb565b91505092915050565b600081359050613114816149dd565b92915050565b600081359050613129816149f4565b92915050565b600060208284031215613145576131446142cc565b5b60006131538482850161302d565b91505092915050565b60008060408385031215613173576131726142cc565b5b60006131818582860161302d565b92505060206131928582860161302d565b9150509250929050565b6000806000606084860312156131b5576131b46142cc565b5b60006131c38682870161302d565b93505060206131d48682870161302d565b92505060406131e586828701613105565b9150509250925092565b60008060008060808587031215613209576132086142cc565b5b60006132178782880161302d565b94505060206132288782880161302d565b935050604061323987828801613105565b925050606085013567ffffffffffffffff81111561325a576132596142c7565b5b613266878288016130d7565b91505092959194509250565b60008060408385031215613289576132886142cc565b5b60006132978582860161302d565b92505060206132a885828601613098565b9150509250929050565b600080604083850312156132c9576132c86142cc565b5b60006132d78582860161302d565b92505060206132e885828601613105565b9150509250929050565b60008060006040848603121561330b5761330a6142cc565b5b600084013567ffffffffffffffff811115613329576133286142c7565b5b61333586828701613042565b935093505060206133488682870161311a565b9150509250925092565b600060208284031215613368576133676142cc565b5b6000613376848285016130ad565b91505092915050565b600060208284031215613395576133946142cc565b5b60006133a3848285016130c2565b91505092915050565b6000602082840312156133c2576133c16142cc565b5b60006133d084828501613105565b91505092915050565b6000602082840312156133ef576133ee6142cc565b5b60006133fd8482850161311a565b91505092915050565b60006134128383613911565b60208301905092915050565b61342781613ff9565b82525050565b600061343882613e39565b6134428185613e67565b935061344d83613e29565b8060005b8381101561347e5781516134658882613406565b975061347083613e5a565b925050600181019050613451565b5085935050505092915050565b6134948161400b565b82525050565b60006134a582613e44565b6134af8185613e78565b93506134bf818560208601614089565b6134c8816142d1565b840191505092915050565b60006134de82613e4f565b6134e88185613e94565b93506134f8818560208601614089565b613501816142d1565b840191505092915050565b600061351782613e4f565b6135218185613ea5565b9350613531818560208601614089565b80840191505092915050565b600061354a602b83613e94565b9150613555826142e2565b604082019050919050565b600061356d603283613e94565b915061357882614331565b604082019050919050565b6000613590602683613e94565b915061359b82614380565b604082019050919050565b60006135b3602583613e94565b91506135be826143cf565b604082019050919050565b60006135d6601c83613e94565b91506135e18261441e565b602082019050919050565b60006135f9601f83613e94565b915061360482614447565b602082019050919050565b600061361c602483613e94565b915061362782614470565b604082019050919050565b600061363f601983613e94565b915061364a826144bf565b602082019050919050565b6000613662603a83613e94565b915061366d826144e8565b604082019050919050565b6000613685601d83613e94565b915061369082614537565b602082019050919050565b60006136a8602c83613e94565b91506136b382614560565b604082019050919050565b60006136cb601c83613e94565b91506136d6826145af565b602082019050919050565b60006136ee603883613e94565b91506136f9826145d8565b604082019050919050565b6000613711602a83613e94565b915061371c82614627565b604082019050919050565b6000613734602983613e94565b915061373f82614676565b604082019050919050565b6000613757602083613e94565b9150613762826146c5565b602082019050919050565b600061377a602c83613e94565b9150613785826146ee565b604082019050919050565b600061379d602083613e94565b91506137a88261473d565b602082019050919050565b60006137c0602f83613e94565b91506137cb82614766565b604082019050919050565b60006137e3601683613e94565b91506137ee826147b5565b602082019050919050565b6000613806602183613e94565b9150613811826147de565b604082019050919050565b6000613829600083613e89565b91506138348261482d565b600082019050919050565b600061384c603183613e94565b915061385782614830565b604082019050919050565b600061386f602c83613e94565b915061387a8261487f565b604082019050919050565b6000613892601883613e94565b915061389d826148ce565b602082019050919050565b60006138b5602083613e94565b91506138c0826148f7565b602082019050919050565b60006138d8603083613e94565b91506138e382614920565b604082019050919050565b60006138fb601683613e94565b91506139068261496f565b602082019050919050565b61391a81614063565b82525050565b61392981614063565b82525050565b6139388161406d565b82525050565b600061394a828561350c565b9150613956828461350c565b91508190509392505050565b600061396d8261381c565b9150819050919050565b600060208201905061398c600083018461341e565b92915050565b60006080820190506139a7600083018761341e565b6139b4602083018661341e565b6139c16040830185613920565b81810360608301526139d3818461349a565b905095945050505050565b600060208201905081810360008301526139f8818461342d565b905092915050565b6000602082019050613a15600083018461348b565b92915050565b60006020820190508181036000830152613a3581846134d3565b905092915050565b60006020820190508181036000830152613a568161353d565b9050919050565b60006020820190508181036000830152613a7681613560565b9050919050565b60006020820190508181036000830152613a9681613583565b9050919050565b60006020820190508181036000830152613ab6816135a6565b9050919050565b60006020820190508181036000830152613ad6816135c9565b9050919050565b60006020820190508181036000830152613af6816135ec565b9050919050565b60006020820190508181036000830152613b168161360f565b9050919050565b60006020820190508181036000830152613b3681613632565b9050919050565b60006020820190508181036000830152613b5681613655565b9050919050565b60006020820190508181036000830152613b7681613678565b9050919050565b60006020820190508181036000830152613b968161369b565b9050919050565b60006020820190508181036000830152613bb6816136be565b9050919050565b60006020820190508181036000830152613bd6816136e1565b9050919050565b60006020820190508181036000830152613bf681613704565b9050919050565b60006020820190508181036000830152613c1681613727565b9050919050565b60006020820190508181036000830152613c368161374a565b9050919050565b60006020820190508181036000830152613c568161376d565b9050919050565b60006020820190508181036000830152613c7681613790565b9050919050565b60006020820190508181036000830152613c96816137b3565b9050919050565b60006020820190508181036000830152613cb6816137d6565b9050919050565b60006020820190508181036000830152613cd6816137f9565b9050919050565b60006020820190508181036000830152613cf68161383f565b9050919050565b60006020820190508181036000830152613d1681613862565b9050919050565b60006020820190508181036000830152613d3681613885565b9050919050565b60006020820190508181036000830152613d56816138a8565b9050919050565b60006020820190508181036000830152613d76816138cb565b9050919050565b60006020820190508181036000830152613d96816138ee565b9050919050565b6000602082019050613db26000830184613920565b92915050565b6000602082019050613dcd600083018461392f565b92915050565b6000613ddd613dee565b9050613de982826140ee565b919050565b6000604051905090565b600067ffffffffffffffff821115613e1357613e12614284565b5b613e1c826142d1565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ebb82614063565b9150613ec683614063565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613efb57613efa614199565b5b828201905092915050565b6000613f1182614063565b9150613f1c83614063565b925082613f2c57613f2b6141c8565b5b828204905092915050565b6000613f4282614063565b9150613f4d83614063565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f8657613f85614199565b5b828202905092915050565b6000613f9c82614063565b9150613fa783614063565b925082821015613fba57613fb9614199565b5b828203905092915050565b6000613fd08261406d565b9150613fdb8361406d565b925082821015613fee57613fed614199565b5b828203905092915050565b600061400482614043565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156140a757808201518184015260208101905061408c565b838111156140b6576000848401525b50505050565b600060028204905060018216806140d457607f821691505b602082108114156140e8576140e76141f7565b5b50919050565b6140f7826142d1565b810181811067ffffffffffffffff8211171561411657614115614284565b5b80604052505050565b600061412a82614063565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561415d5761415c614199565b5b600182019050919050565b600061417382614063565b915061417e83614063565b92508261418e5761418d6141c8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4578636565646564206d617820617661696c61626c6520707572636861736500600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4368696d707320617265206e6f74206d696e7461626c65207965742e00000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420746865207269676874207061796d656e742e00000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5768697465206c697374206973206e6f74206163746976650000000000000000600082015250565b7f546f6f206d616e79204368696d707320706572207472616e73616374696f6e2e600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f416c6c204368696d707320617265206d696e7465642e00000000000000000000600082015250565b6149a181613ff9565b81146149ac57600080fd5b50565b6149b88161400b565b81146149c357600080fd5b50565b6149cf81614017565b81146149da57600080fd5b50565b6149e681614063565b81146149f157600080fd5b50565b6149fd8161406d565b8114614a0857600080fd5b5056fe697066733a2f2f516d65516b76575a77393751364a61394d325a584a7569435a425a715457646b723579316d745758453375744e412fa26469706673582212202f6495ee9fbd797c80d927cdaff44d9f08633d1b5504a367cad943b13e18064264736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c806370a082311161010d578063b88d4fde116100a0578063e27f0f621161006f578063e27f0f62146106b9578063e797ec1b146106e4578063e985e9c5146106fb578063f2fde38b14610738578063f6dc6bf814610761576101ee565b8063b88d4fde14610611578063c002d23d1461063a578063c87b56dd14610665578063e09814b5146106a2576101ee565b80638da5cb5b116100dc5780638da5cb5b1461057657806395d89b41146105a1578063a22cb465146105cc578063b4993152146105f5576101ee565b806370a08231146104ce578063715018a61461050b5780637e5cd5c1146105225780638462151c14610539576101ee565b80633ccfd60b116101855780634f6ccce7116101545780634f6ccce7146104215780636352211e1461045e5780636386816f1461049b5780636d4af71c146104b7576101ee565b80633ccfd60b1461038f57806340d097c3146103a657806342842e0e146103cf57806342966c68146103f8576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632d8a6e03146103155780632f745c5914610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613352565b61078a565b6040516102279190613a00565b60405180910390f35b34801561023c57600080fd5b5061024561079c565b6040516102529190613a1b565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d91906133ac565b61082e565b60405161028f9190613977565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba91906132b2565b6108b3565b005b3480156102cd57600080fd5b506102d66109cb565b6040516102e39190613d9d565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e919061319c565b6109d8565b005b34801561032157600080fd5b5061033c6004803603810190610337919061312f565b610a38565b6040516103499190613db8565b60405180910390f35b34801561035e57600080fd5b50610379600480360381019061037491906132b2565b610a8e565b6040516103869190613d9d565b60405180910390f35b34801561039b57600080fd5b506103a4610b33565b005b3480156103b257600080fd5b506103cd60048036038101906103c8919061312f565b610bbb565b005b3480156103db57600080fd5b506103f660048036038101906103f1919061319c565b610c5d565b005b34801561040457600080fd5b5061041f600480360381019061041a91906133ac565b610c7d565b005b34801561042d57600080fd5b50610448600480360381019061044391906133ac565b610cd9565b6040516104559190613d9d565b60405180910390f35b34801561046a57600080fd5b50610485600480360381019061048091906133ac565b610d4a565b6040516104929190613977565b60405180910390f35b6104b560048036038101906104b091906133ac565b610dfc565b005b3480156104c357600080fd5b506104cc610f89565b005b3480156104da57600080fd5b506104f560048036038101906104f0919061312f565b611022565b6040516105029190613d9d565b60405180910390f35b34801561051757600080fd5b506105206110da565b005b34801561052e57600080fd5b50610537611162565b005b34801561054557600080fd5b50610560600480360381019061055b919061312f565b6111fb565b60405161056d91906139de565b60405180910390f35b34801561058257600080fd5b5061058b611305565b6040516105989190613977565b60405180910390f35b3480156105ad57600080fd5b506105b661132f565b6040516105c39190613a1b565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190613272565b6113c1565b005b61060f600480360381019061060a91906133d9565b6113d7565b005b34801561061d57600080fd5b50610638600480360381019061063391906131ef565b611631565b005b34801561064657600080fd5b5061064f611693565b60405161065c9190613d9d565b60405180910390f35b34801561067157600080fd5b5061068c600480360381019061068791906133ac565b6116a0565b6040516106999190613a1b565b60405180910390f35b3480156106ae57600080fd5b506106b7611747565b005b3480156106c557600080fd5b506106ce6117e0565b6040516106db9190613d9d565b60405180910390f35b3480156106f057600080fd5b506106f96117e6565b005b34801561070757600080fd5b50610722600480360381019061071d919061315c565b61187f565b60405161072f9190613a00565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a919061312f565b611913565b005b34801561076d57600080fd5b50610788600480360381019061078391906132f2565b611a0b565b005b600061079582611b2d565b9050919050565b6060600080546107ab906140bc565b80601f01602080910402602001604051908101604052809291908181526020018280546107d7906140bc565b80156108245780601f106107f957610100808354040283529160200191610824565b820191906000526020600020905b81548152906001019060200180831161080757829003601f168201915b5050505050905090565b600061083982611ba7565b610878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086f90613c3d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108be82610d4a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561092f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092690613cbd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661094e611c13565b73ffffffffffffffffffffffffffffffffffffffff16148061097d575061097c81610977611c13565b61187f565b5b6109bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b390613bbd565b60405180910390fd5b6109c68383611c1b565b505050565b6000600880549050905090565b6109e96109e3611c13565b82611cd4565b610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f90613cdd565b60405180910390fd5b610a33838383611db2565b505050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610a9983611022565b8210610ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad190613a3d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b3b611c13565b73ffffffffffffffffffffffffffffffffffffffff16610b59611305565b73ffffffffffffffffffffffffffffffffffffffff1614610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690613c5d565b60405180910390fd5b610bb93347612019565b565b610bc3611c13565b73ffffffffffffffffffffffffffffffffffffffff16610be1611305565b73ffffffffffffffffffffffffffffffffffffffff1614610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90613c5d565b60405180910390fd5b6000610c43600b61210d565b9050610c4f600b61211b565b610c598282612131565b5050565b610c7883838360405180602001604052806000815250611631565b505050565b610c8e610c88611c13565b82611cd4565b610ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc490613d5d565b60405180910390fd5b610cd68161214f565b50565b6000610ce36109cb565b8210610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b90613cfd565b60405180910390fd5b60088281548110610d3857610d37614255565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90613bfd565b60405180910390fd5b80915050919050565b600c60009054906101000a900460ff16610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4290613b9d565b60405180910390fd5b6032811115610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690613d3d565b60405180910390fd5b6101bd600182610e9f600b61210d565b610ea99190613eb0565b610eb39190613f91565b10610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90613d7d565b60405180910390fd5b806801e5b8fa8fe2ac0000610f089190613f37565b341015610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190613c9d565b60405180910390fd5b60005b81811015610f8557610f6833610f63600b61210d565b612131565b610f72600b61211b565b8080610f7d9061411f565b915050610f4d565b5050565b610f91611c13565b73ffffffffffffffffffffffffffffffffffffffff16610faf611305565b73ffffffffffffffffffffffffffffffffffffffff1614611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc90613c5d565b60405180910390fd5b6001600c60016101000a81548160ff021916908315150217905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90613bdd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110e2611c13565b73ffffffffffffffffffffffffffffffffffffffff16611100611305565b73ffffffffffffffffffffffffffffffffffffffff1614611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90613c5d565b60405180910390fd5b611160600061226c565b565b61116a611c13565b73ffffffffffffffffffffffffffffffffffffffff16611188611305565b73ffffffffffffffffffffffffffffffffffffffff16146111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590613c5d565b60405180910390fd5b6000600c60006101000a81548160ff021916908315150217905550565b6060600061120883611022565b9050600081141561126557600067ffffffffffffffff81111561122e5761122d614284565b5b60405190808252806020026020018201604052801561125c5781602001602082028036833780820191505090505b50915050611300565b60008167ffffffffffffffff81111561128157611280614284565b5b6040519080825280602002602001820160405280156112af5781602001602082028036833780820191505090505b50905060005b828110156112f9576112c78582610a8e565b8282815181106112da576112d9614255565b5b60200260200101818152505080806112f19061411f565b9150506112b5565b8193505050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461133e906140bc565b80601f016020809104026020016040519081016040528092919081815260200182805461136a906140bc565b80156113b75780601f1061138c576101008083540402835291602001916113b7565b820191906000526020600020905b81548152906001019060200180831161139a57829003601f168201915b5050505050905090565b6113d36113cc611c13565b8383612332565b5050565b600c60019054906101000a900460ff16611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90613d1d565b60405180910390fd5b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff168160ff1611156114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290613add565b60405180910390fd5b6101bd60018260ff166114ce600b61210d565b6114d89190613eb0565b6114e29190613f91565b10611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151990613d7d565b60405180910390fd5b8060ff166801e5b8fa8fe2ac000061153a9190613f37565b34101561157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390613c9d565b60405180910390fd5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166115d79190613fc5565b92506101000a81548160ff021916908360ff16021790555060005b8160ff1681101561162d576116103361160b600b61210d565b612131565b61161a600b61211b565b80806116259061411f565b9150506115f2565b5050565b61164261163c611c13565b83611cd4565b611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890613cdd565b60405180910390fd5b61168d8484848461249f565b50505050565b6801e5b8fa8fe2ac000081565b60606116ab82611ba7565b6116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613c7d565b60405180910390fd5b60006116f46124fb565b90506000815111611714576040518060200160405280600081525061173f565b8061171e8461251b565b60405160200161172f92919061393e565b6040516020818303038152906040525b915050919050565b61174f611c13565b73ffffffffffffffffffffffffffffffffffffffff1661176d611305565b73ffffffffffffffffffffffffffffffffffffffff16146117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba90613c5d565b60405180910390fd5b6000600c60016101000a81548160ff021916908315150217905550565b6101bd81565b6117ee611c13565b73ffffffffffffffffffffffffffffffffffffffff1661180c611305565b73ffffffffffffffffffffffffffffffffffffffff1614611862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185990613c5d565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61191b611c13565b73ffffffffffffffffffffffffffffffffffffffff16611939611305565b73ffffffffffffffffffffffffffffffffffffffff161461198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198690613c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f690613a7d565b60405180910390fd5b611a088161226c565b50565b611a13611c13565b73ffffffffffffffffffffffffffffffffffffffff16611a31611305565b73ffffffffffffffffffffffffffffffffffffffff1614611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613c5d565b60405180910390fd5b60005b83839050811015611b275781600d6000868685818110611aad57611aac614255565b5b9050602002016020810190611ac2919061312f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508080611b1f9061411f565b915050611a8a565b50505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ba05750611b9f8261267c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c8e83610d4a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611cdf82611ba7565b611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1590613b7d565b60405180910390fd5b6000611d2983610d4a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d9857508373ffffffffffffffffffffffffffffffffffffffff16611d808461082e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611da95750611da8818561187f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611dd282610d4a565b73ffffffffffffffffffffffffffffffffffffffff1614611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f90613a9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90613afd565b60405180910390fd5b611ea383838361275e565b611eae600082611c1b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611efe9190613f91565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f559190613eb0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461201483838361276e565b505050565b8047101561205c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205390613b5d565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161208290613962565b60006040518083038185875af1925050503d80600081146120bf576040519150601f19603f3d011682016040523d82523d6000602084013e6120c4565b606091505b5050905080612108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ff90613b3d565b60405180910390fd5b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b61214b828260405180602001604052806000815250612773565b5050565b600061215a82610d4a565b90506121688160008461275e565b612173600083611c1b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121c39190613f91565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122688160008461276e565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239890613b1d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124929190613a00565b60405180910390a3505050565b6124aa848484611db2565b6124b6848484846127ce565b6124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec90613a5d565b60405180910390fd5b50505050565b6060604051806060016040528060368152602001614a0c60369139905090565b60606000821415612563576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612677565b600082905060005b6000821461259557808061257e9061411f565b915050600a8261258e9190613f06565b915061256b565b60008167ffffffffffffffff8111156125b1576125b0614284565b5b6040519080825280601f01601f1916602001820160405280156125e35781602001600182028036833780820191505090505b5090505b60008514612670576001826125fc9190613f91565b9150600a8561260b9190614168565b60306126179190613eb0565b60f81b81838151811061262d5761262c614255565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126699190613f06565b94506125e7565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061274757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612757575061275682612965565b5b9050919050565b6127698383836129cf565b505050565b505050565b61277d8383612ae3565b61278a60008484846127ce565b6127c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c090613a5d565b60405180910390fd5b505050565b60006127ef8473ffffffffffffffffffffffffffffffffffffffff16612cbd565b15612958578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612818611c13565b8786866040518563ffffffff1660e01b815260040161283a9493929190613992565b602060405180830381600087803b15801561285457600080fd5b505af192505050801561288557506040513d601f19601f82011682018060405250810190612882919061337f565b60015b612908573d80600081146128b5576040519150601f19603f3d011682016040523d82523d6000602084013e6128ba565b606091505b50600081511415612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f790613a5d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061295d565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6129da838383612ce0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a1d57612a1881612ce5565b612a5c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a5b57612a5a8382612d2e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a9f57612a9a81612e9b565b612ade565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612add57612adc8282612f6c565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4a90613c1d565b60405180910390fd5b612b5c81611ba7565b15612b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9390613abd565b60405180910390fd5b612ba86000838361275e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bf89190613eb0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612cb96000838361276e565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d3b84611022565b612d459190613f91565b9050600060076000848152602001908152602001600020549050818114612e2a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612eaf9190613f91565b9050600060096000848152602001908152602001600020549050600060088381548110612edf57612ede614255565b5b906000526020600020015490508060088381548110612f0157612f00614255565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f5057612f4f614226565b5b6001900381819060005260206000200160009055905550505050565b6000612f7783611022565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000612ffe612ff984613df8565b613dd3565b90508281526020810184848401111561301a576130196142c2565b5b61302584828561407a565b509392505050565b60008135905061303c81614998565b92915050565b60008083601f840112613058576130576142b8565b5b8235905067ffffffffffffffff811115613075576130746142b3565b5b602083019150836020820283011115613091576130906142bd565b5b9250929050565b6000813590506130a7816149af565b92915050565b6000813590506130bc816149c6565b92915050565b6000815190506130d1816149c6565b92915050565b600082601f8301126130ec576130eb6142b8565b5b81356130fc848260208601612feb565b91505092915050565b600081359050613114816149dd565b92915050565b600081359050613129816149f4565b92915050565b600060208284031215613145576131446142cc565b5b60006131538482850161302d565b91505092915050565b60008060408385031215613173576131726142cc565b5b60006131818582860161302d565b92505060206131928582860161302d565b9150509250929050565b6000806000606084860312156131b5576131b46142cc565b5b60006131c38682870161302d565b93505060206131d48682870161302d565b92505060406131e586828701613105565b9150509250925092565b60008060008060808587031215613209576132086142cc565b5b60006132178782880161302d565b94505060206132288782880161302d565b935050604061323987828801613105565b925050606085013567ffffffffffffffff81111561325a576132596142c7565b5b613266878288016130d7565b91505092959194509250565b60008060408385031215613289576132886142cc565b5b60006132978582860161302d565b92505060206132a885828601613098565b9150509250929050565b600080604083850312156132c9576132c86142cc565b5b60006132d78582860161302d565b92505060206132e885828601613105565b9150509250929050565b60008060006040848603121561330b5761330a6142cc565b5b600084013567ffffffffffffffff811115613329576133286142c7565b5b61333586828701613042565b935093505060206133488682870161311a565b9150509250925092565b600060208284031215613368576133676142cc565b5b6000613376848285016130ad565b91505092915050565b600060208284031215613395576133946142cc565b5b60006133a3848285016130c2565b91505092915050565b6000602082840312156133c2576133c16142cc565b5b60006133d084828501613105565b91505092915050565b6000602082840312156133ef576133ee6142cc565b5b60006133fd8482850161311a565b91505092915050565b60006134128383613911565b60208301905092915050565b61342781613ff9565b82525050565b600061343882613e39565b6134428185613e67565b935061344d83613e29565b8060005b8381101561347e5781516134658882613406565b975061347083613e5a565b925050600181019050613451565b5085935050505092915050565b6134948161400b565b82525050565b60006134a582613e44565b6134af8185613e78565b93506134bf818560208601614089565b6134c8816142d1565b840191505092915050565b60006134de82613e4f565b6134e88185613e94565b93506134f8818560208601614089565b613501816142d1565b840191505092915050565b600061351782613e4f565b6135218185613ea5565b9350613531818560208601614089565b80840191505092915050565b600061354a602b83613e94565b9150613555826142e2565b604082019050919050565b600061356d603283613e94565b915061357882614331565b604082019050919050565b6000613590602683613e94565b915061359b82614380565b604082019050919050565b60006135b3602583613e94565b91506135be826143cf565b604082019050919050565b60006135d6601c83613e94565b91506135e18261441e565b602082019050919050565b60006135f9601f83613e94565b915061360482614447565b602082019050919050565b600061361c602483613e94565b915061362782614470565b604082019050919050565b600061363f601983613e94565b915061364a826144bf565b602082019050919050565b6000613662603a83613e94565b915061366d826144e8565b604082019050919050565b6000613685601d83613e94565b915061369082614537565b602082019050919050565b60006136a8602c83613e94565b91506136b382614560565b604082019050919050565b60006136cb601c83613e94565b91506136d6826145af565b602082019050919050565b60006136ee603883613e94565b91506136f9826145d8565b604082019050919050565b6000613711602a83613e94565b915061371c82614627565b604082019050919050565b6000613734602983613e94565b915061373f82614676565b604082019050919050565b6000613757602083613e94565b9150613762826146c5565b602082019050919050565b600061377a602c83613e94565b9150613785826146ee565b604082019050919050565b600061379d602083613e94565b91506137a88261473d565b602082019050919050565b60006137c0602f83613e94565b91506137cb82614766565b604082019050919050565b60006137e3601683613e94565b91506137ee826147b5565b602082019050919050565b6000613806602183613e94565b9150613811826147de565b604082019050919050565b6000613829600083613e89565b91506138348261482d565b600082019050919050565b600061384c603183613e94565b915061385782614830565b604082019050919050565b600061386f602c83613e94565b915061387a8261487f565b604082019050919050565b6000613892601883613e94565b915061389d826148ce565b602082019050919050565b60006138b5602083613e94565b91506138c0826148f7565b602082019050919050565b60006138d8603083613e94565b91506138e382614920565b604082019050919050565b60006138fb601683613e94565b91506139068261496f565b602082019050919050565b61391a81614063565b82525050565b61392981614063565b82525050565b6139388161406d565b82525050565b600061394a828561350c565b9150613956828461350c565b91508190509392505050565b600061396d8261381c565b9150819050919050565b600060208201905061398c600083018461341e565b92915050565b60006080820190506139a7600083018761341e565b6139b4602083018661341e565b6139c16040830185613920565b81810360608301526139d3818461349a565b905095945050505050565b600060208201905081810360008301526139f8818461342d565b905092915050565b6000602082019050613a15600083018461348b565b92915050565b60006020820190508181036000830152613a3581846134d3565b905092915050565b60006020820190508181036000830152613a568161353d565b9050919050565b60006020820190508181036000830152613a7681613560565b9050919050565b60006020820190508181036000830152613a9681613583565b9050919050565b60006020820190508181036000830152613ab6816135a6565b9050919050565b60006020820190508181036000830152613ad6816135c9565b9050919050565b60006020820190508181036000830152613af6816135ec565b9050919050565b60006020820190508181036000830152613b168161360f565b9050919050565b60006020820190508181036000830152613b3681613632565b9050919050565b60006020820190508181036000830152613b5681613655565b9050919050565b60006020820190508181036000830152613b7681613678565b9050919050565b60006020820190508181036000830152613b968161369b565b9050919050565b60006020820190508181036000830152613bb6816136be565b9050919050565b60006020820190508181036000830152613bd6816136e1565b9050919050565b60006020820190508181036000830152613bf681613704565b9050919050565b60006020820190508181036000830152613c1681613727565b9050919050565b60006020820190508181036000830152613c368161374a565b9050919050565b60006020820190508181036000830152613c568161376d565b9050919050565b60006020820190508181036000830152613c7681613790565b9050919050565b60006020820190508181036000830152613c96816137b3565b9050919050565b60006020820190508181036000830152613cb6816137d6565b9050919050565b60006020820190508181036000830152613cd6816137f9565b9050919050565b60006020820190508181036000830152613cf68161383f565b9050919050565b60006020820190508181036000830152613d1681613862565b9050919050565b60006020820190508181036000830152613d3681613885565b9050919050565b60006020820190508181036000830152613d56816138a8565b9050919050565b60006020820190508181036000830152613d76816138cb565b9050919050565b60006020820190508181036000830152613d96816138ee565b9050919050565b6000602082019050613db26000830184613920565b92915050565b6000602082019050613dcd600083018461392f565b92915050565b6000613ddd613dee565b9050613de982826140ee565b919050565b6000604051905090565b600067ffffffffffffffff821115613e1357613e12614284565b5b613e1c826142d1565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ebb82614063565b9150613ec683614063565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613efb57613efa614199565b5b828201905092915050565b6000613f1182614063565b9150613f1c83614063565b925082613f2c57613f2b6141c8565b5b828204905092915050565b6000613f4282614063565b9150613f4d83614063565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f8657613f85614199565b5b828202905092915050565b6000613f9c82614063565b9150613fa783614063565b925082821015613fba57613fb9614199565b5b828203905092915050565b6000613fd08261406d565b9150613fdb8361406d565b925082821015613fee57613fed614199565b5b828203905092915050565b600061400482614043565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156140a757808201518184015260208101905061408c565b838111156140b6576000848401525b50505050565b600060028204905060018216806140d457607f821691505b602082108114156140e8576140e76141f7565b5b50919050565b6140f7826142d1565b810181811067ffffffffffffffff8211171561411657614115614284565b5b80604052505050565b600061412a82614063565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561415d5761415c614199565b5b600182019050919050565b600061417382614063565b915061417e83614063565b92508261418e5761418d6141c8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4578636565646564206d617820617661696c61626c6520707572636861736500600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4368696d707320617265206e6f74206d696e7461626c65207965742e00000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420746865207269676874207061796d656e742e00000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5768697465206c697374206973206e6f74206163746976650000000000000000600082015250565b7f546f6f206d616e79204368696d707320706572207472616e73616374696f6e2e600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f416c6c204368696d707320617265206d696e7465642e00000000000000000000600082015250565b6149a181613ff9565b81146149ac57600080fd5b50565b6149b88161400b565b81146149c357600080fd5b50565b6149cf81614017565b81146149da57600080fd5b50565b6149e681614063565b81146149f157600080fd5b50565b6149fd8161406d565b8114614a0857600080fd5b5056fe697066733a2f2f516d65516b76575a77393751364a61394d325a584a7569435a425a715457646b723579316d745758453375744e412fa26469706673582212202f6495ee9fbd797c80d927cdaff44d9f08633d1b5504a367cad943b13e18064264736f6c63430008070033
Deployed Bytecode Sourcemap
48758:3953:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52496:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28109:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29668:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29191:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42717:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30418:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50351:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42385:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52090:116;;;;;;;;;;;;;:::i;:::-;;49419:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30828:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40814:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42907:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27803:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51112:556;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51878:95;;;;;;;;;;;;;:::i;:::-;;27533:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6705:103;;;;;;;;;;;;;:::i;:::-;;51792:78;;;;;;;;;;;;;:::i;:::-;;49607:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6054:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28278:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29961:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50481:623;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31084:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49083:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28453:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51981:97;;;;;;;;;;;;;:::i;:::-;;49016:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51708:76;;;;;;;;;;;;;:::i;:::-;;30187:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6963:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50113:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52496:212;52635:4;52664:36;52688:11;52664:23;:36::i;:::-;52657:43;;52496:212;;;:::o;28109:100::-;28163:13;28196:5;28189:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28109:100;:::o;29668:221::-;29744:7;29772:16;29780:7;29772;:16::i;:::-;29764:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29857:15;:24;29873:7;29857:24;;;;;;;;;;;;;;;;;;;;;29850:31;;29668:221;;;:::o;29191:411::-;29272:13;29288:23;29303:7;29288:14;:23::i;:::-;29272:39;;29336:5;29330:11;;:2;:11;;;;29322:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29430:5;29414:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29439:37;29456:5;29463:12;:10;:12::i;:::-;29439:16;:37::i;:::-;29414:62;29392:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29573:21;29582:2;29586:7;29573:8;:21::i;:::-;29261:341;29191:411;;:::o;42717:113::-;42778:7;42805:10;:17;;;;42798:24;;42717:113;:::o;30418:339::-;30613:41;30632:12;:10;:12::i;:::-;30646:7;30613:18;:41::i;:::-;30605:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30721:28;30731:4;30737:2;30741:7;30721:9;:28::i;:::-;30418:339;;;:::o;50351:122::-;50424:5;50449:10;:16;50460:4;50449:16;;;;;;;;;;;;;;;;;;;;;;;;;50442:23;;50351:122;;;:::o;42385:256::-;42482:7;42518:23;42535:5;42518:16;:23::i;:::-;42510:5;:31;42502:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42607:12;:19;42620:5;42607:19;;;;;;;;;;;;;;;:26;42627:5;42607:26;;;;;;;;;;;;42600:33;;42385:256;;;;:::o;52090:116::-;6285:12;:10;:12::i;:::-;6274:23;;:7;:5;:7::i;:::-;:23;;;6266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52138:60:::1;52164:10;52176:21;52138:17;:60::i;:::-;52090:116::o:0;49419:180::-;6285:12;:10;:12::i;:::-;6274:23;;:7;:5;:7::i;:::-;:23;;;6266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49477:15:::1;49495:25;:15;:23;:25::i;:::-;49477:43;;49531:27;:15;:25;:27::i;:::-;49569:22;49579:2;49583:7;49569:9;:22::i;:::-;49466:133;49419:180:::0;:::o;30828:185::-;30966:39;30983:4;30989:2;30993:7;30966:39;;;;;;;;;;;;:16;:39::i;:::-;30828:185;;;:::o;40814:245::-;40932:41;40951:12;:10;:12::i;:::-;40965:7;40932:18;:41::i;:::-;40924:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;41037:14;41043:7;41037:5;:14::i;:::-;40814:245;:::o;42907:233::-;42982:7;43018:30;:28;:30::i;:::-;43010:5;:38;43002:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43115:10;43126:5;43115:17;;;;;;;;:::i;:::-;;;;;;;;;;43108:24;;42907:233;;;:::o;27803:239::-;27875:7;27895:13;27911:7;:16;27919:7;27911:16;;;;;;;;;;;;;;;;;;;;;27895:32;;27963:1;27946:19;;:5;:19;;;;27938:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28029:5;28022:12;;;27803:239;;;:::o;51112:556::-;51188:8;;;;;;;;;;;51180:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;51258:2;51248:6;:12;;51240:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;49053:3;51353:1;51344:6;51316:25;:15;:23;:25::i;:::-;:34;;;;:::i;:::-;:38;;;;:::i;:::-;:51;51308:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;51439:6;49120:8;51426:19;;;;:::i;:::-;51413:9;:32;;51405:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51483:13;51507:154;51531:6;51523:5;:14;51507:154;;;51561:48;51571:10;51583:25;:15;:23;:25::i;:::-;51561:9;:48::i;:::-;51622:27;:15;:25;:27::i;:::-;51539:7;;;;;:::i;:::-;;;;51507:154;;;51169:499;51112:556;:::o;51878:95::-;6285:12;:10;:12::i;:::-;6274:23;;:7;:5;:7::i;:::-;:23;;;6266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51961:4:::1;51940:18;;:25;;;;;;;;;;;;;;;;;;51878:95::o:0;27533:208::-;27605:7;27650:1;27633:19;;:5;:19;;;;27625:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27717:9;:16;27727:5;27717:16;;;;;;;;;;;;;;;;27710:23;;27533:208;;;:::o;6705:103::-;6285:12;:10;:12::i;:::-;6274:23;;:7;:5;:7::i;:::-;:23;;;6266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6770:30:::1;6797:1;6770:18;:30::i;:::-;6705:103::o:0;51792:78::-;6285:12;:10;:12::i;:::-;6274:23;;:7;:5;:7::i;:::-;:23;;;6266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51857:5:::1;51846:8;;:16;;;;;;;;;;;;;;;;;;51792:78::o:0;49607:498::-;49669:16;49698:18;49719:17;49729:6;49719:9;:17::i;:::-;49698:38;;49765:1;49751:10;:15;49747:109;;;49842:1;49828:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49821:23;;;;;49747:109;49866:23;49906:10;49892:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49866:51;;49928:13;49952:122;49976:10;49968:5;:18;49952:122;;;50028:34;50048:6;50056:5;50028:19;:34::i;:::-;50012:6;50019:5;50012:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;49988:7;;;;;:::i;:::-;;;;49952:122;;;50091:6;50084:13;;;;;49607:498;;;;:::o;6054:87::-;6100:7;6127:6;;;;;;;;;;;6120:13;;6054:87;:::o;28278:104::-;28334:13;28367:7;28360:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28278:104;:::o;29961:155::-;30056:52;30075:12;:10;:12::i;:::-;30089:8;30099;30056:18;:52::i;:::-;29961:155;;:::o;50481:623::-;50552:18;;;;;;;;;;;50544:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50628:10;:22;50639:10;50628:22;;;;;;;;;;;;;;;;;;;;;;;;;50618:32;;:6;:32;;;;50610:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;49053:3;50742:1;50733:6;50705:34;;:25;:15;:23;:25::i;:::-;:34;;;;:::i;:::-;:38;;;;:::i;:::-;:51;50697:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;50828:6;50815:19;;49120:8;50815:19;;;;:::i;:::-;50802:9;:32;;50794:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;50900:6;50874:10;:22;50885:10;50874:22;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;50919:13;50943:154;50967:6;50959:14;;:5;:14;50943:154;;;50997:48;51007:10;51019:25;:15;:23;:25::i;:::-;50997:9;:48::i;:::-;51058:27;:15;:25;:27::i;:::-;50975:7;;;;;:::i;:::-;;;;50943:154;;;50533:571;50481:623;:::o;31084:328::-;31259:41;31278:12;:10;:12::i;:::-;31292:7;31259:18;:41::i;:::-;31251:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31365:39;31379:4;31385:2;31389:7;31398:5;31365:13;:39::i;:::-;31084:328;;;;:::o;49083:45::-;49120:8;49083:45;:::o;28453:334::-;28526:13;28560:16;28568:7;28560;:16::i;:::-;28552:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28641:21;28665:10;:8;:10::i;:::-;28641:34;;28717:1;28699:7;28693:21;:25;:86;;;;;;;;;;;;;;;;;28745:7;28754:18;:7;:16;:18::i;:::-;28728:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28693:86;28686:93;;;28453:334;;;:::o;51981:97::-;6285:12;:10;:12::i;:::-;6274:23;;:7;:5;:7::i;:::-;:23;;;6266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52065:5:::1;52044:18;;:26;;;;;;;;;;;;;;;;;;51981:97::o:0;49016:40::-;49053:3;49016:40;:::o;51708:76::-;6285:12;:10;:12::i;:::-;6274:23;;:7;:5;:7::i;:::-;:23;;;6266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51772:4:::1;51761:8;;:15;;;;;;;;;;;;;;;;;;51708:76::o:0;30187:164::-;30284:4;30308:18;:25;30327:5;30308:25;;;;;;;;;;;;;;;:35;30334:8;30308:35;;;;;;;;;;;;;;;;;;;;;;;;;30301:42;;30187:164;;;;:::o;6963:201::-;6285:12;:10;:12::i;:::-;6274:23;;:7;:5;:7::i;:::-;:23;;;6266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7072:1:::1;7052:22;;:8;:22;;;;7044:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7128:28;7147:8;7128:18;:28::i;:::-;6963:201:::0;:::o;50113:230::-;6285:12;:10;:12::i;:::-;6274:23;;:7;:5;:7::i;:::-;:23;;;6266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50224:9:::1;50219:117;50243:9;;:16;;50239:1;:20;50219:117;;;50308:16;50281:10;:24;50292:9;;50302:1;50292:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;50281:24;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;50261:3;;;;;:::i;:::-;;;;50219:117;;;;50113:230:::0;;;:::o;42077:224::-;42179:4;42218:35;42203:50;;;:11;:50;;;;:90;;;;42257:36;42281:11;42257:23;:36::i;:::-;42203:90;42196:97;;42077:224;;;:::o;32922:127::-;32987:4;33039:1;33011:30;;:7;:16;33019:7;33011:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33004:37;;32922:127;;;:::o;4778:98::-;4831:7;4858:10;4851:17;;4778:98;:::o;37068:174::-;37170:2;37143:15;:24;37159:7;37143:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37226:7;37222:2;37188:46;;37197:23;37212:7;37197:14;:23::i;:::-;37188:46;;;;;;;;;;;;37068:174;;:::o;33216:348::-;33309:4;33334:16;33342:7;33334;:16::i;:::-;33326:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33410:13;33426:23;33441:7;33426:14;:23::i;:::-;33410:39;;33479:5;33468:16;;:7;:16;;;:51;;;;33512:7;33488:31;;:20;33500:7;33488:11;:20::i;:::-;:31;;;33468:51;:87;;;;33523:32;33540:5;33547:7;33523:16;:32::i;:::-;33468:87;33460:96;;;33216:348;;;;:::o;36325:625::-;36484:4;36457:31;;:23;36472:7;36457:14;:23::i;:::-;:31;;;36449:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36563:1;36549:16;;:2;:16;;;;36541:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36619:39;36640:4;36646:2;36650:7;36619:20;:39::i;:::-;36723:29;36740:1;36744:7;36723:8;:29::i;:::-;36784:1;36765:9;:15;36775:4;36765:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36813:1;36796:9;:13;36806:2;36796:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36844:2;36825:7;:16;36833:7;36825:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36883:7;36879:2;36864:27;;36873:4;36864:27;;;;;;;;;;;;36904:38;36924:4;36930:2;36934:7;36904:19;:38::i;:::-;36325:625;;;:::o;10016:317::-;10131:6;10106:21;:31;;10098:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10185:12;10203:9;:14;;10225:6;10203:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10184:52;;;10255:7;10247:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10087:246;10016:317;;:::o;1382:114::-;1447:7;1474;:14;;;1467:21;;1382:114;;;:::o;1504:127::-;1611:1;1593:7;:14;;;:19;;;;;;;;;;;1504:127;:::o;33906:110::-;33982:26;33992:2;33996:7;33982:26;;;;;;;;;;;;:9;:26::i;:::-;33906:110;;:::o;35568:420::-;35628:13;35644:23;35659:7;35644:14;:23::i;:::-;35628:39;;35680:48;35701:5;35716:1;35720:7;35680:20;:48::i;:::-;35769:29;35786:1;35790:7;35769:8;:29::i;:::-;35831:1;35811:9;:16;35821:5;35811:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;35850:7;:16;35858:7;35850:16;;;;;;;;;;;;35843:23;;;;;;;;;;;35912:7;35908:1;35884:36;;35893:5;35884:36;;;;;;;;;;;;35933:47;35953:5;35968:1;35972:7;35933:19;:47::i;:::-;35617:371;35568:420;:::o;7324:191::-;7398:16;7417:6;;;;;;;;;;;7398:25;;7443:8;7434:6;;:17;;;;;;;;;;;;;;;;;;7498:8;7467:40;;7488:8;7467:40;;;;;;;;;;;;7387:128;7324:191;:::o;37384:315::-;37539:8;37530:17;;:5;:17;;;;37522:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37626:8;37588:18;:25;37607:5;37588:25;;;;;;;;;;;;;;;:35;37614:8;37588:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37672:8;37650:41;;37665:5;37650:41;;;37682:8;37650:41;;;;;;:::i;:::-;;;;;;;;37384:315;;;:::o;32294:::-;32451:28;32461:4;32467:2;32471:7;32451:9;:28::i;:::-;32498:48;32521:4;32527:2;32531:7;32540:5;32498:22;:48::i;:::-;32490:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32294:315;;;;:::o;49262:149::-;49314:13;49340:63;;;;;;;;;;;;;;;;;;;49262:149;:::o;2340:723::-;2396:13;2626:1;2617:5;:10;2613:53;;;2644:10;;;;;;;;;;;;;;;;;;;;;2613:53;2676:12;2691:5;2676:20;;2707:14;2732:78;2747:1;2739:4;:9;2732:78;;2765:8;;;;;:::i;:::-;;;;2796:2;2788:10;;;;;:::i;:::-;;;2732:78;;;2820:19;2852:6;2842:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2820:39;;2870:154;2886:1;2877:5;:10;2870:154;;2914:1;2904:11;;;;;:::i;:::-;;;2981:2;2973:5;:10;;;;:::i;:::-;2960:2;:24;;;;:::i;:::-;2947:39;;2930:6;2937;2930:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3010:2;3001:11;;;;;:::i;:::-;;;2870:154;;;3048:6;3034:21;;;;;2340:723;;;;:::o;27164:305::-;27266:4;27318:25;27303:40;;;:11;:40;;;;:105;;;;27375:33;27360:48;;;:11;:48;;;;27303:105;:158;;;;27425:36;27449:11;27425:23;:36::i;:::-;27303:158;27283:178;;27164:305;;;:::o;52284:204::-;52435:45;52462:4;52468:2;52472:7;52435:26;:45::i;:::-;52284:204;;;:::o;40146:125::-;;;;:::o;34243:321::-;34373:18;34379:2;34383:7;34373:5;:18::i;:::-;34424:54;34455:1;34459:2;34463:7;34472:5;34424:22;:54::i;:::-;34402:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34243:321;;;:::o;38264:799::-;38419:4;38440:15;:2;:13;;;:15::i;:::-;38436:620;;;38492:2;38476:36;;;38513:12;:10;:12::i;:::-;38527:4;38533:7;38542:5;38476:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38472:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38735:1;38718:6;:13;:18;38714:272;;;38761:60;;;;;;;;;;:::i;:::-;;;;;;;;38714:272;38936:6;38930:13;38921:6;38917:2;38913:15;38906:38;38472:529;38609:41;;;38599:51;;;:6;:51;;;;38592:58;;;;;38436:620;39040:4;39033:11;;38264:799;;;;;;;:::o;18838:157::-;18923:4;18962:25;18947:40;;;:11;:40;;;;18940:47;;18838:157;;;:::o;43753:589::-;43897:45;43924:4;43930:2;43934:7;43897:26;:45::i;:::-;43975:1;43959:18;;:4;:18;;;43955:187;;;43994:40;44026:7;43994:31;:40::i;:::-;43955:187;;;44064:2;44056:10;;:4;:10;;;44052:90;;44083:47;44116:4;44122:7;44083:32;:47::i;:::-;44052:90;43955:187;44170:1;44156:16;;:2;:16;;;44152:183;;;44189:45;44226:7;44189:36;:45::i;:::-;44152:183;;;44262:4;44256:10;;:2;:10;;;44252:83;;44283:40;44311:2;44315:7;44283:27;:40::i;:::-;44252:83;44152:183;43753:589;;;:::o;34900:439::-;34994:1;34980:16;;:2;:16;;;;34972:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35053:16;35061:7;35053;:16::i;:::-;35052:17;35044:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35115:45;35144:1;35148:2;35152:7;35115:20;:45::i;:::-;35190:1;35173:9;:13;35183:2;35173:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35221:2;35202:7;:16;35210:7;35202:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35266:7;35262:2;35241:33;;35258:1;35241:33;;;;;;;;;;;;35287:44;35315:1;35319:2;35323:7;35287:19;:44::i;:::-;34900:439;;:::o;8755:326::-;8815:4;9072:1;9050:7;:19;;;:23;9043:30;;8755:326;;;:::o;39635:126::-;;;;:::o;45065:164::-;45169:10;:17;;;;45142:15;:24;45158:7;45142:24;;;;;;;;;;;:44;;;;45197:10;45213:7;45197:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45065:164;:::o;45856:988::-;46122:22;46172:1;46147:22;46164:4;46147:16;:22::i;:::-;:26;;;;:::i;:::-;46122:51;;46184:18;46205:17;:26;46223:7;46205:26;;;;;;;;;;;;46184:47;;46352:14;46338:10;:28;46334:328;;46383:19;46405:12;:18;46418:4;46405:18;;;;;;;;;;;;;;;:34;46424:14;46405:34;;;;;;;;;;;;46383:56;;46489:11;46456:12;:18;46469:4;46456:18;;;;;;;;;;;;;;;:30;46475:10;46456:30;;;;;;;;;;;:44;;;;46606:10;46573:17;:30;46591:11;46573:30;;;;;;;;;;;:43;;;;46368:294;46334:328;46758:17;:26;46776:7;46758:26;;;;;;;;;;;46751:33;;;46802:12;:18;46815:4;46802:18;;;;;;;;;;;;;;;:34;46821:14;46802:34;;;;;;;;;;;46795:41;;;45937:907;;45856:988;;:::o;47139:1079::-;47392:22;47437:1;47417:10;:17;;;;:21;;;;:::i;:::-;47392:46;;47449:18;47470:15;:24;47486:7;47470:24;;;;;;;;;;;;47449:45;;47821:19;47843:10;47854:14;47843:26;;;;;;;;:::i;:::-;;;;;;;;;;47821:48;;47907:11;47882:10;47893;47882:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48018:10;47987:15;:28;48003:11;47987:28;;;;;;;;;;;:41;;;;48159:15;:24;48175:7;48159:24;;;;;;;;;;;48152:31;;;48194:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47210:1008;;;47139:1079;:::o;44643:221::-;44728:14;44745:20;44762:2;44745:16;:20::i;:::-;44728:37;;44803:7;44776:12;:16;44789:2;44776:16;;;;;;;;;;;;;;;:24;44793:6;44776:24;;;;;;;;;;;:34;;;;44850:6;44821:17;:26;44839:7;44821:26;;;;;;;;;;;:35;;;;44717:147;44643:221;;:::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;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:137::-;1343:5;1381:6;1368:20;1359:29;;1397:32;1423:5;1397:32;:::i;:::-;1298:137;;;;:::o;1441:141::-;1497:5;1528:6;1522:13;1513:22;;1544:32;1570:5;1544:32;:::i;:::-;1441:141;;;;:::o;1601:338::-;1656:5;1705:3;1698:4;1690:6;1686:17;1682:27;1672:122;;1713:79;;:::i;:::-;1672:122;1830:6;1817:20;1855:78;1929:3;1921:6;1914:4;1906:6;1902:17;1855:78;:::i;:::-;1846:87;;1662:277;1601:338;;;;:::o;1945:139::-;1991:5;2029:6;2016:20;2007:29;;2045:33;2072:5;2045:33;:::i;:::-;1945:139;;;;:::o;2090:135::-;2134:5;2172:6;2159:20;2150:29;;2188:31;2213:5;2188:31;:::i;:::-;2090:135;;;;:::o;2231:329::-;2290:6;2339:2;2327:9;2318:7;2314:23;2310:32;2307:119;;;2345:79;;:::i;:::-;2307:119;2465:1;2490:53;2535:7;2526:6;2515:9;2511:22;2490:53;:::i;:::-;2480:63;;2436:117;2231:329;;;;:::o;2566:474::-;2634:6;2642;2691:2;2679:9;2670:7;2666:23;2662:32;2659:119;;;2697:79;;:::i;:::-;2659:119;2817:1;2842:53;2887:7;2878:6;2867:9;2863:22;2842:53;:::i;:::-;2832:63;;2788:117;2944:2;2970:53;3015:7;3006:6;2995:9;2991:22;2970:53;:::i;:::-;2960:63;;2915:118;2566:474;;;;;:::o;3046:619::-;3123:6;3131;3139;3188:2;3176:9;3167:7;3163:23;3159:32;3156:119;;;3194:79;;:::i;:::-;3156:119;3314:1;3339:53;3384:7;3375:6;3364:9;3360:22;3339:53;:::i;:::-;3329:63;;3285:117;3441:2;3467:53;3512:7;3503:6;3492:9;3488:22;3467:53;:::i;:::-;3457:63;;3412:118;3569:2;3595:53;3640:7;3631:6;3620:9;3616:22;3595:53;:::i;:::-;3585:63;;3540:118;3046:619;;;;;:::o;3671:943::-;3766:6;3774;3782;3790;3839:3;3827:9;3818:7;3814:23;3810:33;3807:120;;;3846:79;;:::i;:::-;3807:120;3966:1;3991:53;4036:7;4027:6;4016:9;4012:22;3991:53;:::i;:::-;3981:63;;3937:117;4093:2;4119:53;4164:7;4155:6;4144:9;4140:22;4119:53;:::i;:::-;4109:63;;4064:118;4221:2;4247:53;4292:7;4283:6;4272:9;4268:22;4247:53;:::i;:::-;4237:63;;4192:118;4377:2;4366:9;4362:18;4349:32;4408:18;4400:6;4397:30;4394:117;;;4430:79;;:::i;:::-;4394:117;4535:62;4589:7;4580:6;4569:9;4565:22;4535:62;:::i;:::-;4525:72;;4320:287;3671:943;;;;;;;:::o;4620:468::-;4685:6;4693;4742:2;4730:9;4721:7;4717:23;4713:32;4710:119;;;4748:79;;:::i;:::-;4710:119;4868:1;4893:53;4938:7;4929:6;4918:9;4914:22;4893:53;:::i;:::-;4883:63;;4839:117;4995:2;5021:50;5063:7;5054:6;5043:9;5039:22;5021:50;:::i;:::-;5011:60;;4966:115;4620:468;;;;;:::o;5094:474::-;5162:6;5170;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5472:2;5498:53;5543:7;5534:6;5523:9;5519:22;5498:53;:::i;:::-;5488:63;;5443:118;5094:474;;;;;:::o;5574:700::-;5667:6;5675;5683;5732:2;5720:9;5711:7;5707:23;5703:32;5700:119;;;5738:79;;:::i;:::-;5700:119;5886:1;5875:9;5871:17;5858:31;5916:18;5908:6;5905:30;5902:117;;;5938:79;;:::i;:::-;5902:117;6051:80;6123:7;6114:6;6103:9;6099:22;6051:80;:::i;:::-;6033:98;;;;5829:312;6180:2;6206:51;6249:7;6240:6;6229:9;6225:22;6206:51;:::i;:::-;6196:61;;6151:116;5574:700;;;;;:::o;6280:327::-;6338:6;6387:2;6375:9;6366:7;6362:23;6358:32;6355:119;;;6393:79;;:::i;:::-;6355:119;6513:1;6538:52;6582:7;6573:6;6562:9;6558:22;6538:52;:::i;:::-;6528:62;;6484:116;6280:327;;;;:::o;6613:349::-;6682:6;6731:2;6719:9;6710:7;6706:23;6702:32;6699:119;;;6737:79;;:::i;:::-;6699:119;6857:1;6882:63;6937:7;6928:6;6917:9;6913:22;6882:63;:::i;:::-;6872:73;;6828:127;6613:349;;;;:::o;6968:329::-;7027:6;7076:2;7064:9;7055:7;7051:23;7047:32;7044:119;;;7082:79;;:::i;:::-;7044:119;7202:1;7227:53;7272:7;7263:6;7252:9;7248:22;7227:53;:::i;:::-;7217:63;;7173:117;6968:329;;;;:::o;7303:325::-;7360:6;7409:2;7397:9;7388:7;7384:23;7380:32;7377:119;;;7415:79;;:::i;:::-;7377:119;7535:1;7560:51;7603:7;7594:6;7583:9;7579:22;7560:51;:::i;:::-;7550:61;;7506:115;7303:325;;;;:::o;7634:179::-;7703:10;7724:46;7766:3;7758:6;7724:46;:::i;:::-;7802:4;7797:3;7793:14;7779:28;;7634:179;;;;:::o;7819:118::-;7906:24;7924:5;7906:24;:::i;:::-;7901:3;7894:37;7819:118;;:::o;7973:732::-;8092:3;8121:54;8169:5;8121:54;:::i;:::-;8191:86;8270:6;8265:3;8191:86;:::i;:::-;8184:93;;8301:56;8351:5;8301:56;:::i;:::-;8380:7;8411:1;8396:284;8421:6;8418:1;8415:13;8396:284;;;8497:6;8491:13;8524:63;8583:3;8568:13;8524:63;:::i;:::-;8517:70;;8610:60;8663:6;8610:60;:::i;:::-;8600:70;;8456:224;8443:1;8440;8436:9;8431:14;;8396:284;;;8400:14;8696:3;8689:10;;8097:608;;;7973:732;;;;:::o;8711:109::-;8792:21;8807:5;8792:21;:::i;:::-;8787:3;8780:34;8711:109;;:::o;8826:360::-;8912:3;8940:38;8972:5;8940:38;:::i;:::-;8994:70;9057:6;9052:3;8994:70;:::i;:::-;8987:77;;9073:52;9118:6;9113:3;9106:4;9099:5;9095:16;9073:52;:::i;:::-;9150:29;9172:6;9150:29;:::i;:::-;9145:3;9141:39;9134:46;;8916:270;8826:360;;;;:::o;9192:364::-;9280:3;9308:39;9341:5;9308:39;:::i;:::-;9363:71;9427:6;9422:3;9363:71;:::i;:::-;9356:78;;9443:52;9488:6;9483:3;9476:4;9469:5;9465:16;9443:52;:::i;:::-;9520:29;9542:6;9520:29;:::i;:::-;9515:3;9511:39;9504:46;;9284:272;9192:364;;;;:::o;9562:377::-;9668:3;9696:39;9729:5;9696:39;:::i;:::-;9751:89;9833:6;9828:3;9751:89;:::i;:::-;9744:96;;9849:52;9894:6;9889:3;9882:4;9875:5;9871:16;9849:52;:::i;:::-;9926:6;9921:3;9917:16;9910:23;;9672:267;9562:377;;;;:::o;9945:366::-;10087:3;10108:67;10172:2;10167:3;10108:67;:::i;:::-;10101:74;;10184:93;10273:3;10184:93;:::i;:::-;10302:2;10297:3;10293:12;10286:19;;9945:366;;;:::o;10317:::-;10459:3;10480:67;10544:2;10539:3;10480:67;:::i;:::-;10473:74;;10556:93;10645:3;10556:93;:::i;:::-;10674:2;10669:3;10665:12;10658:19;;10317:366;;;:::o;10689:::-;10831:3;10852:67;10916:2;10911:3;10852:67;:::i;:::-;10845:74;;10928:93;11017:3;10928:93;:::i;:::-;11046:2;11041:3;11037:12;11030:19;;10689:366;;;:::o;11061:::-;11203:3;11224:67;11288:2;11283:3;11224:67;:::i;:::-;11217:74;;11300:93;11389:3;11300:93;:::i;:::-;11418:2;11413:3;11409:12;11402:19;;11061:366;;;:::o;11433:::-;11575:3;11596:67;11660:2;11655:3;11596:67;:::i;:::-;11589:74;;11672:93;11761:3;11672:93;:::i;:::-;11790:2;11785:3;11781:12;11774:19;;11433:366;;;:::o;11805:::-;11947:3;11968:67;12032:2;12027:3;11968:67;:::i;:::-;11961:74;;12044:93;12133:3;12044:93;:::i;:::-;12162:2;12157:3;12153:12;12146:19;;11805:366;;;:::o;12177:::-;12319:3;12340:67;12404:2;12399:3;12340:67;:::i;:::-;12333:74;;12416:93;12505:3;12416:93;:::i;:::-;12534:2;12529:3;12525:12;12518:19;;12177:366;;;:::o;12549:::-;12691:3;12712:67;12776:2;12771:3;12712:67;:::i;:::-;12705:74;;12788:93;12877:3;12788:93;:::i;:::-;12906:2;12901:3;12897:12;12890:19;;12549:366;;;:::o;12921:::-;13063:3;13084:67;13148:2;13143:3;13084:67;:::i;:::-;13077:74;;13160:93;13249:3;13160:93;:::i;:::-;13278:2;13273:3;13269:12;13262:19;;12921:366;;;:::o;13293:::-;13435:3;13456:67;13520:2;13515:3;13456:67;:::i;:::-;13449:74;;13532:93;13621:3;13532:93;:::i;:::-;13650:2;13645:3;13641:12;13634:19;;13293:366;;;:::o;13665:::-;13807:3;13828:67;13892:2;13887:3;13828:67;:::i;:::-;13821:74;;13904:93;13993:3;13904:93;:::i;:::-;14022:2;14017:3;14013:12;14006:19;;13665:366;;;:::o;14037:::-;14179:3;14200:67;14264:2;14259:3;14200:67;:::i;:::-;14193:74;;14276:93;14365:3;14276:93;:::i;:::-;14394:2;14389:3;14385:12;14378:19;;14037:366;;;:::o;14409:::-;14551:3;14572:67;14636:2;14631:3;14572:67;:::i;:::-;14565:74;;14648:93;14737:3;14648:93;:::i;:::-;14766:2;14761:3;14757:12;14750:19;;14409:366;;;:::o;14781:::-;14923:3;14944:67;15008:2;15003:3;14944:67;:::i;:::-;14937:74;;15020:93;15109:3;15020:93;:::i;:::-;15138:2;15133:3;15129:12;15122:19;;14781:366;;;:::o;15153:::-;15295:3;15316:67;15380:2;15375:3;15316:67;:::i;:::-;15309:74;;15392:93;15481:3;15392:93;:::i;:::-;15510:2;15505:3;15501:12;15494:19;;15153:366;;;:::o;15525:::-;15667:3;15688:67;15752:2;15747:3;15688:67;:::i;:::-;15681:74;;15764:93;15853:3;15764:93;:::i;:::-;15882:2;15877:3;15873:12;15866:19;;15525:366;;;:::o;15897:::-;16039:3;16060:67;16124:2;16119:3;16060:67;:::i;:::-;16053:74;;16136:93;16225:3;16136:93;:::i;:::-;16254:2;16249:3;16245:12;16238:19;;15897:366;;;:::o;16269:::-;16411:3;16432:67;16496:2;16491:3;16432:67;:::i;:::-;16425:74;;16508:93;16597:3;16508:93;:::i;:::-;16626:2;16621:3;16617:12;16610:19;;16269:366;;;:::o;16641:::-;16783:3;16804:67;16868:2;16863:3;16804:67;:::i;:::-;16797:74;;16880:93;16969:3;16880:93;:::i;:::-;16998:2;16993:3;16989:12;16982:19;;16641:366;;;:::o;17013:::-;17155:3;17176:67;17240:2;17235:3;17176:67;:::i;:::-;17169:74;;17252:93;17341:3;17252:93;:::i;:::-;17370:2;17365:3;17361:12;17354:19;;17013:366;;;:::o;17385:::-;17527:3;17548:67;17612:2;17607:3;17548:67;:::i;:::-;17541:74;;17624:93;17713:3;17624:93;:::i;:::-;17742:2;17737:3;17733:12;17726:19;;17385:366;;;:::o;17757:398::-;17916:3;17937:83;18018:1;18013:3;17937:83;:::i;:::-;17930:90;;18029:93;18118:3;18029:93;:::i;:::-;18147:1;18142:3;18138:11;18131:18;;17757:398;;;:::o;18161:366::-;18303:3;18324:67;18388:2;18383:3;18324:67;:::i;:::-;18317:74;;18400:93;18489:3;18400:93;:::i;:::-;18518:2;18513:3;18509:12;18502:19;;18161:366;;;:::o;18533:::-;18675:3;18696:67;18760:2;18755:3;18696:67;:::i;:::-;18689:74;;18772:93;18861:3;18772:93;:::i;:::-;18890:2;18885:3;18881:12;18874:19;;18533:366;;;:::o;18905:::-;19047:3;19068:67;19132:2;19127:3;19068:67;:::i;:::-;19061:74;;19144:93;19233:3;19144:93;:::i;:::-;19262:2;19257:3;19253:12;19246:19;;18905:366;;;:::o;19277:::-;19419:3;19440:67;19504:2;19499:3;19440:67;:::i;:::-;19433:74;;19516:93;19605:3;19516:93;:::i;:::-;19634:2;19629:3;19625:12;19618:19;;19277:366;;;:::o;19649:::-;19791:3;19812:67;19876:2;19871:3;19812:67;:::i;:::-;19805:74;;19888:93;19977:3;19888:93;:::i;:::-;20006:2;20001:3;19997:12;19990:19;;19649:366;;;:::o;20021:::-;20163:3;20184:67;20248:2;20243:3;20184:67;:::i;:::-;20177:74;;20260:93;20349:3;20260:93;:::i;:::-;20378:2;20373:3;20369:12;20362:19;;20021:366;;;:::o;20393:108::-;20470:24;20488:5;20470:24;:::i;:::-;20465:3;20458:37;20393:108;;:::o;20507:118::-;20594:24;20612:5;20594:24;:::i;:::-;20589:3;20582:37;20507:118;;:::o;20631:112::-;20714:22;20730:5;20714:22;:::i;:::-;20709:3;20702:35;20631:112;;:::o;20749:435::-;20929:3;20951:95;21042:3;21033:6;20951:95;:::i;:::-;20944:102;;21063:95;21154:3;21145:6;21063:95;:::i;:::-;21056:102;;21175:3;21168:10;;20749:435;;;;;:::o;21190:379::-;21374:3;21396:147;21539:3;21396:147;:::i;:::-;21389:154;;21560:3;21553:10;;21190:379;;;:::o;21575:222::-;21668:4;21706:2;21695:9;21691:18;21683:26;;21719:71;21787:1;21776:9;21772:17;21763:6;21719:71;:::i;:::-;21575:222;;;;:::o;21803:640::-;21998:4;22036:3;22025:9;22021:19;22013:27;;22050:71;22118:1;22107:9;22103:17;22094:6;22050:71;:::i;:::-;22131:72;22199:2;22188:9;22184:18;22175:6;22131:72;:::i;:::-;22213;22281:2;22270:9;22266:18;22257:6;22213:72;:::i;:::-;22332:9;22326:4;22322:20;22317:2;22306:9;22302:18;22295:48;22360:76;22431:4;22422:6;22360:76;:::i;:::-;22352:84;;21803:640;;;;;;;:::o;22449:373::-;22592:4;22630:2;22619:9;22615:18;22607:26;;22679:9;22673:4;22669:20;22665:1;22654:9;22650:17;22643:47;22707:108;22810:4;22801:6;22707:108;:::i;:::-;22699:116;;22449:373;;;;:::o;22828:210::-;22915:4;22953:2;22942:9;22938:18;22930:26;;22966:65;23028:1;23017:9;23013:17;23004:6;22966:65;:::i;:::-;22828:210;;;;:::o;23044:313::-;23157:4;23195:2;23184:9;23180:18;23172:26;;23244:9;23238:4;23234:20;23230:1;23219:9;23215:17;23208:47;23272:78;23345:4;23336:6;23272:78;:::i;:::-;23264:86;;23044:313;;;;:::o;23363:419::-;23529:4;23567:2;23556:9;23552:18;23544:26;;23616:9;23610:4;23606:20;23602:1;23591:9;23587:17;23580:47;23644:131;23770:4;23644:131;:::i;:::-;23636:139;;23363:419;;;:::o;23788:::-;23954:4;23992:2;23981:9;23977:18;23969:26;;24041:9;24035:4;24031:20;24027:1;24016:9;24012:17;24005:47;24069:131;24195:4;24069:131;:::i;:::-;24061:139;;23788:419;;;:::o;24213:::-;24379:4;24417:2;24406:9;24402:18;24394:26;;24466:9;24460:4;24456:20;24452:1;24441:9;24437:17;24430:47;24494:131;24620:4;24494:131;:::i;:::-;24486:139;;24213:419;;;:::o;24638:::-;24804:4;24842:2;24831:9;24827:18;24819:26;;24891:9;24885:4;24881:20;24877:1;24866:9;24862:17;24855:47;24919:131;25045:4;24919:131;:::i;:::-;24911:139;;24638:419;;;:::o;25063:::-;25229:4;25267:2;25256:9;25252:18;25244:26;;25316:9;25310:4;25306:20;25302:1;25291:9;25287:17;25280:47;25344:131;25470:4;25344:131;:::i;:::-;25336:139;;25063:419;;;:::o;25488:::-;25654:4;25692:2;25681:9;25677:18;25669:26;;25741:9;25735:4;25731:20;25727:1;25716:9;25712:17;25705:47;25769:131;25895:4;25769:131;:::i;:::-;25761:139;;25488:419;;;:::o;25913:::-;26079:4;26117:2;26106:9;26102:18;26094:26;;26166:9;26160:4;26156:20;26152:1;26141:9;26137:17;26130:47;26194:131;26320:4;26194:131;:::i;:::-;26186:139;;25913:419;;;:::o;26338:::-;26504:4;26542:2;26531:9;26527:18;26519:26;;26591:9;26585:4;26581:20;26577:1;26566:9;26562:17;26555:47;26619:131;26745:4;26619:131;:::i;:::-;26611:139;;26338:419;;;:::o;26763:::-;26929:4;26967:2;26956:9;26952:18;26944:26;;27016:9;27010:4;27006:20;27002:1;26991:9;26987:17;26980:47;27044:131;27170:4;27044:131;:::i;:::-;27036:139;;26763:419;;;:::o;27188:::-;27354:4;27392:2;27381:9;27377:18;27369:26;;27441:9;27435:4;27431:20;27427:1;27416:9;27412:17;27405:47;27469:131;27595:4;27469:131;:::i;:::-;27461:139;;27188:419;;;:::o;27613:::-;27779:4;27817:2;27806:9;27802:18;27794:26;;27866:9;27860:4;27856:20;27852:1;27841:9;27837:17;27830:47;27894:131;28020:4;27894:131;:::i;:::-;27886:139;;27613:419;;;:::o;28038:::-;28204:4;28242:2;28231:9;28227:18;28219:26;;28291:9;28285:4;28281:20;28277:1;28266:9;28262:17;28255:47;28319:131;28445:4;28319:131;:::i;:::-;28311:139;;28038:419;;;:::o;28463:::-;28629:4;28667:2;28656:9;28652:18;28644:26;;28716:9;28710:4;28706:20;28702:1;28691:9;28687:17;28680:47;28744:131;28870:4;28744:131;:::i;:::-;28736:139;;28463:419;;;:::o;28888:::-;29054:4;29092:2;29081:9;29077:18;29069:26;;29141:9;29135:4;29131:20;29127:1;29116:9;29112:17;29105:47;29169:131;29295:4;29169:131;:::i;:::-;29161:139;;28888:419;;;:::o;29313:::-;29479:4;29517:2;29506:9;29502:18;29494:26;;29566:9;29560:4;29556:20;29552:1;29541:9;29537:17;29530:47;29594:131;29720:4;29594:131;:::i;:::-;29586:139;;29313:419;;;:::o;29738:::-;29904:4;29942:2;29931:9;29927:18;29919:26;;29991:9;29985:4;29981:20;29977:1;29966:9;29962:17;29955:47;30019:131;30145:4;30019:131;:::i;:::-;30011:139;;29738:419;;;:::o;30163:::-;30329:4;30367:2;30356:9;30352:18;30344:26;;30416:9;30410:4;30406:20;30402:1;30391:9;30387:17;30380:47;30444:131;30570:4;30444:131;:::i;:::-;30436:139;;30163:419;;;:::o;30588:::-;30754:4;30792:2;30781:9;30777:18;30769:26;;30841:9;30835:4;30831:20;30827:1;30816:9;30812:17;30805:47;30869:131;30995:4;30869:131;:::i;:::-;30861:139;;30588:419;;;:::o;31013:::-;31179:4;31217:2;31206:9;31202:18;31194:26;;31266:9;31260:4;31256:20;31252:1;31241:9;31237:17;31230:47;31294:131;31420:4;31294:131;:::i;:::-;31286:139;;31013:419;;;:::o;31438:::-;31604:4;31642:2;31631:9;31627:18;31619:26;;31691:9;31685:4;31681:20;31677:1;31666:9;31662:17;31655:47;31719:131;31845:4;31719:131;:::i;:::-;31711:139;;31438:419;;;:::o;31863:::-;32029:4;32067:2;32056:9;32052:18;32044:26;;32116:9;32110:4;32106:20;32102:1;32091:9;32087:17;32080:47;32144:131;32270:4;32144:131;:::i;:::-;32136:139;;31863:419;;;:::o;32288:::-;32454:4;32492:2;32481:9;32477:18;32469:26;;32541:9;32535:4;32531:20;32527:1;32516:9;32512:17;32505:47;32569:131;32695:4;32569:131;:::i;:::-;32561:139;;32288:419;;;:::o;32713:::-;32879:4;32917:2;32906:9;32902:18;32894:26;;32966:9;32960:4;32956:20;32952:1;32941:9;32937:17;32930:47;32994:131;33120:4;32994:131;:::i;:::-;32986:139;;32713:419;;;:::o;33138:::-;33304:4;33342:2;33331:9;33327:18;33319:26;;33391:9;33385:4;33381:20;33377:1;33366:9;33362:17;33355:47;33419:131;33545:4;33419:131;:::i;:::-;33411:139;;33138:419;;;:::o;33563:::-;33729:4;33767:2;33756:9;33752:18;33744:26;;33816:9;33810:4;33806:20;33802:1;33791:9;33787:17;33780:47;33844:131;33970:4;33844:131;:::i;:::-;33836:139;;33563:419;;;:::o;33988:::-;34154:4;34192:2;34181:9;34177:18;34169:26;;34241:9;34235:4;34231:20;34227:1;34216:9;34212:17;34205:47;34269:131;34395:4;34269:131;:::i;:::-;34261:139;;33988:419;;;:::o;34413:::-;34579:4;34617:2;34606:9;34602:18;34594:26;;34666:9;34660:4;34656:20;34652:1;34641:9;34637:17;34630:47;34694:131;34820:4;34694:131;:::i;:::-;34686:139;;34413:419;;;:::o;34838:222::-;34931:4;34969:2;34958:9;34954:18;34946:26;;34982:71;35050:1;35039:9;35035:17;35026:6;34982:71;:::i;:::-;34838:222;;;;:::o;35066:214::-;35155:4;35193:2;35182:9;35178:18;35170:26;;35206:67;35270:1;35259:9;35255:17;35246:6;35206:67;:::i;:::-;35066:214;;;;:::o;35286:129::-;35320:6;35347:20;;:::i;:::-;35337:30;;35376:33;35404:4;35396:6;35376:33;:::i;:::-;35286:129;;;:::o;35421:75::-;35454:6;35487:2;35481:9;35471:19;;35421:75;:::o;35502:307::-;35563:4;35653:18;35645:6;35642:30;35639:56;;;35675:18;;:::i;:::-;35639:56;35713:29;35735:6;35713:29;:::i;:::-;35705:37;;35797:4;35791;35787:15;35779:23;;35502:307;;;:::o;35815:132::-;35882:4;35905:3;35897:11;;35935:4;35930:3;35926:14;35918:22;;35815:132;;;:::o;35953:114::-;36020:6;36054:5;36048:12;36038:22;;35953:114;;;:::o;36073:98::-;36124:6;36158:5;36152:12;36142:22;;36073:98;;;:::o;36177:99::-;36229:6;36263:5;36257:12;36247:22;;36177:99;;;:::o;36282:113::-;36352:4;36384;36379:3;36375:14;36367:22;;36282:113;;;:::o;36401:184::-;36500:11;36534:6;36529:3;36522:19;36574:4;36569:3;36565:14;36550:29;;36401:184;;;;:::o;36591:168::-;36674:11;36708:6;36703:3;36696:19;36748:4;36743:3;36739:14;36724:29;;36591:168;;;;:::o;36765:147::-;36866:11;36903:3;36888:18;;36765:147;;;;:::o;36918:169::-;37002:11;37036:6;37031:3;37024:19;37076:4;37071:3;37067:14;37052:29;;36918:169;;;;:::o;37093:148::-;37195:11;37232:3;37217:18;;37093:148;;;;:::o;37247:305::-;37287:3;37306:20;37324:1;37306:20;:::i;:::-;37301:25;;37340:20;37358:1;37340:20;:::i;:::-;37335:25;;37494:1;37426:66;37422:74;37419:1;37416:81;37413:107;;;37500:18;;:::i;:::-;37413:107;37544:1;37541;37537:9;37530:16;;37247:305;;;;:::o;37558:185::-;37598:1;37615:20;37633:1;37615:20;:::i;:::-;37610:25;;37649:20;37667:1;37649:20;:::i;:::-;37644:25;;37688:1;37678:35;;37693:18;;:::i;:::-;37678:35;37735:1;37732;37728:9;37723:14;;37558:185;;;;:::o;37749:348::-;37789:7;37812:20;37830:1;37812:20;:::i;:::-;37807:25;;37846:20;37864:1;37846:20;:::i;:::-;37841:25;;38034:1;37966:66;37962:74;37959:1;37956:81;37951:1;37944:9;37937:17;37933:105;37930:131;;;38041:18;;:::i;:::-;37930:131;38089:1;38086;38082:9;38071:20;;37749:348;;;;:::o;38103:191::-;38143:4;38163:20;38181:1;38163:20;:::i;:::-;38158:25;;38197:20;38215:1;38197:20;:::i;:::-;38192:25;;38236:1;38233;38230:8;38227:34;;;38241:18;;:::i;:::-;38227:34;38286:1;38283;38279:9;38271:17;;38103:191;;;;:::o;38300:185::-;38338:4;38358:18;38374:1;38358:18;:::i;:::-;38353:23;;38390:18;38406:1;38390:18;:::i;:::-;38385:23;;38427:1;38424;38421:8;38418:34;;;38432:18;;:::i;:::-;38418:34;38477:1;38474;38470:9;38462:17;;38300:185;;;;:::o;38491:96::-;38528:7;38557:24;38575:5;38557:24;:::i;:::-;38546:35;;38491:96;;;:::o;38593:90::-;38627:7;38670:5;38663:13;38656:21;38645:32;;38593:90;;;:::o;38689:149::-;38725:7;38765:66;38758:5;38754:78;38743:89;;38689:149;;;:::o;38844:126::-;38881:7;38921:42;38914:5;38910:54;38899:65;;38844:126;;;:::o;38976:77::-;39013:7;39042:5;39031:16;;38976:77;;;:::o;39059:86::-;39094:7;39134:4;39127:5;39123:16;39112:27;;39059:86;;;:::o;39151:154::-;39235:6;39230:3;39225;39212:30;39297:1;39288:6;39283:3;39279:16;39272:27;39151:154;;;:::o;39311:307::-;39379:1;39389:113;39403:6;39400:1;39397:13;39389:113;;;39488:1;39483:3;39479:11;39473:18;39469:1;39464:3;39460:11;39453:39;39425:2;39422:1;39418:10;39413:15;;39389:113;;;39520:6;39517:1;39514:13;39511:101;;;39600:1;39591:6;39586:3;39582:16;39575:27;39511:101;39360:258;39311:307;;;:::o;39624:320::-;39668:6;39705:1;39699:4;39695:12;39685:22;;39752:1;39746:4;39742:12;39773:18;39763:81;;39829:4;39821:6;39817:17;39807:27;;39763:81;39891:2;39883:6;39880:14;39860:18;39857:38;39854:84;;;39910:18;;:::i;:::-;39854:84;39675:269;39624:320;;;:::o;39950:281::-;40033:27;40055:4;40033:27;:::i;:::-;40025:6;40021:40;40163:6;40151:10;40148:22;40127:18;40115:10;40112:34;40109:62;40106:88;;;40174:18;;:::i;:::-;40106:88;40214:10;40210:2;40203:22;39993:238;39950:281;;:::o;40237:233::-;40276:3;40299:24;40317:5;40299:24;:::i;:::-;40290:33;;40345:66;40338:5;40335:77;40332:103;;;40415:18;;:::i;:::-;40332:103;40462:1;40455:5;40451:13;40444:20;;40237:233;;;:::o;40476:176::-;40508:1;40525:20;40543:1;40525:20;:::i;:::-;40520:25;;40559:20;40577:1;40559:20;:::i;:::-;40554:25;;40598:1;40588:35;;40603:18;;:::i;:::-;40588:35;40644:1;40641;40637:9;40632:14;;40476:176;;;;:::o;40658:180::-;40706:77;40703:1;40696:88;40803:4;40800:1;40793:15;40827:4;40824:1;40817:15;40844:180;40892:77;40889:1;40882:88;40989:4;40986:1;40979:15;41013:4;41010:1;41003:15;41030:180;41078:77;41075:1;41068:88;41175:4;41172:1;41165:15;41199:4;41196:1;41189:15;41216:180;41264:77;41261:1;41254:88;41361:4;41358:1;41351:15;41385:4;41382:1;41375:15;41402:180;41450:77;41447:1;41440:88;41547:4;41544:1;41537:15;41571:4;41568:1;41561:15;41588:180;41636:77;41633:1;41626:88;41733:4;41730:1;41723:15;41757:4;41754:1;41747:15;41774:117;41883:1;41880;41873:12;41897:117;42006:1;42003;41996:12;42020:117;42129:1;42126;42119:12;42143:117;42252:1;42249;42242:12;42266:117;42375:1;42372;42365:12;42389:117;42498:1;42495;42488:12;42512:102;42553:6;42604:2;42600:7;42595:2;42588:5;42584:14;42580:28;42570:38;;42512:102;;;:::o;42620:230::-;42760:34;42756:1;42748:6;42744:14;42737:58;42829:13;42824:2;42816:6;42812:15;42805:38;42620:230;:::o;42856:237::-;42996:34;42992:1;42984:6;42980:14;42973:58;43065:20;43060:2;43052:6;43048:15;43041:45;42856:237;:::o;43099:225::-;43239:34;43235:1;43227:6;43223:14;43216:58;43308:8;43303:2;43295:6;43291:15;43284:33;43099:225;:::o;43330:224::-;43470:34;43466:1;43458:6;43454:14;43447:58;43539:7;43534:2;43526:6;43522:15;43515:32;43330:224;:::o;43560:178::-;43700:30;43696:1;43688:6;43684:14;43677:54;43560:178;:::o;43744:181::-;43884:33;43880:1;43872:6;43868:14;43861:57;43744:181;:::o;43931:223::-;44071:34;44067:1;44059:6;44055:14;44048:58;44140:6;44135:2;44127:6;44123:15;44116:31;43931:223;:::o;44160:175::-;44300:27;44296:1;44288:6;44284:14;44277:51;44160:175;:::o;44341:245::-;44481:34;44477:1;44469:6;44465:14;44458:58;44550:28;44545:2;44537:6;44533:15;44526:53;44341:245;:::o;44592:179::-;44732:31;44728:1;44720:6;44716:14;44709:55;44592:179;:::o;44777:231::-;44917:34;44913:1;44905:6;44901:14;44894:58;44986:14;44981:2;44973:6;44969:15;44962:39;44777:231;:::o;45014:178::-;45154:30;45150:1;45142:6;45138:14;45131:54;45014:178;:::o;45198:243::-;45338:34;45334:1;45326:6;45322:14;45315:58;45407:26;45402:2;45394:6;45390:15;45383:51;45198:243;:::o;45447:229::-;45587:34;45583:1;45575:6;45571:14;45564:58;45656:12;45651:2;45643:6;45639:15;45632:37;45447:229;:::o;45682:228::-;45822:34;45818:1;45810:6;45806:14;45799:58;45891:11;45886:2;45878:6;45874:15;45867:36;45682:228;:::o;45916:182::-;46056:34;46052:1;46044:6;46040:14;46033:58;45916:182;:::o;46104:231::-;46244:34;46240:1;46232:6;46228:14;46221:58;46313:14;46308:2;46300:6;46296:15;46289:39;46104:231;:::o;46341:182::-;46481:34;46477:1;46469:6;46465:14;46458:58;46341:182;:::o;46529:234::-;46669:34;46665:1;46657:6;46653:14;46646:58;46738:17;46733:2;46725:6;46721:15;46714:42;46529:234;:::o;46769:172::-;46909:24;46905:1;46897:6;46893:14;46886:48;46769:172;:::o;46947:220::-;47087:34;47083:1;47075:6;47071:14;47064:58;47156:3;47151:2;47143:6;47139:15;47132:28;46947:220;:::o;47173:114::-;;:::o;47293:236::-;47433:34;47429:1;47421:6;47417:14;47410:58;47502:19;47497:2;47489:6;47485:15;47478:44;47293:236;:::o;47535:231::-;47675:34;47671:1;47663:6;47659:14;47652:58;47744:14;47739:2;47731:6;47727:15;47720:39;47535:231;:::o;47772:174::-;47912:26;47908:1;47900:6;47896:14;47889:50;47772:174;:::o;47952:182::-;48092:34;48088:1;48080:6;48076:14;48069:58;47952:182;:::o;48140:235::-;48280:34;48276:1;48268:6;48264:14;48257:58;48349:18;48344:2;48336:6;48332:15;48325:43;48140:235;:::o;48381:172::-;48521:24;48517:1;48509:6;48505:14;48498:48;48381:172;:::o;48559:122::-;48632:24;48650:5;48632:24;:::i;:::-;48625:5;48622:35;48612:63;;48671:1;48668;48661:12;48612:63;48559:122;:::o;48687:116::-;48757:21;48772:5;48757:21;:::i;:::-;48750:5;48747:32;48737:60;;48793:1;48790;48783:12;48737:60;48687:116;:::o;48809:120::-;48881:23;48898:5;48881:23;:::i;:::-;48874:5;48871:34;48861:62;;48919:1;48916;48909:12;48861:62;48809:120;:::o;48935:122::-;49008:24;49026:5;49008:24;:::i;:::-;49001:5;48998:35;48988:63;;49047:1;49044;49037:12;48988:63;48935:122;:::o;49063:118::-;49134:22;49150:5;49134:22;:::i;:::-;49127:5;49124:33;49114:61;;49171:1;49168;49161:12;49114:61;49063:118;:::o
Swarm Source
ipfs://2f6495ee9fbd797c80d927cdaff44d9f08633d1b5504a367cad943b13e180642
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.