@sinequa/assistant 3.8.0 → 3.9.0
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/chat/charts/chart/chart.component.d.ts +13 -13
- package/chat/chat-message/chat-message.component.d.ts +85 -81
- package/chat/chat-message/i18n/en.json +11 -0
- package/chat/chat-message/i18n/fr.json +11 -0
- package/chat/chat-reference/chat-reference.component.d.ts +14 -14
- package/chat/chat-reference/i18n/en.json +4 -0
- package/chat/chat-reference/i18n/fr.json +4 -0
- package/chat/chat-settings-v3/chat-settings-v3.component.d.ts +48 -50
- package/chat/chat-settings-v3/i18n/en.json +14 -0
- package/chat/chat-settings-v3/i18n/fr.json +14 -0
- package/chat/chat.component.d.ts +388 -1405
- package/chat/chat.service.d.ts +247 -228
- package/chat/debug-message/debug-message.component.d.ts +17 -17
- package/chat/debug-message/i18n/en.json +3 -0
- package/chat/debug-message/i18n/fr.json +3 -0
- package/chat/dialogs/delete-saved-chat.component.d.ts +22 -0
- package/chat/dialogs/i18n/en.json +19 -0
- package/chat/dialogs/i18n/fr.json +19 -0
- package/chat/dialogs/rename-saved-chat.component.d.ts +21 -0
- package/chat/dialogs/updates.component.d.ts +15 -0
- package/chat/documents-upload/document-list/document-list.component.d.ts +68 -77
- package/chat/documents-upload/document-overview/document-overview.component.d.ts +31 -41
- package/chat/documents-upload/document-upload/document-upload.component.d.ts +96 -98
- package/chat/documents-upload/documents-upload.model.d.ts +66 -66
- package/chat/documents-upload/documents-upload.service.d.ts +170 -174
- package/chat/documents-upload/i18n/en.json +24 -0
- package/chat/documents-upload/i18n/fr.json +24 -0
- package/chat/format-icon/format-icon.component.d.ts +10 -10
- package/chat/format-icon/icons.d.ts +5 -5
- package/chat/i18n/en.json +42 -0
- package/chat/i18n/fr.json +42 -0
- package/chat/index.d.ts +5 -5
- package/chat/initials-avatar/initials-avatar.component.d.ts +35 -35
- package/chat/instance-manager.service.d.ts +28 -28
- package/chat/pipes/message-content.pipe.d.ts +16 -0
- package/chat/prompt.component.d.ts +25 -21
- package/chat/public-api.d.ts +17 -17
- package/chat/references/i18n/en.json +6 -0
- package/chat/references/i18n/fr.json +6 -0
- package/chat/references/inline-image-reference.d.ts +21 -0
- package/chat/references/inline-page-reference.d.ts +21 -0
- package/chat/rest-chat.service.d.ts +31 -33
- package/chat/saved-chats/i18n/en.json +4 -0
- package/chat/saved-chats/i18n/fr.json +4 -0
- package/chat/saved-chats/saved-chats.component.d.ts +30 -36
- package/chat/services/app.service.d.ts +8 -0
- package/chat/services/dialog.service.d.ts +12 -0
- package/chat/services/notification.service.d.ts +10 -0
- package/chat/services/principal.service.d.ts +7 -0
- package/chat/services/search.service.d.ts +7 -0
- package/chat/services/signalR.web.service.d.ts +45 -0
- package/chat/services/ui.service.d.ts +13 -0
- package/chat/services/user-settings.service.d.ts +7 -0
- package/chat/token-progress-bar/i18n/en.json +4 -0
- package/chat/token-progress-bar/i18n/fr.json +4 -0
- package/chat/token-progress-bar/token-progress-bar.component.d.ts +24 -27
- package/chat/tooltip/tooltip.component.d.ts +12 -0
- package/chat/tooltip/tooltip.directive.d.ts +81 -0
- package/chat/types/message-content.types.d.ts +54 -0
- package/chat/types/message-reference.types.d.ts +11 -0
- package/chat/types.d.ts +913 -873
- package/chat/unified-plugins/embedded-image-reference.plugin.d.ts +3 -0
- package/chat/unified-plugins/embedded-page-reference.plugin.d.ts +3 -0
- package/chat/utils/assistant-json.d.ts +2 -0
- package/chat/websocket-chat.service.d.ts +102 -103
- package/esm2022/chat/charts/chart/chart.component.mjs +40 -0
- package/esm2022/chat/chat-message/chat-message.component.mjs +351 -0
- package/esm2022/chat/chat-reference/chat-reference.component.mjs +40 -0
- package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +118 -0
- package/esm2022/chat/chat.component.mjs +1090 -0
- package/esm2022/chat/chat.service.mjs +417 -0
- package/esm2022/chat/debug-message/debug-message.component.mjs +43 -0
- package/esm2022/chat/dialogs/delete-saved-chat.component.mjs +81 -0
- package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +84 -0
- package/esm2022/chat/dialogs/updates.component.mjs +61 -0
- package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +140 -0
- package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +65 -0
- package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +256 -0
- package/{esm2020 → esm2022}/chat/documents-upload/documents-upload.model.mjs +1 -1
- package/esm2022/chat/documents-upload/documents-upload.service.mjs +291 -0
- package/{esm2020 → esm2022}/chat/format-icon/format-icon.component.mjs +23 -23
- package/{esm2020 → esm2022}/chat/format-icon/icons.mjs +137 -137
- package/{esm2020 → esm2022}/chat/initials-avatar/initials-avatar.component.mjs +60 -60
- package/esm2022/chat/instance-manager.service.mjs +46 -0
- package/esm2022/chat/pipes/message-content.pipe.mjs +34 -0
- package/esm2022/chat/prompt.component.mjs +88 -0
- package/{esm2020 → esm2022}/chat/public-api.mjs +18 -18
- package/esm2022/chat/references/inline-image-reference.mjs +110 -0
- package/esm2022/chat/references/inline-page-reference.mjs +110 -0
- package/esm2022/chat/rest-chat.service.mjs +296 -0
- package/esm2022/chat/saved-chats/saved-chats.component.mjs +82 -0
- package/esm2022/chat/services/app.service.mjs +19 -0
- package/esm2022/chat/services/dialog.service.mjs +40 -0
- package/esm2022/chat/services/notification.service.mjs +25 -0
- package/esm2022/chat/services/principal.service.mjs +16 -0
- package/esm2022/chat/services/search.service.mjs +13 -0
- package/esm2022/chat/services/signalR.web.service.mjs +79 -0
- package/esm2022/chat/services/ui.service.mjs +61 -0
- package/esm2022/chat/services/user-settings.service.mjs +22 -0
- package/{esm2020 → esm2022}/chat/sinequa-assistant-chat.mjs +4 -4
- package/esm2022/chat/token-progress-bar/token-progress-bar.component.mjs +52 -0
- package/esm2022/chat/tooltip/tooltip.component.mjs +44 -0
- package/esm2022/chat/tooltip/tooltip.directive.mjs +203 -0
- package/esm2022/chat/types/message-content.types.mjs +2 -0
- package/esm2022/chat/types/message-reference.types.mjs +2 -0
- package/esm2022/chat/types.mjs +130 -0
- package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +57 -0
- package/esm2022/chat/unified-plugins/embedded-page-reference.plugin.mjs +57 -0
- package/esm2022/chat/utils/assistant-json.mjs +12 -0
- package/esm2022/chat/websocket-chat.service.mjs +654 -0
- package/{esm2020 → esm2022}/public-api.mjs +2 -2
- package/{esm2020 → esm2022}/sinequa-assistant.mjs +4 -4
- package/fesm2022/sinequa-assistant-chat.mjs +5340 -0
- package/fesm2022/sinequa-assistant-chat.mjs.map +1 -0
- package/{fesm2015 → fesm2022}/sinequa-assistant.mjs +3 -3
- package/index.d.ts +5 -5
- package/package.json +52 -25
- package/public-api.d.ts +1 -1
- package/chat/messages/de.d.ts +0 -4
- package/chat/messages/en.d.ts +0 -4
- package/chat/messages/fr.d.ts +0 -4
- package/chat/messages/index.d.ts +0 -4
- package/esm2020/chat/charts/chart/chart.component.mjs +0 -40
- package/esm2020/chat/chat-message/chat-message.component.mjs +0 -263
- package/esm2020/chat/chat-reference/chat-reference.component.mjs +0 -40
- package/esm2020/chat/chat-settings-v3/chat-settings-v3.component.mjs +0 -117
- package/esm2020/chat/chat.component.mjs +0 -1069
- package/esm2020/chat/chat.service.mjs +0 -333
- package/esm2020/chat/debug-message/debug-message.component.mjs +0 -43
- package/esm2020/chat/documents-upload/document-list/document-list.component.mjs +0 -191
- package/esm2020/chat/documents-upload/document-overview/document-overview.component.mjs +0 -80
- package/esm2020/chat/documents-upload/document-upload/document-upload.component.mjs +0 -258
- package/esm2020/chat/documents-upload/documents-upload.service.mjs +0 -289
- package/esm2020/chat/instance-manager.service.mjs +0 -46
- package/esm2020/chat/messages/de.mjs +0 -4
- package/esm2020/chat/messages/en.mjs +0 -4
- package/esm2020/chat/messages/fr.mjs +0 -4
- package/esm2020/chat/messages/index.mjs +0 -9
- package/esm2020/chat/prompt.component.mjs +0 -88
- package/esm2020/chat/rest-chat.service.mjs +0 -241
- package/esm2020/chat/saved-chats/saved-chats.component.mjs +0 -175
- package/esm2020/chat/token-progress-bar/token-progress-bar.component.mjs +0 -54
- package/esm2020/chat/types.mjs +0 -112
- package/esm2020/chat/websocket-chat.service.mjs +0 -641
- package/fesm2015/sinequa-assistant-chat.mjs +0 -4200
- package/fesm2015/sinequa-assistant-chat.mjs.map +0 -1
- package/fesm2020/sinequa-assistant-chat.mjs +0 -4171
- package/fesm2020/sinequa-assistant-chat.mjs.map +0 -1
- package/fesm2020/sinequa-assistant.mjs +0 -9
- package/fesm2020/sinequa-assistant.mjs.map +0 -1
- /package/{fesm2015 → fesm2022}/sinequa-assistant.mjs.map +0 -0
|
@@ -1,103 +1,102 @@
|
|
|
1
|
-
import { HubConnection } from "@microsoft/signalr";
|
|
2
|
-
import { Observable } from "rxjs";
|
|
3
|
-
import { Query } from "@sinequa/
|
|
4
|
-
import {
|
|
5
|
-
import { ConnectionOptions, SignalRWebService } from "
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
private
|
|
12
|
-
private
|
|
13
|
-
private
|
|
14
|
-
private
|
|
15
|
-
private
|
|
16
|
-
private _attachments;
|
|
17
|
-
private _debugMessages;
|
|
18
|
-
signalRService: SignalRWebService;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
*
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
*
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
*
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
*
|
|
56
|
-
* If
|
|
57
|
-
*
|
|
58
|
-
* @param
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* @param
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
*
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
*
|
|
83
|
-
* @param
|
|
84
|
-
* @
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
*
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
*
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
private
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
static
|
|
102
|
-
|
|
103
|
-
}
|
|
1
|
+
import { HubConnection } from "@microsoft/signalr";
|
|
2
|
+
import { Observable } from "rxjs";
|
|
3
|
+
import { Query } from "@sinequa/atomic";
|
|
4
|
+
import { ChatService } from "./chat.service";
|
|
5
|
+
import { ConnectionOptions, SignalRWebService } from "./services/signalR.web.service";
|
|
6
|
+
import { ChatMessage, ChatResponse, DeleteSavedChatResponse, GllmFunction, GllmModelDescription, MessageHandler, SavedChatHistory, SavedChatResponse } from "./types";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export declare class WebSocketChatService extends ChatService {
|
|
9
|
+
connection: HubConnection | undefined;
|
|
10
|
+
private _messageHandlers;
|
|
11
|
+
private _response;
|
|
12
|
+
private _actionMap;
|
|
13
|
+
private _progress;
|
|
14
|
+
private _executionTime;
|
|
15
|
+
private _executionTimeMilliseconds?;
|
|
16
|
+
private _attachments;
|
|
17
|
+
private _debugMessages;
|
|
18
|
+
signalRService: SignalRWebService;
|
|
19
|
+
constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Initialize the assistant process.
|
|
22
|
+
* It includes building and starting a connection, executing parallel requests for models and functions, and handling errors during the process.
|
|
23
|
+
* ⚠️ This method MUST be called ONLY if the user is loggedIn and once when the assistant is initialized.
|
|
24
|
+
*
|
|
25
|
+
* @returns An Observable<boolean> indicating the success of the initialization process.
|
|
26
|
+
*/
|
|
27
|
+
init(): Observable<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Define the assistant endpoint to use for the websocket requests
|
|
30
|
+
* It can be overridden by the app config
|
|
31
|
+
*/
|
|
32
|
+
getRequestsUrl(): void;
|
|
33
|
+
overrideUser(): void;
|
|
34
|
+
listModels(): Observable<GllmModelDescription[] | undefined>;
|
|
35
|
+
listFunctions(): Observable<GllmFunction[] | undefined>;
|
|
36
|
+
fetch(messages: ChatMessage[], query: Query): Observable<ChatResponse>;
|
|
37
|
+
stopGeneration(): Observable<boolean>;
|
|
38
|
+
listSavedChat(): void;
|
|
39
|
+
getSavedChat(id: string): Observable<SavedChatHistory | undefined>;
|
|
40
|
+
addSavedChat(messages: ChatMessage[]): Observable<SavedChatResponse>;
|
|
41
|
+
updateSavedChat(id: string, name?: string, messages?: ChatMessage[]): Observable<SavedChatResponse>;
|
|
42
|
+
deleteSavedChat(ids: string[]): Observable<DeleteSavedChatResponse>;
|
|
43
|
+
/**
|
|
44
|
+
* Initialize out-of-the-box handlers
|
|
45
|
+
* It is a placeholder for non-streaming scenarios, where you invoke a specific hub method, and the server responds with frame message(s)
|
|
46
|
+
*/
|
|
47
|
+
initMessageHandlers(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Override and register the entire _messageHandlers map by merging the provided map with the default one
|
|
50
|
+
* @param _messageHandlers
|
|
51
|
+
*/
|
|
52
|
+
overrideMessageHandlers<T>(_messageHandlers: Map<string, MessageHandler<T>>): void;
|
|
53
|
+
/**
|
|
54
|
+
* Add a listener for a specific event.
|
|
55
|
+
* If a listener for this same event already exists, it will be overridden.
|
|
56
|
+
* If the listener has "isGlobalHandler" set to true, it will be registered to the hub connection.
|
|
57
|
+
* @param eventName Name of the event to register a listener for
|
|
58
|
+
* @param eventHandler The handler to be called when the event is received
|
|
59
|
+
*/
|
|
60
|
+
addMessageHandler<T>(eventName: string, eventHandler: MessageHandler<T>): void;
|
|
61
|
+
/**
|
|
62
|
+
* Dynamically register a listener for a specific event.
|
|
63
|
+
* If a listener for this event already exists, it will be overridden.
|
|
64
|
+
* @param eventName Name of the event to register a listener for
|
|
65
|
+
* @param eventHandler The handler to be called when the event is received
|
|
66
|
+
*/
|
|
67
|
+
protected registerMessageHandler<T>(eventName: string, eventHandler: MessageHandler<T>): void;
|
|
68
|
+
/**
|
|
69
|
+
* Remove a listener for a specific event from the _messageHandlers map and unsubscribe from receiving messages for this event from the SignalR hub.
|
|
70
|
+
* @param eventName Name of the event to remove the listener for
|
|
71
|
+
*/
|
|
72
|
+
removeMessageHandler(eventName: string): void;
|
|
73
|
+
/**
|
|
74
|
+
* Unsubscribe from receiving messages for a specific event from the SignalR hub.
|
|
75
|
+
* ALL its related listeners will be removed from hub connection
|
|
76
|
+
* This is needed to prevent accumulating old listeners when overriding the entire _messageHandlers map
|
|
77
|
+
* @param eventName Name of the event
|
|
78
|
+
*/
|
|
79
|
+
protected unsubscribeMessageHandler(eventName: string): void;
|
|
80
|
+
/**
|
|
81
|
+
* Build a connection to the signalR websocket and register default listeners to the methods defined in the server hub class
|
|
82
|
+
* @param options The options for the connection. It overrides the default options
|
|
83
|
+
* @param logLevel Define the log level displayed in the console
|
|
84
|
+
* @returns Promise that resolves when the connection is built
|
|
85
|
+
*/
|
|
86
|
+
buildConnection(options?: ConnectionOptions): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Start the connection
|
|
89
|
+
* @returns Promise that resolves when the connection is started
|
|
90
|
+
*/
|
|
91
|
+
startConnection(): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Stop the connection
|
|
94
|
+
* @returns Promise that resolves when the connection is stopped
|
|
95
|
+
*/
|
|
96
|
+
stopConnection(): Promise<void>;
|
|
97
|
+
private _getTransports;
|
|
98
|
+
private _getLogLevel;
|
|
99
|
+
get defaultOptions(): ConnectionOptions;
|
|
100
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<WebSocketChatService, never>;
|
|
101
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<WebSocketChatService>;
|
|
102
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { Chart, registerables } from 'chart.js';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
Chart.register(...registerables);
|
|
6
|
+
export class ChartComponent {
|
|
7
|
+
constructor() { }
|
|
8
|
+
ngOnChanges(changes) {
|
|
9
|
+
if (changes['rawChartData']) {
|
|
10
|
+
clearTimeout(this.debounceTimer);
|
|
11
|
+
this.debounceTimer = setTimeout(() => this.initializeChart(), 300);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
initializeChart() {
|
|
15
|
+
Chart.getChart('chart-canvas')?.destroy();
|
|
16
|
+
const canvasElement = document.getElementById('chart-canvas');
|
|
17
|
+
if (canvasElement) {
|
|
18
|
+
try {
|
|
19
|
+
const chartInput = this.rawChartData.match(/<chartjs>({[\s\S]*?)<\/chartjs>/)?.[1]?.trim().replace(/'/g, '"');
|
|
20
|
+
const chartConfig = JSON.parse(chartInput);
|
|
21
|
+
this.chart = new Chart('chart-canvas', chartConfig);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
console.error('Invalid chart configuration, check the assistant configuration: ', error);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
console.error('Chart Canvas is not found');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChartComponent, isStandalone: true, selector: "sq-assistant-chart", inputs: { rawChartData: "rawChartData" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"chart-container\">\n <canvas id=\"chart-canvas\">{{ chart }}</canvas>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
|
|
33
|
+
}
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartComponent, decorators: [{
|
|
35
|
+
type: Component,
|
|
36
|
+
args: [{ selector: 'sq-assistant-chart', standalone: true, imports: [CommonModule], template: "<div class=\"chart-container\">\n <canvas id=\"chart-canvas\">{{ chart }}</canvas>\n</div>\n" }]
|
|
37
|
+
}], ctorParameters: () => [], propDecorators: { rawChartData: [{
|
|
38
|
+
type: Input
|
|
39
|
+
}] } });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvY2hhcnRzL2NoYXJ0L2NoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L2NoYXJ0cy9jaGFydC9jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsU0FBUyxFQUFFLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFBOztBQUUvQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7QUFTakMsTUFBTSxPQUFPLGNBQWM7SUFNekIsZ0JBQWdCLENBQUM7SUFFakIsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDNUIsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlO1FBQ3JCLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFFMUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU5RCxJQUFHLGFBQWEsRUFBQyxDQUFDO1lBQ2hCLElBQUcsQ0FBQztnQkFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQVcsQ0FBQztnQkFDeEgsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFFM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFFdEQsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxrRUFBa0UsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzRixDQUFDO1FBRUgsQ0FBQzthQUNJLENBQUM7WUFDSixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7K0dBbkNVLGNBQWM7bUdBQWQsY0FBYyw2SUNiM0IsaUdBR0EseURETVksWUFBWTs7NEZBSVgsY0FBYztrQkFQMUIsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDO3dEQUtkLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkNoYW5nZXMsIENvbXBvbmVudCwgSW5wdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFydCwgcmVnaXN0ZXJhYmxlcyB9IGZyb20gJ2NoYXJ0LmpzJ1xuXG5DaGFydC5yZWdpc3RlciguLi5yZWdpc3RlcmFibGVzKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3EtYXNzaXN0YW50LWNoYXJ0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXJ0LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHJhd0NoYXJ0RGF0YTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjaGFydDogQ2hhcnQ7XG4gIHByaXZhdGUgZGVib3VuY2VUaW1lcjogYW55O1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydyYXdDaGFydERhdGEnXSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lcik7XG4gICAgICB0aGlzLmRlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5pdGlhbGl6ZUNoYXJ0KCksIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ2hhcnQoKSB7XG4gICAgQ2hhcnQuZ2V0Q2hhcnQoJ2NoYXJ0LWNhbnZhcycpPy5kZXN0cm95KCk7XG5cbiAgICBjb25zdCBjYW52YXNFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXJ0LWNhbnZhcycpO1xuXG4gICAgaWYoY2FudmFzRWxlbWVudCl7XG4gICAgICB0cnl7XG4gICAgICAgIGNvbnN0IGNoYXJ0SW5wdXQgPSB0aGlzLnJhd0NoYXJ0RGF0YS5tYXRjaCgvPGNoYXJ0anM+KHtbXFxzXFxTXSo/KTxcXC9jaGFydGpzPi8pPy5bMV0/LnRyaW0oKS5yZXBsYWNlKC8nL2csICdcIicpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgY2hhcnRDb25maWcgPSBKU09OLnBhcnNlKGNoYXJ0SW5wdXQpO1xuXG4gICAgICAgIHRoaXMuY2hhcnQgPSBuZXcgQ2hhcnQoJ2NoYXJ0LWNhbnZhcycsIGNoYXJ0Q29uZmlnKTtcblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBjaGFydCBjb25maWd1cmF0aW9uLCBjaGVjayB0aGUgYXNzaXN0YW50IGNvbmZpZ3VyYXRpb246ICcsIGVycm9yKTtcbiAgICAgIH1cblxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NoYXJ0IENhbnZhcyBpcyBub3QgZm91bmQnKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjaGFydC1jb250YWluZXJcIj5cbiAgICA8Y2FudmFzIGlkPVwiY2hhcnQtY2FudmFzXCI+e3sgY2hhcnQgfX08L2NhbnZhcz5cbjwvZGl2PlxuIl19
|