Token
Overview CRC1155
Total Supply:
0 N/A
Holders:
0 addresses
Transfers:
-
Contract:
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Artcitypresale
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-07-19 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/[email protected]/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.4; /** * @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/[email protected]/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/[email protected]/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/[email protected]/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/[email protected]/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/[email protected]/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must 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/[email protected]/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/[email protected]/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: 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 { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not 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 `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, 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 `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `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/[email protected]/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] -= amounts[i]; } } } } // File: @openzeppelin/[email protected]/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } } // File: Token1155OpenZepline.sol pragma solidity ^0.8.4; contract Artcitypresale is ERC1155, Ownable, Pausable, ERC1155Burnable, ERC1155Supply { struct Airdrop { address Receiver; uint nft_id; } mapping(uint => Airdrop) public airdrops; mapping(address => bool) public recipients; mapping(uint => string) public tokenURI; constructor() ERC1155("") {} function setURI(uint _id, string memory _uri) external onlyOwner { tokenURI[_id] = _uri; emit URI(_uri, _id); } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function mint(address account, uint256 id, uint256 amount, bytes memory data) public onlyOwner { _mint(account, id, amount, data); } function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public onlyOwner { _mintBatch(to, ids, amounts, data); } function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal whenNotPaused override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } function Set_Airdrops(uint nft_id , address abc) public { airdrops[nft_id].Receiver = abc; } function claim_Airdrop(uint nft_id) public { require(msg.sender == airdrops[nft_id].Receiver, "You are not calimable"); _mint(msg.sender, nft_id, 1, ""); } }
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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256","name":"nft_id","type":"uint256"},{"internalType":"address","name":"abc","type":"address"}],"name":"Set_Airdrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"airdrops","outputs":[{"internalType":"address","name":"Receiver","type":"address"},{"internalType":"uint256","name":"nft_id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nft_id","type":"uint256"}],"name":"claim_Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"recipients","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060200160405280600081525062000033816200007560201b60201c565b5062000054620000486200009160201b60201c565b6200009960201b60201c565b6000600360146101000a81548160ff02191690831515021790555062000274565b80600290805190602001906200008d9291906200015f565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200016d906200020f565b90600052602060002090601f016020900481019282620001915760008555620001dd565b82601f10620001ac57805160ff1916838001178555620001dd565b82800160010185558215620001dd579182015b82811115620001dc578251825591602001919060010190620001bf565b5b509050620001ec9190620001f0565b5090565b5b808211156200020b576000816000905550600101620001f1565b5090565b600060028204905060018216806200022857607f821691505b602082108114156200023f576200023e62000245565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61464180620002846000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c8063731133e9116100de578063c87b56dd11610097578063eb82031211610071578063eb8203121461047d578063f242432a146104ad578063f2fde38b146104c9578063f5298aca146104e55761018d565b8063c87b56dd14610401578063d3d89bca14610431578063e985e9c51461044d5761018d565b8063731133e9146103555780638456cb5914610371578063862440e21461037b5780638da5cb5b14610397578063a22cb465146103b5578063bd85b039146103d15761018d565b80633f4ba83a1161014b5780635c975abb116101255780635c975abb146102e057806360db5082146102fe5780636b20c4541461032f578063715018a61461034b5761018d565b80633f4ba83a146102765780634e1273f4146102805780634f558e79146102b05761018d565b8062fdd58e14610192578063013c2a7f146101c257806301ffc9a7146101de5780630e89341c1461020e5780631f7fdffa1461023e5780632eb2c2d61461025a575b600080fd5b6101ac60048036038101906101a79190613167565b610501565b6040516101b99190613b8e565b60405180910390f35b6101dc60048036038101906101d7919061337c565b6105ca565b005b6101f860048036038101906101f391906132f5565b610623565b6040516102059190613911565b60405180910390f35b6102286004803603810190610223919061334f565b610705565b604051610235919061392c565b60405180910390f35b6102586004803603810190610253919061306c565b610799565b005b610274600480360381019061026f9190612e7b565b610827565b005b61027e6108c8565b005b61029a6004803603810190610295919061327d565b61094e565b6040516102a791906138b8565b60405180910390f35b6102ca60048036038101906102c5919061334f565b610a67565b6040516102d79190613911565b60405180910390f35b6102e8610a7b565b6040516102f59190613911565b60405180910390f35b6103186004803603810190610313919061334f565b610a92565b60405161032692919061388f565b60405180910390f35b61034960048036038101906103449190612fe1565b610ad6565b005b610353610b73565b005b61036f600480360381019061036a91906131fa565b610bfb565b005b610379610c89565b005b610395600480360381019061039091906133bc565b610d0f565b005b61039f610def565b6040516103ac91906137b2565b60405180910390f35b6103cf60048036038101906103ca9190613127565b610e19565b005b6103eb60048036038101906103e6919061334f565b610e2f565b6040516103f89190613b8e565b60405180910390f35b61041b6004803603810190610416919061334f565b610e4c565b604051610428919061392c565b60405180910390f35b61044b6004803603810190610446919061334f565b610eec565b005b61046760048036038101906104629190612e3b565b610faf565b6040516104749190613911565b60405180910390f35b61049760048036038101906104929190612e0e565b611043565b6040516104a49190613911565b60405180910390f35b6104c760048036038101906104c29190612f4a565b611063565b005b6104e360048036038101906104de9190612e0e565b611104565b005b6104ff60048036038101906104fa91906131a7565b6111fc565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610572576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610569906139ae565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b806005600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ee57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106fe57506106fd82611299565b5b9050919050565b60606002805461071490613e62565b80601f016020809104026020016040519081016040528092919081815260200182805461074090613e62565b801561078d5780601f106107625761010080835404028352916020019161078d565b820191906000526020600020905b81548152906001019060200180831161077057829003601f168201915b50505050509050919050565b6107a1611303565b73ffffffffffffffffffffffffffffffffffffffff166107bf610def565b73ffffffffffffffffffffffffffffffffffffffff1614610815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080c90613ace565b60405180910390fd5b6108218484848461130b565b50505050565b61082f611303565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061087557506108748561086f611303565b610faf565b5b6108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ab90613a6e565b60405180910390fd5b6108c18585858585611529565b5050505050565b6108d0611303565b73ffffffffffffffffffffffffffffffffffffffff166108ee610def565b73ffffffffffffffffffffffffffffffffffffffff1614610944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093b90613ace565b60405180910390fd5b61094c61183d565b565b60608151835114610994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098b90613b2e565b60405180910390fd5b6000835167ffffffffffffffff8111156109b1576109b0613f9b565b5b6040519080825280602002602001820160405280156109df5781602001602082028036833780820191505090505b50905060005b8451811015610a5c57610a2c858281518110610a0457610a03613f6c565b5b6020026020010151858381518110610a1f57610a1e613f6c565b5b6020026020010151610501565b828281518110610a3f57610a3e613f6c565b5b60200260200101818152505080610a5590613ec5565b90506109e5565b508091505092915050565b600080610a7383610e2f565b119050919050565b6000600360149054906101000a900460ff16905090565b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b610ade611303565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b245750610b2383610b1e611303565b610faf565b5b610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a90613a0e565b60405180910390fd5b610b6e8383836118df565b505050565b610b7b611303565b73ffffffffffffffffffffffffffffffffffffffff16610b99610def565b73ffffffffffffffffffffffffffffffffffffffff1614610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be690613ace565b60405180910390fd5b610bf96000611b90565b565b610c03611303565b73ffffffffffffffffffffffffffffffffffffffff16610c21610def565b73ffffffffffffffffffffffffffffffffffffffff1614610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e90613ace565b60405180910390fd5b610c8384848484611c56565b50505050565b610c91611303565b73ffffffffffffffffffffffffffffffffffffffff16610caf610def565b73ffffffffffffffffffffffffffffffffffffffff1614610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc90613ace565b60405180910390fd5b610d0d611dec565b565b610d17611303565b73ffffffffffffffffffffffffffffffffffffffff16610d35610def565b73ffffffffffffffffffffffffffffffffffffffff1614610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8290613ace565b60405180910390fd5b80600760008481526020019081526020016000209080519060200190610db2929190612ae6565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610de3919061392c565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e2b610e24611303565b8383611e8f565b5050565b600060046000838152602001908152602001600020549050919050565b60076020528060005260406000206000915090508054610e6b90613e62565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9790613e62565b8015610ee45780601f10610eb957610100808354040283529160200191610ee4565b820191906000526020600020905b815481529060010190602001808311610ec757829003601f168201915b505050505081565b6005600082815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8790613aee565b60405180910390fd5b610fac3382600160405180602001604052806000815250611c56565b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b61106b611303565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806110b157506110b0856110ab611303565b610faf565b5b6110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e790613a0e565b60405180910390fd5b6110fd8585858585611ffc565b5050505050565b61110c611303565b73ffffffffffffffffffffffffffffffffffffffff1661112a610def565b73ffffffffffffffffffffffffffffffffffffffff1614611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117790613ace565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e7906139ce565b60405180910390fd5b6111f981611b90565b50565b611204611303565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061124a575061124983611244611303565b610faf565b5b611289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128090613a0e565b60405180910390fd5b61129483838361227e565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290613b6e565b60405180910390fd5b81518351146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690613b4e565b60405180910390fd5b60006113c9611303565b90506113da8160008787878761249b565b60005b8451811015611493578381815181106113f9576113f8613f6c565b5b602002602001015160008087848151811061141757611416613f6c565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114799190613d22565b92505081905550808061148b90613ec5565b9150506113dd565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161150b9291906138da565b60405180910390a4611522816000878787876124f9565b5050505050565b815183511461156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490613b4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490613a4e565b60405180910390fd5b60006115e7611303565b90506115f781878787878761249b565b60005b84518110156117a857600085828151811061161857611617613f6c565b5b60200260200101519050600085838151811061163757611636613f6c565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90613aae565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461178d9190613d22565b92505081905550505050806117a190613ec5565b90506115fa565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161181f9291906138da565b60405180910390a46118358187878787876124f9565b505050505050565b611845610a7b565b611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b9061398e565b60405180910390fd5b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6118c8611303565b6040516118d591906137b2565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561194f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194690613a8e565b60405180910390fd5b8051825114611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a90613b4e565b60405180910390fd5b600061199d611303565b90506119bd8185600086866040518060200160405280600081525061249b565b60005b8351811015611b0a5760008482815181106119de576119dd613f6c565b5b6020026020010151905060008483815181106119fd576119fc613f6c565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a95906139ee565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611b0290613ec5565b9150506119c0565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611b829291906138da565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbd90613b6e565b60405180910390fd5b6000611cd0611303565b9050611cf181600087611ce2886126e0565b611ceb886126e0565b8761249b565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d509190613d22565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611dce929190613ba9565b60405180910390a4611de58160008787878761275a565b5050505050565b611df4610a7b565b15611e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2b90613a2e565b60405180910390fd5b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e78611303565b604051611e8591906137b2565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590613b0e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fef9190613911565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390613a4e565b60405180910390fd5b6000612076611303565b9050612096818787612087886126e0565b612090886126e0565b8761249b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561212d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212490613aae565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121e29190613d22565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161225f929190613ba9565b60405180910390a461227582888888888861275a565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e590613a8e565b60405180910390fd5b60006122f8611303565b90506123288185600061230a876126e0565b612313876126e0565b6040518060200160405280600081525061249b565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b6906139ee565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161248c929190613ba9565b60405180910390a45050505050565b6124a3610a7b565b156124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90613a2e565b60405180910390fd5b6124f1868686868686612941565b505050505050565b6125188473ffffffffffffffffffffffffffffffffffffffff16612abb565b156126d8578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161255e9594939291906137cd565b602060405180830381600087803b15801561257857600080fd5b505af19250505080156125a957506040513d601f19601f820116820180604052508101906125a69190613322565b60015b61264f576125b5613fca565b806308c379a0141561261257506125ca614519565b806125d55750612614565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612609919061392c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126469061394e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd9061396e565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156126ff576126fe613f9b565b5b60405190808252806020026020018201604052801561272d5781602001602082028036833780820191505090505b509050828160008151811061274557612744613f6c565b5b60200260200101818152505080915050919050565b6127798473ffffffffffffffffffffffffffffffffffffffff16612abb565b15612939578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016127bf959493929190613835565b602060405180830381600087803b1580156127d957600080fd5b505af192505050801561280a57506040513d601f19601f820116820180604052508101906128079190613322565b60015b6128b057612816613fca565b806308c379a01415612873575061282b614519565b806128365750612875565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286a919061392c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a79061394e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292e9061396e565b60405180910390fd5b505b505050505050565b61294f868686868686612ade565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612a015760005b83518110156129ff578281815181106129a3576129a2613f6c565b5b6020026020010151600460008684815181106129c2576129c1613f6c565b5b6020026020010151815260200190815260200160002060008282546129e79190613d22565b92505081905550806129f890613ec5565b9050612987565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ab35760005b8351811015612ab157828181518110612a5557612a54613f6c565b5b602002602001015160046000868481518110612a7457612a73613f6c565b5b602002602001015181526020019081526020016000206000828254612a999190613d78565b9250508190555080612aaa90613ec5565b9050612a39565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b828054612af290613e62565b90600052602060002090601f016020900481019282612b145760008555612b5b565b82601f10612b2d57805160ff1916838001178555612b5b565b82800160010185558215612b5b579182015b82811115612b5a578251825591602001919060010190612b3f565b5b509050612b689190612b6c565b5090565b5b80821115612b85576000816000905550600101612b6d565b5090565b6000612b9c612b9784613bf7565b613bd2565b90508083825260208201905082856020860282011115612bbf57612bbe613ff1565b5b60005b85811015612bef5781612bd58882612ced565b845260208401935060208301925050600181019050612bc2565b5050509392505050565b6000612c0c612c0784613c23565b613bd2565b90508083825260208201905082856020860282011115612c2f57612c2e613ff1565b5b60005b85811015612c5f5781612c458882612df9565b845260208401935060208301925050600181019050612c32565b5050509392505050565b6000612c7c612c7784613c4f565b613bd2565b905082815260208101848484011115612c9857612c97613ff6565b5b612ca3848285613e20565b509392505050565b6000612cbe612cb984613c80565b613bd2565b905082815260208101848484011115612cda57612cd9613ff6565b5b612ce5848285613e20565b509392505050565b600081359050612cfc816145af565b92915050565b600082601f830112612d1757612d16613fec565b5b8135612d27848260208601612b89565b91505092915050565b600082601f830112612d4557612d44613fec565b5b8135612d55848260208601612bf9565b91505092915050565b600081359050612d6d816145c6565b92915050565b600081359050612d82816145dd565b92915050565b600081519050612d97816145dd565b92915050565b600082601f830112612db257612db1613fec565b5b8135612dc2848260208601612c69565b91505092915050565b600082601f830112612de057612ddf613fec565b5b8135612df0848260208601612cab565b91505092915050565b600081359050612e08816145f4565b92915050565b600060208284031215612e2457612e23614000565b5b6000612e3284828501612ced565b91505092915050565b60008060408385031215612e5257612e51614000565b5b6000612e6085828601612ced565b9250506020612e7185828601612ced565b9150509250929050565b600080600080600060a08688031215612e9757612e96614000565b5b6000612ea588828901612ced565b9550506020612eb688828901612ced565b945050604086013567ffffffffffffffff811115612ed757612ed6613ffb565b5b612ee388828901612d30565b935050606086013567ffffffffffffffff811115612f0457612f03613ffb565b5b612f1088828901612d30565b925050608086013567ffffffffffffffff811115612f3157612f30613ffb565b5b612f3d88828901612d9d565b9150509295509295909350565b600080600080600060a08688031215612f6657612f65614000565b5b6000612f7488828901612ced565b9550506020612f8588828901612ced565b9450506040612f9688828901612df9565b9350506060612fa788828901612df9565b925050608086013567ffffffffffffffff811115612fc857612fc7613ffb565b5b612fd488828901612d9d565b9150509295509295909350565b600080600060608486031215612ffa57612ff9614000565b5b600061300886828701612ced565b935050602084013567ffffffffffffffff81111561302957613028613ffb565b5b61303586828701612d30565b925050604084013567ffffffffffffffff81111561305657613055613ffb565b5b61306286828701612d30565b9150509250925092565b6000806000806080858703121561308657613085614000565b5b600061309487828801612ced565b945050602085013567ffffffffffffffff8111156130b5576130b4613ffb565b5b6130c187828801612d30565b935050604085013567ffffffffffffffff8111156130e2576130e1613ffb565b5b6130ee87828801612d30565b925050606085013567ffffffffffffffff81111561310f5761310e613ffb565b5b61311b87828801612d9d565b91505092959194509250565b6000806040838503121561313e5761313d614000565b5b600061314c85828601612ced565b925050602061315d85828601612d5e565b9150509250929050565b6000806040838503121561317e5761317d614000565b5b600061318c85828601612ced565b925050602061319d85828601612df9565b9150509250929050565b6000806000606084860312156131c0576131bf614000565b5b60006131ce86828701612ced565b93505060206131df86828701612df9565b92505060406131f086828701612df9565b9150509250925092565b6000806000806080858703121561321457613213614000565b5b600061322287828801612ced565b945050602061323387828801612df9565b935050604061324487828801612df9565b925050606085013567ffffffffffffffff81111561326557613264613ffb565b5b61327187828801612d9d565b91505092959194509250565b6000806040838503121561329457613293614000565b5b600083013567ffffffffffffffff8111156132b2576132b1613ffb565b5b6132be85828601612d02565b925050602083013567ffffffffffffffff8111156132df576132de613ffb565b5b6132eb85828601612d30565b9150509250929050565b60006020828403121561330b5761330a614000565b5b600061331984828501612d73565b91505092915050565b60006020828403121561333857613337614000565b5b600061334684828501612d88565b91505092915050565b60006020828403121561336557613364614000565b5b600061337384828501612df9565b91505092915050565b6000806040838503121561339357613392614000565b5b60006133a185828601612df9565b92505060206133b285828601612ced565b9150509250929050565b600080604083850312156133d3576133d2614000565b5b60006133e185828601612df9565b925050602083013567ffffffffffffffff81111561340257613401613ffb565b5b61340e85828601612dcb565b9150509250929050565b60006134248383613794565b60208301905092915050565b61343981613dac565b82525050565b600061344a82613cc1565b6134548185613cef565b935061345f83613cb1565b8060005b838110156134905781516134778882613418565b975061348283613ce2565b925050600181019050613463565b5085935050505092915050565b6134a681613dbe565b82525050565b60006134b782613ccc565b6134c18185613d00565b93506134d1818560208601613e2f565b6134da81614005565b840191505092915050565b60006134f082613cd7565b6134fa8185613d11565b935061350a818560208601613e2f565b61351381614005565b840191505092915050565b600061352b603483613d11565b915061353682614023565b604082019050919050565b600061354e602883613d11565b915061355982614072565b604082019050919050565b6000613571601483613d11565b915061357c826140c1565b602082019050919050565b6000613594602b83613d11565b915061359f826140ea565b604082019050919050565b60006135b7602683613d11565b91506135c282614139565b604082019050919050565b60006135da602483613d11565b91506135e582614188565b604082019050919050565b60006135fd602983613d11565b9150613608826141d7565b604082019050919050565b6000613620601083613d11565b915061362b82614226565b602082019050919050565b6000613643602583613d11565b915061364e8261424f565b604082019050919050565b6000613666603283613d11565b91506136718261429e565b604082019050919050565b6000613689602383613d11565b9150613694826142ed565b604082019050919050565b60006136ac602a83613d11565b91506136b78261433c565b604082019050919050565b60006136cf602083613d11565b91506136da8261438b565b602082019050919050565b60006136f2601583613d11565b91506136fd826143b4565b602082019050919050565b6000613715602983613d11565b9150613720826143dd565b604082019050919050565b6000613738602983613d11565b91506137438261442c565b604082019050919050565b600061375b602883613d11565b91506137668261447b565b604082019050919050565b600061377e602183613d11565b9150613789826144ca565b604082019050919050565b61379d81613e16565b82525050565b6137ac81613e16565b82525050565b60006020820190506137c76000830184613430565b92915050565b600060a0820190506137e26000830188613430565b6137ef6020830187613430565b8181036040830152613801818661343f565b90508181036060830152613815818561343f565b9050818103608083015261382981846134ac565b90509695505050505050565b600060a08201905061384a6000830188613430565b6138576020830187613430565b61386460408301866137a3565b61387160608301856137a3565b818103608083015261388381846134ac565b90509695505050505050565b60006040820190506138a46000830185613430565b6138b160208301846137a3565b9392505050565b600060208201905081810360008301526138d2818461343f565b905092915050565b600060408201905081810360008301526138f4818561343f565b90508181036020830152613908818461343f565b90509392505050565b6000602082019050613926600083018461349d565b92915050565b6000602082019050818103600083015261394681846134e5565b905092915050565b600060208201905081810360008301526139678161351e565b9050919050565b6000602082019050818103600083015261398781613541565b9050919050565b600060208201905081810360008301526139a781613564565b9050919050565b600060208201905081810360008301526139c781613587565b9050919050565b600060208201905081810360008301526139e7816135aa565b9050919050565b60006020820190508181036000830152613a07816135cd565b9050919050565b60006020820190508181036000830152613a27816135f0565b9050919050565b60006020820190508181036000830152613a4781613613565b9050919050565b60006020820190508181036000830152613a6781613636565b9050919050565b60006020820190508181036000830152613a8781613659565b9050919050565b60006020820190508181036000830152613aa78161367c565b9050919050565b60006020820190508181036000830152613ac78161369f565b9050919050565b60006020820190508181036000830152613ae7816136c2565b9050919050565b60006020820190508181036000830152613b07816136e5565b9050919050565b60006020820190508181036000830152613b2781613708565b9050919050565b60006020820190508181036000830152613b478161372b565b9050919050565b60006020820190508181036000830152613b678161374e565b9050919050565b60006020820190508181036000830152613b8781613771565b9050919050565b6000602082019050613ba360008301846137a3565b92915050565b6000604082019050613bbe60008301856137a3565b613bcb60208301846137a3565b9392505050565b6000613bdc613bed565b9050613be88282613e94565b919050565b6000604051905090565b600067ffffffffffffffff821115613c1257613c11613f9b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613c3e57613c3d613f9b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613c6a57613c69613f9b565b5b613c7382614005565b9050602081019050919050565b600067ffffffffffffffff821115613c9b57613c9a613f9b565b5b613ca482614005565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613d2d82613e16565b9150613d3883613e16565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d6d57613d6c613f0e565b5b828201905092915050565b6000613d8382613e16565b9150613d8e83613e16565b925082821015613da157613da0613f0e565b5b828203905092915050565b6000613db782613df6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e4d578082015181840152602081019050613e32565b83811115613e5c576000848401525b50505050565b60006002820490506001821680613e7a57607f821691505b60208210811415613e8e57613e8d613f3d565b5b50919050565b613e9d82614005565b810181811067ffffffffffffffff82111715613ebc57613ebb613f9b565b5b80604052505050565b6000613ed082613e16565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f0357613f02613f0e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613fe95760046000803e613fe6600051614016565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7520617265206e6f742063616c696d61626c650000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614529576145ac565b614531613bed565b60043d036004823e80513d602482011167ffffffffffffffff821117156145595750506145ac565b808201805167ffffffffffffffff81111561457757505050506145ac565b80602083010160043d0385018111156145945750505050506145ac565b6145a382602001850186613e94565b82955050505050505b90565b6145b881613dac565b81146145c357600080fd5b50565b6145cf81613dbe565b81146145da57600080fd5b50565b6145e681613dca565b81146145f157600080fd5b50565b6145fd81613e16565b811461460857600080fd5b5056fea264697066735822122072e80dfb80f86220945136412722b85c4aa069d9eff30d81ec07725ee189e73164736f6c63430008070033
Deployed ByteCode Sourcemap
42294:1620:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25788:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43601:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24811:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25532:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43080:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27727:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42830:65;;;:::i;:::-;;26185:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40233:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2070:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42452:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;41858:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4975:103;;;:::i;:::-;;42903:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42761:61;;;:::i;:::-;;42629:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4324:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26782:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40022:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42550:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43729:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27009:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42497:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27249:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5233:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41529:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25788:231;25874:7;25921:1;25902:21;;:7;:21;;;;25894:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25989:9;:13;25999:2;25989:13;;;;;;;;;;;:22;26003:7;25989:22;;;;;;;;;;;;;;;;25982:29;;25788:231;;;;:::o;43601:124::-;43706:3;43678:8;:16;43687:6;43678:16;;;;;;;;;;;:25;;;:31;;;;;;;;;;;;;;;;;;43601:124;;:::o;24811:310::-;24913:4;24965:26;24950:41;;;:11;:41;;;;:110;;;;25023:37;25008:52;;;:11;:52;;;;24950:110;:163;;;;25077:36;25101:11;25077:23;:36::i;:::-;24950:163;24930:183;;24811:310;;;:::o;25532:105::-;25592:13;25625:4;25618:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25532:105;;;:::o;43080:191::-;4555:12;:10;:12::i;:::-;4544:23;;:7;:5;:7::i;:::-;:23;;;4536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43229:34:::1;43240:2;43244:3;43249:7;43258:4;43229:10;:34::i;:::-;43080:191:::0;;;;:::o;27727:442::-;27968:12;:10;:12::i;:::-;27960:20;;:4;:20;;;:60;;;;27984:36;28001:4;28007:12;:10;:12::i;:::-;27984:16;:36::i;:::-;27960:60;27938:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;28109:52;28132:4;28138:2;28142:3;28147:7;28156:4;28109:22;:52::i;:::-;27727:442;;;;;:::o;42830:65::-;4555:12;:10;:12::i;:::-;4544:23;;:7;:5;:7::i;:::-;:23;;;4536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42877:10:::1;:8;:10::i;:::-;42830:65::o:0;26185:524::-;26341:16;26402:3;:10;26383:8;:15;:29;26375:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26471:30;26518:8;:15;26504:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26471:63;;26552:9;26547:122;26571:8;:15;26567:1;:19;26547:122;;;26627:30;26637:8;26646:1;26637:11;;;;;;;;:::i;:::-;;;;;;;;26650:3;26654:1;26650:6;;;;;;;;:::i;:::-;;;;;;;;26627:9;:30::i;:::-;26608:13;26622:1;26608:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26588:3;;;;:::i;:::-;;;26547:122;;;;26688:13;26681:20;;;26185:524;;;;:::o;40233:122::-;40290:4;40346:1;40314:29;40340:2;40314:25;:29::i;:::-;:33;40307:40;;40233:122;;;:::o;2070:86::-;2117:4;2141:7;;;;;;;;;;;2134:14;;2070:86;:::o;42452:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41858:353::-;42034:12;:10;:12::i;:::-;42023:23;;:7;:23;;;:66;;;;42050:39;42067:7;42076:12;:10;:12::i;:::-;42050:16;:39::i;:::-;42023:66;42001:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;42171:32;42182:7;42191:3;42196:6;42171:10;:32::i;:::-;41858:353;;;:::o;4975:103::-;4555:12;:10;:12::i;:::-;4544:23;;:7;:5;:7::i;:::-;:23;;;4536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5040:30:::1;5067:1;5040:18;:30::i;:::-;4975:103::o:0;42903:169::-;4555:12;:10;:12::i;:::-;4544:23;;:7;:5;:7::i;:::-;:23;;;4536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43032:32:::1;43038:7;43047:2;43051:6;43059:4;43032:5;:32::i;:::-;42903:169:::0;;;;:::o;42761:61::-;4555:12;:10;:12::i;:::-;4544:23;;:7;:5;:7::i;:::-;:23;;;4536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42806:8:::1;:6;:8::i;:::-;42761:61::o:0;42629:124::-;4555:12;:10;:12::i;:::-;4544:23;;:7;:5;:7::i;:::-;:23;;;4536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42717:4:::1;42701:8;:13;42710:3;42701:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;42743:3;42733:14;42737:4;42733:14;;;;;;:::i;:::-;;;;;;;;42629:124:::0;;:::o;4324:87::-;4370:7;4397:6;;;;;;;;;;;4390:13;;4324:87;:::o;26782:155::-;26877:52;26896:12;:10;:12::i;:::-;26910:8;26920;26877:18;:52::i;:::-;26782:155;;:::o;40022:113::-;40084:7;40111:12;:16;40124:2;40111:16;;;;;;;;;;;;40104:23;;40022:113;;;:::o;42550:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43729:182::-;43803:8;:16;43812:6;43803:16;;;;;;;;;;;:25;;;;;;;;;;;;43789:39;;:10;:39;;;43781:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43867:32;43873:10;43885:6;43893:1;43867:32;;;;;;;;;;;;:5;:32::i;:::-;43729:182;:::o;27009:168::-;27108:4;27132:18;:27;27151:7;27132:27;;;;;;;;;;;;;;;:37;27160:8;27132:37;;;;;;;;;;;;;;;;;;;;;;;;;27125:44;;27009:168;;;;:::o;42497:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;27249:401::-;27465:12;:10;:12::i;:::-;27457:20;;:4;:20;;;:60;;;;27481:36;27498:4;27504:12;:10;:12::i;:::-;27481:16;:36::i;:::-;27457:60;27435:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;27597:45;27615:4;27621:2;27625;27629:6;27637:4;27597:17;:45::i;:::-;27249:401;;;;;:::o;5233:201::-;4555:12;:10;:12::i;:::-;4544:23;;:7;:5;:7::i;:::-;:23;;;4536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5342:1:::1;5322:22;;:8;:22;;;;5314:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5398:28;5417:8;5398:18;:28::i;:::-;5233:201:::0;:::o;41529:321::-;41680:12;:10;:12::i;:::-;41669:23;;:7;:23;;;:66;;;;41696:39;41713:7;41722:12;:10;:12::i;:::-;41696:16;:39::i;:::-;41669:66;41647:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;41817:25;41823:7;41832:2;41836:5;41817;:25::i;:::-;41529:321;;;:::o;16095:157::-;16180:4;16219:25;16204:40;;;:11;:40;;;;16197:47;;16095:157;;;:::o;718:98::-;771:7;798:10;791:17;;718:98;:::o;33128:735::-;33320:1;33306:16;;:2;:16;;;;33298:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33393:7;:14;33379:3;:10;:28;33371:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33465:16;33484:12;:10;:12::i;:::-;33465:31;;33509:66;33530:8;33548:1;33552:2;33556:3;33561:7;33570:4;33509:20;:66::i;:::-;33593:9;33588:103;33612:3;:10;33608:1;:14;33588:103;;;33669:7;33677:1;33669:10;;;;;;;;:::i;:::-;;;;;;;;33644:9;:17;33654:3;33658:1;33654:6;;;;;;;;:::i;:::-;;;;;;;;33644:17;;;;;;;;;;;:21;33662:2;33644:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;33624:3;;;;;:::i;:::-;;;;33588:103;;;;33744:2;33708:53;;33740:1;33708:53;;33722:8;33708:53;;;33748:3;33753:7;33708:53;;;;;;;:::i;:::-;;;;;;;;33774:81;33810:8;33828:1;33832:2;33836:3;33841:7;33850:4;33774:35;:81::i;:::-;33287:576;33128:735;;;;:::o;29811:1074::-;30038:7;:14;30024:3;:10;:28;30016:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30130:1;30116:16;;:2;:16;;;;30108:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30187:16;30206:12;:10;:12::i;:::-;30187:31;;30231:60;30252:8;30262:4;30268:2;30272:3;30277:7;30286:4;30231:20;:60::i;:::-;30309:9;30304:421;30328:3;:10;30324:1;:14;30304:421;;;30360:10;30373:3;30377:1;30373:6;;;;;;;;:::i;:::-;;;;;;;;30360:19;;30394:14;30411:7;30419:1;30411:10;;;;;;;;:::i;:::-;;;;;;;;30394:27;;30438:19;30460:9;:13;30470:2;30460:13;;;;;;;;;;;:19;30474:4;30460:19;;;;;;;;;;;;;;;;30438:41;;30517:6;30502:11;:21;;30494:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30650:6;30636:11;:20;30614:9;:13;30624:2;30614:13;;;;;;;;;;;:19;30628:4;30614:19;;;;;;;;;;;;;;;:42;;;;30707:6;30686:9;:13;30696:2;30686:13;;;;;;;;;;;:17;30700:2;30686:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30345:380;;;30340:3;;;;:::i;:::-;;;30304:421;;;;30772:2;30742:47;;30766:4;30742:47;;30756:8;30742:47;;;30776:3;30781:7;30742:47;;;;;;;:::i;:::-;;;;;;;;30802:75;30838:8;30848:4;30854:2;30858:3;30863:7;30872:4;30802:35;:75::i;:::-;30005:880;29811:1074;;;;;:::o;3129:120::-;2673:8;:6;:8::i;:::-;2665:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;3198:5:::1;3188:7;;:15;;;;;;;;;;;;;;;;;;3219:22;3228:12;:10;:12::i;:::-;3219:22;;;;;;:::i;:::-;;;;;;;;3129:120::o:0;34964:891::-;35132:1;35116:18;;:4;:18;;;;35108:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35207:7;:14;35193:3;:10;:28;35185:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35279:16;35298:12;:10;:12::i;:::-;35279:31;;35323:66;35344:8;35354:4;35368:1;35372:3;35377:7;35323:66;;;;;;;;;;;;:20;:66::i;:::-;35407:9;35402:373;35426:3;:10;35422:1;:14;35402:373;;;35458:10;35471:3;35475:1;35471:6;;;;;;;;:::i;:::-;;;;;;;;35458:19;;35492:14;35509:7;35517:1;35509:10;;;;;;;;:::i;:::-;;;;;;;;35492:27;;35536:19;35558:9;:13;35568:2;35558:13;;;;;;;;;;;:19;35572:4;35558:19;;;;;;;;;;;;;;;;35536:41;;35615:6;35600:11;:21;;35592:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35742:6;35728:11;:20;35706:9;:13;35716:2;35706:13;;;;;;;;;;;:19;35720:4;35706:19;;;;;;;;;;;;;;;:42;;;;35443:332;;;35438:3;;;;;:::i;:::-;;;;35402:373;;;;35830:1;35792:55;;35816:4;35792:55;;35806:8;35792:55;;;35834:3;35839:7;35792:55;;;;;;;:::i;:::-;;;;;;;;35097:758;34964:891;;;:::o;5594:191::-;5668:16;5687:6;;;;;;;;;;;5668:25;;5713:8;5704:6;;:17;;;;;;;;;;;;;;;;;;5768:8;5737:40;;5758:8;5737:40;;;;;;;;;;;;5657:128;5594:191;:::o;32203:569::-;32370:1;32356:16;;:2;:16;;;;32348:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32423:16;32442:12;:10;:12::i;:::-;32423:31;;32467:102;32488:8;32506:1;32510:2;32514:21;32532:2;32514:17;:21::i;:::-;32537:25;32555:6;32537:17;:25::i;:::-;32564:4;32467:20;:102::i;:::-;32603:6;32582:9;:13;32592:2;32582:13;;;;;;;;;;;:17;32596:2;32582:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32662:2;32625:52;;32658:1;32625:52;;32640:8;32625:52;;;32666:2;32670:6;32625:52;;;;;;;:::i;:::-;;;;;;;;32690:74;32721:8;32739:1;32743:2;32747;32751:6;32759:4;32690:30;:74::i;:::-;32337:435;32203:569;;;;:::o;2870:118::-;2396:8;:6;:8::i;:::-;2395:9;2387:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2940:4:::1;2930:7;;:14;;;;;;;;;;;;;;;;;;2960:20;2967:12;:10;:12::i;:::-;2960:20;;;;;;:::i;:::-;;;;;;;;2870:118::o:0;35997:331::-;36152:8;36143:17;;:5;:17;;;;36135:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36255:8;36217:18;:25;36236:5;36217:25;;;;;;;;;;;;;;;:35;36243:8;36217:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36301:8;36279:41;;36294:5;36279:41;;;36311:8;36279:41;;;;;;:::i;:::-;;;;;;;;35997:331;;;:::o;28633:820::-;28835:1;28821:16;;:2;:16;;;;28813:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28892:16;28911:12;:10;:12::i;:::-;28892:31;;28936:96;28957:8;28967:4;28973:2;28977:21;28995:2;28977:17;:21::i;:::-;29000:25;29018:6;29000:17;:25::i;:::-;29027:4;28936:20;:96::i;:::-;29045:19;29067:9;:13;29077:2;29067:13;;;;;;;;;;;:19;29081:4;29067:19;;;;;;;;;;;;;;;;29045:41;;29120:6;29105:11;:21;;29097:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29245:6;29231:11;:20;29209:9;:13;29219:2;29209:13;;;;;;;;;;;:19;29223:4;29209:19;;;;;;;;;;;;;;;:42;;;;29294:6;29273:9;:13;29283:2;29273:13;;;;;;;;;;;:17;29287:2;29273:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29349:2;29318:46;;29343:4;29318:46;;29333:8;29318:46;;;29353:2;29357:6;29318:46;;;;;;;:::i;:::-;;;;;;;;29377:68;29408:8;29418:4;29424:2;29428;29432:6;29440:4;29377:30;:68::i;:::-;28802:651;;28633:820;;;;;:::o;34113:648::-;34256:1;34240:18;;:4;:18;;;;34232:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34311:16;34330:12;:10;:12::i;:::-;34311:31;;34355:102;34376:8;34386:4;34400:1;34404:21;34422:2;34404:17;:21::i;:::-;34427:25;34445:6;34427:17;:25::i;:::-;34355:102;;;;;;;;;;;;:20;:102::i;:::-;34470:19;34492:9;:13;34502:2;34492:13;;;;;;;;;;;:19;34506:4;34492:19;;;;;;;;;;;;;;;;34470:41;;34545:6;34530:11;:21;;34522:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34664:6;34650:11;:20;34628:9;:13;34638:2;34628:13;;;;;;;;;;;:19;34642:4;34628:19;;;;;;;;;;;;;;;:42;;;;34738:1;34699:54;;34724:4;34699:54;;34714:8;34699:54;;;34742:2;34746:6;34699:54;;;;;;;:::i;:::-;;;;;;;;34221:540;;34113:648;;;:::o;43279:314::-;2396:8;:6;:8::i;:::-;2395:9;2387:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;43519:66:::1;43546:8;43556:4;43562:2;43566:3;43571:7;43580:4;43519:26;:66::i;:::-;43279:314:::0;;;;;;:::o;38265:813::-;38505:15;:2;:13;;;:15::i;:::-;38501:570;;;38558:2;38541:43;;;38585:8;38595:4;38601:3;38606:7;38615:4;38541:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38537:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38933:6;38926:14;;;;;;;;;;;:::i;:::-;;;;;;;;38537:523;;;38982:62;;;;;;;;;;:::i;:::-;;;;;;;;38537:523;38714:48;;;38702:60;;;:8;:60;;;;38698:159;;38787:50;;;;;;;;;;:::i;:::-;;;;;;;;38698:159;38621:251;38501:570;38265:813;;;;;;:::o;39086:198::-;39152:16;39181:22;39220:1;39206:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39181:41;;39244:7;39233:5;39239:1;39233:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39271:5;39264:12;;;39086:198;;;:::o;37513:744::-;37728:15;:2;:13;;;:15::i;:::-;37724:526;;;37781:2;37764:38;;;37803:8;37813:4;37819:2;37823:6;37831:4;37764:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37760:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38112:6;38105:14;;;;;;;;;;;:::i;:::-;;;;;;;;37760:479;;;38161:62;;;;;;;;;;:::i;:::-;;;;;;;;37760:479;37898:43;;;37886:55;;;:8;:55;;;;37882:154;;37966:50;;;;;;;;;;:::i;:::-;;;;;;;;37882:154;37837:214;37724:526;37513:744;;;;;;:::o;40430:655::-;40669:66;40696:8;40706:4;40712:2;40716:3;40721:7;40730:4;40669:26;:66::i;:::-;40768:1;40752:18;;:4;:18;;;40748:160;;;40792:9;40787:110;40811:3;:10;40807:1;:14;40787:110;;;40871:7;40879:1;40871:10;;;;;;;;:::i;:::-;;;;;;;;40847:12;:20;40860:3;40864:1;40860:6;;;;;;;;:::i;:::-;;;;;;;;40847:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;40823:3;;;;:::i;:::-;;;40787:110;;;;40748:160;40938:1;40924:16;;:2;:16;;;40920:158;;;40962:9;40957:110;40981:3;:10;40977:1;:14;40957:110;;;41041:7;41049:1;41041:10;;;;;;;;:::i;:::-;;;;;;;;41017:12;:20;41030:3;41034:1;41030:6;;;;;;;;:::i;:::-;;;;;;;;41017:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;40993:3;;;;:::i;:::-;;;40957:110;;;;40920:158;40430:655;;;;;;:::o;7031:326::-;7091:4;7348:1;7326:7;:19;;;:23;7319:30;;7031:326;;;:::o;37284:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:1039::-;8105:6;8113;8121;8170:2;8158:9;8149:7;8145:23;8141:32;8138:119;;;8176:79;;:::i;:::-;8138:119;8296:1;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8267:117;8451:2;8440:9;8436:18;8423:32;8482:18;8474:6;8471:30;8468:117;;;8504:79;;:::i;:::-;8468:117;8609:78;8679:7;8670:6;8659:9;8655:22;8609:78;:::i;:::-;8599:88;;8394:303;8764:2;8753:9;8749:18;8736:32;8795:18;8787:6;8784:30;8781:117;;;8817:79;;:::i;:::-;8781:117;8922:78;8992:7;8983:6;8972:9;8968:22;8922:78;:::i;:::-;8912:88;;8707:303;7978:1039;;;;;:::o;9023:1363::-;9168:6;9176;9184;9192;9241:3;9229:9;9220:7;9216:23;9212:33;9209:120;;;9248:79;;:::i;:::-;9209:120;9368:1;9393:53;9438:7;9429:6;9418:9;9414:22;9393:53;:::i;:::-;9383:63;;9339:117;9523:2;9512:9;9508:18;9495:32;9554:18;9546:6;9543:30;9540:117;;;9576:79;;:::i;:::-;9540:117;9681:78;9751:7;9742:6;9731:9;9727:22;9681:78;:::i;:::-;9671:88;;9466:303;9836:2;9825:9;9821:18;9808:32;9867:18;9859:6;9856:30;9853:117;;;9889:79;;:::i;:::-;9853:117;9994:78;10064:7;10055:6;10044:9;10040:22;9994:78;:::i;:::-;9984:88;;9779:303;10149:2;10138:9;10134:18;10121:32;10180:18;10172:6;10169:30;10166:117;;;10202:79;;:::i;:::-;10166:117;10307:62;10361:7;10352:6;10341:9;10337:22;10307:62;:::i;:::-;10297:72;;10092:287;9023:1363;;;;;;;:::o;10392:468::-;10457:6;10465;10514:2;10502:9;10493:7;10489:23;10485:32;10482:119;;;10520:79;;:::i;:::-;10482:119;10640:1;10665:53;10710:7;10701:6;10690:9;10686:22;10665:53;:::i;:::-;10655:63;;10611:117;10767:2;10793:50;10835:7;10826:6;10815:9;10811:22;10793:50;:::i;:::-;10783:60;;10738:115;10392:468;;;;;:::o;10866:474::-;10934:6;10942;10991:2;10979:9;10970:7;10966:23;10962:32;10959:119;;;10997:79;;:::i;:::-;10959:119;11117:1;11142:53;11187:7;11178:6;11167:9;11163:22;11142:53;:::i;:::-;11132:63;;11088:117;11244:2;11270:53;11315:7;11306:6;11295:9;11291:22;11270:53;:::i;:::-;11260:63;;11215:118;10866:474;;;;;:::o;11346:619::-;11423:6;11431;11439;11488:2;11476:9;11467:7;11463:23;11459:32;11456:119;;;11494:79;;:::i;:::-;11456:119;11614:1;11639:53;11684:7;11675:6;11664:9;11660:22;11639:53;:::i;:::-;11629:63;;11585:117;11741:2;11767:53;11812:7;11803:6;11792:9;11788:22;11767:53;:::i;:::-;11757:63;;11712:118;11869:2;11895:53;11940:7;11931:6;11920:9;11916:22;11895:53;:::i;:::-;11885:63;;11840:118;11346:619;;;;;:::o;11971:943::-;12066:6;12074;12082;12090;12139:3;12127:9;12118:7;12114:23;12110:33;12107:120;;;12146:79;;:::i;:::-;12107:120;12266:1;12291:53;12336:7;12327:6;12316:9;12312:22;12291:53;:::i;:::-;12281:63;;12237:117;12393:2;12419:53;12464:7;12455:6;12444:9;12440:22;12419:53;:::i;:::-;12409:63;;12364:118;12521:2;12547:53;12592:7;12583:6;12572:9;12568:22;12547:53;:::i;:::-;12537:63;;12492:118;12677:2;12666:9;12662:18;12649:32;12708:18;12700:6;12697:30;12694:117;;;12730:79;;:::i;:::-;12694:117;12835:62;12889:7;12880:6;12869:9;12865:22;12835:62;:::i;:::-;12825:72;;12620:287;11971:943;;;;;;;:::o;12920:894::-;13038:6;13046;13095:2;13083:9;13074:7;13070:23;13066:32;13063:119;;;13101:79;;:::i;:::-;13063:119;13249:1;13238:9;13234:17;13221:31;13279:18;13271:6;13268:30;13265:117;;;13301:79;;:::i;:::-;13265:117;13406:78;13476:7;13467:6;13456:9;13452:22;13406:78;:::i;:::-;13396:88;;13192:302;13561:2;13550:9;13546:18;13533:32;13592:18;13584:6;13581:30;13578:117;;;13614:79;;:::i;:::-;13578:117;13719:78;13789:7;13780:6;13769:9;13765:22;13719:78;:::i;:::-;13709:88;;13504:303;12920:894;;;;;:::o;13820:327::-;13878:6;13927:2;13915:9;13906:7;13902:23;13898:32;13895:119;;;13933:79;;:::i;:::-;13895:119;14053:1;14078:52;14122:7;14113:6;14102:9;14098:22;14078:52;:::i;:::-;14068:62;;14024:116;13820:327;;;;:::o;14153:349::-;14222:6;14271:2;14259:9;14250:7;14246:23;14242:32;14239:119;;;14277:79;;:::i;:::-;14239:119;14397:1;14422:63;14477:7;14468:6;14457:9;14453:22;14422:63;:::i;:::-;14412:73;;14368:127;14153:349;;;;:::o;14508:329::-;14567:6;14616:2;14604:9;14595:7;14591:23;14587:32;14584:119;;;14622:79;;:::i;:::-;14584:119;14742:1;14767:53;14812:7;14803:6;14792:9;14788:22;14767:53;:::i;:::-;14757:63;;14713:117;14508:329;;;;:::o;14843:474::-;14911:6;14919;14968:2;14956:9;14947:7;14943:23;14939:32;14936:119;;;14974:79;;:::i;:::-;14936:119;15094:1;15119:53;15164:7;15155:6;15144:9;15140:22;15119:53;:::i;:::-;15109:63;;15065:117;15221:2;15247:53;15292:7;15283:6;15272:9;15268:22;15247:53;:::i;:::-;15237:63;;15192:118;14843:474;;;;;:::o;15323:654::-;15401:6;15409;15458:2;15446:9;15437:7;15433:23;15429:32;15426:119;;;15464:79;;:::i;:::-;15426:119;15584:1;15609:53;15654:7;15645:6;15634:9;15630:22;15609:53;:::i;:::-;15599:63;;15555:117;15739:2;15728:9;15724:18;15711:32;15770:18;15762:6;15759:30;15756:117;;;15792:79;;:::i;:::-;15756:117;15897:63;15952:7;15943:6;15932:9;15928:22;15897:63;:::i;:::-;15887:73;;15682:288;15323:654;;;;;:::o;15983:179::-;16052:10;16073:46;16115:3;16107:6;16073:46;:::i;:::-;16151:4;16146:3;16142:14;16128:28;;15983:179;;;;:::o;16168:118::-;16255:24;16273:5;16255:24;:::i;:::-;16250:3;16243:37;16168:118;;:::o;16322:732::-;16441:3;16470:54;16518:5;16470:54;:::i;:::-;16540:86;16619:6;16614:3;16540:86;:::i;:::-;16533:93;;16650:56;16700:5;16650:56;:::i;:::-;16729:7;16760:1;16745:284;16770:6;16767:1;16764:13;16745:284;;;16846:6;16840:13;16873:63;16932:3;16917:13;16873:63;:::i;:::-;16866:70;;16959:60;17012:6;16959:60;:::i;:::-;16949:70;;16805:224;16792:1;16789;16785:9;16780:14;;16745:284;;;16749:14;17045:3;17038:10;;16446:608;;;16322:732;;;;:::o;17060:109::-;17141:21;17156:5;17141:21;:::i;:::-;17136:3;17129:34;17060:109;;:::o;17175:360::-;17261:3;17289:38;17321:5;17289:38;:::i;:::-;17343:70;17406:6;17401:3;17343:70;:::i;:::-;17336:77;;17422:52;17467:6;17462:3;17455:4;17448:5;17444:16;17422:52;:::i;:::-;17499:29;17521:6;17499:29;:::i;:::-;17494:3;17490:39;17483:46;;17265:270;17175:360;;;;:::o;17541:364::-;17629:3;17657:39;17690:5;17657:39;:::i;:::-;17712:71;17776:6;17771:3;17712:71;:::i;:::-;17705:78;;17792:52;17837:6;17832:3;17825:4;17818:5;17814:16;17792:52;:::i;:::-;17869:29;17891:6;17869:29;:::i;:::-;17864:3;17860:39;17853:46;;17633:272;17541:364;;;;:::o;17911:366::-;18053:3;18074:67;18138:2;18133:3;18074:67;:::i;:::-;18067:74;;18150:93;18239:3;18150:93;:::i;:::-;18268:2;18263:3;18259:12;18252:19;;17911:366;;;:::o;18283:::-;18425:3;18446:67;18510:2;18505:3;18446:67;:::i;:::-;18439:74;;18522:93;18611:3;18522:93;:::i;:::-;18640:2;18635:3;18631:12;18624:19;;18283:366;;;:::o;18655:::-;18797:3;18818:67;18882:2;18877:3;18818:67;:::i;:::-;18811:74;;18894:93;18983:3;18894:93;:::i;:::-;19012:2;19007:3;19003:12;18996:19;;18655:366;;;:::o;19027:::-;19169:3;19190:67;19254:2;19249:3;19190:67;:::i;:::-;19183:74;;19266:93;19355:3;19266:93;:::i;:::-;19384:2;19379:3;19375:12;19368:19;;19027:366;;;:::o;19399:::-;19541:3;19562:67;19626:2;19621:3;19562:67;:::i;:::-;19555:74;;19638:93;19727:3;19638:93;:::i;:::-;19756:2;19751:3;19747:12;19740:19;;19399:366;;;:::o;19771:::-;19913:3;19934:67;19998:2;19993:3;19934:67;:::i;:::-;19927:74;;20010:93;20099:3;20010:93;:::i;:::-;20128:2;20123:3;20119:12;20112:19;;19771:366;;;:::o;20143:::-;20285:3;20306:67;20370:2;20365:3;20306:67;:::i;:::-;20299:74;;20382:93;20471:3;20382:93;:::i;:::-;20500:2;20495:3;20491:12;20484:19;;20143:366;;;:::o;20515:::-;20657:3;20678:67;20742:2;20737:3;20678:67;:::i;:::-;20671:74;;20754:93;20843:3;20754:93;:::i;:::-;20872:2;20867:3;20863:12;20856:19;;20515:366;;;:::o;20887:::-;21029:3;21050:67;21114:2;21109:3;21050:67;:::i;:::-;21043:74;;21126:93;21215:3;21126:93;:::i;:::-;21244:2;21239:3;21235:12;21228:19;;20887:366;;;:::o;21259:::-;21401:3;21422:67;21486:2;21481:3;21422:67;:::i;:::-;21415:74;;21498:93;21587:3;21498:93;:::i;:::-;21616:2;21611:3;21607:12;21600:19;;21259:366;;;:::o;21631:::-;21773:3;21794:67;21858:2;21853:3;21794:67;:::i;:::-;21787:74;;21870:93;21959:3;21870:93;:::i;:::-;21988:2;21983:3;21979:12;21972:19;;21631:366;;;:::o;22003:::-;22145:3;22166:67;22230:2;22225:3;22166:67;:::i;:::-;22159:74;;22242:93;22331:3;22242:93;:::i;:::-;22360:2;22355:3;22351:12;22344:19;;22003:366;;;:::o;22375:::-;22517:3;22538:67;22602:2;22597:3;22538:67;:::i;:::-;22531:74;;22614:93;22703:3;22614:93;:::i;:::-;22732:2;22727:3;22723:12;22716:19;;22375:366;;;:::o;22747:::-;22889:3;22910:67;22974:2;22969:3;22910:67;:::i;:::-;22903:74;;22986:93;23075:3;22986:93;:::i;:::-;23104:2;23099:3;23095:12;23088:19;;22747:366;;;:::o;23119:::-;23261:3;23282:67;23346:2;23341:3;23282:67;:::i;:::-;23275:74;;23358:93;23447:3;23358:93;:::i;:::-;23476:2;23471:3;23467:12;23460:19;;23119:366;;;:::o;23491:::-;23633:3;23654:67;23718:2;23713:3;23654:67;:::i;:::-;23647:74;;23730:93;23819:3;23730:93;:::i;:::-;23848:2;23843:3;23839:12;23832:19;;23491:366;;;:::o;23863:::-;24005:3;24026:67;24090:2;24085:3;24026:67;:::i;:::-;24019:74;;24102:93;24191:3;24102:93;:::i;:::-;24220:2;24215:3;24211:12;24204:19;;23863:366;;;:::o;24235:::-;24377:3;24398:67;24462:2;24457:3;24398:67;:::i;:::-;24391:74;;24474:93;24563:3;24474:93;:::i;:::-;24592:2;24587:3;24583:12;24576:19;;24235:366;;;:::o;24607:108::-;24684:24;24702:5;24684:24;:::i;:::-;24679:3;24672:37;24607:108;;:::o;24721:118::-;24808:24;24826:5;24808:24;:::i;:::-;24803:3;24796:37;24721:118;;:::o;24845:222::-;24938:4;24976:2;24965:9;24961:18;24953:26;;24989:71;25057:1;25046:9;25042:17;25033:6;24989:71;:::i;:::-;24845:222;;;;:::o;25073:1053::-;25396:4;25434:3;25423:9;25419:19;25411:27;;25448:71;25516:1;25505:9;25501:17;25492:6;25448:71;:::i;:::-;25529:72;25597:2;25586:9;25582:18;25573:6;25529:72;:::i;:::-;25648:9;25642:4;25638:20;25633:2;25622:9;25618:18;25611:48;25676:108;25779:4;25770:6;25676:108;:::i;:::-;25668:116;;25831:9;25825:4;25821:20;25816:2;25805:9;25801:18;25794:48;25859:108;25962:4;25953:6;25859:108;:::i;:::-;25851:116;;26015:9;26009:4;26005:20;25999:3;25988:9;25984:19;25977:49;26043:76;26114:4;26105:6;26043:76;:::i;:::-;26035:84;;25073:1053;;;;;;;;:::o;26132:751::-;26355:4;26393:3;26382:9;26378:19;26370:27;;26407:71;26475:1;26464:9;26460:17;26451:6;26407:71;:::i;:::-;26488:72;26556:2;26545:9;26541:18;26532:6;26488:72;:::i;:::-;26570;26638:2;26627:9;26623:18;26614:6;26570:72;:::i;:::-;26652;26720:2;26709:9;26705:18;26696:6;26652:72;:::i;:::-;26772:9;26766:4;26762:20;26756:3;26745:9;26741:19;26734:49;26800:76;26871:4;26862:6;26800:76;:::i;:::-;26792:84;;26132:751;;;;;;;;:::o;26889:332::-;27010:4;27048:2;27037:9;27033:18;27025:26;;27061:71;27129:1;27118:9;27114:17;27105:6;27061:71;:::i;:::-;27142:72;27210:2;27199:9;27195:18;27186:6;27142:72;:::i;:::-;26889:332;;;;;:::o;27227:373::-;27370:4;27408:2;27397:9;27393:18;27385:26;;27457:9;27451:4;27447:20;27443:1;27432:9;27428:17;27421:47;27485:108;27588:4;27579:6;27485:108;:::i;:::-;27477:116;;27227:373;;;;:::o;27606:634::-;27827:4;27865:2;27854:9;27850:18;27842:26;;27914:9;27908:4;27904:20;27900:1;27889:9;27885:17;27878:47;27942:108;28045:4;28036:6;27942:108;:::i;:::-;27934:116;;28097:9;28091:4;28087:20;28082:2;28071:9;28067:18;28060:48;28125:108;28228:4;28219:6;28125:108;:::i;:::-;28117:116;;27606:634;;;;;:::o;28246:210::-;28333:4;28371:2;28360:9;28356:18;28348:26;;28384:65;28446:1;28435:9;28431:17;28422:6;28384:65;:::i;:::-;28246:210;;;;:::o;28462:313::-;28575:4;28613:2;28602:9;28598:18;28590:26;;28662:9;28656:4;28652:20;28648:1;28637:9;28633:17;28626:47;28690:78;28763:4;28754:6;28690:78;:::i;:::-;28682:86;;28462:313;;;;:::o;28781:419::-;28947:4;28985:2;28974:9;28970:18;28962:26;;29034:9;29028:4;29024:20;29020:1;29009:9;29005:17;28998:47;29062:131;29188:4;29062:131;:::i;:::-;29054:139;;28781:419;;;:::o;29206:::-;29372:4;29410:2;29399:9;29395:18;29387:26;;29459:9;29453:4;29449:20;29445:1;29434:9;29430:17;29423:47;29487:131;29613:4;29487:131;:::i;:::-;29479:139;;29206:419;;;:::o;29631:::-;29797:4;29835:2;29824:9;29820:18;29812:26;;29884:9;29878:4;29874:20;29870:1;29859:9;29855:17;29848:47;29912:131;30038:4;29912:131;:::i;:::-;29904:139;;29631:419;;;:::o;30056:::-;30222:4;30260:2;30249:9;30245:18;30237:26;;30309:9;30303:4;30299:20;30295:1;30284:9;30280:17;30273:47;30337:131;30463:4;30337:131;:::i;:::-;30329:139;;30056:419;;;:::o;30481:::-;30647:4;30685:2;30674:9;30670:18;30662:26;;30734:9;30728:4;30724:20;30720:1;30709:9;30705:17;30698:47;30762:131;30888:4;30762:131;:::i;:::-;30754:139;;30481:419;;;:::o;30906:::-;31072:4;31110:2;31099:9;31095:18;31087:26;;31159:9;31153:4;31149:20;31145:1;31134:9;31130:17;31123:47;31187:131;31313:4;31187:131;:::i;:::-;31179:139;;30906:419;;;:::o;31331:::-;31497:4;31535:2;31524:9;31520:18;31512:26;;31584:9;31578:4;31574:20;31570:1;31559:9;31555:17;31548:47;31612:131;31738:4;31612:131;:::i;:::-;31604:139;;31331:419;;;:::o;31756:::-;31922:4;31960:2;31949:9;31945:18;31937:26;;32009:9;32003:4;31999:20;31995:1;31984:9;31980:17;31973:47;32037:131;32163:4;32037:131;:::i;:::-;32029:139;;31756:419;;;:::o;32181:::-;32347:4;32385:2;32374:9;32370:18;32362:26;;32434:9;32428:4;32424:20;32420:1;32409:9;32405:17;32398:47;32462:131;32588:4;32462:131;:::i;:::-;32454:139;;32181:419;;;:::o;32606:::-;32772:4;32810:2;32799:9;32795:18;32787:26;;32859:9;32853:4;32849:20;32845:1;32834:9;32830:17;32823:47;32887:131;33013:4;32887:131;:::i;:::-;32879:139;;32606:419;;;:::o;33031:::-;33197:4;33235:2;33224:9;33220:18;33212:26;;33284:9;33278:4;33274:20;33270:1;33259:9;33255:17;33248:47;33312:131;33438:4;33312:131;:::i;:::-;33304:139;;33031:419;;;:::o;33456:::-;33622:4;33660:2;33649:9;33645:18;33637:26;;33709:9;33703:4;33699:20;33695:1;33684:9;33680:17;33673:47;33737:131;33863:4;33737:131;:::i;:::-;33729:139;;33456:419;;;:::o;33881:::-;34047:4;34085:2;34074:9;34070:18;34062:26;;34134:9;34128:4;34124:20;34120:1;34109:9;34105:17;34098:47;34162:131;34288:4;34162:131;:::i;:::-;34154:139;;33881:419;;;:::o;34306:::-;34472:4;34510:2;34499:9;34495:18;34487:26;;34559:9;34553:4;34549:20;34545:1;34534:9;34530:17;34523:47;34587:131;34713:4;34587:131;:::i;:::-;34579:139;;34306:419;;;:::o;34731:::-;34897:4;34935:2;34924:9;34920:18;34912:26;;34984:9;34978:4;34974:20;34970:1;34959:9;34955:17;34948:47;35012:131;35138:4;35012:131;:::i;:::-;35004:139;;34731:419;;;:::o;35156:::-;35322:4;35360:2;35349:9;35345:18;35337:26;;35409:9;35403:4;35399:20;35395:1;35384:9;35380:17;35373:47;35437:131;35563:4;35437:131;:::i;:::-;35429:139;;35156:419;;;:::o;35581:::-;35747:4;35785:2;35774:9;35770:18;35762:26;;35834:9;35828:4;35824:20;35820:1;35809:9;35805:17;35798:47;35862:131;35988:4;35862:131;:::i;:::-;35854:139;;35581:419;;;:::o;36006:::-;36172:4;36210:2;36199:9;36195:18;36187:26;;36259:9;36253:4;36249:20;36245:1;36234:9;36230:17;36223:47;36287:131;36413:4;36287:131;:::i;:::-;36279:139;;36006:419;;;:::o;36431:222::-;36524:4;36562:2;36551:9;36547:18;36539:26;;36575:71;36643:1;36632:9;36628:17;36619:6;36575:71;:::i;:::-;36431:222;;;;:::o;36659:332::-;36780:4;36818:2;36807:9;36803:18;36795:26;;36831:71;36899:1;36888:9;36884:17;36875:6;36831:71;:::i;:::-;36912:72;36980:2;36969:9;36965:18;36956:6;36912:72;:::i;:::-;36659:332;;;;;:::o;36997:129::-;37031:6;37058:20;;:::i;:::-;37048:30;;37087:33;37115:4;37107:6;37087:33;:::i;:::-;36997:129;;;:::o;37132:75::-;37165:6;37198:2;37192:9;37182:19;;37132:75;:::o;37213:311::-;37290:4;37380:18;37372:6;37369:30;37366:56;;;37402:18;;:::i;:::-;37366:56;37452:4;37444:6;37440:17;37432:25;;37512:4;37506;37502:15;37494:23;;37213:311;;;:::o;37530:::-;37607:4;37697:18;37689:6;37686:30;37683:56;;;37719:18;;:::i;:::-;37683:56;37769:4;37761:6;37757:17;37749:25;;37829:4;37823;37819:15;37811:23;;37530:311;;;:::o;37847:307::-;37908:4;37998:18;37990:6;37987:30;37984:56;;;38020:18;;:::i;:::-;37984:56;38058:29;38080:6;38058:29;:::i;:::-;38050:37;;38142:4;38136;38132:15;38124:23;;37847:307;;;:::o;38160:308::-;38222:4;38312:18;38304:6;38301:30;38298:56;;;38334:18;;:::i;:::-;38298:56;38372:29;38394:6;38372:29;:::i;:::-;38364:37;;38456:4;38450;38446:15;38438:23;;38160:308;;;:::o;38474:132::-;38541:4;38564:3;38556:11;;38594:4;38589:3;38585:14;38577:22;;38474:132;;;:::o;38612:114::-;38679:6;38713:5;38707:12;38697:22;;38612:114;;;:::o;38732:98::-;38783:6;38817:5;38811:12;38801:22;;38732:98;;;:::o;38836:99::-;38888:6;38922:5;38916:12;38906:22;;38836:99;;;:::o;38941:113::-;39011:4;39043;39038:3;39034:14;39026:22;;38941:113;;;:::o;39060:184::-;39159:11;39193:6;39188:3;39181:19;39233:4;39228:3;39224:14;39209:29;;39060:184;;;;:::o;39250:168::-;39333:11;39367:6;39362:3;39355:19;39407:4;39402:3;39398:14;39383:29;;39250:168;;;;:::o;39424:169::-;39508:11;39542:6;39537:3;39530:19;39582:4;39577:3;39573:14;39558:29;;39424:169;;;;:::o;39599:305::-;39639:3;39658:20;39676:1;39658:20;:::i;:::-;39653:25;;39692:20;39710:1;39692:20;:::i;:::-;39687:25;;39846:1;39778:66;39774:74;39771:1;39768:81;39765:107;;;39852:18;;:::i;:::-;39765:107;39896:1;39893;39889:9;39882:16;;39599:305;;;;:::o;39910:191::-;39950:4;39970:20;39988:1;39970:20;:::i;:::-;39965:25;;40004:20;40022:1;40004:20;:::i;:::-;39999:25;;40043:1;40040;40037:8;40034:34;;;40048:18;;:::i;:::-;40034:34;40093:1;40090;40086:9;40078:17;;39910:191;;;;:::o;40107:96::-;40144:7;40173:24;40191:5;40173:24;:::i;:::-;40162:35;;40107:96;;;:::o;40209:90::-;40243:7;40286:5;40279:13;40272:21;40261:32;;40209:90;;;:::o;40305:149::-;40341:7;40381:66;40374:5;40370:78;40359:89;;40305:149;;;:::o;40460:126::-;40497:7;40537:42;40530:5;40526:54;40515:65;;40460:126;;;:::o;40592:77::-;40629:7;40658:5;40647:16;;40592:77;;;:::o;40675:154::-;40759:6;40754:3;40749;40736:30;40821:1;40812:6;40807:3;40803:16;40796:27;40675:154;;;:::o;40835:307::-;40903:1;40913:113;40927:6;40924:1;40921:13;40913:113;;;41012:1;41007:3;41003:11;40997:18;40993:1;40988:3;40984:11;40977:39;40949:2;40946:1;40942:10;40937:15;;40913:113;;;41044:6;41041:1;41038:13;41035:101;;;41124:1;41115:6;41110:3;41106:16;41099:27;41035:101;40884:258;40835:307;;;:::o;41148:320::-;41192:6;41229:1;41223:4;41219:12;41209:22;;41276:1;41270:4;41266:12;41297:18;41287:81;;41353:4;41345:6;41341:17;41331:27;;41287:81;41415:2;41407:6;41404:14;41384:18;41381:38;41378:84;;;41434:18;;:::i;:::-;41378:84;41199:269;41148:320;;;:::o;41474:281::-;41557:27;41579:4;41557:27;:::i;:::-;41549:6;41545:40;41687:6;41675:10;41672:22;41651:18;41639:10;41636:34;41633:62;41630:88;;;41698:18;;:::i;:::-;41630:88;41738:10;41734:2;41727:22;41517:238;41474:281;;:::o;41761:233::-;41800:3;41823:24;41841:5;41823:24;:::i;:::-;41814:33;;41869:66;41862:5;41859:77;41856:103;;;41939:18;;:::i;:::-;41856:103;41986:1;41979:5;41975:13;41968:20;;41761:233;;;:::o;42000:180::-;42048:77;42045:1;42038:88;42145:4;42142:1;42135:15;42169:4;42166:1;42159:15;42186:180;42234:77;42231:1;42224:88;42331:4;42328:1;42321:15;42355:4;42352:1;42345:15;42372:180;42420:77;42417:1;42410:88;42517:4;42514:1;42507:15;42541:4;42538:1;42531:15;42558:180;42606:77;42603:1;42596:88;42703:4;42700:1;42693:15;42727:4;42724:1;42717:15;42744:183;42779:3;42817:1;42799:16;42796:23;42793:128;;;42855:1;42852;42849;42834:23;42877:34;42908:1;42902:8;42877:34;:::i;:::-;42870:41;;42793:128;42744:183;:::o;42933:117::-;43042:1;43039;43032:12;43056:117;43165:1;43162;43155:12;43179:117;43288:1;43285;43278:12;43302:117;43411:1;43408;43401:12;43425:117;43534:1;43531;43524:12;43548:102;43589:6;43640:2;43636:7;43631:2;43624:5;43620:14;43616:28;43606:38;;43548:102;;;:::o;43656:106::-;43700:8;43749:5;43744:3;43740:15;43719:36;;43656:106;;;:::o;43768:239::-;43908:34;43904:1;43896:6;43892:14;43885:58;43977:22;43972:2;43964:6;43960:15;43953:47;43768:239;:::o;44013:227::-;44153:34;44149:1;44141:6;44137:14;44130:58;44222:10;44217:2;44209:6;44205:15;44198:35;44013:227;:::o;44246:170::-;44386:22;44382:1;44374:6;44370:14;44363:46;44246:170;:::o;44422:230::-;44562:34;44558:1;44550:6;44546:14;44539:58;44631:13;44626:2;44618:6;44614:15;44607:38;44422:230;:::o;44658:225::-;44798:34;44794:1;44786:6;44782:14;44775:58;44867:8;44862:2;44854:6;44850:15;44843:33;44658:225;:::o;44889:223::-;45029:34;45025:1;45017:6;45013:14;45006:58;45098:6;45093:2;45085:6;45081:15;45074:31;44889:223;:::o;45118:228::-;45258:34;45254:1;45246:6;45242:14;45235:58;45327:11;45322:2;45314:6;45310:15;45303:36;45118:228;:::o;45352:166::-;45492:18;45488:1;45480:6;45476:14;45469:42;45352:166;:::o;45524:224::-;45664:34;45660:1;45652:6;45648:14;45641:58;45733:7;45728:2;45720:6;45716:15;45709:32;45524:224;:::o;45754:237::-;45894:34;45890:1;45882:6;45878:14;45871:58;45963:20;45958:2;45950:6;45946:15;45939:45;45754:237;:::o;45997:222::-;46137:34;46133:1;46125:6;46121:14;46114:58;46206:5;46201:2;46193:6;46189:15;46182:30;45997:222;:::o;46225:229::-;46365:34;46361:1;46353:6;46349:14;46342:58;46434:12;46429:2;46421:6;46417:15;46410:37;46225:229;:::o;46460:182::-;46600:34;46596:1;46588:6;46584:14;46577:58;46460:182;:::o;46648:171::-;46788:23;46784:1;46776:6;46772:14;46765:47;46648:171;:::o;46825:228::-;46965:34;46961:1;46953:6;46949:14;46942:58;47034:11;47029:2;47021:6;47017:15;47010:36;46825:228;:::o;47059:::-;47199:34;47195:1;47187:6;47183:14;47176:58;47268:11;47263:2;47255:6;47251:15;47244:36;47059:228;:::o;47293:227::-;47433:34;47429:1;47421:6;47417:14;47410:58;47502:10;47497:2;47489:6;47485:15;47478:35;47293:227;:::o;47526:220::-;47666:34;47662:1;47654:6;47650:14;47643:58;47735:3;47730:2;47722:6;47718:15;47711:28;47526:220;:::o;47752:711::-;47791:3;47829:4;47811:16;47808:26;47805:39;;;47837:5;;47805:39;47866:20;;:::i;:::-;47941:1;47923:16;47919:24;47916:1;47910:4;47895:49;47974:4;47968:11;48073:16;48066:4;48058:6;48054:17;48051:39;48018:18;48010:6;48007:30;47991:113;47988:146;;;48119:5;;;;47988:146;48165:6;48159:4;48155:17;48201:3;48195:10;48228:18;48220:6;48217:30;48214:43;;;48250:5;;;;;;48214:43;48298:6;48291:4;48286:3;48282:14;48278:27;48357:1;48339:16;48335:24;48329:4;48325:35;48320:3;48317:44;48314:57;;;48364:5;;;;;;;48314:57;48381;48429:6;48423:4;48419:17;48411:6;48407:30;48401:4;48381:57;:::i;:::-;48454:3;48447:10;;47795:668;;;;;47752:711;;:::o;48469:122::-;48542:24;48560:5;48542:24;:::i;:::-;48535:5;48532:35;48522:63;;48581:1;48578;48571:12;48522:63;48469:122;:::o;48597:116::-;48667:21;48682:5;48667:21;:::i;:::-;48660:5;48657:32;48647:60;;48703:1;48700;48693:12;48647:60;48597:116;:::o;48719:120::-;48791:23;48808:5;48791:23;:::i;:::-;48784:5;48781:34;48771:62;;48829:1;48826;48819:12;48771:62;48719:120;:::o;48845:122::-;48918:24;48936:5;48918:24;:::i;:::-;48911:5;48908:35;48898:63;;48957:1;48954;48947:12;48898:63;48845:122;:::o
Swarm Source
ipfs://72e80dfb80f86220945136412722b85c4aa069d9eff30d81ec07725ee189e731