@kontur.candy/tools 2.185.0 → 2.185.2
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/candy.js +0 -0
- package/distr/Common/AsyncUtils.js +1 -1
- package/distr/Common/AsyncUtils.js.map +1 -0
- package/distr/Common/AutoValidationUtils.js +2 -3
- package/distr/Common/AutoValidationUtils.js.map +1 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js +2 -3
- package/distr/Common/CandyApiClient/CandyApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/CandyApiClientContext.js +4 -5
- package/distr/Common/CandyApiClient/CandyApiClientContext.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +1 -1
- package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +1 -1
- package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +1 -1
- package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +1 -1
- package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +2 -3
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +2 -3
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +4 -5
- package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +3 -5
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +1 -1
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
- package/distr/Common/CandyApiClient/ICandyApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/IsBuffer.js +1 -1
- package/distr/Common/CandyApiClient/IsBuffer.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +1 -1
- package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +1 -1
- package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +3 -5
- package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftFullId.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftFullId.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js +2 -3
- package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +3 -5
- package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +2 -3
- package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +2 -3
- package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Guid.js +1 -1
- package/distr/Common/CandyApiClient/Types/Guid.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js +1 -1
- package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +1 -1
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js +1 -1
- package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +2 -3
- package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +1 -1
- package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js +2 -3
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/AndExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/AndExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CompareExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CompareExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CountCallExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CountCallExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/DecimalConstantExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/DecimalConstantExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/InstanceIdCallExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/InstanceIdCallExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/NotExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/NotExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/OrExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/OrExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringConstantExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringConstantExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringMatchExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringMatchExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/SumCallExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/SumCallExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/TernaryExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/TernaryExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/ValueReferenceExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/ValueReferenceExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryRequest.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SelectClause.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SelectClause.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SortingRule.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SortingRule.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +2 -3
- package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/TestClassification.js +1 -1
- package/distr/Common/CandyApiClient/Types/TestClassification.js.map +1 -0
- package/distr/Common/CollectionUtils.js +1 -1
- package/distr/Common/CollectionUtils.js.map +1 -0
- package/distr/Common/CommonConstants/SectionNames.js +1 -1
- package/distr/Common/CommonConstants/SectionNames.js.map +1 -0
- package/distr/Common/Comparers.js +1 -1
- package/distr/Common/Comparers.js.map +1 -0
- package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +3 -3
- package/distr/Common/EmotionStorybookWorkaroundViaAliases.js.map +1 -0
- package/distr/Common/EndPoints.js +6 -11
- package/distr/Common/EndPoints.js.map +1 -0
- package/distr/Common/Enums/ButtonSettingsTypeEnum.js +2 -3
- package/distr/Common/Enums/ButtonSettingsTypeEnum.js.map +1 -0
- package/distr/Common/Errors.js +1 -1
- package/distr/Common/Errors.js.map +1 -0
- package/distr/Common/ExtractGFVPath/ExtractGFVPath.js +1 -1
- package/distr/Common/ExtractGFVPath/ExtractGFVPath.js.map +1 -0
- package/distr/Common/FSPrinterClient/FSPrinterClient.js +2 -2
- package/distr/Common/FSPrinterClient/FSPrinterClient.js.map +1 -0
- package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js +1 -1
- package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js.map +1 -0
- package/distr/Common/FSPrinterClient/IFSPrinterClient.js +6 -11
- package/distr/Common/FSPrinterClient/IFSPrinterClient.js.map +1 -0
- package/distr/Common/FormActionHandlers/ContextualActionNames.js +1 -1
- package/distr/Common/FormActionHandlers/ContextualActionNames.js.map +1 -0
- package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +1 -1
- package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js.map +1 -0
- package/distr/Common/FormPathUtils.js +2 -2
- package/distr/Common/FormPathUtils.js.map +1 -0
- package/distr/Common/Funcs.js +1 -1
- package/distr/Common/Funcs.js.map +1 -0
- package/distr/Common/GFV.js +1 -1
- package/distr/Common/GFV.js.map +1 -0
- package/distr/Common/Hooks/UseLocalStorage.js +3 -3
- package/distr/Common/Hooks/UseLocalStorage.js.map +1 -0
- package/distr/Common/HttpClient/AuthenticationMode.js +1 -1
- package/distr/Common/HttpClient/AuthenticationMode.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +2 -3
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +2 -3
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/Fetch.js +1 -1
- package/distr/Common/HttpClient/FetchImplementation/Fetch.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +2 -3
- package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +1 -1
- package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js.map +1 -0
- package/distr/Common/HttpClient/HttpClient.js +2 -2
- package/distr/Common/HttpClient/HttpClient.js.map +1 -0
- package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +1 -1
- package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js.map +1 -0
- package/distr/Common/HttpClient/IHttpClient.js +1 -1
- package/distr/Common/HttpClient/IHttpClient.js.map +1 -0
- package/distr/Common/IndentString.js +1 -1
- package/distr/Common/IndentString.js.map +1 -0
- package/distr/Common/IntRangeUtils.js +1 -1
- package/distr/Common/IntRangeUtils.js.map +1 -0
- package/distr/Common/IterableUtils.js +1 -1
- package/distr/Common/IterableUtils.js.map +1 -0
- package/distr/Common/KCLangRuntimeUtils.js +1 -1
- package/distr/Common/KCLangRuntimeUtils.js.map +1 -0
- package/distr/Common/ModelPath/AbsoluteModelFieldPath.js +4 -2
- package/distr/Common/ModelPath/AbsoluteModelFieldPath.js.map +1 -0
- package/distr/Common/ModelPath/BuildIterationSequence.js +1 -1
- package/distr/Common/ModelPath/BuildIterationSequence.js.map +1 -0
- package/distr/Common/ModelPath/EachCurrentCollision.js +2 -3
- package/distr/Common/ModelPath/EachCurrentCollision.js.map +1 -0
- package/distr/Common/ModelPath/IEquatable.js +1 -1
- package/distr/Common/ModelPath/IEquatable.js.map +1 -0
- package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +1 -1
- package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js.map +1 -0
- package/distr/Common/ModelPath/Map/Map2.js +1 -1
- package/distr/Common/ModelPath/Map/Map2.js.map +1 -0
- package/distr/Common/ModelPath/Map/ModelPathMap.js +1 -1
- package/distr/Common/ModelPath/Map/ModelPathMap.js.map +1 -0
- package/distr/Common/ModelPath/ModelPath.js +1 -1
- package/distr/Common/ModelPath/ModelPath.js.map +1 -0
- package/distr/Common/ModelPath/ModelPathBuilder.js +1 -1
- package/distr/Common/ModelPath/ModelPathBuilder.js.map +1 -0
- package/distr/Common/ModelPath/ModelPathHelper.js +1 -1
- package/distr/Common/ModelPath/ModelPathHelper.js.map +1 -0
- package/distr/Common/ModelPath/PathMatcher.js +2 -3
- package/distr/Common/ModelPath/PathMatcher.js.map +1 -0
- package/distr/Common/ModelPath/PathSplitHelper.js +1 -1
- package/distr/Common/ModelPath/PathSplitHelper.js.map +1 -0
- package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +1 -1
- package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js.map +1 -0
- package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +1 -1
- package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js.map +1 -0
- package/distr/Common/ModelPath/Set/ModelPathSet.js +1 -1
- package/distr/Common/ModelPath/Set/ModelPathSet.js.map +1 -0
- package/distr/Common/ModelPath/Set/Set2.js +1 -1
- package/distr/Common/ModelPath/Set/Set2.js.map +1 -0
- package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +1 -1
- package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +1 -1
- package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +1 -1
- package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js.map +1 -0
- package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +1 -1
- package/distr/Common/NidusClient/Fakes/FakeNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +1 -1
- package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/INidusClient.js +1 -1
- package/distr/Common/NidusClient/INidusClient.js.map +1 -0
- package/distr/Common/NidusClient/NidusClientContext.js +3 -3
- package/distr/Common/NidusClient/NidusClientContext.js.map +1 -0
- package/distr/Common/NidusClient/NidusClientImpl.js +3 -3
- package/distr/Common/NidusClient/NidusClientImpl.js.map +1 -0
- package/distr/Common/PathConstants.js +4 -7
- package/distr/Common/PathConstants.js.map +1 -0
- package/distr/Common/PicklistApiClient/IPicklistApiClient.js +1 -1
- package/distr/Common/PicklistApiClient/IPicklistApiClient.js.map +1 -0
- package/distr/Common/PicklistApiClient/PicklistApiClient.js +1 -1
- package/distr/Common/PicklistApiClient/PicklistApiClient.js.map +1 -0
- package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js +1 -1
- package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js.map +1 -0
- package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js +1 -1
- package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js.map +1 -0
- package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js +1 -1
- package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js.map +1 -0
- package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js +1 -1
- package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js.map +1 -0
- package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js +1 -1
- package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js.map +1 -0
- package/distr/Common/RngSchemeTypes/types.js +1 -1
- package/distr/Common/RngSchemeTypes/types.js.map +1 -0
- package/distr/Common/StringArrayKey.js +1 -1
- package/distr/Common/StringArrayKey.js.map +1 -0
- package/distr/Common/TextExtractor/TextExtractorTypes.js +1 -1
- package/distr/Common/TextExtractor/TextExtractorTypes.js.map +1 -0
- package/distr/Common/TypingUtils.js +1 -1
- package/distr/Common/TypingUtils.js.map +1 -0
- package/distr/Common/UUID.js +1 -1
- package/distr/Common/UUID.js.map +1 -0
- package/distr/Common/UseAsyncEffect.js +3 -3
- package/distr/Common/UseAsyncEffect.js.map +1 -0
- package/distr/Common/UseShowOnce.js +1 -1
- package/distr/Common/UseShowOnce.js.map +1 -0
- package/distr/Common/UseTypedSelector.js +2 -3
- package/distr/Common/UseTypedSelector.js.map +1 -0
- package/distr/Common/WellKnownDirectories.js +1 -1
- package/distr/Common/WellKnownDirectories.js.map +1 -0
- package/distr/Common/getRngSchemaFilename.js +1 -1
- package/distr/Common/getRngSchemaFilename.js.map +1 -0
- package/distr/Common/hashUtils.js +1 -1
- package/distr/Common/hashUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +9 -4
- package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +6 -12
- package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +1 -1
- package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +3 -3
- package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +4 -3
- package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +1 -1
- package/distr/Tools/src/BuildTasks/Engine/EngineSource.js.map +1 -0
- package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +1 -1
- package/distr/Tools/src/BuildTasks/EngineStructureUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +1 -1
- package/distr/Tools/src/BuildTasks/EngineVersionUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/FSTask.js +1 -1
- package/distr/Tools/src/BuildTasks/FSTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js +3 -3
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +3 -3
- package/distr/Tools/src/BuildTasks/Form/GenerateForm.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +1 -1
- package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +1 -1
- package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +3 -3
- package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +1 -1
- package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +3 -3
- package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +4 -3
- package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +1 -1
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +4 -4
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +1 -1
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +1 -1
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +1 -1
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +1 -1
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +1 -1
- package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +5 -5
- package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js.map +1 -0
- package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +3 -3
- package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ReadFormSource.js +1 -1
- package/distr/Tools/src/BuildTasks/ReadFormSource.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +2 -3
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Version.js +3 -3
- package/distr/Tools/src/BuildTasks/Version.js.map +1 -0
- package/distr/Tools/src/BuildTasks/WriteFormMeta.js +1 -1
- package/distr/Tools/src/BuildTasks/WriteFormMeta.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +2 -3
- package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +2 -3
- package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +1 -1
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +3 -3
- package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +3 -5
- package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +4 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +5 -6
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +4 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +2 -3
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +4 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +4 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +2 -3
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +4 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +4 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +4 -4
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +3 -3
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js.map +1 -0
- package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +2 -3
- package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js.map +1 -0
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +3 -5
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js.map +1 -0
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +1 -1
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +2 -3
- package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +1 -1
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js.map +1 -0
- package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +2 -3
- package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +2 -2
- package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js.map +1 -0
- package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +4 -5
- package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/fetchfunctions/{gfv}.fetchfunctions.js +1 -1
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/fetchfunctions/{gfv}.fetchfunctions.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +2 -3
- 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 +2 -3
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +2 -3
- package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +3 -3
- package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js.map +1 -0
- package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +2 -3
- package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +1 -1
- package/distr/Tools/src/CLICommands/Localization/RunLocalization.js.map +1 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js +2 -3
- package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js +3 -3
- package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js.map +1 -0
- package/distr/Tools/src/CLICommands/SugarExtractor/ExtractTextsFromSugarController.js +2 -3
- package/distr/Tools/src/CLICommands/SugarExtractor/ExtractTextsFromSugarController.js.map +1 -0
- package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js +1 -1
- package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js.map +1 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +3 -3
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js.map +1 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +2 -3
- package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js.map +1 -0
- package/distr/Tools/src/CandyCLI.js +1 -1
- package/distr/Tools/src/CandyCLI.js.map +1 -0
- package/distr/Tools/src/CheckNodeJsVersion.js +2 -3
- package/distr/Tools/src/CheckNodeJsVersion.js.map +1 -0
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +1 -1
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js.map +1 -0
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +3 -3
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js.map +1 -0
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +1 -1
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js.map +1 -0
- package/distr/Tools/src/Commons/ErrorUntyped.js +1 -1
- package/distr/Tools/src/Commons/ErrorUntyped.js.map +1 -0
- package/distr/Tools/src/Commons/EventObject.js +1 -1
- package/distr/Tools/src/Commons/EventObject.js.map +1 -0
- package/distr/Tools/src/Commons/ExecUtils.js +1 -1
- package/distr/Tools/src/Commons/ExecUtils.js.map +1 -0
- package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +1 -1
- package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js.map +1 -0
- package/distr/Tools/src/Commons/FormGlobsUtils.js +1 -1
- package/distr/Tools/src/Commons/FormGlobsUtils.js.map +1 -0
- package/distr/Tools/src/Commons/FormLocationInfo.js +1 -1
- package/distr/Tools/src/Commons/FormLocationInfo.js.map +1 -0
- package/distr/Tools/src/Commons/FsUtils.js +5 -7
- package/distr/Tools/src/Commons/FsUtils.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +2 -3
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +3 -3
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +2 -3
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +6 -6
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js.map +1 -0
- package/distr/Tools/src/Commons/Locks/Lock.js +1 -1
- package/distr/Tools/src/Commons/Locks/Lock.js.map +1 -0
- package/distr/Tools/src/Commons/Locks/LockHandle.js +1 -1
- package/distr/Tools/src/Commons/Locks/LockHandle.js.map +1 -0
- package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +1 -1
- package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/ELKLogger.js +2 -3
- package/distr/Tools/src/Commons/Logging/ELKLogger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/ILogger.js +1 -1
- package/distr/Tools/src/Commons/Logging/ILogger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +1 -1
- package/distr/Tools/src/Commons/Logging/InMemoryLogger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/Logger.js +1 -1
- package/distr/Tools/src/Commons/Logging/Logger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/StaticLogger.js +1 -1
- package/distr/Tools/src/Commons/Logging/StaticLogger.js.map +1 -0
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +1 -1
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js.map +1 -0
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +3 -3
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js.map +1 -0
- package/distr/Tools/src/Commons/PathPattern.js +1 -1
- package/distr/Tools/src/Commons/PathPattern.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/AggregatedError.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/BuildTask.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/BuildTask.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +5 -5
- package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +3 -3
- package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/FixedDirectoryEntriesProducer.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/FixedDirectoryEntriesProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/Observe.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TimingUtils.js +1 -1
- package/distr/Tools/src/Commons/TimingUtils.js.map +1 -0
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +3 -3
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js.map +1 -0
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +2 -2
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js.map +1 -0
- package/distr/Tools/src/GenerateReadMe.js +1 -1
- package/distr/Tools/src/GenerateReadMe.js.map +1 -0
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.LICENSE.txt +5 -3
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.LICENSE.txt +5 -3
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/distr/Tools/src/Options/CandyToolOptions.js +2 -3
- package/distr/Tools/src/Options/CandyToolOptions.js.map +1 -0
- package/distr/Tools/src/ReadFarmConfig.js +1 -1
- package/distr/Tools/src/ReadFarmConfig.js.map +1 -0
- package/distr/Tools/src/SelfUpdate.js +3 -3
- package/distr/Tools/src/SelfUpdate.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +681 -686
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +581 -866
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.LICENSE.txt +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +1 -1
- package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +1 -1
- package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +1 -1
- package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js.map +1 -0
- package/package.json +24 -24
- package/CHANGELOG.md +0 -1659
|
@@ -1,838 +1,547 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
/*! For license information please see client.min.js.LICENSE.txt */
|
|
4
3
|
!function () {
|
|
5
4
|
"use strict";
|
|
6
5
|
|
|
7
|
-
var
|
|
8
|
-
function
|
|
9
|
-
return
|
|
10
|
-
|
|
6
|
+
var e = {};
|
|
7
|
+
function t(e) {
|
|
8
|
+
return t = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
|
|
9
|
+
return typeof e;
|
|
10
|
+
} : function (e) {
|
|
11
|
+
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
|
|
12
|
+
}, t(e);
|
|
13
|
+
}
|
|
14
|
+
function r(e) {
|
|
15
|
+
var r = function (e, r) {
|
|
16
|
+
if ("object" != t(e) || !e) return e;
|
|
17
|
+
var n = e[Symbol.toPrimitive];
|
|
18
|
+
if (void 0 !== n) {
|
|
19
|
+
var o = n.call(e, "string");
|
|
20
|
+
if ("object" != t(o)) return o;
|
|
21
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
22
|
+
}
|
|
23
|
+
return String(e);
|
|
24
|
+
}(e);
|
|
25
|
+
return "symbol" == t(r) ? r : r + "";
|
|
26
|
+
}
|
|
27
|
+
function n(e, t, n) {
|
|
28
|
+
return (t = r(t)) in e ? Object.defineProperty(e, t, {
|
|
29
|
+
value: n,
|
|
11
30
|
enumerable: !0,
|
|
12
31
|
configurable: !0,
|
|
13
32
|
writable: !0
|
|
14
|
-
}) : t
|
|
33
|
+
}) : e[t] = n, e;
|
|
15
34
|
}
|
|
16
|
-
function
|
|
17
|
-
(null ==
|
|
18
|
-
for (var r = 0, n =
|
|
35
|
+
function o(e, t) {
|
|
36
|
+
(null == t || t > e.length) && (t = e.length);
|
|
37
|
+
for (var r = 0, n = Array(t); r < t; r++) n[r] = e[r];
|
|
19
38
|
return n;
|
|
20
39
|
}
|
|
21
|
-
|
|
40
|
+
e.g = function () {
|
|
22
41
|
if ("object" == typeof globalThis) return globalThis;
|
|
23
42
|
try {
|
|
24
43
|
return this || new Function("return this")();
|
|
25
|
-
} catch (
|
|
44
|
+
} catch (e) {
|
|
26
45
|
if ("object" == typeof window) return window;
|
|
27
46
|
}
|
|
28
47
|
}();
|
|
29
|
-
var
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
48
|
+
var i = "undefined" != typeof globalThis && globalThis || "undefined" != typeof self && self || void 0 !== e.g && e.g || {},
|
|
49
|
+
a = ("URLSearchParams" in i),
|
|
50
|
+
s = "Symbol" in i && "iterator" in Symbol,
|
|
51
|
+
u = "FileReader" in i && "Blob" in i && function () {
|
|
33
52
|
try {
|
|
34
53
|
return new Blob(), !0;
|
|
35
|
-
} catch (
|
|
54
|
+
} catch (e) {
|
|
36
55
|
return !1;
|
|
37
56
|
}
|
|
38
57
|
}(),
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (
|
|
42
|
-
|
|
43
|
-
return
|
|
58
|
+
c = ("FormData" in i),
|
|
59
|
+
l = ("ArrayBuffer" in i);
|
|
60
|
+
if (l) var f = ["[object Int8Array]", "[object Uint8Array]", "[object Uint8ClampedArray]", "[object Int16Array]", "[object Uint16Array]", "[object Int32Array]", "[object Uint32Array]", "[object Float32Array]", "[object Float64Array]"],
|
|
61
|
+
h = ArrayBuffer.isView || function (e) {
|
|
62
|
+
return e && f.indexOf(Object.prototype.toString.call(e)) > -1;
|
|
44
63
|
};
|
|
45
|
-
function
|
|
46
|
-
if ("string" != typeof
|
|
47
|
-
return
|
|
64
|
+
function d(e) {
|
|
65
|
+
if ("string" != typeof e && (e = String(e)), /[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e) || "" === e) throw new TypeError('Invalid character in header field name: "' + e + '"');
|
|
66
|
+
return e.toLowerCase();
|
|
48
67
|
}
|
|
49
|
-
function
|
|
50
|
-
return "string" != typeof
|
|
68
|
+
function p(e) {
|
|
69
|
+
return "string" != typeof e && (e = String(e)), e;
|
|
51
70
|
}
|
|
52
|
-
function
|
|
53
|
-
var
|
|
71
|
+
function y(e) {
|
|
72
|
+
var t = {
|
|
54
73
|
next: function () {
|
|
55
|
-
var
|
|
74
|
+
var t = e.shift();
|
|
56
75
|
return {
|
|
57
|
-
done: void 0 ===
|
|
58
|
-
value:
|
|
76
|
+
done: void 0 === t,
|
|
77
|
+
value: t
|
|
59
78
|
};
|
|
60
79
|
}
|
|
61
80
|
};
|
|
62
|
-
return
|
|
63
|
-
return
|
|
64
|
-
}),
|
|
81
|
+
return s && (t[Symbol.iterator] = function () {
|
|
82
|
+
return t;
|
|
83
|
+
}), t;
|
|
65
84
|
}
|
|
66
|
-
function
|
|
67
|
-
this.map = {},
|
|
68
|
-
this.append(
|
|
69
|
-
}, this) : Array.isArray(
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
85
|
+
function m(e) {
|
|
86
|
+
this.map = {}, e instanceof m ? e.forEach(function (e, t) {
|
|
87
|
+
this.append(t, e);
|
|
88
|
+
}, this) : Array.isArray(e) ? e.forEach(function (e) {
|
|
89
|
+
if (2 != e.length) throw new TypeError("Headers constructor: expected name/value pair to be length 2, found" + e.length);
|
|
90
|
+
this.append(e[0], e[1]);
|
|
91
|
+
}, this) : e && Object.getOwnPropertyNames(e).forEach(function (t) {
|
|
92
|
+
this.append(t, e[t]);
|
|
73
93
|
}, this);
|
|
74
94
|
}
|
|
75
|
-
function
|
|
76
|
-
if (
|
|
77
|
-
t.bodyUsed = !0;
|
|
95
|
+
function v(e) {
|
|
96
|
+
if (!e._noBody) return e.bodyUsed ? Promise.reject(new TypeError("Already read")) : void (e.bodyUsed = !0);
|
|
78
97
|
}
|
|
79
|
-
function
|
|
80
|
-
return new Promise(function (
|
|
81
|
-
|
|
82
|
-
e
|
|
83
|
-
},
|
|
84
|
-
r(
|
|
98
|
+
function b(e) {
|
|
99
|
+
return new Promise(function (t, r) {
|
|
100
|
+
e.onload = function () {
|
|
101
|
+
t(e.result);
|
|
102
|
+
}, e.onerror = function () {
|
|
103
|
+
r(e.error);
|
|
85
104
|
};
|
|
86
105
|
});
|
|
87
106
|
}
|
|
88
|
-
function
|
|
89
|
-
var
|
|
90
|
-
r =
|
|
91
|
-
return
|
|
107
|
+
function w(e) {
|
|
108
|
+
var t = new FileReader(),
|
|
109
|
+
r = b(t);
|
|
110
|
+
return t.readAsArrayBuffer(e), r;
|
|
92
111
|
}
|
|
93
|
-
function
|
|
94
|
-
if (
|
|
95
|
-
var
|
|
96
|
-
return
|
|
112
|
+
function g(e) {
|
|
113
|
+
if (e.slice) return e.slice(0);
|
|
114
|
+
var t = new Uint8Array(e.byteLength);
|
|
115
|
+
return t.set(new Uint8Array(e)), t.buffer;
|
|
97
116
|
}
|
|
98
|
-
function
|
|
99
|
-
return this.bodyUsed = !1, this._initBody = function (
|
|
100
|
-
var
|
|
101
|
-
this.bodyUsed = this.bodyUsed, this._bodyInit =
|
|
102
|
-
},
|
|
103
|
-
var
|
|
104
|
-
if (
|
|
117
|
+
function E() {
|
|
118
|
+
return this.bodyUsed = !1, this._initBody = function (e) {
|
|
119
|
+
var t;
|
|
120
|
+
this.bodyUsed = this.bodyUsed, this._bodyInit = e, e ? "string" == typeof e ? this._bodyText = e : u && Blob.prototype.isPrototypeOf(e) ? this._bodyBlob = e : c && FormData.prototype.isPrototypeOf(e) ? this._bodyFormData = e : a && URLSearchParams.prototype.isPrototypeOf(e) ? this._bodyText = e.toString() : l && u && (t = e) && DataView.prototype.isPrototypeOf(t) ? (this._bodyArrayBuffer = g(e.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : l && (ArrayBuffer.prototype.isPrototypeOf(e) || h(e)) ? this._bodyArrayBuffer = g(e) : this._bodyText = e = Object.prototype.toString.call(e) : (this._noBody = !0, this._bodyText = ""), this.headers.get("content-type") || ("string" == typeof e ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : a && URLSearchParams.prototype.isPrototypeOf(e) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
|
|
121
|
+
}, u && (this.blob = function () {
|
|
122
|
+
var e = v(this);
|
|
123
|
+
if (e) return e;
|
|
105
124
|
if (this._bodyBlob) return Promise.resolve(this._bodyBlob);
|
|
106
125
|
if (this._bodyArrayBuffer) return Promise.resolve(new Blob([this._bodyArrayBuffer]));
|
|
107
126
|
if (this._bodyFormData) throw new Error("could not read FormData body as blob");
|
|
108
127
|
return Promise.resolve(new Blob([this._bodyText]));
|
|
109
|
-
}, this.arrayBuffer = function () {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
128
|
+
}), this.arrayBuffer = function () {
|
|
129
|
+
if (this._bodyArrayBuffer) return v(this) || (ArrayBuffer.isView(this._bodyArrayBuffer) ? Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset, this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength)) : Promise.resolve(this._bodyArrayBuffer));
|
|
130
|
+
if (u) return this.blob().then(w);
|
|
131
|
+
throw new Error("could not read as ArrayBuffer");
|
|
132
|
+
}, this.text = function () {
|
|
133
|
+
var e,
|
|
134
|
+
t,
|
|
114
135
|
r,
|
|
115
|
-
n
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if (
|
|
119
|
-
|
|
136
|
+
n,
|
|
137
|
+
o,
|
|
138
|
+
i = v(this);
|
|
139
|
+
if (i) return i;
|
|
140
|
+
if (this._bodyBlob) return e = this._bodyBlob, r = b(t = new FileReader()), o = (n = /charset=([A-Za-z0-9_-]+)/.exec(e.type)) ? n[1] : "utf-8", t.readAsText(e, o), r;
|
|
141
|
+
if (this._bodyArrayBuffer) return Promise.resolve(function (e) {
|
|
142
|
+
for (var t = new Uint8Array(e), r = new Array(t.length), n = 0; n < t.length; n++) r[n] = String.fromCharCode(t[n]);
|
|
120
143
|
return r.join("");
|
|
121
144
|
}(this._bodyArrayBuffer));
|
|
122
145
|
if (this._bodyFormData) throw new Error("could not read FormData body as text");
|
|
123
146
|
return Promise.resolve(this._bodyText);
|
|
124
|
-
},
|
|
125
|
-
return this.text().then(
|
|
147
|
+
}, c && (this.formData = function () {
|
|
148
|
+
return this.text().then(k);
|
|
126
149
|
}), this.json = function () {
|
|
127
150
|
return this.text().then(JSON.parse);
|
|
128
151
|
}, this;
|
|
129
152
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
var r = this.map[
|
|
133
|
-
this.map[
|
|
134
|
-
},
|
|
135
|
-
delete this.map[
|
|
136
|
-
},
|
|
137
|
-
return
|
|
138
|
-
},
|
|
139
|
-
return this.map.hasOwnProperty(
|
|
140
|
-
},
|
|
141
|
-
this.map[
|
|
142
|
-
},
|
|
143
|
-
for (var r in this.map) this.map.hasOwnProperty(r) &&
|
|
144
|
-
},
|
|
145
|
-
var
|
|
146
|
-
return this.forEach(function (
|
|
147
|
-
|
|
148
|
-
}),
|
|
149
|
-
},
|
|
150
|
-
var
|
|
151
|
-
return this.forEach(function (
|
|
152
|
-
|
|
153
|
-
}),
|
|
154
|
-
},
|
|
155
|
-
var
|
|
156
|
-
return this.forEach(function (
|
|
157
|
-
|
|
158
|
-
}),
|
|
159
|
-
},
|
|
160
|
-
var
|
|
161
|
-
function
|
|
162
|
-
if (!(this instanceof
|
|
153
|
+
m.prototype.append = function (e, t) {
|
|
154
|
+
e = d(e), t = p(t);
|
|
155
|
+
var r = this.map[e];
|
|
156
|
+
this.map[e] = r ? r + ", " + t : t;
|
|
157
|
+
}, m.prototype.delete = function (e) {
|
|
158
|
+
delete this.map[d(e)];
|
|
159
|
+
}, m.prototype.get = function (e) {
|
|
160
|
+
return e = d(e), this.has(e) ? this.map[e] : null;
|
|
161
|
+
}, m.prototype.has = function (e) {
|
|
162
|
+
return this.map.hasOwnProperty(d(e));
|
|
163
|
+
}, m.prototype.set = function (e, t) {
|
|
164
|
+
this.map[d(e)] = p(t);
|
|
165
|
+
}, m.prototype.forEach = function (e, t) {
|
|
166
|
+
for (var r in this.map) this.map.hasOwnProperty(r) && e.call(t, this.map[r], r, this);
|
|
167
|
+
}, m.prototype.keys = function () {
|
|
168
|
+
var e = [];
|
|
169
|
+
return this.forEach(function (t, r) {
|
|
170
|
+
e.push(r);
|
|
171
|
+
}), y(e);
|
|
172
|
+
}, m.prototype.values = function () {
|
|
173
|
+
var e = [];
|
|
174
|
+
return this.forEach(function (t) {
|
|
175
|
+
e.push(t);
|
|
176
|
+
}), y(e);
|
|
177
|
+
}, m.prototype.entries = function () {
|
|
178
|
+
var e = [];
|
|
179
|
+
return this.forEach(function (t, r) {
|
|
180
|
+
e.push([r, t]);
|
|
181
|
+
}), y(e);
|
|
182
|
+
}, s && (m.prototype[Symbol.iterator] = m.prototype.entries);
|
|
183
|
+
var O = ["CONNECT", "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT", "TRACE"];
|
|
184
|
+
function A(e, t) {
|
|
185
|
+
if (!(this instanceof A)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
|
|
163
186
|
var r,
|
|
164
187
|
n,
|
|
165
|
-
o = (
|
|
166
|
-
if (
|
|
167
|
-
if (
|
|
168
|
-
this.url =
|
|
169
|
-
} else this.url = String(
|
|
170
|
-
if (this.credentials =
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
188
|
+
o = (t = t || {}).body;
|
|
189
|
+
if (e instanceof A) {
|
|
190
|
+
if (e.bodyUsed) throw new TypeError("Already read");
|
|
191
|
+
this.url = e.url, this.credentials = e.credentials, t.headers || (this.headers = new m(e.headers)), this.method = e.method, this.mode = e.mode, this.signal = e.signal, o || null == e._bodyInit || (o = e._bodyInit, e.bodyUsed = !0);
|
|
192
|
+
} else this.url = String(e);
|
|
193
|
+
if (this.credentials = t.credentials || this.credentials || "same-origin", !t.headers && this.headers || (this.headers = new m(t.headers)), this.method = (n = (r = t.method || this.method || "GET").toUpperCase(), O.indexOf(n) > -1 ? n : r), this.mode = t.mode || this.mode || null, this.signal = t.signal || this.signal || function () {
|
|
194
|
+
if ("AbortController" in i) return new AbortController().signal;
|
|
195
|
+
}(), this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && o) throw new TypeError("Body not allowed for GET or HEAD requests");
|
|
196
|
+
if (this._initBody(o), !("GET" !== this.method && "HEAD" !== this.method || "no-store" !== t.cache && "no-cache" !== t.cache)) {
|
|
197
|
+
var a = /([?&])_=[^&]*/;
|
|
198
|
+
a.test(this.url) ? this.url = this.url.replace(a, "$1_=" + new Date().getTime()) : this.url += (/\?/.test(this.url) ? "&" : "?") + "_=" + new Date().getTime();
|
|
174
199
|
}
|
|
175
200
|
}
|
|
176
|
-
function
|
|
177
|
-
var
|
|
178
|
-
return
|
|
179
|
-
if (
|
|
180
|
-
var r =
|
|
201
|
+
function k(e) {
|
|
202
|
+
var t = new FormData();
|
|
203
|
+
return e.trim().split("&").forEach(function (e) {
|
|
204
|
+
if (e) {
|
|
205
|
+
var r = e.split("="),
|
|
181
206
|
n = r.shift().replace(/\+/g, " "),
|
|
182
207
|
o = r.join("=").replace(/\+/g, " ");
|
|
183
|
-
|
|
208
|
+
t.append(decodeURIComponent(n), decodeURIComponent(o));
|
|
184
209
|
}
|
|
185
|
-
}),
|
|
210
|
+
}), t;
|
|
186
211
|
}
|
|
187
|
-
function
|
|
188
|
-
if (!(this instanceof
|
|
189
|
-
|
|
212
|
+
function j(e, t) {
|
|
213
|
+
if (!(this instanceof j)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
|
|
214
|
+
if (t || (t = {}), this.type = "default", this.status = void 0 === t.status ? 200 : t.status, this.status < 200 || this.status > 599) throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].");
|
|
215
|
+
this.ok = this.status >= 200 && this.status < 300, this.statusText = void 0 === t.statusText ? "" : "" + t.statusText, this.headers = new m(t.headers), this.url = t.url || "", this._initBody(e);
|
|
190
216
|
}
|
|
191
|
-
|
|
192
|
-
return new
|
|
217
|
+
A.prototype.clone = function () {
|
|
218
|
+
return new A(this, {
|
|
193
219
|
body: this._bodyInit
|
|
194
220
|
});
|
|
195
|
-
},
|
|
196
|
-
return new
|
|
221
|
+
}, E.call(A.prototype), E.call(j.prototype), j.prototype.clone = function () {
|
|
222
|
+
return new j(this._bodyInit, {
|
|
197
223
|
status: this.status,
|
|
198
224
|
statusText: this.statusText,
|
|
199
|
-
headers: new
|
|
225
|
+
headers: new m(this.headers),
|
|
200
226
|
url: this.url
|
|
201
227
|
});
|
|
202
|
-
},
|
|
203
|
-
var
|
|
204
|
-
status:
|
|
228
|
+
}, j.error = function () {
|
|
229
|
+
var e = new j(null, {
|
|
230
|
+
status: 200,
|
|
205
231
|
statusText: ""
|
|
206
232
|
});
|
|
207
|
-
return
|
|
233
|
+
return e.ok = !1, e.status = 0, e.type = "error", e;
|
|
208
234
|
};
|
|
209
|
-
var
|
|
210
|
-
|
|
211
|
-
if (-1 ===
|
|
212
|
-
return new
|
|
213
|
-
status:
|
|
235
|
+
var T = [301, 302, 303, 307, 308];
|
|
236
|
+
j.redirect = function (e, t) {
|
|
237
|
+
if (-1 === T.indexOf(t)) throw new RangeError("Invalid status code");
|
|
238
|
+
return new j(null, {
|
|
239
|
+
status: t,
|
|
214
240
|
headers: {
|
|
215
|
-
location:
|
|
241
|
+
location: e
|
|
216
242
|
}
|
|
217
243
|
});
|
|
218
244
|
};
|
|
219
|
-
var
|
|
245
|
+
var S = i.DOMException;
|
|
220
246
|
try {
|
|
221
|
-
new
|
|
222
|
-
} catch (
|
|
223
|
-
(
|
|
224
|
-
this.message =
|
|
225
|
-
var r = Error(
|
|
247
|
+
new S();
|
|
248
|
+
} catch (e) {
|
|
249
|
+
(S = function (e, t) {
|
|
250
|
+
this.message = e, this.name = t;
|
|
251
|
+
var r = Error(e);
|
|
226
252
|
this.stack = r.stack;
|
|
227
|
-
}).prototype = Object.create(Error.prototype),
|
|
253
|
+
}).prototype = Object.create(Error.prototype), S.prototype.constructor = S;
|
|
228
254
|
}
|
|
229
|
-
function
|
|
230
|
-
return new Promise(function (r,
|
|
231
|
-
var
|
|
232
|
-
if (
|
|
233
|
-
var
|
|
234
|
-
function
|
|
235
|
-
|
|
255
|
+
function P(e, t) {
|
|
256
|
+
return new Promise(function (r, n) {
|
|
257
|
+
var o = new A(e, t);
|
|
258
|
+
if (o.signal && o.signal.aborted) return n(new S("Aborted", "AbortError"));
|
|
259
|
+
var a = new XMLHttpRequest();
|
|
260
|
+
function s() {
|
|
261
|
+
a.abort();
|
|
236
262
|
}
|
|
237
|
-
|
|
238
|
-
var
|
|
239
|
-
|
|
263
|
+
if (a.onload = function () {
|
|
264
|
+
var e,
|
|
265
|
+
t,
|
|
240
266
|
n = {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
var r = t.split(":"),
|
|
267
|
+
statusText: a.statusText,
|
|
268
|
+
headers: (e = a.getAllResponseHeaders() || "", t = new m(), e.replace(/\r?\n[\t ]+/g, " ").split("\r").map(function (e) {
|
|
269
|
+
return 0 === e.indexOf("\n") ? e.substr(1, e.length) : e;
|
|
270
|
+
}).forEach(function (e) {
|
|
271
|
+
var r = e.split(":"),
|
|
247
272
|
n = r.shift().trim();
|
|
248
273
|
if (n) {
|
|
249
274
|
var o = r.join(":").trim();
|
|
250
|
-
|
|
275
|
+
try {
|
|
276
|
+
t.append(n, o);
|
|
277
|
+
} catch (e) {
|
|
278
|
+
console.warn("Response " + e.message);
|
|
279
|
+
}
|
|
251
280
|
}
|
|
252
|
-
}),
|
|
281
|
+
}), t)
|
|
253
282
|
};
|
|
254
|
-
n.url = "responseURL" in
|
|
255
|
-
var
|
|
283
|
+
0 === o.url.indexOf("file://") && (a.status < 200 || a.status > 599) ? n.status = 200 : n.status = a.status, n.url = "responseURL" in a ? a.responseURL : n.headers.get("X-Request-URL");
|
|
284
|
+
var i = "response" in a ? a.response : a.responseText;
|
|
256
285
|
setTimeout(function () {
|
|
257
|
-
r(new
|
|
286
|
+
r(new j(i, n));
|
|
258
287
|
}, 0);
|
|
259
|
-
},
|
|
288
|
+
}, a.onerror = function () {
|
|
260
289
|
setTimeout(function () {
|
|
261
|
-
|
|
290
|
+
n(new TypeError("Network request failed"));
|
|
262
291
|
}, 0);
|
|
263
|
-
},
|
|
292
|
+
}, a.ontimeout = function () {
|
|
264
293
|
setTimeout(function () {
|
|
265
|
-
|
|
294
|
+
n(new TypeError("Network request timed out"));
|
|
266
295
|
}, 0);
|
|
267
|
-
},
|
|
296
|
+
}, a.onabort = function () {
|
|
268
297
|
setTimeout(function () {
|
|
269
|
-
|
|
298
|
+
n(new S("Aborted", "AbortError"));
|
|
270
299
|
}, 0);
|
|
271
|
-
},
|
|
300
|
+
}, a.open(o.method, function (e) {
|
|
272
301
|
try {
|
|
273
|
-
return "" ===
|
|
274
|
-
} catch (
|
|
275
|
-
return
|
|
302
|
+
return "" === e && i.location.href ? i.location.href : e;
|
|
303
|
+
} catch (t) {
|
|
304
|
+
return e;
|
|
276
305
|
}
|
|
277
|
-
}(
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
306
|
+
}(o.url), !0), "include" === o.credentials ? a.withCredentials = !0 : "omit" === o.credentials && (a.withCredentials = !1), "responseType" in a && (u ? a.responseType = "blob" : l && (a.responseType = "arraybuffer")), t && "object" == typeof t.headers && !(t.headers instanceof m || i.Headers && t.headers instanceof i.Headers)) {
|
|
307
|
+
var c = [];
|
|
308
|
+
Object.getOwnPropertyNames(t.headers).forEach(function (e) {
|
|
309
|
+
c.push(d(e)), a.setRequestHeader(e, p(t.headers[e]));
|
|
310
|
+
}), o.headers.forEach(function (e, t) {
|
|
311
|
+
-1 === c.indexOf(t) && a.setRequestHeader(t, e);
|
|
312
|
+
});
|
|
313
|
+
} else o.headers.forEach(function (e, t) {
|
|
314
|
+
a.setRequestHeader(t, e);
|
|
315
|
+
});
|
|
316
|
+
o.signal && (o.signal.addEventListener("abort", s), a.onreadystatechange = function () {
|
|
317
|
+
4 === a.readyState && o.signal.removeEventListener("abort", s);
|
|
318
|
+
}), a.send(void 0 === o._bodyInit ? null : o._bodyInit);
|
|
284
319
|
});
|
|
285
320
|
}
|
|
286
|
-
function
|
|
287
|
-
if (!(
|
|
321
|
+
function _(e, t) {
|
|
322
|
+
if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
|
|
288
323
|
}
|
|
289
|
-
function
|
|
290
|
-
for (var
|
|
291
|
-
var
|
|
292
|
-
|
|
324
|
+
function B(e, t) {
|
|
325
|
+
for (var n = 0; n < t.length; n++) {
|
|
326
|
+
var o = t[n];
|
|
327
|
+
o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, r(o.key), o);
|
|
293
328
|
}
|
|
294
329
|
}
|
|
295
|
-
function
|
|
296
|
-
return
|
|
330
|
+
function C(e, t, r) {
|
|
331
|
+
return t && B(e.prototype, t), r && B(e, r), Object.defineProperty(e, "prototype", {
|
|
297
332
|
writable: !1
|
|
298
|
-
}),
|
|
333
|
+
}), e;
|
|
299
334
|
}
|
|
300
|
-
|
|
301
|
-
var
|
|
302
|
-
function
|
|
303
|
-
|
|
304
|
-
}
|
|
305
|
-
return T(t, null, [{
|
|
335
|
+
P.polyfill = !0, i.fetch || (i.fetch = P, i.Headers = m, i.Request = A, i.Response = j);
|
|
336
|
+
var R = function () {
|
|
337
|
+
return C(function e() {
|
|
338
|
+
_(this, e);
|
|
339
|
+
}, null, [{
|
|
306
340
|
key: "script",
|
|
307
|
-
value: function (
|
|
341
|
+
value: function (e, t) {
|
|
308
342
|
var r = !1,
|
|
309
343
|
n = document.getElementsByTagName("head")[0] || document.documentElement,
|
|
310
344
|
o = document.createElement("script");
|
|
311
345
|
function i() {
|
|
312
|
-
r || o.readyState && "loaded" !== o.readyState && "complete" !== o.readyState || (r = !0,
|
|
346
|
+
r || o.readyState && "loaded" !== o.readyState && "complete" !== o.readyState || (r = !0, t());
|
|
313
347
|
}
|
|
314
348
|
o.onload = i, o.onreadystatechange = i, o.onerror = function () {
|
|
315
|
-
o.parentNode && o.parentNode.removeChild(o),
|
|
316
|
-
}, o.src =
|
|
349
|
+
o.parentNode && o.parentNode.removeChild(o), t(new Error("Error while loading script."));
|
|
350
|
+
}, o.src = e, o.setAttribute("crossorigin", "use-credentials"), n.appendChild(o);
|
|
317
351
|
}
|
|
318
352
|
}, {
|
|
319
353
|
key: "styleSheet",
|
|
320
|
-
value: function (
|
|
354
|
+
value: function (e, t, r) {
|
|
321
355
|
var n,
|
|
322
356
|
o = null !== (n = document.getElementsByTagName("head")[0]) && void 0 !== n ? n : document.documentElement,
|
|
323
357
|
i = document.createElement("link");
|
|
324
358
|
i.setAttribute("rel", "stylesheet"), i.setAttribute("type", "text/css"), i.addEventListener("load", function () {
|
|
325
359
|
return r(void 0);
|
|
326
360
|
}), i.addEventListener("error", function () {
|
|
327
|
-
r(
|
|
328
|
-
}), o.appendChild(i), i.setAttribute("href",
|
|
361
|
+
r(t ? void 0 : new Error("Error while loading stylesheet."));
|
|
362
|
+
}), o.appendChild(i), i.setAttribute("href", e);
|
|
329
363
|
}
|
|
330
|
-
}])
|
|
364
|
+
}]);
|
|
331
365
|
}();
|
|
332
|
-
function
|
|
333
|
-
return "string" == typeof
|
|
366
|
+
function I(e) {
|
|
367
|
+
return "string" == typeof e ? "false" !== e && "true" === e : Boolean(e);
|
|
334
368
|
}
|
|
335
|
-
var
|
|
336
|
-
authorized:
|
|
369
|
+
var D = {
|
|
370
|
+
authorized: I("{authorized}"),
|
|
337
371
|
cauldronApiUrl: "{cauldronApiUrl}",
|
|
338
|
-
isTestServer:
|
|
339
|
-
renderCachingForIE8:
|
|
340
|
-
normalizationOnServer:
|
|
372
|
+
isTestServer: I("{isTestServer}"),
|
|
373
|
+
renderCachingForIE8: I("{renderCachingForIE8}"),
|
|
374
|
+
normalizationOnServer: I("{normalizationOnServer}"),
|
|
341
375
|
normativeUrl: "{normativeUrl}",
|
|
342
376
|
resourcesVersion: "{resourcesVersion}",
|
|
343
377
|
konturDomains: "{konturDomains}"
|
|
344
378
|
};
|
|
345
|
-
function
|
|
346
|
-
return I = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) {
|
|
347
|
-
return typeof t;
|
|
348
|
-
} : function (t) {
|
|
349
|
-
return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t;
|
|
350
|
-
}, I(t);
|
|
351
|
-
}
|
|
352
|
-
function L(t, e, r, n, o, i, a) {
|
|
379
|
+
function U(e, t, r, n, o, i, a) {
|
|
353
380
|
try {
|
|
354
|
-
var
|
|
355
|
-
|
|
356
|
-
} catch (
|
|
357
|
-
return void r(
|
|
381
|
+
var s = e[i](a),
|
|
382
|
+
u = s.value;
|
|
383
|
+
} catch (e) {
|
|
384
|
+
return void r(e);
|
|
358
385
|
}
|
|
359
|
-
|
|
386
|
+
s.done ? t(u) : Promise.resolve(u).then(n, o);
|
|
360
387
|
}
|
|
361
|
-
function
|
|
388
|
+
function x(e) {
|
|
362
389
|
return function () {
|
|
363
|
-
var
|
|
390
|
+
var t = this,
|
|
364
391
|
r = arguments;
|
|
365
392
|
return new Promise(function (n, o) {
|
|
366
|
-
var i =
|
|
367
|
-
function a(
|
|
368
|
-
|
|
393
|
+
var i = e.apply(t, r);
|
|
394
|
+
function a(e) {
|
|
395
|
+
U(i, n, o, a, s, "next", e);
|
|
369
396
|
}
|
|
370
|
-
function
|
|
371
|
-
|
|
397
|
+
function s(e) {
|
|
398
|
+
U(i, n, o, a, s, "throw", e);
|
|
372
399
|
}
|
|
373
400
|
a(void 0);
|
|
374
401
|
});
|
|
375
402
|
};
|
|
376
403
|
}
|
|
377
|
-
function
|
|
378
|
-
return
|
|
379
|
-
return
|
|
380
|
-
},
|
|
404
|
+
function F(e) {
|
|
405
|
+
return F = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (e) {
|
|
406
|
+
return e.__proto__ || Object.getPrototypeOf(e);
|
|
407
|
+
}, F(e);
|
|
381
408
|
}
|
|
382
|
-
function
|
|
383
|
-
|
|
384
|
-
|
|
409
|
+
function M(e, t) {
|
|
410
|
+
return M = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (e, t) {
|
|
411
|
+
return e.__proto__ = t, e;
|
|
412
|
+
}, M(e, t);
|
|
413
|
+
}
|
|
414
|
+
function N(e, t) {
|
|
415
|
+
if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function");
|
|
416
|
+
e.prototype = Object.create(t && t.prototype, {
|
|
385
417
|
constructor: {
|
|
386
|
-
value:
|
|
418
|
+
value: e,
|
|
387
419
|
writable: !0,
|
|
388
420
|
configurable: !0
|
|
389
421
|
}
|
|
390
|
-
}), Object.defineProperty(
|
|
422
|
+
}), Object.defineProperty(e, "prototype", {
|
|
391
423
|
writable: !1
|
|
392
|
-
}),
|
|
393
|
-
}
|
|
394
|
-
function U(t) {
|
|
395
|
-
return U = Object.setPrototypeOf ? Object.getPrototypeOf : function (t) {
|
|
396
|
-
return t.__proto__ || Object.getPrototypeOf(t);
|
|
397
|
-
}, U(t);
|
|
424
|
+
}), t && M(e, t);
|
|
398
425
|
}
|
|
399
|
-
function
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
} catch (t) {
|
|
407
|
-
return !1;
|
|
408
|
-
}
|
|
409
|
-
}() ? Reflect.construct : function (t, e, r) {
|
|
410
|
-
var n = [null];
|
|
411
|
-
n.push.apply(n, e);
|
|
412
|
-
var o = new (Function.bind.apply(t, n))();
|
|
413
|
-
return r && D(o, r.prototype), o;
|
|
414
|
-
}, M.apply(null, arguments);
|
|
426
|
+
function L() {
|
|
427
|
+
try {
|
|
428
|
+
var e = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
429
|
+
} catch (e) {}
|
|
430
|
+
return (L = function () {
|
|
431
|
+
return !!e;
|
|
432
|
+
})();
|
|
415
433
|
}
|
|
416
|
-
function
|
|
417
|
-
var
|
|
418
|
-
return
|
|
419
|
-
if (null ===
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
434
|
+
function V(e) {
|
|
435
|
+
var t = "function" == typeof Map ? new Map() : void 0;
|
|
436
|
+
return V = function (e) {
|
|
437
|
+
if (null === e || !function (e) {
|
|
438
|
+
try {
|
|
439
|
+
return -1 !== Function.toString.call(e).indexOf("[native code]");
|
|
440
|
+
} catch (t) {
|
|
441
|
+
return "function" == typeof e;
|
|
442
|
+
}
|
|
443
|
+
}(e)) return e;
|
|
444
|
+
if ("function" != typeof e) throw new TypeError("Super expression must either be null or a function");
|
|
445
|
+
if (void 0 !== t) {
|
|
446
|
+
if (t.has(e)) return t.get(e);
|
|
447
|
+
t.set(e, r);
|
|
425
448
|
}
|
|
426
|
-
function
|
|
427
|
-
return
|
|
449
|
+
function r() {
|
|
450
|
+
return function (e, t, r) {
|
|
451
|
+
if (L()) return Reflect.construct.apply(null, arguments);
|
|
452
|
+
var n = [null];
|
|
453
|
+
n.push.apply(n, t);
|
|
454
|
+
var o = new (e.bind.apply(e, n))();
|
|
455
|
+
return r && M(o, r.prototype), o;
|
|
456
|
+
}(e, arguments, F(this).constructor);
|
|
428
457
|
}
|
|
429
|
-
return
|
|
458
|
+
return r.prototype = Object.create(e.prototype, {
|
|
430
459
|
constructor: {
|
|
431
|
-
value:
|
|
460
|
+
value: r,
|
|
432
461
|
enumerable: !1,
|
|
433
462
|
writable: !0,
|
|
434
463
|
configurable: !0
|
|
435
464
|
}
|
|
436
|
-
}),
|
|
437
|
-
},
|
|
465
|
+
}), M(r, e);
|
|
466
|
+
}, V(e);
|
|
438
467
|
}
|
|
439
|
-
function
|
|
440
|
-
|
|
441
|
-
if ("
|
|
442
|
-
if (
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
return
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
}
|
|
449
|
-
}();
|
|
450
|
-
return function () {
|
|
451
|
-
var r,
|
|
452
|
-
n = U(t);
|
|
453
|
-
if (e) {
|
|
454
|
-
var o = U(this).constructor;
|
|
455
|
-
r = Reflect.construct(n, arguments, o);
|
|
456
|
-
} else r = n.apply(this, arguments);
|
|
457
|
-
return function (t, e) {
|
|
458
|
-
if (e && ("object" === I(e) || "function" == typeof e)) return e;
|
|
459
|
-
if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
|
|
460
|
-
return function (t) {
|
|
461
|
-
if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
462
|
-
return t;
|
|
463
|
-
}(t);
|
|
464
|
-
}(this, r);
|
|
465
|
-
};
|
|
468
|
+
function H(e, r, n) {
|
|
469
|
+
return r = F(r), function (e, r) {
|
|
470
|
+
if (r && ("object" == t(r) || "function" == typeof r)) return r;
|
|
471
|
+
if (void 0 !== r) throw new TypeError("Derived constructors may only return object or undefined");
|
|
472
|
+
return function (e) {
|
|
473
|
+
if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
474
|
+
return e;
|
|
475
|
+
}(e);
|
|
476
|
+
}(e, z() ? Reflect.construct(r, n || [], F(e).constructor) : r.apply(e, n));
|
|
466
477
|
}
|
|
467
|
-
var G = function (t) {
|
|
468
|
-
R(r, t);
|
|
469
|
-
var e = V(r);
|
|
470
|
-
function r() {
|
|
471
|
-
return S(this, r), e.call(this, "Operation not implemented");
|
|
472
|
-
}
|
|
473
|
-
return T(r);
|
|
474
|
-
}(function (t) {
|
|
475
|
-
R(r, t);
|
|
476
|
-
var e = V(r);
|
|
477
|
-
function r(t) {
|
|
478
|
-
var n;
|
|
479
|
-
return S(this, r), (n = e.call(this, t)).name = n.constructor.name, n;
|
|
480
|
-
}
|
|
481
|
-
return T(r);
|
|
482
|
-
}(N(Error)));
|
|
483
478
|
function z() {
|
|
484
|
-
z = function () {
|
|
485
|
-
return t;
|
|
486
|
-
};
|
|
487
|
-
var t = {},
|
|
488
|
-
e = Object.prototype,
|
|
489
|
-
r = e.hasOwnProperty,
|
|
490
|
-
n = Object.defineProperty || function (t, e, r) {
|
|
491
|
-
t[e] = r.value;
|
|
492
|
-
},
|
|
493
|
-
o = "function" == typeof Symbol ? Symbol : {},
|
|
494
|
-
i = o.iterator || "@@iterator",
|
|
495
|
-
a = o.asyncIterator || "@@asyncIterator",
|
|
496
|
-
u = o.toStringTag || "@@toStringTag";
|
|
497
|
-
function s(t, e, r) {
|
|
498
|
-
return Object.defineProperty(t, e, {
|
|
499
|
-
value: r,
|
|
500
|
-
enumerable: !0,
|
|
501
|
-
configurable: !0,
|
|
502
|
-
writable: !0
|
|
503
|
-
}), t[e];
|
|
504
|
-
}
|
|
505
479
|
try {
|
|
506
|
-
|
|
507
|
-
} catch (
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
u = new A(o || []);
|
|
516
|
-
return n(a, "_invoke", {
|
|
517
|
-
value: E(t, r, u)
|
|
518
|
-
}), a;
|
|
519
|
-
}
|
|
520
|
-
function l(t, e, r) {
|
|
521
|
-
try {
|
|
522
|
-
return {
|
|
523
|
-
type: "normal",
|
|
524
|
-
arg: t.call(e, r)
|
|
525
|
-
};
|
|
526
|
-
} catch (t) {
|
|
527
|
-
return {
|
|
528
|
-
type: "throw",
|
|
529
|
-
arg: t
|
|
530
|
-
};
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
t.wrap = c;
|
|
534
|
-
var f = {};
|
|
535
|
-
function h() {}
|
|
536
|
-
function d() {}
|
|
537
|
-
function p() {}
|
|
538
|
-
var y = {};
|
|
539
|
-
s(y, i, function () {
|
|
540
|
-
return this;
|
|
541
|
-
});
|
|
542
|
-
var v = Object.getPrototypeOf,
|
|
543
|
-
m = v && v(v(_([])));
|
|
544
|
-
m && m !== e && r.call(m, i) && (y = m);
|
|
545
|
-
var b = p.prototype = h.prototype = Object.create(y);
|
|
546
|
-
function w(t) {
|
|
547
|
-
["next", "throw", "return"].forEach(function (e) {
|
|
548
|
-
s(t, e, function (t) {
|
|
549
|
-
return this._invoke(e, t);
|
|
550
|
-
});
|
|
551
|
-
});
|
|
552
|
-
}
|
|
553
|
-
function g(t, e) {
|
|
554
|
-
function o(n, i, a, u) {
|
|
555
|
-
var s = l(t[n], t, i);
|
|
556
|
-
if ("throw" !== s.type) {
|
|
557
|
-
var c = s.arg,
|
|
558
|
-
f = c.value;
|
|
559
|
-
return f && "object" == I(f) && r.call(f, "__await") ? e.resolve(f.__await).then(function (t) {
|
|
560
|
-
o("next", t, a, u);
|
|
561
|
-
}, function (t) {
|
|
562
|
-
o("throw", t, a, u);
|
|
563
|
-
}) : e.resolve(f).then(function (t) {
|
|
564
|
-
c.value = t, a(c);
|
|
565
|
-
}, function (t) {
|
|
566
|
-
return o("throw", t, a, u);
|
|
567
|
-
});
|
|
568
|
-
}
|
|
569
|
-
u(s.arg);
|
|
570
|
-
}
|
|
571
|
-
var i;
|
|
572
|
-
n(this, "_invoke", {
|
|
573
|
-
value: function (t, r) {
|
|
574
|
-
function n() {
|
|
575
|
-
return new e(function (e, n) {
|
|
576
|
-
o(t, r, e, n);
|
|
577
|
-
});
|
|
578
|
-
}
|
|
579
|
-
return i = i ? i.then(n, n) : n();
|
|
580
|
-
}
|
|
581
|
-
});
|
|
582
|
-
}
|
|
583
|
-
function E(t, e, r) {
|
|
584
|
-
var n = "suspendedStart";
|
|
585
|
-
return function (o, i) {
|
|
586
|
-
if ("executing" === n) throw new Error("Generator is already running");
|
|
587
|
-
if ("completed" === n) {
|
|
588
|
-
if ("throw" === o) throw i;
|
|
589
|
-
return {
|
|
590
|
-
value: void 0,
|
|
591
|
-
done: !0
|
|
592
|
-
};
|
|
593
|
-
}
|
|
594
|
-
for (r.method = o, r.arg = i;;) {
|
|
595
|
-
var a = r.delegate;
|
|
596
|
-
if (a) {
|
|
597
|
-
var u = O(a, r);
|
|
598
|
-
if (u) {
|
|
599
|
-
if (u === f) continue;
|
|
600
|
-
return u;
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
if ("next" === r.method) r.sent = r._sent = r.arg;else if ("throw" === r.method) {
|
|
604
|
-
if ("suspendedStart" === n) throw n = "completed", r.arg;
|
|
605
|
-
r.dispatchException(r.arg);
|
|
606
|
-
} else "return" === r.method && r.abrupt("return", r.arg);
|
|
607
|
-
n = "executing";
|
|
608
|
-
var s = l(t, e, r);
|
|
609
|
-
if ("normal" === s.type) {
|
|
610
|
-
if (n = r.done ? "completed" : "suspendedYield", s.arg === f) continue;
|
|
611
|
-
return {
|
|
612
|
-
value: s.arg,
|
|
613
|
-
done: r.done
|
|
614
|
-
};
|
|
615
|
-
}
|
|
616
|
-
"throw" === s.type && (n = "completed", r.method = "throw", r.arg = s.arg);
|
|
617
|
-
}
|
|
618
|
-
};
|
|
619
|
-
}
|
|
620
|
-
function O(t, e) {
|
|
621
|
-
var r = e.method,
|
|
622
|
-
n = t.iterator[r];
|
|
623
|
-
if (void 0 === n) return e.delegate = null, "throw" === r && t.iterator.return && (e.method = "return", e.arg = void 0, O(t, e), "throw" === e.method) || "return" !== r && (e.method = "throw", e.arg = new TypeError("The iterator does not provide a '" + r + "' method")), f;
|
|
624
|
-
var o = l(n, t.iterator, e.arg);
|
|
625
|
-
if ("throw" === o.type) return e.method = "throw", e.arg = o.arg, e.delegate = null, f;
|
|
626
|
-
var i = o.arg;
|
|
627
|
-
return i ? i.done ? (e[t.resultName] = i.value, e.next = t.nextLoc, "return" !== e.method && (e.method = "next", e.arg = void 0), e.delegate = null, f) : i : (e.method = "throw", e.arg = new TypeError("iterator result is not an object"), e.delegate = null, f);
|
|
628
|
-
}
|
|
629
|
-
function k(t) {
|
|
630
|
-
var e = {
|
|
631
|
-
tryLoc: t[0]
|
|
632
|
-
};
|
|
633
|
-
1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
|
|
634
|
-
}
|
|
635
|
-
function j(t) {
|
|
636
|
-
var e = t.completion || {};
|
|
637
|
-
e.type = "normal", delete e.arg, t.completion = e;
|
|
638
|
-
}
|
|
639
|
-
function A(t) {
|
|
640
|
-
this.tryEntries = [{
|
|
641
|
-
tryLoc: "root"
|
|
642
|
-
}], t.forEach(k, this), this.reset(!0);
|
|
643
|
-
}
|
|
644
|
-
function _(t) {
|
|
645
|
-
if (t) {
|
|
646
|
-
var e = t[i];
|
|
647
|
-
if (e) return e.call(t);
|
|
648
|
-
if ("function" == typeof t.next) return t;
|
|
649
|
-
if (!isNaN(t.length)) {
|
|
650
|
-
var n = -1,
|
|
651
|
-
o = function e() {
|
|
652
|
-
for (; ++n < t.length;) if (r.call(t, n)) return e.value = t[n], e.done = !1, e;
|
|
653
|
-
return e.value = void 0, e.done = !0, e;
|
|
654
|
-
};
|
|
655
|
-
return o.next = o;
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
return {
|
|
659
|
-
next: S
|
|
660
|
-
};
|
|
480
|
+
var e = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
481
|
+
} catch (e) {}
|
|
482
|
+
return (z = function () {
|
|
483
|
+
return !!e;
|
|
484
|
+
})();
|
|
485
|
+
}
|
|
486
|
+
var q = function (e) {
|
|
487
|
+
function t() {
|
|
488
|
+
return _(this, t), H(this, t, ["Operation not implemented"]);
|
|
661
489
|
}
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
490
|
+
return N(t, e), C(t);
|
|
491
|
+
}(function (e) {
|
|
492
|
+
function t(e) {
|
|
493
|
+
var r;
|
|
494
|
+
return _(this, t), (r = H(this, t, [e])).name = r.constructor.name, r;
|
|
667
495
|
}
|
|
668
|
-
return
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
value: d,
|
|
673
|
-
configurable: !0
|
|
674
|
-
}), d.displayName = s(p, u, "GeneratorFunction"), t.isGeneratorFunction = function (t) {
|
|
675
|
-
var e = "function" == typeof t && t.constructor;
|
|
676
|
-
return !!e && (e === d || "GeneratorFunction" === (e.displayName || e.name));
|
|
677
|
-
}, t.mark = function (t) {
|
|
678
|
-
return Object.setPrototypeOf ? Object.setPrototypeOf(t, p) : (t.__proto__ = p, s(t, u, "GeneratorFunction")), t.prototype = Object.create(b), t;
|
|
679
|
-
}, t.awrap = function (t) {
|
|
680
|
-
return {
|
|
681
|
-
__await: t
|
|
682
|
-
};
|
|
683
|
-
}, w(g.prototype), s(g.prototype, a, function () {
|
|
684
|
-
return this;
|
|
685
|
-
}), t.AsyncIterator = g, t.async = function (e, r, n, o, i) {
|
|
686
|
-
void 0 === i && (i = Promise);
|
|
687
|
-
var a = new g(c(e, r, n, o), i);
|
|
688
|
-
return t.isGeneratorFunction(r) ? a : a.next().then(function (t) {
|
|
689
|
-
return t.done ? t.value : a.next();
|
|
690
|
-
});
|
|
691
|
-
}, w(b), s(b, u, "Generator"), s(b, i, function () {
|
|
692
|
-
return this;
|
|
693
|
-
}), s(b, "toString", function () {
|
|
694
|
-
return "[object Generator]";
|
|
695
|
-
}), t.keys = function (t) {
|
|
696
|
-
var e = Object(t),
|
|
697
|
-
r = [];
|
|
698
|
-
for (var n in e) r.push(n);
|
|
699
|
-
return r.reverse(), function t() {
|
|
700
|
-
for (; r.length;) {
|
|
701
|
-
var n = r.pop();
|
|
702
|
-
if (n in e) return t.value = n, t.done = !1, t;
|
|
703
|
-
}
|
|
704
|
-
return t.done = !0, t;
|
|
705
|
-
};
|
|
706
|
-
}, t.values = _, A.prototype = {
|
|
707
|
-
constructor: A,
|
|
708
|
-
reset: function (t) {
|
|
709
|
-
if (this.prev = 0, this.next = 0, this.sent = this._sent = void 0, this.done = !1, this.delegate = null, this.method = "next", this.arg = void 0, this.tryEntries.forEach(j), !t) for (var e in this) "t" === e.charAt(0) && r.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = void 0);
|
|
710
|
-
},
|
|
711
|
-
stop: function () {
|
|
712
|
-
this.done = !0;
|
|
713
|
-
var t = this.tryEntries[0].completion;
|
|
714
|
-
if ("throw" === t.type) throw t.arg;
|
|
715
|
-
return this.rval;
|
|
716
|
-
},
|
|
717
|
-
dispatchException: function (t) {
|
|
718
|
-
if (this.done) throw t;
|
|
719
|
-
var e = this;
|
|
720
|
-
function n(r, n) {
|
|
721
|
-
return a.type = "throw", a.arg = t, e.next = r, n && (e.method = "next", e.arg = void 0), !!n;
|
|
722
|
-
}
|
|
723
|
-
for (var o = this.tryEntries.length - 1; o >= 0; --o) {
|
|
724
|
-
var i = this.tryEntries[o],
|
|
725
|
-
a = i.completion;
|
|
726
|
-
if ("root" === i.tryLoc) return n("end");
|
|
727
|
-
if (i.tryLoc <= this.prev) {
|
|
728
|
-
var u = r.call(i, "catchLoc"),
|
|
729
|
-
s = r.call(i, "finallyLoc");
|
|
730
|
-
if (u && s) {
|
|
731
|
-
if (this.prev < i.catchLoc) return n(i.catchLoc, !0);
|
|
732
|
-
if (this.prev < i.finallyLoc) return n(i.finallyLoc);
|
|
733
|
-
} else if (u) {
|
|
734
|
-
if (this.prev < i.catchLoc) return n(i.catchLoc, !0);
|
|
735
|
-
} else {
|
|
736
|
-
if (!s) throw new Error("try statement without catch or finally");
|
|
737
|
-
if (this.prev < i.finallyLoc) return n(i.finallyLoc);
|
|
738
|
-
}
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
},
|
|
742
|
-
abrupt: function (t, e) {
|
|
743
|
-
for (var n = this.tryEntries.length - 1; n >= 0; --n) {
|
|
744
|
-
var o = this.tryEntries[n];
|
|
745
|
-
if (o.tryLoc <= this.prev && r.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
|
|
746
|
-
var i = o;
|
|
747
|
-
break;
|
|
748
|
-
}
|
|
749
|
-
}
|
|
750
|
-
i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
|
|
751
|
-
var a = i ? i.completion : {};
|
|
752
|
-
return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, f) : this.complete(a);
|
|
753
|
-
},
|
|
754
|
-
complete: function (t, e) {
|
|
755
|
-
if ("throw" === t.type) throw t.arg;
|
|
756
|
-
return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), f;
|
|
757
|
-
},
|
|
758
|
-
finish: function (t) {
|
|
759
|
-
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
|
|
760
|
-
var r = this.tryEntries[e];
|
|
761
|
-
if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), j(r), f;
|
|
762
|
-
}
|
|
763
|
-
},
|
|
764
|
-
catch: function (t) {
|
|
765
|
-
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
|
|
766
|
-
var r = this.tryEntries[e];
|
|
767
|
-
if (r.tryLoc === t) {
|
|
768
|
-
var n = r.completion;
|
|
769
|
-
if ("throw" === n.type) {
|
|
770
|
-
var o = n.arg;
|
|
771
|
-
j(r);
|
|
772
|
-
}
|
|
773
|
-
return o;
|
|
774
|
-
}
|
|
775
|
-
}
|
|
776
|
-
throw new Error("illegal catch attempt");
|
|
777
|
-
},
|
|
778
|
-
delegateYield: function (t, e, r) {
|
|
779
|
-
return this.delegate = {
|
|
780
|
-
iterator: _(t),
|
|
781
|
-
resultName: e,
|
|
782
|
-
nextLoc: r
|
|
783
|
-
}, "next" === this.method && (this.arg = void 0), f;
|
|
784
|
-
}
|
|
785
|
-
}, t;
|
|
786
|
-
}
|
|
787
|
-
function q(t, e) {
|
|
788
|
-
var r = Object.keys(t);
|
|
496
|
+
return N(t, e), C(t);
|
|
497
|
+
}(V(Error)));
|
|
498
|
+
function Z(e, t) {
|
|
499
|
+
var r = Object.keys(e);
|
|
789
500
|
if (Object.getOwnPropertySymbols) {
|
|
790
|
-
var n = Object.getOwnPropertySymbols(
|
|
791
|
-
|
|
792
|
-
return Object.getOwnPropertyDescriptor(
|
|
501
|
+
var n = Object.getOwnPropertySymbols(e);
|
|
502
|
+
t && (n = n.filter(function (t) {
|
|
503
|
+
return Object.getOwnPropertyDescriptor(e, t).enumerable;
|
|
793
504
|
})), r.push.apply(r, n);
|
|
794
505
|
}
|
|
795
506
|
return r;
|
|
796
507
|
}
|
|
797
|
-
function
|
|
798
|
-
for (var
|
|
799
|
-
var
|
|
800
|
-
|
|
801
|
-
e
|
|
802
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(
|
|
803
|
-
Object.defineProperty(
|
|
508
|
+
function G(e) {
|
|
509
|
+
for (var t = 1; t < arguments.length; t++) {
|
|
510
|
+
var r = null != arguments[t] ? arguments[t] : {};
|
|
511
|
+
t % 2 ? Z(Object(r), !0).forEach(function (t) {
|
|
512
|
+
n(e, t, r[t]);
|
|
513
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : Z(Object(r)).forEach(function (t) {
|
|
514
|
+
Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t));
|
|
804
515
|
});
|
|
805
516
|
}
|
|
806
|
-
return
|
|
517
|
+
return e;
|
|
807
518
|
}
|
|
808
|
-
function
|
|
809
|
-
if (null !=
|
|
810
|
-
if (null ==
|
|
811
|
-
return ["model", "change",
|
|
519
|
+
function $(e, t) {
|
|
520
|
+
if (null != t) {
|
|
521
|
+
if (null == e) throw new Error("Path must be defined");
|
|
522
|
+
return ["model", "change", e, t];
|
|
812
523
|
}
|
|
813
|
-
return null !=
|
|
524
|
+
return null != e ? ["model", "change", e] : ["model", "change"];
|
|
814
525
|
}
|
|
815
|
-
function
|
|
816
|
-
return Object.keys(
|
|
817
|
-
return t
|
|
818
|
-
}).map(function (
|
|
819
|
-
var
|
|
820
|
-
return null ==
|
|
526
|
+
function X(e) {
|
|
527
|
+
return Object.keys(e).filter(function (t) {
|
|
528
|
+
return e[t] && Object.prototype.hasOwnProperty.call(e[t], "value");
|
|
529
|
+
}).map(function (t) {
|
|
530
|
+
var r = e[t];
|
|
531
|
+
return null == r ? {} : n({}, t, r.value);
|
|
821
532
|
});
|
|
822
533
|
}
|
|
823
|
-
function
|
|
824
|
-
return
|
|
825
|
-
return
|
|
534
|
+
function J(e) {
|
|
535
|
+
return e.reduce(function (e, t) {
|
|
536
|
+
return G(G({}, e), t);
|
|
826
537
|
}, {});
|
|
827
538
|
}
|
|
828
|
-
var
|
|
829
|
-
function t
|
|
830
|
-
|
|
831
|
-
}
|
|
832
|
-
var r, n, o;
|
|
833
|
-
return T(t, [{
|
|
539
|
+
var W = function () {
|
|
540
|
+
return C(function e(t) {
|
|
541
|
+
_(this, e), this.form = void 0, this.form = t;
|
|
542
|
+
}, [{
|
|
834
543
|
key: "navigateByHighlanderPaths",
|
|
835
|
-
value: function (
|
|
544
|
+
value: function (e) {
|
|
836
545
|
throw new Error("Method not implemented.");
|
|
837
546
|
}
|
|
838
547
|
}, {
|
|
@@ -842,7 +551,7 @@
|
|
|
842
551
|
}
|
|
843
552
|
}, {
|
|
844
553
|
key: "batchUpdate",
|
|
845
|
-
value: function (
|
|
554
|
+
value: function (e) {
|
|
846
555
|
throw new Error("Method not implemented.");
|
|
847
556
|
}
|
|
848
557
|
}, {
|
|
@@ -852,22 +561,22 @@
|
|
|
852
561
|
}
|
|
853
562
|
}, {
|
|
854
563
|
key: "setErrorLog",
|
|
855
|
-
value: function (
|
|
564
|
+
value: function (e) {
|
|
856
565
|
throw new Error("Method not implemented.");
|
|
857
566
|
}
|
|
858
567
|
}, {
|
|
859
568
|
key: "validateChildrenByPath",
|
|
860
|
-
value: (o =
|
|
861
|
-
return
|
|
862
|
-
for (;;) switch (
|
|
569
|
+
value: (o = x(regeneratorRuntime.mark(function e(t) {
|
|
570
|
+
return regeneratorRuntime.wrap(function (e) {
|
|
571
|
+
for (;;) switch (e.prev = e.next) {
|
|
863
572
|
case 0:
|
|
864
573
|
throw new Error("Method not implemented.");
|
|
865
574
|
case 1:
|
|
866
575
|
case "end":
|
|
867
|
-
return
|
|
576
|
+
return e.stop();
|
|
868
577
|
}
|
|
869
|
-
},
|
|
870
|
-
})), function (
|
|
578
|
+
}, e);
|
|
579
|
+
})), function (e) {
|
|
871
580
|
return o.apply(this, arguments);
|
|
872
581
|
})
|
|
873
582
|
}, {
|
|
@@ -877,22 +586,22 @@
|
|
|
877
586
|
}
|
|
878
587
|
}, {
|
|
879
588
|
key: "__INTERNAL__getSelectFunctionForDisableEmployeeInSS",
|
|
880
|
-
value: (
|
|
881
|
-
return
|
|
882
|
-
for (;;) switch (
|
|
589
|
+
value: (r = x(regeneratorRuntime.mark(function e(t) {
|
|
590
|
+
return regeneratorRuntime.wrap(function (e) {
|
|
591
|
+
for (;;) switch (e.prev = e.next) {
|
|
883
592
|
case 0:
|
|
884
593
|
throw new Error("Method not implemented.");
|
|
885
594
|
case 1:
|
|
886
595
|
case "end":
|
|
887
|
-
return
|
|
596
|
+
return e.stop();
|
|
888
597
|
}
|
|
889
|
-
},
|
|
890
|
-
})), function (
|
|
891
|
-
return
|
|
598
|
+
}, e);
|
|
599
|
+
})), function (e) {
|
|
600
|
+
return r.apply(this, arguments);
|
|
892
601
|
})
|
|
893
602
|
}, {
|
|
894
603
|
key: "getModalUnitOpenedInstance",
|
|
895
|
-
value: function (
|
|
604
|
+
value: function (e) {
|
|
896
605
|
throw new Error("Method not implemented.");
|
|
897
606
|
}
|
|
898
607
|
}, {
|
|
@@ -902,47 +611,47 @@
|
|
|
902
611
|
}
|
|
903
612
|
}, {
|
|
904
613
|
key: "navigate",
|
|
905
|
-
value: function (
|
|
614
|
+
value: function (e) {
|
|
906
615
|
throw new Error("Method not implemented.");
|
|
907
616
|
}
|
|
908
617
|
}, {
|
|
909
618
|
key: "importEmployerDocuments",
|
|
910
|
-
value: function (
|
|
619
|
+
value: function (e) {
|
|
911
620
|
throw new Error("Method not implemented.");
|
|
912
621
|
}
|
|
913
622
|
}, {
|
|
914
623
|
key: "importEmployees",
|
|
915
|
-
value: function (
|
|
624
|
+
value: function (e, t) {
|
|
916
625
|
throw new Error("Method not implemented.");
|
|
917
626
|
}
|
|
918
627
|
}, {
|
|
919
628
|
key: "print",
|
|
920
|
-
value: function (
|
|
629
|
+
value: function (e, t) {
|
|
921
630
|
throw new Error("Method not implemented.");
|
|
922
631
|
}
|
|
923
632
|
}, {
|
|
924
633
|
key: "runMassAction",
|
|
925
|
-
value: function (
|
|
634
|
+
value: function (e, t) {
|
|
926
635
|
throw new Error("Method not implemented.");
|
|
927
636
|
}
|
|
928
637
|
}, {
|
|
929
638
|
key: "getByGId",
|
|
930
|
-
value: function (
|
|
931
|
-
return this.form.picklistsProvider.getDigestApiPicklist(
|
|
639
|
+
value: function (e, t) {
|
|
640
|
+
return this.form.picklistsProvider.getDigestApiPicklist(e).query(t);
|
|
932
641
|
}
|
|
933
642
|
}, {
|
|
934
643
|
key: "on",
|
|
935
|
-
value: function (
|
|
936
|
-
this.form.eventManager.on(["form",
|
|
644
|
+
value: function (e, t) {
|
|
645
|
+
this.form.eventManager.on(["form", e], t);
|
|
937
646
|
}
|
|
938
647
|
}, {
|
|
939
648
|
key: "off",
|
|
940
|
-
value: function (
|
|
941
|
-
this.form.eventManager.off(["form",
|
|
649
|
+
value: function (e, t) {
|
|
650
|
+
this.form.eventManager.off(["form", e], t);
|
|
942
651
|
}
|
|
943
652
|
}, {
|
|
944
653
|
key: "onModelChange",
|
|
945
|
-
value: function (
|
|
654
|
+
value: function (e, t) {
|
|
946
655
|
throw Error("form.onModelChange() is not supported yet");
|
|
947
656
|
}
|
|
948
657
|
}, {
|
|
@@ -963,260 +672,266 @@
|
|
|
963
672
|
}, {
|
|
964
673
|
key: "validate",
|
|
965
674
|
value: function () {
|
|
966
|
-
var
|
|
967
|
-
return this.form.validator.validateAll(
|
|
675
|
+
var e = Object.keys(this.form.model.getChunk(this.form.settings.formRoot));
|
|
676
|
+
return this.form.validator.validateAll(e);
|
|
968
677
|
}
|
|
969
678
|
}, {
|
|
970
679
|
key: "getAdditionalEmployeeInfo",
|
|
971
|
-
value: function (
|
|
680
|
+
value: function (e) {
|
|
972
681
|
throw new Error("not implemented");
|
|
973
682
|
}
|
|
974
683
|
}, {
|
|
975
684
|
key: "reloadInner",
|
|
976
|
-
value: (
|
|
977
|
-
return
|
|
978
|
-
for (;;) switch (
|
|
685
|
+
value: (e = x(regeneratorRuntime.mark(function e() {
|
|
686
|
+
return regeneratorRuntime.wrap(function (e) {
|
|
687
|
+
for (;;) switch (e.prev = e.next) {
|
|
979
688
|
case 0:
|
|
980
689
|
throw new Error("not implemented");
|
|
981
690
|
case 1:
|
|
982
691
|
case "end":
|
|
983
|
-
return
|
|
692
|
+
return e.stop();
|
|
984
693
|
}
|
|
985
|
-
},
|
|
694
|
+
}, e);
|
|
986
695
|
})), function () {
|
|
987
|
-
return
|
|
696
|
+
return e.apply(this, arguments);
|
|
988
697
|
})
|
|
989
698
|
}, {
|
|
990
699
|
key: "getWorkingEventsForEmployee",
|
|
991
|
-
value: function (
|
|
700
|
+
value: function (e) {
|
|
992
701
|
throw new Error("not implemented");
|
|
993
702
|
}
|
|
994
703
|
}, {
|
|
995
704
|
key: "hasErrors",
|
|
996
705
|
value: function () {
|
|
997
|
-
var
|
|
998
|
-
return null !=
|
|
706
|
+
var e = this.form.model.get(this.form.settings.formRoot, "errorsCount");
|
|
707
|
+
return null != e && e > 0;
|
|
999
708
|
}
|
|
1000
709
|
}, {
|
|
1001
710
|
key: "onErrorsCountChanged",
|
|
1002
|
-
value: function (
|
|
1003
|
-
this.form.eventManager.on(
|
|
711
|
+
value: function (e) {
|
|
712
|
+
this.form.eventManager.on($(this.form.settings.formRoot, "errorsCount"), e);
|
|
1004
713
|
}
|
|
1005
714
|
}, {
|
|
1006
715
|
key: "offErrorsCountChanged",
|
|
1007
|
-
value: function (
|
|
1008
|
-
this.form.eventManager.off(
|
|
716
|
+
value: function (e) {
|
|
717
|
+
this.form.eventManager.off($(this.form.settings.formRoot, "errorsCount"), e);
|
|
1009
718
|
}
|
|
1010
719
|
}, {
|
|
1011
720
|
key: "set",
|
|
1012
|
-
value: function (
|
|
1013
|
-
if (null ===
|
|
1014
|
-
if ("string" != typeof
|
|
1015
|
-
this.form.model.set(
|
|
721
|
+
value: function (e, r) {
|
|
722
|
+
if (null === e || "string" == typeof e || "object" !== t(e) || Array.isArray(e)) {
|
|
723
|
+
if ("string" != typeof e) throw new Error("form.set() parameter should be string path or object with path-value pairs");
|
|
724
|
+
this.form.model.set(e, "value", r);
|
|
1016
725
|
} else {
|
|
1017
|
-
var
|
|
1018
|
-
return
|
|
1019
|
-
value:
|
|
1020
|
-
}),
|
|
726
|
+
var o = Object.keys(e).reduce(function (t, r) {
|
|
727
|
+
return G(n({}, r, {
|
|
728
|
+
value: e[r]
|
|
729
|
+
}), t);
|
|
1021
730
|
}, {});
|
|
1022
|
-
this.form.model.fill(
|
|
731
|
+
this.form.model.fill(o);
|
|
1023
732
|
}
|
|
1024
733
|
}
|
|
1025
734
|
}, {
|
|
1026
735
|
key: "get",
|
|
1027
|
-
value: function (
|
|
1028
|
-
var
|
|
1029
|
-
if (Array.isArray(
|
|
1030
|
-
return
|
|
1031
|
-
}).reduce(function (
|
|
1032
|
-
return
|
|
736
|
+
value: function (e) {
|
|
737
|
+
var t = this;
|
|
738
|
+
if (Array.isArray(e)) return J(e.map(function (e) {
|
|
739
|
+
return X(t.form.model.getChunk(e));
|
|
740
|
+
}).reduce(function (e, t) {
|
|
741
|
+
return e.concat(t);
|
|
1033
742
|
}, []));
|
|
1034
|
-
if ("string" == typeof
|
|
1035
|
-
if (void 0 ===
|
|
743
|
+
if ("string" == typeof e) return J(X(this.form.model.getChunk(e)));
|
|
744
|
+
if (void 0 === e) return J(X(this.form.model.getChunk(this.form.settings.formRoot)));
|
|
1036
745
|
throw new Error("form.get() parameter should be string path or array of paths");
|
|
1037
746
|
}
|
|
1038
747
|
}, {
|
|
1039
748
|
key: "getValue",
|
|
1040
|
-
value: function (
|
|
1041
|
-
return this.form.model.get(
|
|
749
|
+
value: function (e) {
|
|
750
|
+
return this.form.model.get(e, "value");
|
|
1042
751
|
}
|
|
1043
752
|
}, {
|
|
1044
753
|
key: "copySubtree",
|
|
1045
|
-
value: function (
|
|
1046
|
-
throw new
|
|
754
|
+
value: function (e, t, r) {
|
|
755
|
+
throw new q();
|
|
1047
756
|
}
|
|
1048
757
|
}, {
|
|
1049
758
|
key: "addInstance",
|
|
1050
|
-
value: function (
|
|
1051
|
-
throw new
|
|
759
|
+
value: function (e) {
|
|
760
|
+
throw new q();
|
|
1052
761
|
}
|
|
1053
762
|
}, {
|
|
1054
763
|
key: "getChildren",
|
|
1055
|
-
value: function (
|
|
1056
|
-
throw new
|
|
764
|
+
value: function (e) {
|
|
765
|
+
throw new q();
|
|
1057
766
|
}
|
|
1058
767
|
}, {
|
|
1059
768
|
key: "uuidGenerate",
|
|
1060
769
|
value: function () {
|
|
1061
|
-
throw new
|
|
770
|
+
throw new q();
|
|
1062
771
|
}
|
|
1063
772
|
}, {
|
|
1064
773
|
key: "showModal",
|
|
1065
|
-
value: function (
|
|
1066
|
-
throw new
|
|
774
|
+
value: function (e) {
|
|
775
|
+
throw new q();
|
|
1067
776
|
}
|
|
1068
777
|
}, {
|
|
1069
778
|
key: "addSection",
|
|
1070
|
-
value: function (
|
|
1071
|
-
throw new
|
|
779
|
+
value: function (e) {
|
|
780
|
+
throw new q();
|
|
1072
781
|
}
|
|
1073
782
|
}, {
|
|
1074
783
|
key: "callInitSection",
|
|
1075
|
-
value: function (
|
|
1076
|
-
throw new
|
|
784
|
+
value: function (e) {
|
|
785
|
+
throw new q();
|
|
1077
786
|
}
|
|
1078
787
|
}, {
|
|
1079
788
|
key: "createFiasApiClient",
|
|
1080
|
-
value: function (
|
|
1081
|
-
throw new
|
|
789
|
+
value: function (e) {
|
|
790
|
+
throw new q();
|
|
1082
791
|
}
|
|
1083
792
|
}, {
|
|
1084
793
|
key: "openEmployeeEditor",
|
|
1085
|
-
value: function (
|
|
1086
|
-
throw new
|
|
794
|
+
value: function (e) {
|
|
795
|
+
throw new q();
|
|
1087
796
|
}
|
|
1088
797
|
}, {
|
|
1089
798
|
key: "removeInstance",
|
|
1090
|
-
value: function (
|
|
1091
|
-
throw new
|
|
799
|
+
value: function (e, t) {
|
|
800
|
+
throw new q();
|
|
1092
801
|
}
|
|
1093
802
|
}, {
|
|
1094
803
|
key: "removeInstances",
|
|
1095
|
-
value: function (
|
|
1096
|
-
throw new
|
|
804
|
+
value: function (e, t) {
|
|
805
|
+
throw new q();
|
|
1097
806
|
}
|
|
1098
807
|
}, {
|
|
1099
808
|
key: "focusOnControlIfExist",
|
|
1100
|
-
value: function (
|
|
1101
|
-
throw new
|
|
809
|
+
value: function (e) {
|
|
810
|
+
throw new q();
|
|
1102
811
|
}
|
|
1103
812
|
}, {
|
|
1104
813
|
key: "setAutoFieldsToAutoValue",
|
|
1105
|
-
value: function (
|
|
814
|
+
value: function (e) {
|
|
1106
815
|
return Promise.resolve(void 0);
|
|
1107
816
|
}
|
|
1108
817
|
}, {
|
|
1109
818
|
key: "ensureInstanceFullyLoaded",
|
|
1110
|
-
value: function (
|
|
819
|
+
value: function (e) {
|
|
1111
820
|
throw new Error("Method not implemented.");
|
|
1112
821
|
}
|
|
1113
822
|
}, {
|
|
1114
823
|
key: "customNormalize",
|
|
1115
|
-
value: function (
|
|
1116
|
-
throw new
|
|
824
|
+
value: function (e, t) {
|
|
825
|
+
throw new q();
|
|
1117
826
|
}
|
|
1118
827
|
}, {
|
|
1119
828
|
key: "removeInstancesByRules",
|
|
1120
|
-
value: function (
|
|
1121
|
-
throw new
|
|
829
|
+
value: function (e) {
|
|
830
|
+
throw new q();
|
|
1122
831
|
}
|
|
1123
832
|
}, {
|
|
1124
833
|
key: "createDnp",
|
|
1125
834
|
value: function () {
|
|
1126
|
-
throw new
|
|
835
|
+
throw new q();
|
|
1127
836
|
}
|
|
1128
|
-
}])
|
|
837
|
+
}]);
|
|
838
|
+
var e, r, o;
|
|
1129
839
|
}();
|
|
1130
|
-
function
|
|
1131
|
-
var r = Object.keys(
|
|
840
|
+
function K(e, t) {
|
|
841
|
+
var r = Object.keys(e);
|
|
1132
842
|
if (Object.getOwnPropertySymbols) {
|
|
1133
|
-
var n = Object.getOwnPropertySymbols(
|
|
1134
|
-
|
|
1135
|
-
return Object.getOwnPropertyDescriptor(
|
|
843
|
+
var n = Object.getOwnPropertySymbols(e);
|
|
844
|
+
t && (n = n.filter(function (t) {
|
|
845
|
+
return Object.getOwnPropertyDescriptor(e, t).enumerable;
|
|
1136
846
|
})), r.push.apply(r, n);
|
|
1137
847
|
}
|
|
1138
848
|
return r;
|
|
1139
849
|
}
|
|
1140
|
-
function
|
|
1141
|
-
for (var
|
|
1142
|
-
var
|
|
1143
|
-
|
|
1144
|
-
e
|
|
1145
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(
|
|
1146
|
-
Object.defineProperty(
|
|
850
|
+
function Q(e) {
|
|
851
|
+
for (var t = 1; t < arguments.length; t++) {
|
|
852
|
+
var r = null != arguments[t] ? arguments[t] : {};
|
|
853
|
+
t % 2 ? K(Object(r), !0).forEach(function (t) {
|
|
854
|
+
n(e, t, r[t]);
|
|
855
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : K(Object(r)).forEach(function (t) {
|
|
856
|
+
Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t));
|
|
1147
857
|
});
|
|
1148
858
|
}
|
|
1149
|
-
return
|
|
859
|
+
return e;
|
|
1150
860
|
}
|
|
1151
|
-
function
|
|
1152
|
-
function
|
|
1153
|
-
var
|
|
1154
|
-
r =
|
|
1155
|
-
return "".concat(r, "/").concat(
|
|
861
|
+
function Y() {}
|
|
862
|
+
function ee() {
|
|
863
|
+
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
|
|
864
|
+
r = e.g.CF.keformsUrl || "";
|
|
865
|
+
return "".concat(r, "/").concat(t).replace(/([^:])\/{2,}/g, "$1/");
|
|
1156
866
|
}
|
|
1157
|
-
function
|
|
1158
|
-
if (void 0 ===
|
|
1159
|
-
for (var r = [], n = 0, o = Object.keys(
|
|
867
|
+
function te(e, t) {
|
|
868
|
+
if (void 0 === t) return e;
|
|
869
|
+
for (var r = [], n = 0, o = Object.keys(t); n < o.length; n++) {
|
|
1160
870
|
var i = o[n],
|
|
1161
|
-
a =
|
|
871
|
+
a = t[i];
|
|
1162
872
|
null != a && r.push("".concat(i, "=").concat(encodeURIComponent(a)));
|
|
1163
873
|
}
|
|
1164
|
-
return 0 === r.length ?
|
|
874
|
+
return 0 === r.length ? e : e + "?" + r.join("&");
|
|
1165
875
|
}
|
|
1166
|
-
function
|
|
1167
|
-
return (
|
|
1168
|
-
return
|
|
1169
|
-
}).find(function (
|
|
1170
|
-
return (
|
|
1171
|
-
if (Array.isArray(
|
|
1172
|
-
}(
|
|
1173
|
-
var r = null ==
|
|
876
|
+
function re(t) {
|
|
877
|
+
return (e.g.location.search.trim().replace(/^(\?|#|&)/, "").split("&").map(function (e) {
|
|
878
|
+
return e.replace(/\+/g, " ").split("=").map(decodeURIComponent);
|
|
879
|
+
}).find(function (e) {
|
|
880
|
+
return (r = e, n = 1, function (e) {
|
|
881
|
+
if (Array.isArray(e)) return e;
|
|
882
|
+
}(r) || function (e, t) {
|
|
883
|
+
var r = null == e ? null : "undefined" != typeof Symbol && e[Symbol.iterator] || e["@@iterator"];
|
|
1174
884
|
if (null != r) {
|
|
1175
885
|
var n,
|
|
1176
886
|
o,
|
|
1177
|
-
i
|
|
1178
|
-
a
|
|
1179
|
-
|
|
887
|
+
i,
|
|
888
|
+
a,
|
|
889
|
+
s = [],
|
|
890
|
+
u = !0,
|
|
891
|
+
c = !1;
|
|
1180
892
|
try {
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
893
|
+
if (i = (r = r.call(e)).next, 0 === t) {
|
|
894
|
+
if (Object(r) !== r) return;
|
|
895
|
+
u = !1;
|
|
896
|
+
} else for (; !(u = (n = i.call(r)).done) && (s.push(n.value), s.length !== t); u = !0);
|
|
897
|
+
} catch (e) {
|
|
898
|
+
c = !0, o = e;
|
|
1184
899
|
} finally {
|
|
1185
900
|
try {
|
|
1186
|
-
|
|
901
|
+
if (!u && null != r.return && (a = r.return(), Object(a) !== a)) return;
|
|
1187
902
|
} finally {
|
|
1188
|
-
if (
|
|
903
|
+
if (c) throw o;
|
|
1189
904
|
}
|
|
1190
905
|
}
|
|
1191
|
-
return
|
|
906
|
+
return s;
|
|
1192
907
|
}
|
|
1193
|
-
}(
|
|
1194
|
-
if (
|
|
1195
|
-
if ("string" == typeof
|
|
1196
|
-
var
|
|
1197
|
-
return "Object" ===
|
|
908
|
+
}(r, n) || function (e, t) {
|
|
909
|
+
if (e) {
|
|
910
|
+
if ("string" == typeof e) return o(e, t);
|
|
911
|
+
var r = {}.toString.call(e).slice(8, -1);
|
|
912
|
+
return "Object" === r && e.constructor && (r = e.constructor.name), "Map" === r || "Set" === r ? Array.from(e) : "Arguments" === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r) ? o(e, t) : void 0;
|
|
1198
913
|
}
|
|
1199
|
-
}(
|
|
914
|
+
}(r, n) || function () {
|
|
1200
915
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
1201
|
-
}())[0] ==
|
|
1202
|
-
var
|
|
916
|
+
}())[0] == t;
|
|
917
|
+
var r, n;
|
|
1203
918
|
}) || [])[1];
|
|
1204
919
|
}
|
|
1205
|
-
var
|
|
1206
|
-
start: function (
|
|
920
|
+
var ne = {
|
|
921
|
+
start: function (t, r) {
|
|
1207
922
|
var n,
|
|
1208
923
|
o,
|
|
1209
|
-
i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] :
|
|
924
|
+
i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : Y,
|
|
1210
925
|
a = null,
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
if (new RegExp("^(?:".concat(
|
|
1214
|
-
var c = null !== (n = r.resourceZone) && void 0 !== n ? n :
|
|
1215
|
-
l =
|
|
1216
|
-
return "v1/ns/".concat(
|
|
926
|
+
s = r.ns,
|
|
927
|
+
u = r.draftId;
|
|
928
|
+
if (new RegExp("^(?:".concat(D.konturDomains.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-._]+"), ")$")).test(e.g.location.host) ? D.authorized ? u ? s || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
|
|
929
|
+
var c = null !== (n = r.resourceZone) && void 0 !== n ? n : re("resourceZone"),
|
|
930
|
+
l = te(ee(function (e) {
|
|
931
|
+
return "v1/ns/".concat(e.ns, "/drafts/").concat(e.draftId, "/client-draft-info");
|
|
1217
932
|
}({
|
|
1218
|
-
ns:
|
|
1219
|
-
draftId:
|
|
933
|
+
ns: s,
|
|
934
|
+
draftId: u
|
|
1220
935
|
})), {
|
|
1221
936
|
resourceZone: c
|
|
1222
937
|
}),
|
|
@@ -1227,67 +942,67 @@
|
|
|
1227
942
|
var h;
|
|
1228
943
|
f.credentials = "omit", f.headers = null !== (h = f.headers) && void 0 !== h ? h : {}, f.headers.Authorization = "AUTH.SID ".concat(r.authentication.authSid);
|
|
1229
944
|
} else f.credentials = "omit";
|
|
1230
|
-
(null !== (o = r.fetch) && void 0 !== o ? o :
|
|
1231
|
-
return
|
|
945
|
+
(null !== (o = r.fetch) && void 0 !== o ? o : P)(l, f).then(function (e) {
|
|
946
|
+
return e.json();
|
|
1232
947
|
}).then(function (n) {
|
|
1233
948
|
var o,
|
|
1234
949
|
a,
|
|
1235
|
-
u,
|
|
1236
950
|
s,
|
|
951
|
+
u,
|
|
1237
952
|
l,
|
|
1238
953
|
f = n.gfv,
|
|
1239
954
|
h = n.engineVersion,
|
|
1240
|
-
d =
|
|
1241
|
-
authorized:
|
|
1242
|
-
cauldronApiUrl:
|
|
1243
|
-
isTestServer:
|
|
1244
|
-
renderCachingForIE8:
|
|
1245
|
-
normalizationOnServer:
|
|
1246
|
-
normativeUrl:
|
|
1247
|
-
resourcesVersion:
|
|
1248
|
-
konturDomains:
|
|
955
|
+
d = Q(Q(Q({
|
|
956
|
+
authorized: D.authorized,
|
|
957
|
+
cauldronApiUrl: D.cauldronApiUrl,
|
|
958
|
+
isTestServer: D.isTestServer,
|
|
959
|
+
renderCachingForIE8: D.renderCachingForIE8,
|
|
960
|
+
normalizationOnServer: D.normalizationOnServer,
|
|
961
|
+
normativeUrl: D.normativeUrl,
|
|
962
|
+
resourcesVersion: D.resourcesVersion,
|
|
963
|
+
konturDomains: D.konturDomains,
|
|
1249
964
|
showNavigationSidebar: null === (o = r.showNavigationSidebar) || void 0 === o || o,
|
|
1250
965
|
onRemoveAttachment: r.onRemoveAttachment
|
|
1251
966
|
}, r), n), {}, {
|
|
1252
967
|
gfv: f,
|
|
1253
968
|
engineVersion: h,
|
|
1254
969
|
feedbackEnabled: null !== (a = r.feedbackEnabled) && void 0 !== a ? a : n.feedbackEnabled,
|
|
1255
|
-
isDisabledCleanForm: null !== (
|
|
1256
|
-
isDisabledCloseButton: null !== (
|
|
970
|
+
isDisabledCleanForm: null !== (s = r.isDisabledCleanForm) && void 0 !== s && s,
|
|
971
|
+
isDisabledCloseButton: null !== (u = r.isDisabledCloseButton) && void 0 !== u && u,
|
|
1257
972
|
isDisabledCloseAndSaveButton: null !== (l = r.isDisabledCloseAndSaveButton) && void 0 !== l && l,
|
|
1258
973
|
resourceZone: c
|
|
1259
974
|
});
|
|
1260
|
-
!function (
|
|
1261
|
-
var n =
|
|
1262
|
-
o =
|
|
1263
|
-
i =
|
|
1264
|
-
if (
|
|
1265
|
-
var a = o && !
|
|
1266
|
-
|
|
1267
|
-
|
|
975
|
+
!function (t, r) {
|
|
976
|
+
var n = t.gfv,
|
|
977
|
+
o = t.engineVersion,
|
|
978
|
+
i = t.resourcesVersion;
|
|
979
|
+
if (e.g.CF.entryPoint[n]) r();else {
|
|
980
|
+
var a = o && !e.g[o],
|
|
981
|
+
s = "true" === re("debug") ? "" : ".min",
|
|
982
|
+
u = [],
|
|
1268
983
|
c = {
|
|
1269
984
|
v: i,
|
|
1270
|
-
resourceZone:
|
|
985
|
+
resourceZone: t.resourceZone
|
|
1271
986
|
};
|
|
1272
|
-
|
|
1273
|
-
return
|
|
1274
|
-
}),
|
|
1275
|
-
return
|
|
1276
|
-
}), a &&
|
|
1277
|
-
return
|
|
1278
|
-
}, function (
|
|
1279
|
-
return
|
|
1280
|
-
}), function (
|
|
987
|
+
u.push(function (e) {
|
|
988
|
+
return R.styleSheet(ee(te("static/public/styles/".concat(n).concat(s, ".css"), c)), !0, e);
|
|
989
|
+
}), u.push(function (e) {
|
|
990
|
+
return R.script(ee(te("static/public/scripts/".concat(n).concat(s, ".js"), c)), e);
|
|
991
|
+
}), a && u.push(function (e) {
|
|
992
|
+
return R.styleSheet(ee(te("static/public/styles/candy_".concat(o).concat(s, ".css"), c)), !1, e);
|
|
993
|
+
}, function (e) {
|
|
994
|
+
return R.script(ee(te("static/public/scripts/candy_".concat(o).concat(s, ".js"), c)), e);
|
|
995
|
+
}), function (e, t) {
|
|
1281
996
|
var r = 0;
|
|
1282
|
-
|
|
997
|
+
e.forEach(function (n) {
|
|
1283
998
|
n(function (n) {
|
|
1284
|
-
if (r !==
|
|
1285
|
-
if (n) return r =
|
|
1286
|
-
(r += 1) ===
|
|
999
|
+
if (r !== e.length) {
|
|
1000
|
+
if (n) return r = e.length, void t(n);
|
|
1001
|
+
(r += 1) === e.length && t();
|
|
1287
1002
|
}
|
|
1288
1003
|
});
|
|
1289
1004
|
});
|
|
1290
|
-
}(
|
|
1005
|
+
}(u, r);
|
|
1291
1006
|
}
|
|
1292
1007
|
}({
|
|
1293
1008
|
gfv: d.gfv,
|
|
@@ -1296,21 +1011,21 @@
|
|
|
1296
1011
|
resourcesVersion: d.resourcesVersion,
|
|
1297
1012
|
theme: d.theme
|
|
1298
1013
|
}, function (n) {
|
|
1299
|
-
if (!n &&
|
|
1300
|
-
var o = function (
|
|
1301
|
-
if (null !=
|
|
1014
|
+
if (!n && e.g.CF.entryPoint[f]) {
|
|
1015
|
+
var o = function (t) {
|
|
1016
|
+
if (null != t) return e.g[t] && e.g[t].default;
|
|
1302
1017
|
}(h);
|
|
1303
|
-
!function (
|
|
1018
|
+
!function (t, r, n) {
|
|
1304
1019
|
var o;
|
|
1305
|
-
(null !== (o =
|
|
1306
|
-
throw "string" == typeof
|
|
1307
|
-
}("Form entry point ".concat(r.gfv, " not found.")))(
|
|
1308
|
-
var
|
|
1309
|
-
return new
|
|
1310
|
-
}(
|
|
1311
|
-
n(null,
|
|
1020
|
+
(null !== (o = e.g.CF.entryPoint[r.gfv]) && void 0 !== o ? o : function (e) {
|
|
1021
|
+
throw "string" == typeof e || null == e ? new Error(null != e ? e : "Undefined is not allowed") : e;
|
|
1022
|
+
}("Form entry point ".concat(r.gfv, " not found.")))(t, r).then(function (e) {
|
|
1023
|
+
var t = e.publicForm || function (e) {
|
|
1024
|
+
return new W(e);
|
|
1025
|
+
}(e);
|
|
1026
|
+
n(null, t);
|
|
1312
1027
|
}).catch(n);
|
|
1313
|
-
}(
|
|
1028
|
+
}(t, Q(Q({}, d), {}, {
|
|
1314
1029
|
templatesApi: r.templatesApi,
|
|
1315
1030
|
renderForm: o
|
|
1316
1031
|
}), i);
|
|
@@ -1323,6 +1038,6 @@
|
|
|
1323
1038
|
partialRenderingForIE8: ("{partialRenderingForIE8}", !1),
|
|
1324
1039
|
keformsUrl: "{keformsUrl}"
|
|
1325
1040
|
};
|
|
1326
|
-
|
|
1041
|
+
e.g.CF = ne;
|
|
1327
1042
|
}();
|
|
1328
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0IiwiZSIsInIiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwibGVuZ3RoIiwibiIsIkFycmF5IiwiZyIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIndpbmRvdyIsInNlbGYiLCJvIiwiaSIsIlN5bWJvbCIsImEiLCJCbG9iIiwidSIsInMiLCJjIiwibCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImYiLCJTdHJpbmciLCJ0ZXN0IiwiVHlwZUVycm9yIiwidG9Mb3dlckNhc2UiLCJoIiwiZCIsIm5leHQiLCJzaGlmdCIsImRvbmUiLCJpdGVyYXRvciIsInAiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiaXNBcnJheSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ5IiwiYm9keVVzZWQiLCJQcm9taXNlIiwicmVqZWN0IiwidiIsIm9ubG9hZCIsInJlc3VsdCIsIm9uZXJyb3IiLCJlcnJvciIsIm0iLCJGaWxlUmVhZGVyIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJiIiwic2xpY2UiLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsInNldCIsImJ1ZmZlciIsInciLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiRGF0YVZpZXciLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsImdldCIsInR5cGUiLCJibG9iIiwicmVzb2x2ZSIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJieXRlT2Zmc2V0IiwidGhlbiIsInRleHQiLCJyZWFkQXNUZXh0IiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImZvcm1EYXRhIiwiTyIsImpzb24iLCJKU09OIiwicGFyc2UiLCJkZWxldGUiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsIkUiLCJib2R5IiwidXJsIiwiY3JlZGVudGlhbHMiLCJtZXRob2QiLCJtb2RlIiwic2lnbmFsIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImNhY2hlIiwicmVwbGFjZSIsIkRhdGUiLCJnZXRUaW1lIiwidHJpbSIsInNwbGl0IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiayIsInN0YXR1cyIsIm9rIiwic3RhdHVzVGV4dCIsImNsb25lIiwiaiIsInJlZGlyZWN0IiwiUmFuZ2VFcnJvciIsImxvY2F0aW9uIiwiQSIsIkRPTUV4Y2VwdGlvbiIsIm1lc3NhZ2UiLCJuYW1lIiwic3RhY2siLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIl8iLCJhYm9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInN1YnN0ciIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2UiLCJyZXNwb25zZVRleHQiLCJzZXRUaW1lb3V0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsIm9wZW4iLCJocmVmIiwid2l0aENyZWRlbnRpYWxzIiwicmVzcG9uc2VUeXBlIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJTIiwiUCIsImtleSIsIlQiLCJwb2x5ZmlsbCIsImZldGNoIiwiSGVhZGVycyIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIngiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInNyYyIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiQiIsIkJvb2xlYW4iLCJDIiwiYXV0aG9yaXplZCIsImNhdWxkcm9uQXBpVXJsIiwiaXNUZXN0U2VydmVyIiwicmVuZGVyQ2FjaGluZ0ZvcklFOCIsIm5vcm1hbGl6YXRpb25PblNlcnZlciIsIm5vcm1hdGl2ZVVybCIsInJlc291cmNlc1ZlcnNpb24iLCJrb250dXJEb21haW5zIiwiSSIsIkwiLCJGIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJEIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJSIiwiVSIsImdldFByb3RvdHlwZU9mIiwiTSIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzaGFtIiwiUHJveHkiLCJ2YWx1ZU9mIiwiYmluZCIsIk4iLCJNYXAiLCJfd3JhcE5hdGl2ZVN1cGVyIiwiViIsIlJlZmVyZW5jZUVycm9yIiwiRyIsInoiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiYXJnIiwid3JhcCIsIl9pbnZva2UiLCJfX2F3YWl0IiwiZGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsInJldHVybiIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwiYXdyYXAiLCJBc3luY0l0ZXJhdG9yIiwiYXN5bmMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInN0b3AiLCJydmFsIiwiY29tcGxldGUiLCJmaW5pc2giLCJjYXRjaCIsImRlbGVnYXRlWWllbGQiLCJxIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiWiIsIiQiLCJYIiwicmVkdWNlIiwiWSIsImZvcm0iLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE1hbmFnZXIiLCJvbiIsIm9mZiIsImNoYW5nZVNldCIsInN0b3BBdXRvc2VuZCIsInVubW91bnQiLCJtb2RlbCIsImdldENodW5rIiwic2V0dGluZ3MiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZmlsbCIsImNvbmNhdCIsIkoiLCJXIiwiSyIsIlEiLCJDRiIsImtlZm9ybXNVcmwiLCJ0dCIsImVuY29kZVVSSUNvbXBvbmVudCIsImV0Iiwic2VhcmNoIiwiZmluZCIsImZyb20iLCJydCIsInN0YXJ0IiwibnMiLCJkcmFmdElkIiwiUmVnRXhwIiwiaG9zdCIsInJlc291cmNlWm9uZSIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsIkF1dGhvcml6YXRpb24iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwic2hvd05hdmlnYXRpb25TaWRlYmFyIiwib25SZW1vdmVBdHRhY2htZW50IiwiZmVlZGJhY2tFbmFibGVkIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJlbnRyeVBvaW50Iiwic3R5bGVTaGVldCIsInNjcmlwdCIsInRoZW1lIiwiZGVmYXVsdCIsInB1YmxpY0Zvcm0iLCJ0ZW1wbGF0ZXNBcGkiLCJyZW5kZXJGb3JtIiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY29uc3RydWN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3dyYXBOYXRpdmVTdXBlci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXNOYXRpdmVGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9FcnJvcnMudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufSIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwidmFyIGdsb2JhbCA9XG4gICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmKSB8fFxuICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBnbG9iYWwsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnbG9iYWwgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gIGJsb2I6XG4gICAgJ0ZpbGVSZWFkZXInIGluIGdsb2JhbCAmJlxuICAgICdCbG9iJyBpbiBnbG9iYWwgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGdsb2JhbCxcbiAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gZ2xvYmFsXG59XG5cbmZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgXVxuXG4gIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICB9XG4gIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+IV0vaS50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbmZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdGhpcy5tYXAgPSB7fVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgIH0sIHRoaXMpXG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV1cbiAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWVcbn1cblxuSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpXG4gICAgfVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChuYW1lKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpdGVtcy5wdXNoKHZhbHVlKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbmlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gIH1cbiAgYm9keS5ib2R5VXNlZCA9IHRydWVcbn1cblxuZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgIH1cbiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxuICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pXG4gIH1cbiAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwKVxuICB9IGVsc2Uge1xuICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgfVxufVxuXG5mdW5jdGlvbiBCb2R5KCkge1xuICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICB0aGlzLl9pbml0Qm9keSA9IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAvKlxuICAgICAgZmV0Y2gtbW9jayB3cmFwcyB0aGUgUmVzcG9uc2Ugb2JqZWN0IGluIGFuIEVTNiBQcm94eSB0b1xuICAgICAgcHJvdmlkZSB1c2VmdWwgdGVzdCBoYXJuZXNzIGZlYXR1cmVzIHN1Y2ggYXMgZmx1c2guIEhvd2V2ZXIsIG9uXG4gICAgICBFUzUgYnJvd3NlcnMgd2l0aG91dCBmZXRjaCBvciBQcm94eSBzdXBwb3J0IHBvbGx5ZmlsbHMgbXVzdCBiZSB1c2VkO1xuICAgICAgdGhlIHByb3h5LXBvbGx5ZmlsbCBpcyB1bmFibGUgdG8gcHJveHkgYW4gYXR0cmlidXRlIHVubGVzcyBpdCBleGlzdHNcbiAgICAgIG9uIHRoZSBvYmplY3QgYmVmb3JlIHRoZSBQcm94eSBpcyBjcmVhdGVkLiBUaGlzIGNoYW5nZSBlbnN1cmVzXG4gICAgICBSZXNwb25zZS5ib2R5VXNlZCBleGlzdHMgb24gdGhlIGluc3RhbmNlLCB3aGlsZSBtYWludGFpbmluZyB0aGVcbiAgICAgIHNlbWFudGljIG9mIHNldHRpbmcgUmVxdWVzdC5ib2R5VXNlZCBpbiB0aGUgY29uc3RydWN0b3IgYmVmb3JlXG4gICAgICBfaW5pdEJvZHkgaXMgY2FsbGVkLlxuICAgICovXG4gICAgdGhpcy5ib2R5VXNlZCA9IHRoaXMuYm9keVVzZWRcbiAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdmFyIGlzQ29uc3VtZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCArIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbFxuICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICB9XG5cbiAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG4gIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgfVxuICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWxcbiAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICB9XG4gIHRoaXMuX2luaXRCb2R5KGJvZHkpXG5cbiAgaWYgKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgaWYgKG9wdGlvbnMuY2FjaGUgPT09ICduby1zdG9yZScgfHwgb3B0aW9ucy5jYWNoZSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgLy8gU2VhcmNoIGZvciBhICdfJyBwYXJhbWV0ZXIgaW4gdGhlIHF1ZXJ5IHN0cmluZ1xuICAgICAgdmFyIHJlUGFyYW1TZWFyY2ggPSAvKFs/Jl0pXz1bXiZdKi9cbiAgICAgIGlmIChyZVBhcmFtU2VhcmNoLnRlc3QodGhpcy51cmwpKSB7XG4gICAgICAgIC8vIElmIGl0IGFscmVhZHkgZXhpc3RzIHRoZW4gc2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLnVybC5yZXBsYWNlKHJlUGFyYW1TZWFyY2gsICckMV89JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBhIG5ldyAnXycgcGFyYW1ldGVyIHRvIHRoZSBlbmQgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHZhciByZVF1ZXJ5U3RyaW5nID0gL1xcPy9cbiAgICAgICAgdGhpcy51cmwgKz0gKHJlUXVlcnlTdHJpbmcudGVzdCh0aGlzLnVybCkgPyAnJicgOiAnPycpICsgJ189JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxufVxuXG5mdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gIGJvZHlcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KCcmJylcbiAgICAuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGZvcm1cbn1cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gIC8vIFJlcGxhY2UgaW5zdGFuY2VzIG9mIFxcclxcbiBhbmQgXFxuIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZSBzcGFjZSBvciBob3Jpem9udGFsIHRhYiB3aXRoIGEgc3BhY2VcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJylcbiAgLy8gQXZvaWRpbmcgc3BsaXQgdmlhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgY29tbW9uIElFMTEgYnVnIHdpdGggdGhlIGNvcmUtanMgMy42LjAgcmVnZXggcG9seWZpbGxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9pc3N1ZXMvNzQ4XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy83NTFcbiAgcHJlUHJvY2Vzc2VkSGVhZGVyc1xuICAgIC5zcGxpdCgnXFxyJylcbiAgICAubWFwKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKCdcXG4nKSA9PT0gMCA/IGhlYWRlci5zdWJzdHIoMSwgaGVhZGVyLmxlbmd0aCkgOiBoZWFkZXJcbiAgICB9KVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKClcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gaGVhZGVyc1xufVxuXG5Cb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpXG5cbmV4cG9ydCBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzXG4gIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDBcbiAgdGhpcy5zdGF0dXNUZXh0ID0gb3B0aW9ucy5zdGF0dXNUZXh0ID09PSB1bmRlZmluZWQgPyAnJyA6ICcnICsgb3B0aW9ucy5zdGF0dXNUZXh0XG4gIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xuICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbn1cblxuQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSlcblxuUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgIHVybDogdGhpcy51cmxcbiAgfSlcbn1cblxuUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbnZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG5SZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbn1cblxuZXhwb3J0IHZhciBET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG50cnkge1xuICBuZXcgRE9NRXhjZXB0aW9uKClcbn0gY2F0Y2ggKGVycikge1xuICBET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFja1xuICB9XG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSlcbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgeGhyLmFib3J0KClcbiAgICB9XG5cbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cmwgPT09ICcnICYmIGdsb2JhbC5sb2NhdGlvbi5ocmVmID8gZ2xvYmFsLmxvY2F0aW9uLmhyZWYgOiB1cmxcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCBmaXhVcmwocmVxdWVzdC51cmwpLCB0cnVlKVxuXG4gICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhocikge1xuICAgICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBzdXBwb3J0LmFycmF5QnVmZmVyICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpLmluZGV4T2YoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSkge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG5cbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gRE9ORSAoc3VjY2VzcyBvciBmYWlsdXJlKVxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdClcbiAgfSlcbn1cblxuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG5cbmlmICghZ2xvYmFsLmZldGNoKSB7XG4gIGdsb2JhbC5mZXRjaCA9IGZldGNoXG4gIGdsb2JhbC5IZWFkZXJzID0gSGVhZGVyc1xuICBnbG9iYWwuUmVxdWVzdCA9IFJlcXVlc3RcbiAgZ2xvYmFsLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBcIntyZXNvdXJjZXNWZXJzaW9ufVwiLFxuICAgIGtvbnR1ckRvbWFpbnM6IFwie2tvbnR1ckRvbWFpbnN9XCIsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgZnJvbSBcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICB9IGVsc2Uge1xuICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgIHZhciBhID0gW251bGxdO1xuICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgICBpZiAoQ2xhc3MpIHNldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSIsImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVGdW5jdGlvbiBmcm9tIFwiLi9pc05hdGl2ZUZ1bmN0aW9uLmpzXCI7XG5pbXBvcnQgY29uc3RydWN0IGZyb20gXCIuL2NvbnN0cnVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICB2YXIgX2NhY2hlID0gdHlwZW9mIE1hcCA9PT0gXCJmdW5jdGlvblwiID8gbmV3IE1hcCgpIDogdW5kZWZpbmVkO1xuXG4gIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFpc05hdGl2ZUZ1bmN0aW9uKENsYXNzKSkgcmV0dXJuIENsYXNzO1xuXG4gICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBfY2FjaGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpO1xuXG4gICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBXcmFwcGVyKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IFdyYXBwZXIsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgfTtcblxuICByZXR1cm4gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHtcbiAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpICE9PSAtMTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIk9wZXJhdGlvbiBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlID8/IFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHByb2dyYW0gc3RhdGVcIiArIChtZXNzYWdlICE9IHVuZGVmaW5lZCA/IFwiOiBcIiArIG1lc3NhZ2UgOiBcIlwiKSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJndW1lbnROYW1lOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXNzYWdlICE9IHVuZGVmaW5lZCA/IGAke21lc3NhZ2V9IChhcmd1bWVudDogJHthcmd1bWVudE5hbWV9KWAgOiBgSW52YWxpZCBhcmd1bWVudCB2YWx1ZTogJHthcmd1bWVudE5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGluZ0Vycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgdHlwaW5nXCIpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgRW1wbG95ZWUsXG4gICAgRW1wbG95ZWVMaXN0LFxuICAgIEdldEVtcGxveWVlTGlzdFJlcXVlc3QsXG4gICAgR2V0V29ya2luZ0V2ZW50TGlzdFJlcXVlc3QsXG4gICAgV29ya2luZ0V2ZW50TGlzdCxcbn0gZnJvbSBcIkBza2Jrb250dXIvc3RhZmYtc2VsZWN0b3Itd2lkZ2V0XCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwiRW5naW5lL3NyYy9FbmdpbmUvRm9ybS9Nb2RlbENoYW5nZUV2ZW50TGlzdGVuZXJcIjtcblxuaW1wb3J0IHsgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vRXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXAgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvRm9ybVBhcnRzL1RvdXIvVG91clR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9FcnJvckxvZy9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nUGF0aCwgTW9kZWxWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZXJuYWxIb29rRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L0V4dGVybmFsRXZlbnRzL0V4dGVybmFsSG9va0Z1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFJlYWRvbmx5TW9kZWxDaHVuayB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RlbFN0b3JpbmcvTW9kZWxDaHVua1wiO1xuaW1wb3J0IHR5cGUgeyBQaWNrbGlzdFF1ZXJ5UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvUGlja2xpc3RzL1BpY2tsaXN0VHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHsgTW9kZWxFdmVudHNMaXN0ZW5lciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvTW9kZWxFdmVudHMvTW9kZWxFdmVudFwiO1xuaW1wb3J0IHsgRGlnZXN0UXVlcnlGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudC9UeXBlcy9EaWdlc3RRdWVyeUZpbHRlclwiO1xuaW1wb3J0IHsgSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtTW9kZWxBY2Nlc3NvclwiO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGFsTWFuYWdlci9JTW9kYWxTdGF0ZVwiO1xuaW1wb3J0IHsgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vTW9kZWxQYXRoL01vZGVsUGF0aFwiO1xuaW1wb3J0IHsgQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcywgSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSW5pdFNlY3Rpb25MaWdodGJveFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL1ByaW50L1ByaW50VHlwZVwiO1xuaW1wb3J0IHsgRmlhc0FwaSwgRmlhc0NsaWVudEluaXRPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL1ZhbHVlRWRpdG9ycy9GaWFzL0ZpYXNJbnB1dC9GaWFzQXBpXCI7XG5pbXBvcnQgeyBJbnN0YW5jZXNEZWxldGluZ1J1bGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL0luc3RhbmNlc0RlbGV0aW5nL0luc3RhbmNlc0RlbGV0aW5nUnVsZVwiO1xuaW1wb3J0IHsgQ29tYmluZUZ1ZlJlc3VsdCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvRHJhZnRBY3Rpb25zL0NvbWJpbmVGdWZSZXN1bHRcIjtcbmltcG9ydCB7IElDYW5keUNvbXBvbmVudEhhbmRsZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db21wb25lbnRIYW5kbGVSZWdpc3RyeS9JQ2FuZHlDb21wb25lbnRIYW5kbGVcIjtcbmltcG9ydCB7IE5hdmlnYXRpb25QYXRoTWFwcGVyIH0gZnJvbSBcIi4uLy4uL0luamVjdGFibGVNb2R1bGVzL0luamVjdGFibGVFbmdpbmVNb2R1bGVzXCI7XG5pbXBvcnQgeyBJbXBvcnRFbXBsb3llckRvY3VtZW50c09wdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vU3RhZmZTZXJ2aWNlSW50ZWdyYXRpb24vRW1wbG95ZWVTZXJ2aWNlVHlwZXNcIjtcbmltcG9ydCB7IFRhYkluZm9zU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvTXVsdGlDb250cm9scy9UYWJzL1N0b3JlL1RhYkluZm9zU3RhdGVcIjtcblxuaW1wb3J0IHsgSUxlZ2FjeUZvcm0gfSBmcm9tIFwiLi9JTGVnYWN5Rm9ybVwiO1xuXG5leHBvcnQgdHlwZSBNb2RlbEV2ZW50UGF0aCA9XG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl1cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxDaGFuZ2VFdmVudFBhdGgocGF0aD86IHN0cmluZywgZmllbGROYW1lPzogc3RyaW5nKTogTW9kZWxFdmVudFBhdGgge1xuICAgIGlmIChmaWVsZE5hbWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXRoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGJlIGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGgsIGZpZWxkTmFtZV07XG4gICAgfVxuICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXTtcbn1cblxuZnVuY3Rpb24gbWFwQ2h1bmtWYWx1ZXMoY2h1bms6IFJlYWRvbmx5TW9kZWxDaHVuayk6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjaHVuaylcbiAgICAgICAgLmZpbHRlcihwYXRoID0+IGNodW5rW3BhdGhdICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaHVua1twYXRoXSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNodW5rW3BhdGhdO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBbcGF0aF06IHJlc3VsdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlQ2h1bmtWYWx1ZXMoY2h1bmtzOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+KTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICByZXR1cm4gY2h1bmtzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgY2h1bmspID0+ICh7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAuLi5jaHVuayxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgKTtcbn1cblxuY2xhc3MgTGVnYWN5UHVibGljRm9ybSBpbXBsZW1lbnRzIElQdWJsaWNGb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm06IElMZWdhY3lGb3JtO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZvcm06IElMZWdhY3lGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIG5hdmlnYXRlQnlIaWdobGFuZGVyUGF0aHMocGF0aHM6IHN0cmluZ1tdKTogUHJvbWlzZTxJQ2FuZHlDb21wb25lbnRIYW5kbGUgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hdmlnYXRpb25QYXRoTWFwcGVyKCk6IE5hdmlnYXRpb25QYXRoTWFwcGVyIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGJhdGNoVXBkYXRlKHVwZGF0ZVByb2M6ICh1cGRhdGVBY2Nlc3NvcjogSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yKSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBQYXJ0aWFsPFNlcnZlckVycm9yTG9nPik6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgdmFsaWRhdGVDaGlsZHJlbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIF9fSU5URVJOQUxfX2ltcG9ydEZyb21FbXBsb3llZVNlcnZpY2UoKTogUHJvbWlzZTxFbXBsb3llZVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfX0lOVEVSTkFMX19nZXRTZWxlY3RGdW5jdGlvbkZvckRpc2FibGVFbXBsb3llZUluU1MoXG4gICAgICAgIHBhdGhTcGVjOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPChlbXBsb3llZTogRW1wbG95ZWUpID0+IGJvb2xlYW4+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1vZGFsVW5pdE9wZW5lZEluc3RhbmNlKHBhZ2VJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUYWJzU3RhdGUoKTogVGFiSW5mb3NTdGF0ZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuYXZpZ2F0ZShuYXZpZ2F0aW9uUGF0aDogc3RyaW5nKTogUHJvbWlzZTxJQ2FuZHlDb21wb25lbnRIYW5kbGUgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGltcG9ydEVtcGxveWVyRG9jdW1lbnRzKG9wdGlvbnM6IEltcG9ydEVtcGxveWVyRG9jdW1lbnRzT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW1wb3J0RW1wbG95ZWVzKGVtcGxveWVlczogRW1wbG95ZWVbXSwgb3B0aW9ucz86IHsgc2NlbmFyaW8/OiBzdHJpbmcgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnQocHJpbnRUeXBlOiBQcmludFR5cGUsIGJvZHk/OiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG4gICAgcHVibGljIHJ1bk1hc3NBY3Rpb24oYWN0aW9uSWQ6IHN0cmluZywgcGFyYW1ldGVycz86IE1hc3NBY3Rpb25QYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCeUdJZChnSWQ6IHN0cmluZywgZmlsdGVyPzogRGlnZXN0UXVlcnlGaWx0ZXIpOiBQcm9taXNlPFBpY2tsaXN0UXVlcnlSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLnBpY2tsaXN0c1Byb3ZpZGVyLmdldERpZ2VzdEFwaVBpY2tsaXN0KGdJZCkucXVlcnkoZmlsdGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb24oZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmYoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb2RlbENoYW5nZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgbGlzdGVuZXI6IHVua25vd24pOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICB0aHJvdyBFcnJvcihcImZvcm0ub25Nb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZvcm0uY2hhbmdlU2V0LnN0b3BBdXRvc2VuZCgpO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnVubW91bnQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS51bm1vdW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRvdXJTdGVwcygpOiBTdGVwW10ge1xuICAgICAgICAvLyBGb3Igb2xkIGtld2ViXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUg0K3RgtC+INCyINGB0YLQsNGA0YvRhSDQtNCy0LjQttC60LDRhSDRgtGD0YIg0YLQsNC60L7QuSDQstGL0LfQvtCyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLnZhbGlkYXRvci52YWxpZGF0ZUFsbChrZXlzKTtcbiAgICB9XG4gICAgcHVibGljIGdldEFkZGl0aW9uYWxFbXBsb3llZUluZm8oZmlsdGVyczogR2V0RW1wbG95ZWVMaXN0UmVxdWVzdCk6IFByb21pc2U8RW1wbG95ZWVMaXN0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVsb2FkSW5uZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V29ya2luZ0V2ZW50c0ZvckVtcGxveWVlKGZpbHRlcnM6IEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0KTogUHJvbWlzZTxXb3JraW5nRXZlbnRMaXN0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlcnJvckNvdW50ID0gdGhpcy5mb3JtLm1vZGVsLmdldCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIik7XG4gICAgICAgIHJldHVybiBlcnJvckNvdW50ICE9IHVuZGVmaW5lZCAmJiBlcnJvckNvdW50ID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0pOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZywgdmFsdWU6IE1vZGVsVmFsdWUpOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KFxuICAgICAgICBwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcgfCB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSxcbiAgICAgICAgdmFsdWU/OiBNb2RlbFZhbHVlXG4gICAgKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXRoT3JNb2RlbENodW5rICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBhdGhPck1vZGVsQ2h1bmspXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJDaHVuayA9IE9iamVjdC5rZXlzKHBhdGhPck1vZGVsQ2h1bmspLnJlZHVjZTxSZWFkb25seU1vZGVsQ2h1bms+KFxuICAgICAgICAgICAgICAgIChyZXN1bHQsIHBhdGgpID0+ICh7IFtwYXRoXTogeyB2YWx1ZTogcGF0aE9yTW9kZWxDaHVua1twYXRoXSB9LCAuLi5yZXN1bHQgfSksXG4gICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5maWxsKGlubmVyQ2h1bmspO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuc2V0KHBhdGhPck1vZGVsQ2h1bmssIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5zZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIG9iamVjdCB3aXRoIHBhdGgtdmFsdWUgcGFpcnNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldChwYXRoT3JBcnJheTogc3RyaW5nIHwgc3RyaW5nW10pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoT3JBcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhcbiAgICAgICAgICAgICAgICBwYXRoT3JBcnJheVxuICAgICAgICAgICAgICAgICAgICAubWFwKHBhdGggPT4gbWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGgpKSlcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlPEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4+KChyZXN1bHQsIGFycmF5KSA9PiByZXN1bHQuY29uY2F0KGFycmF5KSwgW10pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JBcnJheSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoT3JBcnJheSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoT3JBcnJheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLmdldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3IgYXJyYXkgb2YgcGF0aHNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKHBhdGg6IHN0cmluZyk6IE1vZGVsVmFsdWUge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5tb2RlbC5nZXQocGF0aCwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weVN1YnRyZWUoXG4gICAgICAgIHNvdXJjZUJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIHRhcmdldEJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIGRvTm90Q29weVBhdGhzPzogc3RyaW5nW11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSW5zdGFuY2UocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2hpbGRyZW4ocGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1dWlkR2VuZXJhdGUoKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd01vZGFsKG9wdGlvbnM6IE1vZGFsT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTZWN0aW9uKG9wdGlvbnM6IEluaXRTZWN0aW9uRm9ybUxpZ2h0Ym94T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxsSW5pdFNlY3Rpb24ob3B0aW9uczogQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVGaWFzQXBpQ2xpZW50KG9wdGlvbnM6IEZpYXNDbGllbnRJbml0T3B0aW9ucyk6IEZpYXNBcGkge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuRW1wbG95ZWVFZGl0b3IoZW1wbG95ZWVJZDogc3RyaW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlKHBhdGg6IHN0cmluZywgaW5zdGFuY2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZXMocGF0aDogc3RyaW5nLCBpbnN0YW5jZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzT25Db250cm9sSWZFeGlzdChwYXRoOiBCaW5kaW5nUGF0aCk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdXRvRmllbGRzVG9BdXRvVmFsdWUocGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGVuc3VyZUluc3RhbmNlRnVsbHlMb2FkZWQoXG4gICAgICAgIGJpbmRpbmdQYXRoOiBzdHJpbmcgfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICAuLi5pbnN0YW5jZXM6IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjdXN0b21Ob3JtYWxpemUobm9ybWFsaXplcklkOiBzdHJpbmcsIHBhdGhQcmVmaXhlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlc0J5UnVsZXMocnVsZXM6IEluc3RhbmNlc0RlbGV0aW5nUnVsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURucCgpOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm06IElGb3JtKTogSVB1YmxpY0Zvcm0ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbmV3IExlZ2FjeVB1YmxpY0Zvcm0oZm9ybSBhcyBJTGVnYWN5Rm9ybSk7XG59XG4iLCIvKiB0c2xpbnQ6ZGlzYWJsZTpuby1udWxsLWtleXdvcmQgbm8tYW55IG5vLXVuc2FmZS1hbnkgKi9cbmltcG9ydCB7IGZldGNoIH0gZnJvbSBcIndoYXR3Zy1mZXRjaFwiO1xuaW1wb3J0IHsgQWxsSWNvbk5hbWVzIH0gZnJvbSBcInJlYWN0LXVpXCI7XG5cbmltcG9ydCB7IEVycm9yRmlyc3RDYWxsYmFjaywgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBJRm9ybSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvRm9ybS9JRm9ybVwiO1xuaW1wb3J0IHsgTG9hZEludG9Eb2N1bWVudCB9IGZyb20gXCIuLi8uLi9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQgfSBmcm9tIFwiLi4vVHlwZXMvSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IENsaWVudERyYWZ0SW5mb1Jlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2VcIjtcbmltcG9ydCB7IGdldENsaWVudERyYWZ0SW5mb1VybCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0dldENsaWVudERyYWZ0SW5mb1VybFwiO1xuaW1wb3J0IHsgQVVPT3B0aW9ucyB9IGZyb20gXCIuLi9UeXBlcy9BVU9PcHRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IExheW91dEV2ZW50c1N0YXRpYyB9IGZyb20gXCIuLi8uLi9Db250cm9scy9JbnRlcm5hbHMvTGF5b3V0RXZlbnRzL0xheW91dEV2ZW50c1wiO1xuXG5pbXBvcnQgeyBjbGllbnRTZXR0aW5ncyB9IGZyb20gXCIuL0NsaWVudFNldHRpbmdzXCI7XG5pbXBvcnQgeyBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtIH0gZnJvbSBcIi4vTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtXCI7XG5cbnR5cGUgRm9ybUNvbnRhaW5lciA9IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuXG50eXBlIEVuZ2luZUVudHJ5UG9pbnQgPSAoKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkRlc2NyaXB0aW9uIHtcbiAgICBpY29uOiBBbGxJY29uTmFtZXM7XG4gICAgdGV4dD86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpO1xuICAgIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG4gICAgaGludD86IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHRpZD86IHN0cmluZztcbiAgICB3ZWlnaHQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG4gICAgcGFuZWxBY3Rpb25zPzogQWN0aW9uRGVzY3JpcHRpb25bXTtcbn1cblxudHlwZSBTdGFydEZvcm1GdW5jID0gKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBleHRlbmRlZFNldHRpbmdzOiBSZW5kZXJGb3JtU2V0dGluZ3MpID0+IFByb21pc2U8SUZvcm0+O1xuXG5pbnRlcmZhY2UgQ2FuZHlHbG9iYWxJbmplY3RlZFZhciB7XG4gICAgc3RhcnQ6IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgb3B0aW9uczogU3RhcnRGb3JtT3B0aW9ucywgY2FsbGJhY2s/OiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+KSA9PiB2b2lkO1xuICAgIGtlZm9ybXNVcmw/OiBzdHJpbmc7XG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogYm9vbGVhbjtcbiAgICBlbnRyeVBvaW50OiB7IFtrZXk6IHN0cmluZ106IFN0YXJ0Rm9ybUZ1bmMgfTtcbiAgICBsb2FkRXJyb3I/OiB1bmtub3duO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gICAgbmFtZXNwYWNlIE5vZGVKUyB7XG4gICAgICAgIGludGVyZmFjZSBHbG9iYWwge1xuICAgICAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmRlY2xhcmUgY29uc3QgZ2xvYmFsOiBXaW5kb3c7XG5cbmZ1bmN0aW9uIGRlZmF1bHRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvKiBlbXB0eSAqL1xufVxuXG5mdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVybChyZWxhdGl2ZVVybDogc3RyaW5nID0gXCJcIik6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZVVybCA9IGdsb2JhbC5DRi5rZWZvcm1zVXJsIHx8IFwiXCI7XG5cbiAgICByZXR1cm4gYCR7YmFzZVVybH0vJHtyZWxhdGl2ZVVybH1gLnJlcGxhY2UoLyhbXjpdKVxcL3syLH0vZywgXCIkMS9cIik7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHVuZGVmaW5lZCB8IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgICBpZiAocGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5UGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBwYXJhbU5hbWUgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xuICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gcGFyYW1zW3BhcmFtTmFtZV07XG4gICAgICAgIGlmIChwYXJhbVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcXVlcnlQYXJ0cy5wdXNoKGAke3BhcmFtTmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSl9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHF1ZXJ5UGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aCArIFwiP1wiICsgcXVlcnlQYXJ0cy5qb2luKFwiJlwiKTtcbn1cblxuZnVuY3Rpb24gaXNBbGxvd2VkKGRvbWFpbnM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKD86JHtkb21haW5zLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuXCIpLnJlcGxhY2UoL1xcKi9nLCBcIlthLXowLTktLl9dK1wiKX0pJGApLnRlc3QoXG4gICAgICAgIGdsb2JhbC5sb2NhdGlvbi5ob3N0XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGdsb2JhbC5sb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcP3wjfCYpLywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgIC5tYXAocGFyYW0gPT4gcGFyYW0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKS5zcGxpdChcIj1cIikubWFwKGRlY29kZVVSSUNvbXBvbmVudCkpXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgLmZpbmQoKFtrZXldKSA9PiBrZXkgPT0gbmFtZSkgfHwgW10pWzFdXG4gICAgKTtcbn1cblxudHlwZSBUYXNrID0gKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwodGFza3M6IFRhc2tbXSwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGNvbXBsZXRlZCA9IDA7XG5cbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICB0YXNrKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgU3RhcnRGb3JtU2V0dGluZyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uLCByZXNvdXJjZXNWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBwYW5lbEFjdGlvbnM/OiBBY3Rpb25EZXNjcmlwdGlvbltdO1xuICAgIGV2ZW50RW1pdHRlcj86IExheW91dEV2ZW50c1N0YXRpYztcbiAgICBlbXBsb3llcklkPzogc3RyaW5nO1xuICAgIHNob3dOYXZpZ2F0aW9uU2lkZWJhcj86IGJvb2xlYW47XG4gICAgb25SZW1vdmVBdHRhY2htZW50PzogKCkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nKTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludCB7XG4gICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBnbG9iYWxbZW5naW5lVmVyc2lvbl0gJiYgZ2xvYmFsW2VuZ2luZVZlcnNpb25dLmRlZmF1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0KFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4gPSBkZWZhdWx0Q2FsbGJhY2tcbik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgY29uc3QgeyBucywgZHJhZnRJZCB9ID0gb3B0aW9ucztcblxuICAgIGlmICghaXNBbGxvd2VkKGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChnZXRDbGllbnREcmFmdEluZm9VcmwoeyBuczogbnMsIGRyYWZ0SWQ6IGRyYWZ0SWQgfSkpLCB7XG4gICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0geyBtZXRob2Q6IFwiR0VUXCIgfTtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gb3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBBVVRILlNJRCAke29wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgfVxuICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG5cbiAgICBmZXRjaEltcGwoY2xpZW50RHJhZnRVcmwsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAudGhlbih4ID0+IHguanNvbigpKVxuICAgICAgICAudGhlbigoY2xpZW50RHJhZnRJbmZvOiBDbGllbnREcmFmdEluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gY2xpZW50RHJhZnRJbmZvLmdmdjtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXplZDogY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCxcbiAgICAgICAgICAgICAgICBjYXVsZHJvbkFwaVVybDogY2xpZW50U2V0dGluZ3MuY2F1bGRyb25BcGlVcmwsXG4gICAgICAgICAgICAgICAgaXNUZXN0U2VydmVyOiBjbGllbnRTZXR0aW5ncy5pc1Rlc3RTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogY2xpZW50U2V0dGluZ3MucmVuZGVyQ2FjaGluZ0ZvcklFOCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IGNsaWVudFNldHRpbmdzLm5vcm1hbGl6YXRpb25PblNlcnZlcixcbiAgICAgICAgICAgICAgICBub3JtYXRpdmVVcmw6IGNsaWVudFNldHRpbmdzLm5vcm1hdGl2ZVVybCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBjbGllbnRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGtvbnR1ckRvbWFpbnM6IGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMsXG4gICAgICAgICAgICAgICAgc2hvd05hdmlnYXRpb25TaWRlYmFyOiBvcHRpb25zLnNob3dOYXZpZ2F0aW9uU2lkZWJhciA/PyB0cnVlLFxuICAgICAgICAgICAgICAgIG9uUmVtb3ZlQXR0YWNobWVudDogb3B0aW9ucy5vblJlbW92ZUF0dGFjaG1lbnQsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAuLi5jbGllbnREcmFmdEluZm8sXG4gICAgICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IG9wdGlvbnMuZmVlZGJhY2tFbmFibGVkID8/IGNsaWVudERyYWZ0SW5mby5mZWVkYmFja0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsZWFuRm9ybTogb3B0aW9ucy5pc0Rpc2FibGVkQ2xlYW5Gb3JtID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbG9hZEZvcm0oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBnZnY6IGV4dGVuZGVkU2V0dGluZ3MuZ2Z2LFxuICAgICAgICAgICAgICAgICAgICBlbmdpbmVWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLmVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1ZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2VzVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgdGhlbWU6IGV4dGVuZGVkU2V0dGluZ3MudGhlbWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2FkRXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEVycm9yIHx8ICFnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoYGR5bmFtaWMgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciBnZnYgJHtnZnZ9YCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlciA9IGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmV4dGVuZGVkU2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzQXBpOiBvcHRpb25zLnRlbXBsYXRlc0FwaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtOiByZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spO1xufVxuXG5jb25zdCBDYW5keUNsaWVudEV4cG9ydHM6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIgPSB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVudHJ5UG9pbnQ6IHt9LFxuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4fVwiKSxcbiAgICBrZWZvcm1zVXJsOiBcIntrZWZvcm1zVXJsfVwiLFxufTtcblxuZ2xvYmFsLkNGID0gQ2FuZHlDbGllbnRFeHBvcnRzO1xuXG5leHBvcnQgeyBDYW5keUNsaWVudEV4cG9ydHMgfTtcbiIsImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcblxuICBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcblxuICB2YXIgX3MsIF9lO1xuXG4gIHRyeSB7XG4gICAgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsImltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4uL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnREcmFmdEluZm9VcmwoZHJhZnRJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAvLyBOT1RFINCt0YLQsCDRhNGD0L3QutGG0LjRjyDQvtCx0YrRj9Cy0LvQtdC90LAg0L7RgtC00LXQu9GM0L3Qviwg0LjQsdC+INC+0L3QsCDQstGF0L7QtNC40YIg0LIg0YHQvtGB0YLQsNCyIGNsaWVudC5qcyDQuFxuICAgIC8vINC90LUg0LTQvtC70LbQvdC+INC/0YDQvtC40YHRhdC+0LTQuNGC0Ywg0YPRgtC10LbQtdC70LXQvdC40Y8gY2xpZW50LmpzLdCwXG4gICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0SWQubnN9L2RyYWZ0cy8ke2RyYWZ0SWQuZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gO1xufVxuIiwiLyoqKlxuICog0KHRgtGA0L7Qs9C+0YLQuNC/0LjQt9C40YDQvtCy0LDQvdC90LDRjyDQt9Cw0LzQtdC90LAg0LTQu9GPIEJvb2xlYW4oLi4uKVxuICog0J7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8gWy4uLl0uZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVVua25vd25FcnJvcihlcnJvcjogdW5rbm93bik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlcnJvcj8uW1wibWVzc2FnZVwiXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGFzc2VydHMgaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIGlmICghaXNOb3ROdWxsT3JVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgbXVzdCBiZSBkZWZpbmVkYCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3IpOiBuZXZlciB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IG1lc3NhZ2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG1lc3NhZ2U7XG4gICAgfVxufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUxlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBoYXZlIG1pbmltYWwgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5ldmVyKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQW5kR2V0U3RyaW5nKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bmV2ZXJBcmd1bWVudH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuQXN5bmNBY3Rpb24oYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIGFjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0ID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgc3RyaW5nIHtcbiAgICByZXR1cm4gIWlzTnVsbE9yRW1wdHkoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JXaGl0ZVNwYWNlKGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogaW5wdXQgaXMgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dC50cmltKCkgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltTGFzdFNsYXNoKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnNsaWNlKC0xKSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMCwgLTEpIDogdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXM8VD4odmFsdWU6IFQpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztFQUNBLElBQUlBLENBQUEsR0FBc0IsQ0FBQztFQ0RaLFNBQVNDLEVBQWdCRCxDQUFBLEVBQUtDLENBQUEsRUFBS0MsQ0FBQTtJQVloRCxPQVhJRCxDQUFBLElBQU9ELENBQUEsR0FDVEcsTUFBQSxDQUFPQyxjQUFBLENBQWVKLENBQUEsRUFBS0MsQ0FBQSxFQUFLO01BQzlCSSxLQUFBLEVBQU9ILENBQUE7TUFDUEksVUFBQSxHQUFZO01BQ1pDLFlBQUEsR0FBYztNQUNkQyxRQUFBLEdBQVU7SUFBQSxLQUdaUixDQUFBLENBQUlDLENBQUEsSUFBT0MsQ0FBQSxFQUdORixDQUNUO0VBQUE7RUNiZSxTQUFTRSxFQUFrQkYsQ0FBQSxFQUFLQyxDQUFBO0lBQUEsQ0FDbEMsUUFBUEEsQ0FBQSxJQUFlQSxDQUFBLEdBQU1ELENBQUEsQ0FBSVMsTUFBQSxNQUFRUixDQUFBLEdBQU1ELENBQUEsQ0FBSVMsTUFBQTtJQUUvQyxLQUFLLElBQUlQLENBQUEsR0FBSSxHQUFHUSxDQUFBLEdBQU8sSUFBSUMsS0FBQSxDQUFNVixDQUFBLEdBQU1DLENBQUEsR0FBSUQsQ0FBQSxF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
|
|
1043
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJyIiwibiIsInRvUHJpbWl0aXZlIiwibyIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwibGVuZ3RoIiwiQXJyYXkiLCJnIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIiwid2luZG93IiwiaSIsInNlbGYiLCJhIiwicyIsInUiLCJCbG9iIiwiYyIsImwiLCJmIiwiaCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsInRvU3RyaW5nIiwiZCIsInRlc3QiLCJ0b0xvd2VyQ2FzZSIsInAiLCJ5IiwibmV4dCIsInNoaWZ0IiwiZG9uZSIsIm0iLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiaXNBcnJheSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ2IiwiX25vQm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImIiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJ3IiwiRmlsZVJlYWRlciIsInJlYWRBc0FycmF5QnVmZmVyIiwic2xpY2UiLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsInNldCIsImJ1ZmZlciIsIkUiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiRGF0YVZpZXciLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsImdldCIsInR5cGUiLCJibG9iIiwicmVzb2x2ZSIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJieXRlT2Zmc2V0IiwidGhlbiIsInRleHQiLCJleGVjIiwicmVhZEFzVGV4dCIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJmb3JtRGF0YSIsImsiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwiZGVsZXRlIiwiaGFzIiwiaGFzT3duUHJvcGVydHkiLCJrZXlzIiwicHVzaCIsInZhbHVlcyIsImVudHJpZXMiLCJPIiwiQSIsImJvZHkiLCJ1cmwiLCJjcmVkZW50aWFscyIsIm1ldGhvZCIsIm1vZGUiLCJzaWduYWwiLCJ0b1VwcGVyQ2FzZSIsIkFib3J0Q29udHJvbGxlciIsInJlZmVycmVyIiwiY2FjaGUiLCJyZXBsYWNlIiwiRGF0ZSIsImdldFRpbWUiLCJ0cmltIiwic3BsaXQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJqIiwic3RhdHVzIiwiUmFuZ2VFcnJvciIsIm9rIiwic3RhdHVzVGV4dCIsImNsb25lIiwiVCIsInJlZGlyZWN0IiwibG9jYXRpb24iLCJTIiwiRE9NRXhjZXB0aW9uIiwibWVzc2FnZSIsIm5hbWUiLCJzdGFjayIsImNyZWF0ZSIsIlAiLCJhYm9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInN1YnN0ciIsImNvbnNvbGUiLCJ3YXJuIiwicmVzcG9uc2VVUkwiLCJyZXNwb25zZSIsInJlc3BvbnNlVGV4dCIsInNldFRpbWVvdXQiLCJvbnRpbWVvdXQiLCJvbmFib3J0Iiwib3BlbiIsImhyZWYiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJIZWFkZXJzIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJfIiwiQiIsImtleSIsIkMiLCJwb2x5ZmlsbCIsImZldGNoIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiUiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJkb2N1bWVudEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic3JjIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJJIiwiQm9vbGVhbiIsIkQiLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwicmVzb3VyY2VzVmVyc2lvbiIsImtvbnR1ckRvbWFpbnMiLCJVIiwieCIsImFyZ3VtZW50cyIsImFwcGx5IiwiRiIsInNldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJiaW5kIiwiX19wcm90b19fIiwiTSIsIk4iLCJMIiwidmFsdWVPZiIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiViIsIk1hcCIsIl93cmFwTmF0aXZlU3VwZXIiLCJSZWZlcmVuY2VFcnJvciIsInEiLCJIIiwiJCIsIlgiLCJmaWx0ZXIiLCJKIiwicmVkdWNlIiwiRyIsIlciLCJmb3JtIiwicmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIndyYXAiLCJwcmV2Iiwic3RvcCIsInBpY2tsaXN0c1Byb3ZpZGVyIiwiZ2V0RGlnZXN0QXBpUGlja2xpc3QiLCJxdWVyeSIsImV2ZW50TWFuYWdlciIsIm9uIiwib2ZmIiwiY2hhbmdlU2V0Iiwic3RvcEF1dG9zZW5kIiwidW5tb3VudCIsIm1vZGVsIiwiZ2V0Q2h1bmsiLCJzZXR0aW5ncyIsImZvcm1Sb290IiwidmFsaWRhdG9yIiwidmFsaWRhdGVBbGwiLCJmaWxsIiwiY29uY2F0IiwiWSIsImVlIiwiQ0YiLCJrZWZvcm1zVXJsIiwidGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJyZSIsInNlYXJjaCIsImZpbmQiLCJyZXR1cm4iLCJmcm9tIiwibmUiLCJzdGFydCIsIm5zIiwiZHJhZnRJZCIsIlJlZ0V4cCIsImhvc3QiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImF1dGhTaWQiLCJBdXRob3JpemF0aW9uIiwiZ2Z2IiwiZW5naW5lVmVyc2lvbiIsIlEiLCJzaG93TmF2aWdhdGlvblNpZGViYXIiLCJvblJlbW92ZUF0dGFjaG1lbnQiLCJmZWVkYmFja0VuYWJsZWQiLCJpc0Rpc2FibGVkQ2xlYW5Gb3JtIiwiaXNEaXNhYmxlZENsb3NlQnV0dG9uIiwiaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbiIsImVudHJ5UG9pbnQiLCJzdHlsZVNoZWV0Iiwic2NyaXB0IiwidGhlbWUiLCJkZWZhdWx0IiwicHVibGljRm9ybSIsImNhdGNoIiwidGVtcGxhdGVzQXBpIiwicmVuZGVyRm9ybSIsInBhcnRpYWxSZW5kZXJpbmdGb3JJRTgiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvSGVscGVycy9Mb2FkSW50b0RvY3VtZW50LnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudFNldHRpbmdzLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3dyYXBOYXRpdmVTdXBlci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXNOYXRpdmVGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY29uc3RydWN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0Vycm9ycy50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50LnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmwudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL1R5cGluZ1V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSByZXF1aXJlIHNjb3BlXG52YXIgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHt9O1xuXG4iLCJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxuZXhwb3J0IHsgdG9Qcm9wZXJ0eUtleSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxuZXhwb3J0IHsgdG9QcmltaXRpdmUgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuICAgIHZhbHVlOiB0LFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVtyXSA9IHQsIGU7XG59XG5leHBvcnQgeyBfZGVmaW5lUHJvcGVydHkgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcbiAgcmV0dXJuIG47XG59XG5leHBvcnQgeyBfYXJyYXlMaWtlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbnZhciBnID1cbiAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKSB8fFxuICB7fVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBnLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZyAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgYmxvYjpcbiAgICAnRmlsZVJlYWRlcicgaW4gZyAmJlxuICAgICdCbG9iJyBpbiBnICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnLFxuICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBnXG59XG5cbmZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgXVxuXG4gIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICB9XG4gIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+IV0vaS50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbmZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdGhpcy5tYXAgPSB7fVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIZWFkZXJzIGNvbnN0cnVjdG9yOiBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kJyArIGhlYWRlci5sZW5ndGgpXG4gICAgICB9XG4gICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgfSwgdGhpcylcbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICB9XG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKG5hbWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGl0ZW1zLnB1c2godmFsdWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbn1cblxuZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICBpZiAoYm9keS5fbm9Cb2R5KSByZXR1cm5cbiAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gIH1cbiAgYm9keS5ib2R5VXNlZCA9IHRydWVcbn1cblxuZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgIH1cbiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICB2YXIgbWF0Y2ggPSAvY2hhcnNldD0oW0EtWmEtejAtOV8tXSspLy5leGVjKGJsb2IudHlwZSlcbiAgdmFyIGVuY29kaW5nID0gbWF0Y2ggPyBtYXRjaFsxXSA6ICd1dGYtOCdcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYiwgZW5jb2RpbmcpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgfVxuICByZXR1cm4gY2hhcnMuam9pbignJylcbn1cblxuZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gIGlmIChidWYuc2xpY2UpIHtcbiAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gIH0gZWxzZSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICB9XG59XG5cbmZ1bmN0aW9uIEJvZHkoKSB7XG4gIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgIC8qXG4gICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICBwcm92aWRlIHVzZWZ1bCB0ZXN0IGhhcm5lc3MgZmVhdHVyZXMgc3VjaCBhcyBmbHVzaC4gSG93ZXZlciwgb25cbiAgICAgIEVTNSBicm93c2VycyB3aXRob3V0IGZldGNoIG9yIFByb3h5IHN1cHBvcnQgcG9sbHlmaWxscyBtdXN0IGJlIHVzZWQ7XG4gICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgb24gdGhlIG9iamVjdCBiZWZvcmUgdGhlIFByb3h5IGlzIGNyZWF0ZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXNcbiAgICAgIFJlc3BvbnNlLmJvZHlVc2VkIGV4aXN0cyBvbiB0aGUgaW5zdGFuY2UsIHdoaWxlIG1haW50YWluaW5nIHRoZVxuICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgIF9pbml0Qm9keSBpcyBjYWxsZWQuXG4gICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ25cbiAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZFxuICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgIGlmICghYm9keSkge1xuICAgICAgdGhpcy5fbm9Cb2R5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICB2YXIgaXNDb25zdW1lZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0ICsgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgYXMgQXJyYXlCdWZmZXInKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydDT05ORUNUJywgJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BBVENIJywgJ1BPU1QnLCAnUFVUJywgJ1RSQUNFJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbFxuICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICB9XG5cbiAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG4gIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgfVxuICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWwgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoJ0Fib3J0Q29udHJvbGxlcicgaW4gZykge1xuICAgICAgdmFyIGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICByZXR1cm4gY3RybC5zaWduYWw7XG4gICAgfVxuICB9KCkpO1xuICB0aGlzLnJlZmVycmVyID0gbnVsbFxuXG4gIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gIH1cbiAgdGhpcy5faW5pdEJvZHkoYm9keSlcblxuICBpZiAodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICBpZiAob3B0aW9ucy5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBvcHRpb25zLmNhY2hlID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICB2YXIgcmVQYXJhbVNlYXJjaCA9IC8oWz8mXSlfPVteJl0qL1xuICAgICAgaWYgKHJlUGFyYW1TZWFyY2gudGVzdCh0aGlzLnVybCkpIHtcbiAgICAgICAgLy8gSWYgaXQgYWxyZWFkeSBleGlzdHMgdGhlbiBzZXQgdGhlIHZhbHVlIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGEgbmV3ICdfJyBwYXJhbWV0ZXIgdG8gdGhlIGVuZCB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdmFyIHJlUXVlcnlTdHJpbmcgPSAvXFw/L1xuICAgICAgICB0aGlzLnVybCArPSAocmVRdWVyeVN0cmluZy50ZXN0KHRoaXMudXJsKSA/ICcmJyA6ICc/JykgKyAnXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHtib2R5OiB0aGlzLl9ib2R5SW5pdH0pXG59XG5cbmZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgYm9keVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gZm9ybVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKVxuICAvLyBBdm9pZGluZyBzcGxpdCB2aWEgcmVnZXggdG8gd29yayBhcm91bmQgYSBjb21tb24gSUUxMSBidWcgd2l0aCB0aGUgY29yZS1qcyAzLjYuMCByZWdleCBwb2x5ZmlsbFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzc1MVxuICBwcmVQcm9jZXNzZWRIZWFkZXJzXG4gICAgLnNwbGl0KCdcXHInKVxuICAgIC5tYXAoZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLmluZGV4T2YoJ1xcbicpID09PSAwID8gaGVhZGVyLnN1YnN0cigxLCBoZWFkZXIubGVuZ3RoKSA6IGhlYWRlclxuICAgIH0pXG4gICAgLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdSZXNwb25zZSAnICsgZXJyb3IubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbkJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMjAwIDogb3B0aW9ucy5zdGF0dXNcbiAgaWYgKHRoaXMuc3RhdHVzIDwgMjAwIHx8IHRoaXMuc3RhdHVzID4gNTk5KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdSZXNwb25zZSc6IFRoZSBzdGF0dXMgcHJvdmlkZWQgKDApIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsyMDAsIDU5OV0uXCIpXG4gIH1cbiAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICB0aGlzLnN0YXR1c1RleHQgPSBvcHRpb25zLnN0YXR1c1RleHQgPT09IHVuZGVmaW5lZCA/ICcnIDogJycgKyBvcHRpb25zLnN0YXR1c1RleHRcbiAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxufVxuXG5Cb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG5SZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgdXJsOiB0aGlzLnVybFxuICB9KVxufVxuXG5SZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMjAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLm9rID0gZmFsc2VcbiAgcmVzcG9uc2Uuc3RhdHVzID0gMFxuICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxudmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cblJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxufVxuXG5leHBvcnQgdmFyIERPTUV4Y2VwdGlvbiA9IGcuRE9NRXhjZXB0aW9uXG50cnkge1xuICBuZXcgRE9NRXhjZXB0aW9uKClcbn0gY2F0Y2ggKGVycikge1xuICBET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFja1xuICB9XG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSlcbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgeGhyLmFib3J0KClcbiAgICB9XG5cbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICAvLyBUaGlzIGNoZWNrIGlmIHNwZWNpZmljYWxseSBmb3Igd2hlbiBhIHVzZXIgZmV0Y2hlcyBhIGZpbGUgbG9jYWxseSBmcm9tIHRoZSBmaWxlIHN5c3RlbVxuICAgICAgLy8gT25seSBpZiB0aGUgc3RhdHVzIGlzIG91dCBvZiBhIG5vcm1hbCByYW5nZVxuICAgICAgaWYgKHJlcXVlc3QudXJsLmluZGV4T2YoJ2ZpbGU6Ly8nKSA9PT0gMCAmJiAoeGhyLnN0YXR1cyA8IDIwMCB8fCB4aHIuc3RhdHVzID4gNTk5KSkge1xuICAgICAgICBvcHRpb25zLnN0YXR1cyA9IDIwMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMuc3RhdHVzID0geGhyLnN0YXR1cztcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgdGltZWQgb3V0JykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cmwgPT09ICcnICYmIGcubG9jYXRpb24uaHJlZiA/IGcubG9jYXRpb24uaHJlZiA6IHVybFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpXG5cbiAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXJcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycyB8fCAoZy5IZWFkZXJzICYmIGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIGcuSGVhZGVycykpKSB7XG4gICAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIG5hbWVzLnB1c2gobm9ybWFsaXplTmFtZShuYW1lKSlcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgIH0pXG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAobmFtZXMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcblxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICB9KVxufVxuXG5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcblxuaWYgKCFnLmZldGNoKSB7XG4gIGcuZmV0Y2ggPSBmZXRjaFxuICBnLkhlYWRlcnMgPSBIZWFkZXJzXG4gIGcuUmVxdWVzdCA9IFJlcXVlc3RcbiAgZy5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikge1xuICBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG59XG5leHBvcnQgeyBfY2xhc3NDYWxsQ2hlY2sgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHtcbiAgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7XG4gICAgdmFyIG8gPSByW3RdO1xuICAgIG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCB0b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7XG4gIHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGU7XG59XG5leHBvcnQgeyBfY3JlYXRlQ2xhc3MgYXMgZGVmYXVsdCB9OyIsIi8vIHRzbGludDpkaXNhYmxlIG5vLXVuc2FmZS1hbnlcbmV4cG9ydCBjbGFzcyBMb2FkSW50b0RvY3VtZW50IHtcbiAgICBwdWJsaWMgc3RhdGljIHNjcmlwdCh1cmk6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGxldCBzY3JpcHRMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IHNjcmlwdDogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblxuICAgICAgICBmdW5jdGlvbiBsb2FkSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChzY3JpcHRMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc2NyaXB0LnJlYWR5U3RhdGUgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgIHNjcmlwdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmcgdGhlIHVzZXIgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBjb21wbGV0ZXMgdG8gbG9hZC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbiBJRSBldmVuIHVwb24gZXJyb3IuIEluIGFueVxuICAgICAgICAvLyBjYXNlIGl0IGlzIHRoZSBjbGllbnQncyByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgc2NyaXB0IHJhblxuICAgICAgICAvLyBzdWNjZXNzZnVsbHkuXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBsb2FkSGFuZGxlcjtcbiAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGxvYWRIYW5kbGVyO1xuXG4gICAgICAgIC8vIEFkZCBhbiBlcnJvciBjYWxsYmFjay5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogTm90IHN1cHBvcnRlZCBpbiBJRS5cbiAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzY3JpcHQuXCIpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgdGhlIHNjcmlwdCBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogU2FmYXJpIG5ldmVyIGxvYWRzIHRoZSBzY3JpcHQgaWYgd2UgZG9uJ3Qgc2V0XG4gICAgICAgIC8vIHRoZSBzcmMgYXR0cmlidXRlIGJlZm9yZSBhcHBlbmRpbmcuXG4gICAgICAgIHNjcmlwdC5zcmMgPSB1cmk7XG4gICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiLCBcInVzZS1jcmVkZW50aWFsc1wiKTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc3R5bGVTaGVldCh1cmk6IHN0cmluZywgaWdub3JlRXJyb3I6IGJvb2xlYW4sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNvbHZlID0gKCkgPT4gY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlnbm9yZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzdHlsZXNoZWV0LlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSA/PyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcInN0eWxlc2hlZXRcIik7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdXJpKTtcbiAgICB9XG59XG4iLCJmdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGllbnRTZXR0aW5ncyA9IHtcbiAgICBhdXRob3JpemVkOiBwYXJzZUJvb2woXCJ7YXV0aG9yaXplZH1cIiksXG4gICAgY2F1bGRyb25BcGlVcmw6IFwie2NhdWxkcm9uQXBpVXJsfVwiLFxuICAgIGlzVGVzdFNlcnZlcjogcGFyc2VCb29sKFwie2lzVGVzdFNlcnZlcn1cIiksXG4gICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogcGFyc2VCb29sKFwie3JlbmRlckNhY2hpbmdGb3JJRTh9XCIpLFxuICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogcGFyc2VCb29sKFwie25vcm1hbGl6YXRpb25PblNlcnZlcn1cIiksXG4gICAgbm9ybWF0aXZlVXJsOiBcIntub3JtYXRpdmVVcmx9XCIsXG4gICAgcmVzb3VyY2VzVmVyc2lvbjogXCJ7cmVzb3VyY2VzVmVyc2lvbn1cIixcbiAgICBrb250dXJEb21haW5zOiBcIntrb250dXJEb21haW5zfVwiLFxufTtcbiIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChuLCB0LCBlLCByLCBvLCBhLCBjKSB7XG4gIHRyeSB7XG4gICAgdmFyIGkgPSBuW2FdKGMpLFxuICAgICAgdSA9IGkudmFsdWU7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gdm9pZCBlKG4pO1xuICB9XG4gIGkuZG9uZSA/IHQodSkgOiBQcm9taXNlLnJlc29sdmUodSkudGhlbihyLCBvKTtcbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdCA9IHRoaXMsXG4gICAgICBlID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAociwgbykge1xuICAgICAgdmFyIGEgPSBuLmFwcGx5KHQsIGUpO1xuICAgICAgZnVuY3Rpb24gX25leHQobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIG4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KG4pIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGEsIHIsIG8sIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgbik7XG4gICAgICB9XG4gICAgICBfbmV4dCh2b2lkIDApO1xuICAgIH0pO1xuICB9O1xufVxuZXhwb3J0IHsgX2FzeW5jVG9HZW5lcmF0b3IgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO1xuICB9LCBfZ2V0UHJvdG90eXBlT2YodCk7XG59XG5leHBvcnQgeyBfZ2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0O1xuICB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5leHBvcnQgeyBfc2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHtcbiAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiB0LFxuICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH1cbiAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlICYmIHNldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICB0cnkge1xuICAgIHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgfSBjYXRjaCAodCkge31cbiAgcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICByZXR1cm4gISF0O1xuICB9KSgpO1xufVxuZXhwb3J0IHsgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGdldFByb3RvdHlwZU9mIGZyb20gXCIuL2dldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZUZ1bmN0aW9uIGZyb20gXCIuL2lzTmF0aXZlRnVuY3Rpb24uanNcIjtcbmltcG9ydCBjb25zdHJ1Y3QgZnJvbSBcIi4vY29uc3RydWN0LmpzXCI7XG5mdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKHQpIHtcbiAgdmFyIHIgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIE1hcCA/IG5ldyBNYXAoKSA6IHZvaWQgMDtcbiAgcmV0dXJuIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKHQpIHtcbiAgICBpZiAobnVsbCA9PT0gdCB8fCAhaXNOYXRpdmVGdW5jdGlvbih0KSkgcmV0dXJuIHQ7XG4gICAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIGlmICh2b2lkIDAgIT09IHIpIHtcbiAgICAgIGlmIChyLmhhcyh0KSkgcmV0dXJuIHIuZ2V0KHQpO1xuICAgICAgci5zZXQodCwgV3JhcHBlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7XG4gICAgICByZXR1cm4gY29uc3RydWN0KHQsIGFyZ3VtZW50cywgZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogV3JhcHBlcixcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgfVxuICAgIH0pLCBzZXRQcm90b3R5cGVPZihXcmFwcGVyLCB0KTtcbiAgfSwgX3dyYXBOYXRpdmVTdXBlcih0KTtcbn1cbmV4cG9ydCB7IF93cmFwTmF0aXZlU3VwZXIgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKHQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gLTEgIT09IEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwodCkuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIik7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gXCJmdW5jdGlvblwiID09IHR5cGVvZiB0O1xuICB9XG59XG5leHBvcnQgeyBfaXNOYXRpdmVGdW5jdGlvbiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBmcm9tIFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIjtcbmltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2NvbnN0cnVjdCh0LCBlLCByKSB7XG4gIGlmIChpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkgcmV0dXJuIFJlZmxlY3QuY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gW251bGxdO1xuICBvLnB1c2guYXBwbHkobywgZSk7XG4gIHZhciBwID0gbmV3ICh0LmJpbmQuYXBwbHkodCwgbykpKCk7XG4gIHJldHVybiByICYmIHNldFByb3RvdHlwZU9mKHAsIHIucHJvdG90eXBlKSwgcDtcbn1cbmV4cG9ydCB7IF9jb25zdHJ1Y3QgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHtcbiAgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpO1xufVxuZXhwb3J0IHsgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkge1xuICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxuZXhwb3J0IHsgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBhcyBkZWZhdWx0IH07IiwiZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUHJvZ3JhbVN0YXRlRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgcHJvZ3JhbSBzdGF0ZVwiICsgKG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gXCI6IFwiICsgbWVzc2FnZSA6IFwiXCIpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihhcmd1bWVudE5hbWU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gYCR7bWVzc2FnZX0gKGFyZ3VtZW50OiAke2FyZ3VtZW50TmFtZX0pYCA6IGBJbnZhbGlkIGFyZ3VtZW50IHZhbHVlOiAke2FyZ3VtZW50TmFtZX1gXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwaW5nRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCB0eXBpbmdcIik7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBFbXBsb3llZSxcbiAgICBFbXBsb3llZUxpc3QsXG4gICAgR2V0RW1wbG95ZWVMaXN0UmVxdWVzdCxcbiAgICBHZXRXb3JraW5nRXZlbnRMaXN0UmVxdWVzdCxcbiAgICBXb3JraW5nRXZlbnRMaXN0LFxufSBmcm9tIFwiQHNrYmtvbnR1ci9zdGFmZi1zZWxlY3Rvci13aWRnZXRcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJFbmdpbmUvc3JjL0VuZ2luZS9Gb3JtL01vZGVsQ2hhbmdlRXZlbnRMaXN0ZW5lclwiO1xuXG5pbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9FcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU3RlcCB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9Gb3JtUGFydHMvVG91ci9Ub3VyVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRXJyb3JMb2cgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL0Vycm9yTG9nL1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdQYXRoLCBNb2RlbFZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0NvcmVUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbEhvb2tGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvRXh0ZXJuYWxFdmVudHMvRXh0ZXJuYWxIb29rRnVuY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgUmVhZG9ubHlNb2RlbENodW5rIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGVsU3RvcmluZy9Nb2RlbENodW5rXCI7XG5pbXBvcnQgdHlwZSB7IFBpY2tsaXN0UXVlcnlSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9QaWNrbGlzdHMvUGlja2xpc3RUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBJRm9ybSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi8uLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgeyBNb2RlbEV2ZW50c0xpc3RlbmVyIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9Nb2RlbEV2ZW50cy9Nb2RlbEV2ZW50XCI7XG5pbXBvcnQgeyBEaWdlc3RRdWVyeUZpbHRlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvRGlnZXN0QXBpQ2xpZW50L1R5cGVzL0RpZ2VzdFF1ZXJ5RmlsdGVyXCI7XG5pbXBvcnQgeyBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1Nb2RlbEFjY2Vzc29yXCI7XG5pbXBvcnQgeyBNb2RhbE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kYWxNYW5hZ2VyL0lNb2RhbFN0YXRlXCI7XG5pbXBvcnQgeyBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvTW9kZWxQYXRoXCI7XG5pbXBvcnQgeyBDYWxsSW5pdFNlY3Rpb25MaWdodGJveFByb3BzLCBJbml0U2VjdGlvbkZvcm1MaWdodGJveE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9Jbml0U2VjdGlvbkxpZ2h0Ym94XCI7XG5pbXBvcnQgeyBNYXNzQWN0aW9uUGFyYW1ldGVycyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvTWFzc0FjdGlvbnMvTWFzc0FjdGlvblBhcmFtZXRlcnNcIjtcbmltcG9ydCB7IFByaW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvUHJpbnQvUHJpbnRUeXBlXCI7XG5pbXBvcnQgeyBGaWFzQXBpLCBGaWFzQ2xpZW50SW5pdE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvVmFsdWVFZGl0b3JzL0ZpYXMvRmlhc0lucHV0L0ZpYXNBcGlcIjtcbmltcG9ydCB7IEluc3RhbmNlc0RlbGV0aW5nUnVsZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvSW5zdGFuY2VzRGVsZXRpbmcvSW5zdGFuY2VzRGVsZXRpbmdSdWxlXCI7XG5pbXBvcnQgeyBDb21iaW5lRnVmUmVzdWx0IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgSUNhbmR5Q29tcG9uZW50SGFuZGxlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0NvbXBvbmVudEhhbmRsZVJlZ2lzdHJ5L0lDYW5keUNvbXBvbmVudEhhbmRsZVwiO1xuaW1wb3J0IHsgTmF2aWdhdGlvblBhdGhNYXBwZXIgfSBmcm9tIFwiLi4vLi4vSW5qZWN0YWJsZU1vZHVsZXMvSW5qZWN0YWJsZUVuZ2luZU1vZHVsZXNcIjtcbmltcG9ydCB7IEltcG9ydEVtcGxveWVyRG9jdW1lbnRzT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9TdGFmZlNlcnZpY2VJbnRlZ3JhdGlvbi9FbXBsb3llZVNlcnZpY2VUeXBlc1wiO1xuaW1wb3J0IHsgVGFiSW5mb3NTdGF0ZSB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9NdWx0aUNvbnRyb2xzL1RhYnMvU3RvcmUvVGFiSW5mb3NTdGF0ZVwiO1xuXG5pbXBvcnQgeyBJTGVnYWN5Rm9ybSB9IGZyb20gXCIuL0lMZWdhY3lGb3JtXCI7XG5cbmV4cG9ydCB0eXBlIE1vZGVsRXZlbnRQYXRoID1cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENoYW5nZUV2ZW50UGF0aChwYXRoPzogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBNb2RlbEV2ZW50UGF0aCB7XG4gICAgaWYgKGZpZWxkTmFtZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aCwgZmllbGROYW1lXTtcbiAgICB9XG4gICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdO1xufVxuXG5mdW5jdGlvbiBtYXBDaHVua1ZhbHVlcyhjaHVuazogUmVhZG9ubHlNb2RlbENodW5rKTogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNodW5rKVxuICAgICAgICAuZmlsdGVyKHBhdGggPT4gY2h1bmtbcGF0aF0gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNodW5rW3BhdGhdLCBcInZhbHVlXCIpKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2h1bmtbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IFtwYXRoXTogcmVzdWx0LnZhbHVlIH07XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VDaHVua1ZhbHVlcyhjaHVua3M6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgIHJldHVybiBjaHVua3MucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCBjaHVuaykgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIC4uLmNodW5rLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5jbGFzcyBMZWdhY3lQdWJsaWNGb3JtIGltcGxlbWVudHMgSVB1YmxpY0Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybTogSUxlZ2FjeUZvcm07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9ybTogSUxlZ2FjeUZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmF2aWdhdGVCeUhpZ2hsYW5kZXJQYXRocyhwYXRoczogc3RyaW5nW10pOiBQcm9taXNlPElDYW5keUNvbXBvbmVudEhhbmRsZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmF2aWdhdGlvblBhdGhNYXBwZXIoKTogTmF2aWdhdGlvblBhdGhNYXBwZXIge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmF0Y2hVcGRhdGUodXBkYXRlUHJvYzogKHVwZGF0ZUFjY2Vzc29yOiBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IpID0+IHZvaWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXJyb3JMb2coZXJyb3JMb2c6IFBhcnRpYWw8U2VydmVyRXJyb3JMb2c+KTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUNoaWxkcmVuQnlQYXRoKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX19JTlRFUk5BTF9faW1wb3J0RnJvbUVtcGxveWVlU2VydmljZSgpOiBQcm9taXNlPEVtcGxveWVlW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIF9fSU5URVJOQUxfX2dldFNlbGVjdEZ1bmN0aW9uRm9yRGlzYWJsZUVtcGxveWVlSW5TUyhcbiAgICAgICAgcGF0aFNwZWM6IHN0cmluZ1xuICAgICk6IFByb21pc2U8KGVtcGxveWVlOiBFbXBsb3llZSkgPT4gYm9vbGVhbj4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TW9kYWxVbml0T3BlbmVkSW5zdGFuY2UocGFnZUlkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRhYnNTdGF0ZSgpOiBUYWJJbmZvc1N0YXRlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIG5hdmlnYXRlKG5hdmlnYXRpb25QYXRoOiBzdHJpbmcpOiBQcm9taXNlPElDYW5keUNvbXBvbmVudEhhbmRsZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW1wb3J0RW1wbG95ZXJEb2N1bWVudHMob3B0aW9uczogSW1wb3J0RW1wbG95ZXJEb2N1bWVudHNPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llZXMoZW1wbG95ZWVzOiBFbXBsb3llZVtdLCBvcHRpb25zPzogeyBzY2VuYXJpbz86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludChwcmludFR5cGU6IFByaW50VHlwZSwgYm9keT86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBwdWJsaWMgcnVuTWFzc0FjdGlvbihhY3Rpb25JZDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogTWFzc0FjdGlvblBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5R0lkKGdJZDogc3RyaW5nLCBmaWx0ZXI/OiBEaWdlc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0RGlnZXN0QXBpUGlja2xpc3QoZ0lkKS5xdWVyeShmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIHRocm93IEVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc3RvcEF1dG9zZW5kKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udW5tb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnVubW91bnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG91clN0ZXBzKCk6IFN0ZXBbXSB7XG4gICAgICAgIC8vIEZvciBvbGQga2V3ZWJcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0QWRkaXRpb25hbEVtcGxveWVlSW5mbyhmaWx0ZXJzOiBHZXRFbXBsb3llZUxpc3RSZXF1ZXN0KTogUHJvbWlzZTxFbXBsb3llZUxpc3QgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWxvYWRJbm5lcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXb3JraW5nRXZlbnRzRm9yRW1wbG95ZWUoZmlsdGVyczogR2V0V29ya2luZ0V2ZW50TGlzdFJlcXVlc3QpOiBQcm9taXNlPFdvcmtpbmdFdmVudExpc3QgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSB0aGlzLmZvcm0ubW9kZWwuZ2V0KHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIGVycm9yQ291bnQgIT0gdW5kZWZpbmVkICYmIGVycm9yQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZFcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYobW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogc3RyaW5nLCB2YWx1ZTogTW9kZWxWYWx1ZSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQoXG4gICAgICAgIHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZyB8IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuICAgICAgICB2YWx1ZT86IE1vZGVsVmFsdWVcbiAgICApOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhPck1vZGVsQ2h1bmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGF0aE9yTW9kZWxDaHVuaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckNodW5rID0gT2JqZWN0LmtleXMocGF0aE9yTW9kZWxDaHVuaykucmVkdWNlPFJlYWRvbmx5TW9kZWxDaHVuaz4oXG4gICAgICAgICAgICAgICAgKHJlc3VsdCwgcGF0aCkgPT4gKHsgW3BhdGhdOiB7IHZhbHVlOiBwYXRoT3JNb2RlbENodW5rW3BhdGhdIH0sIC4uLnJlc3VsdCB9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLmZpbGwoaW5uZXJDaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5zZXQocGF0aE9yTW9kZWxDaHVuaywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLnNldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3Igb2JqZWN0IHdpdGggcGF0aC12YWx1ZSBwYWlyc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhdGhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhPckFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBhdGhPckFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5tYXAocGF0aCA9PiBtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aCkpKVxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2U8QXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pj4oKHJlc3VsdCwgYXJyYXkpID0+IHJlc3VsdC5jb25jYXQoYXJyYXkpLCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPckFycmF5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGhPckFycmF5KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhPckFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uZ2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBhcnJheSBvZiBwYXRoc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUocGF0aDogc3RyaW5nKTogTW9kZWxWYWx1ZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLm1vZGVsLmdldChwYXRoLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5U3VidHJlZShcbiAgICAgICAgc291cmNlQmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgdGFyZ2V0QmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgZG9Ob3RDb3B5UGF0aHM/OiBzdHJpbmdbXVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJbnN0YW5jZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHV1aWRHZW5lcmF0ZSgpOiBzdHJpbmcge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93TW9kYWwob3B0aW9uczogTW9kYWxPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNlY3Rpb24ob3B0aW9uczogSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGxJbml0U2VjdGlvbihvcHRpb25zOiBDYWxsSW5pdFNlY3Rpb25MaWdodGJveFByb3BzKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZpYXNBcGlDbGllbnQob3B0aW9uczogRmlhc0NsaWVudEluaXRPcHRpb25zKTogRmlhc0FwaSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5FbXBsb3llZUVkaXRvcihlbXBsb3llZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlcyhwYXRoOiBzdHJpbmcsIGluc3RhbmNlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNPbkNvbnRyb2xJZkV4aXN0KHBhdGg6IEJpbmRpbmdQYXRoKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1dG9GaWVsZHNUb0F1dG9WYWx1ZShwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5zdXJlSW5zdGFuY2VGdWxseUxvYWRlZChcbiAgICAgICAgYmluZGluZ1BhdGg6IHN0cmluZyB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIC4uLmluc3RhbmNlczogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzQnlSdWxlcyhydWxlczogSW5zdGFuY2VzRGVsZXRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG5wKCk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybTogSUZvcm0pOiBJUHVibGljRm9ybSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBuZXcgTGVnYWN5UHVibGljRm9ybShmb3JtIGFzIElMZWdhY3lGb3JtKTtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlOm5vLW51bGwta2V5d29yZCBuby1hbnkgbm8tdW5zYWZlLWFueSAqL1xuaW1wb3J0IHsgZmV0Y2ggfSBmcm9tIFwid2hhdHdnLWZldGNoXCI7XG5pbXBvcnQgeyBBbGxJY29uTmFtZXMgfSBmcm9tIFwicmVhY3QtdWlcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGVzY3JpcHRpb24ge1xuICAgIGljb246IEFsbEljb25OYW1lcztcbiAgICB0ZXh0Pzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyk7XG4gICAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgICBoaW50PzogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdGlkPzogc3RyaW5nO1xuICAgIHdlaWdodDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVuZGVyRm9ybVNldHRpbmdzIHtcbiAgICBnZnY6IHN0cmluZztcbiAgICBlbmdpbmVWZXJzaW9uPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICByZW5kZXJGb3JtOiB1bmRlZmluZWQgfCBFbmdpbmVFbnRyeVBvaW50O1xuICAgIHRlbXBsYXRlc0FwaT86IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudDtcbiAgICBwYW5lbEFjdGlvbnM/OiBBY3Rpb25EZXNjcmlwdGlvbltdO1xufVxuXG50eXBlIFN0YXJ0Rm9ybUZ1bmMgPSAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncykgPT4gUHJvbWlzZTxJRm9ybT47XG5cbmludGVyZmFjZSBDYW5keUdsb2JhbEluamVjdGVkVmFyIHtcbiAgICBzdGFydDogKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLCBjYWxsYmFjaz86IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4pID0+IHZvaWQ7XG4gICAga2Vmb3Jtc1VybD86IHN0cmluZztcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBib29sZWFuO1xuICAgIGVudHJ5UG9pbnQ6IHsgW2tleTogc3RyaW5nXTogU3RhcnRGb3JtRnVuYyB9O1xuICAgIGxvYWRFcnJvcj86IHVua25vd247XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgICBuYW1lc3BhY2UgTm9kZUpTIHtcbiAgICAgICAgaW50ZXJmYWNlIEdsb2JhbCB7XG4gICAgICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZGVjbGFyZSBjb25zdCBnbG9iYWw6IFdpbmRvdztcblxuZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8qIGVtcHR5ICovXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdXJsKHJlbGF0aXZlVXJsOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2xvYmFsLkNGLmtlZm9ybXNVcmwgfHwgXCJcIjtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke3JlbGF0aXZlVXJsfWAucmVwbGFjZSgvKFteOl0pXFwvezIsfS9nLCBcIiQxL1wiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogdW5kZWZpbmVkIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtTmFtZSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgICAgaWYgKHBhcmFtVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeVBhcnRzLnB1c2goYCR7cGFyYW1OYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnlQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoICsgXCI/XCIgKyBxdWVyeVBhcnRzLmpvaW4oXCImXCIpO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWQoZG9tYWluczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke2RvbWFpbnMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIikucmVwbGFjZSgvXFwqL2csIFwiW2EtejAtOS0uX10rXCIpfSkkYCkudGVzdChcbiAgICAgICAgZ2xvYmFsLmxvY2F0aW9uLmhvc3RcbiAgICApO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJCeU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoZ2xvYmFsLmxvY2F0aW9uLnNlYXJjaFxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLnJlcGxhY2UoL14oXFw/fCN8JikvLCBcIlwiKVxuICAgICAgICAgICAgLnNwbGl0KFwiJlwiKVxuICAgICAgICAgICAgLm1hcChwYXJhbSA9PiBwYXJhbS5yZXBsYWNlKC9cXCsvZywgXCIgXCIpLnNwbGl0KFwiPVwiKS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KSlcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgICAuZmluZCgoW2tleV0pID0+IGtleSA9PSBuYW1lKSB8fCBbXSlbMV1cbiAgICApO1xufVxuXG50eXBlIFRhc2sgPSAoY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBydW5QYXJhbGxlbCh0YXNrczogVGFza1tdLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBsZXQgY29tcGxldGVkID0gMDtcblxuICAgIHRhc2tzLmZvckVhY2godGFzayA9PiB7XG4gICAgICAgIHRhc2soZXJyb3IgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkID0gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmludGVyZmFjZSBTdGFydEZvcm1TZXR0aW5nIHtcbiAgICBnZnY6IHN0cmluZztcbiAgICBlbmdpbmVWZXJzaW9uPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbChsZWZ0OiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBsZWZ0TnVtYmVycyA9IGxlZnRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0TnVtYmVycyA9IHJpZ2h0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGxlZnROdW1iZXJzWzBdID8/IDApID4gKHJpZ2h0TnVtYmVyc1swXSA/PyAwKSB8fFxuICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1swXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1swXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICgobGVmdE51bWJlcnNbMV0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzFdID8/IDApIHx8XG4gICAgICAgICAgICAgICAgICAgICgobGVmdE51bWJlcnNbMV0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMV0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChsZWZ0TnVtYmVyc1syXSA/PyAwKSA+PSAocmlnaHROdW1iZXJzWzJdID8/IDApKSkpXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRGb3JtKHNldHRpbmdzOiBTdGFydEZvcm1TZXR0aW5nLCBjYWxsYmFjazogKGVycm9yPzogbnVsbCB8IHVuZGVmaW5lZCB8IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgeyBnZnYsIGVuZ2luZVZlcnNpb24sIHJlc291cmNlc1ZlcnNpb24gfSA9IHNldHRpbmdzO1xuXG4gICAgaWYgKGdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc05lZWRFbmdpbmUgPSBlbmdpbmVWZXJzaW9uICYmICFnbG9iYWxbZW5naW5lVmVyc2lvbl07XG4gICAgY29uc3Qgbm9TdHlsZXNGb3JHZnYgPSBmYWxzZTsgLy8gZW5naW5lVmVyc2lvbiAhPSB1bmRlZmluZWQgJiYgKGlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbChlbmdpbmVWZXJzaW9uLCBcIjQuMjE0LjBcIikgfHwgZW5naW5lVmVyc2lvbiA9PT0gXCJsb2NhbFwiKTtcbiAgICBjb25zdCBuZWVkTG9hZFN0eWxlc0ZvckdmdiA9ICFub1N0eWxlc0ZvckdmdjtcbiAgICBjb25zdCBtaW4gPSBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJkZWJ1Z1wiKSA9PT0gXCJ0cnVlXCIgPyBcIlwiIDogXCIubWluXCI7XG4gICAgY29uc3QgdGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gICAgY29uc3QgcGFyYW1zID0geyB2OiByZXNvdXJjZXNWZXJzaW9uLCByZXNvdXJjZVpvbmU6IHNldHRpbmdzLnJlc291cmNlWm9uZSB9O1xuICAgIGlmIChuZWVkTG9hZFN0eWxlc0Zvckdmdikge1xuICAgICAgICB0YXNrcy5wdXNoKGNiID0+XG4gICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnN0eWxlU2hlZXQodXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3N0eWxlcy8ke2dmdn0ke21pbn0uY3NzYCwgcGFyYW1zKSksIHRydWUsIGNiKVxuICAgICAgICApO1xuICAgIH1cbiAgICB0YXNrcy5wdXNoKGNiID0+IExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zY3JpcHRzLyR7Z2Z2fSR7bWlufS5qc2AsIHBhcmFtcykpLCBjYikpO1xuXG4gICAgaWYgKGlzTmVlZEVuZ2luZSkge1xuICAgICAgICB0YXNrcy5wdXNoKFxuICAgICAgICAgICAgY2IgPT5cbiAgICAgICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnN0eWxlU2hlZXQoXG4gICAgICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvY2FuZHlfJHtlbmdpbmVWZXJzaW9ufSR7bWlufS5jc3NgLCBwYXJhbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zY3JpcHQoXG4gICAgICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zY3JpcHRzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uanNgLCBwYXJhbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcnVuUGFyYWxsZWwodGFza3MsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyRm9ybShcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBleHRlbmRlZFNldHRpbmdzOiBSZW5kZXJGb3JtU2V0dGluZ3MsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT5cbik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1FbnRyeVBvaW50ID1cbiAgICAgICAgZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZXh0ZW5kZWRTZXR0aW5ncy5nZnZdID8/IHJlamVjdChgRm9ybSBlbnRyeSBwb2ludCAke2V4dGVuZGVkU2V0dGluZ3MuZ2Z2fSBub3QgZm91bmQuYCk7XG4gICAgZm9ybUVudHJ5UG9pbnQocGFnZUNvbnRlbnQsIGV4dGVuZGVkU2V0dGluZ3MpXG4gICAgICAgIC50aGVuKGZvcm0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHVibGljRm9ybSA9IGZvcm0ucHVibGljRm9ybSB8fCBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm0pO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBwdWJsaWNGb3JtKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFydEZvcm1PcHRpb25zIGV4dGVuZHMgUGFydGlhbDxBVU9PcHRpb25zPiB7XG4gICAgbnM6IHN0cmluZztcbiAgICBkcmFmdElkOiBzdHJpbmc7XG4gICAgZ2Z2Pzogc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG4gICAgZmVlZGJhY2tFbmFibGVkPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VCdXR0b24/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbGVhbkZvcm0/OiBib29sZWFuO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICBhdXRoZW50aWNhdGlvbj86IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIgfCB7IGF1dGhTaWQ6IHN0cmluZyB9O1xuICAgIGZldGNoPzogdHlwZW9mIGZldGNoO1xuICAgIG1vZGVsPzogeyBbcGF0aDogc3RyaW5nXTogdW5rbm93biB9O1xuICAgIHBhbmVsQWN0aW9ucz86IEFjdGlvbkRlc2NyaXB0aW9uW107XG4gICAgZXZlbnRFbWl0dGVyPzogTGF5b3V0RXZlbnRzU3RhdGljO1xuICAgIGVtcGxveWVySWQ/OiBzdHJpbmc7XG4gICAgc2hvd05hdmlnYXRpb25TaWRlYmFyPzogYm9vbGVhbjtcbiAgICBvblJlbW92ZUF0dGFjaG1lbnQ/OiAoKSA9PiB2b2lkO1xufVxuXG5mdW5jdGlvbiBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb246IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmcpOiB1bmRlZmluZWQgfCBFbmdpbmVFbnRyeVBvaW50IHtcbiAgICBpZiAoZW5naW5lVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIGdsb2JhbFtlbmdpbmVWZXJzaW9uXSAmJiBnbG9iYWxbZW5naW5lVmVyc2lvbl0uZGVmYXVsdDtcbn1cblxuZnVuY3Rpb24gc3RhcnQoXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgb3B0aW9uczogU3RhcnRGb3JtT3B0aW9ucyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPiA9IGRlZmF1bHRDYWxsYmFja1xuKTogdm9pZCB7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICBjb25zdCB7IG5zLCBkcmFmdElkIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKCFpc0FsbG93ZWQoY2xpZW50U2V0dGluZ3Mua29udHVyRG9tYWlucykpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJkb21haW4udW50cnVzdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWNsaWVudFNldHRpbmdzLmF1dGhvcml6ZWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJ1c2VyLnVuYXV0aGVudGljYXRlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFkcmFmdElkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwib3B0aW9ucy5kcmFmdElkIGlzIHJlcXVpcmVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIW5zKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwib3B0aW9ucy5ucyBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2Vab25lID0gb3B0aW9ucy5yZXNvdXJjZVpvbmUgPz8gZ2V0UGFyYW1ldGVyQnlOYW1lKFwicmVzb3VyY2Vab25lXCIpO1xuICAgIGNvbnN0IGNsaWVudERyYWZ0VXJsID0gYnVpbGRVcmwodXJsKGdldENsaWVudERyYWZ0SW5mb1VybCh7IG5zOiBucywgZHJhZnRJZDogZHJhZnRJZCB9KSksIHtcbiAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogUmVxdWVzdEluaXQgPSB7IG1ldGhvZDogXCJHRVRcIiB9O1xuICAgIGlmIChvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09PSBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJpbmNsdWRlXCI7XG4gICAgfSBlbHNlIGlmIChcImF1dGhTaWRcIiBpbiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uICYmIG9wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPz8ge307XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEFVVEguU0lEICR7b3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICB9XG4gICAgY29uc3QgZmV0Y2hJbXBsID0gb3B0aW9ucy5mZXRjaCA/PyBmZXRjaDtcblxuICAgIGZldGNoSW1wbChjbGllbnREcmFmdFVybCwgcmVxdWVzdE9wdGlvbnMpXG4gICAgICAgIC50aGVuKHggPT4geC5qc29uKCkpXG4gICAgICAgIC50aGVuKChjbGllbnREcmFmdEluZm86IENsaWVudERyYWZ0SW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZnYgPSBjbGllbnREcmFmdEluZm8uZ2Z2O1xuICAgICAgICAgICAgY29uc3QgZW5naW5lVmVyc2lvbiA9IGNsaWVudERyYWZ0SW5mby5lbmdpbmVWZXJzaW9uO1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5kZWRTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICBhdXRob3JpemVkOiBjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkLFxuICAgICAgICAgICAgICAgIGNhdWxkcm9uQXBpVXJsOiBjbGllbnRTZXR0aW5ncy5jYXVsZHJvbkFwaVVybCxcbiAgICAgICAgICAgICAgICBpc1Rlc3RTZXJ2ZXI6IGNsaWVudFNldHRpbmdzLmlzVGVzdFNlcnZlcixcbiAgICAgICAgICAgICAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBjbGllbnRTZXR0aW5ncy5yZW5kZXJDYWNoaW5nRm9ySUU4LFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogY2xpZW50U2V0dGluZ3Mubm9ybWFsaXphdGlvbk9uU2VydmVyLFxuICAgICAgICAgICAgICAgIG5vcm1hdGl2ZVVybDogY2xpZW50U2V0dGluZ3Mubm9ybWF0aXZlVXJsLFxuICAgICAgICAgICAgICAgIHJlc291cmNlc1ZlcnNpb246IGNsaWVudFNldHRpbmdzLnJlc291cmNlc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAga29udHVyRG9tYWluczogY2xpZW50U2V0dGluZ3Mua29udHVyRG9tYWlucyxcbiAgICAgICAgICAgICAgICBzaG93TmF2aWdhdGlvblNpZGViYXI6IG9wdGlvbnMuc2hvd05hdmlnYXRpb25TaWRlYmFyID8/IHRydWUsXG4gICAgICAgICAgICAgICAgb25SZW1vdmVBdHRhY2htZW50OiBvcHRpb25zLm9uUmVtb3ZlQXR0YWNobWVudCxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIC4uLmNsaWVudERyYWZ0SW5mbyxcbiAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICBlbmdpbmVWZXJzaW9uOiBlbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogb3B0aW9ucy5mZWVkYmFja0VuYWJsZWQgPz8gY2xpZW50RHJhZnRJbmZvLmZlZWRiYWNrRW5hYmxlZCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsb2FkRm9ybShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdmdjogZXh0ZW5kZWRTZXR0aW5ncy5nZnYsXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MuZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuZXhwb3J0IHsgX3NsaWNlZFRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhIb2xlcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheUxpbWl0IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkge1xuICBpZiAocikge1xuICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShyLCBhKTtcbiAgICB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpO1xuICAgIHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IGFycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7XG4gIH1cbn1cbmV4cG9ydCB7IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmV4cG9ydCB7IF9ub25JdGVyYWJsZVJlc3QgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4uL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnREcmFmdEluZm9VcmwoZHJhZnRJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAvLyBOT1RFINCt0YLQsCDRhNGD0L3QutGG0LjRjyDQvtCx0YrRj9Cy0LvQtdC90LAg0L7RgtC00LXQu9GM0L3Qviwg0LjQsdC+INC+0L3QsCDQstGF0L7QtNC40YIg0LIg0YHQvtGB0YLQsNCyIGNsaWVudC5qcyDQuFxuICAgIC8vINC90LUg0LTQvtC70LbQvdC+INC/0YDQvtC40YHRhdC+0LTQuNGC0Ywg0YPRgtC10LbQtdC70LXQvdC40Y8gY2xpZW50LmpzLdCwXG4gICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0SWQubnN9L2RyYWZ0cy8ke2RyYWZ0SWQuZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gO1xufVxuIiwiLyoqKlxuICog0KHRgtGA0L7Qs9C+0YLQuNC/0LjQt9C40YDQvtCy0LDQvdC90LDRjyDQt9Cw0LzQtdC90LAg0LTQu9GPIEJvb2xlYW4oLi4uKVxuICog0J7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8gWy4uLl0uZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVVua25vd25FcnJvcihlcnJvcjogdW5rbm93bik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlcnJvcj8uW1wibWVzc2FnZVwiXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGFzc2VydHMgaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIGlmICghaXNOb3ROdWxsT3JVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgbXVzdCBiZSBkZWZpbmVkYCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3IpOiBuZXZlciB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IG1lc3NhZ2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG1lc3NhZ2U7XG4gICAgfVxufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUxlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBoYXZlIG1pbmltYWwgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5ldmVyKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQW5kR2V0U3RyaW5nKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bmV2ZXJBcmd1bWVudH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuQXN5bmNBY3Rpb24oYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIGFjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0ID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgc3RyaW5nIHtcbiAgICByZXR1cm4gIWlzTnVsbE9yRW1wdHkoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JXaGl0ZVNwYWNlKGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogaW5wdXQgaXMgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dC50cmltKCkgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltTGFzdFNsYXNoKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnNsaWNlKC0xKSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMCwgLTEpIDogdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXM8VD4odmFsdWU6IFQpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0VBQ0EsSUFBSUEsQ0FBQSxHQUFzQixDQUFDO0VDRDNCLFNBQVNDLEVBQVFELENBQUE7SUFHZixPQUFPQyxDQUFBLEdBQVUscUJBQXFCQyxNQUFB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
|