ERC-721
Overview
Max Total Supply
680 BEAR
Holders
135
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
1 BEARLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
LosBears
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-04-04 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Pausable.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. */ abstract contract ERC721Pausable is ERC721, Pausable { /** * @dev See {ERC721-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); require(!paused(), "ERC721Pausable: token transfer while paused"); } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/LosBears.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.4; contract LosBears is ERC721, ERC721Enumerable, ERC721URIStorage, ERC721Pausable, Ownable { using Counters for Counters.Counter; using Strings for uint256; Counters.Counter private _tokenIds; Counters.Counter private _mintCount; Counters.Counter private _giveawayCount; Counters.Counter private _whitelistCount; string private _defaultBaseURI; address payable public payableAddress; uint256 public maxMintable = 1111; uint256 public maxTokens = 1111; uint256 public maxGiveaway = 0; uint256 public maxMintPerWL = 50; uint256 public mintPrice = 7 ether; uint256 public whitelistPrice = 5 ether; uint256 public whitelistSaleStart = 1649095200000; // 4th april 8pm CET uint256 public publicSaleStart = 1649527200000; // 9th april 8pm CET mapping(address => uint256) private whitelistBalance; constructor() ERC721("Los Bears", "BEAR") { _tokenIds.increment(); } function whitelist(address to) public onlyOwner { require(to != address(0), "Address cannot be 0"); whitelistBalance[to] = maxMintPerWL; } function whitelistAddresses(address[] calldata to) external onlyOwner { for (uint i = 0; i < to.length; i++) { whitelist(to[i]); } } function isWhitelisted(address to) public view returns (bool) { return whitelistBalance[to] > 0 && to != address(0); } function claim(uint256 quantity) external payable whenNotPaused { if (isWhitelisted(msg.sender) && publicSaleStart > block.timestamp) { whitelistMint(msg.sender, quantity); } else { publicMint(msg.sender, quantity); } } function give(address to, uint256 quantity) external onlyOwner { giveAmount(to, quantity); } function publicMint(address to, uint256 quantity) internal { require(publicSaleStart <= block.timestamp, "Public sale not started"); uint256 totalPrice = mintPrice * quantity; require(msg.value >= totalPrice, "Invalid amount"); uint256 tokenId = _tokenIds.current(); require((tokenId + quantity - 1) < maxMintable, "Cannot claim"); payableAddress.transfer(totalPrice); mintAmount(to, quantity); } function whitelistMint(address to, uint256 quantity) internal { require(whitelistSaleStart <= block.timestamp, "Whitelist sale not started"); require(publicSaleStart >= block.timestamp, "Whitelist sale ended"); require(whitelistBalance[to] > 0, "Exceeded whitelist mint limit"); require( whitelistBalance[to] >= quantity, string(abi.encodePacked("You can mint just ", whitelistBalance[to].toString(), " more")) ); uint256 totalPrice = whitelistPrice * quantity; require(msg.value >= totalPrice, "Invalid amount"); uint256 tokenId = _tokenIds.current(); require((tokenId + quantity - 1) < maxMintable, "Cannot claim"); payableAddress.transfer(totalPrice); mintAmount(to, quantity); } function blockTimestamp() public view returns (uint256) { return block.timestamp; } function mintAmount(address to, uint256 amount) internal { uint256 tokenId = _tokenIds.current(); for (uint i = 0; i < amount; i++) { mintNFT(to, tokenId + i); } } function mintNFT(address to, uint256 tokenId) internal { internalMint(to, tokenId); _mintCount.increment(); } function giveAmount(address to, uint256 amount) internal { uint256 tokenId = _tokenIds.current(); for (uint i = 0; i < amount; i++) { giveNFT(to, tokenId + i); } } function giveNFT(address to, uint256 tokenId) internal { internalMint(to, tokenId); _giveawayCount.increment(); } function internalMint(address to, uint256 tokenId) internal { require(tokenId <= maxTokens, "Token limit exceeded!"); _safeMint(to, tokenId); _tokenIds.increment(); } function togglePause() public onlyOwner { if (paused()) { _unpause(); } else { _pause(); } } function setBaseURI(string calldata newBaseURI) public onlyOwner { _defaultBaseURI = newBaseURI; } function setWhitelistSaleStart(uint256 newTimestamp) public onlyOwner { whitelistSaleStart = newTimestamp; } function setPublicSaleStart(uint256 newTimestamp) public onlyOwner { publicSaleStart = newTimestamp; } function setPayableAddress(address newPayableAddress) public onlyOwner { payableAddress = payable(newPayableAddress); } function setMaxMintPerWL(uint256 newMaxMintPerWL) public onlyOwner { maxMintPerWL = newMaxMintPerWL; } function setMintPrice(uint256 newMintPrice) public onlyOwner { mintPrice = newMintPrice; } function setWhitelistPrice(uint256 newWhitelistPrice) public onlyOwner { whitelistPrice = newWhitelistPrice; } function setMaxGiveaway(uint256 newMaxGiveaway) public onlyOwner { maxGiveaway = newMaxGiveaway; maxMintable = maxTokens - maxGiveaway; } function setMaxMintable(uint256 newMaxMintable) public onlyOwner { maxMintable = newMaxMintable; maxGiveaway = maxTokens - maxMintable; } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return string(abi.encodePacked(_baseURI(), tokenId.toString(), ".json")); } function _baseURI() internal view override returns (string memory) { return _defaultBaseURI; } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable, ERC721Pausable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"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":"blockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"payable","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":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"give","outputs":[],"stateMutability":"nonpayable","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":"to","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGiveaway","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerWL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payableAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxGiveaway","type":"uint256"}],"name":"setMaxGiveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxMintPerWL","type":"uint256"}],"name":"setMaxMintPerWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxMintable","type":"uint256"}],"name":"setMaxMintable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPayableAddress","type":"address"}],"name":"setPayableAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTimestamp","type":"uint256"}],"name":"setPublicSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newWhitelistPrice","type":"uint256"}],"name":"setWhitelistPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTimestamp","type":"uint256"}],"name":"setWhitelistSaleStart","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":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","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":"to","type":"address"}],"name":"whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"}],"name":"whitelistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistSaleStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405261045760125561045760135560006014556032601555676124fee993bc0000601655674563918244f4000060175565017ff5bbcd006018556501800f7b99006019553480156200005357600080fd5b506040518060400160405280600981526020017f4c6f7320426561727300000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42454152000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d892919062000230565b508060019080519060200190620000f192919062000230565b5050506000600b60006101000a81548160ff0219169083151502179055506200012f620001236200014c60201b60201c565b6200015460201b60201c565b62000146600c6200021a60201b62001cf01760201c565b62000345565b600033905090565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b8280546200023e90620002e0565b90600052602060002090601f016020900481019282620002625760008555620002ae565b82601f106200027d57805160ff1916838001178555620002ae565b82800160010185558215620002ae579182015b82811115620002ad57825182559160200191906001019062000290565b5b509050620002bd9190620002c1565b5090565b5b80821115620002dc576000816000905550600101620002c2565b5090565b60006002820490506001821680620002f957607f821691505b6020821081141562000310576200030f62000316565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61528980620003556000396000f3fe6080604052600436106102725760003560e01c80635c975abb1161014f578063adb61832116100c1578063e985e9c51161007a578063e985e9c514610941578063f00388f71461097e578063f2fde38b146109a7578063f4a0a528146109d0578063fc1a1c36146109f9578063feafe04314610a2457610272565b8063adb6183214610845578063b23695ca14610870578063b88d4fde14610899578063c4ae3168146108c2578063c87b56dd146108d9578063e83157421461091657610272565b8063717d57d311610113578063717d57d3146107495780638da5cb5b1461077257806395d89b411461079d5780639b19251a146107c85780639fa719b5146107f1578063a22cb4651461081c57610272565b80635c975abb146106625780636352211e1461068d5780636817c76c146106ca57806370a08231146106f5578063715018a61461073257610272565b80632f745c59116101e857806342842e0e116101ac57806342842e0e14610554578063459ba3ae1461057d5780634685e1a0146105a85780634f6ccce7146105d357806355f804b3146106105780635b3eed5c1461063957610272565b80632f745c591461046a5780633360caa0146104a7578063379607f5146104d25780633af32abf146104ee5780633e16039c1461052b57610272565b806318160ddd1161023a57806318160ddd1461036e5780632154dc391461039957806323b872dd146103c457806325d387b5146103ed5780632bf04304146104165780632c4889e41461043f57610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063095ea7b31461031c5780630ca282f714610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613baa565b610a4d565b6040516102ab9190614278565b60405180910390f35b3480156102c057600080fd5b506102c9610a5f565b6040516102d69190614293565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613c51565b610af1565b60405161031391906141f6565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613b1d565b610b76565b005b34801561035157600080fd5b5061036c60048036038101906103679190613c51565b610c8e565b005b34801561037a57600080fd5b50610383610d14565b6040516103909190614635565b60405180910390f35b3480156103a557600080fd5b506103ae610d21565b6040516103bb9190614635565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190613a07565b610d27565b005b3480156103f957600080fd5b50610414600480360381019061040f9190613c51565b610d87565b005b34801561042257600080fd5b5061043d60048036038101906104389190613b5d565b610e23565b005b34801561044b57600080fd5b50610454610ef5565b6040516104619190614635565b60405180910390f35b34801561047657600080fd5b50610491600480360381019061048c9190613b1d565b610efb565b60405161049e9190614635565b60405180910390f35b3480156104b357600080fd5b506104bc610fa0565b6040516104c99190614635565b60405180910390f35b6104ec60048036038101906104e79190613c51565b610fa6565b005b3480156104fa57600080fd5b506105156004803603810190610510919061399a565b611026565b6040516105229190614278565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613c51565b6110aa565b005b34801561056057600080fd5b5061057b60048036038101906105769190613a07565b611146565b005b34801561058957600080fd5b50610592611166565b60405161059f9190614635565b60405180910390f35b3480156105b457600080fd5b506105bd61116c565b6040516105ca9190614211565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f59190613c51565b611192565b6040516106079190614635565b60405180910390f35b34801561061c57600080fd5b5061063760048036038101906106329190613c04565b611203565b005b34801561064557600080fd5b50610660600480360381019061065b919061399a565b611295565b005b34801561066e57600080fd5b50610677611355565b6040516106849190614278565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190613c51565b61136c565b6040516106c191906141f6565b60405180910390f35b3480156106d657600080fd5b506106df61141e565b6040516106ec9190614635565b60405180910390f35b34801561070157600080fd5b5061071c6004803603810190610717919061399a565b611424565b6040516107299190614635565b60405180910390f35b34801561073e57600080fd5b506107476114dc565b005b34801561075557600080fd5b50610770600480360381019061076b9190613c51565b611564565b005b34801561077e57600080fd5b506107876115ea565b60405161079491906141f6565b60405180910390f35b3480156107a957600080fd5b506107b2611614565b6040516107bf9190614293565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea919061399a565b6116a6565b005b3480156107fd57600080fd5b506108066117db565b6040516108139190614635565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190613add565b6117e1565b005b34801561085157600080fd5b5061085a6117f7565b6040516108679190614635565b60405180910390f35b34801561087c57600080fd5b5061089760048036038101906108929190613c51565b6117ff565b005b3480156108a557600080fd5b506108c060048036038101906108bb9190613a5a565b611885565b005b3480156108ce57600080fd5b506108d76118e7565b005b3480156108e557600080fd5b5061090060048036038101906108fb9190613c51565b611988565b60405161090d9190614293565b60405180910390f35b34801561092257600080fd5b5061092b6119c2565b6040516109389190614635565b60405180910390f35b34801561094d57600080fd5b50610968600480360381019061096391906139c7565b6119c8565b6040516109759190614278565b60405180910390f35b34801561098a57600080fd5b506109a560048036038101906109a09190613b1d565b611a5c565b005b3480156109b357600080fd5b506109ce60048036038101906109c9919061399a565b611ae6565b005b3480156109dc57600080fd5b506109f760048036038101906109f29190613c51565b611bde565b005b348015610a0557600080fd5b50610a0e611c64565b604051610a1b9190614635565b60405180910390f35b348015610a3057600080fd5b50610a4b6004803603810190610a469190613c51565b611c6a565b005b6000610a5882611d06565b9050919050565b606060008054610a6e906148c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9a906148c6565b8015610ae75780601f10610abc57610100808354040283529160200191610ae7565b820191906000526020600020905b815481529060010190602001808311610aca57829003601f168201915b5050505050905090565b6000610afc82611d80565b610b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3290614515565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b818261136c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be990614595565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c11611dec565b73ffffffffffffffffffffffffffffffffffffffff161480610c405750610c3f81610c3a611dec565b6119c8565b5b610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690614475565b60405180910390fd5b610c898383611df4565b505050565b610c96611dec565b73ffffffffffffffffffffffffffffffffffffffff16610cb46115ea565b73ffffffffffffffffffffffffffffffffffffffff1614610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0190614535565b60405180910390fd5b8060198190555050565b6000600880549050905090565b60125481565b610d38610d32611dec565b82611ead565b610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e906145f5565b60405180910390fd5b610d82838383611f8b565b505050565b610d8f611dec565b73ffffffffffffffffffffffffffffffffffffffff16610dad6115ea565b73ffffffffffffffffffffffffffffffffffffffff1614610e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfa90614535565b60405180910390fd5b80601281905550601254601354610e1a91906147ca565b60148190555050565b610e2b611dec565b73ffffffffffffffffffffffffffffffffffffffff16610e496115ea565b73ffffffffffffffffffffffffffffffffffffffff1614610e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9690614535565b60405180910390fd5b60005b82829050811015610ef057610edd838383818110610ec357610ec2614a5f565b5b9050602002016020810190610ed8919061399a565b6116a6565b8080610ee890614929565b915050610ea2565b505050565b60155481565b6000610f0683611424565b8210610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e906142f5565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60195481565b610fae611355565b15610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe590614455565b60405180910390fd5b610ff733611026565b8015611004575042601954115b156110185761101333826121f2565b611023565b6110223382612521565b5b50565b600080601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180156110a35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6110b2611dec565b73ffffffffffffffffffffffffffffffffffffffff166110d06115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90614535565b60405180910390fd5b8060148190555060145460135461113d91906147ca565b60128190555050565b61116183838360405180602001604052806000815250611885565b505050565b60145481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061119c610d14565b82106111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d490614615565b60405180910390fd5b600882815481106111f1576111f0614a5f565b5b90600052602060002001549050919050565b61120b611dec565b73ffffffffffffffffffffffffffffffffffffffff166112296115ea565b73ffffffffffffffffffffffffffffffffffffffff161461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690614535565b60405180910390fd5b818160109190611290929190613772565b505050565b61129d611dec565b73ffffffffffffffffffffffffffffffffffffffff166112bb6115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890614535565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c906144d5565b60405180910390fd5b80915050919050565b60165481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c906144b5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114e4611dec565b73ffffffffffffffffffffffffffffffffffffffff166115026115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90614535565b60405180910390fd5b611562600061269d565b565b61156c611dec565b73ffffffffffffffffffffffffffffffffffffffff1661158a6115ea565b73ffffffffffffffffffffffffffffffffffffffff16146115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790614535565b60405180910390fd5b8060178190555050565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611623906148c6565b80601f016020809104026020016040519081016040528092919081815260200182805461164f906148c6565b801561169c5780601f106116715761010080835404028352916020019161169c565b820191906000526020600020905b81548152906001019060200180831161167f57829003601f168201915b5050505050905090565b6116ae611dec565b73ffffffffffffffffffffffffffffffffffffffff166116cc6115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171990614535565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990614555565b60405180910390fd5b601554601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60185481565b6117f36117ec611dec565b8383612763565b5050565b600042905090565b611807611dec565b73ffffffffffffffffffffffffffffffffffffffff166118256115ea565b73ffffffffffffffffffffffffffffffffffffffff161461187b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187290614535565b60405180910390fd5b8060188190555050565b611896611890611dec565b83611ead565b6118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc906145f5565b60405180910390fd5b6118e1848484846128d0565b50505050565b6118ef611dec565b73ffffffffffffffffffffffffffffffffffffffff1661190d6115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90614535565b60405180910390fd5b61196b611355565b1561197d5761197861292c565b611986565b6119856129ce565b5b565b6060611992612a71565b61199b83612b03565b6040516020016119ac92919061419a565b6040516020818303038152906040529050919050565b60135481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a64611dec565b73ffffffffffffffffffffffffffffffffffffffff16611a826115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acf90614535565b60405180910390fd5b611ae28282612c64565b5050565b611aee611dec565b73ffffffffffffffffffffffffffffffffffffffff16611b0c6115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990614535565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc990614335565b60405180910390fd5b611bdb8161269d565b50565b611be6611dec565b73ffffffffffffffffffffffffffffffffffffffff16611c046115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5190614535565b60405180910390fd5b8060168190555050565b60175481565b611c72611dec565b73ffffffffffffffffffffffffffffffffffffffff16611c906115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdd90614535565b60405180910390fd5b8060158190555050565b6001816000016000828254019250508190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d795750611d7882612cab565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e678361136c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611eb882611d80565b611ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee90614435565b60405180910390fd5b6000611f028361136c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f7157508373ffffffffffffffffffffffffffffffffffffffff16611f5984610af1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f825750611f8181856119c8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611fab8261136c565b73ffffffffffffffffffffffffffffffffffffffff1614612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff890614355565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612071576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612068906143d5565b60405180910390fd5b61207c838383612d8d565b612087600082611df4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120d791906147ca565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461212e91906146e9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121ed838383612d9d565b505050565b426018541115612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e906145b5565b60405180910390fd5b42601954101561227c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612273906143b5565b60405180910390fd5b6000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590614495565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612389601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b03565b60405160200161239991906141c9565b604051602081830303815290604052906123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e09190614293565b60405180910390fd5b506000816017546123fa9190614770565b90508034101561243f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243690614395565b60405180910390fd5b600061244b600c612da2565b90506012546001848361245e91906146e9565b61246891906147ca565b106124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90614575565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612510573d6000803e3d6000fd5b5061251b8484612db0565b50505050565b426019541115612566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255d90614415565b60405180910390fd5b6000816016546125769190614770565b9050803410156125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290614395565b60405180910390fd5b60006125c7600c612da2565b9050601254600184836125da91906146e9565b6125e491906147ca565b10612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b90614575565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561268c573d6000803e3d6000fd5b506126978484612db0565b50505050565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c9906143f5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128c39190614278565b60405180910390a3505050565b6128db848484611f8b565b6128e784848484612df7565b612926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291d90614315565b60405180910390fd5b50505050565b612934611355565b612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296a906142d5565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6129b7611dec565b6040516129c491906141f6565b60405180910390a1565b6129d6611355565b15612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90614455565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a5a611dec565b604051612a6791906141f6565b60405180910390a1565b606060108054612a80906148c6565b80601f0160208091040260200160405190810160405280929190818152602001828054612aac906148c6565b8015612af95780601f10612ace57610100808354040283529160200191612af9565b820191906000526020600020905b815481529060010190602001808311612adc57829003601f168201915b5050505050905090565b60606000821415612b4b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c5f565b600082905060005b60008214612b7d578080612b6690614929565b915050600a82612b76919061473f565b9150612b53565b60008167ffffffffffffffff811115612b9957612b98614a8e565b5b6040519080825280601f01601f191660200182016040528015612bcb5781602001600182028036833780820191505090505b5090505b60008514612c5857600182612be491906147ca565b9150600a85612bf39190614972565b6030612bff91906146e9565b60f81b818381518110612c1557612c14614a5f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c51919061473f565b9450612bcf565b8093505050505b919050565b6000612c70600c612da2565b905060005b82811015612ca557612c92848284612c8d91906146e9565b612f8e565b8080612c9d90614929565b915050612c75565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d7657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d865750612d8582612fa6565b5b9050919050565b612d98838383613010565b505050565b505050565b600081600001549050919050565b6000612dbc600c612da2565b905060005b82811015612df157612dde848284612dd991906146e9565b613068565b8080612de990614929565b915050612dc1565b50505050565b6000612e188473ffffffffffffffffffffffffffffffffffffffff16613080565b15612f81578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e41611dec565b8786866040518563ffffffff1660e01b8152600401612e63949392919061422c565b602060405180830381600087803b158015612e7d57600080fd5b505af1925050508015612eae57506040513d601f19601f82011682018060405250810190612eab9190613bd7565b60015b612f31573d8060008114612ede576040519150601f19603f3d011682016040523d82523d6000602084013e612ee3565b606091505b50600081511415612f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2090614315565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f86565b600190505b949350505050565b612f9882826130a3565b612fa2600e611cf0565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61301b838383613100565b613023611355565b15613063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305a906142b5565b60405180910390fd5b505050565b61307282826130a3565b61307c600d611cf0565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6013548111156130e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130df906145d5565b60405180910390fd5b6130f28282613214565b6130fc600c611cf0565b5050565b61310b838383613232565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561314e5761314981613237565b61318d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461318c5761318b8382613280565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131d0576131cb816133ed565b61320f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461320e5761320d82826134be565b5b5b505050565b61322e82826040518060200160405280600081525061353d565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161328d84611424565b61329791906147ca565b905060006007600084815260200190815260200160002054905081811461337c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061340191906147ca565b905060006009600084815260200190815260200160002054905060006008838154811061343157613430614a5f565b5b90600052602060002001549050806008838154811061345357613452614a5f565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134a2576134a1614a30565b5b6001900381819060005260206000200160009055905550505050565b60006134c983611424565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6135478383613598565b6135546000848484612df7565b613593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358a90614315565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ff906144f5565b60405180910390fd5b61361181611d80565b15613651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364890614375565b60405180910390fd5b61365d60008383612d8d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136ad91906146e9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461376e60008383612d9d565b5050565b82805461377e906148c6565b90600052602060002090601f0160209004810192826137a057600085556137e7565b82601f106137b957803560ff19168380011785556137e7565b828001600101855582156137e7579182015b828111156137e65782358255916020019190600101906137cb565b5b5090506137f491906137f8565b5090565b5b808211156138115760008160009055506001016137f9565b5090565b600061382861382384614675565b614650565b90508281526020810184848401111561384457613843614acc565b5b61384f848285614884565b509392505050565b600081359050613866816151f7565b92915050565b60008083601f84011261388257613881614ac2565b5b8235905067ffffffffffffffff81111561389f5761389e614abd565b5b6020830191508360208202830111156138bb576138ba614ac7565b5b9250929050565b6000813590506138d18161520e565b92915050565b6000813590506138e681615225565b92915050565b6000815190506138fb81615225565b92915050565b600082601f83011261391657613915614ac2565b5b8135613926848260208601613815565b91505092915050565b60008083601f84011261394557613944614ac2565b5b8235905067ffffffffffffffff81111561396257613961614abd565b5b60208301915083600182028301111561397e5761397d614ac7565b5b9250929050565b6000813590506139948161523c565b92915050565b6000602082840312156139b0576139af614ad6565b5b60006139be84828501613857565b91505092915050565b600080604083850312156139de576139dd614ad6565b5b60006139ec85828601613857565b92505060206139fd85828601613857565b9150509250929050565b600080600060608486031215613a2057613a1f614ad6565b5b6000613a2e86828701613857565b9350506020613a3f86828701613857565b9250506040613a5086828701613985565b9150509250925092565b60008060008060808587031215613a7457613a73614ad6565b5b6000613a8287828801613857565b9450506020613a9387828801613857565b9350506040613aa487828801613985565b925050606085013567ffffffffffffffff811115613ac557613ac4614ad1565b5b613ad187828801613901565b91505092959194509250565b60008060408385031215613af457613af3614ad6565b5b6000613b0285828601613857565b9250506020613b13858286016138c2565b9150509250929050565b60008060408385031215613b3457613b33614ad6565b5b6000613b4285828601613857565b9250506020613b5385828601613985565b9150509250929050565b60008060208385031215613b7457613b73614ad6565b5b600083013567ffffffffffffffff811115613b9257613b91614ad1565b5b613b9e8582860161386c565b92509250509250929050565b600060208284031215613bc057613bbf614ad6565b5b6000613bce848285016138d7565b91505092915050565b600060208284031215613bed57613bec614ad6565b5b6000613bfb848285016138ec565b91505092915050565b60008060208385031215613c1b57613c1a614ad6565b5b600083013567ffffffffffffffff811115613c3957613c38614ad1565b5b613c458582860161392f565b92509250509250929050565b600060208284031215613c6757613c66614ad6565b5b6000613c7584828501613985565b91505092915050565b613c8781614810565b82525050565b613c96816147fe565b82525050565b613ca581614822565b82525050565b6000613cb6826146a6565b613cc081856146bc565b9350613cd0818560208601614893565b613cd981614adb565b840191505092915050565b6000613cef826146b1565b613cf981856146cd565b9350613d09818560208601614893565b613d1281614adb565b840191505092915050565b6000613d28826146b1565b613d3281856146de565b9350613d42818560208601614893565b80840191505092915050565b6000613d5b602b836146cd565b9150613d6682614aec565b604082019050919050565b6000613d7e6014836146cd565b9150613d8982614b3b565b602082019050919050565b6000613da1602b836146cd565b9150613dac82614b64565b604082019050919050565b6000613dc46032836146cd565b9150613dcf82614bb3565b604082019050919050565b6000613de76026836146cd565b9150613df282614c02565b604082019050919050565b6000613e0a6025836146cd565b9150613e1582614c51565b604082019050919050565b6000613e2d601c836146cd565b9150613e3882614ca0565b602082019050919050565b6000613e50600e836146cd565b9150613e5b82614cc9565b602082019050919050565b6000613e736014836146cd565b9150613e7e82614cf2565b602082019050919050565b6000613e966024836146cd565b9150613ea182614d1b565b604082019050919050565b6000613eb96019836146cd565b9150613ec482614d6a565b602082019050919050565b6000613edc6017836146cd565b9150613ee782614d93565b602082019050919050565b6000613eff602c836146cd565b9150613f0a82614dbc565b604082019050919050565b6000613f226010836146cd565b9150613f2d82614e0b565b602082019050919050565b6000613f456038836146cd565b9150613f5082614e34565b604082019050919050565b6000613f68601d836146cd565b9150613f7382614e83565b602082019050919050565b6000613f8b602a836146cd565b9150613f9682614eac565b604082019050919050565b6000613fae6029836146cd565b9150613fb982614efb565b604082019050919050565b6000613fd16020836146cd565b9150613fdc82614f4a565b602082019050919050565b6000613ff4602c836146cd565b9150613fff82614f73565b604082019050919050565b60006140176005836146de565b915061402282614fc2565b600582019050919050565b600061403a6020836146cd565b915061404582614feb565b602082019050919050565b600061405d6013836146cd565b915061406882615014565b602082019050919050565b6000614080600c836146cd565b915061408b8261503d565b602082019050919050565b60006140a36021836146cd565b91506140ae82615066565b604082019050919050565b60006140c6601a836146cd565b91506140d1826150b5565b602082019050919050565b60006140e96015836146cd565b91506140f4826150de565b602082019050919050565b600061410c6031836146cd565b915061411782615107565b604082019050919050565b600061412f602c836146cd565b915061413a82615156565b604082019050919050565b60006141526005836146de565b915061415d826151a5565b600582019050919050565b60006141756012836146de565b9150614180826151ce565b601282019050919050565b6141948161487a565b82525050565b60006141a68285613d1d565b91506141b28284613d1d565b91506141bd8261400a565b91508190509392505050565b60006141d482614168565b91506141e08284613d1d565b91506141eb82614145565b915081905092915050565b600060208201905061420b6000830184613c8d565b92915050565b60006020820190506142266000830184613c7e565b92915050565b60006080820190506142416000830187613c8d565b61424e6020830186613c8d565b61425b604083018561418b565b818103606083015261426d8184613cab565b905095945050505050565b600060208201905061428d6000830184613c9c565b92915050565b600060208201905081810360008301526142ad8184613ce4565b905092915050565b600060208201905081810360008301526142ce81613d4e565b9050919050565b600060208201905081810360008301526142ee81613d71565b9050919050565b6000602082019050818103600083015261430e81613d94565b9050919050565b6000602082019050818103600083015261432e81613db7565b9050919050565b6000602082019050818103600083015261434e81613dda565b9050919050565b6000602082019050818103600083015261436e81613dfd565b9050919050565b6000602082019050818103600083015261438e81613e20565b9050919050565b600060208201905081810360008301526143ae81613e43565b9050919050565b600060208201905081810360008301526143ce81613e66565b9050919050565b600060208201905081810360008301526143ee81613e89565b9050919050565b6000602082019050818103600083015261440e81613eac565b9050919050565b6000602082019050818103600083015261442e81613ecf565b9050919050565b6000602082019050818103600083015261444e81613ef2565b9050919050565b6000602082019050818103600083015261446e81613f15565b9050919050565b6000602082019050818103600083015261448e81613f38565b9050919050565b600060208201905081810360008301526144ae81613f5b565b9050919050565b600060208201905081810360008301526144ce81613f7e565b9050919050565b600060208201905081810360008301526144ee81613fa1565b9050919050565b6000602082019050818103600083015261450e81613fc4565b9050919050565b6000602082019050818103600083015261452e81613fe7565b9050919050565b6000602082019050818103600083015261454e8161402d565b9050919050565b6000602082019050818103600083015261456e81614050565b9050919050565b6000602082019050818103600083015261458e81614073565b9050919050565b600060208201905081810360008301526145ae81614096565b9050919050565b600060208201905081810360008301526145ce816140b9565b9050919050565b600060208201905081810360008301526145ee816140dc565b9050919050565b6000602082019050818103600083015261460e816140ff565b9050919050565b6000602082019050818103600083015261462e81614122565b9050919050565b600060208201905061464a600083018461418b565b92915050565b600061465a61466b565b905061466682826148f8565b919050565b6000604051905090565b600067ffffffffffffffff8211156146905761468f614a8e565b5b61469982614adb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146f48261487a565b91506146ff8361487a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614734576147336149a3565b5b828201905092915050565b600061474a8261487a565b91506147558361487a565b925082614765576147646149d2565b5b828204905092915050565b600061477b8261487a565b91506147868361487a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147bf576147be6149a3565b5b828202905092915050565b60006147d58261487a565b91506147e08361487a565b9250828210156147f3576147f26149a3565b5b828203905092915050565b60006148098261485a565b9050919050565b600061481b8261485a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148b1578082015181840152602081019050614896565b838111156148c0576000848401525b50505050565b600060028204905060018216806148de57607f821691505b602082108114156148f2576148f1614a01565b5b50919050565b61490182614adb565b810181811067ffffffffffffffff821117156149205761491f614a8e565b5b80604052505050565b60006149348261487a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614967576149666149a3565b5b600182019050919050565b600061497d8261487a565b91506149888361487a565b925082614998576149976149d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f57686974656c6973742073616c6520656e646564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5075626c69632073616c65206e6f742073746172746564000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f45786365656465642077686974656c697374206d696e74206c696d6974000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f416464726573732063616e6e6f74206265203000000000000000000000000000600082015250565b7f43616e6e6f7420636c61696d0000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c6973742073616c65206e6f742073746172746564000000000000600082015250565b7f546f6b656e206c696d6974206578636565646564210000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f206d6f7265000000000000000000000000000000000000000000000000000000600082015250565b7f596f752063616e206d696e74206a757374200000000000000000000000000000600082015250565b615200816147fe565b811461520b57600080fd5b50565b61521781614822565b811461522257600080fd5b50565b61522e8161482e565b811461523957600080fd5b50565b6152458161487a565b811461525057600080fd5b5056fea2646970667358221220fd7e1e494bf5a6d8178c5d2443a386aa7d6194a2f4817e476429c76b0aba4a3d64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102725760003560e01c80635c975abb1161014f578063adb61832116100c1578063e985e9c51161007a578063e985e9c514610941578063f00388f71461097e578063f2fde38b146109a7578063f4a0a528146109d0578063fc1a1c36146109f9578063feafe04314610a2457610272565b8063adb6183214610845578063b23695ca14610870578063b88d4fde14610899578063c4ae3168146108c2578063c87b56dd146108d9578063e83157421461091657610272565b8063717d57d311610113578063717d57d3146107495780638da5cb5b1461077257806395d89b411461079d5780639b19251a146107c85780639fa719b5146107f1578063a22cb4651461081c57610272565b80635c975abb146106625780636352211e1461068d5780636817c76c146106ca57806370a08231146106f5578063715018a61461073257610272565b80632f745c59116101e857806342842e0e116101ac57806342842e0e14610554578063459ba3ae1461057d5780634685e1a0146105a85780634f6ccce7146105d357806355f804b3146106105780635b3eed5c1461063957610272565b80632f745c591461046a5780633360caa0146104a7578063379607f5146104d25780633af32abf146104ee5780633e16039c1461052b57610272565b806318160ddd1161023a57806318160ddd1461036e5780632154dc391461039957806323b872dd146103c457806325d387b5146103ed5780632bf04304146104165780632c4889e41461043f57610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063095ea7b31461031c5780630ca282f714610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613baa565b610a4d565b6040516102ab9190614278565b60405180910390f35b3480156102c057600080fd5b506102c9610a5f565b6040516102d69190614293565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613c51565b610af1565b60405161031391906141f6565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613b1d565b610b76565b005b34801561035157600080fd5b5061036c60048036038101906103679190613c51565b610c8e565b005b34801561037a57600080fd5b50610383610d14565b6040516103909190614635565b60405180910390f35b3480156103a557600080fd5b506103ae610d21565b6040516103bb9190614635565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190613a07565b610d27565b005b3480156103f957600080fd5b50610414600480360381019061040f9190613c51565b610d87565b005b34801561042257600080fd5b5061043d60048036038101906104389190613b5d565b610e23565b005b34801561044b57600080fd5b50610454610ef5565b6040516104619190614635565b60405180910390f35b34801561047657600080fd5b50610491600480360381019061048c9190613b1d565b610efb565b60405161049e9190614635565b60405180910390f35b3480156104b357600080fd5b506104bc610fa0565b6040516104c99190614635565b60405180910390f35b6104ec60048036038101906104e79190613c51565b610fa6565b005b3480156104fa57600080fd5b506105156004803603810190610510919061399a565b611026565b6040516105229190614278565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613c51565b6110aa565b005b34801561056057600080fd5b5061057b60048036038101906105769190613a07565b611146565b005b34801561058957600080fd5b50610592611166565b60405161059f9190614635565b60405180910390f35b3480156105b457600080fd5b506105bd61116c565b6040516105ca9190614211565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f59190613c51565b611192565b6040516106079190614635565b60405180910390f35b34801561061c57600080fd5b5061063760048036038101906106329190613c04565b611203565b005b34801561064557600080fd5b50610660600480360381019061065b919061399a565b611295565b005b34801561066e57600080fd5b50610677611355565b6040516106849190614278565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190613c51565b61136c565b6040516106c191906141f6565b60405180910390f35b3480156106d657600080fd5b506106df61141e565b6040516106ec9190614635565b60405180910390f35b34801561070157600080fd5b5061071c6004803603810190610717919061399a565b611424565b6040516107299190614635565b60405180910390f35b34801561073e57600080fd5b506107476114dc565b005b34801561075557600080fd5b50610770600480360381019061076b9190613c51565b611564565b005b34801561077e57600080fd5b506107876115ea565b60405161079491906141f6565b60405180910390f35b3480156107a957600080fd5b506107b2611614565b6040516107bf9190614293565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea919061399a565b6116a6565b005b3480156107fd57600080fd5b506108066117db565b6040516108139190614635565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190613add565b6117e1565b005b34801561085157600080fd5b5061085a6117f7565b6040516108679190614635565b60405180910390f35b34801561087c57600080fd5b5061089760048036038101906108929190613c51565b6117ff565b005b3480156108a557600080fd5b506108c060048036038101906108bb9190613a5a565b611885565b005b3480156108ce57600080fd5b506108d76118e7565b005b3480156108e557600080fd5b5061090060048036038101906108fb9190613c51565b611988565b60405161090d9190614293565b60405180910390f35b34801561092257600080fd5b5061092b6119c2565b6040516109389190614635565b60405180910390f35b34801561094d57600080fd5b50610968600480360381019061096391906139c7565b6119c8565b6040516109759190614278565b60405180910390f35b34801561098a57600080fd5b506109a560048036038101906109a09190613b1d565b611a5c565b005b3480156109b357600080fd5b506109ce60048036038101906109c9919061399a565b611ae6565b005b3480156109dc57600080fd5b506109f760048036038101906109f29190613c51565b611bde565b005b348015610a0557600080fd5b50610a0e611c64565b604051610a1b9190614635565b60405180910390f35b348015610a3057600080fd5b50610a4b6004803603810190610a469190613c51565b611c6a565b005b6000610a5882611d06565b9050919050565b606060008054610a6e906148c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9a906148c6565b8015610ae75780601f10610abc57610100808354040283529160200191610ae7565b820191906000526020600020905b815481529060010190602001808311610aca57829003601f168201915b5050505050905090565b6000610afc82611d80565b610b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3290614515565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b818261136c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be990614595565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c11611dec565b73ffffffffffffffffffffffffffffffffffffffff161480610c405750610c3f81610c3a611dec565b6119c8565b5b610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690614475565b60405180910390fd5b610c898383611df4565b505050565b610c96611dec565b73ffffffffffffffffffffffffffffffffffffffff16610cb46115ea565b73ffffffffffffffffffffffffffffffffffffffff1614610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0190614535565b60405180910390fd5b8060198190555050565b6000600880549050905090565b60125481565b610d38610d32611dec565b82611ead565b610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e906145f5565b60405180910390fd5b610d82838383611f8b565b505050565b610d8f611dec565b73ffffffffffffffffffffffffffffffffffffffff16610dad6115ea565b73ffffffffffffffffffffffffffffffffffffffff1614610e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfa90614535565b60405180910390fd5b80601281905550601254601354610e1a91906147ca565b60148190555050565b610e2b611dec565b73ffffffffffffffffffffffffffffffffffffffff16610e496115ea565b73ffffffffffffffffffffffffffffffffffffffff1614610e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9690614535565b60405180910390fd5b60005b82829050811015610ef057610edd838383818110610ec357610ec2614a5f565b5b9050602002016020810190610ed8919061399a565b6116a6565b8080610ee890614929565b915050610ea2565b505050565b60155481565b6000610f0683611424565b8210610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e906142f5565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60195481565b610fae611355565b15610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe590614455565b60405180910390fd5b610ff733611026565b8015611004575042601954115b156110185761101333826121f2565b611023565b6110223382612521565b5b50565b600080601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180156110a35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6110b2611dec565b73ffffffffffffffffffffffffffffffffffffffff166110d06115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90614535565b60405180910390fd5b8060148190555060145460135461113d91906147ca565b60128190555050565b61116183838360405180602001604052806000815250611885565b505050565b60145481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061119c610d14565b82106111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d490614615565b60405180910390fd5b600882815481106111f1576111f0614a5f565b5b90600052602060002001549050919050565b61120b611dec565b73ffffffffffffffffffffffffffffffffffffffff166112296115ea565b73ffffffffffffffffffffffffffffffffffffffff161461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690614535565b60405180910390fd5b818160109190611290929190613772565b505050565b61129d611dec565b73ffffffffffffffffffffffffffffffffffffffff166112bb6115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890614535565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c906144d5565b60405180910390fd5b80915050919050565b60165481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c906144b5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114e4611dec565b73ffffffffffffffffffffffffffffffffffffffff166115026115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90614535565b60405180910390fd5b611562600061269d565b565b61156c611dec565b73ffffffffffffffffffffffffffffffffffffffff1661158a6115ea565b73ffffffffffffffffffffffffffffffffffffffff16146115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790614535565b60405180910390fd5b8060178190555050565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611623906148c6565b80601f016020809104026020016040519081016040528092919081815260200182805461164f906148c6565b801561169c5780601f106116715761010080835404028352916020019161169c565b820191906000526020600020905b81548152906001019060200180831161167f57829003601f168201915b5050505050905090565b6116ae611dec565b73ffffffffffffffffffffffffffffffffffffffff166116cc6115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171990614535565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990614555565b60405180910390fd5b601554601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60185481565b6117f36117ec611dec565b8383612763565b5050565b600042905090565b611807611dec565b73ffffffffffffffffffffffffffffffffffffffff166118256115ea565b73ffffffffffffffffffffffffffffffffffffffff161461187b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187290614535565b60405180910390fd5b8060188190555050565b611896611890611dec565b83611ead565b6118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc906145f5565b60405180910390fd5b6118e1848484846128d0565b50505050565b6118ef611dec565b73ffffffffffffffffffffffffffffffffffffffff1661190d6115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90614535565b60405180910390fd5b61196b611355565b1561197d5761197861292c565b611986565b6119856129ce565b5b565b6060611992612a71565b61199b83612b03565b6040516020016119ac92919061419a565b6040516020818303038152906040529050919050565b60135481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a64611dec565b73ffffffffffffffffffffffffffffffffffffffff16611a826115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acf90614535565b60405180910390fd5b611ae28282612c64565b5050565b611aee611dec565b73ffffffffffffffffffffffffffffffffffffffff16611b0c6115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990614535565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc990614335565b60405180910390fd5b611bdb8161269d565b50565b611be6611dec565b73ffffffffffffffffffffffffffffffffffffffff16611c046115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5190614535565b60405180910390fd5b8060168190555050565b60175481565b611c72611dec565b73ffffffffffffffffffffffffffffffffffffffff16611c906115ea565b73ffffffffffffffffffffffffffffffffffffffff1614611ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdd90614535565b60405180910390fd5b8060158190555050565b6001816000016000828254019250508190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d795750611d7882612cab565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e678361136c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611eb882611d80565b611ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee90614435565b60405180910390fd5b6000611f028361136c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f7157508373ffffffffffffffffffffffffffffffffffffffff16611f5984610af1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f825750611f8181856119c8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611fab8261136c565b73ffffffffffffffffffffffffffffffffffffffff1614612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff890614355565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612071576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612068906143d5565b60405180910390fd5b61207c838383612d8d565b612087600082611df4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120d791906147ca565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461212e91906146e9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121ed838383612d9d565b505050565b426018541115612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e906145b5565b60405180910390fd5b42601954101561227c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612273906143b5565b60405180910390fd5b6000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590614495565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612389601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b03565b60405160200161239991906141c9565b604051602081830303815290604052906123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e09190614293565b60405180910390fd5b506000816017546123fa9190614770565b90508034101561243f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243690614395565b60405180910390fd5b600061244b600c612da2565b90506012546001848361245e91906146e9565b61246891906147ca565b106124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90614575565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612510573d6000803e3d6000fd5b5061251b8484612db0565b50505050565b426019541115612566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255d90614415565b60405180910390fd5b6000816016546125769190614770565b9050803410156125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290614395565b60405180910390fd5b60006125c7600c612da2565b9050601254600184836125da91906146e9565b6125e491906147ca565b10612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b90614575565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561268c573d6000803e3d6000fd5b506126978484612db0565b50505050565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c9906143f5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128c39190614278565b60405180910390a3505050565b6128db848484611f8b565b6128e784848484612df7565b612926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291d90614315565b60405180910390fd5b50505050565b612934611355565b612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296a906142d5565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6129b7611dec565b6040516129c491906141f6565b60405180910390a1565b6129d6611355565b15612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90614455565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a5a611dec565b604051612a6791906141f6565b60405180910390a1565b606060108054612a80906148c6565b80601f0160208091040260200160405190810160405280929190818152602001828054612aac906148c6565b8015612af95780601f10612ace57610100808354040283529160200191612af9565b820191906000526020600020905b815481529060010190602001808311612adc57829003601f168201915b5050505050905090565b60606000821415612b4b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c5f565b600082905060005b60008214612b7d578080612b6690614929565b915050600a82612b76919061473f565b9150612b53565b60008167ffffffffffffffff811115612b9957612b98614a8e565b5b6040519080825280601f01601f191660200182016040528015612bcb5781602001600182028036833780820191505090505b5090505b60008514612c5857600182612be491906147ca565b9150600a85612bf39190614972565b6030612bff91906146e9565b60f81b818381518110612c1557612c14614a5f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c51919061473f565b9450612bcf565b8093505050505b919050565b6000612c70600c612da2565b905060005b82811015612ca557612c92848284612c8d91906146e9565b612f8e565b8080612c9d90614929565b915050612c75565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d7657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d865750612d8582612fa6565b5b9050919050565b612d98838383613010565b505050565b505050565b600081600001549050919050565b6000612dbc600c612da2565b905060005b82811015612df157612dde848284612dd991906146e9565b613068565b8080612de990614929565b915050612dc1565b50505050565b6000612e188473ffffffffffffffffffffffffffffffffffffffff16613080565b15612f81578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e41611dec565b8786866040518563ffffffff1660e01b8152600401612e63949392919061422c565b602060405180830381600087803b158015612e7d57600080fd5b505af1925050508015612eae57506040513d601f19601f82011682018060405250810190612eab9190613bd7565b60015b612f31573d8060008114612ede576040519150601f19603f3d011682016040523d82523d6000602084013e612ee3565b606091505b50600081511415612f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2090614315565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f86565b600190505b949350505050565b612f9882826130a3565b612fa2600e611cf0565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61301b838383613100565b613023611355565b15613063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305a906142b5565b60405180910390fd5b505050565b61307282826130a3565b61307c600d611cf0565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6013548111156130e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130df906145d5565b60405180910390fd5b6130f28282613214565b6130fc600c611cf0565b5050565b61310b838383613232565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561314e5761314981613237565b61318d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461318c5761318b8382613280565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131d0576131cb816133ed565b61320f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461320e5761320d82826134be565b5b5b505050565b61322e82826040518060200160405280600081525061353d565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161328d84611424565b61329791906147ca565b905060006007600084815260200190815260200160002054905081811461337c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061340191906147ca565b905060006009600084815260200190815260200160002054905060006008838154811061343157613430614a5f565b5b90600052602060002001549050806008838154811061345357613452614a5f565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134a2576134a1614a30565b5b6001900381819060005260206000200160009055905550505050565b60006134c983611424565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6135478383613598565b6135546000848484612df7565b613593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358a90614315565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ff906144f5565b60405180910390fd5b61361181611d80565b15613651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364890614375565b60405180910390fd5b61365d60008383612d8d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136ad91906146e9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461376e60008383612d9d565b5050565b82805461377e906148c6565b90600052602060002090601f0160209004810192826137a057600085556137e7565b82601f106137b957803560ff19168380011785556137e7565b828001600101855582156137e7579182015b828111156137e65782358255916020019190600101906137cb565b5b5090506137f491906137f8565b5090565b5b808211156138115760008160009055506001016137f9565b5090565b600061382861382384614675565b614650565b90508281526020810184848401111561384457613843614acc565b5b61384f848285614884565b509392505050565b600081359050613866816151f7565b92915050565b60008083601f84011261388257613881614ac2565b5b8235905067ffffffffffffffff81111561389f5761389e614abd565b5b6020830191508360208202830111156138bb576138ba614ac7565b5b9250929050565b6000813590506138d18161520e565b92915050565b6000813590506138e681615225565b92915050565b6000815190506138fb81615225565b92915050565b600082601f83011261391657613915614ac2565b5b8135613926848260208601613815565b91505092915050565b60008083601f84011261394557613944614ac2565b5b8235905067ffffffffffffffff81111561396257613961614abd565b5b60208301915083600182028301111561397e5761397d614ac7565b5b9250929050565b6000813590506139948161523c565b92915050565b6000602082840312156139b0576139af614ad6565b5b60006139be84828501613857565b91505092915050565b600080604083850312156139de576139dd614ad6565b5b60006139ec85828601613857565b92505060206139fd85828601613857565b9150509250929050565b600080600060608486031215613a2057613a1f614ad6565b5b6000613a2e86828701613857565b9350506020613a3f86828701613857565b9250506040613a5086828701613985565b9150509250925092565b60008060008060808587031215613a7457613a73614ad6565b5b6000613a8287828801613857565b9450506020613a9387828801613857565b9350506040613aa487828801613985565b925050606085013567ffffffffffffffff811115613ac557613ac4614ad1565b5b613ad187828801613901565b91505092959194509250565b60008060408385031215613af457613af3614ad6565b5b6000613b0285828601613857565b9250506020613b13858286016138c2565b9150509250929050565b60008060408385031215613b3457613b33614ad6565b5b6000613b4285828601613857565b9250506020613b5385828601613985565b9150509250929050565b60008060208385031215613b7457613b73614ad6565b5b600083013567ffffffffffffffff811115613b9257613b91614ad1565b5b613b9e8582860161386c565b92509250509250929050565b600060208284031215613bc057613bbf614ad6565b5b6000613bce848285016138d7565b91505092915050565b600060208284031215613bed57613bec614ad6565b5b6000613bfb848285016138ec565b91505092915050565b60008060208385031215613c1b57613c1a614ad6565b5b600083013567ffffffffffffffff811115613c3957613c38614ad1565b5b613c458582860161392f565b92509250509250929050565b600060208284031215613c6757613c66614ad6565b5b6000613c7584828501613985565b91505092915050565b613c8781614810565b82525050565b613c96816147fe565b82525050565b613ca581614822565b82525050565b6000613cb6826146a6565b613cc081856146bc565b9350613cd0818560208601614893565b613cd981614adb565b840191505092915050565b6000613cef826146b1565b613cf981856146cd565b9350613d09818560208601614893565b613d1281614adb565b840191505092915050565b6000613d28826146b1565b613d3281856146de565b9350613d42818560208601614893565b80840191505092915050565b6000613d5b602b836146cd565b9150613d6682614aec565b604082019050919050565b6000613d7e6014836146cd565b9150613d8982614b3b565b602082019050919050565b6000613da1602b836146cd565b9150613dac82614b64565b604082019050919050565b6000613dc46032836146cd565b9150613dcf82614bb3565b604082019050919050565b6000613de76026836146cd565b9150613df282614c02565b604082019050919050565b6000613e0a6025836146cd565b9150613e1582614c51565b604082019050919050565b6000613e2d601c836146cd565b9150613e3882614ca0565b602082019050919050565b6000613e50600e836146cd565b9150613e5b82614cc9565b602082019050919050565b6000613e736014836146cd565b9150613e7e82614cf2565b602082019050919050565b6000613e966024836146cd565b9150613ea182614d1b565b604082019050919050565b6000613eb96019836146cd565b9150613ec482614d6a565b602082019050919050565b6000613edc6017836146cd565b9150613ee782614d93565b602082019050919050565b6000613eff602c836146cd565b9150613f0a82614dbc565b604082019050919050565b6000613f226010836146cd565b9150613f2d82614e0b565b602082019050919050565b6000613f456038836146cd565b9150613f5082614e34565b604082019050919050565b6000613f68601d836146cd565b9150613f7382614e83565b602082019050919050565b6000613f8b602a836146cd565b9150613f9682614eac565b604082019050919050565b6000613fae6029836146cd565b9150613fb982614efb565b604082019050919050565b6000613fd16020836146cd565b9150613fdc82614f4a565b602082019050919050565b6000613ff4602c836146cd565b9150613fff82614f73565b604082019050919050565b60006140176005836146de565b915061402282614fc2565b600582019050919050565b600061403a6020836146cd565b915061404582614feb565b602082019050919050565b600061405d6013836146cd565b915061406882615014565b602082019050919050565b6000614080600c836146cd565b915061408b8261503d565b602082019050919050565b60006140a36021836146cd565b91506140ae82615066565b604082019050919050565b60006140c6601a836146cd565b91506140d1826150b5565b602082019050919050565b60006140e96015836146cd565b91506140f4826150de565b602082019050919050565b600061410c6031836146cd565b915061411782615107565b604082019050919050565b600061412f602c836146cd565b915061413a82615156565b604082019050919050565b60006141526005836146de565b915061415d826151a5565b600582019050919050565b60006141756012836146de565b9150614180826151ce565b601282019050919050565b6141948161487a565b82525050565b60006141a68285613d1d565b91506141b28284613d1d565b91506141bd8261400a565b91508190509392505050565b60006141d482614168565b91506141e08284613d1d565b91506141eb82614145565b915081905092915050565b600060208201905061420b6000830184613c8d565b92915050565b60006020820190506142266000830184613c7e565b92915050565b60006080820190506142416000830187613c8d565b61424e6020830186613c8d565b61425b604083018561418b565b818103606083015261426d8184613cab565b905095945050505050565b600060208201905061428d6000830184613c9c565b92915050565b600060208201905081810360008301526142ad8184613ce4565b905092915050565b600060208201905081810360008301526142ce81613d4e565b9050919050565b600060208201905081810360008301526142ee81613d71565b9050919050565b6000602082019050818103600083015261430e81613d94565b9050919050565b6000602082019050818103600083015261432e81613db7565b9050919050565b6000602082019050818103600083015261434e81613dda565b9050919050565b6000602082019050818103600083015261436e81613dfd565b9050919050565b6000602082019050818103600083015261438e81613e20565b9050919050565b600060208201905081810360008301526143ae81613e43565b9050919050565b600060208201905081810360008301526143ce81613e66565b9050919050565b600060208201905081810360008301526143ee81613e89565b9050919050565b6000602082019050818103600083015261440e81613eac565b9050919050565b6000602082019050818103600083015261442e81613ecf565b9050919050565b6000602082019050818103600083015261444e81613ef2565b9050919050565b6000602082019050818103600083015261446e81613f15565b9050919050565b6000602082019050818103600083015261448e81613f38565b9050919050565b600060208201905081810360008301526144ae81613f5b565b9050919050565b600060208201905081810360008301526144ce81613f7e565b9050919050565b600060208201905081810360008301526144ee81613fa1565b9050919050565b6000602082019050818103600083015261450e81613fc4565b9050919050565b6000602082019050818103600083015261452e81613fe7565b9050919050565b6000602082019050818103600083015261454e8161402d565b9050919050565b6000602082019050818103600083015261456e81614050565b9050919050565b6000602082019050818103600083015261458e81614073565b9050919050565b600060208201905081810360008301526145ae81614096565b9050919050565b600060208201905081810360008301526145ce816140b9565b9050919050565b600060208201905081810360008301526145ee816140dc565b9050919050565b6000602082019050818103600083015261460e816140ff565b9050919050565b6000602082019050818103600083015261462e81614122565b9050919050565b600060208201905061464a600083018461418b565b92915050565b600061465a61466b565b905061466682826148f8565b919050565b6000604051905090565b600067ffffffffffffffff8211156146905761468f614a8e565b5b61469982614adb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006146f48261487a565b91506146ff8361487a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614734576147336149a3565b5b828201905092915050565b600061474a8261487a565b91506147558361487a565b925082614765576147646149d2565b5b828204905092915050565b600061477b8261487a565b91506147868361487a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147bf576147be6149a3565b5b828202905092915050565b60006147d58261487a565b91506147e08361487a565b9250828210156147f3576147f26149a3565b5b828203905092915050565b60006148098261485a565b9050919050565b600061481b8261485a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148b1578082015181840152602081019050614896565b838111156148c0576000848401525b50505050565b600060028204905060018216806148de57607f821691505b602082108114156148f2576148f1614a01565b5b50919050565b61490182614adb565b810181811067ffffffffffffffff821117156149205761491f614a8e565b5b80604052505050565b60006149348261487a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614967576149666149a3565b5b600182019050919050565b600061497d8261487a565b91506149888361487a565b925082614998576149976149d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f57686974656c6973742073616c6520656e646564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5075626c69632073616c65206e6f742073746172746564000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f45786365656465642077686974656c697374206d696e74206c696d6974000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f416464726573732063616e6e6f74206265203000000000000000000000000000600082015250565b7f43616e6e6f7420636c61696d0000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c6973742073616c65206e6f742073746172746564000000000000600082015250565b7f546f6b656e206c696d6974206578636565646564210000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f206d6f7265000000000000000000000000000000000000000000000000000000600082015250565b7f596f752063616e206d696e74206a757374200000000000000000000000000000600082015250565b615200816147fe565b811461520b57600080fd5b50565b61521781614822565b811461522257600080fd5b50565b61522e8161482e565b811461523957600080fd5b50565b6152458161487a565b811461525057600080fd5b5056fea2646970667358221220fd7e1e494bf5a6d8178c5d2443a386aa7d6194a2f4817e476429c76b0aba4a3d64736f6c63430008070033
Deployed Bytecode Sourcemap
52318:6407:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58551:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29917:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31476:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30999:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56933:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46702:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52759:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32226:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57734:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53491:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52880:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46370:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53095:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53807:277;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53667:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57566:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32636:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52841:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52713:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46892:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56683:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57057:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8144:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29611:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52921:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29341:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;;;;;;;;;;;:::i;:::-;;57434:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5544:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30086:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53322:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53012:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31769:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55498:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56803:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32892:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56525:150;;;;;;;;;;;;;:::i;:::-;;57902:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52801:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31995:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54092:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6453:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57322:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52964:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57198:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58551:171;58654:4;58678:36;58702:11;58678:23;:36::i;:::-;58671:43;;58551:171;;;:::o;29917:100::-;29971:13;30004:5;29997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29917:100;:::o;31476:221::-;31552:7;31580:16;31588:7;31580;:16::i;:::-;31572:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31665:15;:24;31681:7;31665:24;;;;;;;;;;;;;;;;;;;;;31658:31;;31476:221;;;:::o;30999:411::-;31080:13;31096:23;31111:7;31096:14;:23::i;:::-;31080:39;;31144:5;31138:11;;:2;:11;;;;31130:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31238:5;31222:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31247:37;31264:5;31271:12;:10;:12::i;:::-;31247:16;:37::i;:::-;31222:62;31200:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31381:21;31390:2;31394:7;31381:8;:21::i;:::-;31069:341;30999:411;;:::o;56933:116::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57029:12:::1;57011:15;:30;;;;56933:116:::0;:::o;46702:113::-;46763:7;46790:10;:17;;;;46783:24;;46702:113;:::o;52759:33::-;;;;:::o;32226:339::-;32421:41;32440:12;:10;:12::i;:::-;32454:7;32421:18;:41::i;:::-;32413:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32529:28;32539:4;32545:2;32549:7;32529:9;:28::i;:::-;32226:339;;;:::o;57734:160::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57824:14:::1;57810:11;:28;;;;57875:11;;57863:9;;:23;;;;:::i;:::-;57849:11;:37;;;;57734:160:::0;:::o;53491:168::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53577:6:::1;53572:80;53593:2;;:9;;53589:1;:13;53572:80;;;53624:16;53634:2;;53637:1;53634:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;53624:9;:16::i;:::-;53604:3;;;;;:::i;:::-;;;;53572:80;;;;53491:168:::0;;:::o;52880:32::-;;;;:::o;46370:256::-;46467:7;46503:23;46520:5;46503:16;:23::i;:::-;46495:5;:31;46487:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;46592:12;:19;46605:5;46592:19;;;;;;;;;;;;;;;:26;46612:5;46592:26;;;;;;;;;;;;46585:33;;46370:256;;;;:::o;53095:46::-;;;;:::o;53807:277::-;8470:8;:6;:8::i;:::-;8469:9;8461:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;53886:25:::1;53900:10;53886:13;:25::i;:::-;:62;;;;;53933:15;53915;;:33;53886:62;53882:195;;;53965:35;53979:10;53991:8;53965:13;:35::i;:::-;53882:195;;;54033:32;54044:10;54056:8;54033:10;:32::i;:::-;53882:195;53807:277:::0;:::o;53667:132::-;53723:4;53770:1;53747:16;:20;53764:2;53747:20;;;;;;;;;;;;;;;;:24;:44;;;;;53789:1;53775:16;;:2;:16;;;;53747:44;53740:51;;53667:132;;;:::o;57566:160::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57656:14:::1;57642:11;:28;;;;57707:11;;57695:9;;:23;;;;:::i;:::-;57681:11;:37;;;;57566:160:::0;:::o;32636:185::-;32774:39;32791:4;32797:2;32801:7;32774:39;;;;;;;;;;;;:16;:39::i;:::-;32636:185;;;:::o;52841:30::-;;;;:::o;52713:37::-;;;;;;;;;;;;;:::o;46892:233::-;46967:7;47003:30;:28;:30::i;:::-;46995:5;:38;46987:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;47100:10;47111:5;47100:17;;;;;;;;:::i;:::-;;;;;;;;;;47093:24;;46892:233;;;:::o;56683:112::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56777:10:::1;;56759:15;:28;;;;;;;:::i;:::-;;56683:112:::0;;:::o;57057:133::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57164:17:::1;57139:14;;:43;;;;;;;;;;;;;;;;;;57057:133:::0;:::o;8144:86::-;8191:4;8215:7;;;;;;;;;;;8208:14;;8144:86;:::o;29611:239::-;29683:7;29703:13;29719:7;:16;29727:7;29719:16;;;;;;;;;;;;;;;;;;;;;29703:32;;29771:1;29754:19;;:5;:19;;;;29746:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29837:5;29830:12;;;29611:239;;;:::o;52921:34::-;;;;:::o;29341:208::-;29413:7;29458:1;29441:19;;:5;:19;;;;29433:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29525:9;:16;29535:5;29525:16;;;;;;;;;;;;;;;;29518:23;;29341:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;57434:124::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57533:17:::1;57516:14;:34;;;;57434:124:::0;:::o;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;30086:104::-;30142:13;30175:7;30168:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30086:104;:::o;53322:161::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53403:1:::1;53389:16;;:2;:16;;;;53381:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;53463:12;;53440:16;:20;53457:2;53440:20;;;;;;;;;;;;;;;:35;;;;53322:161:::0;:::o;53012:49::-;;;;:::o;31769:155::-;31864:52;31883:12;:10;:12::i;:::-;31897:8;31907;31864:18;:52::i;:::-;31769:155;;:::o;55498:97::-;55545:7;55572:15;55565:22;;55498:97;:::o;56803:122::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56905:12:::1;56884:18;:33;;;;56803:122:::0;:::o;32892:328::-;33067:41;33086:12;:10;:12::i;:::-;33100:7;33067:18;:41::i;:::-;33059:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33173:39;33187:4;33193:2;33197:7;33206:5;33173:13;:39::i;:::-;32892:328;;;;:::o;56525:150::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56580:8:::1;:6;:8::i;:::-;56576:92;;;56605:10;:8;:10::i;:::-;56576:92;;;56648:8;:6;:8::i;:::-;56576:92;56525:150::o:0;57902:197::-;57993:13;58050:10;:8;:10::i;:::-;58062:18;:7;:16;:18::i;:::-;58033:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;58019:72;;57902:197;;;:::o;52801:31::-;;;;:::o;31995:164::-;32092:4;32116:18;:25;32135:5;32116:25;;;;;;;;;;;;;;;:35;32142:8;32116:35;;;;;;;;;;;;;;;;;;;;;;;;;32109:42;;31995:164;;;;:::o;54092:106::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54166:24:::1;54177:2;54181:8;54166:10;:24::i;:::-;54092:106:::0;;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;57322:104::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57406:12:::1;57394:9;:24;;;;57322:104:::0;:::o;52964:39::-;;;;:::o;57198:116::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57291:15:::1;57276:12;:30;;;;57198:116:::0;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;46062:224::-;46164:4;46203:35;46188:50;;;:11;:50;;;;:90;;;;46242:36;46266:11;46242:23;:36::i;:::-;46188:90;46181:97;;46062:224;;;:::o;34730:127::-;34795:4;34847:1;34819:30;;:7;:16;34827:7;34819:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34812:37;;34730:127;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;38876:174::-;38978:2;38951:15;:24;38967:7;38951:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39034:7;39030:2;38996:46;;39005:23;39020:7;39005:14;:23::i;:::-;38996:46;;;;;;;;;;;;38876:174;;:::o;35024:348::-;35117:4;35142:16;35150:7;35142;:16::i;:::-;35134:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35218:13;35234:23;35249:7;35234:14;:23::i;:::-;35218:39;;35287:5;35276:16;;:7;:16;;;:51;;;;35320:7;35296:31;;:20;35308:7;35296:11;:20::i;:::-;:31;;;35276:51;:87;;;;35331:32;35348:5;35355:7;35331:16;:32::i;:::-;35276:87;35268:96;;;35024:348;;;;:::o;38133:625::-;38292:4;38265:31;;:23;38280:7;38265:14;:23::i;:::-;:31;;;38257:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;38371:1;38357:16;;:2;:16;;;;38349:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38427:39;38448:4;38454:2;38458:7;38427:20;:39::i;:::-;38531:29;38548:1;38552:7;38531:8;:29::i;:::-;38592:1;38573:9;:15;38583:4;38573:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38621:1;38604:9;:13;38614:2;38604:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38652:2;38633:7;:16;38641:7;38633:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38691:7;38687:2;38672:27;;38681:4;38672:27;;;;;;;;;;;;38712:38;38732:4;38738:2;38742:7;38712:19;:38::i;:::-;38133:625;;;:::o;54678:812::-;54781:15;54759:18;;:37;;54751:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;54865:15;54846;;:34;;54838:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;54947:1;54924:16;:20;54941:2;54924:20;;;;;;;;;;;;;;;;:24;54916:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;55039:8;55015:16;:20;55032:2;55015:20;;;;;;;;;;;;;;;;:32;;55108:31;:16;:20;55125:2;55108:20;;;;;;;;;;;;;;;;:29;:31::i;:::-;55069:80;;;;;;;;:::i;:::-;;;;;;;;;;;;;54993:168;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;55172:18;55210:8;55193:14;;:25;;;;:::i;:::-;55172:46;;55250:10;55237:9;:23;;55229:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;55290:15;55308:19;:9;:17;:19::i;:::-;55290:37;;55373:11;;55368:1;55357:8;55347:7;:18;;;;:::i;:::-;:22;;;;:::i;:::-;55346:38;55338:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;55412:14;;;;;;;;;;;:23;;:35;55436:10;55412:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55458:24;55469:2;55473:8;55458:10;:24::i;:::-;54740:750;;54678:812;;:::o;54206:464::-;54303:15;54284;;:34;;54276:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;54357:18;54390:8;54378:9;;:20;;;;:::i;:::-;54357:41;;54430:10;54417:9;:23;;54409:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;54470:15;54488:19;:9;:17;:19::i;:::-;54470:37;;54553:11;;54548:1;54537:8;54527:7;:18;;;;:::i;:::-;:22;;;;:::i;:::-;54526:38;54518:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;54592:14;;;;;;;;;;;:23;;:35;54616:10;54592:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54638:24;54649:2;54653:8;54638:10;:24::i;:::-;54265:405;;54206:464;;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;39192:315::-;39347:8;39338:17;;:5;:17;;;;39330:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39434:8;39396:18;:25;39415:5;39396:25;;;;;;;;;;;;;;;:35;39422:8;39396:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39480:8;39458:41;;39473:5;39458:41;;;39490:8;39458:41;;;;;;:::i;:::-;;;;;;;;39192:315;;;:::o;34102:::-;34259:28;34269:4;34275:2;34279:7;34259:9;:28::i;:::-;34306:48;34329:4;34335:2;34339:7;34348:5;34306:22;:48::i;:::-;34298:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34102:315;;;;:::o;9203:120::-;8747:8;:6;:8::i;:::-;8739:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;9272:5:::1;9262:7;;:15;;;;;;;;;;;;;;;;;;9293:22;9302:12;:10;:12::i;:::-;9293:22;;;;;;:::i;:::-;;;;;;;;9203:120::o:0;8944:118::-;8470:8;:6;:8::i;:::-;8469:9;8461:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9014:4:::1;9004:7;;:14;;;;;;;;;;;;;;;;;;9034:20;9041:12;:10;:12::i;:::-;9034:20;;;;;;:::i;:::-;;;;;;;;8944:118::o:0;58107:108::-;58159:13;58192:15;58185:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58107:108;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;55959:208::-;56027:15;56045:19;:9;:17;:19::i;:::-;56027:37;;56080:6;56075:85;56096:6;56092:1;:10;56075:85;;;56124:24;56132:2;56146:1;56136:7;:11;;;;:::i;:::-;56124:7;:24::i;:::-;56104:3;;;;;:::i;:::-;;;;56075:85;;;;56016:151;55959:208;;:::o;28972:305::-;29074:4;29126:25;29111:40;;;:11;:40;;;;:105;;;;29183:33;29168:48;;;:11;:48;;;;29111:105;:158;;;;29233:36;29257:11;29233:23;:36::i;:::-;29111:158;29091:178;;28972:305;;;:::o;58346:197::-;58490:45;58517:4;58523:2;58527:7;58490:26;:45::i;:::-;58346:197;;;:::o;41954:125::-;;;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;55603:208::-;55671:15;55689:19;:9;:17;:19::i;:::-;55671:37;;55724:6;55719:85;55740:6;55736:1;:10;55719:85;;;55768:24;55776:2;55790:1;55780:7;:11;;;;:::i;:::-;55768:7;:24::i;:::-;55748:3;;;;;:::i;:::-;;;;55719:85;;;;55660:151;55603:208;;:::o;40072:799::-;40227:4;40248:15;:2;:13;;;:15::i;:::-;40244:620;;;40300:2;40284:36;;;40321:12;:10;:12::i;:::-;40335:4;40341:7;40350:5;40284:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40280:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40543:1;40526:6;:13;:18;40522:272;;;40569:60;;;;;;;;;;:::i;:::-;;;;;;;;40522:272;40744:6;40738:13;40729:6;40725:2;40721:15;40714:38;40280:529;40417:41;;;40407:51;;;:6;:51;;;;40400:58;;;;;40244:620;40848:4;40841:11;;40072:799;;;;;;;:::o;56175:136::-;56241:25;56254:2;56258:7;56241:12;:25::i;:::-;56277:26;:14;:24;:26::i;:::-;56175:136;;:::o;20646:157::-;20731:4;20770:25;20755:40;;;:11;:40;;;;20748:47;;20646:157;;;:::o;42764:275::-;42908:45;42935:4;42941:2;42945:7;42908:26;:45::i;:::-;42975:8;:6;:8::i;:::-;42974:9;42966:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42764:275;;;:::o;55819:132::-;55885:25;55898:2;55902:7;55885:12;:25::i;:::-;55921:22;:10;:20;:22::i;:::-;55819:132;;:::o;10563:326::-;10623:4;10880:1;10858:7;:19;;;:23;10851:30;;10563:326;;;:::o;56319:198::-;56409:9;;56398:7;:20;;56390:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;56455:22;56465:2;56469:7;56455:9;:22::i;:::-;56488:21;:9;:19;:21::i;:::-;56319:198;;:::o;47738:589::-;47882:45;47909:4;47915:2;47919:7;47882:26;:45::i;:::-;47960:1;47944:18;;:4;:18;;;47940:187;;;47979:40;48011:7;47979:31;:40::i;:::-;47940:187;;;48049:2;48041:10;;:4;:10;;;48037:90;;48068:47;48101:4;48107:7;48068:32;:47::i;:::-;48037:90;47940:187;48155:1;48141:16;;:2;:16;;;48137:183;;;48174:45;48211:7;48174:36;:45::i;:::-;48137:183;;;48247:4;48241:10;;:2;:10;;;48237:83;;48268:40;48296:2;48300:7;48268:27;:40::i;:::-;48237:83;48137:183;47738:589;;;:::o;35714:110::-;35790:26;35800:2;35804:7;35790:26;;;;;;;;;;;;:9;:26::i;:::-;35714:110;;:::o;41443:126::-;;;;:::o;49050:164::-;49154:10;:17;;;;49127:15;:24;49143:7;49127:24;;;;;;;;;;;:44;;;;49182:10;49198:7;49182:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49050:164;:::o;49841:988::-;50107:22;50157:1;50132:22;50149:4;50132:16;:22::i;:::-;:26;;;;:::i;:::-;50107:51;;50169:18;50190:17;:26;50208:7;50190:26;;;;;;;;;;;;50169:47;;50337:14;50323:10;:28;50319:328;;50368:19;50390:12;:18;50403:4;50390:18;;;;;;;;;;;;;;;:34;50409:14;50390:34;;;;;;;;;;;;50368:56;;50474:11;50441:12;:18;50454:4;50441:18;;;;;;;;;;;;;;;:30;50460:10;50441:30;;;;;;;;;;;:44;;;;50591:10;50558:17;:30;50576:11;50558:30;;;;;;;;;;;:43;;;;50353:294;50319:328;50743:17;:26;50761:7;50743:26;;;;;;;;;;;50736:33;;;50787:12;:18;50800:4;50787:18;;;;;;;;;;;;;;;:34;50806:14;50787:34;;;;;;;;;;;50780:41;;;49922:907;;49841:988;;:::o;51124:1079::-;51377:22;51422:1;51402:10;:17;;;;:21;;;;:::i;:::-;51377:46;;51434:18;51455:15;:24;51471:7;51455:24;;;;;;;;;;;;51434:45;;51806:19;51828:10;51839:14;51828:26;;;;;;;;:::i;:::-;;;;;;;;;;51806:48;;51892:11;51867:10;51878;51867:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;52003:10;51972:15;:28;51988:11;51972:28;;;;;;;;;;;:41;;;;52144:15;:24;52160:7;52144:24;;;;;;;;;;;52137:31;;;52179:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;51195:1008;;;51124:1079;:::o;48628:221::-;48713:14;48730:20;48747:2;48730:16;:20::i;:::-;48713:37;;48788:7;48761:12;:16;48774:2;48761:16;;;;;;;;;;;;;;;:24;48778:6;48761:24;;;;;;;;;;;:34;;;;48835:6;48806:17;:26;48824:7;48806:26;;;;;;;;;;;:35;;;;48702:147;48628:221;;:::o;36051:321::-;36181:18;36187:2;36191:7;36181:5;:18::i;:::-;36232:54;36263:1;36267:2;36271:7;36280:5;36232:22;:54::i;:::-;36210:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;36051:321;;;:::o;36708:439::-;36802:1;36788:16;;:2;:16;;;;36780:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36861:16;36869:7;36861;:16::i;:::-;36860:17;36852:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36923:45;36952:1;36956:2;36960:7;36923:20;:45::i;:::-;36998:1;36981:9;:13;36991:2;36981:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37029:2;37010:7;:16;37018:7;37010:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37074:7;37070:2;37049:33;;37066:1;37049:33;;;;;;;;;;;;37095:44;37123:1;37127:2;37131:7;37095:19;:44::i;:::-;36708:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:137::-;1343:5;1381:6;1368:20;1359:29;;1397:32;1423:5;1397:32;:::i;:::-;1298:137;;;;:::o;1441:141::-;1497:5;1528:6;1522:13;1513:22;;1544:32;1570:5;1544:32;:::i;:::-;1441:141;;;;:::o;1601:338::-;1656:5;1705:3;1698:4;1690:6;1686:17;1682:27;1672:122;;1713:79;;:::i;:::-;1672:122;1830:6;1817:20;1855:78;1929:3;1921:6;1914:4;1906:6;1902:17;1855:78;:::i;:::-;1846:87;;1662:277;1601:338;;;;:::o;1959:553::-;2017:8;2027:6;2077:3;2070:4;2062:6;2058:17;2054:27;2044:122;;2085:79;;:::i;:::-;2044:122;2198:6;2185:20;2175:30;;2228:18;2220:6;2217:30;2214:117;;;2250:79;;:::i;:::-;2214:117;2364:4;2356:6;2352:17;2340:29;;2418:3;2410:4;2402:6;2398:17;2388:8;2384:32;2381:41;2378:128;;;2425:79;;:::i;:::-;2378:128;1959:553;;;;;:::o;2518:139::-;2564:5;2602:6;2589:20;2580:29;;2618:33;2645:5;2618:33;:::i;:::-;2518:139;;;;:::o;2663:329::-;2722:6;2771:2;2759:9;2750:7;2746:23;2742:32;2739:119;;;2777:79;;:::i;:::-;2739:119;2897:1;2922:53;2967:7;2958:6;2947:9;2943:22;2922:53;:::i;:::-;2912:63;;2868:117;2663:329;;;;:::o;2998:474::-;3066:6;3074;3123:2;3111:9;3102:7;3098:23;3094:32;3091:119;;;3129:79;;:::i;:::-;3091:119;3249:1;3274:53;3319:7;3310:6;3299:9;3295:22;3274:53;:::i;:::-;3264:63;;3220:117;3376:2;3402:53;3447:7;3438:6;3427:9;3423:22;3402:53;:::i;:::-;3392:63;;3347:118;2998:474;;;;;:::o;3478:619::-;3555:6;3563;3571;3620:2;3608:9;3599:7;3595:23;3591:32;3588:119;;;3626:79;;:::i;:::-;3588:119;3746:1;3771:53;3816:7;3807:6;3796:9;3792:22;3771:53;:::i;:::-;3761:63;;3717:117;3873:2;3899:53;3944:7;3935:6;3924:9;3920:22;3899:53;:::i;:::-;3889:63;;3844:118;4001:2;4027:53;4072:7;4063:6;4052:9;4048:22;4027:53;:::i;:::-;4017:63;;3972:118;3478:619;;;;;:::o;4103:943::-;4198:6;4206;4214;4222;4271:3;4259:9;4250:7;4246:23;4242:33;4239:120;;;4278:79;;:::i;:::-;4239:120;4398:1;4423:53;4468:7;4459:6;4448:9;4444:22;4423:53;:::i;:::-;4413:63;;4369:117;4525:2;4551:53;4596:7;4587:6;4576:9;4572:22;4551:53;:::i;:::-;4541:63;;4496:118;4653:2;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4624:118;4809:2;4798:9;4794:18;4781:32;4840:18;4832:6;4829:30;4826:117;;;4862:79;;:::i;:::-;4826:117;4967:62;5021:7;5012:6;5001:9;4997:22;4967:62;:::i;:::-;4957:72;;4752:287;4103:943;;;;;;;:::o;5052:468::-;5117:6;5125;5174:2;5162:9;5153:7;5149:23;5145:32;5142:119;;;5180:79;;:::i;:::-;5142:119;5300:1;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5271:117;5427:2;5453:50;5495:7;5486:6;5475:9;5471:22;5453:50;:::i;:::-;5443:60;;5398:115;5052:468;;;;;:::o;5526:474::-;5594:6;5602;5651:2;5639:9;5630:7;5626:23;5622:32;5619:119;;;5657:79;;:::i;:::-;5619:119;5777:1;5802:53;5847:7;5838:6;5827:9;5823:22;5802:53;:::i;:::-;5792:63;;5748:117;5904:2;5930:53;5975:7;5966:6;5955:9;5951:22;5930:53;:::i;:::-;5920:63;;5875:118;5526:474;;;;;:::o;6006:559::-;6092:6;6100;6149:2;6137:9;6128:7;6124:23;6120:32;6117:119;;;6155:79;;:::i;:::-;6117:119;6303:1;6292:9;6288:17;6275:31;6333:18;6325:6;6322:30;6319:117;;;6355:79;;:::i;:::-;6319:117;6468:80;6540:7;6531:6;6520:9;6516:22;6468:80;:::i;:::-;6450:98;;;;6246:312;6006:559;;;;;:::o;6571:327::-;6629:6;6678:2;6666:9;6657:7;6653:23;6649:32;6646:119;;;6684:79;;:::i;:::-;6646:119;6804:1;6829:52;6873:7;6864:6;6853:9;6849:22;6829:52;:::i;:::-;6819:62;;6775:116;6571:327;;;;:::o;6904:349::-;6973:6;7022:2;7010:9;7001:7;6997:23;6993:32;6990:119;;;7028:79;;:::i;:::-;6990:119;7148:1;7173:63;7228:7;7219:6;7208:9;7204:22;7173:63;:::i;:::-;7163:73;;7119:127;6904:349;;;;:::o;7259:529::-;7330:6;7338;7387:2;7375:9;7366:7;7362:23;7358:32;7355:119;;;7393:79;;:::i;:::-;7355:119;7541:1;7530:9;7526:17;7513:31;7571:18;7563:6;7560:30;7557:117;;;7593:79;;:::i;:::-;7557:117;7706:65;7763:7;7754:6;7743:9;7739:22;7706:65;:::i;:::-;7688:83;;;;7484:297;7259:529;;;;;:::o;7794:329::-;7853:6;7902:2;7890:9;7881:7;7877:23;7873:32;7870:119;;;7908:79;;:::i;:::-;7870:119;8028:1;8053:53;8098:7;8089:6;8078:9;8074:22;8053:53;:::i;:::-;8043:63;;7999:117;7794:329;;;;:::o;8129:142::-;8232:32;8258:5;8232:32;:::i;:::-;8227:3;8220:45;8129:142;;:::o;8277:118::-;8364:24;8382:5;8364:24;:::i;:::-;8359:3;8352:37;8277:118;;:::o;8401:109::-;8482:21;8497:5;8482:21;:::i;:::-;8477:3;8470:34;8401:109;;:::o;8516:360::-;8602:3;8630:38;8662:5;8630:38;:::i;:::-;8684:70;8747:6;8742:3;8684:70;:::i;:::-;8677:77;;8763:52;8808:6;8803:3;8796:4;8789:5;8785:16;8763:52;:::i;:::-;8840:29;8862:6;8840:29;:::i;:::-;8835:3;8831:39;8824:46;;8606:270;8516:360;;;;:::o;8882:364::-;8970:3;8998:39;9031:5;8998:39;:::i;:::-;9053:71;9117:6;9112:3;9053:71;:::i;:::-;9046:78;;9133:52;9178:6;9173:3;9166:4;9159:5;9155:16;9133:52;:::i;:::-;9210:29;9232:6;9210:29;:::i;:::-;9205:3;9201:39;9194:46;;8974:272;8882:364;;;;:::o;9252:377::-;9358:3;9386:39;9419:5;9386:39;:::i;:::-;9441:89;9523:6;9518:3;9441:89;:::i;:::-;9434:96;;9539:52;9584:6;9579:3;9572:4;9565:5;9561:16;9539:52;:::i;:::-;9616:6;9611:3;9607:16;9600:23;;9362:267;9252:377;;;;:::o;9635:366::-;9777:3;9798:67;9862:2;9857:3;9798:67;:::i;:::-;9791:74;;9874:93;9963:3;9874:93;:::i;:::-;9992:2;9987:3;9983:12;9976:19;;9635:366;;;:::o;10007:::-;10149:3;10170:67;10234:2;10229:3;10170:67;:::i;:::-;10163:74;;10246:93;10335:3;10246:93;:::i;:::-;10364:2;10359:3;10355:12;10348:19;;10007:366;;;:::o;10379:::-;10521:3;10542:67;10606:2;10601:3;10542:67;:::i;:::-;10535:74;;10618:93;10707:3;10618:93;:::i;:::-;10736:2;10731:3;10727:12;10720:19;;10379:366;;;:::o;10751:::-;10893:3;10914:67;10978:2;10973:3;10914:67;:::i;:::-;10907:74;;10990:93;11079:3;10990:93;:::i;:::-;11108:2;11103:3;11099:12;11092:19;;10751:366;;;:::o;11123:::-;11265:3;11286:67;11350:2;11345:3;11286:67;:::i;:::-;11279:74;;11362:93;11451:3;11362:93;:::i;:::-;11480:2;11475:3;11471:12;11464:19;;11123:366;;;:::o;11495:::-;11637:3;11658:67;11722:2;11717:3;11658:67;:::i;:::-;11651:74;;11734:93;11823:3;11734:93;:::i;:::-;11852:2;11847:3;11843:12;11836:19;;11495:366;;;:::o;11867:::-;12009:3;12030:67;12094:2;12089:3;12030:67;:::i;:::-;12023:74;;12106:93;12195:3;12106:93;:::i;:::-;12224:2;12219:3;12215:12;12208:19;;11867:366;;;:::o;12239:::-;12381:3;12402:67;12466:2;12461:3;12402:67;:::i;:::-;12395:74;;12478:93;12567:3;12478:93;:::i;:::-;12596:2;12591:3;12587:12;12580:19;;12239:366;;;:::o;12611:::-;12753:3;12774:67;12838:2;12833:3;12774:67;:::i;:::-;12767:74;;12850:93;12939:3;12850:93;:::i;:::-;12968:2;12963:3;12959:12;12952:19;;12611:366;;;:::o;12983:::-;13125:3;13146:67;13210:2;13205:3;13146:67;:::i;:::-;13139:74;;13222:93;13311:3;13222:93;:::i;:::-;13340:2;13335:3;13331:12;13324:19;;12983:366;;;:::o;13355:::-;13497:3;13518:67;13582:2;13577:3;13518:67;:::i;:::-;13511:74;;13594:93;13683:3;13594:93;:::i;:::-;13712:2;13707:3;13703:12;13696:19;;13355:366;;;:::o;13727:::-;13869:3;13890:67;13954:2;13949:3;13890:67;:::i;:::-;13883:74;;13966:93;14055:3;13966:93;:::i;:::-;14084:2;14079:3;14075:12;14068:19;;13727:366;;;:::o;14099:::-;14241:3;14262:67;14326:2;14321:3;14262:67;:::i;:::-;14255:74;;14338:93;14427:3;14338:93;:::i;:::-;14456:2;14451:3;14447:12;14440:19;;14099:366;;;:::o;14471:::-;14613:3;14634:67;14698:2;14693:3;14634:67;:::i;:::-;14627:74;;14710:93;14799:3;14710:93;:::i;:::-;14828:2;14823:3;14819:12;14812:19;;14471:366;;;:::o;14843:::-;14985:3;15006:67;15070:2;15065:3;15006:67;:::i;:::-;14999:74;;15082:93;15171:3;15082:93;:::i;:::-;15200:2;15195:3;15191:12;15184:19;;14843:366;;;:::o;15215:::-;15357:3;15378:67;15442:2;15437:3;15378:67;:::i;:::-;15371:74;;15454:93;15543:3;15454:93;:::i;:::-;15572:2;15567:3;15563:12;15556:19;;15215:366;;;:::o;15587:::-;15729:3;15750:67;15814:2;15809:3;15750:67;:::i;:::-;15743:74;;15826:93;15915:3;15826:93;:::i;:::-;15944:2;15939:3;15935:12;15928:19;;15587:366;;;:::o;15959:::-;16101:3;16122:67;16186:2;16181:3;16122:67;:::i;:::-;16115:74;;16198:93;16287:3;16198:93;:::i;:::-;16316:2;16311:3;16307:12;16300:19;;15959:366;;;:::o;16331:::-;16473:3;16494:67;16558:2;16553:3;16494:67;:::i;:::-;16487:74;;16570:93;16659:3;16570:93;:::i;:::-;16688:2;16683:3;16679:12;16672:19;;16331:366;;;:::o;16703:::-;16845:3;16866:67;16930:2;16925:3;16866:67;:::i;:::-;16859:74;;16942:93;17031:3;16942:93;:::i;:::-;17060:2;17055:3;17051:12;17044:19;;16703:366;;;:::o;17075:400::-;17235:3;17256:84;17338:1;17333:3;17256:84;:::i;:::-;17249:91;;17349:93;17438:3;17349:93;:::i;:::-;17467:1;17462:3;17458:11;17451:18;;17075:400;;;:::o;17481:366::-;17623:3;17644:67;17708:2;17703:3;17644:67;:::i;:::-;17637:74;;17720:93;17809:3;17720:93;:::i;:::-;17838:2;17833:3;17829:12;17822:19;;17481:366;;;:::o;17853:::-;17995:3;18016:67;18080:2;18075:3;18016:67;:::i;:::-;18009:74;;18092:93;18181:3;18092:93;:::i;:::-;18210:2;18205:3;18201:12;18194:19;;17853:366;;;:::o;18225:::-;18367:3;18388:67;18452:2;18447:3;18388:67;:::i;:::-;18381:74;;18464:93;18553:3;18464:93;:::i;:::-;18582:2;18577:3;18573:12;18566:19;;18225:366;;;:::o;18597:::-;18739:3;18760:67;18824:2;18819:3;18760:67;:::i;:::-;18753:74;;18836:93;18925:3;18836:93;:::i;:::-;18954:2;18949:3;18945:12;18938:19;;18597:366;;;:::o;18969:::-;19111:3;19132:67;19196:2;19191:3;19132:67;:::i;:::-;19125:74;;19208:93;19297:3;19208:93;:::i;:::-;19326:2;19321:3;19317:12;19310:19;;18969:366;;;:::o;19341:::-;19483:3;19504:67;19568:2;19563:3;19504:67;:::i;:::-;19497:74;;19580:93;19669:3;19580:93;:::i;:::-;19698:2;19693:3;19689:12;19682:19;;19341:366;;;:::o;19713:::-;19855:3;19876:67;19940:2;19935:3;19876:67;:::i;:::-;19869:74;;19952:93;20041:3;19952:93;:::i;:::-;20070:2;20065:3;20061:12;20054:19;;19713:366;;;:::o;20085:::-;20227:3;20248:67;20312:2;20307:3;20248:67;:::i;:::-;20241:74;;20324:93;20413:3;20324:93;:::i;:::-;20442:2;20437:3;20433:12;20426:19;;20085:366;;;:::o;20457:400::-;20617:3;20638:84;20720:1;20715:3;20638:84;:::i;:::-;20631:91;;20731:93;20820:3;20731:93;:::i;:::-;20849:1;20844:3;20840:11;20833:18;;20457:400;;;:::o;20863:402::-;21023:3;21044:85;21126:2;21121:3;21044:85;:::i;:::-;21037:92;;21138:93;21227:3;21138:93;:::i;:::-;21256:2;21251:3;21247:12;21240:19;;20863:402;;;:::o;21271:118::-;21358:24;21376:5;21358:24;:::i;:::-;21353:3;21346:37;21271:118;;:::o;21395:701::-;21676:3;21698:95;21789:3;21780:6;21698:95;:::i;:::-;21691:102;;21810:95;21901:3;21892:6;21810:95;:::i;:::-;21803:102;;21922:148;22066:3;21922:148;:::i;:::-;21915:155;;22087:3;22080:10;;21395:701;;;;;:::o;22102:807::-;22436:3;22458:148;22602:3;22458:148;:::i;:::-;22451:155;;22623:95;22714:3;22705:6;22623:95;:::i;:::-;22616:102;;22735:148;22879:3;22735:148;:::i;:::-;22728:155;;22900:3;22893:10;;22102:807;;;;:::o;22915:222::-;23008:4;23046:2;23035:9;23031:18;23023:26;;23059:71;23127:1;23116:9;23112:17;23103:6;23059:71;:::i;:::-;22915:222;;;;:::o;23143:254::-;23252:4;23290:2;23279:9;23275:18;23267:26;;23303:87;23387:1;23376:9;23372:17;23363:6;23303:87;:::i;:::-;23143:254;;;;:::o;23403:640::-;23598:4;23636:3;23625:9;23621:19;23613:27;;23650:71;23718:1;23707:9;23703:17;23694:6;23650:71;:::i;:::-;23731:72;23799:2;23788:9;23784:18;23775:6;23731:72;:::i;:::-;23813;23881:2;23870:9;23866:18;23857:6;23813:72;:::i;:::-;23932:9;23926:4;23922:20;23917:2;23906:9;23902:18;23895:48;23960:76;24031:4;24022:6;23960:76;:::i;:::-;23952:84;;23403:640;;;;;;;:::o;24049:210::-;24136:4;24174:2;24163:9;24159:18;24151:26;;24187:65;24249:1;24238:9;24234:17;24225:6;24187:65;:::i;:::-;24049:210;;;;:::o;24265:313::-;24378:4;24416:2;24405:9;24401:18;24393:26;;24465:9;24459:4;24455:20;24451:1;24440:9;24436:17;24429:47;24493:78;24566:4;24557:6;24493:78;:::i;:::-;24485:86;;24265:313;;;;:::o;24584:419::-;24750:4;24788:2;24777:9;24773:18;24765:26;;24837:9;24831:4;24827:20;24823:1;24812:9;24808:17;24801:47;24865:131;24991:4;24865:131;:::i;:::-;24857:139;;24584:419;;;:::o;25009:::-;25175:4;25213:2;25202:9;25198:18;25190:26;;25262:9;25256:4;25252:20;25248:1;25237:9;25233:17;25226:47;25290:131;25416:4;25290:131;:::i;:::-;25282:139;;25009:419;;;:::o;25434:::-;25600:4;25638:2;25627:9;25623:18;25615:26;;25687:9;25681:4;25677:20;25673:1;25662:9;25658:17;25651:47;25715:131;25841:4;25715:131;:::i;:::-;25707:139;;25434:419;;;:::o;25859:::-;26025:4;26063:2;26052:9;26048:18;26040:26;;26112:9;26106:4;26102:20;26098:1;26087:9;26083:17;26076:47;26140:131;26266:4;26140:131;:::i;:::-;26132:139;;25859:419;;;:::o;26284:::-;26450:4;26488:2;26477:9;26473:18;26465:26;;26537:9;26531:4;26527:20;26523:1;26512:9;26508:17;26501:47;26565:131;26691:4;26565:131;:::i;:::-;26557:139;;26284:419;;;:::o;26709:::-;26875:4;26913:2;26902:9;26898:18;26890:26;;26962:9;26956:4;26952:20;26948:1;26937:9;26933:17;26926:47;26990:131;27116:4;26990:131;:::i;:::-;26982:139;;26709:419;;;:::o;27134:::-;27300:4;27338:2;27327:9;27323:18;27315:26;;27387:9;27381:4;27377:20;27373:1;27362:9;27358:17;27351:47;27415:131;27541:4;27415:131;:::i;:::-;27407:139;;27134:419;;;:::o;27559:::-;27725:4;27763:2;27752:9;27748:18;27740:26;;27812:9;27806:4;27802:20;27798:1;27787:9;27783:17;27776:47;27840:131;27966:4;27840:131;:::i;:::-;27832:139;;27559:419;;;:::o;27984:::-;28150:4;28188:2;28177:9;28173:18;28165:26;;28237:9;28231:4;28227:20;28223:1;28212:9;28208:17;28201:47;28265:131;28391:4;28265:131;:::i;:::-;28257:139;;27984:419;;;:::o;28409:::-;28575:4;28613:2;28602:9;28598:18;28590:26;;28662:9;28656:4;28652:20;28648:1;28637:9;28633:17;28626:47;28690:131;28816:4;28690:131;:::i;:::-;28682:139;;28409:419;;;:::o;28834:::-;29000:4;29038:2;29027:9;29023:18;29015:26;;29087:9;29081:4;29077:20;29073:1;29062:9;29058:17;29051:47;29115:131;29241:4;29115:131;:::i;:::-;29107:139;;28834:419;;;:::o;29259:::-;29425:4;29463:2;29452:9;29448:18;29440:26;;29512:9;29506:4;29502:20;29498:1;29487:9;29483:17;29476:47;29540:131;29666:4;29540:131;:::i;:::-;29532:139;;29259:419;;;:::o;29684:::-;29850:4;29888:2;29877:9;29873:18;29865:26;;29937:9;29931:4;29927:20;29923:1;29912:9;29908:17;29901:47;29965:131;30091:4;29965:131;:::i;:::-;29957:139;;29684:419;;;:::o;30109:::-;30275:4;30313:2;30302:9;30298:18;30290:26;;30362:9;30356:4;30352:20;30348:1;30337:9;30333:17;30326:47;30390:131;30516:4;30390:131;:::i;:::-;30382:139;;30109:419;;;:::o;30534:::-;30700:4;30738:2;30727:9;30723:18;30715:26;;30787:9;30781:4;30777:20;30773:1;30762:9;30758:17;30751:47;30815:131;30941:4;30815:131;:::i;:::-;30807:139;;30534:419;;;:::o;30959:::-;31125:4;31163:2;31152:9;31148:18;31140:26;;31212:9;31206:4;31202:20;31198:1;31187:9;31183:17;31176:47;31240:131;31366:4;31240:131;:::i;:::-;31232:139;;30959:419;;;:::o;31384:::-;31550:4;31588:2;31577:9;31573:18;31565:26;;31637:9;31631:4;31627:20;31623:1;31612:9;31608:17;31601:47;31665:131;31791:4;31665:131;:::i;:::-;31657:139;;31384:419;;;:::o;31809:::-;31975:4;32013:2;32002:9;31998:18;31990:26;;32062:9;32056:4;32052:20;32048:1;32037:9;32033:17;32026:47;32090:131;32216:4;32090:131;:::i;:::-;32082:139;;31809:419;;;:::o;32234:::-;32400:4;32438:2;32427:9;32423:18;32415:26;;32487:9;32481:4;32477:20;32473:1;32462:9;32458:17;32451:47;32515:131;32641:4;32515:131;:::i;:::-;32507:139;;32234:419;;;:::o;32659:::-;32825:4;32863:2;32852:9;32848:18;32840:26;;32912:9;32906:4;32902:20;32898:1;32887:9;32883:17;32876:47;32940:131;33066:4;32940:131;:::i;:::-;32932:139;;32659:419;;;:::o;33084:::-;33250:4;33288:2;33277:9;33273:18;33265:26;;33337:9;33331:4;33327:20;33323:1;33312:9;33308:17;33301:47;33365:131;33491:4;33365:131;:::i;:::-;33357:139;;33084:419;;;:::o;33509:::-;33675:4;33713:2;33702:9;33698:18;33690:26;;33762:9;33756:4;33752:20;33748:1;33737:9;33733:17;33726:47;33790:131;33916:4;33790:131;:::i;:::-;33782:139;;33509:419;;;:::o;33934:::-;34100:4;34138:2;34127:9;34123:18;34115:26;;34187:9;34181:4;34177:20;34173:1;34162:9;34158:17;34151:47;34215:131;34341:4;34215:131;:::i;:::-;34207:139;;33934:419;;;:::o;34359:::-;34525:4;34563:2;34552:9;34548:18;34540:26;;34612:9;34606:4;34602:20;34598:1;34587:9;34583:17;34576:47;34640:131;34766:4;34640:131;:::i;:::-;34632:139;;34359:419;;;:::o;34784:::-;34950:4;34988:2;34977:9;34973:18;34965:26;;35037:9;35031:4;35027:20;35023:1;35012:9;35008:17;35001:47;35065:131;35191:4;35065:131;:::i;:::-;35057:139;;34784:419;;;:::o;35209:::-;35375:4;35413:2;35402:9;35398:18;35390:26;;35462:9;35456:4;35452:20;35448:1;35437:9;35433:17;35426:47;35490:131;35616:4;35490:131;:::i;:::-;35482:139;;35209:419;;;:::o;35634:::-;35800:4;35838:2;35827:9;35823:18;35815:26;;35887:9;35881:4;35877:20;35873:1;35862:9;35858:17;35851:47;35915:131;36041:4;35915:131;:::i;:::-;35907:139;;35634:419;;;:::o;36059:::-;36225:4;36263:2;36252:9;36248:18;36240:26;;36312:9;36306:4;36302:20;36298:1;36287:9;36283:17;36276:47;36340:131;36466:4;36340:131;:::i;:::-;36332:139;;36059:419;;;:::o;36484:222::-;36577:4;36615:2;36604:9;36600:18;36592:26;;36628:71;36696:1;36685:9;36681:17;36672:6;36628:71;:::i;:::-;36484:222;;;;:::o;36712:129::-;36746:6;36773:20;;:::i;:::-;36763:30;;36802:33;36830:4;36822:6;36802:33;:::i;:::-;36712:129;;;:::o;36847:75::-;36880:6;36913:2;36907:9;36897:19;;36847:75;:::o;36928:307::-;36989:4;37079:18;37071:6;37068:30;37065:56;;;37101:18;;:::i;:::-;37065:56;37139:29;37161:6;37139:29;:::i;:::-;37131:37;;37223:4;37217;37213:15;37205:23;;36928:307;;;:::o;37241:98::-;37292:6;37326:5;37320:12;37310:22;;37241:98;;;:::o;37345:99::-;37397:6;37431:5;37425:12;37415:22;;37345:99;;;:::o;37450:168::-;37533:11;37567:6;37562:3;37555:19;37607:4;37602:3;37598:14;37583:29;;37450:168;;;;:::o;37624:169::-;37708:11;37742:6;37737:3;37730:19;37782:4;37777:3;37773:14;37758:29;;37624:169;;;;:::o;37799:148::-;37901:11;37938:3;37923:18;;37799:148;;;;:::o;37953:305::-;37993:3;38012:20;38030:1;38012:20;:::i;:::-;38007:25;;38046:20;38064:1;38046:20;:::i;:::-;38041:25;;38200:1;38132:66;38128:74;38125:1;38122:81;38119:107;;;38206:18;;:::i;:::-;38119:107;38250:1;38247;38243:9;38236:16;;37953:305;;;;:::o;38264:185::-;38304:1;38321:20;38339:1;38321:20;:::i;:::-;38316:25;;38355:20;38373:1;38355:20;:::i;:::-;38350:25;;38394:1;38384:35;;38399:18;;:::i;:::-;38384:35;38441:1;38438;38434:9;38429:14;;38264:185;;;;:::o;38455:348::-;38495:7;38518:20;38536:1;38518:20;:::i;:::-;38513:25;;38552:20;38570:1;38552:20;:::i;:::-;38547:25;;38740:1;38672:66;38668:74;38665:1;38662:81;38657:1;38650:9;38643:17;38639:105;38636:131;;;38747:18;;:::i;:::-;38636:131;38795:1;38792;38788:9;38777:20;;38455:348;;;;:::o;38809:191::-;38849:4;38869:20;38887:1;38869:20;:::i;:::-;38864:25;;38903:20;38921:1;38903:20;:::i;:::-;38898:25;;38942:1;38939;38936:8;38933:34;;;38947:18;;:::i;:::-;38933:34;38992:1;38989;38985:9;38977:17;;38809:191;;;;:::o;39006:96::-;39043:7;39072:24;39090:5;39072:24;:::i;:::-;39061:35;;39006:96;;;:::o;39108:104::-;39153:7;39182:24;39200:5;39182:24;:::i;:::-;39171:35;;39108:104;;;:::o;39218:90::-;39252:7;39295:5;39288:13;39281:21;39270:32;;39218:90;;;:::o;39314:149::-;39350:7;39390:66;39383:5;39379:78;39368:89;;39314:149;;;:::o;39469:126::-;39506:7;39546:42;39539:5;39535:54;39524:65;;39469:126;;;:::o;39601:77::-;39638:7;39667:5;39656:16;;39601:77;;;:::o;39684:154::-;39768:6;39763:3;39758;39745:30;39830:1;39821:6;39816:3;39812:16;39805:27;39684:154;;;:::o;39844:307::-;39912:1;39922:113;39936:6;39933:1;39930:13;39922:113;;;40021:1;40016:3;40012:11;40006:18;40002:1;39997:3;39993:11;39986:39;39958:2;39955:1;39951:10;39946:15;;39922:113;;;40053:6;40050:1;40047:13;40044:101;;;40133:1;40124:6;40119:3;40115:16;40108:27;40044:101;39893:258;39844:307;;;:::o;40157:320::-;40201:6;40238:1;40232:4;40228:12;40218:22;;40285:1;40279:4;40275:12;40306:18;40296:81;;40362:4;40354:6;40350:17;40340:27;;40296:81;40424:2;40416:6;40413:14;40393:18;40390:38;40387:84;;;40443:18;;:::i;:::-;40387:84;40208:269;40157:320;;;:::o;40483:281::-;40566:27;40588:4;40566:27;:::i;:::-;40558:6;40554:40;40696:6;40684:10;40681:22;40660:18;40648:10;40645:34;40642:62;40639:88;;;40707:18;;:::i;:::-;40639:88;40747:10;40743:2;40736:22;40526:238;40483:281;;:::o;40770:233::-;40809:3;40832:24;40850:5;40832:24;:::i;:::-;40823:33;;40878:66;40871:5;40868:77;40865:103;;;40948:18;;:::i;:::-;40865:103;40995:1;40988:5;40984:13;40977:20;;40770:233;;;:::o;41009:176::-;41041:1;41058:20;41076:1;41058:20;:::i;:::-;41053:25;;41092:20;41110:1;41092:20;:::i;:::-;41087:25;;41131:1;41121:35;;41136:18;;:::i;:::-;41121:35;41177:1;41174;41170:9;41165:14;;41009:176;;;;:::o;41191:180::-;41239:77;41236:1;41229:88;41336:4;41333:1;41326:15;41360:4;41357:1;41350:15;41377:180;41425:77;41422:1;41415:88;41522:4;41519:1;41512:15;41546:4;41543:1;41536:15;41563:180;41611:77;41608:1;41601:88;41708:4;41705:1;41698:15;41732:4;41729:1;41722:15;41749:180;41797:77;41794:1;41787:88;41894:4;41891:1;41884:15;41918:4;41915:1;41908:15;41935:180;41983:77;41980:1;41973:88;42080:4;42077:1;42070:15;42104:4;42101:1;42094:15;42121:180;42169:77;42166:1;42159:88;42266:4;42263:1;42256:15;42290:4;42287:1;42280:15;42307:117;42416:1;42413;42406:12;42430:117;42539:1;42536;42529:12;42553:117;42662:1;42659;42652:12;42676:117;42785:1;42782;42775:12;42799:117;42908:1;42905;42898:12;42922:117;43031:1;43028;43021:12;43045:102;43086:6;43137:2;43133:7;43128:2;43121:5;43117:14;43113:28;43103:38;;43045:102;;;:::o;43153:230::-;43293:34;43289:1;43281:6;43277:14;43270:58;43362:13;43357:2;43349:6;43345:15;43338:38;43153:230;:::o;43389:170::-;43529:22;43525:1;43517:6;43513:14;43506:46;43389:170;:::o;43565:230::-;43705:34;43701:1;43693:6;43689:14;43682:58;43774:13;43769:2;43761:6;43757:15;43750:38;43565:230;:::o;43801:237::-;43941:34;43937:1;43929:6;43925:14;43918:58;44010:20;44005:2;43997:6;43993:15;43986:45;43801:237;:::o;44044:225::-;44184:34;44180:1;44172:6;44168:14;44161:58;44253:8;44248:2;44240:6;44236:15;44229:33;44044:225;:::o;44275:224::-;44415:34;44411:1;44403:6;44399:14;44392:58;44484:7;44479:2;44471:6;44467:15;44460:32;44275:224;:::o;44505:178::-;44645:30;44641:1;44633:6;44629:14;44622:54;44505:178;:::o;44689:164::-;44829:16;44825:1;44817:6;44813:14;44806:40;44689:164;:::o;44859:170::-;44999:22;44995:1;44987:6;44983:14;44976:46;44859:170;:::o;45035:223::-;45175:34;45171:1;45163:6;45159:14;45152:58;45244:6;45239:2;45231:6;45227:15;45220:31;45035:223;:::o;45264:175::-;45404:27;45400:1;45392:6;45388:14;45381:51;45264:175;:::o;45445:173::-;45585:25;45581:1;45573:6;45569:14;45562:49;45445:173;:::o;45624:231::-;45764:34;45760:1;45752:6;45748:14;45741:58;45833:14;45828:2;45820:6;45816:15;45809:39;45624:231;:::o;45861:166::-;46001:18;45997:1;45989:6;45985:14;45978:42;45861:166;:::o;46033:243::-;46173:34;46169:1;46161:6;46157:14;46150:58;46242:26;46237:2;46229:6;46225:15;46218:51;46033:243;:::o;46282:179::-;46422:31;46418:1;46410:6;46406:14;46399:55;46282:179;:::o;46467:229::-;46607:34;46603:1;46595:6;46591:14;46584:58;46676:12;46671:2;46663:6;46659:15;46652:37;46467:229;:::o;46702:228::-;46842:34;46838:1;46830:6;46826:14;46819:58;46911:11;46906:2;46898:6;46894:15;46887:36;46702:228;:::o;46936:182::-;47076:34;47072:1;47064:6;47060:14;47053:58;46936:182;:::o;47124:231::-;47264:34;47260:1;47252:6;47248:14;47241:58;47333:14;47328:2;47320:6;47316:15;47309:39;47124:231;:::o;47361:155::-;47501:7;47497:1;47489:6;47485:14;47478:31;47361:155;:::o;47522:182::-;47662:34;47658:1;47650:6;47646:14;47639:58;47522:182;:::o;47710:169::-;47850:21;47846:1;47838:6;47834:14;47827:45;47710:169;:::o;47885:162::-;48025:14;48021:1;48013:6;48009:14;48002:38;47885:162;:::o;48053:220::-;48193:34;48189:1;48181:6;48177:14;48170:58;48262:3;48257:2;48249:6;48245:15;48238:28;48053:220;:::o;48279:176::-;48419:28;48415:1;48407:6;48403:14;48396:52;48279:176;:::o;48461:171::-;48601:23;48597:1;48589:6;48585:14;48578:47;48461:171;:::o;48638:236::-;48778:34;48774:1;48766:6;48762:14;48755:58;48847:19;48842:2;48834:6;48830:15;48823:44;48638:236;:::o;48880:231::-;49020:34;49016:1;49008:6;49004:14;48997:58;49089:14;49084:2;49076:6;49072:15;49065:39;48880:231;:::o;49117:155::-;49257:7;49253:1;49245:6;49241:14;49234:31;49117:155;:::o;49278:168::-;49418:20;49414:1;49406:6;49402:14;49395:44;49278:168;:::o;49452:122::-;49525:24;49543:5;49525:24;:::i;:::-;49518:5;49515:35;49505:63;;49564:1;49561;49554:12;49505:63;49452:122;:::o;49580:116::-;49650:21;49665:5;49650:21;:::i;:::-;49643:5;49640:32;49630:60;;49686:1;49683;49676:12;49630:60;49580:116;:::o;49702:120::-;49774:23;49791:5;49774:23;:::i;:::-;49767:5;49764:34;49754:62;;49812:1;49809;49802:12;49754:62;49702:120;:::o;49828:122::-;49901:24;49919:5;49901:24;:::i;:::-;49894:5;49891:35;49881:63;;49940:1;49937;49930:12;49881:63;49828:122;:::o
Swarm Source
ipfs://fd7e1e494bf5a6d8178c5d2443a386aa7d6194a2f4817e476429c76b0aba4a3d
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.