Token ArmyJackals
Overview CRC721
Total Supply:
4,200 AJLS
Holders:
75 addresses
Contract:
Balance
0 AJLS
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
JackalsNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-06-24 */ // SPDX-License-Identifier: GPL-3.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 (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.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 overridden 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/CroArmyJackals3.sol pragma solidity >=0.7.0 <0.9.0; contract JackalsNFT is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 150 ether; uint256 public maxSupply = 4200; uint256 public maxMintAmount = 10; uint256 public nftPerAddressLimit = 100; bool public paused = false; bool public revealed = false; bool public onlyWhitelisted = true; address[] public whitelistedAddresses; mapping(address => uint256) public addressMintedBalance; address[] private payees; uint16[] private shares; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner()) { if(onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "user is not whitelisted"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded"); } require(msg.value >= cost * _mintAmount, "insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); } } function isWhitelisted(address _user) public view returns (bool) { for (uint i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function isCorrectShares(uint16[] memory _shares) private pure returns (bool){ uint256 len = _shares.length; uint256 totalFees; for(uint256 i = 0; i < len; i ++) { totalFees += _shares[i]; } return totalFees == 10000; } function setPaymentShares(address[] calldata _newPayees, uint16[] calldata _newShares) external onlyOwner { require(_newPayees.length != 0, "empty payees"); require(_newPayees.length == _newShares.length, "wrong payee numbers"); if (!isCorrectShares(_newShares)) { revert("invalid shares"); } payees = _newPayees; shares = _newShares; } function withdraw() public payable onlyOwner { // This will payout the owner the contract balance. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_newPayees","type":"address[]"},{"internalType":"uint16[]","name":"_newShares","type":"uint16[]"}],"name":"setPaymentShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620003c3565b50680821ab0d4414980000600e55611068600f55600a60105560646011556000601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff021916908315150217905550348015620000cd57600080fd5b5060405162005d9638038062005d968339818101604052810190620000f39190620004f1565b838381600090805190602001906200010d929190620003c3565b50806001908051906020019062000126929190620003c3565b505050620001496200013d6200017560201b60201c565b6200017d60201b60201c565b6200015a826200024360201b60201c565b6200016b81620002ee60201b60201c565b50505050620007e6565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002536200017560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002796200039960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c99062000606565b60405180910390fd5b80600b9080519060200190620002ea929190620003c3565b5050565b620002fe6200017560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003246200039960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200037d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003749062000606565b60405180910390fd5b80600d908051906020019062000395929190620003c3565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003d190620006ce565b90600052602060002090601f016020900481019282620003f5576000855562000441565b82601f106200041057805160ff191683800117855562000441565b8280016001018555821562000441579182015b828111156200044057825182559160200191906001019062000423565b5b50905062000450919062000454565b5090565b5b808211156200046f57600081600090555060010162000455565b5090565b60006200048a620004848462000651565b62000628565b905082815260208101848484011115620004a957620004a86200079d565b5b620004b684828562000698565b509392505050565b600082601f830112620004d657620004d562000798565b5b8151620004e884826020860162000473565b91505092915050565b600080600080608085870312156200050e576200050d620007a7565b5b600085015167ffffffffffffffff8111156200052f576200052e620007a2565b5b6200053d87828801620004be565b945050602085015167ffffffffffffffff811115620005615762000560620007a2565b5b6200056f87828801620004be565b935050604085015167ffffffffffffffff811115620005935762000592620007a2565b5b620005a187828801620004be565b925050606085015167ffffffffffffffff811115620005c557620005c4620007a2565b5b620005d387828801620004be565b91505092959194509250565b6000620005ee60208362000687565b9150620005fb82620007bd565b602082019050919050565b600060208201905081810360008301526200062181620005df565b9050919050565b60006200063462000647565b905062000642828262000704565b919050565b6000604051905090565b600067ffffffffffffffff8211156200066f576200066e62000769565b5b6200067a82620007ac565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620006b85780820151818401526020810190506200069b565b83811115620006c8576000848401525b50505050565b60006002820490506001821680620006e757607f821691505b60208210811415620006fe57620006fd6200073a565b5b50919050565b6200070f82620007ac565b810181811067ffffffffffffffff8211171562000731576200073062000769565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6155a080620007f66000396000f3fe60806040526004361061027d5760003560e01c80636c0360eb1161014f578063ba4e5c49116100c1578063da3ef23f1161007a578063da3ef23f14610992578063e985e9c5146109bb578063eba830d8146109f8578063edec5f2714610a21578063f2c4ce1e14610a4a578063f2fde38b14610a735761027d565b8063ba4e5c491461086e578063ba7d2c76146108ab578063c6682862146108d6578063c87b56dd14610901578063d0eb26b01461093e578063d5abeb01146109675761027d565b806395d89b411161011357806395d89b41146107935780639c70b512146107be578063a0712d68146107e9578063a22cb46514610805578063a475b5dd1461082e578063b88d4fde146108455761027d565b80636c0360eb146106c057806370a08231146106eb578063715018a6146107285780637f00c7a61461073f5780638da5cb5b146107685761027d565b80632f745c59116101f357806344a0d68a116101ac57806344a0d68a1461059e5780634f6ccce7146105c7578063518302271461060457806355f804b31461062f5780635c975abb146106585780636352211e146106835761027d565b80632f745c591461048b5780633af32abf146104c85780633c952764146105055780633ccfd60b1461052e57806342842e0e14610538578063438b6300146105615761027d565b8063095ea7b311610245578063095ea7b31461037b57806313faede6146103a457806318160ddd146103cf57806318cae269146103fa578063239c70ae1461043757806323b872dd146104625761027d565b806301ffc9a71461028257806302329a29146102bf57806306fdde03146102e8578063081812fc14610313578063081c8c4414610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613dff565b610a9c565b6040516102b69190614569565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613dd2565b610b16565b005b3480156102f457600080fd5b506102fd610baf565b60405161030a9190614584565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190613ea2565b610c41565b60405161034791906144e0565b60405180910390f35b34801561035c57600080fd5b50610365610cc6565b6040516103729190614584565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613cc4565b610d54565b005b3480156103b057600080fd5b506103b9610e6c565b6040516103c69190614926565b60405180910390f35b3480156103db57600080fd5b506103e4610e72565b6040516103f19190614926565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190613b41565b610e7f565b60405161042e9190614926565b60405180910390f35b34801561044357600080fd5b5061044c610e97565b6040516104599190614926565b60405180910390f35b34801561046e57600080fd5b5061048960048036038101906104849190613bae565b610e9d565b005b34801561049757600080fd5b506104b260048036038101906104ad9190613cc4565b610efd565b6040516104bf9190614926565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190613b41565b610fa2565b6040516104fc9190614569565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190613dd2565b611051565b005b6105366110ea565b005b34801561054457600080fd5b5061055f600480360381019061055a9190613bae565b6111e6565b005b34801561056d57600080fd5b5061058860048036038101906105839190613b41565b611206565b6040516105959190614547565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190613ea2565b6112b4565b005b3480156105d357600080fd5b506105ee60048036038101906105e99190613ea2565b61133a565b6040516105fb9190614926565b60405180910390f35b34801561061057600080fd5b506106196113ab565b6040516106269190614569565b60405180910390f35b34801561063b57600080fd5b5061065660048036038101906106519190613e59565b6113be565b005b34801561066457600080fd5b5061066d611454565b60405161067a9190614569565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613ea2565b611467565b6040516106b791906144e0565b60405180910390f35b3480156106cc57600080fd5b506106d5611519565b6040516106e29190614584565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190613b41565b6115a7565b60405161071f9190614926565b60405180910390f35b34801561073457600080fd5b5061073d61165f565b005b34801561074b57600080fd5b5061076660048036038101906107619190613ea2565b6116e7565b005b34801561077457600080fd5b5061077d61176d565b60405161078a91906144e0565b60405180910390f35b34801561079f57600080fd5b506107a8611797565b6040516107b59190614584565b60405180910390f35b3480156107ca57600080fd5b506107d3611829565b6040516107e09190614569565b60405180910390f35b61080360048036038101906107fe9190613ea2565b61183c565b005b34801561081157600080fd5b5061082c60048036038101906108279190613c84565b611b85565b005b34801561083a57600080fd5b50610843611b9b565b005b34801561085157600080fd5b5061086c60048036038101906108679190613c01565b611c34565b005b34801561087a57600080fd5b5061089560048036038101906108909190613ea2565b611c96565b6040516108a291906144e0565b60405180910390f35b3480156108b757600080fd5b506108c0611cd5565b6040516108cd9190614926565b60405180910390f35b3480156108e257600080fd5b506108eb611cdb565b6040516108f89190614584565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190613ea2565b611d69565b6040516109359190614584565b60405180910390f35b34801561094a57600080fd5b5061096560048036038101906109609190613ea2565b611ec2565b005b34801561097357600080fd5b5061097c611f48565b6040516109899190614926565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613e59565b611f4e565b005b3480156109c757600080fd5b506109e260048036038101906109dd9190613b6e565b611fe4565b6040516109ef9190614569565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a9190613d51565b612078565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190613d04565b612236565b005b348015610a5657600080fd5b50610a716004803603810190610a6c9190613e59565b6122d6565b005b348015610a7f57600080fd5b50610a9a6004803603810190610a959190613b41565b61236c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0f5750610b0e82612464565b5b9050919050565b610b1e612546565b73ffffffffffffffffffffffffffffffffffffffff16610b3c61176d565b73ffffffffffffffffffffffffffffffffffffffff1614610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b89906147e6565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610bbe90614c2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90614c2f565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4c8261254e565b610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c82906147c6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610cd390614c2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610cff90614c2f565b8015610d4c5780601f10610d2157610100808354040283529160200191610d4c565b820191906000526020600020905b815481529060010190602001808311610d2f57829003601f168201915b505050505081565b6000610d5f82611467565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc790614866565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610def612546565b73ffffffffffffffffffffffffffffffffffffffff161480610e1e5750610e1d81610e18612546565b611fe4565b5b610e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5490614706565b60405180910390fd5b610e6783836125ba565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610eae610ea8612546565b82612673565b610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee4906148a6565b60405180910390fd5b610ef8838383612751565b505050565b6000610f08836115a7565b8210610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f40906145c6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015611046578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610fe257610fe1614dc8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561103357600191505061104c565b808061103e90614c92565b915050610faa565b50600090505b919050565b611059612546565b73ffffffffffffffffffffffffffffffffffffffff1661107761176d565b73ffffffffffffffffffffffffffffffffffffffff16146110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c4906147e6565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b6110f2612546565b73ffffffffffffffffffffffffffffffffffffffff1661111061176d565b73ffffffffffffffffffffffffffffffffffffffff1614611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d906147e6565b60405180910390fd5b600061117061176d565b73ffffffffffffffffffffffffffffffffffffffff1647604051611193906144cb565b60006040518083038185875af1925050503d80600081146111d0576040519150601f19603f3d011682016040523d82523d6000602084013e6111d5565b606091505b50509050806111e357600080fd5b50565b61120183838360405180602001604052806000815250611c34565b505050565b60606000611213836115a7565b905060008167ffffffffffffffff81111561123157611230614df7565b5b60405190808252806020026020018201604052801561125f5781602001602082028036833780820191505090505b50905060005b828110156112a9576112778582610efd565b82828151811061128a57611289614dc8565b5b60200260200101818152505080806112a190614c92565b915050611265565b508092505050919050565b6112bc612546565b73ffffffffffffffffffffffffffffffffffffffff166112da61176d565b73ffffffffffffffffffffffffffffffffffffffff1614611330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611327906147e6565b60405180910390fd5b80600e8190555050565b6000611344610e72565b8210611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c906148c6565b60405180910390fd5b6008828154811061139957611398614dc8565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6113c6612546565b73ffffffffffffffffffffffffffffffffffffffff166113e461176d565b73ffffffffffffffffffffffffffffffffffffffff161461143a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611431906147e6565b60405180910390fd5b80600b908051906020019061145092919061373a565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790614746565b60405180910390fd5b80915050919050565b600b805461152690614c2f565b80601f016020809104026020016040519081016040528092919081815260200182805461155290614c2f565b801561159f5780601f106115745761010080835404028352916020019161159f565b820191906000526020600020905b81548152906001019060200180831161158257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f90614726565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611667612546565b73ffffffffffffffffffffffffffffffffffffffff1661168561176d565b73ffffffffffffffffffffffffffffffffffffffff16146116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d2906147e6565b60405180910390fd5b6116e560006129b8565b565b6116ef612546565b73ffffffffffffffffffffffffffffffffffffffff1661170d61176d565b73ffffffffffffffffffffffffffffffffffffffff1614611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175a906147e6565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117a690614c2f565b80601f01602080910402602001604051908101604052809291908181526020018280546117d290614c2f565b801561181f5780601f106117f45761010080835404028352916020019161181f565b820191906000526020600020905b81548152906001019060200180831161180257829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff161561188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390614806565b60405180910390fd5b6000611896610e72565b9050600082116118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290614906565b60405180910390fd5b601054821115611920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191790614786565b60405180910390fd5b600f54828261192f9190614a64565b1115611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196790614766565b60405180910390fd5b61197861176d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611af55760011515601260029054906101000a900460ff1615151415611aa4576119cf33610fa2565b611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a05906148e6565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506011548382611a619190614a64565b1115611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990614666565b60405180910390fd5b505b81600e54611ab29190614aeb565b341015611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90614886565b60405180910390fd5b5b6000600190505b828111611b8057601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611b5390614c92565b9190505550611b6d338284611b689190614a64565b612a7e565b8080611b7890614c92565b915050611afc565b505050565b611b97611b90612546565b8383612a9c565b5050565b611ba3612546565b73ffffffffffffffffffffffffffffffffffffffff16611bc161176d565b73ffffffffffffffffffffffffffffffffffffffff1614611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906147e6565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b611c45611c3f612546565b83612673565b611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b906148a6565b60405180910390fd5b611c9084848484612c09565b50505050565b60138181548110611ca657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c8054611ce890614c2f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1490614c2f565b8015611d615780601f10611d3657610100808354040283529160200191611d61565b820191906000526020600020905b815481529060010190602001808311611d4457829003601f168201915b505050505081565b6060611d748261254e565b611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90614826565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611e6157600d8054611ddc90614c2f565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0890614c2f565b8015611e555780601f10611e2a57610100808354040283529160200191611e55565b820191906000526020600020905b815481529060010190602001808311611e3857829003601f168201915b50505050509050611ebd565b6000611e6b612c65565b90506000815111611e8b5760405180602001604052806000815250611eb9565b80611e9584612cf7565b600c604051602001611ea99392919061449a565b6040516020818303038152906040525b9150505b919050565b611eca612546565b73ffffffffffffffffffffffffffffffffffffffff16611ee861176d565b73ffffffffffffffffffffffffffffffffffffffff1614611f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f35906147e6565b60405180910390fd5b8060118190555050565b600f5481565b611f56612546565b73ffffffffffffffffffffffffffffffffffffffff16611f7461176d565b73ffffffffffffffffffffffffffffffffffffffff1614611fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc1906147e6565b60405180910390fd5b80600c9080519060200190611fe092919061373a565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612080612546565b73ffffffffffffffffffffffffffffffffffffffff1661209e61176d565b73ffffffffffffffffffffffffffffffffffffffff16146120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb906147e6565b60405180910390fd5b600084849050141561213b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612132906146e6565b60405180910390fd5b818190508484905014612183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217a90614846565b60405180910390fd5b6121cd828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612e58565b61220c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612203906145a6565b60405180910390fd5b83836015919061221d9291906137c0565b5081816016919061222f929190613860565b5050505050565b61223e612546565b73ffffffffffffffffffffffffffffffffffffffff1661225c61176d565b73ffffffffffffffffffffffffffffffffffffffff16146122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a9906147e6565b60405180910390fd5b601360006122c0919061390e565b8181601391906122d19291906137c0565b505050565b6122de612546565b73ffffffffffffffffffffffffffffffffffffffff166122fc61176d565b73ffffffffffffffffffffffffffffffffffffffff1614612352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612349906147e6565b60405180910390fd5b80600d908051906020019061236892919061373a565b5050565b612374612546565b73ffffffffffffffffffffffffffffffffffffffff1661239261176d565b73ffffffffffffffffffffffffffffffffffffffff16146123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df906147e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f90614606565b60405180910390fd5b612461816129b8565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061252f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061253f575061253e82612ebd565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661262d83611467565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061267e8261254e565b6126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b4906146c6565b60405180910390fd5b60006126c883611467565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061270a57506127098185611fe4565b5b8061274857508373ffffffffffffffffffffffffffffffffffffffff1661273084610c41565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661277182611467565b73ffffffffffffffffffffffffffffffffffffffff16146127c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127be90614626565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282e90614686565b60405180910390fd5b612842838383612f27565b61284d6000826125ba565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461289d9190614b45565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128f49190614a64565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129b383838361303b565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a98828260405180602001604052806000815250613040565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b02906146a6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612bfc9190614569565b60405180910390a3505050565b612c14848484612751565b612c208484848461309b565b612c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c56906145e6565b60405180910390fd5b50505050565b6060600b8054612c7490614c2f565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca090614c2f565b8015612ced5780601f10612cc257610100808354040283529160200191612ced565b820191906000526020600020905b815481529060010190602001808311612cd057829003601f168201915b5050505050905090565b60606000821415612d3f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e53565b600082905060005b60008214612d71578080612d5a90614c92565b915050600a82612d6a9190614aba565b9150612d47565b60008167ffffffffffffffff811115612d8d57612d8c614df7565b5b6040519080825280601f01601f191660200182016040528015612dbf5781602001600182028036833780820191505090505b5090505b60008514612e4c57600182612dd89190614b45565b9150600a85612de79190614cdb565b6030612df39190614a64565b60f81b818381518110612e0957612e08614dc8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e459190614aba565b9450612dc3565b8093505050505b919050565b60008082519050600080600090505b82811015612eae57848181518110612e8257612e81614dc8565b5b602002602001015161ffff1682612e999190614a64565b91508080612ea690614c92565b915050612e67565b50612710811492505050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612f32838383613232565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f7557612f7081613237565b612fb4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612fb357612fb28382613280565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ff757612ff2816133ed565b613036565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146130355761303482826134be565b5b5b505050565b505050565b61304a838361353d565b613057600084848461309b565b613096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308d906145e6565b60405180910390fd5b505050565b60006130bc8473ffffffffffffffffffffffffffffffffffffffff16613717565b15613225578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130e5612546565b8786866040518563ffffffff1660e01b815260040161310794939291906144fb565b602060405180830381600087803b15801561312157600080fd5b505af192505050801561315257506040513d601f19601f8201168201806040525081019061314f9190613e2c565b60015b6131d5573d8060008114613182576040519150601f19603f3d011682016040523d82523d6000602084013e613187565b606091505b506000815114156131cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c4906145e6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061322a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161328d846115a7565b6132979190614b45565b905060006007600084815260200190815260200160002054905081811461337c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506134019190614b45565b905060006009600084815260200190815260200160002054905060006008838154811061343157613430614dc8565b5b90600052602060002001549050806008838154811061345357613452614dc8565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134a2576134a1614d99565b5b6001900381819060005260206000200160009055905550505050565b60006134c9836115a7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a4906147a6565b60405180910390fd5b6135b68161254e565b156135f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ed90614646565b60405180910390fd5b61360260008383612f27565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136529190614a64565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46137136000838361303b565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461374690614c2f565b90600052602060002090601f01602090048101928261376857600085556137af565b82601f1061378157805160ff19168380011785556137af565b828001600101855582156137af579182015b828111156137ae578251825591602001919060010190613793565b5b5090506137bc919061392f565b5090565b82805482825590600052602060002090810192821561384f579160200282015b8281111561384e57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906137e0565b5b50905061385c919061392f565b5090565b82805482825590600052602060002090600f016010900481019282156138fd5791602002820160005b838211156138cd57833561ffff1683826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613889565b80156138fb5782816101000a81549061ffff02191690556002016020816001010492830192600103026138cd565b505b50905061390a919061392f565b5090565b508054600082559060005260206000209081019061392c919061392f565b50565b5b80821115613948576000816000905550600101613930565b5090565b600061395f61395a84614966565b614941565b90508281526020810184848401111561397b5761397a614e35565b5b613986848285614bed565b509392505050565b60006139a161399c84614997565b614941565b9050828152602081018484840111156139bd576139bc614e35565b5b6139c8848285614bed565b509392505050565b6000813590506139df8161550e565b92915050565b60008083601f8401126139fb576139fa614e2b565b5b8235905067ffffffffffffffff811115613a1857613a17614e26565b5b602083019150836020820283011115613a3457613a33614e30565b5b9250929050565b60008083601f840112613a5157613a50614e2b565b5b8235905067ffffffffffffffff811115613a6e57613a6d614e26565b5b602083019150836020820283011115613a8a57613a89614e30565b5b9250929050565b600081359050613aa081615525565b92915050565b600081359050613ab58161553c565b92915050565b600081519050613aca8161553c565b92915050565b600082601f830112613ae557613ae4614e2b565b5b8135613af584826020860161394c565b91505092915050565b600082601f830112613b1357613b12614e2b565b5b8135613b2384826020860161398e565b91505092915050565b600081359050613b3b81615553565b92915050565b600060208284031215613b5757613b56614e3f565b5b6000613b65848285016139d0565b91505092915050565b60008060408385031215613b8557613b84614e3f565b5b6000613b93858286016139d0565b9250506020613ba4858286016139d0565b9150509250929050565b600080600060608486031215613bc757613bc6614e3f565b5b6000613bd5868287016139d0565b9350506020613be6868287016139d0565b9250506040613bf786828701613b2c565b9150509250925092565b60008060008060808587031215613c1b57613c1a614e3f565b5b6000613c29878288016139d0565b9450506020613c3a878288016139d0565b9350506040613c4b87828801613b2c565b925050606085013567ffffffffffffffff811115613c6c57613c6b614e3a565b5b613c7887828801613ad0565b91505092959194509250565b60008060408385031215613c9b57613c9a614e3f565b5b6000613ca9858286016139d0565b9250506020613cba85828601613a91565b9150509250929050565b60008060408385031215613cdb57613cda614e3f565b5b6000613ce9858286016139d0565b9250506020613cfa85828601613b2c565b9150509250929050565b60008060208385031215613d1b57613d1a614e3f565b5b600083013567ffffffffffffffff811115613d3957613d38614e3a565b5b613d45858286016139e5565b92509250509250929050565b60008060008060408587031215613d6b57613d6a614e3f565b5b600085013567ffffffffffffffff811115613d8957613d88614e3a565b5b613d95878288016139e5565b9450945050602085013567ffffffffffffffff811115613db857613db7614e3a565b5b613dc487828801613a3b565b925092505092959194509250565b600060208284031215613de857613de7614e3f565b5b6000613df684828501613a91565b91505092915050565b600060208284031215613e1557613e14614e3f565b5b6000613e2384828501613aa6565b91505092915050565b600060208284031215613e4257613e41614e3f565b5b6000613e5084828501613abb565b91505092915050565b600060208284031215613e6f57613e6e614e3f565b5b600082013567ffffffffffffffff811115613e8d57613e8c614e3a565b5b613e9984828501613afe565b91505092915050565b600060208284031215613eb857613eb7614e3f565b5b6000613ec684828501613b2c565b91505092915050565b6000613edb838361447c565b60208301905092915050565b613ef081614b79565b82525050565b6000613f01826149ed565b613f0b8185614a1b565b9350613f16836149c8565b8060005b83811015613f47578151613f2e8882613ecf565b9750613f3983614a0e565b925050600181019050613f1a565b5085935050505092915050565b613f5d81614b8b565b82525050565b6000613f6e826149f8565b613f788185614a2c565b9350613f88818560208601614bfc565b613f9181614e44565b840191505092915050565b6000613fa782614a03565b613fb18185614a48565b9350613fc1818560208601614bfc565b613fca81614e44565b840191505092915050565b6000613fe082614a03565b613fea8185614a59565b9350613ffa818560208601614bfc565b80840191505092915050565b6000815461401381614c2f565b61401d8186614a59565b9450600182166000811461403857600181146140495761407c565b60ff1983168652818601935061407c565b614052856149d8565b60005b8381101561407457815481890152600182019150602081019050614055565b838801955050505b50505092915050565b6000614092600e83614a48565b915061409d82614e55565b602082019050919050565b60006140b5602b83614a48565b91506140c082614e7e565b604082019050919050565b60006140d8603283614a48565b91506140e382614ecd565b604082019050919050565b60006140fb602683614a48565b915061410682614f1c565b604082019050919050565b600061411e602583614a48565b915061412982614f6b565b604082019050919050565b6000614141601c83614a48565b915061414c82614fba565b602082019050919050565b6000614164601c83614a48565b915061416f82614fe3565b602082019050919050565b6000614187602483614a48565b91506141928261500c565b604082019050919050565b60006141aa601983614a48565b91506141b58261505b565b602082019050919050565b60006141cd602c83614a48565b91506141d882615084565b604082019050919050565b60006141f0600c83614a48565b91506141fb826150d3565b602082019050919050565b6000614213603883614a48565b915061421e826150fc565b604082019050919050565b6000614236602a83614a48565b91506142418261514b565b604082019050919050565b6000614259602983614a48565b91506142648261519a565b604082019050919050565b600061427c601683614a48565b9150614287826151e9565b602082019050919050565b600061429f602483614a48565b91506142aa82615212565b604082019050919050565b60006142c2602083614a48565b91506142cd82615261565b602082019050919050565b60006142e5602c83614a48565b91506142f08261528a565b604082019050919050565b6000614308602083614a48565b9150614313826152d9565b602082019050919050565b600061432b601683614a48565b915061433682615302565b602082019050919050565b600061434e602f83614a48565b91506143598261532b565b604082019050919050565b6000614371601383614a48565b915061437c8261537a565b602082019050919050565b6000614394602183614a48565b915061439f826153a3565b604082019050919050565b60006143b7600083614a3d565b91506143c2826153f2565b600082019050919050565b60006143da601283614a48565b91506143e5826153f5565b602082019050919050565b60006143fd603183614a48565b91506144088261541e565b604082019050919050565b6000614420602c83614a48565b915061442b8261546d565b604082019050919050565b6000614443601783614a48565b915061444e826154bc565b602082019050919050565b6000614466601b83614a48565b9150614471826154e5565b602082019050919050565b61448581614be3565b82525050565b61449481614be3565b82525050565b60006144a68286613fd5565b91506144b28285613fd5565b91506144be8284614006565b9150819050949350505050565b60006144d6826143aa565b9150819050919050565b60006020820190506144f56000830184613ee7565b92915050565b60006080820190506145106000830187613ee7565b61451d6020830186613ee7565b61452a604083018561448b565b818103606083015261453c8184613f63565b905095945050505050565b600060208201905081810360008301526145618184613ef6565b905092915050565b600060208201905061457e6000830184613f54565b92915050565b6000602082019050818103600083015261459e8184613f9c565b905092915050565b600060208201905081810360008301526145bf81614085565b9050919050565b600060208201905081810360008301526145df816140a8565b9050919050565b600060208201905081810360008301526145ff816140cb565b9050919050565b6000602082019050818103600083015261461f816140ee565b9050919050565b6000602082019050818103600083015261463f81614111565b9050919050565b6000602082019050818103600083015261465f81614134565b9050919050565b6000602082019050818103600083015261467f81614157565b9050919050565b6000602082019050818103600083015261469f8161417a565b9050919050565b600060208201905081810360008301526146bf8161419d565b9050919050565b600060208201905081810360008301526146df816141c0565b9050919050565b600060208201905081810360008301526146ff816141e3565b9050919050565b6000602082019050818103600083015261471f81614206565b9050919050565b6000602082019050818103600083015261473f81614229565b9050919050565b6000602082019050818103600083015261475f8161424c565b9050919050565b6000602082019050818103600083015261477f8161426f565b9050919050565b6000602082019050818103600083015261479f81614292565b9050919050565b600060208201905081810360008301526147bf816142b5565b9050919050565b600060208201905081810360008301526147df816142d8565b9050919050565b600060208201905081810360008301526147ff816142fb565b9050919050565b6000602082019050818103600083015261481f8161431e565b9050919050565b6000602082019050818103600083015261483f81614341565b9050919050565b6000602082019050818103600083015261485f81614364565b9050919050565b6000602082019050818103600083015261487f81614387565b9050919050565b6000602082019050818103600083015261489f816143cd565b9050919050565b600060208201905081810360008301526148bf816143f0565b9050919050565b600060208201905081810360008301526148df81614413565b9050919050565b600060208201905081810360008301526148ff81614436565b9050919050565b6000602082019050818103600083015261491f81614459565b9050919050565b600060208201905061493b600083018461448b565b92915050565b600061494b61495c565b90506149578282614c61565b919050565b6000604051905090565b600067ffffffffffffffff82111561498157614980614df7565b5b61498a82614e44565b9050602081019050919050565b600067ffffffffffffffff8211156149b2576149b1614df7565b5b6149bb82614e44565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614a6f82614be3565b9150614a7a83614be3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614aaf57614aae614d0c565b5b828201905092915050565b6000614ac582614be3565b9150614ad083614be3565b925082614ae057614adf614d3b565b5b828204905092915050565b6000614af682614be3565b9150614b0183614be3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b3a57614b39614d0c565b5b828202905092915050565b6000614b5082614be3565b9150614b5b83614be3565b925082821015614b6e57614b6d614d0c565b5b828203905092915050565b6000614b8482614bc3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614c1a578082015181840152602081019050614bff565b83811115614c29576000848401525b50505050565b60006002820490506001821680614c4757607f821691505b60208210811415614c5b57614c5a614d6a565b5b50919050565b614c6a82614e44565b810181811067ffffffffffffffff82111715614c8957614c88614df7565b5b80604052505050565b6000614c9d82614be3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cd057614ccf614d0c565b5b600182019050919050565b6000614ce682614be3565b9150614cf183614be3565b925082614d0157614d00614d3b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f696e76616c696420736861726573000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f656d707479207061796565730000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f77726f6e67207061796565206e756d6265727300000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b61551781614b79565b811461552257600080fd5b50565b61552e81614b8b565b811461553957600080fd5b50565b61554581614b97565b811461555057600080fd5b50565b61555c81614be3565b811461556757600080fd5b5056fea2646970667358221220290361cead88d10f8f45cec7b74e89915c1ee4fa8a29b2b8596393bf9454833364736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000b41726d794a61636b616c730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004414a4c53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d61693355437a506965395542507752696b587069454550686a783937346f416174755a755952597772664d722f000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061027d5760003560e01c80636c0360eb1161014f578063ba4e5c49116100c1578063da3ef23f1161007a578063da3ef23f14610992578063e985e9c5146109bb578063eba830d8146109f8578063edec5f2714610a21578063f2c4ce1e14610a4a578063f2fde38b14610a735761027d565b8063ba4e5c491461086e578063ba7d2c76146108ab578063c6682862146108d6578063c87b56dd14610901578063d0eb26b01461093e578063d5abeb01146109675761027d565b806395d89b411161011357806395d89b41146107935780639c70b512146107be578063a0712d68146107e9578063a22cb46514610805578063a475b5dd1461082e578063b88d4fde146108455761027d565b80636c0360eb146106c057806370a08231146106eb578063715018a6146107285780637f00c7a61461073f5780638da5cb5b146107685761027d565b80632f745c59116101f357806344a0d68a116101ac57806344a0d68a1461059e5780634f6ccce7146105c7578063518302271461060457806355f804b31461062f5780635c975abb146106585780636352211e146106835761027d565b80632f745c591461048b5780633af32abf146104c85780633c952764146105055780633ccfd60b1461052e57806342842e0e14610538578063438b6300146105615761027d565b8063095ea7b311610245578063095ea7b31461037b57806313faede6146103a457806318160ddd146103cf57806318cae269146103fa578063239c70ae1461043757806323b872dd146104625761027d565b806301ffc9a71461028257806302329a29146102bf57806306fdde03146102e8578063081812fc14610313578063081c8c4414610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613dff565b610a9c565b6040516102b69190614569565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613dd2565b610b16565b005b3480156102f457600080fd5b506102fd610baf565b60405161030a9190614584565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190613ea2565b610c41565b60405161034791906144e0565b60405180910390f35b34801561035c57600080fd5b50610365610cc6565b6040516103729190614584565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613cc4565b610d54565b005b3480156103b057600080fd5b506103b9610e6c565b6040516103c69190614926565b60405180910390f35b3480156103db57600080fd5b506103e4610e72565b6040516103f19190614926565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190613b41565b610e7f565b60405161042e9190614926565b60405180910390f35b34801561044357600080fd5b5061044c610e97565b6040516104599190614926565b60405180910390f35b34801561046e57600080fd5b5061048960048036038101906104849190613bae565b610e9d565b005b34801561049757600080fd5b506104b260048036038101906104ad9190613cc4565b610efd565b6040516104bf9190614926565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190613b41565b610fa2565b6040516104fc9190614569565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190613dd2565b611051565b005b6105366110ea565b005b34801561054457600080fd5b5061055f600480360381019061055a9190613bae565b6111e6565b005b34801561056d57600080fd5b5061058860048036038101906105839190613b41565b611206565b6040516105959190614547565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190613ea2565b6112b4565b005b3480156105d357600080fd5b506105ee60048036038101906105e99190613ea2565b61133a565b6040516105fb9190614926565b60405180910390f35b34801561061057600080fd5b506106196113ab565b6040516106269190614569565b60405180910390f35b34801561063b57600080fd5b5061065660048036038101906106519190613e59565b6113be565b005b34801561066457600080fd5b5061066d611454565b60405161067a9190614569565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613ea2565b611467565b6040516106b791906144e0565b60405180910390f35b3480156106cc57600080fd5b506106d5611519565b6040516106e29190614584565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190613b41565b6115a7565b60405161071f9190614926565b60405180910390f35b34801561073457600080fd5b5061073d61165f565b005b34801561074b57600080fd5b5061076660048036038101906107619190613ea2565b6116e7565b005b34801561077457600080fd5b5061077d61176d565b60405161078a91906144e0565b60405180910390f35b34801561079f57600080fd5b506107a8611797565b6040516107b59190614584565b60405180910390f35b3480156107ca57600080fd5b506107d3611829565b6040516107e09190614569565b60405180910390f35b61080360048036038101906107fe9190613ea2565b61183c565b005b34801561081157600080fd5b5061082c60048036038101906108279190613c84565b611b85565b005b34801561083a57600080fd5b50610843611b9b565b005b34801561085157600080fd5b5061086c60048036038101906108679190613c01565b611c34565b005b34801561087a57600080fd5b5061089560048036038101906108909190613ea2565b611c96565b6040516108a291906144e0565b60405180910390f35b3480156108b757600080fd5b506108c0611cd5565b6040516108cd9190614926565b60405180910390f35b3480156108e257600080fd5b506108eb611cdb565b6040516108f89190614584565b60405180910390f35b34801561090d57600080fd5b5061092860048036038101906109239190613ea2565b611d69565b6040516109359190614584565b60405180910390f35b34801561094a57600080fd5b5061096560048036038101906109609190613ea2565b611ec2565b005b34801561097357600080fd5b5061097c611f48565b6040516109899190614926565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613e59565b611f4e565b005b3480156109c757600080fd5b506109e260048036038101906109dd9190613b6e565b611fe4565b6040516109ef9190614569565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a9190613d51565b612078565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190613d04565b612236565b005b348015610a5657600080fd5b50610a716004803603810190610a6c9190613e59565b6122d6565b005b348015610a7f57600080fd5b50610a9a6004803603810190610a959190613b41565b61236c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0f5750610b0e82612464565b5b9050919050565b610b1e612546565b73ffffffffffffffffffffffffffffffffffffffff16610b3c61176d565b73ffffffffffffffffffffffffffffffffffffffff1614610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b89906147e6565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610bbe90614c2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90614c2f565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4c8261254e565b610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c82906147c6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610cd390614c2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610cff90614c2f565b8015610d4c5780601f10610d2157610100808354040283529160200191610d4c565b820191906000526020600020905b815481529060010190602001808311610d2f57829003601f168201915b505050505081565b6000610d5f82611467565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc790614866565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610def612546565b73ffffffffffffffffffffffffffffffffffffffff161480610e1e5750610e1d81610e18612546565b611fe4565b5b610e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5490614706565b60405180910390fd5b610e6783836125ba565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610eae610ea8612546565b82612673565b610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee4906148a6565b60405180910390fd5b610ef8838383612751565b505050565b6000610f08836115a7565b8210610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f40906145c6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015611046578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610fe257610fe1614dc8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561103357600191505061104c565b808061103e90614c92565b915050610faa565b50600090505b919050565b611059612546565b73ffffffffffffffffffffffffffffffffffffffff1661107761176d565b73ffffffffffffffffffffffffffffffffffffffff16146110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c4906147e6565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b6110f2612546565b73ffffffffffffffffffffffffffffffffffffffff1661111061176d565b73ffffffffffffffffffffffffffffffffffffffff1614611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d906147e6565b60405180910390fd5b600061117061176d565b73ffffffffffffffffffffffffffffffffffffffff1647604051611193906144cb565b60006040518083038185875af1925050503d80600081146111d0576040519150601f19603f3d011682016040523d82523d6000602084013e6111d5565b606091505b50509050806111e357600080fd5b50565b61120183838360405180602001604052806000815250611c34565b505050565b60606000611213836115a7565b905060008167ffffffffffffffff81111561123157611230614df7565b5b60405190808252806020026020018201604052801561125f5781602001602082028036833780820191505090505b50905060005b828110156112a9576112778582610efd565b82828151811061128a57611289614dc8565b5b60200260200101818152505080806112a190614c92565b915050611265565b508092505050919050565b6112bc612546565b73ffffffffffffffffffffffffffffffffffffffff166112da61176d565b73ffffffffffffffffffffffffffffffffffffffff1614611330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611327906147e6565b60405180910390fd5b80600e8190555050565b6000611344610e72565b8210611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c906148c6565b60405180910390fd5b6008828154811061139957611398614dc8565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6113c6612546565b73ffffffffffffffffffffffffffffffffffffffff166113e461176d565b73ffffffffffffffffffffffffffffffffffffffff161461143a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611431906147e6565b60405180910390fd5b80600b908051906020019061145092919061373a565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790614746565b60405180910390fd5b80915050919050565b600b805461152690614c2f565b80601f016020809104026020016040519081016040528092919081815260200182805461155290614c2f565b801561159f5780601f106115745761010080835404028352916020019161159f565b820191906000526020600020905b81548152906001019060200180831161158257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f90614726565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611667612546565b73ffffffffffffffffffffffffffffffffffffffff1661168561176d565b73ffffffffffffffffffffffffffffffffffffffff16146116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d2906147e6565b60405180910390fd5b6116e560006129b8565b565b6116ef612546565b73ffffffffffffffffffffffffffffffffffffffff1661170d61176d565b73ffffffffffffffffffffffffffffffffffffffff1614611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175a906147e6565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117a690614c2f565b80601f01602080910402602001604051908101604052809291908181526020018280546117d290614c2f565b801561181f5780601f106117f45761010080835404028352916020019161181f565b820191906000526020600020905b81548152906001019060200180831161180257829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff161561188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390614806565b60405180910390fd5b6000611896610e72565b9050600082116118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290614906565b60405180910390fd5b601054821115611920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191790614786565b60405180910390fd5b600f54828261192f9190614a64565b1115611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196790614766565b60405180910390fd5b61197861176d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611af55760011515601260029054906101000a900460ff1615151415611aa4576119cf33610fa2565b611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a05906148e6565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506011548382611a619190614a64565b1115611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990614666565b60405180910390fd5b505b81600e54611ab29190614aeb565b341015611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90614886565b60405180910390fd5b5b6000600190505b828111611b8057601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611b5390614c92565b9190505550611b6d338284611b689190614a64565b612a7e565b8080611b7890614c92565b915050611afc565b505050565b611b97611b90612546565b8383612a9c565b5050565b611ba3612546565b73ffffffffffffffffffffffffffffffffffffffff16611bc161176d565b73ffffffffffffffffffffffffffffffffffffffff1614611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906147e6565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b611c45611c3f612546565b83612673565b611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b906148a6565b60405180910390fd5b611c9084848484612c09565b50505050565b60138181548110611ca657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c8054611ce890614c2f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1490614c2f565b8015611d615780601f10611d3657610100808354040283529160200191611d61565b820191906000526020600020905b815481529060010190602001808311611d4457829003601f168201915b505050505081565b6060611d748261254e565b611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90614826565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611e6157600d8054611ddc90614c2f565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0890614c2f565b8015611e555780601f10611e2a57610100808354040283529160200191611e55565b820191906000526020600020905b815481529060010190602001808311611e3857829003601f168201915b50505050509050611ebd565b6000611e6b612c65565b90506000815111611e8b5760405180602001604052806000815250611eb9565b80611e9584612cf7565b600c604051602001611ea99392919061449a565b6040516020818303038152906040525b9150505b919050565b611eca612546565b73ffffffffffffffffffffffffffffffffffffffff16611ee861176d565b73ffffffffffffffffffffffffffffffffffffffff1614611f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f35906147e6565b60405180910390fd5b8060118190555050565b600f5481565b611f56612546565b73ffffffffffffffffffffffffffffffffffffffff16611f7461176d565b73ffffffffffffffffffffffffffffffffffffffff1614611fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc1906147e6565b60405180910390fd5b80600c9080519060200190611fe092919061373a565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612080612546565b73ffffffffffffffffffffffffffffffffffffffff1661209e61176d565b73ffffffffffffffffffffffffffffffffffffffff16146120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb906147e6565b60405180910390fd5b600084849050141561213b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612132906146e6565b60405180910390fd5b818190508484905014612183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217a90614846565b60405180910390fd5b6121cd828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612e58565b61220c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612203906145a6565b60405180910390fd5b83836015919061221d9291906137c0565b5081816016919061222f929190613860565b5050505050565b61223e612546565b73ffffffffffffffffffffffffffffffffffffffff1661225c61176d565b73ffffffffffffffffffffffffffffffffffffffff16146122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a9906147e6565b60405180910390fd5b601360006122c0919061390e565b8181601391906122d19291906137c0565b505050565b6122de612546565b73ffffffffffffffffffffffffffffffffffffffff166122fc61176d565b73ffffffffffffffffffffffffffffffffffffffff1614612352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612349906147e6565b60405180910390fd5b80600d908051906020019061236892919061373a565b5050565b612374612546565b73ffffffffffffffffffffffffffffffffffffffff1661239261176d565b73ffffffffffffffffffffffffffffffffffffffff16146123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df906147e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f90614606565b60405180910390fd5b612461816129b8565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061252f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061253f575061253e82612ebd565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661262d83611467565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061267e8261254e565b6126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b4906146c6565b60405180910390fd5b60006126c883611467565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061270a57506127098185611fe4565b5b8061274857508373ffffffffffffffffffffffffffffffffffffffff1661273084610c41565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661277182611467565b73ffffffffffffffffffffffffffffffffffffffff16146127c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127be90614626565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282e90614686565b60405180910390fd5b612842838383612f27565b61284d6000826125ba565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461289d9190614b45565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128f49190614a64565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129b383838361303b565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a98828260405180602001604052806000815250613040565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b02906146a6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612bfc9190614569565b60405180910390a3505050565b612c14848484612751565b612c208484848461309b565b612c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c56906145e6565b60405180910390fd5b50505050565b6060600b8054612c7490614c2f565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca090614c2f565b8015612ced5780601f10612cc257610100808354040283529160200191612ced565b820191906000526020600020905b815481529060010190602001808311612cd057829003601f168201915b5050505050905090565b60606000821415612d3f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e53565b600082905060005b60008214612d71578080612d5a90614c92565b915050600a82612d6a9190614aba565b9150612d47565b60008167ffffffffffffffff811115612d8d57612d8c614df7565b5b6040519080825280601f01601f191660200182016040528015612dbf5781602001600182028036833780820191505090505b5090505b60008514612e4c57600182612dd89190614b45565b9150600a85612de79190614cdb565b6030612df39190614a64565b60f81b818381518110612e0957612e08614dc8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e459190614aba565b9450612dc3565b8093505050505b919050565b60008082519050600080600090505b82811015612eae57848181518110612e8257612e81614dc8565b5b602002602001015161ffff1682612e999190614a64565b91508080612ea690614c92565b915050612e67565b50612710811492505050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612f32838383613232565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f7557612f7081613237565b612fb4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612fb357612fb28382613280565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ff757612ff2816133ed565b613036565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146130355761303482826134be565b5b5b505050565b505050565b61304a838361353d565b613057600084848461309b565b613096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308d906145e6565b60405180910390fd5b505050565b60006130bc8473ffffffffffffffffffffffffffffffffffffffff16613717565b15613225578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130e5612546565b8786866040518563ffffffff1660e01b815260040161310794939291906144fb565b602060405180830381600087803b15801561312157600080fd5b505af192505050801561315257506040513d601f19601f8201168201806040525081019061314f9190613e2c565b60015b6131d5573d8060008114613182576040519150601f19603f3d011682016040523d82523d6000602084013e613187565b606091505b506000815114156131cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c4906145e6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061322a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161328d846115a7565b6132979190614b45565b905060006007600084815260200190815260200160002054905081811461337c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506134019190614b45565b905060006009600084815260200190815260200160002054905060006008838154811061343157613430614dc8565b5b90600052602060002001549050806008838154811061345357613452614dc8565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134a2576134a1614d99565b5b6001900381819060005260206000200160009055905550505050565b60006134c9836115a7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a4906147a6565b60405180910390fd5b6135b68161254e565b156135f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ed90614646565b60405180910390fd5b61360260008383612f27565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136529190614a64565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46137136000838361303b565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461374690614c2f565b90600052602060002090601f01602090048101928261376857600085556137af565b82601f1061378157805160ff19168380011785556137af565b828001600101855582156137af579182015b828111156137ae578251825591602001919060010190613793565b5b5090506137bc919061392f565b5090565b82805482825590600052602060002090810192821561384f579160200282015b8281111561384e57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906137e0565b5b50905061385c919061392f565b5090565b82805482825590600052602060002090600f016010900481019282156138fd5791602002820160005b838211156138cd57833561ffff1683826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613889565b80156138fb5782816101000a81549061ffff02191690556002016020816001010492830192600103026138cd565b505b50905061390a919061392f565b5090565b508054600082559060005260206000209081019061392c919061392f565b50565b5b80821115613948576000816000905550600101613930565b5090565b600061395f61395a84614966565b614941565b90508281526020810184848401111561397b5761397a614e35565b5b613986848285614bed565b509392505050565b60006139a161399c84614997565b614941565b9050828152602081018484840111156139bd576139bc614e35565b5b6139c8848285614bed565b509392505050565b6000813590506139df8161550e565b92915050565b60008083601f8401126139fb576139fa614e2b565b5b8235905067ffffffffffffffff811115613a1857613a17614e26565b5b602083019150836020820283011115613a3457613a33614e30565b5b9250929050565b60008083601f840112613a5157613a50614e2b565b5b8235905067ffffffffffffffff811115613a6e57613a6d614e26565b5b602083019150836020820283011115613a8a57613a89614e30565b5b9250929050565b600081359050613aa081615525565b92915050565b600081359050613ab58161553c565b92915050565b600081519050613aca8161553c565b92915050565b600082601f830112613ae557613ae4614e2b565b5b8135613af584826020860161394c565b91505092915050565b600082601f830112613b1357613b12614e2b565b5b8135613b2384826020860161398e565b91505092915050565b600081359050613b3b81615553565b92915050565b600060208284031215613b5757613b56614e3f565b5b6000613b65848285016139d0565b91505092915050565b60008060408385031215613b8557613b84614e3f565b5b6000613b93858286016139d0565b9250506020613ba4858286016139d0565b9150509250929050565b600080600060608486031215613bc757613bc6614e3f565b5b6000613bd5868287016139d0565b9350506020613be6868287016139d0565b9250506040613bf786828701613b2c565b9150509250925092565b60008060008060808587031215613c1b57613c1a614e3f565b5b6000613c29878288016139d0565b9450506020613c3a878288016139d0565b9350506040613c4b87828801613b2c565b925050606085013567ffffffffffffffff811115613c6c57613c6b614e3a565b5b613c7887828801613ad0565b91505092959194509250565b60008060408385031215613c9b57613c9a614e3f565b5b6000613ca9858286016139d0565b9250506020613cba85828601613a91565b9150509250929050565b60008060408385031215613cdb57613cda614e3f565b5b6000613ce9858286016139d0565b9250506020613cfa85828601613b2c565b9150509250929050565b60008060208385031215613d1b57613d1a614e3f565b5b600083013567ffffffffffffffff811115613d3957613d38614e3a565b5b613d45858286016139e5565b92509250509250929050565b60008060008060408587031215613d6b57613d6a614e3f565b5b600085013567ffffffffffffffff811115613d8957613d88614e3a565b5b613d95878288016139e5565b9450945050602085013567ffffffffffffffff811115613db857613db7614e3a565b5b613dc487828801613a3b565b925092505092959194509250565b600060208284031215613de857613de7614e3f565b5b6000613df684828501613a91565b91505092915050565b600060208284031215613e1557613e14614e3f565b5b6000613e2384828501613aa6565b91505092915050565b600060208284031215613e4257613e41614e3f565b5b6000613e5084828501613abb565b91505092915050565b600060208284031215613e6f57613e6e614e3f565b5b600082013567ffffffffffffffff811115613e8d57613e8c614e3a565b5b613e9984828501613afe565b91505092915050565b600060208284031215613eb857613eb7614e3f565b5b6000613ec684828501613b2c565b91505092915050565b6000613edb838361447c565b60208301905092915050565b613ef081614b79565b82525050565b6000613f01826149ed565b613f0b8185614a1b565b9350613f16836149c8565b8060005b83811015613f47578151613f2e8882613ecf565b9750613f3983614a0e565b925050600181019050613f1a565b5085935050505092915050565b613f5d81614b8b565b82525050565b6000613f6e826149f8565b613f788185614a2c565b9350613f88818560208601614bfc565b613f9181614e44565b840191505092915050565b6000613fa782614a03565b613fb18185614a48565b9350613fc1818560208601614bfc565b613fca81614e44565b840191505092915050565b6000613fe082614a03565b613fea8185614a59565b9350613ffa818560208601614bfc565b80840191505092915050565b6000815461401381614c2f565b61401d8186614a59565b9450600182166000811461403857600181146140495761407c565b60ff1983168652818601935061407c565b614052856149d8565b60005b8381101561407457815481890152600182019150602081019050614055565b838801955050505b50505092915050565b6000614092600e83614a48565b915061409d82614e55565b602082019050919050565b60006140b5602b83614a48565b91506140c082614e7e565b604082019050919050565b60006140d8603283614a48565b91506140e382614ecd565b604082019050919050565b60006140fb602683614a48565b915061410682614f1c565b604082019050919050565b600061411e602583614a48565b915061412982614f6b565b604082019050919050565b6000614141601c83614a48565b915061414c82614fba565b602082019050919050565b6000614164601c83614a48565b915061416f82614fe3565b602082019050919050565b6000614187602483614a48565b91506141928261500c565b604082019050919050565b60006141aa601983614a48565b91506141b58261505b565b602082019050919050565b60006141cd602c83614a48565b91506141d882615084565b604082019050919050565b60006141f0600c83614a48565b91506141fb826150d3565b602082019050919050565b6000614213603883614a48565b915061421e826150fc565b604082019050919050565b6000614236602a83614a48565b91506142418261514b565b604082019050919050565b6000614259602983614a48565b91506142648261519a565b604082019050919050565b600061427c601683614a48565b9150614287826151e9565b602082019050919050565b600061429f602483614a48565b91506142aa82615212565b604082019050919050565b60006142c2602083614a48565b91506142cd82615261565b602082019050919050565b60006142e5602c83614a48565b91506142f08261528a565b604082019050919050565b6000614308602083614a48565b9150614313826152d9565b602082019050919050565b600061432b601683614a48565b915061433682615302565b602082019050919050565b600061434e602f83614a48565b91506143598261532b565b604082019050919050565b6000614371601383614a48565b915061437c8261537a565b602082019050919050565b6000614394602183614a48565b915061439f826153a3565b604082019050919050565b60006143b7600083614a3d565b91506143c2826153f2565b600082019050919050565b60006143da601283614a48565b91506143e5826153f5565b602082019050919050565b60006143fd603183614a48565b91506144088261541e565b604082019050919050565b6000614420602c83614a48565b915061442b8261546d565b604082019050919050565b6000614443601783614a48565b915061444e826154bc565b602082019050919050565b6000614466601b83614a48565b9150614471826154e5565b602082019050919050565b61448581614be3565b82525050565b61449481614be3565b82525050565b60006144a68286613fd5565b91506144b28285613fd5565b91506144be8284614006565b9150819050949350505050565b60006144d6826143aa565b9150819050919050565b60006020820190506144f56000830184613ee7565b92915050565b60006080820190506145106000830187613ee7565b61451d6020830186613ee7565b61452a604083018561448b565b818103606083015261453c8184613f63565b905095945050505050565b600060208201905081810360008301526145618184613ef6565b905092915050565b600060208201905061457e6000830184613f54565b92915050565b6000602082019050818103600083015261459e8184613f9c565b905092915050565b600060208201905081810360008301526145bf81614085565b9050919050565b600060208201905081810360008301526145df816140a8565b9050919050565b600060208201905081810360008301526145ff816140cb565b9050919050565b6000602082019050818103600083015261461f816140ee565b9050919050565b6000602082019050818103600083015261463f81614111565b9050919050565b6000602082019050818103600083015261465f81614134565b9050919050565b6000602082019050818103600083015261467f81614157565b9050919050565b6000602082019050818103600083015261469f8161417a565b9050919050565b600060208201905081810360008301526146bf8161419d565b9050919050565b600060208201905081810360008301526146df816141c0565b9050919050565b600060208201905081810360008301526146ff816141e3565b9050919050565b6000602082019050818103600083015261471f81614206565b9050919050565b6000602082019050818103600083015261473f81614229565b9050919050565b6000602082019050818103600083015261475f8161424c565b9050919050565b6000602082019050818103600083015261477f8161426f565b9050919050565b6000602082019050818103600083015261479f81614292565b9050919050565b600060208201905081810360008301526147bf816142b5565b9050919050565b600060208201905081810360008301526147df816142d8565b9050919050565b600060208201905081810360008301526147ff816142fb565b9050919050565b6000602082019050818103600083015261481f8161431e565b9050919050565b6000602082019050818103600083015261483f81614341565b9050919050565b6000602082019050818103600083015261485f81614364565b9050919050565b6000602082019050818103600083015261487f81614387565b9050919050565b6000602082019050818103600083015261489f816143cd565b9050919050565b600060208201905081810360008301526148bf816143f0565b9050919050565b600060208201905081810360008301526148df81614413565b9050919050565b600060208201905081810360008301526148ff81614436565b9050919050565b6000602082019050818103600083015261491f81614459565b9050919050565b600060208201905061493b600083018461448b565b92915050565b600061494b61495c565b90506149578282614c61565b919050565b6000604051905090565b600067ffffffffffffffff82111561498157614980614df7565b5b61498a82614e44565b9050602081019050919050565b600067ffffffffffffffff8211156149b2576149b1614df7565b5b6149bb82614e44565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614a6f82614be3565b9150614a7a83614be3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614aaf57614aae614d0c565b5b828201905092915050565b6000614ac582614be3565b9150614ad083614be3565b925082614ae057614adf614d3b565b5b828204905092915050565b6000614af682614be3565b9150614b0183614be3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b3a57614b39614d0c565b5b828202905092915050565b6000614b5082614be3565b9150614b5b83614be3565b925082821015614b6e57614b6d614d0c565b5b828203905092915050565b6000614b8482614bc3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614c1a578082015181840152602081019050614bff565b83811115614c29576000848401525b50505050565b60006002820490506001821680614c4757607f821691505b60208210811415614c5b57614c5a614d6a565b5b50919050565b614c6a82614e44565b810181811067ffffffffffffffff82111715614c8957614c88614df7565b5b80604052505050565b6000614c9d82614be3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cd057614ccf614d0c565b5b600182019050919050565b6000614ce682614be3565b9150614cf183614be3565b925082614d0157614d00614d3b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f696e76616c696420736861726573000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f656d707479207061796565730000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f77726f6e67207061796565206e756d6265727300000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b61551781614b79565b811461552257600080fd5b50565b61552e81614b8b565b811461553957600080fd5b50565b61554581614b97565b811461555057600080fd5b50565b61555c81614be3565b811461556757600080fd5b5056fea2646970667358221220290361cead88d10f8f45cec7b74e89915c1ee4fa8a29b2b8596393bf9454833364736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000b41726d794a61636b616c730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004414a4c53000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d61693355437a506965395542507752696b587069454550686a783937346f416174755a755952597772664d722f000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): ArmyJackals
Arg [1] : _symbol (string): AJLS
Arg [2] : _initBaseURI (string): ipfs://Qmai3UCzPie9UBPwRikXpiEEPhjx974oAatuZuYRYwrfMr/
Arg [3] : _initNotRevealedUri (string):
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [5] : 41726d794a61636b616c73000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 414a4c5300000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d61693355437a506965395542507752696b587069454550
Arg [10] : 686a783937346f416174755a755952597772664d722f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
45615:5254:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39390:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49421:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26209:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27769:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45769:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27292:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45802:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40030:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46101:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45874:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28519:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39698:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47550:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49502:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50411:455;;;:::i;:::-;;28929:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47795:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48853:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40220:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45987:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49061:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45956:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25903:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45701:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25633:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4767:103;;;;;;;;;;;;;:::i;:::-;;48939:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4116:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26378:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46020:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46611:931;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28062:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48668:65;;;;;;;;;;;;;:::i;:::-;;29185:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46059:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45912:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45727:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48149:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48741:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45838:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49165:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28288:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50019:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49605:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49295:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5025:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39390:224;39492:4;39531:35;39516:50;;;:11;:50;;;;:90;;;;39570:36;39594:11;39570:23;:36::i;:::-;39516:90;39509:97;;39390:224;;;:::o;49421:73::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49482:6:::1;49473;;:15;;;;;;;;;;;;;;;;;;49421:73:::0;:::o;26209:100::-;26263:13;26296:5;26289:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26209:100;:::o;27769:221::-;27845:7;27873:16;27881:7;27873;:16::i;:::-;27865:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27958:15;:24;27974:7;27958:24;;;;;;;;;;;;;;;;;;;;;27951:31;;27769:221;;;:::o;45769:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27292:411::-;27373:13;27389:23;27404:7;27389:14;:23::i;:::-;27373:39;;27437:5;27431:11;;:2;:11;;;;27423:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27531:5;27515:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27540:37;27557:5;27564:12;:10;:12::i;:::-;27540:16;:37::i;:::-;27515:62;27493:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27674:21;27683:2;27687:7;27674:8;:21::i;:::-;27362:341;27292:411;;:::o;45802:31::-;;;;:::o;40030:113::-;40091:7;40118:10;:17;;;;40111:24;;40030:113;:::o;46101:55::-;;;;;;;;;;;;;;;;;:::o;45874:33::-;;;;:::o;28519:339::-;28714:41;28733:12;:10;:12::i;:::-;28747:7;28714:18;:41::i;:::-;28706:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28822:28;28832:4;28838:2;28842:7;28822:9;:28::i;:::-;28519:339;;;:::o;39698:256::-;39795:7;39831:23;39848:5;39831:16;:23::i;:::-;39823:5;:31;39815:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39920:12;:19;39933:5;39920:19;;;;;;;;;;;;;;;:26;39940:5;39920:26;;;;;;;;;;;;39913:33;;39698:256;;;;:::o;47550:239::-;47609:4;47627:6;47636:1;47627:10;;47622:143;47643:20;:27;;;;47639:1;:31;47622:143;;;47717:5;47690:32;;:20;47711:1;47690:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;47686:72;;;47744:4;47737:11;;;;;47686:72;47672:3;;;;;:::i;:::-;;;;47622:143;;;;47778:5;47771:12;;47550:239;;;;:::o;49502:95::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49585:6:::1;49567:15;;:24;;;;;;;;;;;;;;;;;;49502:95:::0;:::o;50411:455::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50688:7:::1;50709;:5;:7::i;:::-;50701:21;;50730;50701:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50687:69;;;50771:2;50763:11;;;::::0;::::1;;50456:410;50411:455::o:0;28929:185::-;29067:39;29084:4;29090:2;29094:7;29067:39;;;;;;;;;;;;:16;:39::i;:::-;28929:185;;;:::o;47795:348::-;47870:16;47898:23;47924:17;47934:6;47924:9;:17::i;:::-;47898:43;;47948:25;47990:15;47976:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47948:58;;48018:9;48013:103;48033:15;48029:1;:19;48013:103;;;48078:30;48098:6;48106:1;48078:19;:30::i;:::-;48064:8;48073:1;48064:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;48050:3;;;;;:::i;:::-;;;;48013:103;;;;48129:8;48122:15;;;;47795:348;;;:::o;48853:80::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48919:8:::1;48912:4;:15;;;;48853:80:::0;:::o;40220:233::-;40295:7;40331:30;:28;:30::i;:::-;40323:5;:38;40315:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40428:10;40439:5;40428:17;;;;;;;;:::i;:::-;;;;;;;;;;40421:24;;40220:233;;;:::o;45987:28::-;;;;;;;;;;;;;:::o;49061:98::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49142:11:::1;49132:7;:21;;;;;;;;;;;;:::i;:::-;;49061:98:::0;:::o;45956:26::-;;;;;;;;;;;;;:::o;25903:239::-;25975:7;25995:13;26011:7;:16;26019:7;26011:16;;;;;;;;;;;;;;;;;;;;;25995:32;;26063:1;26046:19;;:5;:19;;;;26038:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26129:5;26122:12;;;25903:239;;;:::o;45701:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25633:208::-;25705:7;25750:1;25733:19;;:5;:19;;;;25725:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25817:9;:16;25827:5;25817:16;;;;;;;;;;;;;;;;25810:23;;25633:208;;;:::o;4767:103::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4832:30:::1;4859:1;4832:18;:30::i;:::-;4767:103::o:0;48939:116::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49032:17:::1;49016:13;:33;;;;48939:116:::0;:::o;4116:87::-;4162:7;4189:6;;;;;;;;;;;4182:13;;4116:87;:::o;26378:104::-;26434:13;26467:7;26460:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26378:104;:::o;46020:34::-;;;;;;;;;;;;;:::o;46611:931::-;46677:6;;;;;;;;;;;46676:7;46668:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;46717:14;46734:13;:11;:13::i;:::-;46717:30;;46776:1;46762:11;:15;46754:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46839:13;;46824:11;:28;;46816:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;46932:9;;46917:11;46908:6;:20;;;;:::i;:::-;:33;;46900:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46995:7;:5;:7::i;:::-;46981:21;;:10;:21;;;46977:416;;47037:4;47018:23;;:15;;;;;;;;;;;:23;;;47015:298;;;47066:25;47080:10;47066:13;:25::i;:::-;47058:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;47134:24;47161:20;:32;47182:10;47161:32;;;;;;;;;;;;;;;;47134:59;;47250:18;;47235:11;47216:16;:30;;;;:::i;:::-;:52;;47208:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;47043:270;47015:298;47351:11;47344:4;;:18;;;;:::i;:::-;47331:9;:31;;47323:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;46977:416;47406:9;47418:1;47406:13;;47401:136;47426:11;47421:1;:16;47401:136;;47453:20;:32;47474:10;47453:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;47496:33;47506:10;47527:1;47518:6;:10;;;;:::i;:::-;47496:9;:33::i;:::-;47439:3;;;;;:::i;:::-;;;;47401:136;;;;46661:881;46611:931;:::o;28062:155::-;28157:52;28176:12;:10;:12::i;:::-;28190:8;28200;28157:18;:52::i;:::-;28062:155;;:::o;48668:65::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48723:4:::1;48712:8;;:15;;;;;;;;;;;;;;;;;;48668:65::o:0;29185:328::-;29360:41;29379:12;:10;:12::i;:::-;29393:7;29360:18;:41::i;:::-;29352:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29466:39;29480:4;29486:2;29490:7;29499:5;29466:13;:39::i;:::-;29185:328;;;;:::o;46059:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45912:39::-;;;;:::o;45727:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48149:497::-;48247:13;48288:16;48296:7;48288;:16::i;:::-;48272:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;48397:5;48385:17;;:8;;;;;;;;;;;:17;;;48382:62;;;48422:14;48415:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48382:62;48452:28;48483:10;:8;:10::i;:::-;48452:41;;48538:1;48513:14;48507:28;:32;:133;;;;;;;;;;;;;;;;;48575:14;48591:18;:7;:16;:18::i;:::-;48611:13;48558:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48507:133;48500:140;;;48149:497;;;;:::o;48741:104::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48833:6:::1;48812:18;:27;;;;48741:104:::0;:::o;45838:31::-;;;;:::o;49165:122::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49264:17:::1;49248:13;:33;;;;;;;;;;;;:::i;:::-;;49165:122:::0;:::o;28288:164::-;28385:4;28409:18;:25;28428:5;28409:25;;;;;;;;;;;;;;;:35;28435:8;28409:35;;;;;;;;;;;;;;;;;;;;;;;;;28402:42;;28288:164;;;;:::o;50019:385::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50161:1:::1;50140:10;;:17;;:22;;50132:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;50215:10;;:17;;50194:10;;:17;;:38;50186:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;50278:27;50294:10;;50278:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;:27::i;:::-;50273:74;;50315:24;;;;;;;;;;:::i;:::-;;;;;;;;50273:74;50362:10;;50353:6;:19;;;;;;;:::i;:::-;;50388:10;;50379:6;:19;;;;;;;:::i;:::-;;50019:385:::0;;;;:::o;49605:144::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49687:20:::1;;49680:27;;;;:::i;:::-;49737:6;;49714:20;:29;;;;;;;:::i;:::-;;49605:144:::0;;:::o;49295:120::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49394:15:::1;49377:14;:32;;;;;;;;;;;;:::i;:::-;;49295:120:::0;:::o;5025:201::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5134:1:::1;5114:22;;:8;:22;;;;5106:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5190:28;5209:8;5190:18;:28::i;:::-;5025:201:::0;:::o;25264:305::-;25366:4;25418:25;25403:40;;;:11;:40;;;;:105;;;;25475:33;25460:48;;;:11;:48;;;;25403:105;:158;;;;25525:36;25549:11;25525:23;:36::i;:::-;25403:158;25383:178;;25264:305;;;:::o;2840:98::-;2893:7;2920:10;2913:17;;2840:98;:::o;31023:127::-;31088:4;31140:1;31112:30;;:7;:16;31120:7;31112:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31105:37;;31023:127;;;:::o;35169:174::-;35271:2;35244:15;:24;35260:7;35244:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35327:7;35323:2;35289:46;;35298:23;35313:7;35298:14;:23::i;:::-;35289:46;;;;;;;;;;;;35169:174;;:::o;31317:348::-;31410:4;31435:16;31443:7;31435;:16::i;:::-;31427:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31511:13;31527:23;31542:7;31527:14;:23::i;:::-;31511:39;;31580:5;31569:16;;:7;:16;;;:52;;;;31589:32;31606:5;31613:7;31589:16;:32::i;:::-;31569:52;:87;;;;31649:7;31625:31;;:20;31637:7;31625:11;:20::i;:::-;:31;;;31569:87;31561:96;;;31317:348;;;;:::o;34426:625::-;34585:4;34558:31;;:23;34573:7;34558:14;:23::i;:::-;:31;;;34550:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34664:1;34650:16;;:2;:16;;;;34642:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34720:39;34741:4;34747:2;34751:7;34720:20;:39::i;:::-;34824:29;34841:1;34845:7;34824:8;:29::i;:::-;34885:1;34866:9;:15;34876:4;34866:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34914:1;34897:9;:13;34907:2;34897:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34945:2;34926:7;:16;34934:7;34926:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34984:7;34980:2;34965:27;;34974:4;34965:27;;;;;;;;;;;;35005:38;35025:4;35031:2;35035:7;35005:19;:38::i;:::-;34426:625;;;:::o;5386:191::-;5460:16;5479:6;;;;;;;;;;;5460:25;;5505:8;5496:6;;:17;;;;;;;;;;;;;;;;;;5560:8;5529:40;;5550:8;5529:40;;;;;;;;;;;;5449:128;5386:191;:::o;32007:110::-;32083:26;32093:2;32097:7;32083:26;;;;;;;;;;;;:9;:26::i;:::-;32007:110;;:::o;35485:315::-;35640:8;35631:17;;:5;:17;;;;35623:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35727:8;35689:18;:25;35708:5;35689:25;;;;;;;;;;;;;;;:35;35715:8;35689:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35773:8;35751:41;;35766:5;35751:41;;;35783:8;35751:41;;;;;;:::i;:::-;;;;;;;;35485:315;;;:::o;30395:::-;30552:28;30562:4;30568:2;30572:7;30552:9;:28::i;:::-;30599:48;30622:4;30628:2;30632:7;30641:5;30599:22;:48::i;:::-;30591:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30395:315;;;;:::o;46490:102::-;46550:13;46579:7;46572:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46490:102;:::o;402:723::-;458:13;688:1;679:5;:10;675:53;;;706:10;;;;;;;;;;;;;;;;;;;;;675:53;738:12;753:5;738:20;;769:14;794:78;809:1;801:4;:9;794:78;;827:8;;;;;:::i;:::-;;;;858:2;850:10;;;;;:::i;:::-;;;794:78;;;882:19;914:6;904:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;882:39;;932:154;948:1;939:5;:10;932:154;;976:1;966:11;;;;;:::i;:::-;;;1043:2;1035:5;:10;;;;:::i;:::-;1022:2;:24;;;;:::i;:::-;1009:39;;992:6;999;992:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1072:2;1063:11;;;;;:::i;:::-;;;932:154;;;1110:6;1096:21;;;;;402:723;;;;:::o;49755:258::-;49827:4;49839:11;49853:7;:14;49839:28;;49874:17;49902:9;49914:1;49902:13;;49898:76;49921:3;49917:1;:7;49898:76;;;49956:7;49964:1;49956:10;;;;;;;;:::i;:::-;;;;;;;;49943:23;;;;;;;:::i;:::-;;;49926:4;;;;;:::i;:::-;;;;49898:76;;;;50002:5;49989:9;:18;49982:25;;;;49755:258;;;:::o;16923:157::-;17008:4;17047:25;17032:40;;;:11;:40;;;;17025:47;;16923:157;;;:::o;41066:589::-;41210:45;41237:4;41243:2;41247:7;41210:26;:45::i;:::-;41288:1;41272:18;;:4;:18;;;41268:187;;;41307:40;41339:7;41307:31;:40::i;:::-;41268:187;;;41377:2;41369:10;;:4;:10;;;41365:90;;41396:47;41429:4;41435:7;41396:32;:47::i;:::-;41365:90;41268:187;41483:1;41469:16;;:2;:16;;;41465:183;;;41502:45;41539:7;41502:36;:45::i;:::-;41465:183;;;41575:4;41569:10;;:2;:10;;;41565:83;;41596:40;41624:2;41628:7;41596:27;:40::i;:::-;41565:83;41465:183;41066:589;;;:::o;38247:125::-;;;;:::o;32344:321::-;32474:18;32480:2;32484:7;32474:5;:18::i;:::-;32525:54;32556:1;32560:2;32564:7;32573:5;32525:22;:54::i;:::-;32503:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32344:321;;;:::o;36365:799::-;36520:4;36541:15;:2;:13;;;:15::i;:::-;36537:620;;;36593:2;36577:36;;;36614:12;:10;:12::i;:::-;36628:4;36634:7;36643:5;36577:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36573:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36836:1;36819:6;:13;:18;36815:272;;;36862:60;;;;;;;;;;:::i;:::-;;;;;;;;36815:272;37037:6;37031:13;37022:6;37018:2;37014:15;37007:38;36573:529;36710:41;;;36700:51;;;:6;:51;;;;36693:58;;;;;36537:620;37141:4;37134:11;;36365:799;;;;;;;:::o;37736:126::-;;;;:::o;42378:164::-;42482:10;:17;;;;42455:15;:24;42471:7;42455:24;;;;;;;;;;;:44;;;;42510:10;42526:7;42510:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42378:164;:::o;43169:988::-;43435:22;43485:1;43460:22;43477:4;43460:16;:22::i;:::-;:26;;;;:::i;:::-;43435:51;;43497:18;43518:17;:26;43536:7;43518:26;;;;;;;;;;;;43497:47;;43665:14;43651:10;:28;43647:328;;43696:19;43718:12;:18;43731:4;43718:18;;;;;;;;;;;;;;;:34;43737:14;43718:34;;;;;;;;;;;;43696:56;;43802:11;43769:12;:18;43782:4;43769:18;;;;;;;;;;;;;;;:30;43788:10;43769:30;;;;;;;;;;;:44;;;;43919:10;43886:17;:30;43904:11;43886:30;;;;;;;;;;;:43;;;;43681:294;43647:328;44071:17;:26;44089:7;44071:26;;;;;;;;;;;44064:33;;;44115:12;:18;44128:4;44115:18;;;;;;;;;;;;;;;:34;44134:14;44115:34;;;;;;;;;;;44108:41;;;43250:907;;43169:988;;:::o;44452:1079::-;44705:22;44750:1;44730:10;:17;;;;:21;;;;:::i;:::-;44705:46;;44762:18;44783:15;:24;44799:7;44783:24;;;;;;;;;;;;44762:45;;45134:19;45156:10;45167:14;45156:26;;;;;;;;:::i;:::-;;;;;;;;;;45134:48;;45220:11;45195:10;45206;45195:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45331:10;45300:15;:28;45316:11;45300:28;;;;;;;;;;;:41;;;;45472:15;:24;45488:7;45472:24;;;;;;;;;;;45465:31;;;45507:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44523:1008;;;44452:1079;:::o;41956:221::-;42041:14;42058:20;42075:2;42058:16;:20::i;:::-;42041:37;;42116:7;42089:12;:16;42102:2;42089:16;;;;;;;;;;;;;;;:24;42106:6;42089:24;;;;;;;;;;;:34;;;;42163:6;42134:17;:26;42152:7;42134:26;;;;;;;;;;;:35;;;;42030:147;41956:221;;:::o;33001:439::-;33095:1;33081:16;;:2;:16;;;;33073:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33154:16;33162:7;33154;:16::i;:::-;33153:17;33145:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33216:45;33245:1;33249:2;33253:7;33216:20;:45::i;:::-;33291:1;33274:9;:13;33284:2;33274:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33322:2;33303:7;:16;33311:7;33303:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33367:7;33363:2;33342:33;;33359:1;33342:33;;;;;;;;;;;;33388:44;33416:1;33420:2;33424:7;33388:19;:44::i;:::-;33001:439;;:::o;6817:326::-;6877:4;7134:1;7112:7;:19;;;:23;7105:30;;6817:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1593:567::-;1665:8;1675:6;1725:3;1718:4;1710:6;1706:17;1702:27;1692:122;;1733:79;;:::i;:::-;1692:122;1846:6;1833:20;1823:30;;1876:18;1868:6;1865:30;1862:117;;;1898:79;;:::i;:::-;1862:117;2012:4;2004:6;2000:17;1988:29;;2066:3;2058:4;2050:6;2046:17;2036:8;2032:32;2029:41;2026:128;;;2073:79;;:::i;:::-;2026:128;1593:567;;;;;:::o;2166:133::-;2209:5;2247:6;2234:20;2225:29;;2263:30;2287:5;2263:30;:::i;:::-;2166:133;;;;:::o;2305:137::-;2350:5;2388:6;2375:20;2366:29;;2404:32;2430:5;2404:32;:::i;:::-;2305:137;;;;:::o;2448:141::-;2504:5;2535:6;2529:13;2520:22;;2551:32;2577:5;2551:32;:::i;:::-;2448:141;;;;:::o;2608:338::-;2663:5;2712:3;2705:4;2697:6;2693:17;2689:27;2679:122;;2720:79;;:::i;:::-;2679:122;2837:6;2824:20;2862:78;2936:3;2928:6;2921:4;2913:6;2909:17;2862:78;:::i;:::-;2853:87;;2669:277;2608:338;;;;:::o;2966:340::-;3022:5;3071:3;3064:4;3056:6;3052:17;3048:27;3038:122;;3079:79;;:::i;:::-;3038:122;3196:6;3183:20;3221:79;3296:3;3288:6;3281:4;3273:6;3269:17;3221:79;:::i;:::-;3212:88;;3028:278;2966:340;;;;:::o;3312:139::-;3358:5;3396:6;3383:20;3374:29;;3412:33;3439:5;3412:33;:::i;:::-;3312:139;;;;:::o;3457:329::-;3516:6;3565:2;3553:9;3544:7;3540:23;3536:32;3533:119;;;3571:79;;:::i;:::-;3533:119;3691:1;3716:53;3761:7;3752:6;3741:9;3737:22;3716:53;:::i;:::-;3706:63;;3662:117;3457:329;;;;:::o;3792:474::-;3860:6;3868;3917:2;3905:9;3896:7;3892:23;3888:32;3885:119;;;3923:79;;:::i;:::-;3885:119;4043:1;4068:53;4113:7;4104:6;4093:9;4089:22;4068:53;:::i;:::-;4058:63;;4014:117;4170:2;4196:53;4241:7;4232:6;4221:9;4217:22;4196:53;:::i;:::-;4186:63;;4141:118;3792:474;;;;;:::o;4272:619::-;4349:6;4357;4365;4414:2;4402:9;4393:7;4389:23;4385:32;4382:119;;;4420:79;;:::i;:::-;4382:119;4540:1;4565:53;4610:7;4601:6;4590:9;4586:22;4565:53;:::i;:::-;4555:63;;4511:117;4667:2;4693:53;4738:7;4729:6;4718:9;4714:22;4693:53;:::i;:::-;4683:63;;4638:118;4795:2;4821:53;4866:7;4857:6;4846:9;4842:22;4821:53;:::i;:::-;4811:63;;4766:118;4272:619;;;;;:::o;4897:943::-;4992:6;5000;5008;5016;5065:3;5053:9;5044:7;5040:23;5036:33;5033:120;;;5072:79;;:::i;:::-;5033:120;5192:1;5217:53;5262:7;5253:6;5242:9;5238:22;5217:53;:::i;:::-;5207:63;;5163:117;5319:2;5345:53;5390:7;5381:6;5370:9;5366:22;5345:53;:::i;:::-;5335:63;;5290:118;5447:2;5473:53;5518:7;5509:6;5498:9;5494:22;5473:53;:::i;:::-;5463:63;;5418:118;5603:2;5592:9;5588:18;5575:32;5634:18;5626:6;5623:30;5620:117;;;5656:79;;:::i;:::-;5620:117;5761:62;5815:7;5806:6;5795:9;5791:22;5761:62;:::i;:::-;5751:72;;5546:287;4897:943;;;;;;;:::o;5846:468::-;5911:6;5919;5968:2;5956:9;5947:7;5943:23;5939:32;5936:119;;;5974:79;;:::i;:::-;5936:119;6094:1;6119:53;6164:7;6155:6;6144:9;6140:22;6119:53;:::i;:::-;6109:63;;6065:117;6221:2;6247:50;6289:7;6280:6;6269:9;6265:22;6247:50;:::i;:::-;6237:60;;6192:115;5846:468;;;;;:::o;6320:474::-;6388:6;6396;6445:2;6433:9;6424:7;6420:23;6416:32;6413:119;;;6451:79;;:::i;:::-;6413:119;6571:1;6596:53;6641:7;6632:6;6621:9;6617:22;6596:53;:::i;:::-;6586:63;;6542:117;6698:2;6724:53;6769:7;6760:6;6749:9;6745:22;6724:53;:::i;:::-;6714:63;;6669:118;6320:474;;;;;:::o;6800:559::-;6886:6;6894;6943:2;6931:9;6922:7;6918:23;6914:32;6911:119;;;6949:79;;:::i;:::-;6911:119;7097:1;7086:9;7082:17;7069:31;7127:18;7119:6;7116:30;7113:117;;;7149:79;;:::i;:::-;7113:117;7262:80;7334:7;7325:6;7314:9;7310:22;7262:80;:::i;:::-;7244:98;;;;7040:312;6800:559;;;;;:::o;7365:932::-;7486:6;7494;7502;7510;7559:2;7547:9;7538:7;7534:23;7530:32;7527:119;;;7565:79;;:::i;:::-;7527:119;7713:1;7702:9;7698:17;7685:31;7743:18;7735:6;7732:30;7729:117;;;7765:79;;:::i;:::-;7729:117;7878:80;7950:7;7941:6;7930:9;7926:22;7878:80;:::i;:::-;7860:98;;;;7656:312;8035:2;8024:9;8020:18;8007:32;8066:18;8058:6;8055:30;8052:117;;;8088:79;;:::i;:::-;8052:117;8201:79;8272:7;8263:6;8252:9;8248:22;8201:79;:::i;:::-;8183:97;;;;7978:312;7365:932;;;;;;;:::o;8303:323::-;8359:6;8408:2;8396:9;8387:7;8383:23;8379:32;8376:119;;;8414:79;;:::i;:::-;8376:119;8534:1;8559:50;8601:7;8592:6;8581:9;8577:22;8559:50;:::i;:::-;8549:60;;8505:114;8303:323;;;;:::o;8632:327::-;8690:6;8739:2;8727:9;8718:7;8714:23;8710:32;8707:119;;;8745:79;;:::i;:::-;8707:119;8865:1;8890:52;8934:7;8925:6;8914:9;8910:22;8890:52;:::i;:::-;8880:62;;8836:116;8632:327;;;;:::o;8965:349::-;9034:6;9083:2;9071:9;9062:7;9058:23;9054:32;9051:119;;;9089:79;;:::i;:::-;9051:119;9209:1;9234:63;9289:7;9280:6;9269:9;9265:22;9234:63;:::i;:::-;9224:73;;9180:127;8965:349;;;;:::o;9320:509::-;9389:6;9438:2;9426:9;9417:7;9413:23;9409:32;9406:119;;;9444:79;;:::i;:::-;9406:119;9592:1;9581:9;9577:17;9564:31;9622:18;9614:6;9611:30;9608:117;;;9644:79;;:::i;:::-;9608:117;9749:63;9804:7;9795:6;9784:9;9780:22;9749:63;:::i;:::-;9739:73;;9535:287;9320:509;;;;:::o;9835:329::-;9894:6;9943:2;9931:9;9922:7;9918:23;9914:32;9911:119;;;9949:79;;:::i;:::-;9911:119;10069:1;10094:53;10139:7;10130:6;10119:9;10115:22;10094:53;:::i;:::-;10084:63;;10040:117;9835:329;;;;:::o;10170:179::-;10239:10;10260:46;10302:3;10294:6;10260:46;:::i;:::-;10338:4;10333:3;10329:14;10315:28;;10170:179;;;;:::o;10355:118::-;10442:24;10460:5;10442:24;:::i;:::-;10437:3;10430:37;10355:118;;:::o;10509:732::-;10628:3;10657:54;10705:5;10657:54;:::i;:::-;10727:86;10806:6;10801:3;10727:86;:::i;:::-;10720:93;;10837:56;10887:5;10837:56;:::i;:::-;10916:7;10947:1;10932:284;10957:6;10954:1;10951:13;10932:284;;;11033:6;11027:13;11060:63;11119:3;11104:13;11060:63;:::i;:::-;11053:70;;11146:60;11199:6;11146:60;:::i;:::-;11136:70;;10992:224;10979:1;10976;10972:9;10967:14;;10932:284;;;10936:14;11232:3;11225:10;;10633:608;;;10509:732;;;;:::o;11247:109::-;11328:21;11343:5;11328:21;:::i;:::-;11323:3;11316:34;11247:109;;:::o;11362:360::-;11448:3;11476:38;11508:5;11476:38;:::i;:::-;11530:70;11593:6;11588:3;11530:70;:::i;:::-;11523:77;;11609:52;11654:6;11649:3;11642:4;11635:5;11631:16;11609:52;:::i;:::-;11686:29;11708:6;11686:29;:::i;:::-;11681:3;11677:39;11670:46;;11452:270;11362:360;;;;:::o;11728:364::-;11816:3;11844:39;11877:5;11844:39;:::i;:::-;11899:71;11963:6;11958:3;11899:71;:::i;:::-;11892:78;;11979:52;12024:6;12019:3;12012:4;12005:5;12001:16;11979:52;:::i;:::-;12056:29;12078:6;12056:29;:::i;:::-;12051:3;12047:39;12040:46;;11820:272;11728:364;;;;:::o;12098:377::-;12204:3;12232:39;12265:5;12232:39;:::i;:::-;12287:89;12369:6;12364:3;12287:89;:::i;:::-;12280:96;;12385:52;12430:6;12425:3;12418:4;12411:5;12407:16;12385:52;:::i;:::-;12462:6;12457:3;12453:16;12446:23;;12208:267;12098:377;;;;:::o;12505:845::-;12608:3;12645:5;12639:12;12674:36;12700:9;12674:36;:::i;:::-;12726:89;12808:6;12803:3;12726:89;:::i;:::-;12719:96;;12846:1;12835:9;12831:17;12862:1;12857:137;;;;13008:1;13003:341;;;;12824:520;;12857:137;12941:4;12937:9;12926;12922:25;12917:3;12910:38;12977:6;12972:3;12968:16;12961:23;;12857:137;;13003:341;13070:38;13102:5;13070:38;:::i;:::-;13130:1;13144:154;13158:6;13155:1;13152:13;13144:154;;;13232:7;13226:14;13222:1;13217:3;13213:11;13206:35;13282:1;13273:7;13269:15;13258:26;;13180:4;13177:1;13173:12;13168:17;;13144:154;;;13327:6;13322:3;13318:16;13311:23;;13010:334;;12824:520;;12612:738;;12505:845;;;;:::o;13356:366::-;13498:3;13519:67;13583:2;13578:3;13519:67;:::i;:::-;13512:74;;13595:93;13684:3;13595:93;:::i;:::-;13713:2;13708:3;13704:12;13697:19;;13356:366;;;:::o;13728:::-;13870:3;13891:67;13955:2;13950:3;13891:67;:::i;:::-;13884:74;;13967:93;14056:3;13967:93;:::i;:::-;14085:2;14080:3;14076:12;14069:19;;13728:366;;;:::o;14100:::-;14242:3;14263:67;14327:2;14322:3;14263:67;:::i;:::-;14256:74;;14339:93;14428:3;14339:93;:::i;:::-;14457:2;14452:3;14448:12;14441:19;;14100:366;;;:::o;14472:::-;14614:3;14635:67;14699:2;14694:3;14635:67;:::i;:::-;14628:74;;14711:93;14800:3;14711:93;:::i;:::-;14829:2;14824:3;14820:12;14813:19;;14472:366;;;:::o;14844:::-;14986:3;15007:67;15071:2;15066:3;15007:67;:::i;:::-;15000:74;;15083:93;15172:3;15083:93;:::i;:::-;15201:2;15196:3;15192:12;15185:19;;14844:366;;;:::o;15216:::-;15358:3;15379:67;15443:2;15438:3;15379:67;:::i;:::-;15372:74;;15455:93;15544:3;15455:93;:::i;:::-;15573:2;15568:3;15564:12;15557:19;;15216:366;;;:::o;15588:::-;15730:3;15751:67;15815:2;15810:3;15751:67;:::i;:::-;15744:74;;15827:93;15916:3;15827:93;:::i;:::-;15945:2;15940:3;15936:12;15929:19;;15588:366;;;:::o;15960:::-;16102:3;16123:67;16187:2;16182:3;16123:67;:::i;:::-;16116:74;;16199:93;16288:3;16199:93;:::i;:::-;16317:2;16312:3;16308:12;16301:19;;15960:366;;;:::o;16332:::-;16474:3;16495:67;16559:2;16554:3;16495:67;:::i;:::-;16488:74;;16571:93;16660:3;16571:93;:::i;:::-;16689:2;16684:3;16680:12;16673:19;;16332:366;;;:::o;16704:::-;16846:3;16867:67;16931:2;16926:3;16867:67;:::i;:::-;16860:74;;16943:93;17032:3;16943:93;:::i;:::-;17061:2;17056:3;17052:12;17045:19;;16704:366;;;:::o;17076:::-;17218:3;17239:67;17303:2;17298:3;17239:67;:::i;:::-;17232:74;;17315:93;17404:3;17315:93;:::i;:::-;17433:2;17428:3;17424:12;17417:19;;17076:366;;;:::o;17448:::-;17590:3;17611:67;17675:2;17670:3;17611:67;:::i;:::-;17604:74;;17687:93;17776:3;17687:93;:::i;:::-;17805:2;17800:3;17796:12;17789:19;;17448:366;;;:::o;17820:::-;17962:3;17983:67;18047:2;18042:3;17983:67;:::i;:::-;17976:74;;18059:93;18148:3;18059:93;:::i;:::-;18177:2;18172:3;18168:12;18161:19;;17820:366;;;:::o;18192:::-;18334:3;18355:67;18419:2;18414:3;18355:67;:::i;:::-;18348:74;;18431:93;18520:3;18431:93;:::i;:::-;18549:2;18544:3;18540:12;18533:19;;18192:366;;;:::o;18564:::-;18706:3;18727:67;18791:2;18786:3;18727:67;:::i;:::-;18720:74;;18803:93;18892:3;18803:93;:::i;:::-;18921:2;18916:3;18912:12;18905:19;;18564:366;;;:::o;18936:::-;19078:3;19099:67;19163:2;19158:3;19099:67;:::i;:::-;19092:74;;19175:93;19264:3;19175:93;:::i;:::-;19293:2;19288:3;19284:12;19277:19;;18936:366;;;:::o;19308:::-;19450:3;19471:67;19535:2;19530:3;19471:67;:::i;:::-;19464:74;;19547:93;19636:3;19547:93;:::i;:::-;19665:2;19660:3;19656:12;19649:19;;19308:366;;;:::o;19680:::-;19822:3;19843:67;19907:2;19902:3;19843:67;:::i;:::-;19836:74;;19919:93;20008:3;19919:93;:::i;:::-;20037:2;20032:3;20028:12;20021:19;;19680:366;;;:::o;20052:::-;20194:3;20215:67;20279:2;20274:3;20215:67;:::i;:::-;20208:74;;20291:93;20380:3;20291:93;:::i;:::-;20409:2;20404:3;20400:12;20393:19;;20052:366;;;:::o;20424:::-;20566:3;20587:67;20651:2;20646:3;20587:67;:::i;:::-;20580:74;;20663:93;20752:3;20663:93;:::i;:::-;20781:2;20776:3;20772:12;20765:19;;20424:366;;;:::o;20796:::-;20938:3;20959:67;21023:2;21018:3;20959:67;:::i;:::-;20952:74;;21035:93;21124:3;21035:93;:::i;:::-;21153:2;21148:3;21144:12;21137:19;;20796:366;;;:::o;21168:::-;21310:3;21331:67;21395:2;21390:3;21331:67;:::i;:::-;21324:74;;21407:93;21496:3;21407:93;:::i;:::-;21525:2;21520:3;21516:12;21509:19;;21168:366;;;:::o;21540:::-;21682:3;21703:67;21767:2;21762:3;21703:67;:::i;:::-;21696:74;;21779:93;21868:3;21779:93;:::i;:::-;21897:2;21892:3;21888:12;21881:19;;21540:366;;;:::o;21912:398::-;22071:3;22092:83;22173:1;22168:3;22092:83;:::i;:::-;22085:90;;22184:93;22273:3;22184:93;:::i;:::-;22302:1;22297:3;22293:11;22286:18;;21912:398;;;:::o;22316:366::-;22458:3;22479:67;22543:2;22538:3;22479:67;:::i;:::-;22472:74;;22555:93;22644:3;22555:93;:::i;:::-;22673:2;22668:3;22664:12;22657:19;;22316:366;;;:::o;22688:::-;22830:3;22851:67;22915:2;22910:3;22851:67;:::i;:::-;22844:74;;22927:93;23016:3;22927:93;:::i;:::-;23045:2;23040:3;23036:12;23029:19;;22688:366;;;:::o;23060:::-;23202:3;23223:67;23287:2;23282:3;23223:67;:::i;:::-;23216:74;;23299:93;23388:3;23299:93;:::i;:::-;23417:2;23412:3;23408:12;23401:19;;23060:366;;;:::o;23432:::-;23574:3;23595:67;23659:2;23654:3;23595:67;:::i;:::-;23588:74;;23671:93;23760:3;23671:93;:::i;:::-;23789:2;23784:3;23780:12;23773:19;;23432:366;;;:::o;23804:::-;23946:3;23967:67;24031:2;24026:3;23967:67;:::i;:::-;23960:74;;24043:93;24132:3;24043:93;:::i;:::-;24161:2;24156:3;24152:12;24145:19;;23804:366;;;:::o;24176:108::-;24253:24;24271:5;24253:24;:::i;:::-;24248:3;24241:37;24176:108;;:::o;24290:118::-;24377:24;24395:5;24377:24;:::i;:::-;24372:3;24365:37;24290:118;;:::o;24414:589::-;24639:3;24661:95;24752:3;24743:6;24661:95;:::i;:::-;24654:102;;24773:95;24864:3;24855:6;24773:95;:::i;:::-;24766:102;;24885:92;24973:3;24964:6;24885:92;:::i;:::-;24878:99;;24994:3;24987:10;;24414:589;;;;;;:::o;25009:379::-;25193:3;25215:147;25358:3;25215:147;:::i;:::-;25208:154;;25379:3;25372:10;;25009:379;;;:::o;25394:222::-;25487:4;25525:2;25514:9;25510:18;25502:26;;25538:71;25606:1;25595:9;25591:17;25582:6;25538:71;:::i;:::-;25394:222;;;;:::o;25622:640::-;25817:4;25855:3;25844:9;25840:19;25832:27;;25869:71;25937:1;25926:9;25922:17;25913:6;25869:71;:::i;:::-;25950:72;26018:2;26007:9;26003:18;25994:6;25950:72;:::i;:::-;26032;26100:2;26089:9;26085:18;26076:6;26032:72;:::i;:::-;26151:9;26145:4;26141:20;26136:2;26125:9;26121:18;26114:48;26179:76;26250:4;26241:6;26179:76;:::i;:::-;26171:84;;25622:640;;;;;;;:::o;26268:373::-;26411:4;26449:2;26438:9;26434:18;26426:26;;26498:9;26492:4;26488:20;26484:1;26473:9;26469:17;26462:47;26526:108;26629:4;26620:6;26526:108;:::i;:::-;26518:116;;26268:373;;;;:::o;26647:210::-;26734:4;26772:2;26761:9;26757:18;26749:26;;26785:65;26847:1;26836:9;26832:17;26823:6;26785:65;:::i;:::-;26647:210;;;;:::o;26863:313::-;26976:4;27014:2;27003:9;26999:18;26991:26;;27063:9;27057:4;27053:20;27049:1;27038:9;27034:17;27027:47;27091:78;27164:4;27155:6;27091:78;:::i;:::-;27083:86;;26863:313;;;;:::o;27182:419::-;27348:4;27386:2;27375:9;27371:18;27363:26;;27435:9;27429:4;27425:20;27421:1;27410:9;27406:17;27399:47;27463:131;27589:4;27463:131;:::i;:::-;27455:139;;27182:419;;;:::o;27607:::-;27773:4;27811:2;27800:9;27796:18;27788:26;;27860:9;27854:4;27850:20;27846:1;27835:9;27831:17;27824:47;27888:131;28014:4;27888:131;:::i;:::-;27880:139;;27607:419;;;:::o;28032:::-;28198:4;28236:2;28225:9;28221:18;28213:26;;28285:9;28279:4;28275:20;28271:1;28260:9;28256:17;28249:47;28313:131;28439:4;28313:131;:::i;:::-;28305:139;;28032:419;;;:::o;28457:::-;28623:4;28661:2;28650:9;28646:18;28638:26;;28710:9;28704:4;28700:20;28696:1;28685:9;28681:17;28674:47;28738:131;28864:4;28738:131;:::i;:::-;28730:139;;28457:419;;;:::o;28882:::-;29048:4;29086:2;29075:9;29071:18;29063:26;;29135:9;29129:4;29125:20;29121:1;29110:9;29106:17;29099:47;29163:131;29289:4;29163:131;:::i;:::-;29155:139;;28882:419;;;:::o;29307:::-;29473:4;29511:2;29500:9;29496:18;29488:26;;29560:9;29554:4;29550:20;29546:1;29535:9;29531:17;29524:47;29588:131;29714:4;29588:131;:::i;:::-;29580:139;;29307:419;;;:::o;29732:::-;29898:4;29936:2;29925:9;29921:18;29913:26;;29985:9;29979:4;29975:20;29971:1;29960:9;29956:17;29949:47;30013:131;30139:4;30013:131;:::i;:::-;30005:139;;29732:419;;;:::o;30157:::-;30323:4;30361:2;30350:9;30346:18;30338:26;;30410:9;30404:4;30400:20;30396:1;30385:9;30381:17;30374:47;30438:131;30564:4;30438:131;:::i;:::-;30430:139;;30157:419;;;:::o;30582:::-;30748:4;30786:2;30775:9;30771:18;30763:26;;30835:9;30829:4;30825:20;30821:1;30810:9;30806:17;30799:47;30863:131;30989:4;30863:131;:::i;:::-;30855:139;;30582:419;;;:::o;31007:::-;31173:4;31211:2;31200:9;31196:18;31188:26;;31260:9;31254:4;31250:20;31246:1;31235:9;31231:17;31224:47;31288:131;31414:4;31288:131;:::i;:::-;31280:139;;31007:419;;;:::o;31432:::-;31598:4;31636:2;31625:9;31621:18;31613:26;;31685:9;31679:4;31675:20;31671:1;31660:9;31656:17;31649:47;31713:131;31839:4;31713:131;:::i;:::-;31705:139;;31432:419;;;:::o;31857:::-;32023:4;32061:2;32050:9;32046:18;32038:26;;32110:9;32104:4;32100:20;32096:1;32085:9;32081:17;32074:47;32138:131;32264:4;32138:131;:::i;:::-;32130:139;;31857:419;;;:::o;32282:::-;32448:4;32486:2;32475:9;32471:18;32463:26;;32535:9;32529:4;32525:20;32521:1;32510:9;32506:17;32499:47;32563:131;32689:4;32563:131;:::i;:::-;32555:139;;32282:419;;;:::o;32707:::-;32873:4;32911:2;32900:9;32896:18;32888:26;;32960:9;32954:4;32950:20;32946:1;32935:9;32931:17;32924:47;32988:131;33114:4;32988:131;:::i;:::-;32980:139;;32707:419;;;:::o;33132:::-;33298:4;33336:2;33325:9;33321:18;33313:26;;33385:9;33379:4;33375:20;33371:1;33360:9;33356:17;33349:47;33413:131;33539:4;33413:131;:::i;:::-;33405:139;;33132:419;;;:::o;33557:::-;33723:4;33761:2;33750:9;33746:18;33738:26;;33810:9;33804:4;33800:20;33796:1;33785:9;33781:17;33774:47;33838:131;33964:4;33838:131;:::i;:::-;33830:139;;33557:419;;;:::o;33982:::-;34148:4;34186:2;34175:9;34171:18;34163:26;;34235:9;34229:4;34225:20;34221:1;34210:9;34206:17;34199:47;34263:131;34389:4;34263:131;:::i;:::-;34255:139;;33982:419;;;:::o;34407:::-;34573:4;34611:2;34600:9;34596:18;34588:26;;34660:9;34654:4;34650:20;34646:1;34635:9;34631:17;34624:47;34688:131;34814:4;34688:131;:::i;:::-;34680:139;;34407:419;;;:::o;34832:::-;34998:4;35036:2;35025:9;35021:18;35013:26;;35085:9;35079:4;35075:20;35071:1;35060:9;35056:17;35049:47;35113:131;35239:4;35113:131;:::i;:::-;35105:139;;34832:419;;;:::o;35257:::-;35423:4;35461:2;35450:9;35446:18;35438:26;;35510:9;35504:4;35500:20;35496:1;35485:9;35481:17;35474:47;35538:131;35664:4;35538:131;:::i;:::-;35530:139;;35257:419;;;:::o;35682:::-;35848:4;35886:2;35875:9;35871:18;35863:26;;35935:9;35929:4;35925:20;35921:1;35910:9;35906:17;35899:47;35963:131;36089:4;35963:131;:::i;:::-;35955:139;;35682:419;;;:::o;36107:::-;36273:4;36311:2;36300:9;36296:18;36288:26;;36360:9;36354:4;36350:20;36346:1;36335:9;36331:17;36324:47;36388:131;36514:4;36388:131;:::i;:::-;36380:139;;36107:419;;;:::o;36532:::-;36698:4;36736:2;36725:9;36721:18;36713:26;;36785:9;36779:4;36775:20;36771:1;36760:9;36756:17;36749:47;36813:131;36939:4;36813:131;:::i;:::-;36805:139;;36532:419;;;:::o;36957:::-;37123:4;37161:2;37150:9;37146:18;37138:26;;37210:9;37204:4;37200:20;37196:1;37185:9;37181:17;37174:47;37238:131;37364:4;37238:131;:::i;:::-;37230:139;;36957:419;;;:::o;37382:::-;37548:4;37586:2;37575:9;37571:18;37563:26;;37635:9;37629:4;37625:20;37621:1;37610:9;37606:17;37599:47;37663:131;37789:4;37663:131;:::i;:::-;37655:139;;37382:419;;;:::o;37807:::-;37973:4;38011:2;38000:9;37996:18;37988:26;;38060:9;38054:4;38050:20;38046:1;38035:9;38031:17;38024:47;38088:131;38214:4;38088:131;:::i;:::-;38080:139;;37807:419;;;:::o;38232:::-;38398:4;38436:2;38425:9;38421:18;38413:26;;38485:9;38479:4;38475:20;38471:1;38460:9;38456:17;38449:47;38513:131;38639:4;38513:131;:::i;:::-;38505:139;;38232:419;;;:::o;38657:::-;38823:4;38861:2;38850:9;38846:18;38838:26;;38910:9;38904:4;38900:20;38896:1;38885:9;38881:17;38874:47;38938:131;39064:4;38938:131;:::i;:::-;38930:139;;38657:419;;;:::o;39082:222::-;39175:4;39213:2;39202:9;39198:18;39190:26;;39226:71;39294:1;39283:9;39279:17;39270:6;39226:71;:::i;:::-;39082:222;;;;:::o;39310:129::-;39344:6;39371:20;;:::i;:::-;39361:30;;39400:33;39428:4;39420:6;39400:33;:::i;:::-;39310:129;;;:::o;39445:75::-;39478:6;39511:2;39505:9;39495:19;;39445:75;:::o;39526:307::-;39587:4;39677:18;39669:6;39666:30;39663:56;;;39699:18;;:::i;:::-;39663:56;39737:29;39759:6;39737:29;:::i;:::-;39729:37;;39821:4;39815;39811:15;39803:23;;39526:307;;;:::o;39839:308::-;39901:4;39991:18;39983:6;39980:30;39977:56;;;40013:18;;:::i;:::-;39977:56;40051:29;40073:6;40051:29;:::i;:::-;40043:37;;40135:4;40129;40125:15;40117:23;;39839:308;;;:::o;40153:132::-;40220:4;40243:3;40235:11;;40273:4;40268:3;40264:14;40256:22;;40153:132;;;:::o;40291:141::-;40340:4;40363:3;40355:11;;40386:3;40383:1;40376:14;40420:4;40417:1;40407:18;40399:26;;40291:141;;;:::o;40438:114::-;40505:6;40539:5;40533:12;40523:22;;40438:114;;;:::o;40558:98::-;40609:6;40643:5;40637:12;40627:22;;40558:98;;;:::o;40662:99::-;40714:6;40748:5;40742:12;40732:22;;40662:99;;;:::o;40767:113::-;40837:4;40869;40864:3;40860:14;40852:22;;40767:113;;;:::o;40886:184::-;40985:11;41019:6;41014:3;41007:19;41059:4;41054:3;41050:14;41035:29;;40886:184;;;;:::o;41076:168::-;41159:11;41193:6;41188:3;41181:19;41233:4;41228:3;41224:14;41209:29;;41076:168;;;;:::o;41250:147::-;41351:11;41388:3;41373:18;;41250:147;;;;:::o;41403:169::-;41487:11;41521:6;41516:3;41509:19;41561:4;41556:3;41552:14;41537:29;;41403:169;;;;:::o;41578:148::-;41680:11;41717:3;41702:18;;41578:148;;;;:::o;41732:305::-;41772:3;41791:20;41809:1;41791:20;:::i;:::-;41786:25;;41825:20;41843:1;41825:20;:::i;:::-;41820:25;;41979:1;41911:66;41907:74;41904:1;41901:81;41898:107;;;41985:18;;:::i;:::-;41898:107;42029:1;42026;42022:9;42015:16;;41732:305;;;;:::o;42043:185::-;42083:1;42100:20;42118:1;42100:20;:::i;:::-;42095:25;;42134:20;42152:1;42134:20;:::i;:::-;42129:25;;42173:1;42163:35;;42178:18;;:::i;:::-;42163:35;42220:1;42217;42213:9;42208:14;;42043:185;;;;:::o;42234:348::-;42274:7;42297:20;42315:1;42297:20;:::i;:::-;42292:25;;42331:20;42349:1;42331:20;:::i;:::-;42326:25;;42519:1;42451:66;42447:74;42444:1;42441:81;42436:1;42429:9;42422:17;42418:105;42415:131;;;42526:18;;:::i;:::-;42415:131;42574:1;42571;42567:9;42556:20;;42234:348;;;;:::o;42588:191::-;42628:4;42648:20;42666:1;42648:20;:::i;:::-;42643:25;;42682:20;42700:1;42682:20;:::i;:::-;42677:25;;42721:1;42718;42715:8;42712:34;;;42726:18;;:::i;:::-;42712:34;42771:1;42768;42764:9;42756:17;;42588:191;;;;:::o;42785:96::-;42822:7;42851:24;42869:5;42851:24;:::i;:::-;42840:35;;42785:96;;;:::o;42887:90::-;42921:7;42964:5;42957:13;42950:21;42939:32;;42887:90;;;:::o;42983:149::-;43019:7;43059:66;43052:5;43048:78;43037:89;;42983:149;;;:::o;43138:126::-;43175:7;43215:42;43208:5;43204:54;43193:65;;43138:126;;;:::o;43270:77::-;43307:7;43336:5;43325:16;;43270:77;;;:::o;43353:154::-;43437:6;43432:3;43427;43414:30;43499:1;43490:6;43485:3;43481:16;43474:27;43353:154;;;:::o;43513:307::-;43581:1;43591:113;43605:6;43602:1;43599:13;43591:113;;;43690:1;43685:3;43681:11;43675:18;43671:1;43666:3;43662:11;43655:39;43627:2;43624:1;43620:10;43615:15;;43591:113;;;43722:6;43719:1;43716:13;43713:101;;;43802:1;43793:6;43788:3;43784:16;43777:27;43713:101;43562:258;43513:307;;;:::o;43826:320::-;43870:6;43907:1;43901:4;43897:12;43887:22;;43954:1;43948:4;43944:12;43975:18;43965:81;;44031:4;44023:6;44019:17;44009:27;;43965:81;44093:2;44085:6;44082:14;44062:18;44059:38;44056:84;;;44112:18;;:::i;:::-;44056:84;43877:269;43826:320;;;:::o;44152:281::-;44235:27;44257:4;44235:27;:::i;:::-;44227:6;44223:40;44365:6;44353:10;44350:22;44329:18;44317:10;44314:34;44311:62;44308:88;;;44376:18;;:::i;:::-;44308:88;44416:10;44412:2;44405:22;44195:238;44152:281;;:::o;44439:233::-;44478:3;44501:24;44519:5;44501:24;:::i;:::-;44492:33;;44547:66;44540:5;44537:77;44534:103;;;44617:18;;:::i;:::-;44534:103;44664:1;44657:5;44653:13;44646:20;;44439:233;;;:::o;44678:176::-;44710:1;44727:20;44745:1;44727:20;:::i;:::-;44722:25;;44761:20;44779:1;44761:20;:::i;:::-;44756:25;;44800:1;44790:35;;44805:18;;:::i;:::-;44790:35;44846:1;44843;44839:9;44834:14;;44678:176;;;;:::o;44860:180::-;44908:77;44905:1;44898:88;45005:4;45002:1;44995:15;45029:4;45026:1;45019:15;45046:180;45094:77;45091:1;45084:88;45191:4;45188:1;45181:15;45215:4;45212:1;45205:15;45232:180;45280:77;45277:1;45270:88;45377:4;45374:1;45367:15;45401:4;45398:1;45391:15;45418:180;45466:77;45463:1;45456:88;45563:4;45560:1;45553:15;45587:4;45584:1;45577:15;45604:180;45652:77;45649:1;45642:88;45749:4;45746:1;45739:15;45773:4;45770:1;45763:15;45790:180;45838:77;45835:1;45828:88;45935:4;45932:1;45925:15;45959:4;45956:1;45949:15;45976:117;46085:1;46082;46075:12;46099:117;46208:1;46205;46198:12;46222:117;46331:1;46328;46321:12;46345:117;46454:1;46451;46444:12;46468:117;46577:1;46574;46567:12;46591:117;46700:1;46697;46690:12;46714:102;46755:6;46806:2;46802:7;46797:2;46790:5;46786:14;46782:28;46772:38;;46714:102;;;:::o;46822:164::-;46962:16;46958:1;46950:6;46946:14;46939:40;46822:164;:::o;46992:230::-;47132:34;47128:1;47120:6;47116:14;47109:58;47201:13;47196:2;47188:6;47184:15;47177:38;46992:230;:::o;47228:237::-;47368:34;47364:1;47356:6;47352:14;47345:58;47437:20;47432:2;47424:6;47420:15;47413:45;47228:237;:::o;47471:225::-;47611:34;47607:1;47599:6;47595:14;47588:58;47680:8;47675:2;47667:6;47663:15;47656:33;47471:225;:::o;47702:224::-;47842:34;47838:1;47830:6;47826:14;47819:58;47911:7;47906:2;47898:6;47894:15;47887:32;47702:224;:::o;47932:178::-;48072:30;48068:1;48060:6;48056:14;48049:54;47932:178;:::o;48116:::-;48256:30;48252:1;48244:6;48240:14;48233:54;48116:178;:::o;48300:223::-;48440:34;48436:1;48428:6;48424:14;48417:58;48509:6;48504:2;48496:6;48492:15;48485:31;48300:223;:::o;48529:175::-;48669:27;48665:1;48657:6;48653:14;48646:51;48529:175;:::o;48710:231::-;48850:34;48846:1;48838:6;48834:14;48827:58;48919:14;48914:2;48906:6;48902:15;48895:39;48710:231;:::o;48947:162::-;49087:14;49083:1;49075:6;49071:14;49064:38;48947:162;:::o;49115:243::-;49255:34;49251:1;49243:6;49239:14;49232:58;49324:26;49319:2;49311:6;49307:15;49300:51;49115:243;:::o;49364:229::-;49504:34;49500:1;49492:6;49488:14;49481:58;49573:12;49568:2;49560:6;49556:15;49549:37;49364:229;:::o;49599:228::-;49739:34;49735:1;49727:6;49723:14;49716:58;49808:11;49803:2;49795:6;49791:15;49784:36;49599:228;:::o;49833:172::-;49973:24;49969:1;49961:6;49957:14;49950:48;49833:172;:::o;50011:223::-;50151:34;50147:1;50139:6;50135:14;50128:58;50220:6;50215:2;50207:6;50203:15;50196:31;50011:223;:::o;50240:182::-;50380:34;50376:1;50368:6;50364:14;50357:58;50240:182;:::o;50428:231::-;50568:34;50564:1;50556:6;50552:14;50545:58;50637:14;50632:2;50624:6;50620:15;50613:39;50428:231;:::o;50665:182::-;50805:34;50801:1;50793:6;50789:14;50782:58;50665:182;:::o;50853:172::-;50993:24;50989:1;50981:6;50977:14;50970:48;50853:172;:::o;51031:234::-;51171:34;51167:1;51159:6;51155:14;51148:58;51240:17;51235:2;51227:6;51223:15;51216:42;51031:234;:::o;51271:169::-;51411:21;51407:1;51399:6;51395:14;51388:45;51271:169;:::o;51446:220::-;51586:34;51582:1;51574:6;51570:14;51563:58;51655:3;51650:2;51642:6;51638:15;51631:28;51446:220;:::o;51672:114::-;;:::o;51792:168::-;51932:20;51928:1;51920:6;51916:14;51909:44;51792:168;:::o;51966:236::-;52106:34;52102:1;52094:6;52090:14;52083:58;52175:19;52170:2;52162:6;52158:15;52151:44;51966:236;:::o;52208:231::-;52348:34;52344:1;52336:6;52332:14;52325:58;52417:14;52412:2;52404:6;52400:15;52393:39;52208:231;:::o;52445:173::-;52585:25;52581:1;52573:6;52569:14;52562:49;52445:173;:::o;52624:177::-;52764:29;52760:1;52752:6;52748:14;52741:53;52624:177;:::o;52807:122::-;52880:24;52898:5;52880:24;:::i;:::-;52873:5;52870:35;52860:63;;52919:1;52916;52909:12;52860:63;52807:122;:::o;52935:116::-;53005:21;53020:5;53005:21;:::i;:::-;52998:5;52995:32;52985:60;;53041:1;53038;53031:12;52985:60;52935:116;:::o;53057:120::-;53129:23;53146:5;53129:23;:::i;:::-;53122:5;53119:34;53109:62;;53167:1;53164;53157:12;53109:62;53057:120;:::o;53183:122::-;53256:24;53274:5;53256:24;:::i;:::-;53249:5;53246:35;53236:63;;53295:1;53292;53285:12;53236:63;53183:122;:::o
Swarm Source
ipfs://290361cead88d10f8f45cec7b74e89915c1ee4fa8a29b2b8596393bf94548333