@kontur.candy/tools 2.210.1-cgroupv2.0 → 2.210.1-cgroupv2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/distr/Common/AsyncUtils.js +18 -0
- package/distr/Common/AsyncUtils.js.map +1 -0
- package/distr/Common/AutoValidationUtils.js +8 -0
- package/distr/Common/AutoValidationUtils.js.map +1 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js +578 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/CandyApiClientContext.js +18 -0
- package/distr/Common/CandyApiClient/CandyApiClientContext.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +6 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +6 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +12 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +6 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +33 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +35 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +20 -0
- package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +89 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +42 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +9 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +6 -0
- package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +18 -0
- package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +15 -0
- package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +19 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +6 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +248 -0
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/ICandyApiClient.js +6 -0
- package/distr/Common/CandyApiClient/ICandyApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/IsBuffer.js +15 -0
- package/distr/Common/CandyApiClient/IsBuffer.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +6 -0
- package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +6 -0
- package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +24 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +6 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +6 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +9 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftFullId.js +6 -0
- package/distr/Common/CandyApiClient/Types/DraftFullId.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js +12 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ResolveInnerPathRequest.js +6 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ResolveInnerPathRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ResolvePathResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ResolvePathResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +17 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +13 -0
- package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +15 -0
- package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +9 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Guid.js +6 -0
- package/distr/Common/CandyApiClient/Types/Guid.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js +6 -0
- package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +6 -0
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js +6 -0
- package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +24 -0
- package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +6 -0
- package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js +12 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/AndExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/AndExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CompareExpression.js +19 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CompareExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CountCallExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CountCallExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/DecimalConstantExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/DecimalConstantExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/InstanceIdCallExpression.js +13 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/InstanceIdCallExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/NotExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/NotExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/OrExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/OrExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringConstantExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringConstantExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringMatchExpression.js +21 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringMatchExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/SumCallExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/SumCallExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/TernaryExpression.js +19 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/TernaryExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/ValueReferenceExpression.js +15 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/ValueReferenceExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryExpression.js +6 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryRequest.js +26 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SelectClause.js +16 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SelectClause.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SortingRule.js +16 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SortingRule.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js +6 -0
- package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +6 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js +6 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js +6 -0
- package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +14 -0
- package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js.map +1 -0
- package/distr/Common/CollectionUtils.js +15 -0
- package/distr/Common/CollectionUtils.js.map +1 -0
- package/distr/Common/CommonConstants/SectionNames.js +11 -0
- package/distr/Common/CommonConstants/SectionNames.js.map +1 -0
- package/distr/Common/Comparers.js +63 -0
- package/distr/Common/Comparers.js.map +1 -0
- package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +22 -0
- package/distr/Common/EmotionStorybookWorkaroundViaAliases.js.map +1 -0
- package/distr/Common/EndPoints.js +16 -0
- package/distr/Common/EndPoints.js.map +1 -0
- package/distr/Common/Enums/ButtonSettingsTypeEnum.js +12 -0
- package/distr/Common/Enums/ButtonSettingsTypeEnum.js.map +1 -0
- package/distr/Common/Errors.js +44 -0
- package/distr/Common/Errors.js.map +1 -0
- package/distr/Common/ExtractGFVPath/ExtractGFVPath.js +31 -0
- package/distr/Common/ExtractGFVPath/ExtractGFVPath.js.map +1 -0
- package/distr/Common/FSPrinterClient/FSPrinterClient.js +153 -0
- package/distr/Common/FSPrinterClient/FSPrinterClient.js.map +1 -0
- package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js +19 -0
- package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js.map +1 -0
- package/distr/Common/FSPrinterClient/IFSPrinterClient.js +39 -0
- package/distr/Common/FSPrinterClient/IFSPrinterClient.js.map +1 -0
- package/distr/Common/FormActionHandlers/ContextualActionNames.js +14 -0
- package/distr/Common/FormActionHandlers/ContextualActionNames.js.map +1 -0
- package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +6 -0
- package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js.map +1 -0
- package/distr/Common/FormPathUtils.js +21 -0
- package/distr/Common/FormPathUtils.js.map +1 -0
- package/distr/Common/Funcs.js +11 -0
- package/distr/Common/Funcs.js.map +1 -0
- package/distr/Common/GFV.js +6 -0
- package/distr/Common/GFV.js.map +1 -0
- package/distr/Common/GetRngSchemaFileExtension.js +26 -0
- package/distr/Common/GetRngSchemaFileExtension.js.map +1 -0
- package/distr/Common/Hooks/UseLocalStorage.js +35 -0
- package/distr/Common/Hooks/UseLocalStorage.js.map +1 -0
- package/distr/Common/HttpClient/AuthenticationMode.js +31 -0
- package/distr/Common/HttpClient/AuthenticationMode.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +9 -0
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +9 -0
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/Fetch.js +6 -0
- package/distr/Common/HttpClient/FetchImplementation/Fetch.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +8 -0
- package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +36 -0
- package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js.map +1 -0
- package/distr/Common/HttpClient/HttpClient.js +313 -0
- package/distr/Common/HttpClient/HttpClient.js.map +1 -0
- package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +6 -0
- package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js.map +1 -0
- package/distr/Common/HttpClient/IHttpClient.js +6 -0
- package/distr/Common/HttpClient/IHttpClient.js.map +1 -0
- package/distr/Common/IndentString.js +16 -0
- package/distr/Common/IndentString.js.map +1 -0
- package/distr/Common/IntRangeUtils.js +32 -0
- package/distr/Common/IntRangeUtils.js.map +1 -0
- package/distr/Common/IterableUtils.js +288 -0
- package/distr/Common/IterableUtils.js.map +1 -0
- package/distr/Common/KCLangRuntimeUtils.js +266 -0
- package/distr/Common/KCLangRuntimeUtils.js.map +1 -0
- package/distr/Common/ModelPath/AbsoluteModelFieldPath.js +55 -0
- package/distr/Common/ModelPath/AbsoluteModelFieldPath.js.map +1 -0
- package/distr/Common/ModelPath/BuildIterationSequence.js +41 -0
- package/distr/Common/ModelPath/BuildIterationSequence.js.map +1 -0
- package/distr/Common/ModelPath/EachCurrentCollision.js +12 -0
- package/distr/Common/ModelPath/EachCurrentCollision.js.map +1 -0
- package/distr/Common/ModelPath/IEquatable.js +6 -0
- package/distr/Common/ModelPath/IEquatable.js.map +1 -0
- package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +23 -0
- package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js.map +1 -0
- package/distr/Common/ModelPath/Map/Map2.js +99 -0
- package/distr/Common/ModelPath/Map/Map2.js.map +1 -0
- package/distr/Common/ModelPath/Map/ModelPathMap.js +23 -0
- package/distr/Common/ModelPath/Map/ModelPathMap.js.map +1 -0
- package/distr/Common/ModelPath/ModelPath.js +476 -0
- package/distr/Common/ModelPath/ModelPath.js.map +1 -0
- package/distr/Common/ModelPath/ModelPathBuilder.js +42 -0
- package/distr/Common/ModelPath/ModelPathBuilder.js.map +1 -0
- package/distr/Common/ModelPath/ModelPathHelper.js +34 -0
- package/distr/Common/ModelPath/ModelPathHelper.js.map +1 -0
- package/distr/Common/ModelPath/PathMatcher.js +95 -0
- package/distr/Common/ModelPath/PathMatcher.js.map +1 -0
- package/distr/Common/ModelPath/PathSplitHelper.js +21 -0
- package/distr/Common/ModelPath/PathSplitHelper.js.map +1 -0
- package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +31 -0
- package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js.map +1 -0
- package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +31 -0
- package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js.map +1 -0
- package/distr/Common/ModelPath/Set/ModelPathSet.js +31 -0
- package/distr/Common/ModelPath/Set/ModelPathSet.js.map +1 -0
- package/distr/Common/ModelPath/Set/Set2.js +59 -0
- package/distr/Common/ModelPath/Set/Set2.js.map +1 -0
- package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +33 -0
- package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +6 -0
- package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +11 -0
- package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js.map +1 -0
- package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +66 -0
- package/distr/Common/NidusClient/Fakes/FakeNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +108 -0
- package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/INidusClient.js +14 -0
- package/distr/Common/NidusClient/INidusClient.js.map +1 -0
- package/distr/Common/NidusClient/NidusClientContext.js +34 -0
- package/distr/Common/NidusClient/NidusClientContext.js.map +1 -0
- package/distr/Common/NidusClient/NidusClientImpl.js +55 -0
- package/distr/Common/NidusClient/NidusClientImpl.js.map +1 -0
- package/distr/Common/PathConstants.js +11 -0
- package/distr/Common/PathConstants.js.map +1 -0
- package/distr/Common/PicklistApiClient/IPicklistApiClient.js +6 -0
- package/distr/Common/PicklistApiClient/IPicklistApiClient.js.map +1 -0
- package/distr/Common/PicklistApiClient/PicklistApiClient.js +31 -0
- package/distr/Common/PicklistApiClient/PicklistApiClient.js.map +1 -0
- package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js +36 -0
- package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js.map +1 -0
- package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js +53 -0
- package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js.map +1 -0
- package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js +37 -0
- package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js.map +1 -0
- package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js +6 -0
- package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js.map +1 -0
- package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js +6 -0
- package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js.map +1 -0
- package/distr/Common/RngSchemeTypes/types.js +6 -0
- package/distr/Common/RngSchemeTypes/types.js.map +1 -0
- package/distr/Common/StringArrayKey.js +26 -0
- package/distr/Common/StringArrayKey.js.map +1 -0
- package/distr/Common/TextExtractor/TextExtractorTypes.js +6 -0
- package/distr/Common/TextExtractor/TextExtractorTypes.js.map +1 -0
- package/distr/Common/TypingUtils.js +118 -0
- package/distr/Common/TypingUtils.js.map +1 -0
- package/distr/Common/UUID.js +14 -0
- package/distr/Common/UUID.js.map +1 -0
- package/distr/Common/UseAsyncEffect.js +20 -0
- package/distr/Common/UseAsyncEffect.js.map +1 -0
- package/distr/Common/UseShowOnce.js +60 -0
- package/distr/Common/UseShowOnce.js.map +1 -0
- package/distr/Common/UseTypedSelector.js +10 -0
- package/distr/Common/UseTypedSelector.js.map +1 -0
- package/distr/Common/WellKnownDirectories.js +14 -0
- package/distr/Common/WellKnownDirectories.js.map +1 -0
- package/distr/Common/hashUtils.js +14 -0
- package/distr/Common/hashUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +77 -0
- package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +14 -0
- package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +22 -0
- package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +88 -0
- package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +82 -0
- package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +10 -0
- package/distr/Tools/src/BuildTasks/Engine/EngineSource.js.map +1 -0
- package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +42 -0
- package/distr/Tools/src/BuildTasks/EngineStructureUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +30 -0
- package/distr/Tools/src/BuildTasks/EngineVersionUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/FSTask.js +67 -0
- package/distr/Tools/src/BuildTasks/FSTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js +52 -0
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +44 -0
- package/distr/Tools/src/BuildTasks/Form/GenerateForm.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +37 -0
- package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +25 -0
- package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +31 -0
- package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +27 -0
- package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +95 -0
- package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +126 -0
- package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +174 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +121 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +45 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +52 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +49 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +19 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +64 -0
- package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +84 -0
- package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js.map +1 -0
- package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +174 -0
- package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ReadFormSource.js +112 -0
- package/distr/Tools/src/BuildTasks/ReadFormSource.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +107 -0
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Version.js +41 -0
- package/distr/Tools/src/BuildTasks/Version.js.map +1 -0
- package/distr/Tools/src/BuildTasks/WriteFormMeta.js +27 -0
- package/distr/Tools/src/BuildTasks/WriteFormMeta.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +28 -0
- package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +169 -0
- package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/ClearSourceMapForProduction.js +24 -0
- package/distr/Tools/src/CLICommands/BuildForms/ClearSourceMapForProduction.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +234 -0
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +36 -0
- package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +112 -0
- package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +158 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +94 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +129 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerCandyWidgetController.js +45 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerCandyWidgetController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +76 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +67 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +65 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +117 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +22 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +96 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +231 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/CandyWidgetDevServer.js +70 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/CandyWidgetDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +57 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +67 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +21 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +52 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +80 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +31 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +6 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +6 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +184 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +213 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +28 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +6 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +110 -0
- package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +50 -0
- package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js.map +1 -0
- package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +19 -0
- package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js.map +1 -0
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +30 -0
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js.map +1 -0
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +6 -0
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +163 -0
- package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +112 -0
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js.map +1 -0
- package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +34 -0
- package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +50 -0
- package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js.map +1 -0
- package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +54 -0
- package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}./320/232/320/241.candy.js.kclang +0 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/converters/{gfv}.AfterMerge.xslt +11 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/converters/{gfv}.BeforePreload.xslt +11 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/converters/{gfv}.fufPatcher.xslt +11 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/converters/{gfv}.outer.inner.json +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/fetchfunctions/{gfv}.fetchfunctions.js +2 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/fetchfunctions/{gfv}.fetchfunctions.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/form.json +12 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/addPril1.txt +6 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/presentations.json +8 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/schemas/{gfv}.0.rng.xml +20 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/sugar/index.sugar.xml +10 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +16 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +23 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/validations.KC.kclang +0 -0
- package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +34 -0
- package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +117 -0
- package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js.map +1 -0
- package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +44 -0
- package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +73 -0
- package/distr/Tools/src/CLICommands/Localization/RunLocalization.js.map +1 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js +25 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js +38 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js.map +1 -0
- package/distr/Tools/src/CLICommands/SugarExtractor/ExtractTextsFromSugarController.js +36 -0
- package/distr/Tools/src/CLICommands/SugarExtractor/ExtractTextsFromSugarController.js.map +1 -0
- package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js +50 -0
- package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js.map +1 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +144 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js.map +1 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +78 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js.map +1 -0
- package/distr/Tools/src/CandyCLI.js +144 -0
- package/distr/Tools/src/CandyCLI.js.map +1 -0
- package/distr/Tools/src/CheckNodeJsVersion.js +32 -0
- package/distr/Tools/src/CheckNodeJsVersion.js.map +1 -0
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +28 -0
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js.map +1 -0
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +93 -0
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js.map +1 -0
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +24 -0
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js.map +1 -0
- package/distr/Tools/src/Commons/ErrorUntyped.js +6 -0
- package/distr/Tools/src/Commons/ErrorUntyped.js.map +1 -0
- package/distr/Tools/src/Commons/EventObject.js +74 -0
- package/distr/Tools/src/Commons/EventObject.js.map +1 -0
- package/distr/Tools/src/Commons/ExecUtils.js +38 -0
- package/distr/Tools/src/Commons/ExecUtils.js.map +1 -0
- package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +21 -0
- package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js.map +1 -0
- package/distr/Tools/src/Commons/FormGlobsUtils.js +137 -0
- package/distr/Tools/src/Commons/FormGlobsUtils.js.map +1 -0
- package/distr/Tools/src/Commons/FormLocationInfo.js +6 -0
- package/distr/Tools/src/Commons/FormLocationInfo.js.map +1 -0
- package/distr/Tools/src/Commons/FsUtils.js +35 -0
- package/distr/Tools/src/Commons/FsUtils.js.map +1 -0
- package/distr/Tools/src/Commons/GetCpuLimits.js +64 -0
- package/distr/Tools/src/Commons/GetCpuLimits.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +38 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +57 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +15 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +18 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +6 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +14 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +17 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +22 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +20 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +46 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +13 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +18 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +13 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +13 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +6 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +13 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +13 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +113 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +24 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +106 -0
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +22 -0
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js.map +1 -0
- package/distr/Tools/src/Commons/Locks/Lock.js +24 -0
- package/distr/Tools/src/Commons/Locks/Lock.js.map +1 -0
- package/distr/Tools/src/Commons/Locks/LockHandle.js +17 -0
- package/distr/Tools/src/Commons/Locks/LockHandle.js.map +1 -0
- package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +31 -0
- package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/ELKLogger.js +56 -0
- package/distr/Tools/src/Commons/Logging/ELKLogger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/ILogger.js +25 -0
- package/distr/Tools/src/Commons/Logging/ILogger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +61 -0
- package/distr/Tools/src/Commons/Logging/InMemoryLogger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/Logger.js +78 -0
- package/distr/Tools/src/Commons/Logging/Logger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/StaticLogger.js +37 -0
- package/distr/Tools/src/Commons/Logging/StaticLogger.js.map +1 -0
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +2 -0
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js.map +1 -0
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +152 -0
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js.map +1 -0
- package/distr/Tools/src/Commons/PathPattern.js +42 -0
- package/distr/Tools/src/Commons/PathPattern.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +16 -0
- package/distr/Tools/src/Commons/TasksCore/AggregatedError.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/BuildTask.js +6 -0
- package/distr/Tools/src/Commons/TasksCore/BuildTask.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +668 -0
- package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +77 -0
- package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +20 -0
- package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +48 -0
- package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +45 -0
- package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/FixedDirectoryEntriesProducer.js +25 -0
- package/distr/Tools/src/Commons/TasksCore/FixedDirectoryEntriesProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/Observe.js +35 -0
- package/distr/Tools/src/Commons/TasksCore/Observe.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +29 -0
- package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TimingUtils.js +13 -0
- package/distr/Tools/src/Commons/TimingUtils.js.map +1 -0
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +180 -0
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js.map +1 -0
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +145 -0
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js.map +1 -0
- package/distr/Tools/src/FormWebpackConfiguration/variables.less +132 -0
- package/distr/Tools/src/GenerateReadMe.js +54 -0
- package/distr/Tools/src/GenerateReadMe.js.map +1 -0
- package/distr/Tools/src/Keys/localhost-key.pem +116 -0
- package/distr/Tools/src/Keys/localhost.pem +35 -0
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +2 -0
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.LICENSE.txt +49 -0
- package/distr/Tools/src/LocalServerFrontEndDist/favicon-16x16.png +0 -0
- package/distr/Tools/src/LocalServerFrontEndDist/favicon-32x32.png +0 -0
- package/distr/Tools/src/LocalServerFrontEndDist/favicon.ico +0 -0
- package/distr/Tools/src/LocalServerFrontEndDist/index.html +1 -0
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +3 -0
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.LICENSE.txt +60 -0
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -0
- package/distr/Tools/src/Options/CandyToolOptions.js +20 -0
- package/distr/Tools/src/Options/CandyToolOptions.js.map +1 -0
- package/distr/Tools/src/ReadFarmConfig.js +18 -0
- package/distr/Tools/src/ReadFarmConfig.js.map +1 -0
- package/distr/Tools/src/SelfUpdate.js +121 -0
- package/distr/Tools/src/SelfUpdate.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1722 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.LICENSE.txt +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +1076 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +3328 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +6517 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +222 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +3328 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +6517 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +222 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,668 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.TransformValueProducer = exports.SplitToChainsValueProducer = exports.SkipUpdatesUntilNextCompletedProducer = exports.ParallelSplitToChainsValueProducer = exports.ObservableValueProducerBase = exports.ExecuteOnValueProducer = exports.ChainableValueProducer = exports.AttachValueProducer = void 0;
|
|
8
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
|
+
var _pLimit = _interopRequireDefault(require("p-limit"));
|
|
10
|
+
var _IterableUtils = require("../../../../Common/IterableUtils");
|
|
11
|
+
var _TypingUtils = require("../../../../Common/TypingUtils");
|
|
12
|
+
var _GetCpuLimits = require("../GetCpuLimits");
|
|
13
|
+
var _AggregatedError = require("./AggregatedError");
|
|
14
|
+
async function noop() {
|
|
15
|
+
// empty function
|
|
16
|
+
}
|
|
17
|
+
class ChainableValueProducer {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.errorListeners = [];
|
|
20
|
+
}
|
|
21
|
+
onNext(_listener) {
|
|
22
|
+
throw new Error("AbstractError");
|
|
23
|
+
}
|
|
24
|
+
onError(listener) {
|
|
25
|
+
this.errorListeners.push(listener);
|
|
26
|
+
return () => {
|
|
27
|
+
const index = this.errorListeners.indexOf(listener);
|
|
28
|
+
if (index >= 0) {
|
|
29
|
+
this.errorListeners.splice(index, 1);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
get currentValue() {
|
|
34
|
+
throw new Error("AbstractError");
|
|
35
|
+
}
|
|
36
|
+
transform(transformFunction) {
|
|
37
|
+
return new TransformValueProducer(this, transformFunction);
|
|
38
|
+
}
|
|
39
|
+
do(action) {
|
|
40
|
+
return new ExecuteOnValueProducer(this, action);
|
|
41
|
+
}
|
|
42
|
+
chainWith(nextItemFactory) {
|
|
43
|
+
return nextItemFactory(this);
|
|
44
|
+
}
|
|
45
|
+
attach(attachFactory, joinValues, evaluateAttachKey) {
|
|
46
|
+
return new AttachValueProducer(this, attachFactory, joinValues, evaluateAttachKey);
|
|
47
|
+
}
|
|
48
|
+
skipUpdatesUntilNextCompleted() {
|
|
49
|
+
return new SkipUpdatesUntilNextCompletedProducer(this);
|
|
50
|
+
}
|
|
51
|
+
splitToChains(splitFunction, getKey, factory) {
|
|
52
|
+
return new SplitToChainsValueProducer(this, splitFunction, getKey, factory);
|
|
53
|
+
}
|
|
54
|
+
splitToParallelChains(splitFunction, getKey, factory) {
|
|
55
|
+
return new ParallelSplitToChainsValueProducer(this, splitFunction, getKey, factory);
|
|
56
|
+
}
|
|
57
|
+
async observe(listener = noop) {
|
|
58
|
+
await this.beginObserve();
|
|
59
|
+
await listener(await this.currentValue);
|
|
60
|
+
const detachListener = this.onNext(listener);
|
|
61
|
+
return async () => {
|
|
62
|
+
detachListener();
|
|
63
|
+
await this.endObserve();
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async beginObserve() {
|
|
67
|
+
throw new Error("AbstractError");
|
|
68
|
+
}
|
|
69
|
+
async endObserve() {
|
|
70
|
+
throw new Error("AbstractError");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
74
|
+
async emitError(error) {
|
|
75
|
+
const errorObject = error instanceof Error ? error : new Error(`${error}`);
|
|
76
|
+
for (const errorListener of this.errorListeners) {
|
|
77
|
+
await errorListener(errorObject);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.ChainableValueProducer = ChainableValueProducer;
|
|
82
|
+
class ObservableValueProducerBase extends ChainableValueProducer {
|
|
83
|
+
constructor(...args) {
|
|
84
|
+
super(...args);
|
|
85
|
+
this.listeners = [];
|
|
86
|
+
}
|
|
87
|
+
get currentValue() {
|
|
88
|
+
return this.getCurrentValue();
|
|
89
|
+
}
|
|
90
|
+
async getCurrentValue() {
|
|
91
|
+
throw new Error("AbstractError");
|
|
92
|
+
}
|
|
93
|
+
async beginObserve() {
|
|
94
|
+
await this.beginListening();
|
|
95
|
+
}
|
|
96
|
+
async endObserve() {
|
|
97
|
+
await this.stopListening();
|
|
98
|
+
}
|
|
99
|
+
async beginListening() {
|
|
100
|
+
throw new Error("AbstractError");
|
|
101
|
+
}
|
|
102
|
+
async stopListening() {
|
|
103
|
+
throw new Error("AbstractError");
|
|
104
|
+
}
|
|
105
|
+
async emitUpdate(value) {
|
|
106
|
+
await this.notifyAllListenersAndWaitForComplete(value);
|
|
107
|
+
}
|
|
108
|
+
onNext(listener) {
|
|
109
|
+
this.listeners.push(listener);
|
|
110
|
+
return () => {
|
|
111
|
+
const index = this.listeners.indexOf(listener);
|
|
112
|
+
if (index >= 0) {
|
|
113
|
+
this.listeners.splice(index, 1);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
async notifyAllListenersAndWaitForComplete(nextValue) {
|
|
118
|
+
for (const listener of this.listeners) {
|
|
119
|
+
await listener(nextValue);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.ObservableValueProducerBase = ObservableValueProducerBase;
|
|
124
|
+
class AttachValueProducer extends ChainableValueProducer {
|
|
125
|
+
constructor(parent, attachFactory, joinValues, evaluateAttachKey) {
|
|
126
|
+
super();
|
|
127
|
+
this.parent = void 0;
|
|
128
|
+
this.attachFactory = void 0;
|
|
129
|
+
this.joinValues = void 0;
|
|
130
|
+
this.lastAttachKey = void 0;
|
|
131
|
+
this.attachedProducer = void 0;
|
|
132
|
+
this.evaluateAttachKey = void 0;
|
|
133
|
+
this.listeners = [];
|
|
134
|
+
this.detachParentListener = void 0;
|
|
135
|
+
this.detachAttachedListener = void 0;
|
|
136
|
+
this.lastAttachedValue = void 0;
|
|
137
|
+
this.lastParentValue = void 0;
|
|
138
|
+
this.awaitingLastAttachedValue = false;
|
|
139
|
+
this.isInObserveState = false;
|
|
140
|
+
this.handleChangeAttachedValue = async attachedValue => {
|
|
141
|
+
this.lastAttachedValue = attachedValue;
|
|
142
|
+
if (!this.awaitingLastAttachedValue) {
|
|
143
|
+
if (this.lastParentValue == undefined) {
|
|
144
|
+
throw new Error("InvalidProgramState");
|
|
145
|
+
}
|
|
146
|
+
await this.emitNextValue(await this.joinValues(this.lastParentValue, attachedValue));
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
this.handleChangeParentValue = async parentValue => {
|
|
150
|
+
this.lastParentValue = parentValue;
|
|
151
|
+
const attachKey = await this.evaluateAttachKey(parentValue);
|
|
152
|
+
if (this.attachedProducer != undefined && this.detachAttachedListener == undefined) {
|
|
153
|
+
this.detachAttachedListener = this.attachedProducer.onNext(this.handleChangeAttachedValue);
|
|
154
|
+
}
|
|
155
|
+
if (this.lastAttachKey == undefined || this.lastAttachKey !== attachKey) {
|
|
156
|
+
this.lastAttachKey = attachKey;
|
|
157
|
+
if (this.detachAttachedListener != undefined) {
|
|
158
|
+
this.detachAttachedListener();
|
|
159
|
+
}
|
|
160
|
+
if (this.attachedProducer != undefined && this.isInObserveState) {
|
|
161
|
+
await this.attachedProducer.endObserve();
|
|
162
|
+
}
|
|
163
|
+
this.attachedProducer = await this.attachFactory(parentValue);
|
|
164
|
+
if (this.isInObserveState) {
|
|
165
|
+
await this.attachedProducer.beginObserve();
|
|
166
|
+
}
|
|
167
|
+
this.detachAttachedListener = this.attachedProducer.onNext(this.handleChangeAttachedValue);
|
|
168
|
+
}
|
|
169
|
+
if (this.attachedProducer == undefined) {
|
|
170
|
+
throw new Error("InvalidProgramState");
|
|
171
|
+
}
|
|
172
|
+
// Просто немного обождем, вдруг придёт другое attachedValue
|
|
173
|
+
this.awaitingLastAttachedValue = true;
|
|
174
|
+
await delay(700);
|
|
175
|
+
this.awaitingLastAttachedValue = false;
|
|
176
|
+
let attachedValue = this.lastAttachedValue;
|
|
177
|
+
if (attachedValue == undefined) {
|
|
178
|
+
attachedValue = await this.attachedProducer.currentValue;
|
|
179
|
+
}
|
|
180
|
+
await this.emitNextValue(await this.joinValues(parentValue, attachedValue));
|
|
181
|
+
};
|
|
182
|
+
this.parent = parent;
|
|
183
|
+
this.attachFactory = attachFactory;
|
|
184
|
+
// Я не могу победить типизацию в этом месте, слишком много у меня кода получается
|
|
185
|
+
// @ts-ignore
|
|
186
|
+
this.joinValues = joinValues || (async x => x);
|
|
187
|
+
this.evaluateAttachKey = evaluateAttachKey || (async () => "STATIC-ATTACH-KEY");
|
|
188
|
+
}
|
|
189
|
+
async beginObserve() {
|
|
190
|
+
this.isInObserveState = true;
|
|
191
|
+
await this.parent.beginObserve();
|
|
192
|
+
}
|
|
193
|
+
async endObserve() {
|
|
194
|
+
await this.parent.endObserve();
|
|
195
|
+
if (this.attachedProducer != undefined) {
|
|
196
|
+
await this.attachedProducer.endObserve();
|
|
197
|
+
}
|
|
198
|
+
this.isInObserveState = false;
|
|
199
|
+
}
|
|
200
|
+
get currentValue() {
|
|
201
|
+
const getCurrentValue = async () => {
|
|
202
|
+
const parentValue = await this.parent.currentValue;
|
|
203
|
+
this.lastParentValue = parentValue;
|
|
204
|
+
const attachKey = await this.evaluateAttachKey(parentValue);
|
|
205
|
+
if (this.attachedProducer != undefined && this.detachAttachedListener == undefined) {
|
|
206
|
+
this.detachAttachedListener = this.attachedProducer.onNext(this.handleChangeAttachedValue);
|
|
207
|
+
}
|
|
208
|
+
if (this.lastAttachKey == undefined || this.lastAttachKey !== attachKey) {
|
|
209
|
+
this.lastAttachKey = attachKey;
|
|
210
|
+
if (this.detachAttachedListener != undefined) {
|
|
211
|
+
this.detachAttachedListener();
|
|
212
|
+
}
|
|
213
|
+
if (this.attachedProducer != undefined && this.isInObserveState) {
|
|
214
|
+
await this.attachedProducer.endObserve();
|
|
215
|
+
}
|
|
216
|
+
this.attachedProducer = await this.attachFactory(parentValue);
|
|
217
|
+
if (this.isInObserveState) {
|
|
218
|
+
await this.attachedProducer.beginObserve();
|
|
219
|
+
}
|
|
220
|
+
this.detachAttachedListener = this.attachedProducer.onNext(this.handleChangeAttachedValue);
|
|
221
|
+
}
|
|
222
|
+
if (this.attachedProducer == undefined) {
|
|
223
|
+
throw new Error("InvalidProgramState");
|
|
224
|
+
}
|
|
225
|
+
const attachedValue = await this.attachedProducer.currentValue;
|
|
226
|
+
this.lastAttachedValue = attachedValue;
|
|
227
|
+
return this.joinValues(parentValue, attachedValue);
|
|
228
|
+
};
|
|
229
|
+
return getCurrentValue();
|
|
230
|
+
}
|
|
231
|
+
async emitNextValue(value) {
|
|
232
|
+
for (const listener of this.listeners) {
|
|
233
|
+
await listener(value);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
onNext(listener) {
|
|
237
|
+
this.listeners.push(listener);
|
|
238
|
+
if (this.listeners.length === 1) {
|
|
239
|
+
if (this.detachParentListener == undefined) {
|
|
240
|
+
this.detachParentListener = this.parent.onNext(this.handleChangeParentValue);
|
|
241
|
+
}
|
|
242
|
+
if (this.attachedProducer != undefined && this.detachParentListener == undefined) {
|
|
243
|
+
this.detachParentListener = this.attachedProducer.onNext(this.handleChangeAttachedValue);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return () => {
|
|
247
|
+
const index = this.listeners.indexOf(listener);
|
|
248
|
+
if (index >= 0) {
|
|
249
|
+
this.listeners.splice(index, 1);
|
|
250
|
+
}
|
|
251
|
+
if (this.listeners.length === 0) {
|
|
252
|
+
if (this.detachParentListener != undefined) {
|
|
253
|
+
this.detachParentListener();
|
|
254
|
+
}
|
|
255
|
+
if (this.detachAttachedListener != undefined) {
|
|
256
|
+
this.detachAttachedListener();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
exports.AttachValueProducer = AttachValueProducer;
|
|
263
|
+
class ExecuteOnValueProducer extends ChainableValueProducer {
|
|
264
|
+
constructor(parent, action) {
|
|
265
|
+
super();
|
|
266
|
+
this.parent = void 0;
|
|
267
|
+
this.action = void 0;
|
|
268
|
+
this.parent = parent;
|
|
269
|
+
this.action = action;
|
|
270
|
+
}
|
|
271
|
+
async beginObserve() {
|
|
272
|
+
await this.parent.beginObserve();
|
|
273
|
+
}
|
|
274
|
+
async endObserve() {
|
|
275
|
+
await this.parent.endObserve();
|
|
276
|
+
}
|
|
277
|
+
get currentValue() {
|
|
278
|
+
const getCurrentValue = async () => {
|
|
279
|
+
const value = await this.parent.currentValue;
|
|
280
|
+
await this.action(value);
|
|
281
|
+
return value;
|
|
282
|
+
};
|
|
283
|
+
return getCurrentValue();
|
|
284
|
+
}
|
|
285
|
+
onNext(listener) {
|
|
286
|
+
return this.parent.onNext(async parentValue => {
|
|
287
|
+
try {
|
|
288
|
+
const value = parentValue;
|
|
289
|
+
await this.action(value);
|
|
290
|
+
await listener(value);
|
|
291
|
+
} catch (e) {
|
|
292
|
+
// eslint-disable-next-line no-console
|
|
293
|
+
console.log(e);
|
|
294
|
+
await this.emitError(e);
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
exports.ExecuteOnValueProducer = ExecuteOnValueProducer;
|
|
300
|
+
class TransformValueProducer extends ChainableValueProducer {
|
|
301
|
+
constructor(parent, transformFunction) {
|
|
302
|
+
super();
|
|
303
|
+
this.parent = void 0;
|
|
304
|
+
this.transformFunction = void 0;
|
|
305
|
+
this.parent = parent;
|
|
306
|
+
this.transformFunction = transformFunction;
|
|
307
|
+
}
|
|
308
|
+
async beginObserve() {
|
|
309
|
+
await this.parent.beginObserve();
|
|
310
|
+
}
|
|
311
|
+
async endObserve() {
|
|
312
|
+
await this.parent.endObserve();
|
|
313
|
+
}
|
|
314
|
+
get currentValue() {
|
|
315
|
+
const getCurrentValue = async () => this.transformFunction(await this.parent.currentValue);
|
|
316
|
+
return getCurrentValue();
|
|
317
|
+
}
|
|
318
|
+
onNext(listener) {
|
|
319
|
+
return this.parent.onNext(async parentValue => {
|
|
320
|
+
await listener(await this.transformFunction(parentValue));
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
exports.TransformValueProducer = TransformValueProducer;
|
|
325
|
+
class SplitToChainsValueProducer extends ChainableValueProducer {
|
|
326
|
+
constructor(parent, splitFunction, getKey, factory) {
|
|
327
|
+
super();
|
|
328
|
+
this.parent = void 0;
|
|
329
|
+
this.splitFunction = void 0;
|
|
330
|
+
this.getKey = void 0;
|
|
331
|
+
this.factory = void 0;
|
|
332
|
+
this.listeners = [];
|
|
333
|
+
this.chains = {};
|
|
334
|
+
this.isInObserveState = false;
|
|
335
|
+
this.handleChangeParentChain = async (nextValue, key) => {
|
|
336
|
+
const chainValue = this.chains[key];
|
|
337
|
+
if (chainValue != undefined) {
|
|
338
|
+
chainValue.lastValue = nextValue;
|
|
339
|
+
}
|
|
340
|
+
await this.emitValue(Object.values(this.chains).map(x => x.lastValue).filter(isNotNullOrUndefined));
|
|
341
|
+
};
|
|
342
|
+
this.handleChangeParent = async input => {
|
|
343
|
+
const values = this.splitFunction(input);
|
|
344
|
+
const nextValuesMap = this.toMap(values);
|
|
345
|
+
const newKeys = _lodash.default.difference(Object.keys(nextValuesMap), Object.keys(this.chains));
|
|
346
|
+
const removedKeys = _lodash.default.difference(Object.keys(this.chains), Object.keys(nextValuesMap));
|
|
347
|
+
for (const newKey of newKeys) {
|
|
348
|
+
var _nextValuesMap$newKey;
|
|
349
|
+
const newChain = this.factory((_nextValuesMap$newKey = nextValuesMap[newKey]) !== null && _nextValuesMap$newKey !== void 0 ? _nextValuesMap$newKey : (0, _TypingUtils.reject)());
|
|
350
|
+
if (this.isInObserveState) {
|
|
351
|
+
await newChain.beginObserve();
|
|
352
|
+
}
|
|
353
|
+
try {
|
|
354
|
+
const newChainValue = await newChain.currentValue;
|
|
355
|
+
this.chains[newKey] = {
|
|
356
|
+
lastValue: newChainValue,
|
|
357
|
+
valueProducer: newChain,
|
|
358
|
+
detachListener: newChain.onNext(nextValue => this.handleChangeParentChain(nextValue, newKey))
|
|
359
|
+
};
|
|
360
|
+
} catch (e) {
|
|
361
|
+
// eslint-disable-next-line no-console
|
|
362
|
+
console.log(e);
|
|
363
|
+
this.chains[newKey] = {
|
|
364
|
+
lastValue: undefined,
|
|
365
|
+
valueProducer: newChain,
|
|
366
|
+
detachListener: newChain.onNext(nextValue => this.handleChangeParentChain(nextValue, newKey))
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
for (const removedKey of removedKeys) {
|
|
371
|
+
const removedChain = this.chains[removedKey];
|
|
372
|
+
removedChain === null || removedChain === void 0 || removedChain.detachListener();
|
|
373
|
+
if (this.isInObserveState) {
|
|
374
|
+
await (removedChain === null || removedChain === void 0 ? void 0 : removedChain.valueProducer.endObserve());
|
|
375
|
+
}
|
|
376
|
+
// Я не знаю, как тут правильно
|
|
377
|
+
// tslint:disable-next-line:no-dynamic-delete
|
|
378
|
+
delete this.chains[removedKey];
|
|
379
|
+
}
|
|
380
|
+
await this.emitValue(Object.values(this.chains).map(x => x.lastValue).filter(isNotNullOrUndefined));
|
|
381
|
+
};
|
|
382
|
+
this.parent = parent;
|
|
383
|
+
this.splitFunction = splitFunction;
|
|
384
|
+
this.getKey = getKey;
|
|
385
|
+
this.factory = factory;
|
|
386
|
+
this.parent.onNext(this.handleChangeParent);
|
|
387
|
+
}
|
|
388
|
+
get currentValue() {
|
|
389
|
+
const getCurrentValue = async () => {
|
|
390
|
+
const values = this.splitFunction(await this.parent.currentValue);
|
|
391
|
+
const result = [];
|
|
392
|
+
const errors = [];
|
|
393
|
+
for (const value of values) {
|
|
394
|
+
const childValueProducer = this.factory(value);
|
|
395
|
+
if (this.isInObserveState) {
|
|
396
|
+
await childValueProducer.beginObserve();
|
|
397
|
+
}
|
|
398
|
+
try {
|
|
399
|
+
const childValue = await childValueProducer.currentValue;
|
|
400
|
+
result.push(childValue);
|
|
401
|
+
const key = this.getKey(value);
|
|
402
|
+
this.chains[key] = {
|
|
403
|
+
lastValue: childValue,
|
|
404
|
+
valueProducer: childValueProducer,
|
|
405
|
+
detachListener: childValueProducer.onNext(x => this.handleChangeParentChain(x, key))
|
|
406
|
+
};
|
|
407
|
+
} catch (e) {
|
|
408
|
+
if (this.isInObserveState) {
|
|
409
|
+
// eslint-disable-next-line no-console
|
|
410
|
+
console.log(e);
|
|
411
|
+
} else {
|
|
412
|
+
errors.push(e);
|
|
413
|
+
}
|
|
414
|
+
const key = this.getKey(value);
|
|
415
|
+
this.chains[key] = {
|
|
416
|
+
lastValue: undefined,
|
|
417
|
+
valueProducer: childValueProducer,
|
|
418
|
+
detachListener: childValueProducer.onNext(x => this.handleChangeParentChain(x, key))
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
if (errors.length === 1) {
|
|
423
|
+
throw errors[0];
|
|
424
|
+
} else if (errors.length > 1) {
|
|
425
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
426
|
+
throw new _AggregatedError.AggregatedError("There are errors", ...errors);
|
|
427
|
+
}
|
|
428
|
+
return result;
|
|
429
|
+
};
|
|
430
|
+
return getCurrentValue();
|
|
431
|
+
}
|
|
432
|
+
async beginObserve() {
|
|
433
|
+
this.isInObserveState = true;
|
|
434
|
+
await this.parent.beginObserve();
|
|
435
|
+
}
|
|
436
|
+
async endObserve() {
|
|
437
|
+
await this.parent.endObserve();
|
|
438
|
+
for (const value of (0, _IterableUtils.iterateValues)(this.chains)) {
|
|
439
|
+
await value.valueProducer.endObserve();
|
|
440
|
+
}
|
|
441
|
+
this.isInObserveState = false;
|
|
442
|
+
}
|
|
443
|
+
onNext(listener) {
|
|
444
|
+
this.listeners.push(listener);
|
|
445
|
+
return () => {
|
|
446
|
+
const index = this.listeners.indexOf(listener);
|
|
447
|
+
if (index >= 0) {
|
|
448
|
+
this.listeners.splice(index, 1);
|
|
449
|
+
}
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
async emitValue(value) {
|
|
453
|
+
for (const listener of this.listeners) {
|
|
454
|
+
await listener(value);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
toMap(values) {
|
|
458
|
+
const result = {};
|
|
459
|
+
for (const value of values) {
|
|
460
|
+
result[this.getKey(value)] = value;
|
|
461
|
+
}
|
|
462
|
+
return result;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
exports.SplitToChainsValueProducer = SplitToChainsValueProducer;
|
|
466
|
+
class ParallelSplitToChainsValueProducer extends ChainableValueProducer {
|
|
467
|
+
constructor(parent, splitFunction, getKey, factory) {
|
|
468
|
+
super();
|
|
469
|
+
this.parent = void 0;
|
|
470
|
+
this.splitFunction = void 0;
|
|
471
|
+
this.getKey = void 0;
|
|
472
|
+
this.factory = void 0;
|
|
473
|
+
this.listeners = [];
|
|
474
|
+
this.chains = {};
|
|
475
|
+
this.isInObserveState = false;
|
|
476
|
+
this.handleChangeParentChain = async (nextValue, key) => {
|
|
477
|
+
const chainValue = this.chains[key];
|
|
478
|
+
if (chainValue != undefined) {
|
|
479
|
+
chainValue.lastValue = nextValue;
|
|
480
|
+
}
|
|
481
|
+
await this.emitValue(Object.values(this.chains).map(x => x.lastValue).filter(isNotNullOrUndefined));
|
|
482
|
+
};
|
|
483
|
+
this.handleChangeParent = async input => {
|
|
484
|
+
const values = this.splitFunction(input);
|
|
485
|
+
const nextValuesMap = this.toMap(values);
|
|
486
|
+
const newKeys = _lodash.default.difference(Object.keys(nextValuesMap), Object.keys(this.chains));
|
|
487
|
+
const removedKeys = _lodash.default.difference(Object.keys(this.chains), Object.keys(nextValuesMap));
|
|
488
|
+
for (const newKey of newKeys) {
|
|
489
|
+
var _nextValuesMap$newKey2;
|
|
490
|
+
const newChain = await this.factory((_nextValuesMap$newKey2 = nextValuesMap[newKey]) !== null && _nextValuesMap$newKey2 !== void 0 ? _nextValuesMap$newKey2 : (0, _TypingUtils.reject)());
|
|
491
|
+
if (this.isInObserveState) {
|
|
492
|
+
await newChain.beginObserve();
|
|
493
|
+
}
|
|
494
|
+
try {
|
|
495
|
+
const newChainValue = await newChain.currentValue;
|
|
496
|
+
this.chains[newKey] = {
|
|
497
|
+
lastValue: newChainValue,
|
|
498
|
+
valueProducer: newChain,
|
|
499
|
+
detachListener: newChain.onNext(nextValue => this.handleChangeParentChain(nextValue, newKey))
|
|
500
|
+
};
|
|
501
|
+
} catch (e) {
|
|
502
|
+
// eslint-disable-next-line no-console
|
|
503
|
+
console.log(e);
|
|
504
|
+
this.chains[newKey] = {
|
|
505
|
+
lastValue: undefined,
|
|
506
|
+
valueProducer: newChain,
|
|
507
|
+
detachListener: newChain.onNext(nextValue => this.handleChangeParentChain(nextValue, newKey))
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
for (const removedKey of removedKeys) {
|
|
512
|
+
const removedChain = this.chains[removedKey];
|
|
513
|
+
removedChain === null || removedChain === void 0 || removedChain.detachListener();
|
|
514
|
+
if (this.isInObserveState) {
|
|
515
|
+
await (removedChain === null || removedChain === void 0 ? void 0 : removedChain.valueProducer.endObserve());
|
|
516
|
+
}
|
|
517
|
+
// Я не знаю, как тут правильно
|
|
518
|
+
// tslint:disable-next-line:no-dynamic-delete
|
|
519
|
+
delete this.chains[removedKey];
|
|
520
|
+
}
|
|
521
|
+
await this.emitValue(Object.values(this.chains).map(x => x.lastValue).filter(isNotNullOrUndefined));
|
|
522
|
+
};
|
|
523
|
+
this.parent = parent;
|
|
524
|
+
this.splitFunction = splitFunction;
|
|
525
|
+
this.getKey = getKey;
|
|
526
|
+
this.factory = factory;
|
|
527
|
+
this.parent.onNext(this.handleChangeParent);
|
|
528
|
+
}
|
|
529
|
+
get currentValue() {
|
|
530
|
+
const getCurrentValue = async () => {
|
|
531
|
+
const values = this.splitFunction(await this.parent.currentValue);
|
|
532
|
+
const result = [];
|
|
533
|
+
const errors = [];
|
|
534
|
+
const cpuLimit = (0, _GetCpuLimits.getCpuLimits)();
|
|
535
|
+
// eslint-disable-next-line no-console
|
|
536
|
+
console.log(`Use limit: ${cpuLimit}`);
|
|
537
|
+
const concurrencyLimit = (0, _pLimit.default)(cpuLimit);
|
|
538
|
+
await Promise.all(values.map((value, index) => concurrencyLimit(async () => {
|
|
539
|
+
const childValueProducer = await this.factory(value);
|
|
540
|
+
if (this.isInObserveState) {
|
|
541
|
+
await childValueProducer.beginObserve();
|
|
542
|
+
}
|
|
543
|
+
try {
|
|
544
|
+
const childValue = await childValueProducer.currentValue;
|
|
545
|
+
result[index] = childValue;
|
|
546
|
+
const key = this.getKey(value);
|
|
547
|
+
this.chains[key] = {
|
|
548
|
+
lastValue: childValue,
|
|
549
|
+
valueProducer: childValueProducer,
|
|
550
|
+
detachListener: childValueProducer.onNext(x => this.handleChangeParentChain(x, key))
|
|
551
|
+
};
|
|
552
|
+
} catch (e) {
|
|
553
|
+
if (this.isInObserveState) {
|
|
554
|
+
// eslint-disable-next-line no-console
|
|
555
|
+
console.log(e);
|
|
556
|
+
} else {
|
|
557
|
+
errors.push(e);
|
|
558
|
+
}
|
|
559
|
+
const key = this.getKey(value);
|
|
560
|
+
this.chains[key] = {
|
|
561
|
+
lastValue: undefined,
|
|
562
|
+
valueProducer: childValueProducer,
|
|
563
|
+
detachListener: childValueProducer.onNext(x => this.handleChangeParentChain(x, key))
|
|
564
|
+
};
|
|
565
|
+
}
|
|
566
|
+
})));
|
|
567
|
+
if (errors.length === 1) {
|
|
568
|
+
throw errors[0];
|
|
569
|
+
} else if (errors.length > 1) {
|
|
570
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
571
|
+
throw new _AggregatedError.AggregatedError("There are errors", ...errors);
|
|
572
|
+
}
|
|
573
|
+
return result;
|
|
574
|
+
};
|
|
575
|
+
return getCurrentValue();
|
|
576
|
+
}
|
|
577
|
+
async beginObserve() {
|
|
578
|
+
this.isInObserveState = true;
|
|
579
|
+
await this.parent.beginObserve();
|
|
580
|
+
}
|
|
581
|
+
async endObserve() {
|
|
582
|
+
await this.parent.endObserve();
|
|
583
|
+
for (const key of Object.keys(this.chains)) {
|
|
584
|
+
var _this$chains$key;
|
|
585
|
+
await ((_this$chains$key = this.chains[key]) === null || _this$chains$key === void 0 ? void 0 : _this$chains$key.valueProducer.endObserve());
|
|
586
|
+
}
|
|
587
|
+
this.isInObserveState = false;
|
|
588
|
+
}
|
|
589
|
+
onNext(listener) {
|
|
590
|
+
this.listeners.push(listener);
|
|
591
|
+
return () => {
|
|
592
|
+
const index = this.listeners.indexOf(listener);
|
|
593
|
+
if (index >= 0) {
|
|
594
|
+
this.listeners.splice(index, 1);
|
|
595
|
+
}
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
async emitValue(value) {
|
|
599
|
+
for (const listener of this.listeners) {
|
|
600
|
+
await listener(value);
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
toMap(values) {
|
|
604
|
+
const result = {};
|
|
605
|
+
for (const value of values) {
|
|
606
|
+
result[this.getKey(value)] = value;
|
|
607
|
+
}
|
|
608
|
+
return result;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
exports.ParallelSplitToChainsValueProducer = ParallelSplitToChainsValueProducer;
|
|
612
|
+
class SkipUpdatesUntilNextCompletedProducer extends ObservableValueProducerBase {
|
|
613
|
+
constructor(parent) {
|
|
614
|
+
super();
|
|
615
|
+
this.parent = void 0;
|
|
616
|
+
this.detachFromParent = void 0;
|
|
617
|
+
this.lastParentValue = void 0;
|
|
618
|
+
this.nextEmitToProcess = void 0;
|
|
619
|
+
this.currentlyProcessingEmit = void 0;
|
|
620
|
+
this.parent = parent;
|
|
621
|
+
}
|
|
622
|
+
async getCurrentValue() {
|
|
623
|
+
if (this.lastParentValue == undefined) {
|
|
624
|
+
this.currentlyProcessingEmit = (async () => {
|
|
625
|
+
this.lastParentValue = await this.parent.currentValue;
|
|
626
|
+
})();
|
|
627
|
+
await this.currentlyProcessingEmit;
|
|
628
|
+
}
|
|
629
|
+
if (this.lastParentValue == undefined) {
|
|
630
|
+
throw new Error("InvalidProgramState");
|
|
631
|
+
}
|
|
632
|
+
return this.lastParentValue;
|
|
633
|
+
}
|
|
634
|
+
async beginListening() {
|
|
635
|
+
await this.parent.beginObserve();
|
|
636
|
+
if (this.detachFromParent == undefined) {
|
|
637
|
+
this.detachFromParent = this.parent.onNext(nextValue => this.handleChangeParentValue(nextValue));
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
async stopListening() {
|
|
641
|
+
if (this.detachFromParent != undefined) {
|
|
642
|
+
this.detachFromParent();
|
|
643
|
+
}
|
|
644
|
+
await this.parent.endObserve();
|
|
645
|
+
}
|
|
646
|
+
async handleChangeParentValue(nextValue) {
|
|
647
|
+
this.lastParentValue = nextValue;
|
|
648
|
+
this.nextEmitToProcess = _lodash.default.once(() => this.emitUpdate(nextValue));
|
|
649
|
+
if (this.currentlyProcessingEmit != undefined) {
|
|
650
|
+
await this.currentlyProcessingEmit;
|
|
651
|
+
}
|
|
652
|
+
this.currentlyProcessingEmit = this.nextEmitToProcess();
|
|
653
|
+
await this.currentlyProcessingEmit;
|
|
654
|
+
this.currentlyProcessingEmit = undefined;
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
exports.SkipUpdatesUntilNextCompletedProducer = SkipUpdatesUntilNextCompletedProducer;
|
|
658
|
+
function delay(timeout) {
|
|
659
|
+
return new Promise(resolve => {
|
|
660
|
+
setTimeout(() => {
|
|
661
|
+
resolve();
|
|
662
|
+
}, timeout);
|
|
663
|
+
});
|
|
664
|
+
}
|
|
665
|
+
function isNotNullOrUndefined(input) {
|
|
666
|
+
return input != undefined;
|
|
667
|
+
}
|
|
668
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcExpbWl0IiwiX0l0ZXJhYmxlVXRpbHMiLCJfVHlwaW5nVXRpbHMiLCJfR2V0Q3B1TGltaXRzIiwiX0FnZ3JlZ2F0ZWRFcnJvciIsIm5vb3AiLCJDaGFpbmFibGVWYWx1ZVByb2R1Y2VyIiwiY29uc3RydWN0b3IiLCJlcnJvckxpc3RlbmVycyIsIm9uTmV4dCIsIl9saXN0ZW5lciIsIkVycm9yIiwib25FcnJvciIsImxpc3RlbmVyIiwicHVzaCIsImluZGV4IiwiaW5kZXhPZiIsInNwbGljZSIsImN1cnJlbnRWYWx1ZSIsInRyYW5zZm9ybSIsInRyYW5zZm9ybUZ1bmN0aW9uIiwiVHJhbnNmb3JtVmFsdWVQcm9kdWNlciIsImRvIiwiYWN0aW9uIiwiRXhlY3V0ZU9uVmFsdWVQcm9kdWNlciIsImNoYWluV2l0aCIsIm5leHRJdGVtRmFjdG9yeSIsImF0dGFjaCIsImF0dGFjaEZhY3RvcnkiLCJqb2luVmFsdWVzIiwiZXZhbHVhdGVBdHRhY2hLZXkiLCJBdHRhY2hWYWx1ZVByb2R1Y2VyIiwic2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWQiLCJTa2lwVXBkYXRlc1VudGlsTmV4dENvbXBsZXRlZFByb2R1Y2VyIiwic3BsaXRUb0NoYWlucyIsInNwbGl0RnVuY3Rpb24iLCJnZXRLZXkiLCJmYWN0b3J5IiwiU3BsaXRUb0NoYWluc1ZhbHVlUHJvZHVjZXIiLCJzcGxpdFRvUGFyYWxsZWxDaGFpbnMiLCJQYXJhbGxlbFNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyIiwib2JzZXJ2ZSIsImJlZ2luT2JzZXJ2ZSIsImRldGFjaExpc3RlbmVyIiwiZW5kT2JzZXJ2ZSIsImVtaXRFcnJvciIsImVycm9yIiwiZXJyb3JPYmplY3QiLCJlcnJvckxpc3RlbmVyIiwiZXhwb3J0cyIsIk9ic2VydmFibGVWYWx1ZVByb2R1Y2VyQmFzZSIsImFyZ3MiLCJsaXN0ZW5lcnMiLCJnZXRDdXJyZW50VmFsdWUiLCJiZWdpbkxpc3RlbmluZyIsInN0b3BMaXN0ZW5pbmciLCJlbWl0VXBkYXRlIiwidmFsdWUiLCJub3RpZnlBbGxMaXN0ZW5lcnNBbmRXYWl0Rm9yQ29tcGxldGUiLCJuZXh0VmFsdWUiLCJwYXJlbnQiLCJsYXN0QXR0YWNoS2V5IiwiYXR0YWNoZWRQcm9kdWNlciIsImRldGFjaFBhcmVudExpc3RlbmVyIiwiZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciIsImxhc3RBdHRhY2hlZFZhbHVlIiwibGFzdFBhcmVudFZhbHVlIiwiYXdhaXRpbmdMYXN0QXR0YWNoZWRWYWx1ZSIsImlzSW5PYnNlcnZlU3RhdGUiLCJoYW5kbGVDaGFuZ2VBdHRhY2hlZFZhbHVlIiwiYXR0YWNoZWRWYWx1ZSIsInVuZGVmaW5lZCIsImVtaXROZXh0VmFsdWUiLCJoYW5kbGVDaGFuZ2VQYXJlbnRWYWx1ZSIsInBhcmVudFZhbHVlIiwiYXR0YWNoS2V5IiwiZGVsYXkiLCJ4IiwibGVuZ3RoIiwiZSIsImNvbnNvbGUiLCJsb2ciLCJjaGFpbnMiLCJoYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbiIsImtleSIsImNoYWluVmFsdWUiLCJsYXN0VmFsdWUiLCJlbWl0VmFsdWUiLCJPYmplY3QiLCJ2YWx1ZXMiLCJtYXAiLCJmaWx0ZXIiLCJpc05vdE51bGxPclVuZGVmaW5lZCIsImhhbmRsZUNoYW5nZVBhcmVudCIsImlucHV0IiwibmV4dFZhbHVlc01hcCIsInRvTWFwIiwibmV3S2V5cyIsIl8iLCJkaWZmZXJlbmNlIiwia2V5cyIsInJlbW92ZWRLZXlzIiwibmV3S2V5IiwiX25leHRWYWx1ZXNNYXAkbmV3S2V5IiwibmV3Q2hhaW4iLCJyZWplY3QiLCJuZXdDaGFpblZhbHVlIiwidmFsdWVQcm9kdWNlciIsInJlbW92ZWRLZXkiLCJyZW1vdmVkQ2hhaW4iLCJyZXN1bHQiLCJlcnJvcnMiLCJjaGlsZFZhbHVlUHJvZHVjZXIiLCJjaGlsZFZhbHVlIiwiQWdncmVnYXRlZEVycm9yIiwiaXRlcmF0ZVZhbHVlcyIsIl9uZXh0VmFsdWVzTWFwJG5ld0tleTIiLCJjcHVMaW1pdCIsImdldENwdUxpbWl0cyIsImNvbmN1cnJlbmN5TGltaXQiLCJwTGltaXQiLCJQcm9taXNlIiwiYWxsIiwiX3RoaXMkY2hhaW5zJGtleSIsImRldGFjaEZyb21QYXJlbnQiLCJuZXh0RW1pdFRvUHJvY2VzcyIsImN1cnJlbnRseVByb2Nlc3NpbmdFbWl0Iiwib25jZSIsInRpbWVvdXQiLCJyZXNvbHZlIiwic2V0VGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9Db21tb25zL1Rhc2tzQ29yZS9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCBwTGltaXQgZnJvbSBcInAtbGltaXRcIjtcblxuaW1wb3J0IHsgUmVhc29uT3JFcnJvciB9IGZyb20gXCIuLi9FcnJvclVudHlwZWRcIjtcbmltcG9ydCB7IGl0ZXJhdGVWYWx1ZXMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0l0ZXJhYmxlVXRpbHNcIjtcbmltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IGdldENwdUxpbWl0cyB9IGZyb20gXCIuLi9HZXRDcHVMaW1pdHNcIjtcblxuaW1wb3J0IHsgQWdncmVnYXRlZEVycm9yIH0gZnJvbSBcIi4vQWdncmVnYXRlZEVycm9yXCI7XG5pbXBvcnQgeyBEZXRhY2hMaXN0ZW5lciwgSVZhbHVlUHJvZHVjZXIsIFZhbHVlTGlzdGVuZXIgfSBmcm9tIFwiLi9CdWlsZFRhc2tcIjtcblxuYXN5bmMgZnVuY3Rpb24gbm9vcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBlbXB0eSBmdW5jdGlvblxufVxuXG5leHBvcnQgY2xhc3MgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUPiBpbXBsZW1lbnRzIElWYWx1ZVByb2R1Y2VyPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVycm9yTGlzdGVuZXJzOiBBcnJheTxWYWx1ZUxpc3RlbmVyPEVycm9yPj4gPSBbXTtcblxuICAgIHB1YmxpYyBvbk5leHQoX2xpc3RlbmVyOiAobmV4dFZhbHVlOiBUKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBYnN0cmFjdEVycm9yXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yKGxpc3RlbmVyOiAoZXJyb3I6IEVycm9yKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICB0aGlzLmVycm9yTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmVycm9yTGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFic3RyYWN0RXJyb3JcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybTxUTz4odHJhbnNmb3JtRnVuY3Rpb246IChpbnB1dDogVCkgPT4gUHJvbWlzZTxUTz4pOiBUcmFuc2Zvcm1WYWx1ZVByb2R1Y2VyPFQsIFRPPiB7XG4gICAgICAgIHJldHVybiBuZXcgVHJhbnNmb3JtVmFsdWVQcm9kdWNlcih0aGlzLCB0cmFuc2Zvcm1GdW5jdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGRvKGFjdGlvbjogKGlucHV0OiBUKSA9PiBQcm9taXNlPHZvaWQ+KTogRXhlY3V0ZU9uVmFsdWVQcm9kdWNlcjxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgRXhlY3V0ZU9uVmFsdWVQcm9kdWNlcih0aGlzLCBhY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGFpbldpdGg8VE8sIFRWUCBleHRlbmRzIElWYWx1ZVByb2R1Y2VyPFRPPj4obmV4dEl0ZW1GYWN0b3J5OiAocHJldkl0ZW06IElWYWx1ZVByb2R1Y2VyPFQ+KSA9PiBUVlApOiBUVlAge1xuICAgICAgICByZXR1cm4gbmV4dEl0ZW1GYWN0b3J5KHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhdHRhY2g8VEEsIFRPID0gVD4oXG4gICAgICAgIGF0dGFjaEZhY3Rvcnk6ICh2YWx1ZTogVCkgPT4gUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUQT4+LFxuICAgICAgICBqb2luVmFsdWVzPzogKG9yaWdpbmFsOiBULCBhdHRhY2hlZDogVEEpID0+IFByb21pc2U8VE8+LFxuICAgICAgICBldmFsdWF0ZUF0dGFjaEtleT86ICh2YWx1ZTogVCkgPT4gUHJvbWlzZTxzdHJpbmc+XG4gICAgKTogQXR0YWNoVmFsdWVQcm9kdWNlcjxULCBUQSwgVE8+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBBdHRhY2hWYWx1ZVByb2R1Y2VyKHRoaXMsIGF0dGFjaEZhY3RvcnksIGpvaW5WYWx1ZXMsIGV2YWx1YXRlQXR0YWNoS2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWQoKTogU2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWRQcm9kdWNlcjxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgU2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWRQcm9kdWNlcih0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3BsaXRUb0NoYWluczxUSSwgVE8+KFxuICAgICAgICBzcGxpdEZ1bmN0aW9uOiAoaW5wdXQ6IFQpID0+IFRJW10sXG4gICAgICAgIGdldEtleTogKGlucHV0OiBUSSkgPT4gc3RyaW5nLFxuICAgICAgICBmYWN0b3J5OiAoaW5wdXQ6IFRJKSA9PiBJVmFsdWVQcm9kdWNlcjxUTz5cbiAgICApOiBTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcjxULCBUSSwgVE8+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcih0aGlzLCBzcGxpdEZ1bmN0aW9uLCBnZXRLZXksIGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzcGxpdFRvUGFyYWxsZWxDaGFpbnM8VEksIFRPPihcbiAgICAgICAgc3BsaXRGdW5jdGlvbjogKGlucHV0OiBUKSA9PiBUSVtdLFxuICAgICAgICBnZXRLZXk6IChpbnB1dDogVEkpID0+IHN0cmluZyxcbiAgICAgICAgZmFjdG9yeTogKGlucHV0OiBUSSkgPT4gSVZhbHVlUHJvZHVjZXI8VE8+IHwgUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUTz4+XG4gICAgKTogUGFyYWxsZWxTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcjxULCBUSSwgVE8+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJhbGxlbFNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyKHRoaXMsIHNwbGl0RnVuY3Rpb24sIGdldEtleSwgZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9ic2VydmUobGlzdGVuZXI6IFZhbHVlTGlzdGVuZXI8VD4gPSBub29wKTogUHJvbWlzZTwoKSA9PiBQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgIGF3YWl0IGxpc3RlbmVyKGF3YWl0IHRoaXMuY3VycmVudFZhbHVlKTtcbiAgICAgICAgY29uc3QgZGV0YWNoTGlzdGVuZXIgPSB0aGlzLm9uTmV4dChsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcigpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbmRPYnNlcnZlKCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJlZ2luT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByb3RlY3RlZCBhc3luYyBlbWl0RXJyb3IoZXJyb3I6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBlcnJvck9iamVjdCA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihgJHtlcnJvcn1gKTtcbiAgICAgICAgZm9yIChjb25zdCBlcnJvckxpc3RlbmVyIG9mIHRoaXMuZXJyb3JMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGF3YWl0IGVycm9yTGlzdGVuZXIoZXJyb3JPYmplY3QpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlPFQ+IGV4dGVuZHMgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUPiB7XG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlzdGVuZXJzOiBBcnJheTxWYWx1ZUxpc3RlbmVyPFQ+PiA9IFtdO1xuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldEN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmJlZ2luTGlzdGVuaW5nKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGVuZE9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcExpc3RlbmluZygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBiZWdpbkxpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgc3RvcExpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZW1pdFVwZGF0ZSh2YWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLm5vdGlmeUFsbExpc3RlbmVyc0FuZFdhaXRGb3JDb21wbGV0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChsaXN0ZW5lcjogKG5leHRWYWx1ZTogVCkgPT4gUHJvbWlzZTx2b2lkPik6IERldGFjaExpc3RlbmVyIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbm90aWZ5QWxsTGlzdGVuZXJzQW5kV2FpdEZvckNvbXBsZXRlKG5leHRWYWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBhd2FpdCBsaXN0ZW5lcihuZXh0VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXR0YWNoVmFsdWVQcm9kdWNlcjxUSSwgVEEsIFRPPiBleHRlbmRzIENoYWluYWJsZVZhbHVlUHJvZHVjZXI8VE8+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VEk+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXR0YWNoRmFjdG9yeTogKHZhbHVlOiBUSSkgPT4gUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUQT4+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgam9pblZhbHVlczogKG9yaWdpbmFsOiBUSSwgYXR0YWNoZWQ6IFRBKSA9PiBQcm9taXNlPFRPPjtcbiAgICBwcml2YXRlIGxhc3RBdHRhY2hLZXk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBhdHRhY2hlZFByb2R1Y2VyPzogSVZhbHVlUHJvZHVjZXI8VEE+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZhbHVhdGVBdHRhY2hLZXk6ICh2YWx1ZTogVEkpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVyczogQXJyYXk8VmFsdWVMaXN0ZW5lcjxUTz4+ID0gW107XG4gICAgcHJpdmF0ZSBkZXRhY2hQYXJlbnRMaXN0ZW5lcj86IERldGFjaExpc3RlbmVyO1xuICAgIHByaXZhdGUgZGV0YWNoQXR0YWNoZWRMaXN0ZW5lcj86IERldGFjaExpc3RlbmVyO1xuICAgIHByaXZhdGUgbGFzdEF0dGFjaGVkVmFsdWU/OiBUQTtcbiAgICBwcml2YXRlIGxhc3RQYXJlbnRWYWx1ZT86IFRJO1xuICAgIHByaXZhdGUgYXdhaXRpbmdMYXN0QXR0YWNoZWRWYWx1ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNJbk9ic2VydmVTdGF0ZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFRJPixcbiAgICAgICAgYXR0YWNoRmFjdG9yeTogKHZhbHVlOiBUSSkgPT4gUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUQT4+LFxuICAgICAgICBqb2luVmFsdWVzPzogKG9yaWdpbmFsOiBUSSwgYXR0YWNoZWQ6IFRBKSA9PiBQcm9taXNlPFRPPixcbiAgICAgICAgZXZhbHVhdGVBdHRhY2hLZXk/OiAodmFsdWU6IFRJKSA9PiBQcm9taXNlPHN0cmluZz5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuYXR0YWNoRmFjdG9yeSA9IGF0dGFjaEZhY3Rvcnk7XG4gICAgICAgIC8vINCvINC90LUg0LzQvtCz0YMg0L/QvtCx0LXQtNC40YLRjCDRgtC40L/QuNC30LDRhtC40Y4g0LIg0Y3RgtC+0Lwg0LzQtdGB0YLQtSwg0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDRgyDQvNC10L3RjyDQutC+0LTQsCDQv9C+0LvRg9GH0LDQtdGC0YHRj1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuam9pblZhbHVlcyA9IGpvaW5WYWx1ZXMgfHwgKGFzeW5jIHggPT4geCk7XG4gICAgICAgIHRoaXMuZXZhbHVhdGVBdHRhY2hLZXkgPSBldmFsdWF0ZUF0dGFjaEtleSB8fCAoYXN5bmMgKCkgPT4gXCJTVEFUSUMtQVRUQUNILUtFWVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hdHRhY2hlZFByb2R1Y2VyLmVuZE9ic2VydmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFRPPiB7XG4gICAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9IGFzeW5jICgpOiBQcm9taXNlPFRPPiA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IGF3YWl0IHRoaXMucGFyZW50LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMubGFzdFBhcmVudFZhbHVlID0gcGFyZW50VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBhdHRhY2hLZXkgPSBhd2FpdCB0aGlzLmV2YWx1YXRlQXR0YWNoS2V5KHBhcmVudFZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkUHJvZHVjZXIgIT0gdW5kZWZpbmVkICYmIHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPSB0aGlzLmF0dGFjaGVkUHJvZHVjZXIub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5sYXN0QXR0YWNoS2V5ID09IHVuZGVmaW5lZCB8fCB0aGlzLmxhc3RBdHRhY2hLZXkgIT09IGF0dGFjaEtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdEF0dGFjaEtleSA9IGF0dGFjaEtleTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRQcm9kdWNlciAhPSB1bmRlZmluZWQgJiYgdGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5lbmRPYnNlcnZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRQcm9kdWNlciA9IGF3YWl0IHRoaXMuYXR0YWNoRmFjdG9yeShwYXJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciA9IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5vbk5leHQodGhpcy5oYW5kbGVDaGFuZ2VBdHRhY2hlZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkUHJvZHVjZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZFByb2dyYW1TdGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaGVkVmFsdWUgPSBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5sYXN0QXR0YWNoZWRWYWx1ZSA9IGF0dGFjaGVkVmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5qb2luVmFsdWVzKHBhcmVudFZhbHVlLCBhdHRhY2hlZFZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbWl0TmV4dFZhbHVlKHZhbHVlOiBUTyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBhd2FpdCBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25OZXh0KGxpc3RlbmVyOiAobmV4dFZhbHVlOiBUTykgPT4gUHJvbWlzZTx2b2lkPik6IERldGFjaExpc3RlbmVyIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRldGFjaFBhcmVudExpc3RlbmVyID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIgPSB0aGlzLnBhcmVudC5vbk5leHQodGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCAmJiB0aGlzLmRldGFjaFBhcmVudExpc3RlbmVyID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIgPSB0aGlzLmF0dGFjaGVkUHJvZHVjZXIub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSA9IGFzeW5jIChhdHRhY2hlZFZhbHVlOiBUQSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0aGlzLmxhc3RBdHRhY2hlZFZhbHVlID0gYXR0YWNoZWRWYWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmF3YWl0aW5nTGFzdEF0dGFjaGVkVmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxhc3RQYXJlbnRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkUHJvZ3JhbVN0YXRlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0TmV4dFZhbHVlKGF3YWl0IHRoaXMuam9pblZhbHVlcyh0aGlzLmxhc3RQYXJlbnRWYWx1ZSwgYXR0YWNoZWRWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlQ2hhbmdlUGFyZW50VmFsdWUgPSBhc3luYyAocGFyZW50VmFsdWU6IFRJKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIHRoaXMubGFzdFBhcmVudFZhbHVlID0gcGFyZW50VmFsdWU7XG4gICAgICAgIGNvbnN0IGF0dGFjaEtleSA9IGF3YWl0IHRoaXMuZXZhbHVhdGVBdHRhY2hLZXkocGFyZW50VmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCAmJiB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPSB0aGlzLmF0dGFjaGVkUHJvZHVjZXIub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGFzdEF0dGFjaEtleSA9PSB1bmRlZmluZWQgfHwgdGhpcy5sYXN0QXR0YWNoS2V5ICE9PSBhdHRhY2hLZXkpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdEF0dGFjaEtleSA9IGF0dGFjaEtleTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCAmJiB0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hdHRhY2hlZFByb2R1Y2VyID0gYXdhaXQgdGhpcy5hdHRhY2hGYWN0b3J5KHBhcmVudFZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPSB0aGlzLmF0dGFjaGVkUHJvZHVjZXIub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRQcm9kdWNlciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWRQcm9ncmFtU3RhdGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8g0J/RgNC+0YHRgtC+INC90LXQvNC90L7Qs9C+INC+0LHQvtC20LTQtdC8LCDQstC00YDRg9CzINC/0YDQuNC00ZHRgiDQtNGA0YPQs9C+0LUgYXR0YWNoZWRWYWx1ZVxuICAgICAgICB0aGlzLmF3YWl0aW5nTGFzdEF0dGFjaGVkVmFsdWUgPSB0cnVlO1xuICAgICAgICBhd2FpdCBkZWxheSg3MDApO1xuICAgICAgICB0aGlzLmF3YWl0aW5nTGFzdEF0dGFjaGVkVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGF0dGFjaGVkVmFsdWUgPSB0aGlzLmxhc3RBdHRhY2hlZFZhbHVlO1xuICAgICAgICBpZiAoYXR0YWNoZWRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF0dGFjaGVkVmFsdWUgPSBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdE5leHRWYWx1ZShhd2FpdCB0aGlzLmpvaW5WYWx1ZXMocGFyZW50VmFsdWUsIGF0dGFjaGVkVmFsdWUpKTtcbiAgICB9O1xufVxuXG5leHBvcnQgY2xhc3MgRXhlY3V0ZU9uVmFsdWVQcm9kdWNlcjxUPiBleHRlbmRzIENoYWluYWJsZVZhbHVlUHJvZHVjZXI8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbjogKHZhbHVlOiBUKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD4sIGFjdGlvbjogKHZhbHVlOiBUKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVudFZhbHVlKCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCBnZXRDdXJyZW50VmFsdWUgPSBhc3luYyAoKTogUHJvbWlzZTxUPiA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMucGFyZW50LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5leHQobGlzdGVuZXI6IChuZXh0VmFsdWU6IFQpID0+IFByb21pc2U8dm9pZD4pOiBEZXRhY2hMaXN0ZW5lciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5vbk5leHQoYXN5bmMgcGFyZW50VmFsdWUgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmVudFZhbHVlO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRFcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNmb3JtVmFsdWVQcm9kdWNlcjxUSSwgVE8+IGV4dGVuZHMgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUTz4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUST47XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2Zvcm1GdW5jdGlvbjogKHZhbHVlOiBUSSkgPT4gUHJvbWlzZTxUTz47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUST4sIHRyYW5zZm9ybUZ1bmN0aW9uOiAodmFsdWU6IFRJKSA9PiBQcm9taXNlPFRPPikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1GdW5jdGlvbiA9IHRyYW5zZm9ybUZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBiZWdpbk9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmJlZ2luT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbmRPYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5lbmRPYnNlcnZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUTz4ge1xuICAgICAgICBjb25zdCBnZXRDdXJyZW50VmFsdWUgPSBhc3luYyAoKTogUHJvbWlzZTxUTz4gPT4gdGhpcy50cmFuc2Zvcm1GdW5jdGlvbihhd2FpdCB0aGlzLnBhcmVudC5jdXJyZW50VmFsdWUpO1xuICAgICAgICByZXR1cm4gZ2V0Q3VycmVudFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChsaXN0ZW5lcjogKG5leHRWYWx1ZTogVE8pID0+IFByb21pc2U8dm9pZD4pOiBEZXRhY2hMaXN0ZW5lciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5vbk5leHQoYXN5bmMgcGFyZW50VmFsdWUgPT4ge1xuICAgICAgICAgICAgYXdhaXQgbGlzdGVuZXIoYXdhaXQgdGhpcy50cmFuc2Zvcm1GdW5jdGlvbihwYXJlbnRWYWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcjxULCBUSSwgVE8+IGV4dGVuZHMgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUT1tdPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFQ+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3BsaXRGdW5jdGlvbjogKGlucHV0OiBUKSA9PiBUSVtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2V0S2V5OiAoaW5wdXQ6IFRJKSA9PiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYWN0b3J5OiAoaW5wdXQ6IFRJKSA9PiBJVmFsdWVQcm9kdWNlcjxUTz47XG4gICAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnM6IEFycmF5PFZhbHVlTGlzdGVuZXI8VE9bXT4+ID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFpbnM6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogSVZhbHVlUHJvZHVjZXI8VE8+O1xuICAgICAgICAgICAgbGFzdFZhbHVlOiB1bmRlZmluZWQgfCBUTztcbiAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBEZXRhY2hMaXN0ZW5lcjtcbiAgICAgICAgfTtcbiAgICB9ID0ge307XG4gICAgcHJpdmF0ZSBpc0luT2JzZXJ2ZVN0YXRlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD4sXG4gICAgICAgIHNwbGl0RnVuY3Rpb246IChpbnB1dDogVCkgPT4gVElbXSxcbiAgICAgICAgZ2V0S2V5OiAoaW5wdXQ6IFRJKSA9PiBzdHJpbmcsXG4gICAgICAgIGZhY3Rvcnk6IChpbnB1dDogVEkpID0+IElWYWx1ZVByb2R1Y2VyPFRPPlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5zcGxpdEZ1bmN0aW9uID0gc3BsaXRGdW5jdGlvbjtcbiAgICAgICAgdGhpcy5nZXRLZXkgPSBnZXRLZXk7XG4gICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7XG4gICAgICAgIHRoaXMucGFyZW50Lm9uTmV4dCh0aGlzLmhhbmRsZUNoYW5nZVBhcmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUT1tdPiB7XG4gICAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9IGFzeW5jICgpOiBQcm9taXNlPFRPW10+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuc3BsaXRGdW5jdGlvbihhd2FpdCB0aGlzLnBhcmVudC5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBUT1tdID0gW107XG4gICAgICAgICAgICBjb25zdCBlcnJvcnM6IFJlYXNvbk9yRXJyb3JbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFZhbHVlUHJvZHVjZXIgPSB0aGlzLmZhY3RvcnkodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2hpbGRWYWx1ZVByb2R1Y2VyLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFZhbHVlID0gYXdhaXQgY2hpbGRWYWx1ZVByb2R1Y2VyLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogY2hpbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IGNoaWxkVmFsdWVQcm9kdWNlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBjaGlsZFZhbHVlUHJvZHVjZXIub25OZXh0KHggPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbih4LCBrZXkpKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogY2hpbGRWYWx1ZVByb2R1Y2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IGNoaWxkVmFsdWVQcm9kdWNlci5vbk5leHQoeCA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKHgsIGtleSkpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JzWzBdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvcnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZWRFcnJvcihcIlRoZXJlIGFyZSBlcnJvcnNcIiwgLi4uZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBnZXRDdXJyZW50VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhdGVWYWx1ZXModGhpcy5jaGFpbnMpKSB7XG4gICAgICAgICAgICBhd2FpdCB2YWx1ZS52YWx1ZVByb2R1Y2VyLmVuZE9ic2VydmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25OZXh0KGxpc3RlbmVyOiAobmV4dFZhbHVlOiBUT1tdKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBlbWl0VmFsdWUodmFsdWU6IFRPW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgICAgICAgYXdhaXQgbGlzdGVuZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b01hcCh2YWx1ZXM6IFRJW10pOiB7IFtrZXk6IHN0cmluZ106IFRJIH0ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogVEkgfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgcmVzdWx0W3RoaXMuZ2V0S2V5KHZhbHVlKV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4gPSBhc3luYyAobmV4dFZhbHVlOiBUTywga2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgY29uc3QgY2hhaW5WYWx1ZSA9IHRoaXMuY2hhaW5zW2tleV07XG4gICAgICAgIGlmIChjaGFpblZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2hhaW5WYWx1ZS5sYXN0VmFsdWUgPSBuZXh0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VmFsdWUoXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuY2hhaW5zKVxuICAgICAgICAgICAgICAgIC5tYXAoeCA9PiB4Lmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZUNoYW5nZVBhcmVudCA9IGFzeW5jIChpbnB1dDogVCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnNwbGl0RnVuY3Rpb24oaW5wdXQpO1xuICAgICAgICBjb25zdCBuZXh0VmFsdWVzTWFwID0gdGhpcy50b01hcCh2YWx1ZXMpO1xuXG4gICAgICAgIGNvbnN0IG5ld0tleXMgPSBfLmRpZmZlcmVuY2UoT2JqZWN0LmtleXMobmV4dFZhbHVlc01hcCksIE9iamVjdC5rZXlzKHRoaXMuY2hhaW5zKSk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRLZXlzID0gXy5kaWZmZXJlbmNlKE9iamVjdC5rZXlzKHRoaXMuY2hhaW5zKSwgT2JqZWN0LmtleXMobmV4dFZhbHVlc01hcCkpO1xuICAgICAgICBmb3IgKGNvbnN0IG5ld0tleSBvZiBuZXdLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDaGFpbiA9IHRoaXMuZmFjdG9yeShuZXh0VmFsdWVzTWFwW25ld0tleV0gPz8gcmVqZWN0KCkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ld0NoYWluLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDaGFpblZhbHVlID0gYXdhaXQgbmV3Q2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5zW25ld0tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbmV3Q2hhaW5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogbmV3Q2hhaW4sXG4gICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBuZXdDaGFpbi5vbk5leHQobmV4dFZhbHVlID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4obmV4dFZhbHVlLCBuZXdLZXkpKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNbbmV3S2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IG5ld0NoYWluLFxuICAgICAgICAgICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogbmV3Q2hhaW4ub25OZXh0KG5leHRWYWx1ZSA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKG5leHRWYWx1ZSwgbmV3S2V5KSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHJlbW92ZWRLZXkgb2YgcmVtb3ZlZEtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRDaGFpbiA9IHRoaXMuY2hhaW5zW3JlbW92ZWRLZXldO1xuICAgICAgICAgICAgcmVtb3ZlZENoYWluPy5kZXRhY2hMaXN0ZW5lcigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlbW92ZWRDaGFpbj8udmFsdWVQcm9kdWNlci5lbmRPYnNlcnZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyDQryDQvdC1INC30L3QsNGOLCDQutCw0Log0YLRg9GCINC/0YDQsNCy0LjQu9GM0L3QvlxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWR5bmFtaWMtZGVsZXRlXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jaGFpbnNbcmVtb3ZlZEtleV07XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VmFsdWUoXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuY2hhaW5zKVxuICAgICAgICAgICAgICAgIC5tYXAoeCA9PiB4Lmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICAgICAgICApO1xuICAgIH07XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhbGxlbFNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyPFQsIFRJLCBUTz4gZXh0ZW5kcyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPFRPW10+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBzcGxpdEZ1bmN0aW9uOiAoaW5wdXQ6IFQpID0+IFRJW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXRLZXk6IChpbnB1dDogVEkpID0+IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZhY3Rvcnk6IChpbnB1dDogVEkpID0+IElWYWx1ZVByb2R1Y2VyPFRPPiB8IFByb21pc2U8SVZhbHVlUHJvZHVjZXI8VE8+PjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVyczogQXJyYXk8VmFsdWVMaXN0ZW5lcjxUT1tdPj4gPSBbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYWluczoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBJVmFsdWVQcm9kdWNlcjxUTz47XG4gICAgICAgICAgICBsYXN0VmFsdWU6IHVuZGVmaW5lZCB8IFRPO1xuICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IERldGFjaExpc3RlbmVyO1xuICAgICAgICB9O1xuICAgIH0gPSB7fTtcbiAgICBwcml2YXRlIGlzSW5PYnNlcnZlU3RhdGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUPixcbiAgICAgICAgc3BsaXRGdW5jdGlvbjogKGlucHV0OiBUKSA9PiBUSVtdLFxuICAgICAgICBnZXRLZXk6IChpbnB1dDogVEkpID0+IHN0cmluZyxcbiAgICAgICAgZmFjdG9yeTogKGlucHV0OiBUSSkgPT4gSVZhbHVlUHJvZHVjZXI8VE8+IHwgUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUTz4+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLnNwbGl0RnVuY3Rpb24gPSBzcGxpdEZ1bmN0aW9uO1xuICAgICAgICB0aGlzLmdldEtleSA9IGdldEtleTtcbiAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTtcbiAgICAgICAgdGhpcy5wYXJlbnQub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFRPW10+IHtcbiAgICAgICAgY29uc3QgZ2V0Q3VycmVudFZhbHVlID0gYXN5bmMgKCk6IFByb21pc2U8VE9bXT4gPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5zcGxpdEZ1bmN0aW9uKGF3YWl0IHRoaXMucGFyZW50LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFRPW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yczogUmVhc29uT3JFcnJvcltdID0gW107XG4gICAgICAgICAgICBjb25zdCBjcHVMaW1pdCA9IGdldENwdUxpbWl0cygpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBVc2UgbGltaXQ6ICR7Y3B1TGltaXR9YCk7XG4gICAgICAgICAgICBjb25zdCBjb25jdXJyZW5jeUxpbWl0ID0gcExpbWl0KGNwdUxpbWl0KTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHZhbHVlcy5tYXAoKHZhbHVlLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICAgICAgY29uY3VycmVuY3lMaW1pdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFZhbHVlUHJvZHVjZXIgPSBhd2FpdCB0aGlzLmZhY3RvcnkodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNoaWxkVmFsdWVQcm9kdWNlci5iZWdpbk9ic2VydmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRWYWx1ZSA9IGF3YWl0IGNoaWxkVmFsdWVQcm9kdWNlci5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGNoaWxkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5zW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogY2hpbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogY2hpbGRWYWx1ZVByb2R1Y2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogY2hpbGRWYWx1ZVByb2R1Y2VyLm9uTmV4dCh4ID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4oeCwga2V5KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IGNoaWxkVmFsdWVQcm9kdWNlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IGNoaWxkVmFsdWVQcm9kdWNlci5vbk5leHQoeCA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKHgsIGtleSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JzWzBdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvcnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZWRFcnJvcihcIlRoZXJlIGFyZSBlcnJvcnNcIiwgLi4uZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBnZXRDdXJyZW50VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmNoYWlucykpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hhaW5zW2tleV0/LnZhbHVlUHJvZHVjZXIuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNJbk9ic2VydmVTdGF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5leHQobGlzdGVuZXI6IChuZXh0VmFsdWU6IFRPW10pID0+IFByb21pc2U8dm9pZD4pOiBEZXRhY2hMaXN0ZW5lciB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGVtaXRWYWx1ZSh2YWx1ZTogVE9bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBhd2FpdCBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRvTWFwKHZhbHVlczogVElbXSk6IHsgW2tleTogc3RyaW5nXTogVEkgfSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBUSSB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICByZXN1bHRbdGhpcy5nZXRLZXkodmFsdWUpXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbiA9IGFzeW5jIChuZXh0VmFsdWU6IFRPLCBrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBjb25zdCBjaGFpblZhbHVlID0gdGhpcy5jaGFpbnNba2V5XTtcbiAgICAgICAgaWYgKGNoYWluVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjaGFpblZhbHVlLmxhc3RWYWx1ZSA9IG5leHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRWYWx1ZShcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGFpbnMpXG4gICAgICAgICAgICAgICAgLm1hcCh4ID0+IHgubGFzdFZhbHVlKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlQ2hhbmdlUGFyZW50ID0gYXN5bmMgKGlucHV0OiBUKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuc3BsaXRGdW5jdGlvbihpbnB1dCk7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZXNNYXAgPSB0aGlzLnRvTWFwKHZhbHVlcyk7XG5cbiAgICAgICAgY29uc3QgbmV3S2V5cyA9IF8uZGlmZmVyZW5jZShPYmplY3Qua2V5cyhuZXh0VmFsdWVzTWFwKSwgT2JqZWN0LmtleXModGhpcy5jaGFpbnMpKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEtleXMgPSBfLmRpZmZlcmVuY2UoT2JqZWN0LmtleXModGhpcy5jaGFpbnMpLCBPYmplY3Qua2V5cyhuZXh0VmFsdWVzTWFwKSk7XG4gICAgICAgIGZvciAoY29uc3QgbmV3S2V5IG9mIG5ld0tleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NoYWluID0gYXdhaXQgdGhpcy5mYWN0b3J5KG5leHRWYWx1ZXNNYXBbbmV3S2V5XSA/PyByZWplY3QoKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3Q2hhaW4uYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NoYWluVmFsdWUgPSBhd2FpdCBuZXdDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNbbmV3S2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBuZXdDaGFpblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBuZXdDaGFpbixcbiAgICAgICAgICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IG5ld0NoYWluLm9uTmV4dChuZXh0VmFsdWUgPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbihuZXh0VmFsdWUsIG5ld0tleSkpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYWluc1tuZXdLZXldID0ge1xuICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogbmV3Q2hhaW4sXG4gICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBuZXdDaGFpbi5vbk5leHQobmV4dFZhbHVlID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4obmV4dFZhbHVlLCBuZXdLZXkpKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcmVtb3ZlZEtleSBvZiByZW1vdmVkS2V5cykge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZENoYWluID0gdGhpcy5jaGFpbnNbcmVtb3ZlZEtleV07XG4gICAgICAgICAgICByZW1vdmVkQ2hhaW4/LmRldGFjaExpc3RlbmVyKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcmVtb3ZlZENoYWluPy52YWx1ZVByb2R1Y2VyLmVuZE9ic2VydmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vINCvINC90LUg0LfQvdCw0Y4sINC60LDQuiDRgtGD0YIg0L/RgNCw0LLQuNC70YzQvdC+XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZHluYW1pYy1kZWxldGVcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNoYWluc1tyZW1vdmVkS2V5XTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRWYWx1ZShcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGFpbnMpXG4gICAgICAgICAgICAgICAgLm1hcCh4ID0+IHgubGFzdFZhbHVlKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gICAgICAgICk7XG4gICAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFNraXBVcGRhdGVzVW50aWxOZXh0Q29tcGxldGVkUHJvZHVjZXI8VD4gZXh0ZW5kcyBPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2U8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUPjtcbiAgICBwcml2YXRlIGRldGFjaEZyb21QYXJlbnQ/OiBEZXRhY2hMaXN0ZW5lcjtcbiAgICBwcml2YXRlIGxhc3RQYXJlbnRWYWx1ZT86IFQ7XG5cbiAgICBwcml2YXRlIG5leHRFbWl0VG9Qcm9jZXNzPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBwcml2YXRlIGN1cnJlbnRseVByb2Nlc3NpbmdFbWl0PzogUHJvbWlzZTx2b2lkPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFQ+KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBnZXRDdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RQYXJlbnRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFBhcmVudFZhbHVlID0gYXdhaXQgdGhpcy5wYXJlbnQuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGFzdFBhcmVudFZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZFByb2dyYW1TdGF0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sYXN0UGFyZW50VmFsdWU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJlZ2luTGlzdGVuaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICAgICAgaWYgKHRoaXMuZGV0YWNoRnJvbVBhcmVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoRnJvbVBhcmVudCA9IHRoaXMucGFyZW50Lm9uTmV4dChuZXh0VmFsdWUgPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRWYWx1ZShuZXh0VmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBzdG9wTGlzdGVuaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5kZXRhY2hGcm9tUGFyZW50ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2hGcm9tUGFyZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlQ2hhbmdlUGFyZW50VmFsdWUobmV4dFZhbHVlOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMubGFzdFBhcmVudFZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgICB0aGlzLm5leHRFbWl0VG9Qcm9jZXNzID0gXy5vbmNlKCgpID0+IHRoaXMuZW1pdFVwZGF0ZShuZXh0VmFsdWUpKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmN1cnJlbnRseVByb2Nlc3NpbmdFbWl0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQgPSB0aGlzLm5leHRFbWl0VG9Qcm9jZXNzKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQ7XG4gICAgICAgIHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZWxheSh0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQgfCB1bmRlZmluZWQgfCBudWxsKTogaW5wdXQgaXMgVCB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFFLGNBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFlBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGFBQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLGdCQUFBLEdBQUFMLE9BQUE7QUFHQSxlQUFlTSxJQUFJQSxDQUFBLEVBQWtCO0VBQ2pDO0FBQUE7QUFHRyxNQUFNQyxzQkFBc0IsQ0FBaUM7RUFBQUMsWUFBQTtJQUFBLEtBQy9DQyxjQUFjLEdBQWdDLEVBQUU7RUFBQTtFQUUxREMsTUFBTUEsQ0FBQ0MsU0FBMEMsRUFBa0I7SUFDdEUsTUFBTSxJQUFJQyxLQUFLLENBQUMsZUFBZSxDQUFDO0VBQ3BDO0VBRU9DLE9BQU9BLENBQUND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
|