Overview
TokenID
16
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FinsBeachBar
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-14 */ // 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 (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // 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/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burnBatch(account, ids, values); } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupply"); unchecked { _totalSupply[id] = supply - amount; } } } } } // File: contracts/Fins.sol // contracts/Fins.sol pragma solidity ^0.8.7; contract FinsBeachBar is ERC1155, ERC1155Supply, ERC1155Burnable, Ownable { constructor(string memory _uri) ERC1155(_uri) { _setURI(_uri); } uint256 public constant MAX_PER_ITEM = 150; mapping (uint256 => uint256) public tokensMinted; /// turn on/off redemption bool public redeemIsActive = false; function setRedeemIsActive(bool _status) external onlyOwner { redeemIsActive = _status; } /// adjust the number of tokens needed to claim uint16 public requiredToClaim = 10; function setRequiredToClaim(uint16 _number) external onlyOwner { requiredToClaim = _number; } /// set the claim token ID uint256 public claimTokenID = 10; function setClaimTokenID(uint256 _id) external onlyOwner { claimTokenID = _id; } /// @dev set the URI to your base URI here, don't forget the {id} param. function setURI(string memory newuri) external onlyOwner { _setURI(newuri); } /** * @notice Airdrop a token to multiple addresses at once. * @dev Airdrop x tokens to each address in the calldata list, * setting the supply to the length of the list + previously minted (airdropped) supply. * An address can appear more than once, and it will be given more tokens accordingly. * @param _tokenID The tokenID to send * @param _quantity The number of tokens to air drop to each address in the list * @param _list address[] list of wallets to send tokens to */ function airdrop( uint256 _tokenID, uint256 _quantity, address[] calldata _list ) external onlyOwner { /// ensure the list length + existing supply don't exceed the max tokens that can be issued require(tokensMinted[_tokenID] + (_quantity * _list.length) <= MAX_PER_ITEM, "No remaining supply"); tokensMinted[_tokenID] = tokensMinted[_tokenID] + (_quantity * _list.length); for (uint256 i = 0; i < _list.length; i++) { /// we doo a little air drop _mint(_list[i], _tokenID, _quantity, ""); } } /** * @notice Sends multiple tokens to a single address * @param _tokenID The address to receive the tokens * @param _quantity How many to send she receiver * @param _address The address to receive the tokens */ function batchMint( uint256 _tokenID, uint256 _quantity, address _address ) external onlyOwner { // ensure the list length + existing supply don't exceed the max tokens that can be issued require(tokensMinted[_tokenID] + _quantity <= MAX_PER_ITEM, "No remaining supply"); tokensMinted[_tokenID] = tokensMinted[_tokenID] + _quantity; _mint(_address, _tokenID, _quantity, ""); } function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } function burnToRedeem(uint256[] calldata ids) public { /// check that redemption is active require(redeemIsActive, "Redemption is not active."); /// ensure that exactly the required number of items are submitted to burn require(ids.length == requiredToClaim, "Wrong number of tokens submitted"); /// ensure the list length + existing supply don't exceed the max tokens that can be issued require(tokensMinted[claimTokenID] < MAX_PER_ITEM, "No remaning supply"); /// keep track of which tokens were submitted to prevent dupes uint256[] memory tokens = new uint256[](10); uint256[] memory values = new uint256[](requiredToClaim); /// loop over each token for (uint256 i = 0; i < requiredToClaim; i++) { /// ensure the token id is between 0 and 10 require(ids[i] >= 0 && ids[i] <= 10); /// ensure that the token is not already in the list require(tokens[ids[i]] == 0, "Each token must be unique"); /// mark the token as "used" so we prevent duplicates from being used tokens[ids[i]] = 1; values[i] = 1; } /// burn the set of tokens and exchange them for a new one tokensMinted[claimTokenID] = tokensMinted[claimTokenID] + 1; _burnBatch(msg.sender, ids, values); _mint(msg.sender, claimTokenID, 1, ""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"MAX_PER_ITEM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"address[]","name":"_list","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"burnToRedeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokenID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiredToClaim","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"uint256","name":"_id","type":"uint256"}],"name":"setClaimTokenID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setRedeemIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_number","type":"uint16"}],"name":"setRequiredToClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600660006101000a81548160ff021916908315150217905550600a600660016101000a81548161ffff021916908361ffff160217905550600a6007553480156200004f57600080fd5b5060405162004afc38038062004afc8339818101604052810190620000759190620002d8565b806200008781620000c060201b60201c565b50620000a86200009c620000dc60201b60201c565b620000e460201b60201c565b620000b981620000c060201b60201c565b50620004ad565b8060029080519060200190620000d8929190620001aa565b5050565b600033905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b890620003be565b90600052602060002090601f016020900481019282620001dc576000855562000228565b82601f10620001f757805160ff191683800117855562000228565b8280016001018555821562000228579182015b82811115620002275782518255916020019190600101906200020a565b5b5090506200023791906200023b565b5090565b5b80821115620002565760008160009055506001016200023c565b5090565b6000620002716200026b8462000352565b62000329565b90508281526020810184848401111562000290576200028f6200048d565b5b6200029d84828562000388565b509392505050565b600082601f830112620002bd57620002bc62000488565b5b8151620002cf8482602086016200025a565b91505092915050565b600060208284031215620002f157620002f062000497565b5b600082015167ffffffffffffffff81111562000312576200031162000492565b5b6200032084828501620002a5565b91505092915050565b60006200033562000348565b9050620003438282620003f4565b919050565b6000604051905090565b600067ffffffffffffffff82111562000370576200036f62000459565b5b6200037b826200049c565b9050602081019050919050565b60005b83811015620003a85780820151818401526020810190506200038b565b83811115620003b8576000848401525b50505050565b60006002820490506001821680620003d757607f821691505b60208210811415620003ee57620003ed6200042a565b5b50919050565b620003ff826200049c565b810181811067ffffffffffffffff8211171562000421576200042062000459565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61463f80620004bd6000396000f3fe608060405234801561001057600080fd5b50600436106101a85760003560e01c80637f74cde2116100f9578063c8d6054f11610097578063f2fde38b11610071578063f2fde38b146104c7578063f5298aca146104e3578063f7ff704b146104ff578063fcc9def31461051b576101a8565b8063c8d6054f1461045f578063e985e9c51461047b578063f242432a146104ab576101a8565b8063a22cb465116100d3578063a22cb465146103d9578063ba2af520146103f5578063bd85b03914610413578063c5d63db114610443576101a8565b80637f74cde21461036f5780638da5cb5b1461039f5780639b2fec2c146103bd576101a8565b80632eb2c2d6116101665780634f558e79116101405780634f558e79146102fd5780636b20c4541461032d578063715018a61461034957806375c7c7d014610353576101a8565b80632eb2c2d6146102955780633ef009ef146102b15780634e1273f4146102cd576101a8565b8062fdd58e146101ad57806301ffc9a7146101dd57806302fe53051461020d5780630e89341c1461022957806319eea6c9146102595780631a98276914610277575b600080fd5b6101c760048036038101906101c29190612fa4565b610539565b6040516101d49190613aea565b60405180910390f35b6101f760048036038101906101f29190613129565b610602565b6040516102049190613812565b60405180910390f35b61022760048036038101906102229190613183565b6106e4565b005b610243600480360381019061023e91906131f9565b6106f8565b604051610250919061382d565b60405180910390f35b61026161078c565b60405161026e9190613aea565b60405180910390f35b61027f610791565b60405161028c9190613812565b60405180910390f35b6102af60048036038101906102aa9190612d73565b6107a4565b005b6102cb60048036038101906102c69190613226565b610845565b005b6102e760048036038101906102e29190613037565b610905565b6040516102f491906137b9565b60405180910390f35b610317600480360381019061031291906131f9565b610a1e565b6040516103249190613812565b60405180910390f35b61034760048036038101906103429190612ed9565b610a32565b005b610351610acf565b005b61036d600480360381019061036891906131f9565b610ae3565b005b610389600480360381019061038491906131f9565b610af5565b6040516103969190613aea565b60405180910390f35b6103a7610b0d565b6040516103b491906136dc565b60405180910390f35b6103d760048036038101906103d291906130fc565b610b37565b005b6103f360048036038101906103ee9190612f64565b610b5c565b005b6103fd610b72565b60405161040a9190613acf565b60405180910390f35b61042d600480360381019061042891906131f9565b610b86565b60405161043a9190613aea565b60405180910390f35b61045d60048036038101906104589190613279565b610ba3565b005b610479600480360381019061047491906130af565b610cc9565b005b61049560048036038101906104909190612d33565b611074565b6040516104a29190613812565b60405180910390f35b6104c560048036038101906104c09190612e42565b611108565b005b6104e160048036038101906104dc9190612d06565b6111a9565b005b6104fd60048036038101906104f89190612fe4565b61122d565b005b610519600480360381019061051491906131cc565b6112ca565b005b6105236112f2565b6040516105309190613aea565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a1906138ef565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106cd57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106dd57506106dc826112f8565b5b9050919050565b6106ec611362565b6106f5816113e0565b50565b60606002805461070790613df2565b80601f016020809104026020016040519081016040528092919081815260200182805461073390613df2565b80156107805780601f1061075557610100808354040283529160200191610780565b820191906000526020600020905b81548152906001019060200180831161076357829003601f168201915b50505050509050919050565b609681565b600660009054906101000a900460ff1681565b6107ac6113fa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107f257506107f1856107ec6113fa565b611074565b5b610831576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108289061386f565b60405180910390fd5b61083e8585858585611402565b5050505050565b61084d611362565b609682600560008681526020019081526020016000205461086e9190613c7e565b11156108af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a690613a0f565b60405180910390fd5b8160056000858152602001908152602001600020546108ce9190613c7e565b600560008581526020019081526020016000208190555061090081848460405180602001604052806000815250611724565b505050565b6060815183511461094b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094290613a6f565b60405180910390fd5b6000835167ffffffffffffffff81111561096857610967613f2b565b5b6040519080825280602002602001820160405280156109965781602001602082028036833780820191505090505b50905060005b8451811015610a13576109e38582815181106109bb576109ba613efc565b5b60200260200101518583815181106109d6576109d5613efc565b5b6020026020010151610539565b8282815181106109f6576109f5613efc565b5b60200260200101818152505080610a0c90613e55565b905061099c565b508091505092915050565b600080610a2a83610b86565b119050919050565b610a3a6113fa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a805750610a7f83610a7a6113fa565b611074565b5b610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab69061386f565b60405180910390fd5b610aca8383836118d5565b505050565b610ad7611362565b610ae16000611ba4565b565b610aeb611362565b8060078190555050565b60056020528060005260406000206000915090505481565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b3f611362565b80600660006101000a81548160ff02191690831515021790555050565b610b6e610b676113fa565b8383611c6a565b5050565b600660019054906101000a900461ffff1681565b600060036000838152602001908152602001600020549050919050565b610bab611362565b60968282905084610bbc9190613cd4565b6005600087815260200190815260200160002054610bda9190613c7e565b1115610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1290613a0f565b60405180910390fd5b8181905083610c2a9190613cd4565b6005600086815260200190815260200160002054610c489190613c7e565b600560008681526020019081526020016000208190555060005b82829050811015610cc257610caf838383818110610c8357610c82613efc565b5b9050602002016020810190610c989190612d06565b868660405180602001604052806000815250611724565b8080610cba90613e55565b915050610c62565b5050505050565b600660009054906101000a900460ff16610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f9061390f565b60405180910390fd5b600660019054906101000a900461ffff1661ffff168282905014610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d689061392f565b60405180910390fd5b60966005600060075481526020019081526020016000205410610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc090613a2f565b60405180910390fd5b6000600a67ffffffffffffffff811115610de657610de5613f2b565b5b604051908082528060200260200182016040528015610e145781602001602082028036833780820191505090505b5090506000600660019054906101000a900461ffff1661ffff1667ffffffffffffffff811115610e4757610e46613f2b565b5b604051908082528060200260200182016040528015610e755781602001602082028036833780820191505090505b50905060005b600660019054906101000a900461ffff1661ffff16811015610fc8576000858583818110610eac57610eab613efc565b5b9050602002013510158015610edb5750600a858583818110610ed157610ed0613efc565b5b9050602002013511155b610ee457600080fd5b600083868684818110610efa57610ef9613efc565b5b9050602002013581518110610f1257610f11613efc565b5b602002602001015114610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f51906139cf565b60405180910390fd5b600183868684818110610f7057610f6f613efc565b5b9050602002013581518110610f8857610f87613efc565b5b6020026020010181815250506001828281518110610fa957610fa8613efc565b5b6020026020010181815250508080610fc090613e55565b915050610e7b565b50600160056000600754815260200190815260200160002054610feb9190613c7e565b6005600060075481526020019081526020016000208190555061105033858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050836118d5565b61106e33600754600160405180602001604052806000815250611724565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111106113fa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111565750611155856111506113fa565b611074565b5b611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118c9061386f565b60405180910390fd5b6111a28585858585611dd7565b5050505050565b6111b1611362565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611218906138af565b60405180910390fd5b61122a81611ba4565b50565b6112356113fa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061127b575061127a836112756113fa565b611074565b5b6112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b19061386f565b60405180910390fd5b6112c5838383612073565b505050565b6112d2611362565b80600660016101000a81548161ffff021916908361ffff16021790555050565b60075481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61136a6113fa565b73ffffffffffffffffffffffffffffffffffffffff16611388610b0d565b73ffffffffffffffffffffffffffffffffffffffff16146113de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d5906139af565b60405180910390fd5b565b80600290805190602001906113f692919061291d565b5050565b600033905090565b8151835114611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d90613a8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad9061394f565b60405180910390fd5b60006114c06113fa565b90506114d08187878787876122ba565b60005b84518110156116815760008582815181106114f1576114f0613efc565b5b6020026020010151905060008583815181106115105761150f613efc565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a89061398f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116669190613c7e565b925050819055505050508061167a90613e55565b90506114d3565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116f89291906137db565b60405180910390a461170e8187878787876122d0565b61171c8187878787876122d8565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613aaf565b60405180910390fd5b600061179e6113fa565b905060006117ab856124bf565b905060006117b8856124bf565b90506117c9836000898585896122ba565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118289190613c7e565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516118a6929190613b05565b60405180910390a46118bd836000898585896122d0565b6118cc83600089898989612539565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c9061396f565b60405180910390fd5b8051825114611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198090613a8f565b60405180910390fd5b60006119936113fa565b90506119b3818560008686604051806020016040528060008152506122ba565b60005b8351811015611b005760008482815181106119d4576119d3613efc565b5b6020026020010151905060008483815181106119f3576119f2613efc565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8b906138cf565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611af890613e55565b9150506119b6565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611b789291906137db565b60405180910390a4611b9e818560008686604051806020016040528060008152506122d0565b50505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090613a4f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dca9190613812565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e9061394f565b60405180910390fd5b6000611e516113fa565b90506000611e5e856124bf565b90506000611e6b856124bf565b9050611e7b8389898585896122ba565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f099061398f565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fc79190613c7e565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612044929190613b05565b60405180910390a461205a848a8a86868a6122d0565b612068848a8a8a8a8a612539565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da9061396f565b60405180910390fd5b60006120ed6113fa565b905060006120fa846124bf565b90506000612107846124bf565b9050612127838760008585604051806020016040528060008152506122ba565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b5906138cf565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161228b929190613b05565b60405180910390a46122b1848860008686604051806020016040528060008152506122d0565b50505050505050565b6122c8868686868686612720565b505050505050565b505050505050565b6122f78473ffffffffffffffffffffffffffffffffffffffff166128f2565b156124b7578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161233d9594939291906136f7565b602060405180830381600087803b15801561235757600080fd5b505af192505050801561238857506040513d601f19601f820116820180604052508101906123859190613156565b60015b61242e57612394613f5a565b806308c379a014156123f157506123a9614500565b806123b457506123f3565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e8919061382d565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124259061384f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac9061388f565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156124de576124dd613f2b565b5b60405190808252806020026020018201604052801561250c5781602001602082028036833780820191505090505b509050828160008151811061252457612523613efc565b5b60200260200101818152505080915050919050565b6125588473ffffffffffffffffffffffffffffffffffffffff166128f2565b15612718578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161259e95949392919061375f565b602060405180830381600087803b1580156125b857600080fd5b505af19250505080156125e957506040513d601f19601f820116820180604052508101906125e69190613156565b60015b61268f576125f5613f5a565b806308c379a01415612652575061260a614500565b806126155750612654565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612649919061382d565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126869061384f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270d9061388f565b60405180910390fd5b505b505050505050565b61272e868686868686612915565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156127e05760005b83518110156127de5782818151811061278257612781613efc565b5b6020026020010151600360008684815181106127a1576127a0613efc565b5b6020026020010151815260200190815260200160002060008282546127c69190613c7e565b92505081905550806127d790613e55565b9050612766565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156128ea5760005b83518110156128e857600084828151811061283657612835613efc565b5b60200260200101519050600084838151811061285557612854613efc565b5b60200260200101519050600060036000848152602001908152602001600020549050818110156128ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b1906139ef565b60405180910390fd5b8181036003600085815260200190815260200160002081905550505050806128e190613e55565b9050612818565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b82805461292990613df2565b90600052602060002090601f01602090048101928261294b5760008555612992565b82601f1061296457805160ff1916838001178555612992565b82800160010185558215612992579182015b82811115612991578251825591602001919060010190612976565b5b50905061299f91906129a3565b5090565b5b808211156129bc5760008160009055506001016129a4565b5090565b60006129d36129ce84613b53565b613b2e565b905080838252602082019050828560208602820111156129f6576129f5613f86565b5b60005b85811015612a265781612a0c8882612b24565b8452602084019350602083019250506001810190506129f9565b5050509392505050565b6000612a43612a3e84613b7f565b613b2e565b90508083825260208201905082856020860282011115612a6657612a65613f86565b5b60005b85811015612a965781612a7c8882612cf1565b845260208401935060208301925050600181019050612a69565b5050509392505050565b6000612ab3612aae84613bab565b613b2e565b905082815260208101848484011115612acf57612ace613f8b565b5b612ada848285613db0565b509392505050565b6000612af5612af084613bdc565b613b2e565b905082815260208101848484011115612b1157612b10613f8b565b5b612b1c848285613db0565b509392505050565b600081359050612b3381614596565b92915050565b60008083601f840112612b4f57612b4e613f81565b5b8235905067ffffffffffffffff811115612b6c57612b6b613f7c565b5b602083019150836020820283011115612b8857612b87613f86565b5b9250929050565b600082601f830112612ba457612ba3613f81565b5b8135612bb48482602086016129c0565b91505092915050565b60008083601f840112612bd357612bd2613f81565b5b8235905067ffffffffffffffff811115612bf057612bef613f7c565b5b602083019150836020820283011115612c0c57612c0b613f86565b5b9250929050565b600082601f830112612c2857612c27613f81565b5b8135612c38848260208601612a30565b91505092915050565b600081359050612c50816145ad565b92915050565b600081359050612c65816145c4565b92915050565b600081519050612c7a816145c4565b92915050565b600082601f830112612c9557612c94613f81565b5b8135612ca5848260208601612aa0565b91505092915050565b600082601f830112612cc357612cc2613f81565b5b8135612cd3848260208601612ae2565b91505092915050565b600081359050612ceb816145db565b92915050565b600081359050612d00816145f2565b92915050565b600060208284031215612d1c57612d1b613f95565b5b6000612d2a84828501612b24565b91505092915050565b60008060408385031215612d4a57612d49613f95565b5b6000612d5885828601612b24565b9250506020612d6985828601612b24565b9150509250929050565b600080600080600060a08688031215612d8f57612d8e613f95565b5b6000612d9d88828901612b24565b9550506020612dae88828901612b24565b945050604086013567ffffffffffffffff811115612dcf57612dce613f90565b5b612ddb88828901612c13565b935050606086013567ffffffffffffffff811115612dfc57612dfb613f90565b5b612e0888828901612c13565b925050608086013567ffffffffffffffff811115612e2957612e28613f90565b5b612e3588828901612c80565b9150509295509295909350565b600080600080600060a08688031215612e5e57612e5d613f95565b5b6000612e6c88828901612b24565b9550506020612e7d88828901612b24565b9450506040612e8e88828901612cf1565b9350506060612e9f88828901612cf1565b925050608086013567ffffffffffffffff811115612ec057612ebf613f90565b5b612ecc88828901612c80565b9150509295509295909350565b600080600060608486031215612ef257612ef1613f95565b5b6000612f0086828701612b24565b935050602084013567ffffffffffffffff811115612f2157612f20613f90565b5b612f2d86828701612c13565b925050604084013567ffffffffffffffff811115612f4e57612f4d613f90565b5b612f5a86828701612c13565b9150509250925092565b60008060408385031215612f7b57612f7a613f95565b5b6000612f8985828601612b24565b9250506020612f9a85828601612c41565b9150509250929050565b60008060408385031215612fbb57612fba613f95565b5b6000612fc985828601612b24565b9250506020612fda85828601612cf1565b9150509250929050565b600080600060608486031215612ffd57612ffc613f95565b5b600061300b86828701612b24565b935050602061301c86828701612cf1565b925050604061302d86828701612cf1565b9150509250925092565b6000806040838503121561304e5761304d613f95565b5b600083013567ffffffffffffffff81111561306c5761306b613f90565b5b61307885828601612b8f565b925050602083013567ffffffffffffffff81111561309957613098613f90565b5b6130a585828601612c13565b9150509250929050565b600080602083850312156130c6576130c5613f95565b5b600083013567ffffffffffffffff8111156130e4576130e3613f90565b5b6130f085828601612bbd565b92509250509250929050565b60006020828403121561311257613111613f95565b5b600061312084828501612c41565b91505092915050565b60006020828403121561313f5761313e613f95565b5b600061314d84828501612c56565b91505092915050565b60006020828403121561316c5761316b613f95565b5b600061317a84828501612c6b565b91505092915050565b60006020828403121561319957613198613f95565b5b600082013567ffffffffffffffff8111156131b7576131b6613f90565b5b6131c384828501612cae565b91505092915050565b6000602082840312156131e2576131e1613f95565b5b60006131f084828501612cdc565b91505092915050565b60006020828403121561320f5761320e613f95565b5b600061321d84828501612cf1565b91505092915050565b60008060006060848603121561323f5761323e613f95565b5b600061324d86828701612cf1565b935050602061325e86828701612cf1565b925050604061326f86828701612b24565b9150509250925092565b6000806000806060858703121561329357613292613f95565b5b60006132a187828801612cf1565b94505060206132b287828801612cf1565b935050604085013567ffffffffffffffff8111156132d3576132d2613f90565b5b6132df87828801612b39565b925092505092959194509250565b60006132f983836136be565b60208301905092915050565b61330e81613d2e565b82525050565b600061331f82613c1d565b6133298185613c4b565b935061333483613c0d565b8060005b8381101561336557815161334c88826132ed565b975061335783613c3e565b925050600181019050613338565b5085935050505092915050565b61337b81613d40565b82525050565b600061338c82613c28565b6133968185613c5c565b93506133a6818560208601613dbf565b6133af81613f9a565b840191505092915050565b60006133c582613c33565b6133cf8185613c6d565b93506133df818560208601613dbf565b6133e881613f9a565b840191505092915050565b6000613400603483613c6d565b915061340b82613fb8565b604082019050919050565b6000613423602f83613c6d565b915061342e82614007565b604082019050919050565b6000613446602883613c6d565b915061345182614056565b604082019050919050565b6000613469602683613c6d565b9150613474826140a5565b604082019050919050565b600061348c602483613c6d565b9150613497826140f4565b604082019050919050565b60006134af602a83613c6d565b91506134ba82614143565b604082019050919050565b60006134d2601983613c6d565b91506134dd82614192565b602082019050919050565b60006134f5602083613c6d565b9150613500826141bb565b602082019050919050565b6000613518602583613c6d565b9150613523826141e4565b604082019050919050565b600061353b602383613c6d565b915061354682614233565b604082019050919050565b600061355e602a83613c6d565b915061356982614282565b604082019050919050565b6000613581602083613c6d565b915061358c826142d1565b602082019050919050565b60006135a4601983613c6d565b91506135af826142fa565b602082019050919050565b60006135c7602883613c6d565b91506135d282614323565b604082019050919050565b60006135ea601383613c6d565b91506135f582614372565b602082019050919050565b600061360d601283613c6d565b91506136188261439b565b602082019050919050565b6000613630602983613c6d565b915061363b826143c4565b604082019050919050565b6000613653602983613c6d565b915061365e82614413565b604082019050919050565b6000613676602883613c6d565b915061368182614462565b604082019050919050565b6000613699602183613c6d565b91506136a4826144b1565b604082019050919050565b6136b881613d78565b82525050565b6136c781613da6565b82525050565b6136d681613da6565b82525050565b60006020820190506136f16000830184613305565b92915050565b600060a08201905061370c6000830188613305565b6137196020830187613305565b818103604083015261372b8186613314565b9050818103606083015261373f8185613314565b905081810360808301526137538184613381565b90509695505050505050565b600060a0820190506137746000830188613305565b6137816020830187613305565b61378e60408301866136cd565b61379b60608301856136cd565b81810360808301526137ad8184613381565b90509695505050505050565b600060208201905081810360008301526137d38184613314565b905092915050565b600060408201905081810360008301526137f58185613314565b905081810360208301526138098184613314565b90509392505050565b60006020820190506138276000830184613372565b92915050565b6000602082019050818103600083015261384781846133ba565b905092915050565b60006020820190508181036000830152613868816133f3565b9050919050565b6000602082019050818103600083015261388881613416565b9050919050565b600060208201905081810360008301526138a881613439565b9050919050565b600060208201905081810360008301526138c88161345c565b9050919050565b600060208201905081810360008301526138e88161347f565b9050919050565b60006020820190508181036000830152613908816134a2565b9050919050565b60006020820190508181036000830152613928816134c5565b9050919050565b60006020820190508181036000830152613948816134e8565b9050919050565b600060208201905081810360008301526139688161350b565b9050919050565b600060208201905081810360008301526139888161352e565b9050919050565b600060208201905081810360008301526139a881613551565b9050919050565b600060208201905081810360008301526139c881613574565b9050919050565b600060208201905081810360008301526139e881613597565b9050919050565b60006020820190508181036000830152613a08816135ba565b9050919050565b60006020820190508181036000830152613a28816135dd565b9050919050565b60006020820190508181036000830152613a4881613600565b9050919050565b60006020820190508181036000830152613a6881613623565b9050919050565b60006020820190508181036000830152613a8881613646565b9050919050565b60006020820190508181036000830152613aa881613669565b9050919050565b60006020820190508181036000830152613ac88161368c565b9050919050565b6000602082019050613ae460008301846136af565b92915050565b6000602082019050613aff60008301846136cd565b92915050565b6000604082019050613b1a60008301856136cd565b613b2760208301846136cd565b9392505050565b6000613b38613b49565b9050613b448282613e24565b919050565b6000604051905090565b600067ffffffffffffffff821115613b6e57613b6d613f2b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613b9a57613b99613f2b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613bc657613bc5613f2b565b5b613bcf82613f9a565b9050602081019050919050565b600067ffffffffffffffff821115613bf757613bf6613f2b565b5b613c0082613f9a565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613c8982613da6565b9150613c9483613da6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cc957613cc8613e9e565b5b828201905092915050565b6000613cdf82613da6565b9150613cea83613da6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d2357613d22613e9e565b5b828202905092915050565b6000613d3982613d86565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ddd578082015181840152602081019050613dc2565b83811115613dec576000848401525b50505050565b60006002820490506001821680613e0a57607f821691505b60208210811415613e1e57613e1d613ecd565b5b50919050565b613e2d82613f9a565b810181811067ffffffffffffffff82111715613e4c57613e4b613f2b565b5b80604052505050565b6000613e6082613da6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e9357613e92613e9e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613f795760046000803e613f76600051613fab565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f526564656d7074696f6e206973206e6f74206163746976652e00000000000000600082015250565b7f57726f6e67206e756d626572206f6620746f6b656e73207375626d6974746564600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4561636820746f6b656e206d75737420626520756e6971756500000000000000600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f4e6f2072656d61696e696e6720737570706c7900000000000000000000000000600082015250565b7f4e6f2072656d616e696e6720737570706c790000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561451057614593565b614518613b49565b60043d036004823e80513d602482011167ffffffffffffffff82111715614540575050614593565b808201805167ffffffffffffffff81111561455e5750505050614593565b80602083010160043d03850181111561457b575050505050614593565b61458a82602001850186613e24565b82955050505050505b90565b61459f81613d2e565b81146145aa57600080fd5b50565b6145b681613d40565b81146145c157600080fd5b50565b6145cd81613d4c565b81146145d857600080fd5b50565b6145e481613d78565b81146145ef57600080fd5b50565b6145fb81613da6565b811461460657600080fd5b5056fea264697066735822122023b713720650eb55907a187db6f93b6dbd0c03e59a6888c134d3e94f50747b7d64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001e687474703a2f2f7777772e66696e732e7774662f746f6b656e2f7b69647d0000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a85760003560e01c80637f74cde2116100f9578063c8d6054f11610097578063f2fde38b11610071578063f2fde38b146104c7578063f5298aca146104e3578063f7ff704b146104ff578063fcc9def31461051b576101a8565b8063c8d6054f1461045f578063e985e9c51461047b578063f242432a146104ab576101a8565b8063a22cb465116100d3578063a22cb465146103d9578063ba2af520146103f5578063bd85b03914610413578063c5d63db114610443576101a8565b80637f74cde21461036f5780638da5cb5b1461039f5780639b2fec2c146103bd576101a8565b80632eb2c2d6116101665780634f558e79116101405780634f558e79146102fd5780636b20c4541461032d578063715018a61461034957806375c7c7d014610353576101a8565b80632eb2c2d6146102955780633ef009ef146102b15780634e1273f4146102cd576101a8565b8062fdd58e146101ad57806301ffc9a7146101dd57806302fe53051461020d5780630e89341c1461022957806319eea6c9146102595780631a98276914610277575b600080fd5b6101c760048036038101906101c29190612fa4565b610539565b6040516101d49190613aea565b60405180910390f35b6101f760048036038101906101f29190613129565b610602565b6040516102049190613812565b60405180910390f35b61022760048036038101906102229190613183565b6106e4565b005b610243600480360381019061023e91906131f9565b6106f8565b604051610250919061382d565b60405180910390f35b61026161078c565b60405161026e9190613aea565b60405180910390f35b61027f610791565b60405161028c9190613812565b60405180910390f35b6102af60048036038101906102aa9190612d73565b6107a4565b005b6102cb60048036038101906102c69190613226565b610845565b005b6102e760048036038101906102e29190613037565b610905565b6040516102f491906137b9565b60405180910390f35b610317600480360381019061031291906131f9565b610a1e565b6040516103249190613812565b60405180910390f35b61034760048036038101906103429190612ed9565b610a32565b005b610351610acf565b005b61036d600480360381019061036891906131f9565b610ae3565b005b610389600480360381019061038491906131f9565b610af5565b6040516103969190613aea565b60405180910390f35b6103a7610b0d565b6040516103b491906136dc565b60405180910390f35b6103d760048036038101906103d291906130fc565b610b37565b005b6103f360048036038101906103ee9190612f64565b610b5c565b005b6103fd610b72565b60405161040a9190613acf565b60405180910390f35b61042d600480360381019061042891906131f9565b610b86565b60405161043a9190613aea565b60405180910390f35b61045d60048036038101906104589190613279565b610ba3565b005b610479600480360381019061047491906130af565b610cc9565b005b61049560048036038101906104909190612d33565b611074565b6040516104a29190613812565b60405180910390f35b6104c560048036038101906104c09190612e42565b611108565b005b6104e160048036038101906104dc9190612d06565b6111a9565b005b6104fd60048036038101906104f89190612fe4565b61122d565b005b610519600480360381019061051491906131cc565b6112ca565b005b6105236112f2565b6040516105309190613aea565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a1906138ef565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106cd57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106dd57506106dc826112f8565b5b9050919050565b6106ec611362565b6106f5816113e0565b50565b60606002805461070790613df2565b80601f016020809104026020016040519081016040528092919081815260200182805461073390613df2565b80156107805780601f1061075557610100808354040283529160200191610780565b820191906000526020600020905b81548152906001019060200180831161076357829003601f168201915b50505050509050919050565b609681565b600660009054906101000a900460ff1681565b6107ac6113fa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107f257506107f1856107ec6113fa565b611074565b5b610831576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108289061386f565b60405180910390fd5b61083e8585858585611402565b5050505050565b61084d611362565b609682600560008681526020019081526020016000205461086e9190613c7e565b11156108af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a690613a0f565b60405180910390fd5b8160056000858152602001908152602001600020546108ce9190613c7e565b600560008581526020019081526020016000208190555061090081848460405180602001604052806000815250611724565b505050565b6060815183511461094b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094290613a6f565b60405180910390fd5b6000835167ffffffffffffffff81111561096857610967613f2b565b5b6040519080825280602002602001820160405280156109965781602001602082028036833780820191505090505b50905060005b8451811015610a13576109e38582815181106109bb576109ba613efc565b5b60200260200101518583815181106109d6576109d5613efc565b5b6020026020010151610539565b8282815181106109f6576109f5613efc565b5b60200260200101818152505080610a0c90613e55565b905061099c565b508091505092915050565b600080610a2a83610b86565b119050919050565b610a3a6113fa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a805750610a7f83610a7a6113fa565b611074565b5b610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab69061386f565b60405180910390fd5b610aca8383836118d5565b505050565b610ad7611362565b610ae16000611ba4565b565b610aeb611362565b8060078190555050565b60056020528060005260406000206000915090505481565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b3f611362565b80600660006101000a81548160ff02191690831515021790555050565b610b6e610b676113fa565b8383611c6a565b5050565b600660019054906101000a900461ffff1681565b600060036000838152602001908152602001600020549050919050565b610bab611362565b60968282905084610bbc9190613cd4565b6005600087815260200190815260200160002054610bda9190613c7e565b1115610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1290613a0f565b60405180910390fd5b8181905083610c2a9190613cd4565b6005600086815260200190815260200160002054610c489190613c7e565b600560008681526020019081526020016000208190555060005b82829050811015610cc257610caf838383818110610c8357610c82613efc565b5b9050602002016020810190610c989190612d06565b868660405180602001604052806000815250611724565b8080610cba90613e55565b915050610c62565b5050505050565b600660009054906101000a900460ff16610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f9061390f565b60405180910390fd5b600660019054906101000a900461ffff1661ffff168282905014610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d689061392f565b60405180910390fd5b60966005600060075481526020019081526020016000205410610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc090613a2f565b60405180910390fd5b6000600a67ffffffffffffffff811115610de657610de5613f2b565b5b604051908082528060200260200182016040528015610e145781602001602082028036833780820191505090505b5090506000600660019054906101000a900461ffff1661ffff1667ffffffffffffffff811115610e4757610e46613f2b565b5b604051908082528060200260200182016040528015610e755781602001602082028036833780820191505090505b50905060005b600660019054906101000a900461ffff1661ffff16811015610fc8576000858583818110610eac57610eab613efc565b5b9050602002013510158015610edb5750600a858583818110610ed157610ed0613efc565b5b9050602002013511155b610ee457600080fd5b600083868684818110610efa57610ef9613efc565b5b9050602002013581518110610f1257610f11613efc565b5b602002602001015114610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f51906139cf565b60405180910390fd5b600183868684818110610f7057610f6f613efc565b5b9050602002013581518110610f8857610f87613efc565b5b6020026020010181815250506001828281518110610fa957610fa8613efc565b5b6020026020010181815250508080610fc090613e55565b915050610e7b565b50600160056000600754815260200190815260200160002054610feb9190613c7e565b6005600060075481526020019081526020016000208190555061105033858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050836118d5565b61106e33600754600160405180602001604052806000815250611724565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111106113fa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111565750611155856111506113fa565b611074565b5b611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118c9061386f565b60405180910390fd5b6111a28585858585611dd7565b5050505050565b6111b1611362565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611218906138af565b60405180910390fd5b61122a81611ba4565b50565b6112356113fa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061127b575061127a836112756113fa565b611074565b5b6112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b19061386f565b60405180910390fd5b6112c5838383612073565b505050565b6112d2611362565b80600660016101000a81548161ffff021916908361ffff16021790555050565b60075481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61136a6113fa565b73ffffffffffffffffffffffffffffffffffffffff16611388610b0d565b73ffffffffffffffffffffffffffffffffffffffff16146113de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d5906139af565b60405180910390fd5b565b80600290805190602001906113f692919061291d565b5050565b600033905090565b8151835114611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d90613a8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad9061394f565b60405180910390fd5b60006114c06113fa565b90506114d08187878787876122ba565b60005b84518110156116815760008582815181106114f1576114f0613efc565b5b6020026020010151905060008583815181106115105761150f613efc565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a89061398f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116669190613c7e565b925050819055505050508061167a90613e55565b90506114d3565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116f89291906137db565b60405180910390a461170e8187878787876122d0565b61171c8187878787876122d8565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613aaf565b60405180910390fd5b600061179e6113fa565b905060006117ab856124bf565b905060006117b8856124bf565b90506117c9836000898585896122ba565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118289190613c7e565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516118a6929190613b05565b60405180910390a46118bd836000898585896122d0565b6118cc83600089898989612539565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c9061396f565b60405180910390fd5b8051825114611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198090613a8f565b60405180910390fd5b60006119936113fa565b90506119b3818560008686604051806020016040528060008152506122ba565b60005b8351811015611b005760008482815181106119d4576119d3613efc565b5b6020026020010151905060008483815181106119f3576119f2613efc565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8b906138cf565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611af890613e55565b9150506119b6565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611b789291906137db565b60405180910390a4611b9e818560008686604051806020016040528060008152506122d0565b50505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090613a4f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dca9190613812565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e9061394f565b60405180910390fd5b6000611e516113fa565b90506000611e5e856124bf565b90506000611e6b856124bf565b9050611e7b8389898585896122ba565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f099061398f565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fc79190613c7e565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612044929190613b05565b60405180910390a461205a848a8a86868a6122d0565b612068848a8a8a8a8a612539565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da9061396f565b60405180910390fd5b60006120ed6113fa565b905060006120fa846124bf565b90506000612107846124bf565b9050612127838760008585604051806020016040528060008152506122ba565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156121be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b5906138cf565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161228b929190613b05565b60405180910390a46122b1848860008686604051806020016040528060008152506122d0565b50505050505050565b6122c8868686868686612720565b505050505050565b505050505050565b6122f78473ffffffffffffffffffffffffffffffffffffffff166128f2565b156124b7578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161233d9594939291906136f7565b602060405180830381600087803b15801561235757600080fd5b505af192505050801561238857506040513d601f19601f820116820180604052508101906123859190613156565b60015b61242e57612394613f5a565b806308c379a014156123f157506123a9614500565b806123b457506123f3565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e8919061382d565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124259061384f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac9061388f565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156124de576124dd613f2b565b5b60405190808252806020026020018201604052801561250c5781602001602082028036833780820191505090505b509050828160008151811061252457612523613efc565b5b60200260200101818152505080915050919050565b6125588473ffffffffffffffffffffffffffffffffffffffff166128f2565b15612718578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161259e95949392919061375f565b602060405180830381600087803b1580156125b857600080fd5b505af19250505080156125e957506040513d601f19601f820116820180604052508101906125e69190613156565b60015b61268f576125f5613f5a565b806308c379a01415612652575061260a614500565b806126155750612654565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612649919061382d565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126869061384f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270d9061388f565b60405180910390fd5b505b505050505050565b61272e868686868686612915565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156127e05760005b83518110156127de5782818151811061278257612781613efc565b5b6020026020010151600360008684815181106127a1576127a0613efc565b5b6020026020010151815260200190815260200160002060008282546127c69190613c7e565b92505081905550806127d790613e55565b9050612766565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156128ea5760005b83518110156128e857600084828151811061283657612835613efc565b5b60200260200101519050600084838151811061285557612854613efc565b5b60200260200101519050600060036000848152602001908152602001600020549050818110156128ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b1906139ef565b60405180910390fd5b8181036003600085815260200190815260200160002081905550505050806128e190613e55565b9050612818565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b82805461292990613df2565b90600052602060002090601f01602090048101928261294b5760008555612992565b82601f1061296457805160ff1916838001178555612992565b82800160010185558215612992579182015b82811115612991578251825591602001919060010190612976565b5b50905061299f91906129a3565b5090565b5b808211156129bc5760008160009055506001016129a4565b5090565b60006129d36129ce84613b53565b613b2e565b905080838252602082019050828560208602820111156129f6576129f5613f86565b5b60005b85811015612a265781612a0c8882612b24565b8452602084019350602083019250506001810190506129f9565b5050509392505050565b6000612a43612a3e84613b7f565b613b2e565b90508083825260208201905082856020860282011115612a6657612a65613f86565b5b60005b85811015612a965781612a7c8882612cf1565b845260208401935060208301925050600181019050612a69565b5050509392505050565b6000612ab3612aae84613bab565b613b2e565b905082815260208101848484011115612acf57612ace613f8b565b5b612ada848285613db0565b509392505050565b6000612af5612af084613bdc565b613b2e565b905082815260208101848484011115612b1157612b10613f8b565b5b612b1c848285613db0565b509392505050565b600081359050612b3381614596565b92915050565b60008083601f840112612b4f57612b4e613f81565b5b8235905067ffffffffffffffff811115612b6c57612b6b613f7c565b5b602083019150836020820283011115612b8857612b87613f86565b5b9250929050565b600082601f830112612ba457612ba3613f81565b5b8135612bb48482602086016129c0565b91505092915050565b60008083601f840112612bd357612bd2613f81565b5b8235905067ffffffffffffffff811115612bf057612bef613f7c565b5b602083019150836020820283011115612c0c57612c0b613f86565b5b9250929050565b600082601f830112612c2857612c27613f81565b5b8135612c38848260208601612a30565b91505092915050565b600081359050612c50816145ad565b92915050565b600081359050612c65816145c4565b92915050565b600081519050612c7a816145c4565b92915050565b600082601f830112612c9557612c94613f81565b5b8135612ca5848260208601612aa0565b91505092915050565b600082601f830112612cc357612cc2613f81565b5b8135612cd3848260208601612ae2565b91505092915050565b600081359050612ceb816145db565b92915050565b600081359050612d00816145f2565b92915050565b600060208284031215612d1c57612d1b613f95565b5b6000612d2a84828501612b24565b91505092915050565b60008060408385031215612d4a57612d49613f95565b5b6000612d5885828601612b24565b9250506020612d6985828601612b24565b9150509250929050565b600080600080600060a08688031215612d8f57612d8e613f95565b5b6000612d9d88828901612b24565b9550506020612dae88828901612b24565b945050604086013567ffffffffffffffff811115612dcf57612dce613f90565b5b612ddb88828901612c13565b935050606086013567ffffffffffffffff811115612dfc57612dfb613f90565b5b612e0888828901612c13565b925050608086013567ffffffffffffffff811115612e2957612e28613f90565b5b612e3588828901612c80565b9150509295509295909350565b600080600080600060a08688031215612e5e57612e5d613f95565b5b6000612e6c88828901612b24565b9550506020612e7d88828901612b24565b9450506040612e8e88828901612cf1565b9350506060612e9f88828901612cf1565b925050608086013567ffffffffffffffff811115612ec057612ebf613f90565b5b612ecc88828901612c80565b9150509295509295909350565b600080600060608486031215612ef257612ef1613f95565b5b6000612f0086828701612b24565b935050602084013567ffffffffffffffff811115612f2157612f20613f90565b5b612f2d86828701612c13565b925050604084013567ffffffffffffffff811115612f4e57612f4d613f90565b5b612f5a86828701612c13565b9150509250925092565b60008060408385031215612f7b57612f7a613f95565b5b6000612f8985828601612b24565b9250506020612f9a85828601612c41565b9150509250929050565b60008060408385031215612fbb57612fba613f95565b5b6000612fc985828601612b24565b9250506020612fda85828601612cf1565b9150509250929050565b600080600060608486031215612ffd57612ffc613f95565b5b600061300b86828701612b24565b935050602061301c86828701612cf1565b925050604061302d86828701612cf1565b9150509250925092565b6000806040838503121561304e5761304d613f95565b5b600083013567ffffffffffffffff81111561306c5761306b613f90565b5b61307885828601612b8f565b925050602083013567ffffffffffffffff81111561309957613098613f90565b5b6130a585828601612c13565b9150509250929050565b600080602083850312156130c6576130c5613f95565b5b600083013567ffffffffffffffff8111156130e4576130e3613f90565b5b6130f085828601612bbd565b92509250509250929050565b60006020828403121561311257613111613f95565b5b600061312084828501612c41565b91505092915050565b60006020828403121561313f5761313e613f95565b5b600061314d84828501612c56565b91505092915050565b60006020828403121561316c5761316b613f95565b5b600061317a84828501612c6b565b91505092915050565b60006020828403121561319957613198613f95565b5b600082013567ffffffffffffffff8111156131b7576131b6613f90565b5b6131c384828501612cae565b91505092915050565b6000602082840312156131e2576131e1613f95565b5b60006131f084828501612cdc565b91505092915050565b60006020828403121561320f5761320e613f95565b5b600061321d84828501612cf1565b91505092915050565b60008060006060848603121561323f5761323e613f95565b5b600061324d86828701612cf1565b935050602061325e86828701612cf1565b925050604061326f86828701612b24565b9150509250925092565b6000806000806060858703121561329357613292613f95565b5b60006132a187828801612cf1565b94505060206132b287828801612cf1565b935050604085013567ffffffffffffffff8111156132d3576132d2613f90565b5b6132df87828801612b39565b925092505092959194509250565b60006132f983836136be565b60208301905092915050565b61330e81613d2e565b82525050565b600061331f82613c1d565b6133298185613c4b565b935061333483613c0d565b8060005b8381101561336557815161334c88826132ed565b975061335783613c3e565b925050600181019050613338565b5085935050505092915050565b61337b81613d40565b82525050565b600061338c82613c28565b6133968185613c5c565b93506133a6818560208601613dbf565b6133af81613f9a565b840191505092915050565b60006133c582613c33565b6133cf8185613c6d565b93506133df818560208601613dbf565b6133e881613f9a565b840191505092915050565b6000613400603483613c6d565b915061340b82613fb8565b604082019050919050565b6000613423602f83613c6d565b915061342e82614007565b604082019050919050565b6000613446602883613c6d565b915061345182614056565b604082019050919050565b6000613469602683613c6d565b9150613474826140a5565b604082019050919050565b600061348c602483613c6d565b9150613497826140f4565b604082019050919050565b60006134af602a83613c6d565b91506134ba82614143565b604082019050919050565b60006134d2601983613c6d565b91506134dd82614192565b602082019050919050565b60006134f5602083613c6d565b9150613500826141bb565b602082019050919050565b6000613518602583613c6d565b9150613523826141e4565b604082019050919050565b600061353b602383613c6d565b915061354682614233565b604082019050919050565b600061355e602a83613c6d565b915061356982614282565b604082019050919050565b6000613581602083613c6d565b915061358c826142d1565b602082019050919050565b60006135a4601983613c6d565b91506135af826142fa565b602082019050919050565b60006135c7602883613c6d565b91506135d282614323565b604082019050919050565b60006135ea601383613c6d565b91506135f582614372565b602082019050919050565b600061360d601283613c6d565b91506136188261439b565b602082019050919050565b6000613630602983613c6d565b915061363b826143c4565b604082019050919050565b6000613653602983613c6d565b915061365e82614413565b604082019050919050565b6000613676602883613c6d565b915061368182614462565b604082019050919050565b6000613699602183613c6d565b91506136a4826144b1565b604082019050919050565b6136b881613d78565b82525050565b6136c781613da6565b82525050565b6136d681613da6565b82525050565b60006020820190506136f16000830184613305565b92915050565b600060a08201905061370c6000830188613305565b6137196020830187613305565b818103604083015261372b8186613314565b9050818103606083015261373f8185613314565b905081810360808301526137538184613381565b90509695505050505050565b600060a0820190506137746000830188613305565b6137816020830187613305565b61378e60408301866136cd565b61379b60608301856136cd565b81810360808301526137ad8184613381565b90509695505050505050565b600060208201905081810360008301526137d38184613314565b905092915050565b600060408201905081810360008301526137f58185613314565b905081810360208301526138098184613314565b90509392505050565b60006020820190506138276000830184613372565b92915050565b6000602082019050818103600083015261384781846133ba565b905092915050565b60006020820190508181036000830152613868816133f3565b9050919050565b6000602082019050818103600083015261388881613416565b9050919050565b600060208201905081810360008301526138a881613439565b9050919050565b600060208201905081810360008301526138c88161345c565b9050919050565b600060208201905081810360008301526138e88161347f565b9050919050565b60006020820190508181036000830152613908816134a2565b9050919050565b60006020820190508181036000830152613928816134c5565b9050919050565b60006020820190508181036000830152613948816134e8565b9050919050565b600060208201905081810360008301526139688161350b565b9050919050565b600060208201905081810360008301526139888161352e565b9050919050565b600060208201905081810360008301526139a881613551565b9050919050565b600060208201905081810360008301526139c881613574565b9050919050565b600060208201905081810360008301526139e881613597565b9050919050565b60006020820190508181036000830152613a08816135ba565b9050919050565b60006020820190508181036000830152613a28816135dd565b9050919050565b60006020820190508181036000830152613a4881613600565b9050919050565b60006020820190508181036000830152613a6881613623565b9050919050565b60006020820190508181036000830152613a8881613646565b9050919050565b60006020820190508181036000830152613aa881613669565b9050919050565b60006020820190508181036000830152613ac88161368c565b9050919050565b6000602082019050613ae460008301846136af565b92915050565b6000602082019050613aff60008301846136cd565b92915050565b6000604082019050613b1a60008301856136cd565b613b2760208301846136cd565b9392505050565b6000613b38613b49565b9050613b448282613e24565b919050565b6000604051905090565b600067ffffffffffffffff821115613b6e57613b6d613f2b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613b9a57613b99613f2b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613bc657613bc5613f2b565b5b613bcf82613f9a565b9050602081019050919050565b600067ffffffffffffffff821115613bf757613bf6613f2b565b5b613c0082613f9a565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613c8982613da6565b9150613c9483613da6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cc957613cc8613e9e565b5b828201905092915050565b6000613cdf82613da6565b9150613cea83613da6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d2357613d22613e9e565b5b828202905092915050565b6000613d3982613d86565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ddd578082015181840152602081019050613dc2565b83811115613dec576000848401525b50505050565b60006002820490506001821680613e0a57607f821691505b60208210811415613e1e57613e1d613ecd565b5b50919050565b613e2d82613f9a565b810181811067ffffffffffffffff82111715613e4c57613e4b613f2b565b5b80604052505050565b6000613e6082613da6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e9357613e92613e9e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613f795760046000803e613f76600051613fab565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f526564656d7074696f6e206973206e6f74206163746976652e00000000000000600082015250565b7f57726f6e67206e756d626572206f6620746f6b656e73207375626d6974746564600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4561636820746f6b656e206d75737420626520756e6971756500000000000000600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f4e6f2072656d61696e696e6720737570706c7900000000000000000000000000600082015250565b7f4e6f2072656d616e696e6720737570706c790000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561451057614593565b614518613b49565b60043d036004823e80513d602482011167ffffffffffffffff82111715614540575050614593565b808201805167ffffffffffffffff81111561455e5750505050614593565b80602083010160043d03850181111561457b575050505050614593565b61458a82602001850186613e24565b82955050505050505b90565b61459f81613d2e565b81146145aa57600080fd5b50565b6145b681613d40565b81146145c157600080fd5b50565b6145cd81613d4c565b81146145d857600080fd5b50565b6145e481613d78565b81146145ef57600080fd5b50565b6145fb81613da6565b811461460657600080fd5b5056fea264697066735822122023b713720650eb55907a187db6f93b6dbd0c03e59a6888c134d3e94f50747b7d64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001e687474703a2f2f7777772e66696e732e7774662f746f6b656e2f7b69647d0000
-----Decoded View---------------
Arg [0] : _uri (string): http://www.fins.wtf/token/{id}
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [2] : 687474703a2f2f7777772e66696e732e7774662f746f6b656e2f7b69647d0000
Deployed Bytecode Sourcemap
42475:4672:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23624:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22647:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43400:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23368:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42642:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42782:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25568:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44894:451;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24020:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41249:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39932:359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2776:103;;;:::i;:::-;;43220:94;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42693:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2128:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42825:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24617:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42989:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41038:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44030:609;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45690:1454;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24844:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25084:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3034:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39597:327;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43032:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43179:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23624:230;23710:7;23757:1;23738:21;;:7;:21;;;;23730:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23824:9;:13;23834:2;23824:13;;;;;;;;;;;:22;23838:7;23824:22;;;;;;;;;;;;;;;;23817:29;;23624:230;;;;:::o;22647:310::-;22749:4;22801:26;22786:41;;;:11;:41;;;;:110;;;;22859:37;22844:52;;;:11;:52;;;;22786:110;:163;;;;22913:36;22937:11;22913:23;:36::i;:::-;22786:163;22766:183;;22647:310;;;:::o;43400:91::-;2014:13;:11;:13::i;:::-;43468:15:::1;43476:6;43468:7;:15::i;:::-;43400:91:::0;:::o;23368:105::-;23428:13;23461:4;23454:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23368:105;;;:::o;42642:42::-;42681:3;42642:42;:::o;42782:34::-;;;;;;;;;;;;;:::o;25568:439::-;25809:12;:10;:12::i;:::-;25801:20;;:4;:20;;;:60;;;;25825:36;25842:4;25848:12;:10;:12::i;:::-;25825:16;:36::i;:::-;25801:60;25779:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25947:52;25970:4;25976:2;25980:3;25985:7;25994:4;25947:22;:52::i;:::-;25568:439;;;;;:::o;44894:451::-;2014:13;:11;:13::i;:::-;42681:3:::1;45167:9;45142:12;:22;45155:8;45142:22;;;;;;;;;;;;:34;;;;:::i;:::-;:50;;45134:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;45277:9;45252:12;:22;45265:8;45252:22;;;;;;;;;;;;:34;;;;:::i;:::-;45227:12;:22;45240:8;45227:22;;;;;;;;;;;:59;;;;45297:40;45303:8;45313;45323:9;45297:40;;;;;;;;;;;::::0;:5:::1;:40::i;:::-;44894:451:::0;;;:::o;24020:524::-;24176:16;24237:3;:10;24218:8;:15;:29;24210:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24306:30;24353:8;:15;24339:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24306:63;;24387:9;24382:122;24406:8;:15;24402:1;:19;24382:122;;;24462:30;24472:8;24481:1;24472:11;;;;;;;;:::i;:::-;;;;;;;;24485:3;24489:1;24485:6;;;;;;;;:::i;:::-;;;;;;;;24462:9;:30::i;:::-;24443:13;24457:1;24443:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24423:3;;;;:::i;:::-;;;24382:122;;;;24523:13;24516:20;;;24020:524;;;;:::o;41249:122::-;41306:4;41362:1;41330:29;41356:2;41330:25;:29::i;:::-;:33;41323:40;;41249:122;;;:::o;39932:359::-;40108:12;:10;:12::i;:::-;40097:23;;:7;:23;;;:66;;;;40124:39;40141:7;40150:12;:10;:12::i;:::-;40124:16;:39::i;:::-;40097:66;40075:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;40251:32;40262:7;40271:3;40276:6;40251:10;:32::i;:::-;39932:359;;;:::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;43220:94::-;2014:13;:11;:13::i;:::-;43303:3:::1;43288:12;:18;;;;43220:94:::0;:::o;42693:48::-;;;;;;;;;;;;;;;;;:::o;2128:87::-;2174:7;2201:6;;;;;;;;;;;2194:13;;2128:87;:::o;42825:103::-;2014:13;:11;:13::i;:::-;42913:7:::1;42896:14;;:24;;;;;;;;;;;;;;;;;;42825:103:::0;:::o;24617:155::-;24712:52;24731:12;:10;:12::i;:::-;24745:8;24755;24712:18;:52::i;:::-;24617:155;;:::o;42989:34::-;;;;;;;;;;;;;:::o;41038:113::-;41100:7;41127:12;:16;41140:2;41127:16;;;;;;;;;;;;41120:23;;41038:113;;;:::o;44030:609::-;2014:13;:11;:13::i;:::-;42681:3:::1;44325:5;;:12;;44313:9;:24;;;;:::i;:::-;44287:12;:22;44300:8;44287:22;;;;;;;;;;;;:51;;;;:::i;:::-;:67;;44279:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;44454:5;;:12;;44442:9;:24;;;;:::i;:::-;44416:12;:22;44429:8;44416:22;;;;;;;;;;;;:51;;;;:::i;:::-;44391:12;:22;44404:8;44391:22;;;;;;;;;;;:76;;;;44485:9;44480:152;44504:5;;:12;;44500:1;:16;44480:152;;;44580:40;44586:5;;44592:1;44586:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;44596;44606:9;44580:40;;;;;;;;;;;::::0;:5:::1;:40::i;:::-;44518:3;;;;;:::i;:::-;;;;44480:152;;;;44030:609:::0;;;;:::o;45690:1454::-;45807:14;;;;;;;;;;;45799:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;45968:15;;;;;;;;;;;45954:29;;:3;;:10;;:29;45946:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;42681:3;46140:12;:26;46153:12;;46140:26;;;;;;;;;;;;:41;46132:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;46297:23;46337:2;46323:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46297:43;;46351:23;46391:15;;;;;;;;;;;46377:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46351:56;;46459:9;46454:448;46478:15;;;;;;;;;;;46474:19;;:1;:19;46454:448;;;46590:1;46580:3;;46584:1;46580:6;;;;;;;:::i;:::-;;;;;;;;:11;;:27;;;;;46605:2;46595:3;;46599:1;46595:6;;;;;;;:::i;:::-;;;;;;;;:12;;46580:27;46572:36;;;;;;46715:1;46697:6;46704:3;;46708:1;46704:6;;;;;;;:::i;:::-;;;;;;;;46697:14;;;;;;;;:::i;:::-;;;;;;;;:19;46689:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;46861:1;46844:6;46851:3;;46855:1;46851:6;;;;;;;:::i;:::-;;;;;;;;46844:14;;;;;;;;:::i;:::-;;;;;;;:18;;;;;46889:1;46877:6;46884:1;46877:9;;;;;;;;:::i;:::-;;;;;;;:13;;;;;46495:3;;;;;:::i;:::-;;;;46454:448;;;;47038:1;47009:12;:26;47022:12;;47009:26;;;;;;;;;;;;:30;;;;:::i;:::-;46980:12;:26;46993:12;;46980:26;;;;;;;;;;;:59;;;;47050:35;47061:10;47073:3;;47050:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47078:6;47050:10;:35::i;:::-;47096:38;47102:10;47114:12;;47128:1;47096:38;;;;;;;;;;;;:5;:38::i;:::-;45743:1401;;45690:1454;;:::o;24844:168::-;24943:4;24967:18;:27;24986:7;24967:27;;;;;;;;;;;;;;;:37;24995:8;24967:37;;;;;;;;;;;;;;;;;;;;;;;;;24960:44;;24844:168;;;;:::o;25084:407::-;25300:12;:10;:12::i;:::-;25292:20;;:4;:20;;;:60;;;;25316:36;25333:4;25339:12;:10;:12::i;:::-;25316:16;:36::i;:::-;25292:60;25270:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25438:45;25456:4;25462:2;25466;25470:6;25478:4;25438:17;:45::i;:::-;25084:407;;;;;:::o;3034:201::-;2014:13;:11;:13::i;:::-;3143:1:::1;3123:22;;:8;:22;;;;3115:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3199:28;3218:8;3199:18;:28::i;:::-;3034:201:::0;:::o;39597:327::-;39748:12;:10;:12::i;:::-;39737:23;;:7;:23;;;:66;;;;39764:39;39781:7;39790:12;:10;:12::i;:::-;39764:16;:39::i;:::-;39737:66;39715:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;39891:25;39897:7;39906:2;39910:5;39891;:25::i;:::-;39597:327;;;:::o;43032:107::-;2014:13;:11;:13::i;:::-;43124:7:::1;43106:15;;:25;;;;;;;;;;;;;;;;;;43032:107:::0;:::o;43179:32::-;;;;:::o;13928:157::-;14013:4;14052:25;14037:40;;;:11;:40;;;;14030:47;;13928:157;;;:::o;2293:132::-;2368:12;:10;:12::i;:::-;2357:23;;:7;:5;:7::i;:::-;:23;;;2349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:132::o;29793:88::-;29867:6;29860:4;:13;;;;;;;;;;;;:::i;:::-;;29793:88;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;27803:1146::-;28030:7;:14;28016:3;:10;:28;28008:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28122:1;28108:16;;:2;:16;;;;28100:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28179:16;28198:12;:10;:12::i;:::-;28179:31;;28223:60;28244:8;28254:4;28260:2;28264:3;28269:7;28278:4;28223:20;:60::i;:::-;28301:9;28296:421;28320:3;:10;28316:1;:14;28296:421;;;28352:10;28365:3;28369:1;28365:6;;;;;;;;:::i;:::-;;;;;;;;28352:19;;28386:14;28403:7;28411:1;28403:10;;;;;;;;:::i;:::-;;;;;;;;28386:27;;28430:19;28452:9;:13;28462:2;28452:13;;;;;;;;;;;:19;28466:4;28452:19;;;;;;;;;;;;;;;;28430:41;;28509:6;28494:11;:21;;28486:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28642:6;28628:11;:20;28606:9;:13;28616:2;28606:13;;;;;;;;;;;:19;28620:4;28606:19;;;;;;;;;;;;;;;:42;;;;28699:6;28678:9;:13;28688:2;28678:13;;;;;;;;;;;:17;28692:2;28678:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28337:380;;;28332:3;;;;:::i;:::-;;;28296:421;;;;28764:2;28734:47;;28758:4;28734:47;;28748:8;28734:47;;;28768:3;28773:7;28734:47;;;;;;;:::i;:::-;;;;;;;;28794:59;28814:8;28824:4;28830:2;28834:3;28839:7;28848:4;28794:19;:59::i;:::-;28866:75;28902:8;28912:4;28918:2;28922:3;28927:7;28936:4;28866:35;:75::i;:::-;27997:952;27803:1146;;;;;:::o;30267:729::-;30434:1;30420:16;;:2;:16;;;;30412:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30487:16;30506:12;:10;:12::i;:::-;30487:31;;30529:20;30552:21;30570:2;30552:17;:21::i;:::-;30529:44;;30584:24;30611:25;30629:6;30611:17;:25::i;:::-;30584:52;;30649:66;30670:8;30688:1;30692:2;30696:3;30701:7;30710:4;30649:20;:66::i;:::-;30749:6;30728:9;:13;30738:2;30728:13;;;;;;;;;;;:17;30742:2;30728:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30808:2;30771:52;;30804:1;30771:52;;30786:8;30771:52;;;30812:2;30816:6;30771:52;;;;;;;:::i;:::-;;;;;;;;30836:65;30856:8;30874:1;30878:2;30882:3;30887:7;30896:4;30836:19;:65::i;:::-;30914:74;30945:8;30963:1;30967:2;30971;30975:6;30983:4;30914:30;:74::i;:::-;30401:595;;;30267:729;;;;:::o;33568:969::-;33736:1;33720:18;;:4;:18;;;;33712:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33811:7;:14;33797:3;:10;:28;33789:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33883:16;33902:12;:10;:12::i;:::-;33883:31;;33927:66;33948:8;33958:4;33972:1;33976:3;33981:7;33927:66;;;;;;;;;;;;:20;:66::i;:::-;34011:9;34006:373;34030:3;:10;34026:1;:14;34006:373;;;34062:10;34075:3;34079:1;34075:6;;;;;;;;:::i;:::-;;;;;;;;34062:19;;34096:14;34113:7;34121:1;34113:10;;;;;;;;:::i;:::-;;;;;;;;34096:27;;34140:19;34162:9;:13;34172:2;34162:13;;;;;;;;;;;:19;34176:4;34162:19;;;;;;;;;;;;;;;;34140:41;;34219:6;34204:11;:21;;34196:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34346:6;34332:11;:20;34310:9;:13;34320:2;34310:13;;;;;;;;;;;:19;34324:4;34310:19;;;;;;;;;;;;;;;:42;;;;34047:332;;;34042:3;;;;;:::i;:::-;;;;34006:373;;;;34434:1;34396:55;;34420:4;34396:55;;34410:8;34396:55;;;34438:3;34443:7;34396:55;;;;;;;:::i;:::-;;;;;;;;34464:65;34484:8;34494:4;34508:1;34512:3;34517:7;34464:65;;;;;;;;;;;;:19;:65::i;:::-;33701:836;33568:969;;;:::o;3395:191::-;3469:16;3488:6;;;;;;;;;;;3469:25;;3514:8;3505:6;;:17;;;;;;;;;;;;;;;;;;3569:8;3538:40;;3559:8;3538:40;;;;;;;;;;;;3458:128;3395:191;:::o;34680:331::-;34835:8;34826:17;;:5;:17;;;;34818:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34938:8;34900:18;:25;34919:5;34900:25;;;;;;;;;;;;;;;:35;34926:8;34900:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34984:8;34962:41;;34977:5;34962:41;;;34994:8;34962:41;;;;;;:::i;:::-;;;;;;;;34680:331;;;:::o;26471:974::-;26673:1;26659:16;;:2;:16;;;;26651:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26730:16;26749:12;:10;:12::i;:::-;26730:31;;26772:20;26795:21;26813:2;26795:17;:21::i;:::-;26772:44;;26827:24;26854:25;26872:6;26854:17;:25::i;:::-;26827:52;;26892:60;26913:8;26923:4;26929:2;26933:3;26938:7;26947:4;26892:20;:60::i;:::-;26965:19;26987:9;:13;26997:2;26987:13;;;;;;;;;;;:19;27001:4;26987:19;;;;;;;;;;;;;;;;26965:41;;27040:6;27025:11;:21;;27017:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27165:6;27151:11;:20;27129:9;:13;27139:2;27129:13;;;;;;;;;;;:19;27143:4;27129:19;;;;;;;;;;;;;;;:42;;;;27214:6;27193:9;:13;27203:2;27193:13;;;;;;;;;;;:17;27207:2;27193:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27269:2;27238:46;;27263:4;27238:46;;27253:8;27238:46;;;27273:2;27277:6;27238:46;;;;;;;:::i;:::-;;;;;;;;27297:59;27317:8;27327:4;27333:2;27337:3;27342:7;27351:4;27297:19;:59::i;:::-;27369:68;27400:8;27410:4;27416:2;27420;27424:6;27432:4;27369:30;:68::i;:::-;26640:805;;;;26471:974;;;;;:::o;32510:808::-;32653:1;32637:18;;:4;:18;;;;32629:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32708:16;32727:12;:10;:12::i;:::-;32708:31;;32750:20;32773:21;32791:2;32773:17;:21::i;:::-;32750:44;;32805:24;32832:25;32850:6;32832:17;:25::i;:::-;32805:52;;32870:66;32891:8;32901:4;32915:1;32919:3;32924:7;32870:66;;;;;;;;;;;;:20;:66::i;:::-;32949:19;32971:9;:13;32981:2;32971:13;;;;;;;;;;;:19;32985:4;32971:19;;;;;;;;;;;;;;;;32949:41;;33024:6;33009:11;:21;;33001:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33143:6;33129:11;:20;33107:9;:13;33117:2;33107:13;;;;;;;;;;;:19;33121:4;33107:19;;;;;;;;;;;;;;;:42;;;;33217:1;33178:54;;33203:4;33178:54;;33193:8;33178:54;;;33221:2;33225:6;33178:54;;;;;;;:::i;:::-;;;;;;;;33245:65;33265:8;33275:4;33289:1;33293:3;33298:7;33245:65;;;;;;;;;;;;:19;:65::i;:::-;32618:700;;;;32510:808;;;:::o;45353:329::-;45608:66;45635:8;45645:4;45651:2;45655:3;45660:7;45669:4;45608:26;:66::i;:::-;45353:329;;;;;;:::o;37145:220::-;;;;;;;:::o;38125:813::-;38365:15;:2;:13;;;:15::i;:::-;38361:570;;;38418:2;38401:43;;;38445:8;38455:4;38461:3;38466:7;38475:4;38401:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38397:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38793:6;38786:14;;;;;;;;;;;:::i;:::-;;;;;;;;38397:523;;;38842:62;;;;;;;;;;:::i;:::-;;;;;;;;38397:523;38574:48;;;38562:60;;;:8;:60;;;;38558:159;;38647:50;;;;;;;;;;:::i;:::-;;;;;;;;38558:159;38481:251;38361:570;38125:813;;;;;;:::o;38946:198::-;39012:16;39041:22;39080:1;39066:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39041:41;;39104:7;39093:5;39099:1;39093:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39131:5;39124:12;;;38946:198;;;:::o;37373:744::-;37588:15;:2;:13;;;:15::i;:::-;37584:526;;;37641:2;37624:38;;;37663:8;37673:4;37679:2;37683:6;37691:4;37624:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37620:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37972:6;37965:14;;;;;;;;;;;:::i;:::-;;;;;;;;37620:479;;;38021:62;;;;;;;;;;:::i;:::-;;;;;;;;37620:479;37758:43;;;37746:55;;;:8;:55;;;;37742:154;;37826:50;;;;;;;;;;:::i;:::-;;;;;;;;37742:154;37697:214;37584:526;37373:744;;;;;;:::o;41446:931::-;41685:66;41712:8;41722:4;41728:2;41732:3;41737:7;41746:4;41685:26;:66::i;:::-;41784:1;41768:18;;:4;:18;;;41764:160;;;41808:9;41803:110;41827:3;:10;41823:1;:14;41803:110;;;41887:7;41895:1;41887:10;;;;;;;;:::i;:::-;;;;;;;;41863:12;:20;41876:3;41880:1;41876:6;;;;;;;;:::i;:::-;;;;;;;;41863:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;41839:3;;;;:::i;:::-;;;41803:110;;;;41764:160;41954:1;41940:16;;:2;:16;;;41936:434;;;41978:9;41973:386;41997:3;:10;41993:1;:14;41973:386;;;42033:10;42046:3;42050:1;42046:6;;;;;;;;:::i;:::-;;;;;;;;42033:19;;42071:14;42088:7;42096:1;42088:10;;;;;;;;:::i;:::-;;;;;;;;42071:27;;42117:14;42134:12;:16;42147:2;42134:16;;;;;;;;;;;;42117:33;;42187:6;42177;:16;;42169:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42318:6;42309;:15;42290:12;:16;42303:2;42290:16;;;;;;;;;;;:34;;;;42014:345;;;42009:3;;;;:::i;:::-;;;41973:386;;;;41936:434;41446:931;;;;;;:::o;4826:326::-;4886:4;5143:1;5121:7;:19;;;:23;5114:30;;4826:326;;;:::o;35969:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:568::-;2566:8;2576:6;2626:3;2619:4;2611:6;2607:17;2603:27;2593:122;;2634:79;;:::i;:::-;2593:122;2747:6;2734:20;2724:30;;2777:18;2769:6;2766:30;2763:117;;;2799:79;;:::i;:::-;2763:117;2913:4;2905:6;2901:17;2889:29;;2967:3;2959:4;2951:6;2947:17;2937:8;2933:32;2930:41;2927:128;;;2974:79;;:::i;:::-;2927:128;2493:568;;;;;:::o;3084:370::-;3155:5;3204:3;3197:4;3189:6;3185:17;3181:27;3171:122;;3212:79;;:::i;:::-;3171:122;3329:6;3316:20;3354:94;3444:3;3436:6;3429:4;3421:6;3417:17;3354:94;:::i;:::-;3345:103;;3161:293;3084:370;;;;:::o;3477:568::-;3550:8;3560:6;3610:3;3603:4;3595:6;3591:17;3587:27;3577:122;;3618:79;;:::i;:::-;3577:122;3731:6;3718:20;3708:30;;3761:18;3753:6;3750:30;3747:117;;;3783:79;;:::i;:::-;3747:117;3897:4;3889:6;3885:17;3873:29;;3951:3;3943:4;3935:6;3931:17;3921:8;3917:32;3914:41;3911:128;;;3958:79;;:::i;:::-;3911:128;3477:568;;;;;:::o;4068:370::-;4139:5;4188:3;4181:4;4173:6;4169:17;4165:27;4155:122;;4196:79;;:::i;:::-;4155:122;4313:6;4300:20;4338:94;4428:3;4420:6;4413:4;4405:6;4401:17;4338:94;:::i;:::-;4329:103;;4145:293;4068:370;;;;:::o;4444:133::-;4487:5;4525:6;4512:20;4503:29;;4541:30;4565:5;4541:30;:::i;:::-;4444:133;;;;:::o;4583:137::-;4628:5;4666:6;4653:20;4644:29;;4682:32;4708:5;4682:32;:::i;:::-;4583:137;;;;:::o;4726:141::-;4782:5;4813:6;4807:13;4798:22;;4829:32;4855:5;4829:32;:::i;:::-;4726:141;;;;:::o;4886:338::-;4941:5;4990:3;4983:4;4975:6;4971:17;4967:27;4957:122;;4998:79;;:::i;:::-;4957:122;5115:6;5102:20;5140:78;5214:3;5206:6;5199:4;5191:6;5187:17;5140:78;:::i;:::-;5131:87;;4947:277;4886:338;;;;:::o;5244:340::-;5300:5;5349:3;5342:4;5334:6;5330:17;5326:27;5316:122;;5357:79;;:::i;:::-;5316:122;5474:6;5461:20;5499:79;5574:3;5566:6;5559:4;5551:6;5547:17;5499:79;:::i;:::-;5490:88;;5306:278;5244:340;;;;:::o;5590:137::-;5635:5;5673:6;5660:20;5651:29;;5689:32;5715:5;5689:32;:::i;:::-;5590:137;;;;:::o;5733:139::-;5779:5;5817:6;5804:20;5795:29;;5833:33;5860:5;5833:33;:::i;:::-;5733:139;;;;:::o;5878:329::-;5937:6;5986:2;5974:9;5965:7;5961:23;5957:32;5954:119;;;5992:79;;:::i;:::-;5954:119;6112:1;6137:53;6182:7;6173:6;6162:9;6158:22;6137:53;:::i;:::-;6127:63;;6083:117;5878:329;;;;:::o;6213:474::-;6281:6;6289;6338:2;6326:9;6317:7;6313:23;6309:32;6306:119;;;6344:79;;:::i;:::-;6306:119;6464:1;6489:53;6534:7;6525:6;6514:9;6510:22;6489:53;:::i;:::-;6479:63;;6435:117;6591:2;6617:53;6662:7;6653:6;6642:9;6638:22;6617:53;:::i;:::-;6607:63;;6562:118;6213:474;;;;;:::o;6693:1509::-;6847:6;6855;6863;6871;6879;6928:3;6916:9;6907:7;6903:23;6899:33;6896:120;;;6935:79;;:::i;:::-;6896:120;7055:1;7080:53;7125:7;7116:6;7105:9;7101:22;7080:53;:::i;:::-;7070:63;;7026:117;7182:2;7208:53;7253:7;7244:6;7233:9;7229:22;7208:53;:::i;:::-;7198:63;;7153:118;7338:2;7327:9;7323:18;7310:32;7369:18;7361:6;7358:30;7355:117;;;7391:79;;:::i;:::-;7355:117;7496:78;7566:7;7557:6;7546:9;7542:22;7496:78;:::i;:::-;7486:88;;7281:303;7651:2;7640:9;7636:18;7623:32;7682:18;7674:6;7671:30;7668:117;;;7704:79;;:::i;:::-;7668:117;7809:78;7879:7;7870:6;7859:9;7855:22;7809:78;:::i;:::-;7799:88;;7594:303;7964:3;7953:9;7949:19;7936:33;7996:18;7988:6;7985:30;7982:117;;;8018:79;;:::i;:::-;7982:117;8123:62;8177:7;8168:6;8157:9;8153:22;8123:62;:::i;:::-;8113:72;;7907:288;6693:1509;;;;;;;;:::o;8208:1089::-;8312:6;8320;8328;8336;8344;8393:3;8381:9;8372:7;8368:23;8364:33;8361:120;;;8400:79;;:::i;:::-;8361:120;8520:1;8545:53;8590:7;8581:6;8570:9;8566:22;8545:53;:::i;:::-;8535:63;;8491:117;8647:2;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8618:118;8775:2;8801:53;8846:7;8837:6;8826:9;8822:22;8801:53;:::i;:::-;8791:63;;8746:118;8903:2;8929:53;8974:7;8965:6;8954:9;8950:22;8929:53;:::i;:::-;8919:63;;8874:118;9059:3;9048:9;9044:19;9031:33;9091:18;9083:6;9080:30;9077:117;;;9113:79;;:::i;:::-;9077:117;9218:62;9272:7;9263:6;9252:9;9248:22;9218:62;:::i;:::-;9208:72;;9002:288;8208:1089;;;;;;;;:::o;9303:1039::-;9430:6;9438;9446;9495:2;9483:9;9474:7;9470:23;9466:32;9463:119;;;9501:79;;:::i;:::-;9463:119;9621:1;9646:53;9691:7;9682:6;9671:9;9667:22;9646:53;:::i;:::-;9636:63;;9592:117;9776:2;9765:9;9761:18;9748:32;9807:18;9799:6;9796:30;9793:117;;;9829:79;;:::i;:::-;9793:117;9934:78;10004:7;9995:6;9984:9;9980:22;9934:78;:::i;:::-;9924:88;;9719:303;10089:2;10078:9;10074:18;10061:32;10120:18;10112:6;10109:30;10106:117;;;10142:79;;:::i;:::-;10106:117;10247:78;10317:7;10308:6;10297:9;10293:22;10247:78;:::i;:::-;10237:88;;10032:303;9303:1039;;;;;:::o;10348:468::-;10413:6;10421;10470:2;10458:9;10449:7;10445:23;10441:32;10438:119;;;10476:79;;:::i;:::-;10438:119;10596:1;10621:53;10666:7;10657:6;10646:9;10642:22;10621:53;:::i;:::-;10611:63;;10567:117;10723:2;10749:50;10791:7;10782:6;10771:9;10767:22;10749:50;:::i;:::-;10739:60;;10694:115;10348:468;;;;;:::o;10822:474::-;10890:6;10898;10947:2;10935:9;10926:7;10922:23;10918:32;10915:119;;;10953:79;;:::i;:::-;10915:119;11073:1;11098:53;11143:7;11134:6;11123:9;11119:22;11098:53;:::i;:::-;11088:63;;11044:117;11200:2;11226:53;11271:7;11262:6;11251:9;11247:22;11226:53;:::i;:::-;11216:63;;11171:118;10822:474;;;;;:::o;11302:619::-;11379:6;11387;11395;11444:2;11432:9;11423:7;11419:23;11415:32;11412:119;;;11450:79;;:::i;:::-;11412:119;11570:1;11595:53;11640:7;11631:6;11620:9;11616:22;11595:53;:::i;:::-;11585:63;;11541:117;11697:2;11723:53;11768:7;11759:6;11748:9;11744:22;11723:53;:::i;:::-;11713:63;;11668:118;11825:2;11851:53;11896:7;11887:6;11876:9;11872:22;11851:53;:::i;:::-;11841:63;;11796:118;11302:619;;;;;:::o;11927:894::-;12045:6;12053;12102:2;12090:9;12081:7;12077:23;12073:32;12070:119;;;12108:79;;:::i;:::-;12070:119;12256:1;12245:9;12241:17;12228:31;12286:18;12278:6;12275:30;12272:117;;;12308:79;;:::i;:::-;12272:117;12413:78;12483:7;12474:6;12463:9;12459:22;12413:78;:::i;:::-;12403:88;;12199:302;12568:2;12557:9;12553:18;12540:32;12599:18;12591:6;12588:30;12585:117;;;12621:79;;:::i;:::-;12585:117;12726:78;12796:7;12787:6;12776:9;12772:22;12726:78;:::i;:::-;12716:88;;12511:303;11927:894;;;;;:::o;12827:559::-;12913:6;12921;12970:2;12958:9;12949:7;12945:23;12941:32;12938:119;;;12976:79;;:::i;:::-;12938:119;13124:1;13113:9;13109:17;13096:31;13154:18;13146:6;13143:30;13140:117;;;13176:79;;:::i;:::-;13140:117;13289:80;13361:7;13352:6;13341:9;13337:22;13289:80;:::i;:::-;13271:98;;;;13067:312;12827:559;;;;;:::o;13392:323::-;13448:6;13497:2;13485:9;13476:7;13472:23;13468:32;13465:119;;;13503:79;;:::i;:::-;13465:119;13623:1;13648:50;13690:7;13681:6;13670:9;13666:22;13648:50;:::i;:::-;13638:60;;13594:114;13392:323;;;;:::o;13721:327::-;13779:6;13828:2;13816:9;13807:7;13803:23;13799:32;13796:119;;;13834:79;;:::i;:::-;13796:119;13954:1;13979:52;14023:7;14014:6;14003:9;13999:22;13979:52;:::i;:::-;13969:62;;13925:116;13721:327;;;;:::o;14054:349::-;14123:6;14172:2;14160:9;14151:7;14147:23;14143:32;14140:119;;;14178:79;;:::i;:::-;14140:119;14298:1;14323:63;14378:7;14369:6;14358:9;14354:22;14323:63;:::i;:::-;14313:73;;14269:127;14054:349;;;;:::o;14409:509::-;14478:6;14527:2;14515:9;14506:7;14502:23;14498:32;14495:119;;;14533:79;;:::i;:::-;14495:119;14681:1;14670:9;14666:17;14653:31;14711:18;14703:6;14700:30;14697:117;;;14733:79;;:::i;:::-;14697:117;14838:63;14893:7;14884:6;14873:9;14869:22;14838:63;:::i;:::-;14828:73;;14624:287;14409:509;;;;:::o;14924:327::-;14982:6;15031:2;15019:9;15010:7;15006:23;15002:32;14999:119;;;15037:79;;:::i;:::-;14999:119;15157:1;15182:52;15226:7;15217:6;15206:9;15202:22;15182:52;:::i;:::-;15172:62;;15128:116;14924:327;;;;:::o;15257:329::-;15316:6;15365:2;15353:9;15344:7;15340:23;15336:32;15333:119;;;15371:79;;:::i;:::-;15333:119;15491:1;15516:53;15561:7;15552:6;15541:9;15537:22;15516:53;:::i;:::-;15506:63;;15462:117;15257:329;;;;:::o;15592:619::-;15669:6;15677;15685;15734:2;15722:9;15713:7;15709:23;15705:32;15702:119;;;15740:79;;:::i;:::-;15702:119;15860:1;15885:53;15930:7;15921:6;15910:9;15906:22;15885:53;:::i;:::-;15875:63;;15831:117;15987:2;16013:53;16058:7;16049:6;16038:9;16034:22;16013:53;:::i;:::-;16003:63;;15958:118;16115:2;16141:53;16186:7;16177:6;16166:9;16162:22;16141:53;:::i;:::-;16131:63;;16086:118;15592:619;;;;;:::o;16217:849::-;16321:6;16329;16337;16345;16394:2;16382:9;16373:7;16369:23;16365:32;16362:119;;;16400:79;;:::i;:::-;16362:119;16520:1;16545:53;16590:7;16581:6;16570:9;16566:22;16545:53;:::i;:::-;16535:63;;16491:117;16647:2;16673:53;16718:7;16709:6;16698:9;16694:22;16673:53;:::i;:::-;16663:63;;16618:118;16803:2;16792:9;16788:18;16775:32;16834:18;16826:6;16823:30;16820:117;;;16856:79;;:::i;:::-;16820:117;16969:80;17041:7;17032:6;17021:9;17017:22;16969:80;:::i;:::-;16951:98;;;;16746:313;16217:849;;;;;;;:::o;17072:179::-;17141:10;17162:46;17204:3;17196:6;17162:46;:::i;:::-;17240:4;17235:3;17231:14;17217:28;;17072:179;;;;:::o;17257:118::-;17344:24;17362:5;17344:24;:::i;:::-;17339:3;17332:37;17257:118;;:::o;17411:732::-;17530:3;17559:54;17607:5;17559:54;:::i;:::-;17629:86;17708:6;17703:3;17629:86;:::i;:::-;17622:93;;17739:56;17789:5;17739:56;:::i;:::-;17818:7;17849:1;17834:284;17859:6;17856:1;17853:13;17834:284;;;17935:6;17929:13;17962:63;18021:3;18006:13;17962:63;:::i;:::-;17955:70;;18048:60;18101:6;18048:60;:::i;:::-;18038:70;;17894:224;17881:1;17878;17874:9;17869:14;;17834:284;;;17838:14;18134:3;18127:10;;17535:608;;;17411:732;;;;:::o;18149:109::-;18230:21;18245:5;18230:21;:::i;:::-;18225:3;18218:34;18149:109;;:::o;18264:360::-;18350:3;18378:38;18410:5;18378:38;:::i;:::-;18432:70;18495:6;18490:3;18432:70;:::i;:::-;18425:77;;18511:52;18556:6;18551:3;18544:4;18537:5;18533:16;18511:52;:::i;:::-;18588:29;18610:6;18588:29;:::i;:::-;18583:3;18579:39;18572:46;;18354:270;18264:360;;;;:::o;18630:364::-;18718:3;18746:39;18779:5;18746:39;:::i;:::-;18801:71;18865:6;18860:3;18801:71;:::i;:::-;18794:78;;18881:52;18926:6;18921:3;18914:4;18907:5;18903:16;18881:52;:::i;:::-;18958:29;18980:6;18958:29;:::i;:::-;18953:3;18949:39;18942:46;;18722:272;18630:364;;;;:::o;19000:366::-;19142:3;19163:67;19227:2;19222:3;19163:67;:::i;:::-;19156:74;;19239:93;19328:3;19239:93;:::i;:::-;19357:2;19352:3;19348:12;19341:19;;19000:366;;;:::o;19372:::-;19514:3;19535:67;19599:2;19594:3;19535:67;:::i;:::-;19528:74;;19611:93;19700:3;19611:93;:::i;:::-;19729:2;19724:3;19720:12;19713:19;;19372:366;;;:::o;19744:::-;19886:3;19907:67;19971:2;19966:3;19907:67;:::i;:::-;19900:74;;19983:93;20072:3;19983:93;:::i;:::-;20101:2;20096:3;20092:12;20085:19;;19744:366;;;:::o;20116:::-;20258:3;20279:67;20343:2;20338:3;20279:67;:::i;:::-;20272:74;;20355:93;20444:3;20355:93;:::i;:::-;20473:2;20468:3;20464:12;20457:19;;20116:366;;;:::o;20488:::-;20630:3;20651:67;20715:2;20710:3;20651:67;:::i;:::-;20644:74;;20727:93;20816:3;20727:93;:::i;:::-;20845:2;20840:3;20836:12;20829:19;;20488:366;;;:::o;20860:::-;21002:3;21023:67;21087:2;21082:3;21023:67;:::i;:::-;21016:74;;21099:93;21188:3;21099:93;:::i;:::-;21217:2;21212:3;21208:12;21201:19;;20860:366;;;:::o;21232:::-;21374:3;21395:67;21459:2;21454:3;21395:67;:::i;:::-;21388:74;;21471:93;21560:3;21471:93;:::i;:::-;21589:2;21584:3;21580:12;21573:19;;21232:366;;;:::o;21604:::-;21746:3;21767:67;21831:2;21826:3;21767:67;:::i;:::-;21760:74;;21843:93;21932:3;21843:93;:::i;:::-;21961:2;21956:3;21952:12;21945:19;;21604:366;;;:::o;21976:::-;22118:3;22139:67;22203:2;22198:3;22139:67;:::i;:::-;22132:74;;22215:93;22304:3;22215:93;:::i;:::-;22333:2;22328:3;22324:12;22317:19;;21976:366;;;:::o;22348:::-;22490:3;22511:67;22575:2;22570:3;22511:67;:::i;:::-;22504:74;;22587:93;22676:3;22587:93;:::i;:::-;22705:2;22700:3;22696:12;22689:19;;22348:366;;;:::o;22720:::-;22862:3;22883:67;22947:2;22942:3;22883:67;:::i;:::-;22876:74;;22959:93;23048:3;22959:93;:::i;:::-;23077:2;23072:3;23068:12;23061:19;;22720:366;;;:::o;23092:::-;23234:3;23255:67;23319:2;23314:3;23255:67;:::i;:::-;23248:74;;23331:93;23420:3;23331:93;:::i;:::-;23449:2;23444:3;23440:12;23433:19;;23092:366;;;:::o;23464:::-;23606:3;23627:67;23691:2;23686:3;23627:67;:::i;:::-;23620:74;;23703:93;23792:3;23703:93;:::i;:::-;23821:2;23816:3;23812:12;23805:19;;23464:366;;;:::o;23836:::-;23978:3;23999:67;24063:2;24058:3;23999:67;:::i;:::-;23992:74;;24075:93;24164:3;24075:93;:::i;:::-;24193:2;24188:3;24184:12;24177:19;;23836:366;;;:::o;24208:::-;24350:3;24371:67;24435:2;24430:3;24371:67;:::i;:::-;24364:74;;24447:93;24536:3;24447:93;:::i;:::-;24565:2;24560:3;24556:12;24549:19;;24208:366;;;:::o;24580:::-;24722:3;24743:67;24807:2;24802:3;24743:67;:::i;:::-;24736:74;;24819:93;24908:3;24819:93;:::i;:::-;24937:2;24932:3;24928:12;24921:19;;24580:366;;;:::o;24952:::-;25094:3;25115:67;25179:2;25174:3;25115:67;:::i;:::-;25108:74;;25191:93;25280:3;25191:93;:::i;:::-;25309:2;25304:3;25300:12;25293:19;;24952:366;;;:::o;25324:::-;25466:3;25487:67;25551:2;25546:3;25487:67;:::i;:::-;25480:74;;25563:93;25652:3;25563:93;:::i;:::-;25681:2;25676:3;25672:12;25665:19;;25324:366;;;:::o;25696:::-;25838:3;25859:67;25923:2;25918:3;25859:67;:::i;:::-;25852:74;;25935:93;26024:3;25935:93;:::i;:::-;26053:2;26048:3;26044:12;26037:19;;25696:366;;;:::o;26068:::-;26210:3;26231:67;26295:2;26290:3;26231:67;:::i;:::-;26224:74;;26307:93;26396:3;26307:93;:::i;:::-;26425:2;26420:3;26416:12;26409:19;;26068:366;;;:::o;26440:115::-;26525:23;26542:5;26525:23;:::i;:::-;26520:3;26513:36;26440:115;;:::o;26561:108::-;26638:24;26656:5;26638:24;:::i;:::-;26633:3;26626:37;26561:108;;:::o;26675:118::-;26762:24;26780:5;26762:24;:::i;:::-;26757:3;26750:37;26675:118;;:::o;26799:222::-;26892:4;26930:2;26919:9;26915:18;26907:26;;26943:71;27011:1;27000:9;26996:17;26987:6;26943:71;:::i;:::-;26799:222;;;;:::o;27027:1053::-;27350:4;27388:3;27377:9;27373:19;27365:27;;27402:71;27470:1;27459:9;27455:17;27446:6;27402:71;:::i;:::-;27483:72;27551:2;27540:9;27536:18;27527:6;27483:72;:::i;:::-;27602:9;27596:4;27592:20;27587:2;27576:9;27572:18;27565:48;27630:108;27733:4;27724:6;27630:108;:::i;:::-;27622:116;;27785:9;27779:4;27775:20;27770:2;27759:9;27755:18;27748:48;27813:108;27916:4;27907:6;27813:108;:::i;:::-;27805:116;;27969:9;27963:4;27959:20;27953:3;27942:9;27938:19;27931:49;27997:76;28068:4;28059:6;27997:76;:::i;:::-;27989:84;;27027:1053;;;;;;;;:::o;28086:751::-;28309:4;28347:3;28336:9;28332:19;28324:27;;28361:71;28429:1;28418:9;28414:17;28405:6;28361:71;:::i;:::-;28442:72;28510:2;28499:9;28495:18;28486:6;28442:72;:::i;:::-;28524;28592:2;28581:9;28577:18;28568:6;28524:72;:::i;:::-;28606;28674:2;28663:9;28659:18;28650:6;28606:72;:::i;:::-;28726:9;28720:4;28716:20;28710:3;28699:9;28695:19;28688:49;28754:76;28825:4;28816:6;28754:76;:::i;:::-;28746:84;;28086:751;;;;;;;;:::o;28843:373::-;28986:4;29024:2;29013:9;29009:18;29001:26;;29073:9;29067:4;29063:20;29059:1;29048:9;29044:17;29037:47;29101:108;29204:4;29195:6;29101:108;:::i;:::-;29093:116;;28843:373;;;;:::o;29222:634::-;29443:4;29481:2;29470:9;29466:18;29458:26;;29530:9;29524:4;29520:20;29516:1;29505:9;29501:17;29494:47;29558:108;29661:4;29652:6;29558:108;:::i;:::-;29550:116;;29713:9;29707:4;29703:20;29698:2;29687:9;29683:18;29676:48;29741:108;29844:4;29835:6;29741:108;:::i;:::-;29733:116;;29222:634;;;;;:::o;29862:210::-;29949:4;29987:2;29976:9;29972:18;29964:26;;30000:65;30062:1;30051:9;30047:17;30038:6;30000:65;:::i;:::-;29862:210;;;;:::o;30078:313::-;30191:4;30229:2;30218:9;30214:18;30206:26;;30278:9;30272:4;30268:20;30264:1;30253:9;30249:17;30242:47;30306:78;30379:4;30370:6;30306:78;:::i;:::-;30298:86;;30078:313;;;;:::o;30397:419::-;30563:4;30601:2;30590:9;30586:18;30578:26;;30650:9;30644:4;30640:20;30636:1;30625:9;30621:17;30614:47;30678:131;30804:4;30678:131;:::i;:::-;30670:139;;30397:419;;;:::o;30822:::-;30988:4;31026:2;31015:9;31011:18;31003:26;;31075:9;31069:4;31065:20;31061:1;31050:9;31046:17;31039:47;31103:131;31229:4;31103:131;:::i;:::-;31095:139;;30822:419;;;:::o;31247:::-;31413:4;31451:2;31440:9;31436:18;31428:26;;31500:9;31494:4;31490:20;31486:1;31475:9;31471:17;31464:47;31528:131;31654:4;31528:131;:::i;:::-;31520:139;;31247:419;;;:::o;31672:::-;31838:4;31876:2;31865:9;31861:18;31853:26;;31925:9;31919:4;31915:20;31911:1;31900:9;31896:17;31889:47;31953:131;32079:4;31953:131;:::i;:::-;31945:139;;31672:419;;;:::o;32097:::-;32263:4;32301:2;32290:9;32286:18;32278:26;;32350:9;32344:4;32340:20;32336:1;32325:9;32321:17;32314:47;32378:131;32504:4;32378:131;:::i;:::-;32370:139;;32097:419;;;:::o;32522:::-;32688:4;32726:2;32715:9;32711:18;32703:26;;32775:9;32769:4;32765:20;32761:1;32750:9;32746:17;32739:47;32803:131;32929:4;32803:131;:::i;:::-;32795:139;;32522:419;;;:::o;32947:::-;33113:4;33151:2;33140:9;33136:18;33128:26;;33200:9;33194:4;33190:20;33186:1;33175:9;33171:17;33164:47;33228:131;33354:4;33228:131;:::i;:::-;33220:139;;32947:419;;;:::o;33372:::-;33538:4;33576:2;33565:9;33561:18;33553:26;;33625:9;33619:4;33615:20;33611:1;33600:9;33596:17;33589:47;33653:131;33779:4;33653:131;:::i;:::-;33645:139;;33372:419;;;:::o;33797:::-;33963:4;34001:2;33990:9;33986:18;33978:26;;34050:9;34044:4;34040:20;34036:1;34025:9;34021:17;34014:47;34078:131;34204:4;34078:131;:::i;:::-;34070:139;;33797:419;;;:::o;34222:::-;34388:4;34426:2;34415:9;34411:18;34403:26;;34475:9;34469:4;34465:20;34461:1;34450:9;34446:17;34439:47;34503:131;34629:4;34503:131;:::i;:::-;34495:139;;34222:419;;;:::o;34647:::-;34813:4;34851:2;34840:9;34836:18;34828:26;;34900:9;34894:4;34890:20;34886:1;34875:9;34871:17;34864:47;34928:131;35054:4;34928:131;:::i;:::-;34920:139;;34647:419;;;:::o;35072:::-;35238:4;35276:2;35265:9;35261:18;35253:26;;35325:9;35319:4;35315:20;35311:1;35300:9;35296:17;35289:47;35353:131;35479:4;35353:131;:::i;:::-;35345:139;;35072:419;;;:::o;35497:::-;35663:4;35701:2;35690:9;35686:18;35678:26;;35750:9;35744:4;35740:20;35736:1;35725:9;35721:17;35714:47;35778:131;35904:4;35778:131;:::i;:::-;35770:139;;35497:419;;;:::o;35922:::-;36088:4;36126:2;36115:9;36111:18;36103:26;;36175:9;36169:4;36165:20;36161:1;36150:9;36146:17;36139:47;36203:131;36329:4;36203:131;:::i;:::-;36195:139;;35922:419;;;:::o;36347:::-;36513:4;36551:2;36540:9;36536:18;36528:26;;36600:9;36594:4;36590:20;36586:1;36575:9;36571:17;36564:47;36628:131;36754:4;36628:131;:::i;:::-;36620:139;;36347:419;;;:::o;36772:::-;36938:4;36976:2;36965:9;36961:18;36953:26;;37025:9;37019:4;37015:20;37011:1;37000:9;36996:17;36989:47;37053:131;37179:4;37053:131;:::i;:::-;37045:139;;36772:419;;;:::o;37197:::-;37363:4;37401:2;37390:9;37386:18;37378:26;;37450:9;37444:4;37440:20;37436:1;37425:9;37421:17;37414:47;37478:131;37604:4;37478:131;:::i;:::-;37470:139;;37197:419;;;:::o;37622:::-;37788:4;37826:2;37815:9;37811:18;37803:26;;37875:9;37869:4;37865:20;37861:1;37850:9;37846:17;37839:47;37903:131;38029:4;37903:131;:::i;:::-;37895:139;;37622:419;;;:::o;38047:::-;38213:4;38251:2;38240:9;38236:18;38228:26;;38300:9;38294:4;38290:20;38286:1;38275:9;38271:17;38264:47;38328:131;38454:4;38328:131;:::i;:::-;38320:139;;38047:419;;;:::o;38472:::-;38638:4;38676:2;38665:9;38661:18;38653:26;;38725:9;38719:4;38715:20;38711:1;38700:9;38696:17;38689:47;38753:131;38879:4;38753:131;:::i;:::-;38745:139;;38472:419;;;:::o;38897:218::-;38988:4;39026:2;39015:9;39011:18;39003:26;;39039:69;39105:1;39094:9;39090:17;39081:6;39039:69;:::i;:::-;38897:218;;;;:::o;39121:222::-;39214:4;39252:2;39241:9;39237:18;39229:26;;39265:71;39333:1;39322:9;39318:17;39309:6;39265:71;:::i;:::-;39121:222;;;;:::o;39349:332::-;39470:4;39508:2;39497:9;39493:18;39485:26;;39521:71;39589:1;39578:9;39574:17;39565:6;39521:71;:::i;:::-;39602:72;39670:2;39659:9;39655:18;39646:6;39602:72;:::i;:::-;39349:332;;;;;:::o;39687:129::-;39721:6;39748:20;;:::i;:::-;39738:30;;39777:33;39805:4;39797:6;39777:33;:::i;:::-;39687:129;;;:::o;39822:75::-;39855:6;39888:2;39882:9;39872:19;;39822:75;:::o;39903:311::-;39980:4;40070:18;40062:6;40059:30;40056:56;;;40092:18;;:::i;:::-;40056:56;40142:4;40134:6;40130:17;40122:25;;40202:4;40196;40192:15;40184:23;;39903:311;;;:::o;40220:::-;40297:4;40387:18;40379:6;40376:30;40373:56;;;40409:18;;:::i;:::-;40373:56;40459:4;40451:6;40447:17;40439:25;;40519:4;40513;40509:15;40501:23;;40220:311;;;:::o;40537:307::-;40598:4;40688:18;40680:6;40677:30;40674:56;;;40710:18;;:::i;:::-;40674:56;40748:29;40770:6;40748:29;:::i;:::-;40740:37;;40832:4;40826;40822:15;40814:23;;40537:307;;;:::o;40850:308::-;40912:4;41002:18;40994:6;40991:30;40988:56;;;41024:18;;:::i;:::-;40988:56;41062:29;41084:6;41062:29;:::i;:::-;41054:37;;41146:4;41140;41136:15;41128:23;;40850:308;;;:::o;41164:132::-;41231:4;41254:3;41246:11;;41284:4;41279:3;41275:14;41267:22;;41164:132;;;:::o;41302:114::-;41369:6;41403:5;41397:12;41387:22;;41302:114;;;:::o;41422:98::-;41473:6;41507:5;41501:12;41491:22;;41422:98;;;:::o;41526:99::-;41578:6;41612:5;41606:12;41596:22;;41526:99;;;:::o;41631:113::-;41701:4;41733;41728:3;41724:14;41716:22;;41631:113;;;:::o;41750:184::-;41849:11;41883:6;41878:3;41871:19;41923:4;41918:3;41914:14;41899:29;;41750:184;;;;:::o;41940:168::-;42023:11;42057:6;42052:3;42045:19;42097:4;42092:3;42088:14;42073:29;;41940:168;;;;:::o;42114:169::-;42198:11;42232:6;42227:3;42220:19;42272:4;42267:3;42263:14;42248:29;;42114:169;;;;:::o;42289:305::-;42329:3;42348:20;42366:1;42348:20;:::i;:::-;42343:25;;42382:20;42400:1;42382:20;:::i;:::-;42377:25;;42536:1;42468:66;42464:74;42461:1;42458:81;42455:107;;;42542:18;;:::i;:::-;42455:107;42586:1;42583;42579:9;42572:16;;42289:305;;;;:::o;42600:348::-;42640:7;42663:20;42681:1;42663:20;:::i;:::-;42658:25;;42697:20;42715:1;42697:20;:::i;:::-;42692:25;;42885:1;42817:66;42813:74;42810:1;42807:81;42802:1;42795:9;42788:17;42784:105;42781:131;;;42892:18;;:::i;:::-;42781:131;42940:1;42937;42933:9;42922:20;;42600:348;;;;:::o;42954:96::-;42991:7;43020:24;43038:5;43020:24;:::i;:::-;43009:35;;42954:96;;;:::o;43056:90::-;43090:7;43133:5;43126:13;43119:21;43108:32;;43056:90;;;:::o;43152:149::-;43188:7;43228:66;43221:5;43217:78;43206:89;;43152:149;;;:::o;43307:89::-;43343:7;43383:6;43376:5;43372:18;43361:29;;43307:89;;;:::o;43402:126::-;43439:7;43479:42;43472:5;43468:54;43457:65;;43402:126;;;:::o;43534:77::-;43571:7;43600:5;43589:16;;43534:77;;;:::o;43617:154::-;43701:6;43696:3;43691;43678:30;43763:1;43754:6;43749:3;43745:16;43738:27;43617:154;;;:::o;43777:307::-;43845:1;43855:113;43869:6;43866:1;43863:13;43855:113;;;43954:1;43949:3;43945:11;43939:18;43935:1;43930:3;43926:11;43919:39;43891:2;43888:1;43884:10;43879:15;;43855:113;;;43986:6;43983:1;43980:13;43977:101;;;44066:1;44057:6;44052:3;44048:16;44041:27;43977:101;43826:258;43777:307;;;:::o;44090:320::-;44134:6;44171:1;44165:4;44161:12;44151:22;;44218:1;44212:4;44208:12;44239:18;44229:81;;44295:4;44287:6;44283:17;44273:27;;44229:81;44357:2;44349:6;44346:14;44326:18;44323:38;44320:84;;;44376:18;;:::i;:::-;44320:84;44141:269;44090:320;;;:::o;44416:281::-;44499:27;44521:4;44499:27;:::i;:::-;44491:6;44487:40;44629:6;44617:10;44614:22;44593:18;44581:10;44578:34;44575:62;44572:88;;;44640:18;;:::i;:::-;44572:88;44680:10;44676:2;44669:22;44459:238;44416:281;;:::o;44703:233::-;44742:3;44765:24;44783:5;44765:24;:::i;:::-;44756:33;;44811:66;44804:5;44801:77;44798:103;;;44881:18;;:::i;:::-;44798:103;44928:1;44921:5;44917:13;44910:20;;44703:233;;;:::o;44942:180::-;44990:77;44987:1;44980:88;45087:4;45084:1;45077:15;45111:4;45108:1;45101:15;45128:180;45176:77;45173:1;45166:88;45273:4;45270:1;45263:15;45297:4;45294:1;45287:15;45314:180;45362:77;45359:1;45352:88;45459:4;45456:1;45449:15;45483:4;45480:1;45473:15;45500:180;45548:77;45545:1;45538:88;45645:4;45642:1;45635:15;45669:4;45666:1;45659:15;45686:183;45721:3;45759:1;45741:16;45738:23;45735:128;;;45797:1;45794;45791;45776:23;45819:34;45850:1;45844:8;45819:34;:::i;:::-;45812:41;;45735:128;45686:183;:::o;45875:117::-;45984:1;45981;45974:12;45998:117;46107:1;46104;46097:12;46121:117;46230:1;46227;46220:12;46244:117;46353:1;46350;46343:12;46367:117;46476:1;46473;46466:12;46490:117;46599:1;46596;46589:12;46613:102;46654:6;46705:2;46701:7;46696:2;46689:5;46685:14;46681:28;46671:38;;46613:102;;;:::o;46721:106::-;46765:8;46814:5;46809:3;46805:15;46784:36;;46721:106;;;:::o;46833:239::-;46973:34;46969:1;46961:6;46957:14;46950:58;47042:22;47037:2;47029:6;47025:15;47018:47;46833:239;:::o;47078:234::-;47218:34;47214:1;47206:6;47202:14;47195:58;47287:17;47282:2;47274:6;47270:15;47263:42;47078:234;:::o;47318:227::-;47458:34;47454:1;47446:6;47442:14;47435:58;47527:10;47522:2;47514:6;47510:15;47503:35;47318:227;:::o;47551:225::-;47691:34;47687:1;47679:6;47675:14;47668:58;47760:8;47755:2;47747:6;47743:15;47736:33;47551:225;:::o;47782:223::-;47922:34;47918:1;47910:6;47906:14;47899:58;47991:6;47986:2;47978:6;47974:15;47967:31;47782:223;:::o;48011:229::-;48151:34;48147:1;48139:6;48135:14;48128:58;48220:12;48215:2;48207:6;48203:15;48196:37;48011:229;:::o;48246:175::-;48386:27;48382:1;48374:6;48370:14;48363:51;48246:175;:::o;48427:182::-;48567:34;48563:1;48555:6;48551:14;48544:58;48427:182;:::o;48615:224::-;48755:34;48751:1;48743:6;48739:14;48732:58;48824:7;48819:2;48811:6;48807:15;48800:32;48615:224;:::o;48845:222::-;48985:34;48981:1;48973:6;48969:14;48962:58;49054:5;49049:2;49041:6;49037:15;49030:30;48845:222;:::o;49073:229::-;49213:34;49209:1;49201:6;49197:14;49190:58;49282:12;49277:2;49269:6;49265:15;49258:37;49073:229;:::o;49308:182::-;49448:34;49444:1;49436:6;49432:14;49425:58;49308:182;:::o;49496:175::-;49636:27;49632:1;49624:6;49620:14;49613:51;49496:175;:::o;49677:227::-;49817:34;49813:1;49805:6;49801:14;49794:58;49886:10;49881:2;49873:6;49869:15;49862:35;49677:227;:::o;49910:169::-;50050:21;50046:1;50038:6;50034:14;50027:45;49910:169;:::o;50085:168::-;50225:20;50221:1;50213:6;50209:14;50202:44;50085:168;:::o;50259:228::-;50399:34;50395:1;50387:6;50383:14;50376:58;50468:11;50463:2;50455:6;50451:15;50444:36;50259:228;:::o;50493:::-;50633:34;50629:1;50621:6;50617:14;50610:58;50702:11;50697:2;50689:6;50685:15;50678:36;50493:228;:::o;50727:227::-;50867:34;50863:1;50855:6;50851:14;50844:58;50936:10;50931:2;50923:6;50919:15;50912:35;50727:227;:::o;50960:220::-;51100:34;51096:1;51088:6;51084:14;51077:58;51169:3;51164:2;51156:6;51152:15;51145:28;50960:220;:::o;51186:711::-;51225:3;51263:4;51245:16;51242:26;51239:39;;;51271:5;;51239:39;51300:20;;:::i;:::-;51375:1;51357:16;51353:24;51350:1;51344:4;51329:49;51408:4;51402:11;51507:16;51500:4;51492:6;51488:17;51485:39;51452:18;51444:6;51441:30;51425:113;51422:146;;;51553:5;;;;51422:146;51599:6;51593:4;51589:17;51635:3;51629:10;51662:18;51654:6;51651:30;51648:43;;;51684:5;;;;;;51648:43;51732:6;51725:4;51720:3;51716:14;51712:27;51791:1;51773:16;51769:24;51763:4;51759:35;51754:3;51751:44;51748:57;;;51798:5;;;;;;;51748:57;51815;51863:6;51857:4;51853:17;51845:6;51841:30;51835:4;51815:57;:::i;:::-;51888:3;51881:10;;51229:668;;;;;51186:711;;:::o;51903:122::-;51976:24;51994:5;51976:24;:::i;:::-;51969:5;51966:35;51956:63;;52015:1;52012;52005:12;51956:63;51903:122;:::o;52031:116::-;52101:21;52116:5;52101:21;:::i;:::-;52094:5;52091:32;52081:60;;52137:1;52134;52127:12;52081:60;52031:116;:::o;52153:120::-;52225:23;52242:5;52225:23;:::i;:::-;52218:5;52215:34;52205:62;;52263:1;52260;52253:12;52205:62;52153:120;:::o;52279:::-;52351:23;52368:5;52351:23;:::i;:::-;52344:5;52341:34;52331:62;;52389:1;52386;52379:12;52331:62;52279:120;:::o;52405:122::-;52478:24;52496:5;52478:24;:::i;:::-;52471:5;52468:35;52458:63;;52517:1;52514;52507:12;52458:63;52405:122;:::o
Swarm Source
ipfs://23b713720650eb55907a187db6f93b6dbd0c03e59a6888c134d3e94f50747b7d
Loading...
Loading
Loading...
Loading
[ 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.