Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
120
Holders
112
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CropClashAirdrops
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-24 */ // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT 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/token/ERC1155/[email protected] 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 be 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/[email protected] 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. 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. 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/extensions/[email protected] 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/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] 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/utils/introspection/[email protected] 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/[email protected] 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: balance query for the zero address"); 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 { require(_msgSender() != operator, "ERC1155: setting approval status for self"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 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: transfer caller is not 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(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), 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); _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); _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 `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address account, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][account] += amount; emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * 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); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn( address account, uint256 id, uint256 amount ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } emit TransferSingle(operator, account, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address account, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @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 `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 _beforeTokenTransfer( 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/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/access/[email protected] 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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File Contracts/CropClashAirdrops.sol //contracts/Tomaximus.sol pragma solidity ^0.8.9; contract CropClashAirdrops is ERC1155, Ownable { // Contract name string public name; // Contract symbol string public symbol; uint256 public constant TOMAXIMUS = 0; string public _baseTokenURI = "https://cropclash.mypinata.cloud/ipfs/QmREF7KPhwbDTvuTXe1EEFAdjvZbKbZcHVaGSRfcCksyLp/"; address[] public owners; // function createToken(string tokenName, uint256 tokenId, ) function addNewToken(uint DropID, uint ntokens, bytes memory IPFS_hash) public onlyOwner { _mint(msg.sender, DropID, ntokens, IPFS_hash); } function addToAllowList(address[] calldata addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Can't add a null address"); owners.push(addresses[i]); } } constructor() onlyOwner ERC1155(_baseTokenURI){ _mint(msg.sender, TOMAXIMUS, 120, ""); name = "Crop Clash Airdrops"; } function sendAirDrop() public onlyOwner{ for (uint i=0; i< owners.length; i++) { safeTransferFrom(0x4c5e309abc3A752afD2Baab6b302a90fA2a63dF2, owners[i], 0, 1, '0x00' ); } } function getOwners() public onlyOwner view returns( address [] memory){ return owners; } function getOwnersLength() public onlyOwner view returns( uint256){ return owners.length; } function setTokenURI(string memory id) public onlyOwner{ _baseTokenURI = id; } function setBaseURI(string memory base) public onlyOwner{ _setURI(base); } function uri(uint256 _tokenId) override public view returns (string memory) { return string( abi.encodePacked( _baseTokenURI, Strings.toString(_tokenId), ".json" ) ); } function contractURI() public view returns (string memory) { return _baseTokenURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"TOMAXIMUS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"DropID","type":"uint256"},{"internalType":"uint256","name":"ntokens","type":"uint256"},{"internalType":"bytes","name":"IPFS_hash","type":"bytes"}],"name":"addNewToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToAllowList","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":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnersLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"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":[],"name":"sendAirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"base","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"id","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260405180608001604052806055815260200162004d7760559139600690805190602001906200003592919062000790565b503480156200004357600080fd5b506006805462000053906200086f565b80601f016020809104026020016040519081016040528092919081815260200182805462000081906200086f565b8015620000d25780601f10620000a657610100808354040283529160200191620000d2565b820191906000526020600020905b815481529060010190602001808311620000b457829003601f168201915b5050505050620000e8816200021160201b60201c565b5062000109620000fd6200022d60201b60201c565b6200023560201b60201c565b620001196200022d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200013f620002fb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000198576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018f9062000906565b60405180910390fd5b620001bd3360006078604051806020016040528060008152506200032560201b60201c565b6040518060400160405280601381526020017f43726f7020436c6173682041697264726f707300000000000000000000000000815250600490805190602001906200020a92919062000790565b5062000f87565b80600290805190602001906200022992919062000790565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000398576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038f906200099e565b60405180910390fd5b6000620003aa6200022d60201b60201c565b9050620003e381600087620003c588620004ea60201b60201c565b620003d688620004ea60201b60201c565b876200056b60201b60201c565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620004449190620009f9565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051620004c492919062000a67565b60405180910390a4620004e3816000878787876200057360201b60201c565b5050505050565b60606000600167ffffffffffffffff8111156200050c576200050b62000a94565b5b6040519080825280602002602001820160405280156200053b5781602001602082028036833780820191505090505b509050828160008151811062000556576200055562000ac3565b5b60200260200101818152505080915050919050565b505050505050565b6200059f8473ffffffffffffffffffffffffffffffffffffffff166200077d60201b620015121760201c565b1562000775578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401620005e895949392919062000bdb565b602060405180830381600087803b1580156200060357600080fd5b505af19250505080156200063757506040513d601f19601f8201168201806040525081019062000634919062000cab565b60015b620006e9576200064662000cea565b806308c379a01415620006aa57506200065e62000d45565b806200066b5750620006ac565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006a1919062000e33565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e09062000ecd565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161462000773576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200076a9062000f65565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546200079e906200086f565b90600052602060002090601f016020900481019282620007c257600085556200080e565b82601f10620007dd57805160ff19168380011785556200080e565b828001600101855582156200080e579182015b828111156200080d578251825591602001919060010190620007f0565b5b5090506200081d919062000821565b5090565b5b808211156200083c57600081600090555060010162000822565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200088857607f821691505b602082108114156200089f576200089e62000840565b5b50919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620008ee602083620008a5565b9150620008fb82620008b6565b602082019050919050565b600060208201905081810360008301526200092181620008df565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600062000986602183620008a5565b9150620009938262000928565b604082019050919050565b60006020820190508181036000830152620009b98162000977565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a0682620009c0565b915062000a1383620009c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000a4b5762000a4a620009ca565b5b828201905092915050565b62000a6181620009c0565b82525050565b600060408201905062000a7e600083018562000a56565b62000a8d602083018462000a56565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b1f8262000af2565b9050919050565b62000b318162000b12565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000b7357808201518184015260208101905062000b56565b8381111562000b83576000848401525b50505050565b6000601f19601f8301169050919050565b600062000ba78262000b37565b62000bb3818562000b42565b935062000bc581856020860162000b53565b62000bd08162000b89565b840191505092915050565b600060a08201905062000bf2600083018862000b26565b62000c01602083018762000b26565b62000c10604083018662000a56565b62000c1f606083018562000a56565b818103608083015262000c33818462000b9a565b90509695505050505050565b6000604051905090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000c858162000c4e565b811462000c9157600080fd5b50565b60008151905062000ca58162000c7a565b92915050565b60006020828403121562000cc45762000cc362000c49565b5b600062000cd48482850162000c94565b91505092915050565b60008160e01c9050919050565b600060033d111562000d0c5760046000803e62000d0960005162000cdd565b90505b90565b62000d1a8262000b89565b810181811067ffffffffffffffff8211171562000d3c5762000d3b62000a94565b5b80604052505050565b600060443d101562000d575762000de4565b62000d6162000c3f565b60043d036004823e80513d602482011167ffffffffffffffff8211171562000d8b57505062000de4565b808201805167ffffffffffffffff81111562000dab575050505062000de4565b80602083010160043d03850181111562000dca57505050505062000de4565b62000ddb8260200185018662000d0f565b82955050505050505b90565b600081519050919050565b600062000dff8262000de7565b62000e0b8185620008a5565b935062000e1d81856020860162000b53565b62000e288162000b89565b840191505092915050565b6000602082019050818103600083015262000e4f818462000df2565b905092915050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600062000eb5603483620008a5565b915062000ec28262000e57565b604082019050919050565b6000602082019050818103600083015262000ee88162000ea6565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600062000f4d602883620008a5565b915062000f5a8262000eef565b604082019050919050565b6000602082019050818103600083015262000f808162000f3e565b9050919050565b613de08062000f976000396000f3fe608060405234801561001057600080fd5b50600436106101575760003560e01c80637263cfe2116100c3578063cfc86f7b1161007c578063cfc86f7b146103a0578063e0df5b6f146103be578063e8a3d485146103da578063e985e9c5146103f8578063f242432a14610428578063f2fde38b1461044457610157565b80637263cfe2146102f05780638c9250161461030c5780638da5cb5b1461032a57806395d89b4114610348578063a0e67e2b14610366578063a22cb4651461038457610157565b80633aca4e89116101155780633aca4e89146102565780634e1273f41461026057806355f804b31461029057806357b543e2146102ac5780636dd09e76146102ca578063715018a6146102e657610157565b8062fdd58e1461015c57806301ffc9a71461018c578063025e7c27146101bc57806306fdde03146101ec5780630e89341c1461020a5780632eb2c2d61461023a575b600080fd5b6101766004803603810190610171919061249f565b610460565b60405161018391906124ee565b60405180910390f35b6101a660048036038101906101a19190612561565b610529565b6040516101b391906125a9565b60405180910390f35b6101d660048036038101906101d191906125c4565b61060b565b6040516101e39190612600565b60405180910390f35b6101f461064a565b60405161020191906126b4565b60405180910390f35b610224600480360381019061021f91906125c4565b6106d8565b60405161023191906126b4565b60405180910390f35b610254600480360381019061024f91906128d3565b61070c565b005b61025e6107ad565b005b61027a60048036038101906102759190612a65565b6108e5565b6040516102879190612b9b565b60405180910390f35b6102aa60048036038101906102a59190612c5e565b6109fe565b005b6102b4610a86565b6040516102c191906124ee565b60405180910390f35b6102e460048036038101906102df9190612ca7565b610b0f565b005b6102ee610b9c565b005b61030a60048036038101906103059190612d71565b610c24565b005b610314610de7565b60405161032191906124ee565b60405180910390f35b610332610dec565b60405161033f9190612600565b60405180910390f35b610350610e16565b60405161035d91906126b4565b60405180910390f35b61036e610ea4565b60405161037b9190612e7c565b60405180910390f35b61039e60048036038101906103999190612eca565b610fae565b005b6103a861112f565b6040516103b591906126b4565b60405180910390f35b6103d860048036038101906103d39190612c5e565b6111bd565b005b6103e2611253565b6040516103ef91906126b4565b60405180910390f35b610412600480360381019061040d9190612f0a565b6112e5565b60405161041f91906125a9565b60405180910390f35b610442600480360381019061043d9190612f4a565b611379565b005b61045e60048036038101906104599190612fe1565b61141a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c890613080565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105f457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610604575061060382611525565b5b9050919050565b6007818154811061061b57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60048054610657906130cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610683906130cf565b80156106d05780601f106106a5576101008083540402835291602001916106d0565b820191906000526020600020905b8154815290600101906020018083116106b357829003601f168201915b505050505081565b606060066106e58361158f565b6040516020016106f692919061321d565b6040516020818303038152906040529050919050565b6107146116f0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061075a5750610759856107546116f0565b6112e5565b5b610799576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610790906132be565b60405180910390fd5b6107a685858585856116f8565b5050505050565b6107b56116f0565b73ffffffffffffffffffffffffffffffffffffffff166107d3610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610829576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108209061332a565b60405180910390fd5b60005b6007805490508110156108e2576108cf734c5e309abc3a752afd2baab6b302a90fa2a63df2600783815481106108655761086461334a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600060016040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250611379565b80806108da906133a8565b91505061082c565b50565b6060815183511461092b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092290613463565b60405180910390fd5b6000835167ffffffffffffffff811115610948576109476126db565b5b6040519080825280602002602001820160405280156109765781602001602082028036833780820191505090505b50905060005b84518110156109f3576109c385828151811061099b5761099a61334a565b5b60200260200101518583815181106109b6576109b561334a565b5b6020026020010151610460565b8282815181106109d6576109d561334a565b5b602002602001018181525050806109ec906133a8565b905061097c565b508091505092915050565b610a066116f0565b73ffffffffffffffffffffffffffffffffffffffff16610a24610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a719061332a565b60405180910390fd5b610a8381611a0c565b50565b6000610a906116f0565b73ffffffffffffffffffffffffffffffffffffffff16610aae610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afb9061332a565b60405180910390fd5b600780549050905090565b610b176116f0565b73ffffffffffffffffffffffffffffffffffffffff16610b35610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b829061332a565b60405180910390fd5b610b9733848484611a26565b505050565b610ba46116f0565b73ffffffffffffffffffffffffffffffffffffffff16610bc2610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f9061332a565b60405180910390fd5b610c226000611bbc565b565b610c2c6116f0565b73ffffffffffffffffffffffffffffffffffffffff16610c4a610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c979061332a565b60405180910390fd5b60005b82829050811015610de257600073ffffffffffffffffffffffffffffffffffffffff16838383818110610cd957610cd861334a565b5b9050602002016020810190610cee9190612fe1565b73ffffffffffffffffffffffffffffffffffffffff161415610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c906134cf565b60405180910390fd5b6007838383818110610d5a57610d5961334a565b5b9050602002016020810190610d6f9190612fe1565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080610dda906133a8565b915050610ca3565b505050565b600081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610e23906130cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4f906130cf565b8015610e9c5780601f10610e7157610100808354040283529160200191610e9c565b820191906000526020600020905b815481529060010190602001808311610e7f57829003601f168201915b505050505081565b6060610eae6116f0565b73ffffffffffffffffffffffffffffffffffffffff16610ecc610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f199061332a565b60405180910390fd5b6007805480602002602001604051908101604052809291908181526020018280548015610fa457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f5a575b5050505050905090565b8173ffffffffffffffffffffffffffffffffffffffff16610fcd6116f0565b73ffffffffffffffffffffffffffffffffffffffff161415611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90613561565b60405180910390fd5b80600160006110316116f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110de6116f0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161112391906125a9565b60405180910390a35050565b6006805461113c906130cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611168906130cf565b80156111b55780601f1061118a576101008083540402835291602001916111b5565b820191906000526020600020905b81548152906001019060200180831161119857829003601f168201915b505050505081565b6111c56116f0565b73ffffffffffffffffffffffffffffffffffffffff166111e3610dec565b73ffffffffffffffffffffffffffffffffffffffff1614611239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112309061332a565b60405180910390fd5b806006908051906020019061124f929190612354565b5050565b606060068054611262906130cf565b80601f016020809104026020016040519081016040528092919081815260200182805461128e906130cf565b80156112db5780601f106112b0576101008083540402835291602001916112db565b820191906000526020600020905b8154815290600101906020018083116112be57829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113816116f0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806113c757506113c6856113c16116f0565b6112e5565b5b611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd906135f3565b60405180910390fd5b6114138585858585611c82565b5050505050565b6114226116f0565b73ffffffffffffffffffffffffffffffffffffffff16611440610dec565b73ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d9061332a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90613685565b60405180910390fd5b61150f81611bbc565b50565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008214156115d7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506116eb565b600082905060005b600082146116095780806115f2906133a8565b915050600a8261160291906136d4565b91506115df565b60008167ffffffffffffffff811115611625576116246126db565b5b6040519080825280601f01601f1916602001820160405280156116575781602001600182028036833780820191505090505b5090505b600085146116e4576001826116709190613705565b9150600a8561167f9190613739565b603061168b919061376a565b60f81b8183815181106116a1576116a061334a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856116dd91906136d4565b945061165b565b8093505050505b919050565b600033905090565b815183511461173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390613832565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a3906138c4565b60405180910390fd5b60006117b66116f0565b90506117c6818787878787611f04565b60005b84518110156119775760008582815181106117e7576117e661334a565b5b6020026020010151905060008583815181106118065761180561334a565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e90613956565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461195c919061376a565b9250508190555050505080611970906133a8565b90506117c9565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119ee929190613976565b60405180910390a4611a04818787878787611f0c565b505050505050565b8060029080519060200190611a22929190612354565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d90613a1f565b60405180910390fd5b6000611aa06116f0565b9050611ac181600087611ab2886120f3565b611abb886120f3565b87611f04565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b20919061376a565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611b9e929190613a3f565b60405180910390a4611bb58160008787878761216d565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce9906138c4565b60405180910390fd5b6000611cfc6116f0565b9050611d1c818787611d0d886120f3565b611d16886120f3565b87611f04565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90613956565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e68919061376a565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611ee5929190613a3f565b60405180910390a4611efb82888888888861216d565b50505050505050565b505050505050565b611f2b8473ffffffffffffffffffffffffffffffffffffffff16611512565b156120eb578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611f71959493929190613abd565b602060405180830381600087803b158015611f8b57600080fd5b505af1925050508015611fbc57506040513d601f19601f82011682018060405250810190611fb99190613b3a565b60015b61206257611fc8613b74565b806308c379a014156120255750611fdd613b96565b80611fe85750612027565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c91906126b4565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205990613c9e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146120e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e090613d30565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612112576121116126db565b5b6040519080825280602002602001820160405280156121405781602001602082028036833780820191505090505b50905082816000815181106121585761215761334a565b5b60200260200101818152505080915050919050565b61218c8473ffffffffffffffffffffffffffffffffffffffff16611512565b1561234c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016121d2959493929190613d50565b602060405180830381600087803b1580156121ec57600080fd5b505af192505050801561221d57506040513d601f19601f8201168201806040525081019061221a9190613b3a565b60015b6122c357612229613b74565b806308c379a01415612286575061223e613b96565b806122495750612288565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d91906126b4565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ba90613c9e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461234a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234190613d30565b60405180910390fd5b505b505050505050565b828054612360906130cf565b90600052602060002090601f01602090048101928261238257600085556123c9565b82601f1061239b57805160ff19168380011785556123c9565b828001600101855582156123c9579182015b828111156123c85782518255916020019190600101906123ad565b5b5090506123d691906123da565b5090565b5b808211156123f35760008160009055506001016123db565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124368261240b565b9050919050565b6124468161242b565b811461245157600080fd5b50565b6000813590506124638161243d565b92915050565b6000819050919050565b61247c81612469565b811461248757600080fd5b50565b60008135905061249981612473565b92915050565b600080604083850312156124b6576124b5612401565b5b60006124c485828601612454565b92505060206124d58582860161248a565b9150509250929050565b6124e881612469565b82525050565b600060208201905061250360008301846124df565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61253e81612509565b811461254957600080fd5b50565b60008135905061255b81612535565b92915050565b60006020828403121561257757612576612401565b5b60006125858482850161254c565b91505092915050565b60008115159050919050565b6125a38161258e565b82525050565b60006020820190506125be600083018461259a565b92915050565b6000602082840312156125da576125d9612401565b5b60006125e88482850161248a565b91505092915050565b6125fa8161242b565b82525050565b600060208201905061261560008301846125f1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561265557808201518184015260208101905061263a565b83811115612664576000848401525b50505050565b6000601f19601f8301169050919050565b60006126868261261b565b6126908185612626565b93506126a0818560208601612637565b6126a98161266a565b840191505092915050565b600060208201905081810360008301526126ce818461267b565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127138261266a565b810181811067ffffffffffffffff82111715612732576127316126db565b5b80604052505050565b60006127456123f7565b9050612751828261270a565b919050565b600067ffffffffffffffff821115612771576127706126db565b5b602082029050602081019050919050565b600080fd5b600061279a61279584612756565b61273b565b905080838252602082019050602084028301858111156127bd576127bc612782565b5b835b818110156127e657806127d2888261248a565b8452602084019350506020810190506127bf565b5050509392505050565b600082601f830112612805576128046126d6565b5b8135612815848260208601612787565b91505092915050565b600080fd5b600067ffffffffffffffff82111561283e5761283d6126db565b5b6128478261266a565b9050602081019050919050565b82818337600083830152505050565b600061287661287184612823565b61273b565b9050828152602081018484840111156128925761289161281e565b5b61289d848285612854565b509392505050565b600082601f8301126128ba576128b96126d6565b5b81356128ca848260208601612863565b91505092915050565b600080600080600060a086880312156128ef576128ee612401565b5b60006128fd88828901612454565b955050602061290e88828901612454565b945050604086013567ffffffffffffffff81111561292f5761292e612406565b5b61293b888289016127f0565b935050606086013567ffffffffffffffff81111561295c5761295b612406565b5b612968888289016127f0565b925050608086013567ffffffffffffffff81111561298957612988612406565b5b612995888289016128a5565b9150509295509295909350565b600067ffffffffffffffff8211156129bd576129bc6126db565b5b602082029050602081019050919050565b60006129e16129dc846129a2565b61273b565b90508083825260208201905060208402830185811115612a0457612a03612782565b5b835b81811015612a2d5780612a198882612454565b845260208401935050602081019050612a06565b5050509392505050565b600082601f830112612a4c57612a4b6126d6565b5b8135612a5c8482602086016129ce565b91505092915050565b60008060408385031215612a7c57612a7b612401565b5b600083013567ffffffffffffffff811115612a9a57612a99612406565b5b612aa685828601612a37565b925050602083013567ffffffffffffffff811115612ac757612ac6612406565b5b612ad3858286016127f0565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b1281612469565b82525050565b6000612b248383612b09565b60208301905092915050565b6000602082019050919050565b6000612b4882612add565b612b528185612ae8565b9350612b5d83612af9565b8060005b83811015612b8e578151612b758882612b18565b9750612b8083612b30565b925050600181019050612b61565b5085935050505092915050565b60006020820190508181036000830152612bb58184612b3d565b905092915050565b600067ffffffffffffffff821115612bd857612bd76126db565b5b612be18261266a565b9050602081019050919050565b6000612c01612bfc84612bbd565b61273b565b905082815260208101848484011115612c1d57612c1c61281e565b5b612c28848285612854565b509392505050565b600082601f830112612c4557612c446126d6565b5b8135612c55848260208601612bee565b91505092915050565b600060208284031215612c7457612c73612401565b5b600082013567ffffffffffffffff811115612c9257612c91612406565b5b612c9e84828501612c30565b91505092915050565b600080600060608486031215612cc057612cbf612401565b5b6000612cce8682870161248a565b9350506020612cdf8682870161248a565b925050604084013567ffffffffffffffff811115612d0057612cff612406565b5b612d0c868287016128a5565b9150509250925092565b600080fd5b60008083601f840112612d3157612d306126d6565b5b8235905067ffffffffffffffff811115612d4e57612d4d612d16565b5b602083019150836020820283011115612d6a57612d69612782565b5b9250929050565b60008060208385031215612d8857612d87612401565b5b600083013567ffffffffffffffff811115612da657612da5612406565b5b612db285828601612d1b565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612df38161242b565b82525050565b6000612e058383612dea565b60208301905092915050565b6000602082019050919050565b6000612e2982612dbe565b612e338185612dc9565b9350612e3e83612dda565b8060005b83811015612e6f578151612e568882612df9565b9750612e6183612e11565b925050600181019050612e42565b5085935050505092915050565b60006020820190508181036000830152612e968184612e1e565b905092915050565b612ea78161258e565b8114612eb257600080fd5b50565b600081359050612ec481612e9e565b92915050565b60008060408385031215612ee157612ee0612401565b5b6000612eef85828601612454565b9250506020612f0085828601612eb5565b9150509250929050565b60008060408385031215612f2157612f20612401565b5b6000612f2f85828601612454565b9250506020612f4085828601612454565b9150509250929050565b600080600080600060a08688031215612f6657612f65612401565b5b6000612f7488828901612454565b9550506020612f8588828901612454565b9450506040612f968882890161248a565b9350506060612fa78882890161248a565b925050608086013567ffffffffffffffff811115612fc857612fc7612406565b5b612fd4888289016128a5565b9150509295509295909350565b600060208284031215612ff757612ff6612401565b5b600061300584828501612454565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061306a602b83612626565b91506130758261300e565b604082019050919050565b600060208201905081810360008301526130998161305d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130e757607f821691505b602082108114156130fb576130fa6130a0565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461312e816130cf565b6131388186613101565b94506001821660008114613153576001811461316457613197565b60ff19831686528186019350613197565b61316d8561310c565b60005b8381101561318f57815481890152600182019150602081019050613170565b838801955050505b50505092915050565b60006131ab8261261b565b6131b58185613101565b93506131c5818560208601612637565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613207600583613101565b9150613212826131d1565b600582019050919050565b60006132298285613121565b915061323582846131a0565b9150613240826131fa565b91508190509392505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006132a8603283612626565b91506132b38261324c565b604082019050919050565b600060208201905081810360008301526132d78161329b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613314602083612626565b915061331f826132de565b602082019050919050565b6000602082019050818103600083015261334381613307565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133b382612469565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133e6576133e5613379565b5b600182019050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061344d602983612626565b9150613458826133f1565b604082019050919050565b6000602082019050818103600083015261347c81613440565b9050919050565b7f43616e2774206164642061206e756c6c20616464726573730000000000000000600082015250565b60006134b9601883612626565b91506134c482613483565b602082019050919050565b600060208201905081810360008301526134e8816134ac565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061354b602983612626565b9150613556826134ef565b604082019050919050565b6000602082019050818103600083015261357a8161353e565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006135dd602983612626565b91506135e882613581565b604082019050919050565b6000602082019050818103600083015261360c816135d0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061366f602683612626565b915061367a82613613565b604082019050919050565b6000602082019050818103600083015261369e81613662565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006136df82612469565b91506136ea83612469565b9250826136fa576136f96136a5565b5b828204905092915050565b600061371082612469565b915061371b83612469565b92508282101561372e5761372d613379565b5b828203905092915050565b600061374482612469565b915061374f83612469565b92508261375f5761375e6136a5565b5b828206905092915050565b600061377582612469565b915061378083612469565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137b5576137b4613379565b5b828201905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061381c602883612626565b9150613827826137c0565b604082019050919050565b6000602082019050818103600083015261384b8161380f565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006138ae602583612626565b91506138b982613852565b604082019050919050565b600060208201905081810360008301526138dd816138a1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613940602a83612626565b915061394b826138e4565b604082019050919050565b6000602082019050818103600083015261396f81613933565b9050919050565b600060408201905081810360008301526139908185612b3d565b905081810360208301526139a48184612b3d565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a09602183612626565b9150613a14826139ad565b604082019050919050565b60006020820190508181036000830152613a38816139fc565b9050919050565b6000604082019050613a5460008301856124df565b613a6160208301846124df565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000613a8f82613a68565b613a998185613a73565b9350613aa9818560208601612637565b613ab28161266a565b840191505092915050565b600060a082019050613ad260008301886125f1565b613adf60208301876125f1565b8181036040830152613af18186612b3d565b90508181036060830152613b058185612b3d565b90508181036080830152613b198184613a84565b90509695505050505050565b600081519050613b3481612535565b92915050565b600060208284031215613b5057613b4f612401565b5b6000613b5e84828501613b25565b91505092915050565b60008160e01c9050919050565b600060033d1115613b935760046000803e613b90600051613b67565b90505b90565b600060443d1015613ba657613c29565b613bae6123f7565b60043d036004823e80513d602482011167ffffffffffffffff82111715613bd6575050613c29565b808201805167ffffffffffffffff811115613bf45750505050613c29565b80602083010160043d038501811115613c11575050505050613c29565b613c208260200185018661270a565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613c88603483612626565b9150613c9382613c2c565b604082019050919050565b60006020820190508181036000830152613cb781613c7b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613d1a602883612626565b9150613d2582613cbe565b604082019050919050565b60006020820190508181036000830152613d4981613d0d565b9050919050565b600060a082019050613d6560008301886125f1565b613d7260208301876125f1565b613d7f60408301866124df565b613d8c60608301856124df565b8181036080830152613d9e8184613a84565b9050969550505050505056fea2646970667358221220e9bcde503dfc9a064491c2c532df5aa9e4ac38d25f9b96fc1db9a12521b4427064736f6c6343000809003368747470733a2f2f63726f70636c6173682e6d7970696e6174612e636c6f75642f697066732f516d524546374b50687762445476755458653145454641646a765a624b625a634856614753526663436b73794c702f
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101575760003560e01c80637263cfe2116100c3578063cfc86f7b1161007c578063cfc86f7b146103a0578063e0df5b6f146103be578063e8a3d485146103da578063e985e9c5146103f8578063f242432a14610428578063f2fde38b1461044457610157565b80637263cfe2146102f05780638c9250161461030c5780638da5cb5b1461032a57806395d89b4114610348578063a0e67e2b14610366578063a22cb4651461038457610157565b80633aca4e89116101155780633aca4e89146102565780634e1273f41461026057806355f804b31461029057806357b543e2146102ac5780636dd09e76146102ca578063715018a6146102e657610157565b8062fdd58e1461015c57806301ffc9a71461018c578063025e7c27146101bc57806306fdde03146101ec5780630e89341c1461020a5780632eb2c2d61461023a575b600080fd5b6101766004803603810190610171919061249f565b610460565b60405161018391906124ee565b60405180910390f35b6101a660048036038101906101a19190612561565b610529565b6040516101b391906125a9565b60405180910390f35b6101d660048036038101906101d191906125c4565b61060b565b6040516101e39190612600565b60405180910390f35b6101f461064a565b60405161020191906126b4565b60405180910390f35b610224600480360381019061021f91906125c4565b6106d8565b60405161023191906126b4565b60405180910390f35b610254600480360381019061024f91906128d3565b61070c565b005b61025e6107ad565b005b61027a60048036038101906102759190612a65565b6108e5565b6040516102879190612b9b565b60405180910390f35b6102aa60048036038101906102a59190612c5e565b6109fe565b005b6102b4610a86565b6040516102c191906124ee565b60405180910390f35b6102e460048036038101906102df9190612ca7565b610b0f565b005b6102ee610b9c565b005b61030a60048036038101906103059190612d71565b610c24565b005b610314610de7565b60405161032191906124ee565b60405180910390f35b610332610dec565b60405161033f9190612600565b60405180910390f35b610350610e16565b60405161035d91906126b4565b60405180910390f35b61036e610ea4565b60405161037b9190612e7c565b60405180910390f35b61039e60048036038101906103999190612eca565b610fae565b005b6103a861112f565b6040516103b591906126b4565b60405180910390f35b6103d860048036038101906103d39190612c5e565b6111bd565b005b6103e2611253565b6040516103ef91906126b4565b60405180910390f35b610412600480360381019061040d9190612f0a565b6112e5565b60405161041f91906125a9565b60405180910390f35b610442600480360381019061043d9190612f4a565b611379565b005b61045e60048036038101906104599190612fe1565b61141a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c890613080565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105f457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610604575061060382611525565b5b9050919050565b6007818154811061061b57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60048054610657906130cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610683906130cf565b80156106d05780601f106106a5576101008083540402835291602001916106d0565b820191906000526020600020905b8154815290600101906020018083116106b357829003601f168201915b505050505081565b606060066106e58361158f565b6040516020016106f692919061321d565b6040516020818303038152906040529050919050565b6107146116f0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061075a5750610759856107546116f0565b6112e5565b5b610799576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610790906132be565b60405180910390fd5b6107a685858585856116f8565b5050505050565b6107b56116f0565b73ffffffffffffffffffffffffffffffffffffffff166107d3610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610829576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108209061332a565b60405180910390fd5b60005b6007805490508110156108e2576108cf734c5e309abc3a752afd2baab6b302a90fa2a63df2600783815481106108655761086461334a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600060016040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250611379565b80806108da906133a8565b91505061082c565b50565b6060815183511461092b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092290613463565b60405180910390fd5b6000835167ffffffffffffffff811115610948576109476126db565b5b6040519080825280602002602001820160405280156109765781602001602082028036833780820191505090505b50905060005b84518110156109f3576109c385828151811061099b5761099a61334a565b5b60200260200101518583815181106109b6576109b561334a565b5b6020026020010151610460565b8282815181106109d6576109d561334a565b5b602002602001018181525050806109ec906133a8565b905061097c565b508091505092915050565b610a066116f0565b73ffffffffffffffffffffffffffffffffffffffff16610a24610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a719061332a565b60405180910390fd5b610a8381611a0c565b50565b6000610a906116f0565b73ffffffffffffffffffffffffffffffffffffffff16610aae610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afb9061332a565b60405180910390fd5b600780549050905090565b610b176116f0565b73ffffffffffffffffffffffffffffffffffffffff16610b35610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b829061332a565b60405180910390fd5b610b9733848484611a26565b505050565b610ba46116f0565b73ffffffffffffffffffffffffffffffffffffffff16610bc2610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f9061332a565b60405180910390fd5b610c226000611bbc565b565b610c2c6116f0565b73ffffffffffffffffffffffffffffffffffffffff16610c4a610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c979061332a565b60405180910390fd5b60005b82829050811015610de257600073ffffffffffffffffffffffffffffffffffffffff16838383818110610cd957610cd861334a565b5b9050602002016020810190610cee9190612fe1565b73ffffffffffffffffffffffffffffffffffffffff161415610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c906134cf565b60405180910390fd5b6007838383818110610d5a57610d5961334a565b5b9050602002016020810190610d6f9190612fe1565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080610dda906133a8565b915050610ca3565b505050565b600081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610e23906130cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4f906130cf565b8015610e9c5780601f10610e7157610100808354040283529160200191610e9c565b820191906000526020600020905b815481529060010190602001808311610e7f57829003601f168201915b505050505081565b6060610eae6116f0565b73ffffffffffffffffffffffffffffffffffffffff16610ecc610dec565b73ffffffffffffffffffffffffffffffffffffffff1614610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f199061332a565b60405180910390fd5b6007805480602002602001604051908101604052809291908181526020018280548015610fa457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f5a575b5050505050905090565b8173ffffffffffffffffffffffffffffffffffffffff16610fcd6116f0565b73ffffffffffffffffffffffffffffffffffffffff161415611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90613561565b60405180910390fd5b80600160006110316116f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110de6116f0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161112391906125a9565b60405180910390a35050565b6006805461113c906130cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611168906130cf565b80156111b55780601f1061118a576101008083540402835291602001916111b5565b820191906000526020600020905b81548152906001019060200180831161119857829003601f168201915b505050505081565b6111c56116f0565b73ffffffffffffffffffffffffffffffffffffffff166111e3610dec565b73ffffffffffffffffffffffffffffffffffffffff1614611239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112309061332a565b60405180910390fd5b806006908051906020019061124f929190612354565b5050565b606060068054611262906130cf565b80601f016020809104026020016040519081016040528092919081815260200182805461128e906130cf565b80156112db5780601f106112b0576101008083540402835291602001916112db565b820191906000526020600020905b8154815290600101906020018083116112be57829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113816116f0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806113c757506113c6856113c16116f0565b6112e5565b5b611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd906135f3565b60405180910390fd5b6114138585858585611c82565b5050505050565b6114226116f0565b73ffffffffffffffffffffffffffffffffffffffff16611440610dec565b73ffffffffffffffffffffffffffffffffffffffff1614611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d9061332a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90613685565b60405180910390fd5b61150f81611bbc565b50565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008214156115d7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506116eb565b600082905060005b600082146116095780806115f2906133a8565b915050600a8261160291906136d4565b91506115df565b60008167ffffffffffffffff811115611625576116246126db565b5b6040519080825280601f01601f1916602001820160405280156116575781602001600182028036833780820191505090505b5090505b600085146116e4576001826116709190613705565b9150600a8561167f9190613739565b603061168b919061376a565b60f81b8183815181106116a1576116a061334a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856116dd91906136d4565b945061165b565b8093505050505b919050565b600033905090565b815183511461173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390613832565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a3906138c4565b60405180910390fd5b60006117b66116f0565b90506117c6818787878787611f04565b60005b84518110156119775760008582815181106117e7576117e661334a565b5b6020026020010151905060008583815181106118065761180561334a565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e90613956565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461195c919061376a565b9250508190555050505080611970906133a8565b90506117c9565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119ee929190613976565b60405180910390a4611a04818787878787611f0c565b505050505050565b8060029080519060200190611a22929190612354565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d90613a1f565b60405180910390fd5b6000611aa06116f0565b9050611ac181600087611ab2886120f3565b611abb886120f3565b87611f04565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b20919061376a565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611b9e929190613a3f565b60405180910390a4611bb58160008787878761216d565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce9906138c4565b60405180910390fd5b6000611cfc6116f0565b9050611d1c818787611d0d886120f3565b611d16886120f3565b87611f04565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90613956565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e68919061376a565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611ee5929190613a3f565b60405180910390a4611efb82888888888861216d565b50505050505050565b505050505050565b611f2b8473ffffffffffffffffffffffffffffffffffffffff16611512565b156120eb578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611f71959493929190613abd565b602060405180830381600087803b158015611f8b57600080fd5b505af1925050508015611fbc57506040513d601f19601f82011682018060405250810190611fb99190613b3a565b60015b61206257611fc8613b74565b806308c379a014156120255750611fdd613b96565b80611fe85750612027565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c91906126b4565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205990613c9e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146120e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e090613d30565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612112576121116126db565b5b6040519080825280602002602001820160405280156121405781602001602082028036833780820191505090505b50905082816000815181106121585761215761334a565b5b60200260200101818152505080915050919050565b61218c8473ffffffffffffffffffffffffffffffffffffffff16611512565b1561234c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016121d2959493929190613d50565b602060405180830381600087803b1580156121ec57600080fd5b505af192505050801561221d57506040513d601f19601f8201168201806040525081019061221a9190613b3a565b60015b6122c357612229613b74565b806308c379a01415612286575061223e613b96565b806122495750612288565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d91906126b4565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ba90613c9e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461234a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234190613d30565b60405180910390fd5b505b505050505050565b828054612360906130cf565b90600052602060002090601f01602090048101928261238257600085556123c9565b82601f1061239b57805160ff19168380011785556123c9565b828001600101855582156123c9579182015b828111156123c85782518255916020019190600101906123ad565b5b5090506123d691906123da565b5090565b5b808211156123f35760008160009055506001016123db565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124368261240b565b9050919050565b6124468161242b565b811461245157600080fd5b50565b6000813590506124638161243d565b92915050565b6000819050919050565b61247c81612469565b811461248757600080fd5b50565b60008135905061249981612473565b92915050565b600080604083850312156124b6576124b5612401565b5b60006124c485828601612454565b92505060206124d58582860161248a565b9150509250929050565b6124e881612469565b82525050565b600060208201905061250360008301846124df565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61253e81612509565b811461254957600080fd5b50565b60008135905061255b81612535565b92915050565b60006020828403121561257757612576612401565b5b60006125858482850161254c565b91505092915050565b60008115159050919050565b6125a38161258e565b82525050565b60006020820190506125be600083018461259a565b92915050565b6000602082840312156125da576125d9612401565b5b60006125e88482850161248a565b91505092915050565b6125fa8161242b565b82525050565b600060208201905061261560008301846125f1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561265557808201518184015260208101905061263a565b83811115612664576000848401525b50505050565b6000601f19601f8301169050919050565b60006126868261261b565b6126908185612626565b93506126a0818560208601612637565b6126a98161266a565b840191505092915050565b600060208201905081810360008301526126ce818461267b565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127138261266a565b810181811067ffffffffffffffff82111715612732576127316126db565b5b80604052505050565b60006127456123f7565b9050612751828261270a565b919050565b600067ffffffffffffffff821115612771576127706126db565b5b602082029050602081019050919050565b600080fd5b600061279a61279584612756565b61273b565b905080838252602082019050602084028301858111156127bd576127bc612782565b5b835b818110156127e657806127d2888261248a565b8452602084019350506020810190506127bf565b5050509392505050565b600082601f830112612805576128046126d6565b5b8135612815848260208601612787565b91505092915050565b600080fd5b600067ffffffffffffffff82111561283e5761283d6126db565b5b6128478261266a565b9050602081019050919050565b82818337600083830152505050565b600061287661287184612823565b61273b565b9050828152602081018484840111156128925761289161281e565b5b61289d848285612854565b509392505050565b600082601f8301126128ba576128b96126d6565b5b81356128ca848260208601612863565b91505092915050565b600080600080600060a086880312156128ef576128ee612401565b5b60006128fd88828901612454565b955050602061290e88828901612454565b945050604086013567ffffffffffffffff81111561292f5761292e612406565b5b61293b888289016127f0565b935050606086013567ffffffffffffffff81111561295c5761295b612406565b5b612968888289016127f0565b925050608086013567ffffffffffffffff81111561298957612988612406565b5b612995888289016128a5565b9150509295509295909350565b600067ffffffffffffffff8211156129bd576129bc6126db565b5b602082029050602081019050919050565b60006129e16129dc846129a2565b61273b565b90508083825260208201905060208402830185811115612a0457612a03612782565b5b835b81811015612a2d5780612a198882612454565b845260208401935050602081019050612a06565b5050509392505050565b600082601f830112612a4c57612a4b6126d6565b5b8135612a5c8482602086016129ce565b91505092915050565b60008060408385031215612a7c57612a7b612401565b5b600083013567ffffffffffffffff811115612a9a57612a99612406565b5b612aa685828601612a37565b925050602083013567ffffffffffffffff811115612ac757612ac6612406565b5b612ad3858286016127f0565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b1281612469565b82525050565b6000612b248383612b09565b60208301905092915050565b6000602082019050919050565b6000612b4882612add565b612b528185612ae8565b9350612b5d83612af9565b8060005b83811015612b8e578151612b758882612b18565b9750612b8083612b30565b925050600181019050612b61565b5085935050505092915050565b60006020820190508181036000830152612bb58184612b3d565b905092915050565b600067ffffffffffffffff821115612bd857612bd76126db565b5b612be18261266a565b9050602081019050919050565b6000612c01612bfc84612bbd565b61273b565b905082815260208101848484011115612c1d57612c1c61281e565b5b612c28848285612854565b509392505050565b600082601f830112612c4557612c446126d6565b5b8135612c55848260208601612bee565b91505092915050565b600060208284031215612c7457612c73612401565b5b600082013567ffffffffffffffff811115612c9257612c91612406565b5b612c9e84828501612c30565b91505092915050565b600080600060608486031215612cc057612cbf612401565b5b6000612cce8682870161248a565b9350506020612cdf8682870161248a565b925050604084013567ffffffffffffffff811115612d0057612cff612406565b5b612d0c868287016128a5565b9150509250925092565b600080fd5b60008083601f840112612d3157612d306126d6565b5b8235905067ffffffffffffffff811115612d4e57612d4d612d16565b5b602083019150836020820283011115612d6a57612d69612782565b5b9250929050565b60008060208385031215612d8857612d87612401565b5b600083013567ffffffffffffffff811115612da657612da5612406565b5b612db285828601612d1b565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612df38161242b565b82525050565b6000612e058383612dea565b60208301905092915050565b6000602082019050919050565b6000612e2982612dbe565b612e338185612dc9565b9350612e3e83612dda565b8060005b83811015612e6f578151612e568882612df9565b9750612e6183612e11565b925050600181019050612e42565b5085935050505092915050565b60006020820190508181036000830152612e968184612e1e565b905092915050565b612ea78161258e565b8114612eb257600080fd5b50565b600081359050612ec481612e9e565b92915050565b60008060408385031215612ee157612ee0612401565b5b6000612eef85828601612454565b9250506020612f0085828601612eb5565b9150509250929050565b60008060408385031215612f2157612f20612401565b5b6000612f2f85828601612454565b9250506020612f4085828601612454565b9150509250929050565b600080600080600060a08688031215612f6657612f65612401565b5b6000612f7488828901612454565b9550506020612f8588828901612454565b9450506040612f968882890161248a565b9350506060612fa78882890161248a565b925050608086013567ffffffffffffffff811115612fc857612fc7612406565b5b612fd4888289016128a5565b9150509295509295909350565b600060208284031215612ff757612ff6612401565b5b600061300584828501612454565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061306a602b83612626565b91506130758261300e565b604082019050919050565b600060208201905081810360008301526130998161305d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130e757607f821691505b602082108114156130fb576130fa6130a0565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461312e816130cf565b6131388186613101565b94506001821660008114613153576001811461316457613197565b60ff19831686528186019350613197565b61316d8561310c565b60005b8381101561318f57815481890152600182019150602081019050613170565b838801955050505b50505092915050565b60006131ab8261261b565b6131b58185613101565b93506131c5818560208601612637565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613207600583613101565b9150613212826131d1565b600582019050919050565b60006132298285613121565b915061323582846131a0565b9150613240826131fa565b91508190509392505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006132a8603283612626565b91506132b38261324c565b604082019050919050565b600060208201905081810360008301526132d78161329b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613314602083612626565b915061331f826132de565b602082019050919050565b6000602082019050818103600083015261334381613307565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133b382612469565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133e6576133e5613379565b5b600182019050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061344d602983612626565b9150613458826133f1565b604082019050919050565b6000602082019050818103600083015261347c81613440565b9050919050565b7f43616e2774206164642061206e756c6c20616464726573730000000000000000600082015250565b60006134b9601883612626565b91506134c482613483565b602082019050919050565b600060208201905081810360008301526134e8816134ac565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061354b602983612626565b9150613556826134ef565b604082019050919050565b6000602082019050818103600083015261357a8161353e565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006135dd602983612626565b91506135e882613581565b604082019050919050565b6000602082019050818103600083015261360c816135d0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061366f602683612626565b915061367a82613613565b604082019050919050565b6000602082019050818103600083015261369e81613662565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006136df82612469565b91506136ea83612469565b9250826136fa576136f96136a5565b5b828204905092915050565b600061371082612469565b915061371b83612469565b92508282101561372e5761372d613379565b5b828203905092915050565b600061374482612469565b915061374f83612469565b92508261375f5761375e6136a5565b5b828206905092915050565b600061377582612469565b915061378083612469565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137b5576137b4613379565b5b828201905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061381c602883612626565b9150613827826137c0565b604082019050919050565b6000602082019050818103600083015261384b8161380f565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006138ae602583612626565b91506138b982613852565b604082019050919050565b600060208201905081810360008301526138dd816138a1565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613940602a83612626565b915061394b826138e4565b604082019050919050565b6000602082019050818103600083015261396f81613933565b9050919050565b600060408201905081810360008301526139908185612b3d565b905081810360208301526139a48184612b3d565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a09602183612626565b9150613a14826139ad565b604082019050919050565b60006020820190508181036000830152613a38816139fc565b9050919050565b6000604082019050613a5460008301856124df565b613a6160208301846124df565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000613a8f82613a68565b613a998185613a73565b9350613aa9818560208601612637565b613ab28161266a565b840191505092915050565b600060a082019050613ad260008301886125f1565b613adf60208301876125f1565b8181036040830152613af18186612b3d565b90508181036060830152613b058185612b3d565b90508181036080830152613b198184613a84565b90509695505050505050565b600081519050613b3481612535565b92915050565b600060208284031215613b5057613b4f612401565b5b6000613b5e84828501613b25565b91505092915050565b60008160e01c9050919050565b600060033d1115613b935760046000803e613b90600051613b67565b90505b90565b600060443d1015613ba657613c29565b613bae6123f7565b60043d036004823e80513d602482011167ffffffffffffffff82111715613bd6575050613c29565b808201805167ffffffffffffffff811115613bf45750505050613c29565b80602083010160043d038501811115613c11575050505050613c29565b613c208260200185018661270a565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613c88603483612626565b9150613c9382613c2c565b604082019050919050565b60006020820190508181036000830152613cb781613c7b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613d1a602883612626565b9150613d2582613cbe565b604082019050919050565b60006020820190508181036000830152613d4981613d0d565b9050919050565b600060a082019050613d6560008301886125f1565b613d7260208301876125f1565b613d7f60408301866124df565b613d8c60608301856124df565b8181036080830152613d9e8184613a84565b9050969550505050505056fea2646970667358221220e9bcde503dfc9a064491c2c532df5aa9e4ac38d25f9b96fc1db9a12521b4427064736f6c63430008090033
Deployed Bytecode Sourcemap
37710:2091:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19963:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18986:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38054:23;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37802:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39418:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22058:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38774:216;;;:::i;:::-;;20360:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39322:88;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39109:105;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38156:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36978:94;;;:::i;:::-;;38329:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37886:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36327:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37859:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38998:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20957:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37930:117;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39222:92;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39698:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21340:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21580:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37227:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19963:231;20049:7;20096:1;20077:21;;:7;:21;;;;20069:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20164:9;:13;20174:2;20164:13;;;;;;;;;;;:22;20178:7;20164:22;;;;;;;;;;;;;;;;20157:29;;19963:231;;;;:::o;18986:310::-;19088:4;19140:26;19125:41;;;:11;:41;;;;:110;;;;19198:37;19183:52;;;:11;:52;;;;19125:110;:163;;;;19252:36;19276:11;19252:23;:36::i;:::-;19125:163;19105:183;;18986:310;;;:::o;38054:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37802:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39418:268::-;39479:13;39568;39600:26;39617:8;39600:16;:26::i;:::-;39533:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39505:173;;39418:268;;;:::o;22058:442::-;22299:12;:10;:12::i;:::-;22291:20;;:4;:20;;;:60;;;;22315:36;22332:4;22338:12;:10;:12::i;:::-;22315:16;:36::i;:::-;22291:60;22269:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22440:52;22463:4;22469:2;22473:3;22478:7;22487:4;22440:22;:52::i;:::-;22058:442;;;;;:::o;38774:216::-;36558:12;:10;:12::i;:::-;36547:23;;:7;:5;:7::i;:::-;:23;;;36539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38833:6:::1;38828:151;38846:6;:13;;;;38843:1;:16;38828:151;;;38881:86;38898:42;38942:6;38949:1;38942:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38953:1;38956;38881:86;;;;;;;;;;;;;;;;::::0;:16:::1;:86::i;:::-;38861:3;;;;;:::i;:::-;;;;38828:151;;;;38774:216::o:0;20360:524::-;20516:16;20577:3;:10;20558:8;:15;:29;20550:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;20646:30;20693:8;:15;20679:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20646:63;;20727:9;20722:122;20746:8;:15;20742:1;:19;20722:122;;;20802:30;20812:8;20821:1;20812:11;;;;;;;;:::i;:::-;;;;;;;;20825:3;20829:1;20825:6;;;;;;;;:::i;:::-;;;;;;;;20802:9;:30::i;:::-;20783:13;20797:1;20783:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;20763:3;;;;:::i;:::-;;;20722:122;;;;20863:13;20856:20;;;20360:524;;;;:::o;39322:88::-;36558:12;:10;:12::i;:::-;36547:23;;:7;:5;:7::i;:::-;:23;;;36539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39389:13:::1;39397:4;39389:7;:13::i;:::-;39322:88:::0;:::o;39109:105::-;39167:7;36558:12;:10;:12::i;:::-;36547:23;;:7;:5;:7::i;:::-;:23;;;36539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39193:6:::1;:13;;;;39186:20;;39109:105:::0;:::o;38156:161::-;36558:12;:10;:12::i;:::-;36547:23;;:7;:5;:7::i;:::-;:23;;;36539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38260:45:::1;38266:10;38278:6;38286:7;38295:9;38260:5;:45::i;:::-;38156:161:::0;;;:::o;36978:94::-;36558:12;:10;:12::i;:::-;36547:23;;:7;:5;:7::i;:::-;:23;;;36539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37043:21:::1;37061:1;37043:9;:21::i;:::-;36978:94::o:0;38329:256::-;36558:12;:10;:12::i;:::-;36547:23;;:7;:5;:7::i;:::-;:23;;;36539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38416:9:::1;38411:167;38435:9;;:16;;38431:1;:20;38411:167;;;38501:1;38477:26;;:9;;38487:1;38477:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;38469:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;38543:6;38555:9;;38565:1;38555:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;38543:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38453:3;;;;;:::i;:::-;;;;38411:167;;;;38329:256:::0;;:::o;37886:37::-;37922:1;37886:37;:::o;36327:87::-;36373:7;36400:6;;;;;;;;;;;36393:13;;36327:87;:::o;37859:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38998:103::-;39050:18;36558:12;:10;:12::i;:::-;36547:23;;:7;:5;:7::i;:::-;:23;;;36539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39087:6:::1;39080:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38998:103:::0;:::o;20957:311::-;21076:8;21060:24;;:12;:10;:12::i;:::-;:24;;;;21052:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;21188:8;21143:18;:32;21162:12;:10;:12::i;:::-;21143:32;;;;;;;;;;;;;;;:42;21176:8;21143:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;21241:8;21212:48;;21227:12;:10;:12::i;:::-;21212:48;;;21251:8;21212:48;;;;;;:::i;:::-;;;;;;;;20957:311;;:::o;37930:117::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39222:92::-;36558:12;:10;:12::i;:::-;36547:23;;:7;:5;:7::i;:::-;:23;;;36539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39304:2:::1;39288:13;:18;;;;;;;;;;;;:::i;:::-;;39222:92:::0;:::o;39698:98::-;39742:13;39775;39768:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39698:98;:::o;21340:168::-;21439:4;21463:18;:27;21482:7;21463:27;;;;;;;;;;;;;;;:37;21491:8;21463:37;;;;;;;;;;;;;;;;;;;;;;;;;21456:44;;21340:168;;;;:::o;21580:401::-;21796:12;:10;:12::i;:::-;21788:20;;:4;:20;;;:60;;;;21812:36;21829:4;21835:12;:10;:12::i;:::-;21812:16;:36::i;:::-;21788:60;21766:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;21928:45;21946:4;21952:2;21956;21960:6;21968:4;21928:17;:45::i;:::-;21580:401;;;;;:::o;37227:192::-;36558:12;:10;:12::i;:::-;36547:23;;:7;:5;:7::i;:::-;:23;;;36539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37336:1:::1;37316:22;;:8;:22;;;;37308:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37392:19;37402:8;37392:9;:19::i;:::-;37227:192:::0;:::o;8837:387::-;8897:4;9105:12;9172:7;9160:20;9152:28;;9215:1;9208:4;:8;9201:15;;;8837:387;;;:::o;17807:157::-;17892:4;17931:25;17916:40;;;:11;:40;;;;17909:47;;17807:157;;;:::o;33570:723::-;33626:13;33856:1;33847:5;:10;33843:53;;;33874:10;;;;;;;;;;;;;;;;;;;;;33843:53;33906:12;33921:5;33906:20;;33937:14;33962:78;33977:1;33969:4;:9;33962:78;;33995:8;;;;;:::i;:::-;;;;34026:2;34018:10;;;;;:::i;:::-;;;33962:78;;;34050:19;34082:6;34072:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34050:39;;34100:154;34116:1;34107:5;:10;34100:154;;34144:1;34134:11;;;;;:::i;:::-;;;34211:2;34203:5;:10;;;;:::i;:::-;34190:2;:24;;;;:::i;:::-;34177:39;;34160:6;34167;34160:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;34240:2;34231:11;;;;;:::i;:::-;;;34100:154;;;34278:6;34264:21;;;;;33570:723;;;;:::o;16795:98::-;16848:7;16875:10;16868:17;;16795:98;:::o;24142:1074::-;24369:7;:14;24355:3;:10;:28;24347:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;24461:1;24447:16;;:2;:16;;;;24439:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24518:16;24537:12;:10;:12::i;:::-;24518:31;;24562:60;24583:8;24593:4;24599:2;24603:3;24608:7;24617:4;24562:20;:60::i;:::-;24640:9;24635:421;24659:3;:10;24655:1;:14;24635:421;;;24691:10;24704:3;24708:1;24704:6;;;;;;;;:::i;:::-;;;;;;;;24691:19;;24725:14;24742:7;24750:1;24742:10;;;;;;;;:::i;:::-;;;;;;;;24725:27;;24769:19;24791:9;:13;24801:2;24791:13;;;;;;;;;;;:19;24805:4;24791:19;;;;;;;;;;;;;;;;24769:41;;24848:6;24833:11;:21;;24825:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24981:6;24967:11;:20;24945:9;:13;24955:2;24945:13;;;;;;;;;;;:19;24959:4;24945:19;;;;;;;;;;;;;;;:42;;;;25038:6;25017:9;:13;25027:2;25017:13;;;;;;;;;;;:17;25031:2;25017:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24676:380;;;24671:3;;;;:::i;:::-;;;24635:421;;;;25103:2;25073:47;;25097:4;25073:47;;25087:8;25073:47;;;25107:3;25112:7;25073:47;;;;;;;:::i;:::-;;;;;;;;25133:75;25169:8;25179:4;25185:2;25189:3;25194:7;25203:4;25133:35;:75::i;:::-;24336:880;24142:1074;;;;;:::o;26060:88::-;26134:6;26127:4;:13;;;;;;;;;;;;:::i;:::-;;26060:88;:::o;26549:599::-;26726:1;26707:21;;:7;:21;;;;26699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26779:16;26798:12;:10;:12::i;:::-;26779:31;;26823:107;26844:8;26862:1;26866:7;26875:21;26893:2;26875:17;:21::i;:::-;26898:25;26916:6;26898:17;:25::i;:::-;26925:4;26823:20;:107::i;:::-;26969:6;26943:9;:13;26953:2;26943:13;;;;;;;;;;;:22;26957:7;26943:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;27028:7;26991:57;;27024:1;26991:57;;27006:8;26991:57;;;27037:2;27041:6;26991:57;;;;;;;:::i;:::-;;;;;;;;27061:79;27092:8;27110:1;27114:7;27123:2;27127:6;27135:4;27061:30;:79::i;:::-;26688:460;26549:599;;;;:::o;37427:173::-;37483:16;37502:6;;;;;;;;;;;37483:25;;37528:8;37519:6;;:17;;;;;;;;;;;;;;;;;;37583:8;37552:40;;37573:8;37552:40;;;;;;;;;;;;37472:128;37427:173;:::o;22964:820::-;23166:1;23152:16;;:2;:16;;;;23144:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23223:16;23242:12;:10;:12::i;:::-;23223:31;;23267:96;23288:8;23298:4;23304:2;23308:21;23326:2;23308:17;:21::i;:::-;23331:25;23349:6;23331:17;:25::i;:::-;23358:4;23267:20;:96::i;:::-;23376:19;23398:9;:13;23408:2;23398:13;;;;;;;;;;;:19;23412:4;23398:19;;;;;;;;;;;;;;;;23376:41;;23451:6;23436:11;:21;;23428:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23576:6;23562:11;:20;23540:9;:13;23550:2;23540:13;;;;;;;;;;;:19;23554:4;23540:19;;;;;;;;;;;;;;;:42;;;;23625:6;23604:9;:13;23614:2;23604:13;;;;;;;;;;;:17;23618:2;23604:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23680:2;23649:46;;23674:4;23649:46;;23664:8;23649:46;;;23684:2;23688:6;23649:46;;;;;;;:::i;:::-;;;;;;;;23708:68;23739:8;23749:4;23755:2;23759;23763:6;23771:4;23708:30;:68::i;:::-;23133:651;;22964:820;;;;;:::o;31250:221::-;;;;;;;:::o;32231:813::-;32471:15;:2;:13;;;:15::i;:::-;32467:570;;;32524:2;32507:43;;;32551:8;32561:4;32567:3;32572:7;32581:4;32507:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32503:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32899:6;32892:14;;;;;;;;;;;:::i;:::-;;;;;;;;32503:523;;;32948:62;;;;;;;;;;:::i;:::-;;;;;;;;32503:523;32680:48;;;32668:60;;;:8;:60;;;;32664:159;;32753:50;;;;;;;;;;:::i;:::-;;;;;;;;32664:159;32587:251;32467:570;32231:813;;;;;;:::o;33052:198::-;33118:16;33147:22;33186:1;33172:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33147:41;;33210:7;33199:5;33205:1;33199:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;33237:5;33230:12;;;33052:198;;;:::o;31479:744::-;31694:15;:2;:13;;;:15::i;:::-;31690:526;;;31747:2;31730:38;;;31769:8;31779:4;31785:2;31789:6;31797:4;31730:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31726:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32078:6;32071:14;;;;;;;;;;;:::i;:::-;;;;;;;;31726:479;;;32127:62;;;;;;;;;;:::i;:::-;;;;;;;;31726:479;31864:43;;;31852:55;;;:8;:55;;;;31848:154;;31932:50;;;;;;;;;;:::i;:::-;;;;;;;;31848:154;31803:214;31690:526;31479:744;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:329::-;3272:6;3321:2;3309:9;3300:7;3296:23;3292:32;3289:119;;;3327:79;;:::i;:::-;3289:119;3447:1;3472:53;3517:7;3508:6;3497:9;3493:22;3472:53;:::i;:::-;3462:63;;3418:117;3213:329;;;;:::o;3548:118::-;3635:24;3653:5;3635:24;:::i;:::-;3630:3;3623:37;3548:118;;:::o;3672:222::-;3765:4;3803:2;3792:9;3788:18;3780:26;;3816:71;3884:1;3873:9;3869:17;3860:6;3816:71;:::i;:::-;3672:222;;;;:::o;3900:99::-;3952:6;3986:5;3980:12;3970:22;;3900:99;;;:::o;4005:169::-;4089:11;4123:6;4118:3;4111:19;4163:4;4158:3;4154:14;4139:29;;4005:169;;;;:::o;4180:307::-;4248:1;4258:113;4272:6;4269:1;4266:13;4258:113;;;4357:1;4352:3;4348:11;4342:18;4338:1;4333:3;4329:11;4322:39;4294:2;4291:1;4287:10;4282:15;;4258:113;;;4389:6;4386:1;4383:13;4380:101;;;4469:1;4460:6;4455:3;4451:16;4444:27;4380:101;4229:258;4180:307;;;:::o;4493:102::-;4534:6;4585:2;4581:7;4576:2;4569:5;4565:14;4561:28;4551:38;;4493:102;;;:::o;4601:364::-;4689:3;4717:39;4750:5;4717:39;:::i;:::-;4772:71;4836:6;4831:3;4772:71;:::i;:::-;4765:78;;4852:52;4897:6;4892:3;4885:4;4878:5;4874:16;4852:52;:::i;:::-;4929:29;4951:6;4929:29;:::i;:::-;4924:3;4920:39;4913:46;;4693:272;4601:364;;;;:::o;4971:313::-;5084:4;5122:2;5111:9;5107:18;5099:26;;5171:9;5165:4;5161:20;5157:1;5146:9;5142:17;5135:47;5199:78;5272:4;5263:6;5199:78;:::i;:::-;5191:86;;4971:313;;;;:::o;5290:117::-;5399:1;5396;5389:12;5413:180;5461:77;5458:1;5451:88;5558:4;5555:1;5548:15;5582:4;5579:1;5572:15;5599:281;5682:27;5704:4;5682:27;:::i;:::-;5674:6;5670:40;5812:6;5800:10;5797:22;5776:18;5764:10;5761:34;5758:62;5755:88;;;5823:18;;:::i;:::-;5755:88;5863:10;5859:2;5852:22;5642:238;5599:281;;:::o;5886:129::-;5920:6;5947:20;;:::i;:::-;5937:30;;5976:33;6004:4;5996:6;5976:33;:::i;:::-;5886:129;;;:::o;6021:311::-;6098:4;6188:18;6180:6;6177:30;6174:56;;;6210:18;;:::i;:::-;6174:56;6260:4;6252:6;6248:17;6240:25;;6320:4;6314;6310:15;6302:23;;6021:311;;;:::o;6338:117::-;6447:1;6444;6437:12;6478:710;6574:5;6599:81;6615:64;6672:6;6615:64;:::i;:::-;6599:81;:::i;:::-;6590:90;;6700:5;6729:6;6722:5;6715:21;6763:4;6756:5;6752:16;6745:23;;6816:4;6808:6;6804:17;6796:6;6792:30;6845:3;6837:6;6834:15;6831:122;;;6864:79;;:::i;:::-;6831:122;6979:6;6962:220;6996:6;6991:3;6988:15;6962:220;;;7071:3;7100:37;7133:3;7121:10;7100:37;:::i;:::-;7095:3;7088:50;7167:4;7162:3;7158:14;7151:21;;7038:144;7022:4;7017:3;7013:14;7006:21;;6962:220;;;6966:21;6580:608;;6478:710;;;;;:::o;7211:370::-;7282:5;7331:3;7324:4;7316:6;7312:17;7308:27;7298:122;;7339:79;;:::i;:::-;7298:122;7456:6;7443:20;7481:94;7571:3;7563:6;7556:4;7548:6;7544:17;7481:94;:::i;:::-;7472:103;;7288:293;7211:370;;;;:::o;7587:117::-;7696:1;7693;7686:12;7710:307;7771:4;7861:18;7853:6;7850:30;7847:56;;;7883:18;;:::i;:::-;7847:56;7921:29;7943:6;7921:29;:::i;:::-;7913:37;;8005:4;7999;7995:15;7987:23;;7710:307;;;:::o;8023:154::-;8107:6;8102:3;8097;8084:30;8169:1;8160:6;8155:3;8151:16;8144:27;8023:154;;;:::o;8183:410::-;8260:5;8285:65;8301:48;8342:6;8301:48;:::i;:::-;8285:65;:::i;:::-;8276:74;;8373:6;8366:5;8359:21;8411:4;8404:5;8400:16;8449:3;8440:6;8435:3;8431:16;8428:25;8425:112;;;8456:79;;:::i;:::-;8425:112;8546:41;8580:6;8575:3;8570;8546:41;:::i;:::-;8266:327;8183:410;;;;;:::o;8612:338::-;8667:5;8716:3;8709:4;8701:6;8697:17;8693:27;8683:122;;8724:79;;:::i;:::-;8683:122;8841:6;8828:20;8866:78;8940:3;8932:6;8925:4;8917:6;8913:17;8866:78;:::i;:::-;8857:87;;8673:277;8612:338;;;;:::o;8956:1509::-;9110:6;9118;9126;9134;9142;9191:3;9179:9;9170:7;9166:23;9162:33;9159:120;;;9198:79;;:::i;:::-;9159:120;9318:1;9343:53;9388:7;9379:6;9368:9;9364:22;9343:53;:::i;:::-;9333:63;;9289:117;9445:2;9471:53;9516:7;9507:6;9496:9;9492:22;9471:53;:::i;:::-;9461:63;;9416:118;9601:2;9590:9;9586:18;9573:32;9632:18;9624:6;9621:30;9618:117;;;9654:79;;:::i;:::-;9618:117;9759:78;9829:7;9820:6;9809:9;9805:22;9759:78;:::i;:::-;9749:88;;9544:303;9914:2;9903:9;9899:18;9886:32;9945:18;9937:6;9934:30;9931:117;;;9967:79;;:::i;:::-;9931:117;10072:78;10142:7;10133:6;10122:9;10118:22;10072:78;:::i;:::-;10062:88;;9857:303;10227:3;10216:9;10212:19;10199:33;10259:18;10251:6;10248:30;10245:117;;;10281:79;;:::i;:::-;10245:117;10386:62;10440:7;10431:6;10420:9;10416:22;10386:62;:::i;:::-;10376:72;;10170:288;8956:1509;;;;;;;;:::o;10471:311::-;10548:4;10638:18;10630:6;10627:30;10624:56;;;10660:18;;:::i;:::-;10624:56;10710:4;10702:6;10698:17;10690:25;;10770:4;10764;10760:15;10752:23;;10471:311;;;:::o;10805:710::-;10901:5;10926:81;10942:64;10999:6;10942:64;:::i;:::-;10926:81;:::i;:::-;10917:90;;11027:5;11056:6;11049:5;11042:21;11090:4;11083:5;11079:16;11072:23;;11143:4;11135:6;11131:17;11123:6;11119:30;11172:3;11164:6;11161:15;11158:122;;;11191:79;;:::i;:::-;11158:122;11306:6;11289:220;11323:6;11318:3;11315:15;11289:220;;;11398:3;11427:37;11460:3;11448:10;11427:37;:::i;:::-;11422:3;11415:50;11494:4;11489:3;11485:14;11478:21;;11365:144;11349:4;11344:3;11340:14;11333:21;;11289:220;;;11293:21;10907:608;;10805:710;;;;;:::o;11538:370::-;11609:5;11658:3;11651:4;11643:6;11639:17;11635:27;11625:122;;11666:79;;:::i;:::-;11625:122;11783:6;11770:20;11808:94;11898:3;11890:6;11883:4;11875:6;11871:17;11808:94;:::i;:::-;11799:103;;11615:293;11538:370;;;;:::o;11914:894::-;12032:6;12040;12089:2;12077:9;12068:7;12064:23;12060:32;12057:119;;;12095:79;;:::i;:::-;12057:119;12243:1;12232:9;12228:17;12215:31;12273:18;12265:6;12262:30;12259:117;;;12295:79;;:::i;:::-;12259:117;12400:78;12470:7;12461:6;12450:9;12446:22;12400:78;:::i;:::-;12390:88;;12186:302;12555:2;12544:9;12540:18;12527:32;12586:18;12578:6;12575:30;12572:117;;;12608:79;;:::i;:::-;12572:117;12713:78;12783:7;12774:6;12763:9;12759:22;12713:78;:::i;:::-;12703:88;;12498:303;11914:894;;;;;:::o;12814:114::-;12881:6;12915:5;12909:12;12899:22;;12814:114;;;:::o;12934:184::-;13033:11;13067:6;13062:3;13055:19;13107:4;13102:3;13098:14;13083:29;;12934:184;;;;:::o;13124:132::-;13191:4;13214:3;13206:11;;13244:4;13239:3;13235:14;13227:22;;13124:132;;;:::o;13262:108::-;13339:24;13357:5;13339:24;:::i;:::-;13334:3;13327:37;13262:108;;:::o;13376:179::-;13445:10;13466:46;13508:3;13500:6;13466:46;:::i;:::-;13544:4;13539:3;13535:14;13521:28;;13376:179;;;;:::o;13561:113::-;13631:4;13663;13658:3;13654:14;13646:22;;13561:113;;;:::o;13710:732::-;13829:3;13858:54;13906:5;13858:54;:::i;:::-;13928:86;14007:6;14002:3;13928:86;:::i;:::-;13921:93;;14038:56;14088:5;14038:56;:::i;:::-;14117:7;14148:1;14133:284;14158:6;14155:1;14152:13;14133:284;;;14234:6;14228:13;14261:63;14320:3;14305:13;14261:63;:::i;:::-;14254:70;;14347:60;14400:6;14347:60;:::i;:::-;14337:70;;14193:224;14180:1;14177;14173:9;14168:14;;14133:284;;;14137:14;14433:3;14426:10;;13834:608;;;13710:732;;;;:::o;14448:373::-;14591:4;14629:2;14618:9;14614:18;14606:26;;14678:9;14672:4;14668:20;14664:1;14653:9;14649:17;14642:47;14706:108;14809:4;14800:6;14706:108;:::i;:::-;14698:116;;14448:373;;;;:::o;14827:308::-;14889:4;14979:18;14971:6;14968:30;14965:56;;;15001:18;;:::i;:::-;14965:56;15039:29;15061:6;15039:29;:::i;:::-;15031:37;;15123:4;15117;15113:15;15105:23;;14827:308;;;:::o;15141:412::-;15219:5;15244:66;15260:49;15302:6;15260:49;:::i;:::-;15244:66;:::i;:::-;15235:75;;15333:6;15326:5;15319:21;15371:4;15364:5;15360:16;15409:3;15400:6;15395:3;15391:16;15388:25;15385:112;;;15416:79;;:::i;:::-;15385:112;15506:41;15540:6;15535:3;15530;15506:41;:::i;:::-;15225:328;15141:412;;;;;:::o;15573:340::-;15629:5;15678:3;15671:4;15663:6;15659:17;15655:27;15645:122;;15686:79;;:::i;:::-;15645:122;15803:6;15790:20;15828:79;15903:3;15895:6;15888:4;15880:6;15876:17;15828:79;:::i;:::-;15819:88;;15635:278;15573:340;;;;:::o;15919:509::-;15988:6;16037:2;16025:9;16016:7;16012:23;16008:32;16005:119;;;16043:79;;:::i;:::-;16005:119;16191:1;16180:9;16176:17;16163:31;16221:18;16213:6;16210:30;16207:117;;;16243:79;;:::i;:::-;16207:117;16348:63;16403:7;16394:6;16383:9;16379:22;16348:63;:::i;:::-;16338:73;;16134:287;15919:509;;;;:::o;16434:797::-;16520:6;16528;16536;16585:2;16573:9;16564:7;16560:23;16556:32;16553:119;;;16591:79;;:::i;:::-;16553:119;16711:1;16736:53;16781:7;16772:6;16761:9;16757:22;16736:53;:::i;:::-;16726:63;;16682:117;16838:2;16864:53;16909:7;16900:6;16889:9;16885:22;16864:53;:::i;:::-;16854:63;;16809:118;16994:2;16983:9;16979:18;16966:32;17025:18;17017:6;17014:30;17011:117;;;17047:79;;:::i;:::-;17011:117;17152:62;17206:7;17197:6;17186:9;17182:22;17152:62;:::i;:::-;17142:72;;16937:287;16434:797;;;;;:::o;17237:117::-;17346:1;17343;17336:12;17377:568;17450:8;17460:6;17510:3;17503:4;17495:6;17491:17;17487:27;17477:122;;17518:79;;:::i;:::-;17477:122;17631:6;17618:20;17608:30;;17661:18;17653:6;17650:30;17647:117;;;17683:79;;:::i;:::-;17647:117;17797:4;17789:6;17785:17;17773:29;;17851:3;17843:4;17835:6;17831:17;17821:8;17817:32;17814:41;17811:128;;;17858:79;;:::i;:::-;17811:128;17377:568;;;;;:::o;17951:559::-;18037:6;18045;18094:2;18082:9;18073:7;18069:23;18065:32;18062:119;;;18100:79;;:::i;:::-;18062:119;18248:1;18237:9;18233:17;18220:31;18278:18;18270:6;18267:30;18264:117;;;18300:79;;:::i;:::-;18264:117;18413:80;18485:7;18476:6;18465:9;18461:22;18413:80;:::i;:::-;18395:98;;;;18191:312;17951:559;;;;;:::o;18516:114::-;18583:6;18617:5;18611:12;18601:22;;18516:114;;;:::o;18636:184::-;18735:11;18769:6;18764:3;18757:19;18809:4;18804:3;18800:14;18785:29;;18636:184;;;;:::o;18826:132::-;18893:4;18916:3;18908:11;;18946:4;18941:3;18937:14;18929:22;;18826:132;;;:::o;18964:108::-;19041:24;19059:5;19041:24;:::i;:::-;19036:3;19029:37;18964:108;;:::o;19078:179::-;19147:10;19168:46;19210:3;19202:6;19168:46;:::i;:::-;19246:4;19241:3;19237:14;19223:28;;19078:179;;;;:::o;19263:113::-;19333:4;19365;19360:3;19356:14;19348:22;;19263:113;;;:::o;19412:732::-;19531:3;19560:54;19608:5;19560:54;:::i;:::-;19630:86;19709:6;19704:3;19630:86;:::i;:::-;19623:93;;19740:56;19790:5;19740:56;:::i;:::-;19819:7;19850:1;19835:284;19860:6;19857:1;19854:13;19835:284;;;19936:6;19930:13;19963:63;20022:3;20007:13;19963:63;:::i;:::-;19956:70;;20049:60;20102:6;20049:60;:::i;:::-;20039:70;;19895:224;19882:1;19879;19875:9;19870:14;;19835:284;;;19839:14;20135:3;20128:10;;19536:608;;;19412:732;;;;:::o;20150:373::-;20293:4;20331:2;20320:9;20316:18;20308:26;;20380:9;20374:4;20370:20;20366:1;20355:9;20351:17;20344:47;20408:108;20511:4;20502:6;20408:108;:::i;:::-;20400:116;;20150:373;;;;:::o;20529:116::-;20599:21;20614:5;20599:21;:::i;:::-;20592:5;20589:32;20579:60;;20635:1;20632;20625:12;20579:60;20529:116;:::o;20651:133::-;20694:5;20732:6;20719:20;20710:29;;20748:30;20772:5;20748:30;:::i;:::-;20651:133;;;;:::o;20790:468::-;20855:6;20863;20912:2;20900:9;20891:7;20887:23;20883:32;20880:119;;;20918:79;;:::i;:::-;20880:119;21038:1;21063:53;21108:7;21099:6;21088:9;21084:22;21063:53;:::i;:::-;21053:63;;21009:117;21165:2;21191:50;21233:7;21224:6;21213:9;21209:22;21191:50;:::i;:::-;21181:60;;21136:115;20790:468;;;;;:::o;21264:474::-;21332:6;21340;21389:2;21377:9;21368:7;21364:23;21360:32;21357:119;;;21395:79;;:::i;:::-;21357:119;21515:1;21540:53;21585:7;21576:6;21565:9;21561:22;21540:53;:::i;:::-;21530:63;;21486:117;21642:2;21668:53;21713:7;21704:6;21693:9;21689:22;21668:53;:::i;:::-;21658:63;;21613:118;21264:474;;;;;:::o;21744:1089::-;21848:6;21856;21864;21872;21880;21929:3;21917:9;21908:7;21904:23;21900:33;21897:120;;;21936:79;;:::i;:::-;21897:120;22056:1;22081:53;22126:7;22117:6;22106:9;22102:22;22081:53;:::i;:::-;22071:63;;22027:117;22183:2;22209:53;22254:7;22245:6;22234:9;22230:22;22209:53;:::i;:::-;22199:63;;22154:118;22311:2;22337:53;22382:7;22373:6;22362:9;22358:22;22337:53;:::i;:::-;22327:63;;22282:118;22439:2;22465:53;22510:7;22501:6;22490:9;22486:22;22465:53;:::i;:::-;22455:63;;22410:118;22595:3;22584:9;22580:19;22567:33;22627:18;22619:6;22616:30;22613:117;;;22649:79;;:::i;:::-;22613:117;22754:62;22808:7;22799:6;22788:9;22784:22;22754:62;:::i;:::-;22744:72;;22538:288;21744:1089;;;;;;;;:::o;22839:329::-;22898:6;22947:2;22935:9;22926:7;22922:23;22918:32;22915:119;;;22953:79;;:::i;:::-;22915:119;23073:1;23098:53;23143:7;23134:6;23123:9;23119:22;23098:53;:::i;:::-;23088:63;;23044:117;22839:329;;;;:::o;23174:230::-;23314:34;23310:1;23302:6;23298:14;23291:58;23383:13;23378:2;23370:6;23366:15;23359:38;23174:230;:::o;23410:366::-;23552:3;23573:67;23637:2;23632:3;23573:67;:::i;:::-;23566:74;;23649:93;23738:3;23649:93;:::i;:::-;23767:2;23762:3;23758:12;23751:19;;23410:366;;;:::o;23782:419::-;23948:4;23986:2;23975:9;23971:18;23963:26;;24035:9;24029:4;24025:20;24021:1;24010:9;24006:17;23999:47;24063:131;24189:4;24063:131;:::i;:::-;24055:139;;23782:419;;;:::o;24207:180::-;24255:77;24252:1;24245:88;24352:4;24349:1;24342:15;24376:4;24373:1;24366:15;24393:320;24437:6;24474:1;24468:4;24464:12;24454:22;;24521:1;24515:4;24511:12;24542:18;24532:81;;24598:4;24590:6;24586:17;24576:27;;24532:81;24660:2;24652:6;24649:14;24629:18;24626:38;24623:84;;;24679:18;;:::i;:::-;24623:84;24444:269;24393:320;;;:::o;24719:148::-;24821:11;24858:3;24843:18;;24719:148;;;;:::o;24873:141::-;24922:4;24945:3;24937:11;;24968:3;24965:1;24958:14;25002:4;24999:1;24989:18;24981:26;;24873:141;;;:::o;25044:845::-;25147:3;25184:5;25178:12;25213:36;25239:9;25213:36;:::i;:::-;25265:89;25347:6;25342:3;25265:89;:::i;:::-;25258:96;;25385:1;25374:9;25370:17;25401:1;25396:137;;;;25547:1;25542:341;;;;25363:520;;25396:137;25480:4;25476:9;25465;25461:25;25456:3;25449:38;25516:6;25511:3;25507:16;25500:23;;25396:137;;25542:341;25609:38;25641:5;25609:38;:::i;:::-;25669:1;25683:154;25697:6;25694:1;25691:13;25683:154;;;25771:7;25765:14;25761:1;25756:3;25752:11;25745:35;25821:1;25812:7;25808:15;25797:26;;25719:4;25716:1;25712:12;25707:17;;25683:154;;;25866:6;25861:3;25857:16;25850:23;;25549:334;;25363:520;;25151:738;;25044:845;;;;:::o;25895:377::-;26001:3;26029:39;26062:5;26029:39;:::i;:::-;26084:89;26166:6;26161:3;26084:89;:::i;:::-;26077:96;;26182:52;26227:6;26222:3;26215:4;26208:5;26204:16;26182:52;:::i;:::-;26259:6;26254:3;26250:16;26243:23;;26005:267;25895:377;;;;:::o;26278:155::-;26418:7;26414:1;26406:6;26402:14;26395:31;26278:155;:::o;26439:400::-;26599:3;26620:84;26702:1;26697:3;26620:84;:::i;:::-;26613:91;;26713:93;26802:3;26713:93;:::i;:::-;26831:1;26826:3;26822:11;26815:18;;26439:400;;;:::o;26845:695::-;27123:3;27145:92;27233:3;27224:6;27145:92;:::i;:::-;27138:99;;27254:95;27345:3;27336:6;27254:95;:::i;:::-;27247:102;;27366:148;27510:3;27366:148;:::i;:::-;27359:155;;27531:3;27524:10;;26845:695;;;;;:::o;27546:237::-;27686:34;27682:1;27674:6;27670:14;27663:58;27755:20;27750:2;27742:6;27738:15;27731:45;27546:237;:::o;27789:366::-;27931:3;27952:67;28016:2;28011:3;27952:67;:::i;:::-;27945:74;;28028:93;28117:3;28028:93;:::i;:::-;28146:2;28141:3;28137:12;28130:19;;27789:366;;;:::o;28161:419::-;28327:4;28365:2;28354:9;28350:18;28342:26;;28414:9;28408:4;28404:20;28400:1;28389:9;28385:17;28378:47;28442:131;28568:4;28442:131;:::i;:::-;28434:139;;28161:419;;;:::o;28586:182::-;28726:34;28722:1;28714:6;28710:14;28703:58;28586:182;:::o;28774:366::-;28916:3;28937:67;29001:2;28996:3;28937:67;:::i;:::-;28930:74;;29013:93;29102:3;29013:93;:::i;:::-;29131:2;29126:3;29122:12;29115:19;;28774:366;;;:::o;29146:419::-;29312:4;29350:2;29339:9;29335:18;29327:26;;29399:9;29393:4;29389:20;29385:1;29374:9;29370:17;29363:47;29427:131;29553:4;29427:131;:::i;:::-;29419:139;;29146:419;;;:::o;29571:180::-;29619:77;29616:1;29609:88;29716:4;29713:1;29706:15;29740:4;29737:1;29730:15;29757:180;29805:77;29802:1;29795:88;29902:4;29899:1;29892:15;29926:4;29923:1;29916:15;29943:233;29982:3;30005:24;30023:5;30005:24;:::i;:::-;29996:33;;30051:66;30044:5;30041:77;30038:103;;;30121:18;;:::i;:::-;30038:103;30168:1;30161:5;30157:13;30150:20;;29943:233;;;:::o;30182:228::-;30322:34;30318:1;30310:6;30306:14;30299:58;30391:11;30386:2;30378:6;30374:15;30367:36;30182:228;:::o;30416:366::-;30558:3;30579:67;30643:2;30638:3;30579:67;:::i;:::-;30572:74;;30655:93;30744:3;30655:93;:::i;:::-;30773:2;30768:3;30764:12;30757:19;;30416:366;;;:::o;30788:419::-;30954:4;30992:2;30981:9;30977:18;30969:26;;31041:9;31035:4;31031:20;31027:1;31016:9;31012:17;31005:47;31069:131;31195:4;31069:131;:::i;:::-;31061:139;;30788:419;;;:::o;31213:174::-;31353:26;31349:1;31341:6;31337:14;31330:50;31213:174;:::o;31393:366::-;31535:3;31556:67;31620:2;31615:3;31556:67;:::i;:::-;31549:74;;31632:93;31721:3;31632:93;:::i;:::-;31750:2;31745:3;31741:12;31734:19;;31393:366;;;:::o;31765:419::-;31931:4;31969:2;31958:9;31954:18;31946:26;;32018:9;32012:4;32008:20;32004:1;31993:9;31989:17;31982:47;32046:131;32172:4;32046:131;:::i;:::-;32038:139;;31765:419;;;:::o;32190:228::-;32330:34;32326:1;32318:6;32314:14;32307:58;32399:11;32394:2;32386:6;32382:15;32375:36;32190:228;:::o;32424:366::-;32566:3;32587:67;32651:2;32646:3;32587:67;:::i;:::-;32580:74;;32663:93;32752:3;32663:93;:::i;:::-;32781:2;32776:3;32772:12;32765:19;;32424:366;;;:::o;32796:419::-;32962:4;33000:2;32989:9;32985:18;32977:26;;33049:9;33043:4;33039:20;33035:1;33024:9;33020:17;33013:47;33077:131;33203:4;33077:131;:::i;:::-;33069:139;;32796:419;;;:::o;33221:228::-;33361:34;33357:1;33349:6;33345:14;33338:58;33430:11;33425:2;33417:6;33413:15;33406:36;33221:228;:::o;33455:366::-;33597:3;33618:67;33682:2;33677:3;33618:67;:::i;:::-;33611:74;;33694:93;33783:3;33694:93;:::i;:::-;33812:2;33807:3;33803:12;33796:19;;33455:366;;;:::o;33827:419::-;33993:4;34031:2;34020:9;34016:18;34008:26;;34080:9;34074:4;34070:20;34066:1;34055:9;34051:17;34044:47;34108:131;34234:4;34108:131;:::i;:::-;34100:139;;33827:419;;;:::o;34252:225::-;34392:34;34388:1;34380:6;34376:14;34369:58;34461:8;34456:2;34448:6;34444:15;34437:33;34252:225;:::o;34483:366::-;34625:3;34646:67;34710:2;34705:3;34646:67;:::i;:::-;34639:74;;34722:93;34811:3;34722:93;:::i;:::-;34840:2;34835:3;34831:12;34824:19;;34483:366;;;:::o;34855:419::-;35021:4;35059:2;35048:9;35044:18;35036:26;;35108:9;35102:4;35098:20;35094:1;35083:9;35079:17;35072:47;35136:131;35262:4;35136:131;:::i;:::-;35128:139;;34855:419;;;:::o;35280:180::-;35328:77;35325:1;35318:88;35425:4;35422:1;35415:15;35449:4;35446:1;35439:15;35466:185;35506:1;35523:20;35541:1;35523:20;:::i;:::-;35518:25;;35557:20;35575:1;35557:20;:::i;:::-;35552:25;;35596:1;35586:35;;35601:18;;:::i;:::-;35586:35;35643:1;35640;35636:9;35631:14;;35466:185;;;;:::o;35657:191::-;35697:4;35717:20;35735:1;35717:20;:::i;:::-;35712:25;;35751:20;35769:1;35751:20;:::i;:::-;35746:25;;35790:1;35787;35784:8;35781:34;;;35795:18;;:::i;:::-;35781:34;35840:1;35837;35833:9;35825:17;;35657:191;;;;:::o;35854:176::-;35886:1;35903:20;35921:1;35903:20;:::i;:::-;35898:25;;35937:20;35955:1;35937:20;:::i;:::-;35932:25;;35976:1;35966:35;;35981:18;;:::i;:::-;35966:35;36022:1;36019;36015:9;36010:14;;35854:176;;;;:::o;36036:305::-;36076:3;36095:20;36113:1;36095:20;:::i;:::-;36090:25;;36129:20;36147:1;36129:20;:::i;:::-;36124:25;;36283:1;36215:66;36211:74;36208:1;36205:81;36202:107;;;36289:18;;:::i;:::-;36202:107;36333:1;36330;36326:9;36319:16;;36036:305;;;;:::o;36347:227::-;36487:34;36483:1;36475:6;36471:14;36464:58;36556:10;36551:2;36543:6;36539:15;36532:35;36347:227;:::o;36580:366::-;36722:3;36743:67;36807:2;36802:3;36743:67;:::i;:::-;36736:74;;36819:93;36908:3;36819:93;:::i;:::-;36937:2;36932:3;36928:12;36921:19;;36580:366;;;:::o;36952:419::-;37118:4;37156:2;37145:9;37141:18;37133:26;;37205:9;37199:4;37195:20;37191:1;37180:9;37176:17;37169:47;37233:131;37359:4;37233:131;:::i;:::-;37225:139;;36952:419;;;:::o;37377:224::-;37517:34;37513:1;37505:6;37501:14;37494:58;37586:7;37581:2;37573:6;37569:15;37562:32;37377:224;:::o;37607:366::-;37749:3;37770:67;37834:2;37829:3;37770:67;:::i;:::-;37763:74;;37846:93;37935:3;37846:93;:::i;:::-;37964:2;37959:3;37955:12;37948:19;;37607:366;;;:::o;37979:419::-;38145:4;38183:2;38172:9;38168:18;38160:26;;38232:9;38226:4;38222:20;38218:1;38207:9;38203:17;38196:47;38260:131;38386:4;38260:131;:::i;:::-;38252:139;;37979:419;;;:::o;38404:229::-;38544:34;38540:1;38532:6;38528:14;38521:58;38613:12;38608:2;38600:6;38596:15;38589:37;38404:229;:::o;38639:366::-;38781:3;38802:67;38866:2;38861:3;38802:67;:::i;:::-;38795:74;;38878:93;38967:3;38878:93;:::i;:::-;38996:2;38991:3;38987:12;38980:19;;38639:366;;;:::o;39011:419::-;39177:4;39215:2;39204:9;39200:18;39192:26;;39264:9;39258:4;39254:20;39250:1;39239:9;39235:17;39228:47;39292:131;39418:4;39292:131;:::i;:::-;39284:139;;39011:419;;;:::o;39436:634::-;39657:4;39695:2;39684:9;39680:18;39672:26;;39744:9;39738:4;39734:20;39730:1;39719:9;39715:17;39708:47;39772:108;39875:4;39866:6;39772:108;:::i;:::-;39764:116;;39927:9;39921:4;39917:20;39912:2;39901:9;39897:18;39890:48;39955:108;40058:4;40049:6;39955:108;:::i;:::-;39947:116;;39436:634;;;;;:::o;40076:220::-;40216:34;40212:1;40204:6;40200:14;40193:58;40285:3;40280:2;40272:6;40268:15;40261:28;40076:220;:::o;40302:366::-;40444:3;40465:67;40529:2;40524:3;40465:67;:::i;:::-;40458:74;;40541:93;40630:3;40541:93;:::i;:::-;40659:2;40654:3;40650:12;40643:19;;40302:366;;;:::o;40674:419::-;40840:4;40878:2;40867:9;40863:18;40855:26;;40927:9;40921:4;40917:20;40913:1;40902:9;40898:17;40891:47;40955:131;41081:4;40955:131;:::i;:::-;40947:139;;40674:419;;;:::o;41099:332::-;41220:4;41258:2;41247:9;41243:18;41235:26;;41271:71;41339:1;41328:9;41324:17;41315:6;41271:71;:::i;:::-;41352:72;41420:2;41409:9;41405:18;41396:6;41352:72;:::i;:::-;41099:332;;;;;:::o;41437:98::-;41488:6;41522:5;41516:12;41506:22;;41437:98;;;:::o;41541:168::-;41624:11;41658:6;41653:3;41646:19;41698:4;41693:3;41689:14;41674:29;;41541:168;;;;:::o;41715:360::-;41801:3;41829:38;41861:5;41829:38;:::i;:::-;41883:70;41946:6;41941:3;41883:70;:::i;:::-;41876:77;;41962:52;42007:6;42002:3;41995:4;41988:5;41984:16;41962:52;:::i;:::-;42039:29;42061:6;42039:29;:::i;:::-;42034:3;42030:39;42023:46;;41805:270;41715:360;;;;:::o;42081:1053::-;42404:4;42442:3;42431:9;42427:19;42419:27;;42456:71;42524:1;42513:9;42509:17;42500:6;42456:71;:::i;:::-;42537:72;42605:2;42594:9;42590:18;42581:6;42537:72;:::i;:::-;42656:9;42650:4;42646:20;42641:2;42630:9;42626:18;42619:48;42684:108;42787:4;42778:6;42684:108;:::i;:::-;42676:116;;42839:9;42833:4;42829:20;42824:2;42813:9;42809:18;42802:48;42867:108;42970:4;42961:6;42867:108;:::i;:::-;42859:116;;43023:9;43017:4;43013:20;43007:3;42996:9;42992:19;42985:49;43051:76;43122:4;43113:6;43051:76;:::i;:::-;43043:84;;42081:1053;;;;;;;;:::o;43140:141::-;43196:5;43227:6;43221:13;43212:22;;43243:32;43269:5;43243:32;:::i;:::-;43140:141;;;;:::o;43287:349::-;43356:6;43405:2;43393:9;43384:7;43380:23;43376:32;43373:119;;;43411:79;;:::i;:::-;43373:119;43531:1;43556:63;43611:7;43602:6;43591:9;43587:22;43556:63;:::i;:::-;43546:73;;43502:127;43287:349;;;;:::o;43642:106::-;43686:8;43735:5;43730:3;43726:15;43705:36;;43642:106;;;:::o;43754:183::-;43789:3;43827:1;43809:16;43806:23;43803:128;;;43865:1;43862;43859;43844:23;43887:34;43918:1;43912:8;43887:34;:::i;:::-;43880:41;;43803:128;43754:183;:::o;43943:711::-;43982:3;44020:4;44002:16;43999:26;43996:39;;;44028:5;;43996:39;44057:20;;:::i;:::-;44132:1;44114:16;44110:24;44107:1;44101:4;44086:49;44165:4;44159:11;44264:16;44257:4;44249:6;44245:17;44242:39;44209:18;44201:6;44198:30;44182:113;44179:146;;;44310:5;;;;44179:146;44356:6;44350:4;44346:17;44392:3;44386:10;44419:18;44411:6;44408:30;44405:43;;;44441:5;;;;;;44405:43;44489:6;44482:4;44477:3;44473:14;44469:27;44548:1;44530:16;44526:24;44520:4;44516:35;44511:3;44508:44;44505:57;;;44555:5;;;;;;;44505:57;44572;44620:6;44614:4;44610:17;44602:6;44598:30;44592:4;44572:57;:::i;:::-;44645:3;44638:10;;43986:668;;;;;43943:711;;:::o;44660:239::-;44800:34;44796:1;44788:6;44784:14;44777:58;44869:22;44864:2;44856:6;44852:15;44845:47;44660:239;:::o;44905:366::-;45047:3;45068:67;45132:2;45127:3;45068:67;:::i;:::-;45061:74;;45144:93;45233:3;45144:93;:::i;:::-;45262:2;45257:3;45253:12;45246:19;;44905:366;;;:::o;45277:419::-;45443:4;45481:2;45470:9;45466:18;45458:26;;45530:9;45524:4;45520:20;45516:1;45505:9;45501:17;45494:47;45558:131;45684:4;45558:131;:::i;:::-;45550:139;;45277:419;;;:::o;45702:227::-;45842:34;45838:1;45830:6;45826:14;45819:58;45911:10;45906:2;45898:6;45894:15;45887:35;45702:227;:::o;45935:366::-;46077:3;46098:67;46162:2;46157:3;46098:67;:::i;:::-;46091:74;;46174:93;46263:3;46174:93;:::i;:::-;46292:2;46287:3;46283:12;46276:19;;45935:366;;;:::o;46307:419::-;46473:4;46511:2;46500:9;46496:18;46488:26;;46560:9;46554:4;46550:20;46546:1;46535:9;46531:17;46524:47;46588:131;46714:4;46588:131;:::i;:::-;46580:139;;46307:419;;;:::o;46732:751::-;46955:4;46993:3;46982:9;46978:19;46970:27;;47007:71;47075:1;47064:9;47060:17;47051:6;47007:71;:::i;:::-;47088:72;47156:2;47145:9;47141:18;47132:6;47088:72;:::i;:::-;47170;47238:2;47227:9;47223:18;47214:6;47170:72;:::i;:::-;47252;47320:2;47309:9;47305:18;47296:6;47252:72;:::i;:::-;47372:9;47366:4;47362:20;47356:3;47345:9;47341:19;47334:49;47400:76;47471:4;47462:6;47400:76;:::i;:::-;47392:84;;46732:751;;;;;;;;:::o
Swarm Source
ipfs://e9bcde503dfc9a064491c2c532df5aa9e4ac38d25f9b96fc1db9a12521b44270
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.