@copilotkitnext/angular 0.0.5 → 0.0.7
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/README.md +110 -0
- package/dist/README.md +110 -0
- package/dist/components/chat/copilot-chat-assistant-message.component.d.ts +1 -0
- package/dist/components/chat/copilot-chat.component.d.ts +3 -5
- package/dist/esm2022/components/chat/copilot-chat-assistant-message.component.mjs +11 -5
- package/dist/esm2022/components/chat/copilot-chat-tool-calls-view.component.mjs +14 -8
- package/dist/esm2022/components/chat/copilot-chat.component.mjs +26 -26
- package/dist/esm2022/components/copilotkit-tool-render.component.mjs +7 -10
- package/dist/esm2022/core/copilotkit.service.mjs +2 -14
- package/dist/esm2022/index.mjs +2 -2
- package/dist/esm2022/lib/slots/copilot-slot.component.mjs +15 -5
- package/dist/esm2022/lib/slots/slot.utils.mjs +14 -5
- package/dist/esm2022/utils/agent.utils.mjs +28 -20
- package/dist/fesm2022/copilotkitnext-angular.mjs +108 -84
- package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/utils/agent.utils.d.ts +27 -18
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -205,6 +205,116 @@ console.log(
|
|
|
205
205
|
- **`provideCopilotKit(...)`**: Set runtime URL, headers, properties, agents, tools, human-in-the-loop handlers
|
|
206
206
|
- **`provideCopilotChatConfiguration(...)`**: Set UI labels and behavior for chat input/view
|
|
207
207
|
|
|
208
|
+
## Headless Usage: Building Custom Chat UIs
|
|
209
|
+
|
|
210
|
+
For advanced use cases where you need full control over the chat UI, you can use the `watchAgent` utility directly to build a custom chat component.
|
|
211
|
+
|
|
212
|
+
### Using `watchAgent` for Custom Components
|
|
213
|
+
|
|
214
|
+
The `watchAgent` function provides reactive signals for agent state, making it easy to build custom chat interfaces:
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
import { Component, effect } from "@angular/core";
|
|
218
|
+
import { watchAgent } from "@copilotkitnext/angular";
|
|
219
|
+
|
|
220
|
+
@Component({
|
|
221
|
+
selector: "my-custom-chat",
|
|
222
|
+
template: `
|
|
223
|
+
<div class="custom-chat">
|
|
224
|
+
<div *ngFor="let msg of messages()" class="message">
|
|
225
|
+
{{ msg.content }}
|
|
226
|
+
</div>
|
|
227
|
+
<input
|
|
228
|
+
[disabled]="isRunning()"
|
|
229
|
+
(keyup.enter)="sendMessage($event)"
|
|
230
|
+
/>
|
|
231
|
+
</div>
|
|
232
|
+
`,
|
|
233
|
+
})
|
|
234
|
+
export class MyCustomChatComponent {
|
|
235
|
+
protected agent!: ReturnType<typeof watchAgent>["agent"];
|
|
236
|
+
protected messages!: ReturnType<typeof watchAgent>["messages"];
|
|
237
|
+
protected isRunning!: ReturnType<typeof watchAgent>["isRunning"];
|
|
238
|
+
|
|
239
|
+
constructor() {
|
|
240
|
+
const w = watchAgent({ agentId: "custom" });
|
|
241
|
+
this.agent = w.agent;
|
|
242
|
+
this.messages = w.messages;
|
|
243
|
+
this.isRunning = w.isRunning;
|
|
244
|
+
|
|
245
|
+
// React to agent changes
|
|
246
|
+
effect(() => {
|
|
247
|
+
const currentAgent = this.agent();
|
|
248
|
+
if (currentAgent) {
|
|
249
|
+
console.log("Agent ready:", currentAgent.id);
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
async sendMessage(event: Event) {
|
|
255
|
+
const input = event.target as HTMLInputElement;
|
|
256
|
+
const content = input.value.trim();
|
|
257
|
+
if (!content || !this.agent()) return;
|
|
258
|
+
|
|
259
|
+
// Add user message and run agent
|
|
260
|
+
this.agent()!.addMessage({ role: "user", content });
|
|
261
|
+
input.value = "";
|
|
262
|
+
await this.agent()!.runAgent();
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Switching Agents at Runtime
|
|
268
|
+
|
|
269
|
+
Use `watchAgentWith` when you need to switch agents dynamically outside of the constructor:
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
import { Component, Injector } from "@angular/core";
|
|
273
|
+
import { watchAgent, watchAgentWith } from "@copilotkitnext/angular";
|
|
274
|
+
|
|
275
|
+
@Component({
|
|
276
|
+
selector: "agent-switcher",
|
|
277
|
+
template: `
|
|
278
|
+
<button (click)="switchToAgent('sales')">Sales Agent</button>
|
|
279
|
+
<button (click)="switchToAgent('support')">Support Agent</button>
|
|
280
|
+
<div>Current Agent: {{ agent()?.id || 'None' }}</div>
|
|
281
|
+
`,
|
|
282
|
+
})
|
|
283
|
+
export class AgentSwitcherComponent {
|
|
284
|
+
protected agent!: ReturnType<typeof watchAgent>["agent"];
|
|
285
|
+
protected messages!: ReturnType<typeof watchAgent>["messages"];
|
|
286
|
+
protected isRunning!: ReturnType<typeof watchAgent>["isRunning"];
|
|
287
|
+
private watcher?: ReturnType<typeof watchAgent>;
|
|
288
|
+
|
|
289
|
+
constructor(private injector: Injector) {
|
|
290
|
+
// Initialize with default agent
|
|
291
|
+
this.switchToAgent("default");
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
switchToAgent(agentId: string) {
|
|
295
|
+
// Clean up previous watcher
|
|
296
|
+
this.watcher?.unsubscribe();
|
|
297
|
+
|
|
298
|
+
// Create new watcher with the ergonomic helper
|
|
299
|
+
const w = watchAgentWith(this.injector, { agentId });
|
|
300
|
+
|
|
301
|
+
// Update component signals
|
|
302
|
+
this.agent = w.agent;
|
|
303
|
+
this.messages = w.messages;
|
|
304
|
+
this.isRunning = w.isRunning;
|
|
305
|
+
this.watcher = w;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Key Benefits of Headless Usage
|
|
311
|
+
|
|
312
|
+
- **Full control**: Build any UI you need without constraints
|
|
313
|
+
- **Reactive signals**: Automatically update UI when agent state changes
|
|
314
|
+
- **Type safety**: Full TypeScript support with AG-UI types
|
|
315
|
+
- **Memory efficient**: Automatic cleanup via Angular's DestroyRef
|
|
316
|
+
- **Framework agnostic**: Works with any AG-UI compatible agent
|
|
317
|
+
|
|
208
318
|
## End-to-End: Running the Demo
|
|
209
319
|
|
|
210
320
|
From the repo root:
|
package/dist/README.md
CHANGED
|
@@ -205,6 +205,116 @@ console.log(
|
|
|
205
205
|
- **`provideCopilotKit(...)`**: Set runtime URL, headers, properties, agents, tools, human-in-the-loop handlers
|
|
206
206
|
- **`provideCopilotChatConfiguration(...)`**: Set UI labels and behavior for chat input/view
|
|
207
207
|
|
|
208
|
+
## Headless Usage: Building Custom Chat UIs
|
|
209
|
+
|
|
210
|
+
For advanced use cases where you need full control over the chat UI, you can use the `watchAgent` utility directly to build a custom chat component.
|
|
211
|
+
|
|
212
|
+
### Using `watchAgent` for Custom Components
|
|
213
|
+
|
|
214
|
+
The `watchAgent` function provides reactive signals for agent state, making it easy to build custom chat interfaces:
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
import { Component, effect } from "@angular/core";
|
|
218
|
+
import { watchAgent } from "@copilotkitnext/angular";
|
|
219
|
+
|
|
220
|
+
@Component({
|
|
221
|
+
selector: "my-custom-chat",
|
|
222
|
+
template: `
|
|
223
|
+
<div class="custom-chat">
|
|
224
|
+
<div *ngFor="let msg of messages()" class="message">
|
|
225
|
+
{{ msg.content }}
|
|
226
|
+
</div>
|
|
227
|
+
<input
|
|
228
|
+
[disabled]="isRunning()"
|
|
229
|
+
(keyup.enter)="sendMessage($event)"
|
|
230
|
+
/>
|
|
231
|
+
</div>
|
|
232
|
+
`,
|
|
233
|
+
})
|
|
234
|
+
export class MyCustomChatComponent {
|
|
235
|
+
protected agent!: ReturnType<typeof watchAgent>["agent"];
|
|
236
|
+
protected messages!: ReturnType<typeof watchAgent>["messages"];
|
|
237
|
+
protected isRunning!: ReturnType<typeof watchAgent>["isRunning"];
|
|
238
|
+
|
|
239
|
+
constructor() {
|
|
240
|
+
const w = watchAgent({ agentId: "custom" });
|
|
241
|
+
this.agent = w.agent;
|
|
242
|
+
this.messages = w.messages;
|
|
243
|
+
this.isRunning = w.isRunning;
|
|
244
|
+
|
|
245
|
+
// React to agent changes
|
|
246
|
+
effect(() => {
|
|
247
|
+
const currentAgent = this.agent();
|
|
248
|
+
if (currentAgent) {
|
|
249
|
+
console.log("Agent ready:", currentAgent.id);
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
async sendMessage(event: Event) {
|
|
255
|
+
const input = event.target as HTMLInputElement;
|
|
256
|
+
const content = input.value.trim();
|
|
257
|
+
if (!content || !this.agent()) return;
|
|
258
|
+
|
|
259
|
+
// Add user message and run agent
|
|
260
|
+
this.agent()!.addMessage({ role: "user", content });
|
|
261
|
+
input.value = "";
|
|
262
|
+
await this.agent()!.runAgent();
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Switching Agents at Runtime
|
|
268
|
+
|
|
269
|
+
Use `watchAgentWith` when you need to switch agents dynamically outside of the constructor:
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
import { Component, Injector } from "@angular/core";
|
|
273
|
+
import { watchAgent, watchAgentWith } from "@copilotkitnext/angular";
|
|
274
|
+
|
|
275
|
+
@Component({
|
|
276
|
+
selector: "agent-switcher",
|
|
277
|
+
template: `
|
|
278
|
+
<button (click)="switchToAgent('sales')">Sales Agent</button>
|
|
279
|
+
<button (click)="switchToAgent('support')">Support Agent</button>
|
|
280
|
+
<div>Current Agent: {{ agent()?.id || 'None' }}</div>
|
|
281
|
+
`,
|
|
282
|
+
})
|
|
283
|
+
export class AgentSwitcherComponent {
|
|
284
|
+
protected agent!: ReturnType<typeof watchAgent>["agent"];
|
|
285
|
+
protected messages!: ReturnType<typeof watchAgent>["messages"];
|
|
286
|
+
protected isRunning!: ReturnType<typeof watchAgent>["isRunning"];
|
|
287
|
+
private watcher?: ReturnType<typeof watchAgent>;
|
|
288
|
+
|
|
289
|
+
constructor(private injector: Injector) {
|
|
290
|
+
// Initialize with default agent
|
|
291
|
+
this.switchToAgent("default");
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
switchToAgent(agentId: string) {
|
|
295
|
+
// Clean up previous watcher
|
|
296
|
+
this.watcher?.unsubscribe();
|
|
297
|
+
|
|
298
|
+
// Create new watcher with the ergonomic helper
|
|
299
|
+
const w = watchAgentWith(this.injector, { agentId });
|
|
300
|
+
|
|
301
|
+
// Update component signals
|
|
302
|
+
this.agent = w.agent;
|
|
303
|
+
this.messages = w.messages;
|
|
304
|
+
this.isRunning = w.isRunning;
|
|
305
|
+
this.watcher = w;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Key Benefits of Headless Usage
|
|
311
|
+
|
|
312
|
+
- **Full control**: Build any UI you need without constraints
|
|
313
|
+
- **Reactive signals**: Automatically update UI when agent state changes
|
|
314
|
+
- **Type safety**: Full TypeScript support with AG-UI types
|
|
315
|
+
- **Memory efficient**: Automatic cleanup via Angular's DestroyRef
|
|
316
|
+
- **Framework agnostic**: Works with any AG-UI compatible agent
|
|
317
|
+
|
|
208
318
|
## End-to-End: Running the Demo
|
|
209
319
|
|
|
210
320
|
From the repo root:
|
|
@@ -69,6 +69,7 @@ export declare class CopilotChatAssistantMessageComponent {
|
|
|
69
69
|
clicked: () => void;
|
|
70
70
|
};
|
|
71
71
|
toolbarContext: import("@angular/core").Signal<AssistantMessageToolbarContext>;
|
|
72
|
+
hasMessageContent(): boolean;
|
|
72
73
|
toolCallsViewContext: import("@angular/core").Signal<{
|
|
73
74
|
message: {
|
|
74
75
|
id: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { OnInit, OnChanges,
|
|
1
|
+
import { OnInit, OnChanges, SimpleChanges, ChangeDetectorRef, Signal, Injector } from "@angular/core";
|
|
2
2
|
import { CopilotChatConfigurationService } from "../../core/chat-configuration/chat-configuration.service";
|
|
3
3
|
import { Message, AbstractAgent } from "@ag-ui/client";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
@@ -11,7 +11,7 @@ import * as i0 from "@angular/core";
|
|
|
11
11
|
* <copilot-chat [agentId]="'default'" [threadId]="'abc123'"></copilot-chat>
|
|
12
12
|
* ```
|
|
13
13
|
*/
|
|
14
|
-
export declare class CopilotChatComponent implements OnInit, OnChanges
|
|
14
|
+
export declare class CopilotChatComponent implements OnInit, OnChanges {
|
|
15
15
|
private chatConfig;
|
|
16
16
|
private cdr;
|
|
17
17
|
private injector;
|
|
@@ -23,14 +23,12 @@ export declare class CopilotChatComponent implements OnInit, OnChanges, OnDestro
|
|
|
23
23
|
protected isRunning: Signal<boolean>;
|
|
24
24
|
protected showCursor: import("@angular/core").WritableSignal<boolean>;
|
|
25
25
|
private generatedThreadId;
|
|
26
|
-
private
|
|
26
|
+
private watcher?;
|
|
27
27
|
private hasConnectedOnce;
|
|
28
|
-
private lastAgentId?;
|
|
29
28
|
ngOnInit(): void;
|
|
30
29
|
ngOnChanges(changes: SimpleChanges): void;
|
|
31
30
|
private connectToAgent;
|
|
32
31
|
private setupChatHandlers;
|
|
33
|
-
ngOnDestroy(): void;
|
|
34
32
|
private createWatcher;
|
|
35
33
|
static ɵfac: i0.ɵɵFactoryDeclaration<CopilotChatComponent, [{ optional: true; }, null, null]>;
|
|
36
34
|
static ɵcmp: i0.ɵɵComponentDeclaration<CopilotChatComponent, "copilot-chat", never, { "agentId": { "alias": "agentId"; "required": false; }; "threadId": { "alias": "threadId"; "required": false; }; }, {}, never, never, true, never>;
|
|
@@ -84,6 +84,12 @@ export class CopilotChatAssistantMessageComponent {
|
|
|
84
84
|
toolbarContext = computed(() => ({
|
|
85
85
|
children: null // Will be populated by the toolbar content
|
|
86
86
|
}));
|
|
87
|
+
// Return true if assistant message has non-empty text content
|
|
88
|
+
hasMessageContent() {
|
|
89
|
+
const raw = (this.message?.content ?? '');
|
|
90
|
+
const content = typeof raw === 'string' ? raw : String(raw ?? '');
|
|
91
|
+
return content.trim().length > 0;
|
|
92
|
+
}
|
|
87
93
|
toolCallsViewContext = computed(() => ({
|
|
88
94
|
message: this.message,
|
|
89
95
|
messages: this.messages,
|
|
@@ -141,8 +147,8 @@ export class CopilotChatAssistantMessageComponent {
|
|
|
141
147
|
</copilot-chat-tool-calls-view>
|
|
142
148
|
}
|
|
143
149
|
|
|
144
|
-
<!-- Toolbar -->
|
|
145
|
-
<ng-container *ngIf="toolbarVisible">
|
|
150
|
+
<!-- Toolbar: show only when there is assistant text content -->
|
|
151
|
+
<ng-container *ngIf="toolbarVisible && hasMessageContent()">
|
|
146
152
|
@if (toolbarTemplate || toolbarComponent) {
|
|
147
153
|
<copilot-slot
|
|
148
154
|
[slot]="toolbarTemplate || toolbarComponent"
|
|
@@ -269,8 +275,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
269
275
|
</copilot-chat-tool-calls-view>
|
|
270
276
|
}
|
|
271
277
|
|
|
272
|
-
<!-- Toolbar -->
|
|
273
|
-
<ng-container *ngIf="toolbarVisible">
|
|
278
|
+
<!-- Toolbar: show only when there is assistant text content -->
|
|
279
|
+
<ng-container *ngIf="toolbarVisible && hasMessageContent()">
|
|
274
280
|
@if (toolbarTemplate || toolbarComponent) {
|
|
275
281
|
<copilot-slot
|
|
276
282
|
[slot]="toolbarTemplate || toolbarComponent"
|
|
@@ -430,4 +436,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
430
436
|
}], regenerate: [{
|
|
431
437
|
type: Output
|
|
432
438
|
}] } });
|
|
433
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFFUix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBZ0I3RixPQUFPLEVBQUUsNENBQTRDLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNuSCxPQUFPLEVBQ0wsOENBQThDLEVBQzlDLGtEQUFrRCxFQUNsRCxvREFBb0QsRUFDcEQsbURBQW1ELEVBQ25ELG9EQUFvRCxFQUNyRCxNQUFNLG9EQUFvRCxDQUFDO0FBQzVELE9BQU8sRUFBRSwyQ0FBMkMsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pILE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7OztBQStTdEYsTUFBTSxPQUFPLG9DQUFvQztJQUMvQyw0Q0FBNEM7SUFDYSx3QkFBd0IsQ0FBd0Q7SUFDekYsZUFBZSxDQUErQztJQUMzRCxrQkFBa0IsQ0FBa0Q7SUFDaEUsc0JBQXNCLENBQXNDO0lBQzFELHdCQUF3QixDQUF3QztJQUNqRSx1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QUE5RSxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFDRyx3QkFBd0I7c0JBQWhGLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUNELHFCQUFxQjtzQkFBMUUsWUFBWTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUczQyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBYUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBUZW1wbGF0ZVJlZixcbiAgQ29udGVudENoaWxkLFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBUeXBlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIE9wdGlvbmFsLFxuICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29waWxvdFNsb3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9saWIvc2xvdHMvY29waWxvdC1zbG90LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdFRvb2xDYWxsc1ZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NvcGlsb3QtY2hhdC10b29sLWNhbGxzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSB9IGZyb20gJ0BhZy11aS9jb3JlJztcbmltcG9ydCB7XG4gIHR5cGUgQXNzaXN0YW50TWVzc2FnZSxcbiAgdHlwZSBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VPblRodW1ic1VwUHJvcHMsXG4gIHR5cGUgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlT25UaHVtYnNEb3duUHJvcHMsXG4gIHR5cGUgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlT25SZWFkQWxvdWRQcm9wcyxcbiAgdHlwZSBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VPblJlZ2VuZXJhdGVQcm9wcyxcbiAgdHlwZSBBc3Npc3RhbnRNZXNzYWdlTWFya2Rvd25SZW5kZXJlckNvbnRleHQsXG4gIHR5cGUgQXNzaXN0YW50TWVzc2FnZUNvcHlCdXR0b25Db250ZXh0LFxuICB0eXBlIFRodW1ic1VwQnV0dG9uQ29udGV4dCxcbiAgdHlwZSBUaHVtYnNEb3duQnV0dG9uQ29udGV4dCxcbiAgdHlwZSBSZWFkQWxvdWRCdXR0b25Db250ZXh0LFxuICB0eXBlIFJlZ2VuZXJhdGVCdXR0b25Db250ZXh0LFxuICB0eXBlIEFzc2lzdGFudE1lc3NhZ2VUb29sYmFyQ29udGV4dFxufSBmcm9tICcuL2NvcGlsb3QtY2hhdC1hc3Npc3RhbnQtbWVzc2FnZS50eXBlcyc7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VDb3B5QnV0dG9uQ29tcG9uZW50LFxuICBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VUaHVtYnNVcEJ1dHRvbkNvbXBvbmVudCxcbiAgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlVGh1bWJzRG93bkJ1dHRvbkNvbXBvbmVudCxcbiAgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlUmVhZEFsb3VkQnV0dG9uQ29tcG9uZW50LFxuICBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VSZWdlbmVyYXRlQnV0dG9uQ29tcG9uZW50XG59IGZyb20gJy4vY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLWJ1dHRvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZVRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuL2NvcGlsb3QtY2hhdC1hc3Npc3RhbnQtbWVzc2FnZS10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL2xpYi91dGlscyc7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdFZpZXdIYW5kbGVyc1NlcnZpY2UgfSBmcm9tICcuL2NvcGlsb3QtY2hhdC12aWV3LWhhbmRsZXJzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjb3BpbG90LWNoYXQtYXNzaXN0YW50LW1lc3NhZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIENvcGlsb3RTbG90Q29tcG9uZW50LFxuICAgIENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZVJlbmRlcmVyQ29tcG9uZW50LFxuICAgIENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZUNvcHlCdXR0b25Db21wb25lbnQsXG4gICAgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlVGh1bWJzVXBCdXR0b25Db21wb25lbnQsXG4gICAgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlVGh1bWJzRG93bkJ1dHRvbkNvbXBvbmVudCxcbiAgICBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VSZWFkQWxvdWRCdXR0b25Db21wb25lbnQsXG4gICAgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlUmVnZW5lcmF0ZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VUb29sYmFyQ29tcG9uZW50LFxuICAgIENvcGlsb3RDaGF0VG9vbENhbGxzVmlld0NvbXBvbmVudFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IFxuICAgICAgW2NsYXNzXT1cImNvbXB1dGVkQ2xhc3MoKVwiXG4gICAgICBbYXR0ci5kYXRhLW1lc3NhZ2UtaWRdPVwibWVzc2FnZT8uaWRcIj5cbiAgICAgIFxuICAgICAgPCEtLSBNYXJrZG93biBSZW5kZXJlciAtLT5cbiAgICAgIEBpZiAobWFya2Rvd25SZW5kZXJlclRlbXBsYXRlIHx8IG1hcmtkb3duUmVuZGVyZXJDb21wb25lbnQpIHtcbiAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgIFtzbG90XT1cIm1hcmtkb3duUmVuZGVyZXJUZW1wbGF0ZSB8fCBtYXJrZG93blJlbmRlcmVyQ29tcG9uZW50XCJcbiAgICAgICAgICBbY29udGV4dF09XCJtYXJrZG93blJlbmRlcmVyQ29udGV4dCgpXCJcbiAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VSZW5kZXJlckNvbXBvbmVudFwiXG4gICAgICAgICAgPlxuICAgICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8Y29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLXJlbmRlcmVyXG4gICAgICAgICAgW2NvbnRlbnRdPVwibWVzc2FnZT8uY29udGVudCB8fCAnJ1wiXG4gICAgICAgICAgW2lucHV0Q2xhc3NdPVwibWFya2Rvd25SZW5kZXJlckNsYXNzXCI+XG4gICAgICAgIDwvY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLXJlbmRlcmVyPlxuICAgICAgfVxuICAgICAgXG4gICAgICA8IS0tIFRvb2wgQ2FsbHMgVmlldyAtLT5cbiAgICAgIEBpZiAodG9vbENhbGxzVmlld1RlbXBsYXRlIHx8IHRvb2xDYWxsc1ZpZXdDb21wb25lbnQpIHtcbiAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgIFtzbG90XT1cInRvb2xDYWxsc1ZpZXdUZW1wbGF0ZSB8fCB0b29sQ2FsbHNWaWV3Q29tcG9uZW50XCJcbiAgICAgICAgICBbY29udGV4dF09XCJ0b29sQ2FsbHNWaWV3Q29udGV4dCgpXCJcbiAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJDb3BpbG90Q2hhdFRvb2xDYWxsc1ZpZXdDb21wb25lbnRcIj5cbiAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICB9IEBlbHNlIGlmIChtZXNzYWdlPy50b29sQ2FsbHMgJiYgbWVzc2FnZS50b29sQ2FsbHMubGVuZ3RoID4gMCkge1xuICAgICAgICA8Y29waWxvdC1jaGF0LXRvb2wtY2FsbHMtdmlld1xuICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxuICAgICAgICAgIFttZXNzYWdlc109XCJtZXNzYWdlc1wiXG4gICAgICAgICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgPC9jb3BpbG90LWNoYXQtdG9vbC1jYWxscy12aWV3PlxuICAgICAgfVxuICAgICAgXG4gICAgICA8IS0tIFRvb2xiYXIgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG9vbGJhclZpc2libGVcIj5cbiAgICAgICAgQGlmICh0b29sYmFyVGVtcGxhdGUgfHwgdG9vbGJhckNvbXBvbmVudCkge1xuICAgICAgICAgIDxjb3BpbG90LXNsb3RcbiAgICAgICAgICAgIFtzbG90XT1cInRvb2xiYXJUZW1wbGF0ZSB8fCB0b29sYmFyQ29tcG9uZW50XCJcbiAgICAgICAgICAgIFtjb250ZXh0XT1cInRvb2xiYXJDb250ZXh0KClcIlxuICAgICAgICAgICAgW2RlZmF1bHRDb21wb25lbnRdPVwiQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlVG9vbGJhckNvbXBvbmVudFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlVG9vbGJhciBbaW5wdXRDbGFzc109XCJ0b29sYmFyQ2xhc3NcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgICAgICAgICAgICA8IS0tIENvcHkgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICBAaWYgKGNvcHlCdXR0b25UZW1wbGF0ZSB8fCBjb3B5QnV0dG9uQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgICAgICAgICAgW3Nsb3RdPVwiY29weUJ1dHRvblRlbXBsYXRlIHx8IGNvcHlCdXR0b25Db21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRleHRdPVwieyBjb250ZW50OiBtZXNzYWdlPy5jb250ZW50IHx8ICcnIH1cIlxuICAgICAgICAgICAgICAgICAgW2RlZmF1bHRDb21wb25lbnRdPVwiQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlQ29weUJ1dHRvbkNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgICBbb3V0cHV0c109XCJjb3B5QnV0dG9uT3V0cHV0c1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxjb3BpbG90LWNoYXQtYXNzaXN0YW50LW1lc3NhZ2UtY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cIm1lc3NhZ2U/LmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgW2lucHV0Q2xhc3NdPVwiY29weUJ1dHRvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImhhbmRsZUNvcHkoKVwiPlxuICAgICAgICAgICAgICAgIDwvY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8IS0tIFRodW1icyB1cCBidXR0b24gLSBzaG93IGlmIGN1c3RvbSBzbG90IHByb3ZpZGVkIE9SIGlmIGhhbmRsZXIgYXZhaWxhYmxlIGF0IHRvcCBsZXZlbCAtLT5cbiAgICAgICAgICAgICAgQGlmICh0aHVtYnNVcEJ1dHRvbkNvbXBvbmVudCB8fCB0aHVtYnNVcEJ1dHRvblRlbXBsYXRlIHx8IGhhbmRsZXJzLmhhc0Fzc2lzdGFudFRodW1ic1VwSGFuZGxlcigpKSB7XG4gICAgICAgICAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgICAgICAgICAgW3Nsb3RdPVwidGh1bWJzVXBCdXR0b25UZW1wbGF0ZSB8fCB0aHVtYnNVcEJ1dHRvbkNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgICBbY29udGV4dF09XCJ7fVwiXG4gICAgICAgICAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJkZWZhdWx0VGh1bWJzVXBCdXR0b25Db21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgW291dHB1dHNdPVwidGh1bWJzVXBCdXR0b25PdXRwdXRzXCI+XG4gICAgICAgICAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwhLS0gVGh1bWJzIGRvd24gYnV0dG9uIC0gc2hvdyBpZiBjdXN0b20gc2xvdCBwcm92aWRlZCBPUiBpZiBoYW5kbGVyIGF2YWlsYWJsZSBhdCB0b3AgbGV2ZWwgLS0+XG4gICAgICAgICAgICAgIEBpZiAodGh1bWJzRG93bkJ1dHRvbkNvbXBvbmVudCB8fCB0aHVtYnNEb3duQnV0dG9uVGVtcGxhdGUgfHwgaGFuZGxlcnMuaGFzQXNzaXN0YW50VGh1bWJzRG93bkhhbmRsZXIoKSkge1xuICAgICAgICAgICAgICAgIDxjb3BpbG90LXNsb3RcbiAgICAgICAgICAgICAgICAgIFtzbG90XT1cInRodW1ic0Rvd25CdXR0b25UZW1wbGF0ZSB8fCB0aHVtYnNEb3duQnV0dG9uQ29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cInt9XCJcbiAgICAgICAgICAgICAgICAgIFtkZWZhdWx0Q29tcG9uZW50XT1cImRlZmF1bHRUaHVtYnNEb3duQnV0dG9uQ29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICAgIFtvdXRwdXRzXT1cInRodW1ic0Rvd25CdXR0b25PdXRwdXRzXCI+XG4gICAgICAgICAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwhLS0gUmVhZCBhbG91ZCBidXR0b24gLSBvbmx5IHNob3cgaWYgY3VzdG9tIHNsb3QgcHJvdmlkZWQgLS0+XG4gICAgICAgICAgICAgIEBpZiAocmVhZEFsb3VkQnV0dG9uQ29tcG9uZW50IHx8IHJlYWRBbG91ZEJ1dHRvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgICAgICAgICAgW3Nsb3RdPVwicmVhZEFsb3VkQnV0dG9uVGVtcGxhdGUgfHwgcmVhZEFsb3VkQnV0dG9uQ29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cInt9XCJcbiAgICAgICAgICAgICAgICAgIFtvdXRwdXRzXT1cInJlYWRBbG91ZEJ1dHRvbk91dHB1dHNcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvY29waWxvdC1zbG90PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8IS0tIFJlZ2VuZXJhdGUgYnV0dG9uIC0gb25seSBzaG93IGlmIGN1c3RvbSBzbG90IHByb3ZpZGVkIC0tPlxuICAgICAgICAgICAgICBAaWYgKHJlZ2VuZXJhdGVCdXR0b25Db21wb25lbnQgfHwgcmVnZW5lcmF0ZUJ1dHRvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgICAgICAgICAgW3Nsb3RdPVwicmVnZW5lcmF0ZUJ1dHRvblRlbXBsYXRlIHx8IHJlZ2VuZXJhdGVCdXR0b25Db21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRleHRdPVwie31cIlxuICAgICAgICAgICAgICAgICAgW291dHB1dHNdPVwicmVnZW5lcmF0ZUJ1dHRvbk91dHB1dHNcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvY29waWxvdC1zbG90PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8IS0tIEFkZGl0aW9uYWwgdG9vbGJhciBpdGVtcyAtLT5cbiAgICAgICAgICAgICAgQGlmIChhZGRpdGlvbmFsVG9vbGJhckl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkZGl0aW9uYWxUb29sYmFySXRlbXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLyogSW1wb3J0IEthVGVYIHN0eWxlcyAqL1xuICAgIEBpbXBvcnQgJ2thdGV4L2Rpc3Qva2F0ZXgubWluLmNzcyc7XG5cbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgIC8qIEF0b20gT25lIExpZ2h0IHRoZW1lIGZvciBoaWdobGlnaHQuanMgKi9cbiAgICAuaGxqcyB7XG4gICAgICBjb2xvcjogcmdiKDU2LCA1OCwgNjYpO1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgLmhsanMtY29tbWVudCxcbiAgICAuaGxqcy1xdW90ZSB7XG4gICAgICBjb2xvcjogI2EwYTFhNztcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9XG5cbiAgICAuaGxqcy1kb2N0YWcsXG4gICAgLmhsanMtZm9ybXVsYSxcbiAgICAuaGxqcy1rZXl3b3JkIHtcbiAgICAgIGNvbG9yOiAjYTYyNmE0O1xuICAgIH1cblxuICAgIC5obGpzLWRlbGV0aW9uLFxuICAgIC5obGpzLW5hbWUsXG4gICAgLmhsanMtc2VjdGlvbixcbiAgICAuaGxqcy1zZWxlY3Rvci10YWcsXG4gICAgLmhsanMtc3Vic3Qge1xuICAgICAgY29sb3I6ICNlNDU2NDk7XG4gICAgfVxuXG4gICAgLmhsanMtbGl0ZXJhbCB7XG4gICAgICBjb2xvcjogIzAxODRiYjtcbiAgICB9XG5cbiAgICAuaGxqcy1hZGRpdGlvbixcbiAgICAuaGxqcy1hdHRyaWJ1dGUsXG4gICAgLmhsanMtbWV0YSAuaGxqcy1zdHJpbmcsXG4gICAgLmhsanMtcmVnZXhwLFxuICAgIC5obGpzLXN0cmluZyB7XG4gICAgICBjb2xvcjogIzUwYTE0ZjtcbiAgICB9XG5cbiAgICAuaGxqcy1hdHRyLFxuICAgIC5obGpzLW51bWJlcixcbiAgICAuaGxqcy1zZWxlY3Rvci1hdHRyLFxuICAgIC5obGpzLXNlbGVjdG9yLWNsYXNzLFxuICAgIC5obGpzLXNlbGVjdG9yLXBzZXVkbyxcbiAgICAuaGxqcy10ZW1wbGF0ZS12YXJpYWJsZSxcbiAgICAuaGxqcy10eXBlLFxuICAgIC5obGpzLXZhcmlhYmxlIHtcbiAgICAgIGNvbG9yOiAjOTg2ODAxO1xuICAgIH1cblxuICAgIC5obGpzLXBhcmFtcyB7XG4gICAgICBjb2xvcjogcmdiKDU2LCA1OCwgNjYpO1xuICAgIH1cblxuICAgIC5obGpzLWJ1bGxldCxcbiAgICAuaGxqcy1saW5rLFxuICAgIC5obGpzLW1ldGEsXG4gICAgLmhsanMtc2VsZWN0b3ItaWQsXG4gICAgLmhsanMtc3ltYm9sLFxuICAgIC5obGpzLXRpdGxlIHtcbiAgICAgIGNvbG9yOiAjNDA3OGYyO1xuICAgIH1cblxuICAgIC5obGpzLWJ1aWx0X2luLFxuICAgIC5obGpzLWNsYXNzIC5obGpzLXRpdGxlLFxuICAgIC5obGpzLXRpdGxlLmNsYXNzXyB7XG4gICAgICBjb2xvcjogI2MxODQwMTtcbiAgICB9XG5cbiAgICAuaGxqcy1lbXBoYXNpcyB7XG4gICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgfVxuXG4gICAgLmhsanMtc3Ryb25nIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgfVxuXG4gICAgLmhsanMtbGluayB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICB9XG5cbiAgICAvKiBBdG9tIE9uZSBEYXJrIHRoZW1lIGZvciBoaWdobGlnaHQuanMgKi9cbiAgICAuZGFyayAuaGxqcyB7XG4gICAgICBjb2xvcjogI2FiYjJiZjtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIH1cblxuICAgIC5kYXJrIC5obGpzLWNvbW1lbnQsXG4gICAgLmRhcmsgLmhsanMtcXVvdGUge1xuICAgICAgY29sb3I6ICM1YzYzNzA7XG4gICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgfVxuXG4gICAgLmRhcmsgLmhsanMtZG9jdGFnLFxuICAgIC5kYXJrIC5obGpzLWZvcm11bGEsXG4gICAgLmRhcmsgLmhsanMta2V5d29yZCB7XG4gICAgICBjb2xvcjogI2M2NzhkZDtcbiAgICB9XG5cbiAgICAuZGFyayAuaGxqcy1kZWxldGlvbixcbiAgICAuZGFyayAuaGxqcy1uYW1lLFxuICAgIC5kYXJrIC5obGpzLXNlY3Rpb24sXG4gICAgLmRhcmsgLmhsanMtc2VsZWN0b3ItdGFnLFxuICAgIC5kYXJrIC5obGpzLXN1YnN0IHtcbiAgICAgIGNvbG9yOiAjZTA2Yzc1O1xuICAgIH1cblxuICAgIC5kYXJrIC5obGpzLWxpdGVyYWwge1xuICAgICAgY29sb3I6ICM1NmI2YzI7XG4gICAgfVxuXG4gICAgLmRhcmsgLmhsanMtYWRkaXRpb24sXG4gICAgLmRhcmsgLmhsanMtYXR0cmlidXRlLFxuICAgIC5kYXJrIC5obGpzLW1ldGEgLmhsanMtc3RyaW5nLFxuICAgIC5kYXJrIC5obGpzLXJlZ2V4cCxcbiAgICAuZGFyayAuaGxqcy1zdHJpbmcge1xuICAgICAgY29sb3I6ICM5OGMzNzk7XG4gICAgfVxuXG4gICAgLmRhcmsgLmhsanMtYXR0cixcbiAgICAuZGFyayAuaGxqcy1udW1iZXIsXG4gICAgLmRhcmsgLmhsanMtc2VsZWN0b3ItYXR0cixcbiAgICAuZGFyayAuaGxqcy1zZWxlY3Rvci1jbGFzcyxcbiAgICAuZGFyayAuaGxqcy1zZWxlY3Rvci1wc2V1ZG8sXG4gICAgLmRhcmsgLmhsanMtdGVtcGxhdGUtdmFyaWFibGUsXG4gICAgLmRhcmsgLmhsanMtdHlwZSxcbiAgICAuZGFyayAuaGxqcy12YXJpYWJsZSB7XG4gICAgICBjb2xvcjogI2QxOWE2NjtcbiAgICB9XG5cbiAgICAuZGFyayAuaGxqcy1idWxsZXQsXG4gICAgLmRhcmsgLmhsanMtbGluayxcbiAgICAuZGFyayAuaGxqcy1tZXRhLFxuICAgIC5kYXJrIC5obGpzLXNlbGVjdG9yLWlkLFxuICAgIC5kYXJrIC5obGpzLXN5bWJvbCxcbiAgICAuZGFyayAuaGxqcy10aXRsZSB7XG4gICAgICBjb2xvcjogIzYxYWVlZTtcbiAgICB9XG5cbiAgICAuZGFyayAuaGxqcy1idWlsdF9pbixcbiAgICAuZGFyayAuaGxqcy1jbGFzcyAuaGxqcy10aXRsZSxcbiAgICAuZGFyayAuaGxqcy10aXRsZS5jbGFzc18ge1xuICAgICAgY29sb3I6ICNlNmMwN2I7XG4gICAgfVxuXG4gICAgLmRhcmsgLmhsanMtcGFyYW1zIHtcbiAgICAgIGNvbG9yOiAjYWJiMmJmOyAvKiBzYW1lIGFzIHJlZ3VsYXIgdGV4dCAqL1xuICAgIH1cblxuICAgIC5kYXJrIC5obGpzLWVtcGhhc2lzIHtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9XG5cbiAgICAuZGFyayAuaGxqcy1zdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICB9XG5cbiAgICAuZGFyayAuaGxqcy1saW5rIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlQ29tcG9uZW50IHtcbiAgLy8gQ2FwdHVyZSB0ZW1wbGF0ZXMgZnJvbSBjb250ZW50IHByb2plY3Rpb25cbiAgQENvbnRlbnRDaGlsZCgnbWFya2Rvd25SZW5kZXJlcicsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgbWFya2Rvd25SZW5kZXJlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8QXNzaXN0YW50TWVzc2FnZU1hcmtkb3duUmVuZGVyZXJDb250ZXh0PjtcbiAgQENvbnRlbnRDaGlsZCgndG9vbGJhcicsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgdG9vbGJhclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8QXNzaXN0YW50TWVzc2FnZVRvb2xiYXJDb250ZXh0PjtcbiAgQENvbnRlbnRDaGlsZCgnY29weUJ1dHRvbicsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgY29weUJ1dHRvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8QXNzaXN0YW50TWVzc2FnZUNvcHlCdXR0b25Db250ZXh0PjtcbiAgQENvbnRlbnRDaGlsZCgndGh1bWJzVXBCdXR0b24nLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHRodW1ic1VwQnV0dG9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxUaHVtYnNVcEJ1dHRvbkNvbnRleHQ+O1xuICBAQ29udGVudENoaWxkKCd0aHVtYnNEb3duQnV0dG9uJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSB0aHVtYnNEb3duQnV0dG9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxUaHVtYnNEb3duQnV0dG9uQ29udGV4dD47XG4gIEBDb250ZW50Q2hpbGQoJ3JlYWRBbG91ZEJ1dHRvbicsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcmVhZEFsb3VkQnV0dG9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxSZWFkQWxvdWRCdXR0b25Db250ZXh0PjtcbiAgQENvbnRlbnRDaGlsZCgncmVnZW5lcmF0ZUJ1dHRvbicsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcmVnZW5lcmF0ZUJ1dHRvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8UmVnZW5lcmF0ZUJ1dHRvbkNvbnRleHQ+O1xuICBAQ29udGVudENoaWxkKCd0b29sQ2FsbHNWaWV3JywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSB0b29sQ2FsbHNWaWV3VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBcbiAgLy8gQ2xhc3MgaW5wdXRzIGZvciBzdHlsaW5nIGRlZmF1bHQgY29tcG9uZW50c1xuICBASW5wdXQoKSBtYXJrZG93blJlbmRlcmVyQ2xhc3M/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRvb2xiYXJDbGFzcz86IHN0cmluZztcbiAgQElucHV0KCkgY29weUJ1dHRvbkNsYXNzPzogc3RyaW5nO1xuICBASW5wdXQoKSB0aHVtYnNVcEJ1dHRvbkNsYXNzPzogc3RyaW5nO1xuICBASW5wdXQoKSB0aHVtYnNEb3duQnV0dG9uQ2xhc3M/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlYWRBbG91ZEJ1dHRvbkNsYXNzPzogc3RyaW5nO1xuICBASW5wdXQoKSByZWdlbmVyYXRlQnV0dG9uQ2xhc3M/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRvb2xDYWxsc1ZpZXdDbGFzcz86IHN0cmluZztcbiAgXG4gIC8vIENvbXBvbmVudCBpbnB1dHMgZm9yIG92ZXJyaWRlc1xuICBASW5wdXQoKSBtYXJrZG93blJlbmRlcmVyQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBASW5wdXQoKSB0b29sYmFyQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBASW5wdXQoKSBjb3B5QnV0dG9uQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBASW5wdXQoKSB0aHVtYnNVcEJ1dHRvbkNvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgQElucHV0KCkgdGh1bWJzRG93bkJ1dHRvbkNvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgQElucHV0KCkgcmVhZEFsb3VkQnV0dG9uQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBASW5wdXQoKSByZWdlbmVyYXRlQnV0dG9uQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBASW5wdXQoKSB0b29sQ2FsbHNWaWV3Q29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBcbiAgLy8gUmVndWxhciBpbnB1dHNcbiAgQElucHV0KCkgbWVzc2FnZSE6IEFzc2lzdGFudE1lc3NhZ2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcbiAgQElucHV0KCkgaXNMb2FkaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxUb29sYmFySXRlbXM/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSB0b29sYmFyVmlzaWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNldCBpbnB1dENsYXNzKHZhbDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5jdXN0b21DbGFzcy5zZXQodmFsKTtcbiAgfVxuICBcbiAgLy8gREkgc2VydmljZSBleHBvc2VzIGhhbmRsZXIgYXZhaWxhYmlsaXR5IHNjb3BlZCB0byBDb3BpbG90Q2hhdFZpZXdcbiAgLy8gTWFrZSBpdCBvcHRpb25hbCB3aXRoIGEgZGVmYXVsdCBmYWxsYmFjayBmb3IgdGVzdGluZ1xuICBoYW5kbGVyczogQ29waWxvdENoYXRWaWV3SGFuZGxlcnNTZXJ2aWNlO1xuICBcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChDb3BpbG90Q2hhdFZpZXdIYW5kbGVyc1NlcnZpY2UpIGhhbmRsZXJzPzogQ29waWxvdENoYXRWaWV3SGFuZGxlcnNTZXJ2aWNlIHwgbnVsbCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycyB8fCBuZXcgQ29waWxvdENoYXRWaWV3SGFuZGxlcnNTZXJ2aWNlKCk7XG4gIH1cbiAgXG4gIC8vIE91dHB1dCBldmVudHNcbiAgQE91dHB1dCgpIHRodW1ic1VwID0gbmV3IEV2ZW50RW1pdHRlcjxDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VPblRodW1ic1VwUHJvcHM+KCk7XG4gIEBPdXRwdXQoKSB0aHVtYnNEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VPblRodW1ic0Rvd25Qcm9wcz4oKTtcbiAgQE91dHB1dCgpIHJlYWRBbG91ZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlT25SZWFkQWxvdWRQcm9wcz4oKTtcbiAgQE91dHB1dCgpIHJlZ2VuZXJhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZU9uUmVnZW5lcmF0ZVByb3BzPigpO1xuICBcbiAgLy8gU2lnbmFsc1xuICBjdXN0b21DbGFzcyA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIFxuICAvLyBDb21wdXRlZCB2YWx1ZXNcbiAgY29tcHV0ZWRDbGFzcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gY24oXG4gICAgICBcInByb3NlIG1heC13LWZ1bGwgYnJlYWstd29yZHMgZGFyazpwcm9zZS1pbnZlcnRcIixcbiAgICAgIHRoaXMuY3VzdG9tQ2xhc3MoKVxuICAgICk7XG4gIH0pO1xuICBcbiAgLy8gRGVmYXVsdCBjb21wb25lbnRzXG4gIHByb3RlY3RlZCByZWFkb25seSBkZWZhdWx0VGh1bWJzVXBCdXR0b25Db21wb25lbnQgPSBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VUaHVtYnNVcEJ1dHRvbkNvbXBvbmVudDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRUaHVtYnNEb3duQnV0dG9uQ29tcG9uZW50ID0gQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlVGh1bWJzRG93bkJ1dHRvbkNvbXBvbmVudDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZVJlbmRlcmVyQ29tcG9uZW50ID0gQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlUmVuZGVyZXJDb21wb25lbnQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VUb29sYmFyQ29tcG9uZW50ID0gQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlVG9vbGJhckNvbXBvbmVudDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZUNvcHlCdXR0b25Db21wb25lbnQgPSBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VDb3B5QnV0dG9uQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgQ29waWxvdENoYXRUb29sQ2FsbHNWaWV3Q29tcG9uZW50ID0gQ29waWxvdENoYXRUb29sQ2FsbHNWaWV3Q29tcG9uZW50O1xuICBcbiAgLy8gQ29udGV4dCBmb3Igc2xvdHMgKHJlYWN0aXZlIHZpYSBzaWduYWxzKVxuICBtYXJrZG93blJlbmRlcmVyQ29udGV4dCA9IGNvbXB1dGVkPEFzc2lzdGFudE1lc3NhZ2VNYXJrZG93blJlbmRlcmVyQ29udGV4dD4oKCkgPT4gKHtcbiAgICBjb250ZW50OiB0aGlzLm1lc3NhZ2U/LmNvbnRlbnQgfHwgJydcbiAgfSkpO1xuICBcbiAgLy8gT3V0cHV0IG1hcHMgZm9yIHNsb3RzXG4gIGNvcHlCdXR0b25PdXRwdXRzID0geyBjbGlja2VkOiAoKSA9PiB0aGlzLmhhbmRsZUNvcHkoKSB9O1xuICB0aHVtYnNVcEJ1dHRvbk91dHB1dHMgPSB7IGNsaWNrZWQ6ICgpID0+IHRoaXMuaGFuZGxlVGh1bWJzVXAoKSB9O1xuICB0aHVtYnNEb3duQnV0dG9uT3V0cHV0cyA9IHsgY2xpY2tlZDogKCkgPT4gdGhpcy5oYW5kbGVUaHVtYnNEb3duKCkgfTtcbiAgcmVhZEFsb3VkQnV0dG9uT3V0cHV0cyA9IHsgY2xpY2tlZDogKCkgPT4gdGhpcy5oYW5kbGVSZWFkQWxvdWQoKSB9O1xuICByZWdlbmVyYXRlQnV0dG9uT3V0cHV0cyA9IHsgY2xpY2tlZDogKCkgPT4gdGhpcy5oYW5kbGVSZWdlbmVyYXRlKCkgfTtcbiAgXG4gIHRvb2xiYXJDb250ZXh0ID0gY29tcHV0ZWQ8QXNzaXN0YW50TWVzc2FnZVRvb2xiYXJDb250ZXh0PigoKSA9PiAoe1xuICAgIGNoaWxkcmVuOiBudWxsIC8vIFdpbGwgYmUgcG9wdWxhdGVkIGJ5IHRoZSB0b29sYmFyIGNvbnRlbnRcbiAgfSkpO1xuICBcbiAgdG9vbENhbGxzVmlld0NvbnRleHQgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICBtZXNzYWdlczogdGhpcy5tZXNzYWdlcyxcbiAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nXG4gIH0pKTtcbiAgXG4gIGhhbmRsZUNvcHkoKTogdm9pZCB7XG4gICAgLy8gQ29weSBpcyBoYW5kbGVkIGJ5IHRoZSBidXR0b24gY29tcG9uZW50IGl0c2VsZlxuICAgIC8vIFRoaXMgaXMganVzdCBmb3IgYW55IGFkZGl0aW9uYWwgbG9naWMgaWYgbmVlZGVkXG4gIH1cbiAgXG4gIGhhbmRsZVRodW1ic1VwKCk6IHZvaWQge1xuICAgIHRoaXMudGh1bWJzVXAuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubWVzc2FnZSB9KTtcbiAgfVxuICBcbiAgaGFuZGxlVGh1bWJzRG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnRodW1ic0Rvd24uZW1pdCh7IG1lc3NhZ2U6IHRoaXMubWVzc2FnZSB9KTtcbiAgfVxuICBcbiAgaGFuZGxlUmVhZEFsb3VkKCk6IHZvaWQge1xuICAgIHRoaXMucmVhZEFsb3VkLmVtaXQoeyBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UgfSk7XG4gIH1cbiAgXG4gIGhhbmRsZVJlZ2VuZXJhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5yZWdlbmVyYXRlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
439
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFFUix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBZ0I3RixPQUFPLEVBQUUsNENBQTRDLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNuSCxPQUFPLEVBQ0wsOENBQThDLEVBQzlDLGtEQUFrRCxFQUNsRCxvREFBb0QsRUFDcEQsbURBQW1ELEVBQ25ELG9EQUFvRCxFQUNyRCxNQUFNLG9EQUFvRCxDQUFDO0FBQzVELE9BQU8sRUFBRSwyQ0FBMkMsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pILE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7OztBQStTdEYsTUFBTSxPQUFPLG9DQUFvQztJQUMvQyw0Q0FBNEM7SUFDYSx3QkFBd0IsQ0FBd0Q7SUFDekYsZUFBZSxDQUErQztJQUMzRCxrQkFBa0IsQ0FBa0Q7SUFDaEUsc0JBQXNCLENBQXNDO0lBQzFELHdCQUF3QixDQUF3QztJQUNqRSx1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SztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBYUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBUZW1wbGF0ZVJlZixcbiAgQ29udGVudENoaWxkLFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBUeXBlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIE9wdGlvbmFsLFxuICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29waWxvdFNsb3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9saWIvc2xvdHMvY29waWxvdC1zbG90LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdFRvb2xDYWxsc1ZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NvcGlsb3QtY2hhdC10b29sLWNhbGxzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSB9IGZyb20gJ0BhZy11aS9jb3JlJztcbmltcG9ydCB7XG4gIHR5cGUgQXNzaXN0YW50TWVzc2FnZSxcbiAgdHlwZSBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VPblRodW1ic1VwUHJvcHMsXG4gIHR5cGUgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlT25UaHVtYnNEb3duUHJvcHMsXG4gIHR5cGUgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlT25SZWFkQWxvdWRQcm9wcyxcbiAgdHlwZSBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VPblJlZ2VuZXJhdGVQcm9wcyxcbiAgdHlwZSBBc3Npc3RhbnRNZXNzYWdlTWFya2Rvd25SZW5kZXJlckNvbnRleHQsXG4gIHR5cGUgQXNzaXN0YW50TWVzc2FnZUNvcHlCdXR0b25Db250ZXh0LFxuICB0eXBlIFRodW1ic1VwQnV0dG9uQ29udGV4dCxcbiAgdHlwZSBUaHVtYnNEb3duQnV0dG9uQ29udGV4dCxcbiAgdHlwZSBSZWFkQWxvdWRCdXR0b25Db250ZXh0LFxuICB0eXBlIFJlZ2VuZXJhdGVCdXR0b25Db250ZXh0LFxuICB0eXBlIEFzc2lzdGFudE1lc3NhZ2VUb29sYmFyQ29udGV4dFxufSBmcm9tICcuL2NvcGlsb3QtY2hhdC1hc3Npc3RhbnQtbWVzc2FnZS50eXBlcyc7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VDb3B5QnV0dG9uQ29tcG9uZW50LFxuICBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VUaHVtYnNVcEJ1dHRvbkNvbXBvbmVudCxcbiAgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlVGh1bWJzRG93bkJ1dHRvbkNvbXBvbmVudCxcbiAgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlUmVhZEFsb3VkQnV0dG9uQ29tcG9uZW50LFxuICBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VSZWdlbmVyYXRlQnV0dG9uQ29tcG9uZW50XG59IGZyb20gJy4vY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLWJ1dHRvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZVRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuL2NvcGlsb3QtY2hhdC1hc3Npc3RhbnQtbWVzc2FnZS10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL2xpYi91dGlscyc7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdFZpZXdIYW5kbGVyc1NlcnZpY2UgfSBmcm9tICcuL2NvcGlsb3QtY2hhdC12aWV3LWhhbmRsZXJzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjb3BpbG90LWNoYXQtYXNzaXN0YW50LW1lc3NhZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIENvcGlsb3RTbG90Q29tcG9uZW50LFxuICAgIENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZVJlbmRlcmVyQ29tcG9uZW50LFxuICAgIENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZUNvcHlCdXR0b25Db21wb25lbnQsXG4gICAgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlVGh1bWJzVXBCdXR0b25Db21wb25lbnQsXG4gICAgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlVGh1bWJzRG93bkJ1dHRvbkNvbXBvbmVudCxcbiAgICBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VSZWFkQWxvdWRCdXR0b25Db21wb25lbnQsXG4gICAgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlUmVnZW5lcmF0ZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VUb29sYmFyQ29tcG9uZW50LFxuICAgIENvcGlsb3RDaGF0VG9vbENhbGxzVmlld0NvbXBvbmVudFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IFxuICAgICAgW2NsYXNzXT1cImNvbXB1dGVkQ2xhc3MoKVwiXG4gICAgICBbYXR0ci5kYXRhLW1lc3NhZ2UtaWRdPVwibWVzc2FnZT8uaWRcIj5cbiAgICAgIFxuICAgICAgPCEtLSBNYXJrZG93biBSZW5kZXJlciAtLT5cbiAgICAgIEBpZiAobWFya2Rvd25SZW5kZXJlclRlbXBsYXRlIHx8IG1hcmtkb3duUmVuZGVyZXJDb21wb25lbnQpIHtcbiAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgIFtzbG90XT1cIm1hcmtkb3duUmVuZGVyZXJUZW1wbGF0ZSB8fCBtYXJrZG93blJlbmRlcmVyQ29tcG9uZW50XCJcbiAgICAgICAgICBbY29udGV4dF09XCJtYXJrZG93blJlbmRlcmVyQ29udGV4dCgpXCJcbiAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VSZW5kZXJlckNvbXBvbmVudFwiXG4gICAgICAgICAgPlxuICAgICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8Y29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLXJlbmRlcmVyXG4gICAgICAgICAgW2NvbnRlbnRdPVwibWVzc2FnZT8uY29udGVudCB8fCAnJ1wiXG4gICAgICAgICAgW2lucHV0Q2xhc3NdPVwibWFya2Rvd25SZW5kZXJlckNsYXNzXCI+XG4gICAgICAgIDwvY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLXJlbmRlcmVyPlxuICAgICAgfVxuICAgICAgXG4gICAgICA8IS0tIFRvb2wgQ2FsbHMgVmlldyAtLT5cbiAgICAgIEBpZiAodG9vbENhbGxzVmlld1RlbXBsYXRlIHx8IHRvb2xDYWxsc1ZpZXdDb21wb25lbnQpIHtcbiAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgIFtzbG90XT1cInRvb2xDYWxsc1ZpZXdUZW1wbGF0ZSB8fCB0b29sQ2FsbHNWaWV3Q29tcG9uZW50XCJcbiAgICAgICAgICBbY29udGV4dF09XCJ0b29sQ2FsbHNWaWV3Q29udGV4dCgpXCJcbiAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJDb3BpbG90Q2hhdFRvb2xDYWxsc1ZpZXdDb21wb25lbnRcIj5cbiAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICB9IEBlbHNlIGlmIChtZXNzYWdlPy50b29sQ2FsbHMgJiYgbWVzc2FnZS50b29sQ2FsbHMubGVuZ3RoID4gMCkge1xuICAgICAgICA8Y29waWxvdC1jaGF0LXRvb2wtY2FsbHMtdmlld1xuICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxuICAgICAgICAgIFttZXNzYWdlc109XCJtZXNzYWdlc1wiXG4gICAgICAgICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgPC9jb3BpbG90LWNoYXQtdG9vbC1jYWxscy12aWV3PlxuICAgICAgfVxuICAgICAgXG4gICAgICA8IS0tIFRvb2xiYXI6IHNob3cgb25seSB3aGVuIHRoZXJlIGlzIGFzc2lzdGFudCB0ZXh0IGNvbnRlbnQgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG9vbGJhclZpc2libGUgJiYgaGFzTWVzc2FnZUNvbnRlbnQoKVwiPlxuICAgICAgICBAaWYgKHRvb2xiYXJUZW1wbGF0ZSB8fCB0b29sYmFyQ29tcG9uZW50KSB7XG4gICAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgICAgW3Nsb3RdPVwidG9vbGJhclRlbXBsYXRlIHx8IHRvb2xiYXJDb21wb25lbnRcIlxuICAgICAgICAgICAgW2NvbnRleHRdPVwidG9vbGJhckNvbnRleHQoKVwiXG4gICAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VUb29sYmFyQ29tcG9uZW50XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdiBjb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VUb29sYmFyIFtpbnB1dENsYXNzXT1cInRvb2xiYXJDbGFzc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCI+XG4gICAgICAgICAgICAgIDwhLS0gQ29weSBidXR0b24gLS0+XG4gICAgICAgICAgICAgIEBpZiAoY29weUJ1dHRvblRlbXBsYXRlIHx8IGNvcHlCdXR0b25Db21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICA8Y29waWxvdC1zbG90XG4gICAgICAgICAgICAgICAgICBbc2xvdF09XCJjb3B5QnV0dG9uVGVtcGxhdGUgfHwgY29weUJ1dHRvbkNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgICBbY29udGV4dF09XCJ7IGNvbnRlbnQ6IG1lc3NhZ2U/LmNvbnRlbnQgfHwgJycgfVwiXG4gICAgICAgICAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VDb3B5QnV0dG9uQ29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICAgIFtvdXRwdXRzXT1cImNvcHlCdXR0b25PdXRwdXRzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGNvcGlsb3QtY2hhdC1hc3Npc3RhbnQtbWVzc2FnZS1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwibWVzc2FnZT8uY29udGVudFwiXG4gICAgICAgICAgICAgICAgICBbaW5wdXRDbGFzc109XCJjb3B5QnV0dG9uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiaGFuZGxlQ29weSgpXCI+XG4gICAgICAgICAgICAgICAgPC9jb3BpbG90LWNoYXQtYXNzaXN0YW50LW1lc3NhZ2UtY29weS1idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwhLS0gVGh1bWJzIHVwIGJ1dHRvbiAtIHNob3cgaWYgY3VzdG9tIHNsb3QgcHJvdmlkZWQgT1IgaWYgaGFuZGxlciBhdmFpbGFibGUgYXQgdG9wIGxldmVsIC0tPlxuICAgICAgICAgICAgICBAaWYgKHRodW1ic1VwQnV0dG9uQ29tcG9uZW50IHx8IHRodW1ic1VwQnV0dG9uVGVtcGxhdGUgfHwgaGFuZGxlcnMuaGFzQXNzaXN0YW50VGh1bWJzVXBIYW5kbGVyKCkpIHtcbiAgICAgICAgICAgICAgICA8Y29waWxvdC1zbG90XG4gICAgICAgICAgICAgICAgICBbc2xvdF09XCJ0aHVtYnNVcEJ1dHRvblRlbXBsYXRlIHx8IHRodW1ic1VwQnV0dG9uQ29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cInt9XCJcbiAgICAgICAgICAgICAgICAgIFtkZWZhdWx0Q29tcG9uZW50XT1cImRlZmF1bHRUaHVtYnNVcEJ1dHRvbkNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgICBbb3V0cHV0c109XCJ0aHVtYnNVcEJ1dHRvbk91dHB1dHNcIj5cbiAgICAgICAgICAgICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPCEtLSBUaHVtYnMgZG93biBidXR0b24gLSBzaG93IGlmIGN1c3RvbSBzbG90IHByb3ZpZGVkIE9SIGlmIGhhbmRsZXIgYXZhaWxhYmxlIGF0IHRvcCBsZXZlbCAtLT5cbiAgICAgICAgICAgICAgQGlmICh0aHVtYnNEb3duQnV0dG9uQ29tcG9uZW50IHx8IHRodW1ic0Rvd25CdXR0b25UZW1wbGF0ZSB8fCBoYW5kbGVycy5oYXNBc3Npc3RhbnRUaHVtYnNEb3duSGFuZGxlcigpKSB7XG4gICAgICAgICAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgICAgICAgICAgW3Nsb3RdPVwidGh1bWJzRG93bkJ1dHRvblRlbXBsYXRlIHx8IHRodW1ic0Rvd25CdXR0b25Db21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRleHRdPVwie31cIlxuICAgICAgICAgICAgICAgICAgW2RlZmF1bHRDb21wb25lbnRdPVwiZGVmYXVsdFRodW1ic0Rvd25CdXR0b25Db21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgW291dHB1dHNdPVwidGh1bWJzRG93bkJ1dHRvbk91dHB1dHNcIj5cbiAgICAgICAgICAgICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPCEtLSBSZWFkIGFsb3VkIGJ1dHRvbiAtIG9ubHkgc2hvdyBpZiBjdXN0b20gc2xvdCBwcm92aWRlZCAtLT5cbiAgICAgICAgICAgICAgQGlmIChyZWFkQWxvdWRCdXR0b25Db21wb25lbnQgfHwgcmVhZEFsb3VkQnV0dG9uVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8Y29waWxvdC1zbG90XG4gICAgICAgICAgICAgICAgICBbc2xvdF09XCJyZWFkQWxvdWRCdXR0b25UZW1wbGF0ZSB8fCByZWFkQWxvdWRCdXR0b25Db21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRleHRdPVwie31cIlxuICAgICAgICAgICAgICAgICAgW291dHB1dHNdPVwicmVhZEFsb3VkQnV0dG9uT3V0cHV0c1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwhLS0gUmVnZW5lcmF0ZSBidXR0b24gLSBvbmx5IHNob3cgaWYgY3VzdG9tIHNsb3QgcHJvdmlkZWQgLS0+XG4gICAgICAgICAgICAgIEBpZiAocmVnZW5lcmF0ZUJ1dHRvbkNvbXBvbmVudCB8fCByZWdlbmVyYXRlQnV0dG9uVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8Y29waWxvdC1zbG90XG4gICAgICAgICAgICAgICAgICBbc2xvdF09XCJyZWdlbmVyYXRlQnV0dG9uVGVtcGxhdGUgfHwgcmVnZW5lcmF0ZUJ1dHRvbkNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgICBbY29udGV4dF09XCJ7fVwiXG4gICAgICAgICAgICAgICAgICBbb3V0cHV0c109XCJyZWdlbmVyYXRlQnV0dG9uT3V0cHV0c1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwhLS0gQWRkaXRpb25hbCB0b29sYmFyIGl0ZW1zIC0tPlxuICAgICAgICAgICAgICBAaWYgKGFkZGl0aW9uYWxUb29sYmFySXRlbXMpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWRkaXRpb25hbFRvb2xiYXJJdGVtc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAvKiBJbXBvcnQgS2FUZVggc3R5bGVzICovXG4gICAgQGltcG9ydCAna2F0ZXgvZGlzdC9rYXRleC5taW4uY3NzJztcblxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgLyogQXRvbSBPbmUgTGlnaHQgdGhlbWUgZm9yIGhpZ2hsaWdodC5qcyAqL1xuICAgIC5obGpzIHtcbiAgICAgIGNvbG9yOiByZ2IoNTYsIDU4LCA2Nik7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICB9XG5cbiAgICAuaGxqcy1jb21tZW50LFxuICAgIC5obGpzLXF1b3RlIHtcbiAgICAgIGNvbG9yOiAjYTBhMWE3O1xuICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIH1cblxuICAgIC5obGpzLWRvY3RhZyxcbiAgICAuaGxqcy1mb3JtdWxhLFxuICAgIC5obGpzLWtleXdvcmQge1xuICAgICAgY29sb3I6ICNhNjI2YTQ7XG4gICAgfVxuXG4gICAgLmhsanMtZGVsZXRpb24sXG4gICAgLmhsanMtbmFtZSxcbiAgICAuaGxqcy1zZWN0aW9uLFxuICAgIC5obGpzLXNlbGVjdG9yLXRhZyxcbiAgICAuaGxqcy1zdWJzdCB7XG4gICAgICBjb2xvcjogI2U0NTY0OTtcbiAgICB9XG5cbiAgICAuaGxqcy1saXRlcmFsIHtcbiAgICAgIGNvbG9yOiAjMDE4NGJiO1xuICAgIH1cblxuICAgIC5obGpzLWFkZGl0aW9uLFxuICAgIC5obGpzLWF0dHJpYnV0ZSxcbiAgICAuaGxqcy1tZXRhIC5obGpzLXN0cmluZyxcbiAgICAuaGxqcy1yZWdleHAsXG4gICAgLmhsanMtc3RyaW5nIHtcbiAgICAgIGNvbG9yOiAjNTBhMTRmO1xuICAgIH1cblxuICAgIC5obGpzLWF0dHIsXG4gICAgLmhsanMtbnVtYmVyLFxuICAgIC5obGpzLXNlbGVjdG9yLWF0dHIsXG4gICAgLmhsanMtc2VsZWN0b3ItY2xhc3MsXG4gICAgLmhsanMtc2VsZWN0b3ItcHNldWRvLFxuICAgIC5obGpzLXRlbXBsYXRlLXZhcmlhYmxlLFxuICAgIC5obGpzLXR5cGUsXG4gICAgLmhsanMtdmFyaWFibGUge1xuICAgICAgY29sb3I6ICM5ODY4MDE7XG4gICAgfVxuXG4gICAgLmhsanMtcGFyYW1zIHtcbiAgICAgIGNvbG9yOiByZ2IoNTYsIDU4LCA2Nik7XG4gICAgfVxuXG4gICAgLmhsanMtYnVsbGV0LFxuICAgIC5obGpzLWxpbmssXG4gICAgLmhsanMtbWV0YSxcbiAgICAuaGxqcy1zZWxlY3Rvci1pZCxcbiAgICAuaGxqcy1zeW1ib2wsXG4gICAgLmhsanMtdGl0bGUge1xuICAgICAgY29sb3I6ICM0MDc4ZjI7XG4gICAgfVxuXG4gICAgLmhsanMtYnVpbHRfaW4sXG4gICAgLmhsanMtY2xhc3MgLmhsanMtdGl0bGUsXG4gICAgLmhsanMtdGl0bGUuY2xhc3NfIHtcbiAgICAgIGNvbG9yOiAjYzE4NDAxO1xuICAgIH1cblxuICAgIC5obGpzLWVtcGhhc2lzIHtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9XG5cbiAgICAuaGxqcy1zdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICB9XG5cbiAgICAuaGxqcy1saW5rIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIH1cblxuICAgIC8qIEF0b20gT25lIERhcmsgdGhlbWUgZm9yIGhpZ2hsaWdodC5qcyAqL1xuICAgIC5kYXJrIC5obGpzIHtcbiAgICAgIGNvbG9yOiAjYWJiMmJmO1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgLmRhcmsgLmhsanMtY29tbWVudCxcbiAgICAuZGFyayAuaGxqcy1xdW90ZSB7XG4gICAgICBjb2xvcjogIzVjNjM3MDtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9XG5cbiAgICAuZGFyayAuaGxqcy1kb2N0YWcsXG4gICAgLmRhcmsgLmhsanMtZm9ybXVsYSxcbiAgICAuZGFyayAuaGxqcy1rZXl3b3JkIHtcbiAgICAgIGNvbG9yOiAjYzY3OGRkO1xuICAgIH1cblxuICAgIC5kYXJrIC5obGpzLWRlbGV0aW9uLFxuICAgIC5kYXJrIC5obGpzLW5hbWUsXG4gICAgLmRhcmsgLmhsanMtc2VjdGlvbixcbiAgICAuZGFyayAuaGxqcy1zZWxlY3Rvci10YWcsXG4gICAgLmRhcmsgLmhsanMtc3Vic3Qge1xuICAgICAgY29sb3I6ICNlMDZjNzU7XG4gICAgfVxuXG4gICAgLmRhcmsgLmhsanMtbGl0ZXJhbCB7XG4gICAgICBjb2xvcjogIzU2YjZjMjtcbiAgICB9XG5cbiAgICAuZGFyayAuaGxqcy1hZGRpdGlvbixcbiAgICAuZGFyayAuaGxqcy1hdHRyaWJ1dGUsXG4gICAgLmRhcmsgLmhsanMtbWV0YSAuaGxqcy1zdHJpbmcsXG4gICAgLmRhcmsgLmhsanMtcmVnZXhwLFxuICAgIC5kYXJrIC5obGpzLXN0cmluZyB7XG4gICAgICBjb2xvcjogIzk4YzM3OTtcbiAgICB9XG5cbiAgICAuZGFyayAuaGxqcy1hdHRyLFxuICAgIC5kYXJrIC5obGpzLW51bWJlcixcbiAgICAuZGFyayAuaGxqcy1zZWxlY3Rvci1hdHRyLFxuICAgIC5kYXJrIC5obGpzLXNlbGVjdG9yLWNsYXNzLFxuICAgIC5kYXJrIC5obGpzLXNlbGVjdG9yLXBzZXVkbyxcbiAgICAuZGFyayAuaGxqcy10ZW1wbGF0ZS12YXJpYWJsZSxcbiAgICAuZGFyayAuaGxqcy10eXBlLFxuICAgIC5kYXJrIC5obGpzLXZhcmlhYmxlIHtcbiAgICAgIGNvbG9yOiAjZDE5YTY2O1xuICAgIH1cblxuICAgIC5kYXJrIC5obGpzLWJ1bGxldCxcbiAgICAuZGFyayAuaGxqcy1saW5rLFxuICAgIC5kYXJrIC5obGpzLW1ldGEsXG4gICAgLmRhcmsgLmhsanMtc2VsZWN0b3ItaWQsXG4gICAgLmRhcmsgLmhsanMtc3ltYm9sLFxuICAgIC5kYXJrIC5obGpzLXRpdGxlIHtcbiAgICAgIGNvbG9yOiAjNjFhZWVlO1xuICAgIH1cblxuICAgIC5kYXJrIC5obGpzLWJ1aWx0X2luLFxuICAgIC5kYXJrIC5obGpzLWNsYXNzIC5obGpzLXRpdGxlLFxuICAgIC5kYXJrIC5obGpzLXRpdGxlLmNsYXNzXyB7XG4gICAgICBjb2xvcjogI2U2YzA3YjtcbiAgICB9XG5cbiAgICAuZGFyayAuaGxqcy1wYXJhbXMge1xuICAgICAgY29sb3I6ICNhYmIyYmY7IC8qIHNhbWUgYXMgcmVndWxhciB0ZXh0ICovXG4gICAgfVxuXG4gICAgLmRhcmsgLmhsanMtZW1waGFzaXMge1xuICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIH1cblxuICAgIC5kYXJrIC5obGpzLXN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgIH1cblxuICAgIC5kYXJrIC5obGpzLWxpbmsge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VDb21wb25lbnQge1xuICAvLyBDYXB0dXJlIHRlbXBsYXRlcyBmcm9tIGNvbnRlbnQgcHJvamVjdGlvblxuICBAQ29udGVudENoaWxkKCdtYXJrZG93blJlbmRlcmVyJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBtYXJrZG93blJlbmRlcmVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxBc3Npc3RhbnRNZXNzYWdlTWFya2Rvd25SZW5kZXJlckNvbnRleHQ+O1xuICBAQ29udGVudENoaWxkKCd0b29sYmFyJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSB0b29sYmFyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxBc3Npc3RhbnRNZXNzYWdlVG9vbGJhckNvbnRleHQ+O1xuICBAQ29udGVudENoaWxkKCdjb3B5QnV0dG9uJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBjb3B5QnV0dG9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxBc3Npc3RhbnRNZXNzYWdlQ29weUJ1dHRvbkNvbnRleHQ+O1xuICBAQ29udGVudENoaWxkKCd0aHVtYnNVcEJ1dHRvbicsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgdGh1bWJzVXBCdXR0b25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFRodW1ic1VwQnV0dG9uQ29udGV4dD47XG4gIEBDb250ZW50Q2hpbGQoJ3RodW1ic0Rvd25CdXR0b24nLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHRodW1ic0Rvd25CdXR0b25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFRodW1ic0Rvd25CdXR0b25Db250ZXh0PjtcbiAgQENvbnRlbnRDaGlsZCgncmVhZEFsb3VkQnV0dG9uJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSByZWFkQWxvdWRCdXR0b25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFJlYWRBbG91ZEJ1dHRvbkNvbnRleHQ+O1xuICBAQ29udGVudENoaWxkKCdyZWdlbmVyYXRlQnV0dG9uJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSByZWdlbmVyYXRlQnV0dG9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxSZWdlbmVyYXRlQnV0dG9uQ29udGV4dD47XG4gIEBDb250ZW50Q2hpbGQoJ3Rvb2xDYWxsc1ZpZXcnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHRvb2xDYWxsc1ZpZXdUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIFxuICAvLyBDbGFzcyBpbnB1dHMgZm9yIHN0eWxpbmcgZGVmYXVsdCBjb21wb25lbnRzXG4gIEBJbnB1dCgpIG1hcmtkb3duUmVuZGVyZXJDbGFzcz86IHN0cmluZztcbiAgQElucHV0KCkgdG9vbGJhckNsYXNzPzogc3RyaW5nO1xuICBASW5wdXQoKSBjb3B5QnV0dG9uQ2xhc3M/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRodW1ic1VwQnV0dG9uQ2xhc3M/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRodW1ic0Rvd25CdXR0b25DbGFzcz86IHN0cmluZztcbiAgQElucHV0KCkgcmVhZEFsb3VkQnV0dG9uQ2xhc3M/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlZ2VuZXJhdGVCdXR0b25DbGFzcz86IHN0cmluZztcbiAgQElucHV0KCkgdG9vbENhbGxzVmlld0NsYXNzPzogc3RyaW5nO1xuICBcbiAgLy8gQ29tcG9uZW50IGlucHV0cyBmb3Igb3ZlcnJpZGVzXG4gIEBJbnB1dCgpIG1hcmtkb3duUmVuZGVyZXJDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gIEBJbnB1dCgpIHRvb2xiYXJDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gIEBJbnB1dCgpIGNvcHlCdXR0b25Db21wb25lbnQ/OiBUeXBlPGFueT47XG4gIEBJbnB1dCgpIHRodW1ic1VwQnV0dG9uQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBASW5wdXQoKSB0aHVtYnNEb3duQnV0dG9uQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBASW5wdXQoKSByZWFkQWxvdWRCdXR0b25Db21wb25lbnQ/OiBUeXBlPGFueT47XG4gIEBJbnB1dCgpIHJlZ2VuZXJhdGVCdXR0b25Db21wb25lbnQ/OiBUeXBlPGFueT47XG4gIEBJbnB1dCgpIHRvb2xDYWxsc1ZpZXdDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gIFxuICAvLyBSZWd1bGFyIGlucHV0c1xuICBASW5wdXQoKSBtZXNzYWdlITogQXNzaXN0YW50TWVzc2FnZTtcbiAgQElucHV0KCkgbWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuICBASW5wdXQoKSBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgYWRkaXRpb25hbFRvb2xiYXJJdGVtcz86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIHRvb2xiYXJWaXNpYmxlID0gdHJ1ZTtcbiAgQElucHV0KCkgc2V0IGlucHV0Q2xhc3ModmFsOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmN1c3RvbUNsYXNzLnNldCh2YWwpO1xuICB9XG4gIFxuICAvLyBESSBzZXJ2aWNlIGV4cG9zZXMgaGFuZGxlciBhdmFpbGFiaWxpdHkgc2NvcGVkIHRvIENvcGlsb3RDaGF0Vmlld1xuICAvLyBNYWtlIGl0IG9wdGlvbmFsIHdpdGggYSBkZWZhdWx0IGZhbGxiYWNrIGZvciB0ZXN0aW5nXG4gIGhhbmRsZXJzOiBDb3BpbG90Q2hhdFZpZXdIYW5kbGVyc1NlcnZpY2U7XG4gIFxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KENvcGlsb3RDaGF0Vmlld0hhbmRsZXJzU2VydmljZSkgaGFuZGxlcnM/OiBDb3BpbG90Q2hhdFZpZXdIYW5kbGVyc1NlcnZpY2UgfCBudWxsKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IGhhbmRsZXJzIHx8IG5ldyBDb3BpbG90Q2hhdFZpZXdIYW5kbGVyc1NlcnZpY2UoKTtcbiAgfVxuICBcbiAgLy8gT3V0cHV0IGV2ZW50c1xuICBAT3V0cHV0KCkgdGh1bWJzVXAgPSBuZXcgRXZlbnRFbWl0dGVyPENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZU9uVGh1bWJzVXBQcm9wcz4oKTtcbiAgQE91dHB1dCgpIHRodW1ic0Rvd24gPSBuZXcgRXZlbnRFbWl0dGVyPENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZU9uVGh1bWJzRG93blByb3BzPigpO1xuICBAT3V0cHV0KCkgcmVhZEFsb3VkID0gbmV3IEV2ZW50RW1pdHRlcjxDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VPblJlYWRBbG91ZFByb3BzPigpO1xuICBAT3V0cHV0KCkgcmVnZW5lcmF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlT25SZWdlbmVyYXRlUHJvcHM+KCk7XG4gIFxuICAvLyBTaWduYWxzXG4gIGN1c3RvbUNsYXNzID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgXG4gIC8vIENvbXB1dGVkIHZhbHVlc1xuICBjb21wdXRlZENsYXNzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBjbihcbiAgICAgIFwicHJvc2UgbWF4LXctZnVsbCBicmVhay13b3JkcyBkYXJrOnByb3NlLWludmVydFwiLFxuICAgICAgdGhpcy5jdXN0b21DbGFzcygpXG4gICAgKTtcbiAgfSk7XG4gIFxuICAvLyBEZWZhdWx0IGNvbXBvbmVudHNcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRUaHVtYnNVcEJ1dHRvbkNvbXBvbmVudCA9IENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZVRodW1ic1VwQnV0dG9uQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdFRodW1ic0Rvd25CdXR0b25Db21wb25lbnQgPSBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VUaHVtYnNEb3duQnV0dG9uQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlUmVuZGVyZXJDb21wb25lbnQgPSBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VSZW5kZXJlckNvbXBvbmVudDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZVRvb2xiYXJDb21wb25lbnQgPSBDb3BpbG90Q2hhdEFzc2lzdGFudE1lc3NhZ2VUb29sYmFyQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgQ29waWxvdENoYXRBc3Npc3RhbnRNZXNzYWdlQ29weUJ1dHRvbkNvbXBvbmVudCA9IENvcGlsb3RDaGF0QXNzaXN0YW50TWVzc2FnZUNvcHlCdXR0b25Db21wb25lbnQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBDb3BpbG90Q2hhdFRvb2xDYWxsc1ZpZXdDb21wb25lbnQgPSBDb3BpbG90Q2hhdFRvb2xDYWxsc1ZpZXdDb21wb25lbnQ7XG4gIFxuICAvLyBDb250ZXh0IGZvciBzbG90cyAocmVhY3RpdmUgdmlhIHNpZ25hbHMpXG4gIG1hcmtkb3duUmVuZGVyZXJDb250ZXh0ID0gY29tcHV0ZWQ8QXNzaXN0YW50TWVzc2FnZU1hcmtkb3duUmVuZGVyZXJDb250ZXh0PigoKSA9PiAoe1xuICAgIGNvbnRlbnQ6IHRoaXMubWVzc2FnZT8uY29udGVudCB8fCAnJ1xuICB9KSk7XG4gIFxuICAvLyBPdXRwdXQgbWFwcyBmb3Igc2xvdHNcbiAgY29weUJ1dHRvbk91dHB1dHMgPSB7IGNsaWNrZWQ6ICgpID0+IHRoaXMuaGFuZGxlQ29weSgpIH07XG4gIHRodW1ic1VwQnV0dG9uT3V0cHV0cyA9IHsgY2xpY2tlZDogKCkgPT4gdGhpcy5oYW5kbGVUaHVtYnNVcCgpIH07XG4gIHRodW1ic0Rvd25CdXR0b25PdXRwdXRzID0geyBjbGlja2VkOiAoKSA9PiB0aGlzLmhhbmRsZVRodW1ic0Rvd24oKSB9O1xuICByZWFkQWxvdWRCdXR0b25PdXRwdXRzID0geyBjbGlja2VkOiAoKSA9PiB0aGlzLmhhbmRsZVJlYWRBbG91ZCgpIH07XG4gIHJlZ2VuZXJhdGVCdXR0b25PdXRwdXRzID0geyBjbGlja2VkOiAoKSA9PiB0aGlzLmhhbmRsZVJlZ2VuZXJhdGUoKSB9O1xuICBcbiAgdG9vbGJhckNvbnRleHQgPSBjb21wdXRlZDxBc3Npc3RhbnRNZXNzYWdlVG9vbGJhckNvbnRleHQ+KCgpID0+ICh7XG4gICAgY2hpbGRyZW46IG51bGwgLy8gV2lsbCBiZSBwb3B1bGF0ZWQgYnkgdGhlIHRvb2xiYXIgY29udGVudFxuICB9KSk7XG5cbiAgLy8gUmV0dXJuIHRydWUgaWYgYXNzaXN0YW50IG1lc3NhZ2UgaGFzIG5vbi1lbXB0eSB0ZXh0IGNvbnRlbnRcbiAgaGFzTWVzc2FnZUNvbnRlbnQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmF3ID0gKHRoaXMubWVzc2FnZT8uY29udGVudCA/PyAnJykgYXMgYW55O1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YgcmF3ID09PSAnc3RyaW5nJyA/IHJhdyA6IFN0cmluZyhyYXcgPz8gJycpO1xuICAgIHJldHVybiBjb250ZW50LnRyaW0oKS5sZW5ndGggPiAwO1xuICB9XG4gIFxuICB0b29sQ2FsbHNWaWV3Q29udGV4dCA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgIG1lc3NhZ2VzOiB0aGlzLm1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZzogdGhpcy5pc0xvYWRpbmdcbiAgfSkpO1xuICBcbiAgaGFuZGxlQ29weSgpOiB2b2lkIHtcbiAgICAvLyBDb3B5IGlzIGhhbmRsZWQgYnkgdGhlIGJ1dHRvbiBjb21wb25lbnQgaXRzZWxmXG4gICAgLy8gVGhpcyBpcyBqdXN0IGZvciBhbnkgYWRkaXRpb25hbCBsb2dpYyBpZiBuZWVkZWRcbiAgfVxuICBcbiAgaGFuZGxlVGh1bWJzVXAoKTogdm9pZCB7XG4gICAgdGhpcy50aHVtYnNVcC5lbWl0KHsgbWVzc2FnZTogdGhpcy5tZXNzYWdlIH0pO1xuICB9XG4gIFxuICBoYW5kbGVUaHVtYnNEb3duKCk6IHZvaWQge1xuICAgIHRoaXMudGh1bWJzRG93bi5lbWl0KHsgbWVzc2FnZTogdGhpcy5tZXNzYWdlIH0pO1xuICB9XG4gIFxuICBoYW5kbGVSZWFkQWxvdWQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWFkQWxvdWQuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubWVzc2FnZSB9KTtcbiAgfVxuICBcbiAgaGFuZGxlUmVnZW5lcmF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2VuZXJhdGUuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubWVzc2FnZSB9KTtcbiAgfVxufVxuIl19
|
|
@@ -131,13 +131,19 @@ export class CopilotChatToolCallsViewComponent {
|
|
|
131
131
|
// Create the component
|
|
132
132
|
const componentRef = this.container.createComponent(componentClass);
|
|
133
133
|
this.componentRefs.set(toolCallId, componentRef);
|
|
134
|
-
//
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
134
|
+
// Determine declared inputs to avoid Angular NG0303 console errors
|
|
135
|
+
const cmpDef = componentClass.ɵcmp;
|
|
136
|
+
const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
|
|
137
|
+
// Prefer a single 'props' input if declared
|
|
138
|
+
if (declaredInputs.has('props')) {
|
|
139
|
+
componentRef.setInput('props', props);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// Otherwise, set only inputs that the component actually declares
|
|
143
|
+
for (const [key, value] of Object.entries(props)) {
|
|
144
|
+
if (declaredInputs.has(key)) {
|
|
145
|
+
componentRef.setInput(key, value);
|
|
146
|
+
}
|
|
141
147
|
}
|
|
142
148
|
}
|
|
143
149
|
// Trigger change detection
|
|
@@ -213,4 +219,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
213
219
|
type: ViewChild,
|
|
214
220
|
args: ["dynamicContainer", { read: ViewContainerRef }]
|
|
215
221
|
}] } });
|
|
216
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXRvb2wtY2FsbHMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC10b29sLWNhbGxzLXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLGdCQUFnQixFQUVoQixNQUFNLEVBQ04sU0FBUyxFQUlULFdBQVcsRUFFWCx1QkFBdUIsRUFDdkIsTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU8vQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQU0xRDs7OztHQUlHO0FBc0JILE1BQU0sT0FBTyxpQ0FBaUM7SUFHakIsT0FBTyxDQUFvQjtJQUM3QyxRQUFRLEdBQWMsRUFBRSxDQUFDO0lBQ3pCLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFHbkIsU0FBUyxDQUFvQjtJQUU3QixVQUFVLEdBQTZCLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtRQUN2RSxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUNLLGFBQWEsR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMxRCxhQUFhLEdBR2pCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFZCw2QkFBNkI7SUFDckIsYUFBYSxHQUFHLE1BQU0sQ0FBMEIsSUFBSSxDQUFDLENBQUM7SUFDdEQsY0FBYyxHQUFHLE1BQU0sQ0FBWSxFQUFFLENBQUMsQ0FBQztJQUN2QyxlQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhDLGVB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Qy9DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7R0FjVDtpQkFDRjs4QkFJNEIsT0FBTztzQkFBakMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFHRSxTQUFTO3NCQURoQixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgQ29tcG9uZW50UmVmLFxuICBpbmplY3QsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB0eXBlIHtcbiAgQXNzaXN0YW50TWVzc2FnZSxcbiAgTWVzc2FnZSxcbiAgVG9vbENhbGwsXG4gIFRvb2xNZXNzYWdlLFxufSBmcm9tIFwiQGFnLXVpL2NvcmVcIjtcbmltcG9ydCB7IFRvb2xDYWxsU3RhdHVzIH0gZnJvbSBcIkBjb3BpbG90a2l0bmV4dC9jb3JlXCI7XG5pbXBvcnQgeyBDb3BpbG90S2l0U2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2NvcGlsb3RraXQuc2VydmljZVwiO1xuaW1wb3J0IHsgcGFydGlhbEpTT05QYXJzZSB9IGZyb20gXCJAY29waWxvdGtpdG5leHQvc2hhcmVkXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFRvb2xDYWxsUHJvcHMsXG4gIFRvb2xDYWxsUmVuZGVyLFxufSBmcm9tIFwiLi4vLi4vY29yZS9jb3BpbG90a2l0LnR5cGVzXCI7XG5cbi8qKlxuICogQ29tcG9uZW50IGZvciByZW5kZXJpbmcgYWxsIHRvb2wgY2FsbHMgZm9yIGFuIGFzc2lzdGFudCBtZXNzYWdlLlxuICogVGhpcyBjb21wb25lbnQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgbWVzc2FnZSdzIHRvb2wgY2FsbHMgYW5kIHJlbmRlcnMgZWFjaCBvbmVcbiAqIHVzaW5nIHRoZSByZWdpc3RlcmVkIHJlbmRlciBmdW5jdGlvbnMgaW4gQ29waWxvdEtpdFNlcnZpY2UuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJjb3BpbG90LWNoYXQtdG9vbC1jYWxscy12aWV3XCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICBAZm9yICh0b29sQ2FsbCBvZiBtZXNzYWdlPy50b29sQ2FsbHMgPz8gW107IHRyYWNrIHRvb2xDYWxsLmlkKSB7XG4gICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICNkeW5hbWljQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VGVtcGxhdGVGb3JUb29sQ2FsbCh0b29sQ2FsbCkgYXMgdGVtcGxhdGVEYXRhXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgdGVtcGxhdGVEYXRhLnRlbXBsYXRlO1xuICAgICAgICAgICAgICBjb250ZXh0OiB0ZW1wbGF0ZURhdGEuY29udGV4dFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90Q2hhdFRvb2xDYWxsc1ZpZXdDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxue1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBtZXNzYWdlITogQXNzaXN0YW50TWVzc2FnZTtcbiAgQElucHV0KCkgbWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuICBASW5wdXQoKSBpc0xvYWRpbmcgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKFwiZHluYW1pY0NvbnRhaW5lclwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgcHJpdmF0ZSBjb250YWluZXI/OiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIHByaXZhdGUgY29waWxvdGtpdDogQ29waWxvdEtpdFNlcnZpY2UgfCBudWxsID0gaW5qZWN0KENvcGlsb3RLaXRTZXJ2aWNlLCB7XG4gICAgb3B0aW9uYWw6IHRydWUsXG4gIH0pO1xuICBwcml2YXRlIGNvbXBvbmVudFJlZnM6IE1hcDxzdHJpbmcsIENvbXBvbmVudFJlZjxhbnk+PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZUNhY2hlOiBNYXA8XG4gICAgc3RyaW5nLFxuICAgIHsgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47IGNvbnRleHQ6IGFueSB9XG4gID4gPSBuZXcgTWFwKCk7XG5cbiAgLy8gU2lnbmFscyBmb3IgcmVhY3RpdmUgc3RhdGVcbiAgcHJpdmF0ZSBtZXNzYWdlU2lnbmFsID0gc2lnbmFsPEFzc2lzdGFudE1lc3NhZ2UgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSBtZXNzYWdlc1NpZ25hbCA9IHNpZ25hbDxNZXNzYWdlW10+KFtdKTtcbiAgcHJpdmF0ZSBpc0xvYWRpbmdTaWduYWwgPSBzaWduYWwoZmFsc2UpO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlckFsbFRvb2xDYWxscygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzW1wibWVzc2FnZVwiXSkge1xuICAgICAgdGhpcy5tZXNzYWdlU2lnbmFsLnNldCh0aGlzLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcIm1lc3NhZ2VzXCJdKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VzU2lnbmFsLnNldCh0aGlzLm1lc3NhZ2VzKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbXCJpc0xvYWRpbmdcIl0pIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nU2lnbmFsLnNldCh0aGlzLmlzTG9hZGluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJBbGxUb29sQ2FsbHMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIENsZWFuIHVwIGFsbCBjb21wb25lbnQgcmVmc1xuICAgIHRoaXMuY29tcG9uZW50UmVmcy5mb3JFYWNoKChyZWYpID0+IHJlZi5kZXN0cm95KCkpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmcy5jbGVhcigpO1xuICAgIHRoaXMudGVtcGxhdGVDYWNoZS5jbGVhcigpO1xuICB9XG5cbiAgZ2V0VGVtcGxhdGVGb3JUb29sQ2FsbChcbiAgICB0b29sQ2FsbDogVG9vbENhbGxcbiAgKTogeyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjsgY29udGV4dDogYW55IH0gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZUNhY2hlLmdldCh0b29sQ2FsbC5pZCkgfHwgbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQWxsVG9vbENhbGxzKCk6IHZvaWQge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VTaWduYWwoKTtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgIW1lc3NhZ2UudG9vbENhbGxzIHx8IG1lc3NhZ2UudG9vbENhbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENsZWFyIGV4aXN0aW5nIHJlbmRlcnNcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMuZm9yRWFjaCgocmVmKSA9PiByZWYuZGVzdHJveSgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMuY2xlYXIoKTtcbiAgICB0aGlzLnRlbXBsYXRlQ2FjaGUuY2xlYXIoKTtcblxuICAgIGlmICghdGhpcy5jb3BpbG90a2l0IHx8ICF0aGlzLmNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlc1NpZ25hbCgpO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IHRoaXMuaXNMb2FkaW5nU2lnbmFsKCk7XG5cbiAgICAvLyBSZW5kZXIgZWFjaCB0b29sIGNhbGxcbiAgICBtZXNzYWdlLnRvb2xDYWxscy5mb3JFYWNoKCh0b29sQ2FsbCkgPT4ge1xuICAgICAgY29uc3QgdG9vbE1lc3NhZ2UgPSBtZXNzYWdlcy5maW5kKFxuICAgICAgICAobSkgPT5cbiAgICAgICAgICBtLnJvbGUgPT09IFwidG9vbFwiICYmIChtIGFzIFRvb2xNZXNzYWdlKS50b29sQ2FsbElkID09PSB0b29sQ2FsbC5pZFxuICAgICAgKSBhcyBUb29sTWVzc2FnZSB8IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy5yZW5kZXJTaW5nbGVUb29sQ2FsbCh0b29sQ2FsbCwgdG9vbE1lc3NhZ2UsIGlzTG9hZGluZyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclNpbmdsZVRvb2xDYWxsKFxuICAgIHRvb2xDYWxsOiBUb29sQ2FsbCxcbiAgICB0b29sTWVzc2FnZTogVG9vbE1lc3NhZ2UgfCB1bmRlZmluZWQsXG4gICAgaXNMb2FkaW5nOiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb3BpbG90a2l0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IGN1cnJlbnQgcmVuZGVyIHRvb2wgY2FsbHNcbiAgICBjb25zdCBjdXJyZW50UmVuZGVyVG9vbENhbGxzID0gdGhpcy5jb3BpbG90a2l0LmN1cnJlbnRSZW5kZXJUb29sQ2FsbHMoKTtcblxuICAgIC8vIEZpbmQgdGhlIHJlbmRlciBjb25maWcgZm9yIHRoaXMgdG9vbCBjYWxsIGJ5IG5hbWVcbiAgICAvLyBBbHNvIGNoZWNrIGZvciB3aWxkY2FyZCAoKikgcmVuZGVycyBpZiBubyBleGFjdCBtYXRjaFxuICAgIGNvbnN0IHJlbmRlckNvbmZpZyA9XG4gICAgICBjdXJyZW50UmVuZGVyVG9vbENhbGxzLmZpbmQoXG4gICAgICAgIChyYzogVG9vbENhbGxSZW5kZXIpID0+IHJjLm5hbWUgPT09IHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWVcbiAgICAgICkgfHwgY3VycmVudFJlbmRlclRvb2xDYWxscy5maW5kKChyYzogVG9vbENhbGxSZW5kZXIpID0+IHJjLm5hbWUgPT09IFwiKlwiKTtcblxuICAgIGlmICghcmVuZGVyQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdGhlIGFyZ3VtZW50cyBpZiB0aGV5J3JlIGEgc3RyaW5nXG4gICAgY29uc3QgYXJncyA9IHBhcnRpYWxKU09OUGFyc2UodG9vbENhbGwuZnVuY3Rpb24uYXJndW1lbnRzKTtcblxuICAgIC8vIERldGVybWluZSBzdGF0dXNcbiAgICBsZXQgc3RhdHVzOiBUb29sQ2FsbFN0YXR1cztcbiAgICBpZiAodG9vbE1lc3NhZ2UpIHtcbiAgICAgIHN0YXR1cyA9IFRvb2xDYWxsU3RhdHVzLkNvbXBsZXRlO1xuICAgIH0gZWxzZSBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICBzdGF0dXMgPSBUb29sQ2FsbFN0YXR1cy5JblByb2dyZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0dXMgPSBUb29sQ2FsbFN0YXR1cy5Db21wbGV0ZTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgcHJvcHMgYmFzZWQgb24gc3RhdHVzIC0gdXNlIGRpc2NyaW1pbmF0ZWQgdW5pb24gcHJvcGVybHlcbiAgICBsZXQgcHJvcHM6IFRvb2xDYWxsUHJvcHM7XG4gICAgaWYgKHN0YXR1cyA9PT0gVG9vbENhbGxTdGF0dXMuSW5Qcm9ncmVzcykge1xuICAgICAgcHJvcHMgPSB7XG4gICAgICAgIG5hbWU6IHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgICBhcmdzOiBhcmdzLCAvLyBQYXJ0aWFsIGFyZ3MgZm9yIEluUHJvZ3Jlc3NcbiAgICAgICAgc3RhdHVzOiBUb29sQ2FsbFN0YXR1cy5JblByb2dyZXNzLFxuICAgICAgICByZXN1bHQ6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbXBsZXRlIHN0YXR1c1xuICAgICAgcHJvcHMgPSB7XG4gICAgICAgIG5hbWU6IHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgICBhcmdzOiBhcmdzLCAvLyBGdWxsIGFyZ3MgZm9yIENvbXBsZXRlXG4gICAgICAgIHN0YXR1czogVG9vbENhbGxTdGF0dXMuQ29tcGxldGUsXG4gICAgICAgIHJlc3VsdDogdG9vbE1lc3NhZ2U/LmNvbnRlbnQgfHwgXCJcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgcmVuZGVyIGlzIGEgQ29tcG9uZW50IGNsYXNzIG9yIFRlbXBsYXRlUmVmXG4gICAgaWYgKHRoaXMuaXNDb21wb25lbnRDbGFzcyhyZW5kZXJDb25maWcucmVuZGVyKSkge1xuICAgICAgLy8gQ3JlYXRlIGNvbXBvbmVudCBkeW5hbWljYWxseVxuICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnQodG9vbENhbGwuaWQsIHJlbmRlckNvbmZpZy5yZW5kZXIsIHByb3BzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNUZW1wbGF0ZVJlZihyZW5kZXJDb25maWcucmVuZGVyKSkge1xuICAgICAgLy8gVXNlIHRlbXBsYXRlXG4gICAgICB0aGlzLnJlbmRlclRlbXBsYXRlKHRvb2xDYWxsLmlkLCByZW5kZXJDb25maWcucmVuZGVyLCBwcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDb21wb25lbnQoXG4gICAgdG9vbENhbGxJZDogc3RyaW5nLFxuICAgIGNvbXBvbmVudENsYXNzOiBUeXBlPGFueT4sXG4gICAgcHJvcHM6IFRvb2xDYWxsUHJvcHNcbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgY29tcG9uZW50XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudENsYXNzKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMuc2V0KHRvb2xDYWxsSWQsIGNvbXBvbmVudFJlZik7XG5cbiAgICAvLyBTZXQgaW5wdXRzIG9uIHRoZSBjb21wb25lbnRcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wcykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSW5wdXQgbWlnaHQgbm90IGV4aXN0IG9uIHRoZSBjb21wb25lbnQsIHdoaWNoIGlzIGZpbmVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cbiAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJUZW1wbGF0ZShcbiAgICB0b29sQ2FsbElkOiBzdHJpbmcsXG4gICAgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHJvcHM6IFRvb2xDYWxsUHJvcHNcbiAgKTogdm9pZCB7XG4gICAgdGhpcy50ZW1wbGF0ZUNhY2hlLnNldCh0b29sQ2FsbElkLCB7XG4gICAgICB0ZW1wbGF0ZSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgJGltcGxpY2l0OiBwcm9wcyxcbiAgICAgICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgICBhcmdzOiBwcm9wcy5hcmdzLFxuICAgICAgICBzdGF0dXM6IHByb3BzLnN0YXR1cyxcbiAgICAgICAgcmVzdWx0OiBwcm9wcy5yZXN1bHQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbXBvbmVudENsYXNzKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBUeXBlPGFueT4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJiB2YWx1ZS5wcm90b3R5cGU7XG4gIH1cblxuICBwcml2YXRlIGlzVGVtcGxhdGVSZWYodmFsdWU6IGFueSk6IHZhbHVlIGlzIFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICB9XG59XG4iXX0=
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXRvb2wtY2FsbHMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC10b29sLWNhbGxzLXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLGdCQUFnQixFQUVoQixNQUFNLEVBQ04sU0FBUyxFQUlULFdBQVcsRUFFWCx1QkFBdUIsRUFDdkIsTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU8vQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQU0xRDs7OztHQUlHO0FBc0JILE1BQU0sT0FBTyxpQ0FBaUM7SUFHakIsT0FBTyxDQUFvQjtJQUM3QyxRQUFRLEdBQWMsRUFBRSxDQUFDO0lBQ3pCLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFHbkIsU0FBUyxDQUFvQjtJQUU3QixVQUFVLEdBQTZCLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtRQUN2RSxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUNLLGFBQWEsR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMxRCxhQUFhLEdBR2pCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFZCw2QkFBNkI7SUFDckIsYUFBYSxHQUFHLE1BQU0sQ0FBMEIsSUFBSSxDQUFDLENBQUM7SUFDdEQsY0FBYyxHQUFHLE1BQU0sQ0FBWSxFQUFFLENBQUMsQ0FBQztJQUN2QyxlQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhDLGVB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TyxhQUFhLENBQUMsS0FBVTtRQUM5QixPQUFPLEtBQUssWUFBWSxXQUFXLENBQUM7SUFDdEMsQ0FBQzt3R0FsTlUsaUNBQWlDOzRGQUFqQyxpQ0FBaUMsZ1FBT0wsZ0JBQWdCLGtEQXZCN0M7Ozs7Ozs7Ozs7Ozs7O0dBY1QsMkRBaEJTLFlBQVk7OzRGQWtCWCxpQ0FBaUM7a0JBckI3QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw4QkFBOEI7b0JBQ3hDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7O0dBY1Q7aUJBQ0Y7OEJBSTRCLE9BQU87c0JBQWpDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0UsU0FBUztzQkFEaEIsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIENvbXBvbmVudFJlZixcbiAgaW5qZWN0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBPbkRlc3Ryb3ksXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFzc2lzdGFudE1lc3NhZ2UsXG4gIE1lc3NhZ2UsXG4gIFRvb2xDYWxsLFxuICBUb29sTWVzc2FnZSxcbn0gZnJvbSBcIkBhZy11aS9jb3JlXCI7XG5pbXBvcnQgeyBUb29sQ2FsbFN0YXR1cyB9IGZyb20gXCJAY29waWxvdGtpdG5leHQvY29yZVwiO1xuaW1wb3J0IHsgQ29waWxvdEtpdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9jb3BpbG90a2l0LnNlcnZpY2VcIjtcbmltcG9ydCB7IHBhcnRpYWxKU09OUGFyc2UgfSBmcm9tIFwiQGNvcGlsb3RraXRuZXh0L3NoYXJlZFwiO1xuaW1wb3J0IHR5cGUge1xuICBUb29sQ2FsbFByb3BzLFxuICBUb29sQ2FsbFJlbmRlcixcbn0gZnJvbSBcIi4uLy4uL2NvcmUvY29waWxvdGtpdC50eXBlc1wiO1xuXG4vKipcbiAqIENvbXBvbmVudCBmb3IgcmVuZGVyaW5nIGFsbCB0b29sIGNhbGxzIGZvciBhbiBhc3Npc3RhbnQgbWVzc2FnZS5cbiAqIFRoaXMgY29tcG9uZW50IGl0ZXJhdGVzIHRocm91Z2ggdGhlIG1lc3NhZ2UncyB0b29sIGNhbGxzIGFuZCByZW5kZXJzIGVhY2ggb25lXG4gKiB1c2luZyB0aGUgcmVnaXN0ZXJlZCByZW5kZXIgZnVuY3Rpb25zIGluIENvcGlsb3RLaXRTZXJ2aWNlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY29waWxvdC1jaGF0LXRvb2wtY2FsbHMtdmlld1wiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGZvciAodG9vbENhbGwgb2YgbWVzc2FnZT8udG9vbENhbGxzID8/IFtdOyB0cmFjayB0b29sQ2FsbC5pZCkge1xuICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjZHluYW1pY0NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFRlbXBsYXRlRm9yVG9vbENhbGwodG9vbENhbGwpIGFzIHRlbXBsYXRlRGF0YVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIHRlbXBsYXRlRGF0YS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgY29udGV4dDogdGVtcGxhdGVEYXRhLmNvbnRleHRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRUb29sQ2FsbHNWaWV3Q29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgbWVzc2FnZSE6IEFzc2lzdGFudE1lc3NhZ2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcbiAgQElucHV0KCkgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZChcImR5bmFtaWNDb250YWluZXJcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIHByaXZhdGUgY29udGFpbmVyPzogVmlld0NvbnRhaW5lclJlZjtcblxuICBwcml2YXRlIGNvcGlsb3RraXQ6IENvcGlsb3RLaXRTZXJ2aWNlIHwgbnVsbCA9IGluamVjdChDb3BpbG90S2l0U2VydmljZSwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcbiAgcHJpdmF0ZSBjb21wb25lbnRSZWZzOiBNYXA8c3RyaW5nLCBDb21wb25lbnRSZWY8YW55Pj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgdGVtcGxhdGVDYWNoZTogTWFwPFxuICAgIHN0cmluZyxcbiAgICB7IHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+OyBjb250ZXh0OiBhbnkgfVxuICA+ID0gbmV3IE1hcCgpO1xuXG4gIC8vIFNpZ25hbHMgZm9yIHJlYWN0aXZlIHN0YXRlXG4gIHByaXZhdGUgbWVzc2FnZVNpZ25hbCA9IHNpZ25hbDxBc3Npc3RhbnRNZXNzYWdlIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgbWVzc2FnZXNTaWduYWwgPSBzaWduYWw8TWVzc2FnZVtdPihbXSk7XG4gIHByaXZhdGUgaXNMb2FkaW5nU2lnbmFsID0gc2lnbmFsKGZhbHNlKTtcblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJBbGxUb29sQ2FsbHMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1tcIm1lc3NhZ2VcIl0pIHtcbiAgICAgIHRoaXMubWVzc2FnZVNpZ25hbC5zZXQodGhpcy5tZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbXCJtZXNzYWdlc1wiXSkge1xuICAgICAgdGhpcy5tZXNzYWdlc1NpZ25hbC5zZXQodGhpcy5tZXNzYWdlcyk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wiaXNMb2FkaW5nXCJdKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZ1NpZ25hbC5zZXQodGhpcy5pc0xvYWRpbmcpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyQWxsVG9vbENhbGxzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBDbGVhbiB1cCBhbGwgY29tcG9uZW50IHJlZnNcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMuZm9yRWFjaCgocmVmKSA9PiByZWYuZGVzdHJveSgpKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZnMuY2xlYXIoKTtcbiAgICB0aGlzLnRlbXBsYXRlQ2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIGdldFRlbXBsYXRlRm9yVG9vbENhbGwoXG4gICAgdG9vbENhbGw6IFRvb2xDYWxsXG4gICk6IHsgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47IGNvbnRleHQ6IGFueSB9IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVDYWNoZS5nZXQodG9vbENhbGwuaWQpIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckFsbFRvb2xDYWxscygpOiB2b2lkIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlU2lnbmFsKCk7XG4gICAgaWYgKCFtZXNzYWdlIHx8ICFtZXNzYWdlLnRvb2xDYWxscyB8fCBtZXNzYWdlLnRvb2xDYWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDbGVhciBleGlzdGluZyByZW5kZXJzXG4gICAgdGhpcy5jb21wb25lbnRSZWZzLmZvckVhY2goKHJlZikgPT4gcmVmLmRlc3Ryb3koKSk7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLmNsZWFyKCk7XG4gICAgdGhpcy50ZW1wbGF0ZUNhY2hlLmNsZWFyKCk7XG5cbiAgICBpZiAoIXRoaXMuY29waWxvdGtpdCB8fCAhdGhpcy5jb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMubWVzc2FnZXNTaWduYWwoKTtcbiAgICBjb25zdCBpc0xvYWRpbmcgPSB0aGlzLmlzTG9hZGluZ1NpZ25hbCgpO1xuXG4gICAgLy8gUmVuZGVyIGVhY2ggdG9vbCBjYWxsXG4gICAgbWVzc2FnZS50b29sQ2FsbHMuZm9yRWFjaCgodG9vbENhbGwpID0+IHtcbiAgICAgIGNvbnN0IHRvb2xNZXNzYWdlID0gbWVzc2FnZXMuZmluZChcbiAgICAgICAgKG0pID0+XG4gICAgICAgICAgbS5yb2xlID09PSBcInRvb2xcIiAmJiAobSBhcyBUb29sTWVzc2FnZSkudG9vbENhbGxJZCA9PT0gdG9vbENhbGwuaWRcbiAgICAgICkgYXMgVG9vbE1lc3NhZ2UgfCB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMucmVuZGVyU2luZ2xlVG9vbENhbGwodG9vbENhbGwsIHRvb2xNZXNzYWdlLCBpc0xvYWRpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJTaW5nbGVUb29sQ2FsbChcbiAgICB0b29sQ2FsbDogVG9vbENhbGwsXG4gICAgdG9vbE1lc3NhZ2U6IFRvb2xNZXNzYWdlIHwgdW5kZWZpbmVkLFxuICAgIGlzTG9hZGluZzogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29waWxvdGtpdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCBjdXJyZW50IHJlbmRlciB0b29sIGNhbGxzXG4gICAgY29uc3QgY3VycmVudFJlbmRlclRvb2xDYWxscyA9IHRoaXMuY29waWxvdGtpdC5jdXJyZW50UmVuZGVyVG9vbENhbGxzKCk7XG5cbiAgICAvLyBGaW5kIHRoZSByZW5kZXIgY29uZmlnIGZvciB0aGlzIHRvb2wgY2FsbCBieSBuYW1lXG4gICAgLy8gQWxzbyBjaGVjayBmb3Igd2lsZGNhcmQgKCopIHJlbmRlcnMgaWYgbm8gZXhhY3QgbWF0Y2hcbiAgICBjb25zdCByZW5kZXJDb25maWcgPVxuICAgICAgY3VycmVudFJlbmRlclRvb2xDYWxscy5maW5kKFxuICAgICAgICAocmM6IFRvb2xDYWxsUmVuZGVyKSA9PiByYy5uYW1lID09PSB0b29sQ2FsbC5mdW5jdGlvbi5uYW1lXG4gICAgICApIHx8IGN1cnJlbnRSZW5kZXJUb29sQ2FsbHMuZmluZCgocmM6IFRvb2xDYWxsUmVuZGVyKSA9PiByYy5uYW1lID09PSBcIipcIik7XG5cbiAgICBpZiAoIXJlbmRlckNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHRoZSBhcmd1bWVudHMgaWYgdGhleSdyZSBhIHN0cmluZ1xuICAgIGNvbnN0IGFyZ3MgPSBwYXJ0aWFsSlNPTlBhcnNlKHRvb2xDYWxsLmZ1bmN0aW9uLmFyZ3VtZW50cyk7XG5cbiAgICAvLyBEZXRlcm1pbmUgc3RhdHVzXG4gICAgbGV0IHN0YXR1czogVG9vbENhbGxTdGF0dXM7XG4gICAgaWYgKHRvb2xNZXNzYWdlKSB7XG4gICAgICBzdGF0dXMgPSBUb29sQ2FsbFN0YXR1cy5Db21wbGV0ZTtcbiAgICB9IGVsc2UgaWYgKGlzTG9hZGluZykge1xuICAgICAgc3RhdHVzID0gVG9vbENhbGxTdGF0dXMuSW5Qcm9ncmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdHVzID0gVG9vbENhbGxTdGF0dXMuQ29tcGxldGU7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHByb3BzIGJhc2VkIG9uIHN0YXR1cyAtIHVzZSBkaXNjcmltaW5hdGVkIHVuaW9uIHByb3Blcmx5XG4gICAgbGV0IHByb3BzOiBUb29sQ2FsbFByb3BzO1xuICAgIGlmIChzdGF0dXMgPT09IFRvb2xDYWxsU3RhdHVzLkluUHJvZ3Jlc3MpIHtcbiAgICAgIHByb3BzID0ge1xuICAgICAgICBuYW1lOiB0b29sQ2FsbC5mdW5jdGlvbi5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgYXJnczogYXJncywgLy8gUGFydGlhbCBhcmdzIGZvciBJblByb2dyZXNzXG4gICAgICAgIHN0YXR1czogVG9vbENhbGxTdGF0dXMuSW5Qcm9ncmVzcyxcbiAgICAgICAgcmVzdWx0OiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb21wbGV0ZSBzdGF0dXNcbiAgICAgIHByb3BzID0ge1xuICAgICAgICBuYW1lOiB0b29sQ2FsbC5mdW5jdGlvbi5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgYXJnczogYXJncywgLy8gRnVsbCBhcmdzIGZvciBDb21wbGV0ZVxuICAgICAgICBzdGF0dXM6IFRvb2xDYWxsU3RhdHVzLkNvbXBsZXRlLFxuICAgICAgICByZXN1bHQ6IHRvb2xNZXNzYWdlPy5jb250ZW50IHx8IFwiXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHJlbmRlciBpcyBhIENvbXBvbmVudCBjbGFzcyBvciBUZW1wbGF0ZVJlZlxuICAgIGlmICh0aGlzLmlzQ29tcG9uZW50Q2xhc3MocmVuZGVyQ29uZmlnLnJlbmRlcikpIHtcbiAgICAgIC8vIENyZWF0ZSBjb21wb25lbnQgZHluYW1pY2FsbHlcbiAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50KHRvb2xDYWxsLmlkLCByZW5kZXJDb25maWcucmVuZGVyLCBwcm9wcyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVGVtcGxhdGVSZWYocmVuZGVyQ29uZmlnLnJlbmRlcikpIHtcbiAgICAgIC8vIFVzZSB0ZW1wbGF0ZVxuICAgICAgdGhpcy5yZW5kZXJUZW1wbGF0ZSh0b29sQ2FsbC5pZCwgcmVuZGVyQ29uZmlnLnJlbmRlciwgcHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29tcG9uZW50KFxuICAgIHRvb2xDYWxsSWQ6IHN0cmluZyxcbiAgICBjb21wb25lbnRDbGFzczogVHlwZTxhbnk+LFxuICAgIHByb3BzOiBUb29sQ2FsbFByb3BzXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIGNvbXBvbmVudFxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRDbGFzcyk7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLnNldCh0b29sQ2FsbElkLCBjb21wb25lbnRSZWYpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGRlY2xhcmVkIGlucHV0cyB0byBhdm9pZCBBbmd1bGFyIE5HMDMwMyBjb25zb2xlIGVycm9yc1xuICAgIGNvbnN0IGNtcERlZjogYW55ID0gKGNvbXBvbmVudENsYXNzIGFzIGFueSkuybVjbXA7XG4gICAgY29uc3QgZGVjbGFyZWRJbnB1dHMgPSBuZXcgU2V0PHN0cmluZz4oXG4gICAgICBPYmplY3Qua2V5cyhjbXBEZWY/LmlucHV0cyA/PyB7fSlcbiAgICApO1xuXG4gICAgLy8gUHJlZmVyIGEgc2luZ2xlICdwcm9wcycgaW5wdXQgaWYgZGVjbGFyZWRcbiAgICBpZiAoZGVjbGFyZWRJbnB1dHMuaGFzKCdwcm9wcycpKSB7XG4gICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ3Byb3BzJywgcHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UsIHNldCBvbmx5IGlucHV0cyB0aGF0IHRoZSBjb21wb25lbnQgYWN0dWFsbHkgZGVjbGFyZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgICAgICBpZiAoZGVjbGFyZWRJbnB1dHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cbiAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJUZW1wbGF0ZShcbiAgICB0b29sQ2FsbElkOiBzdHJpbmcsXG4gICAgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHJvcHM6IFRvb2xDYWxsUHJvcHNcbiAgKTogdm9pZCB7XG4gICAgdGhpcy50ZW1wbGF0ZUNhY2hlLnNldCh0b29sQ2FsbElkLCB7XG4gICAgICB0ZW1wbGF0ZSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgJGltcGxpY2l0OiBwcm9wcyxcbiAgICAgICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgICBhcmdzOiBwcm9wcy5hcmdzLFxuICAgICAgICBzdGF0dXM6IHByb3BzLnN0YXR1cyxcbiAgICAgICAgcmVzdWx0OiBwcm9wcy5yZXN1bHQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbXBvbmVudENsYXNzKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBUeXBlPGFueT4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJiB2YWx1ZS5wcm90b3R5cGU7XG4gIH1cblxuICBwcml2YXRlIGlzVGVtcGxhdGVSZWYodmFsdWU6IGFueSk6IHZhbHVlIGlzIFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICB9XG59XG4iXX0=
|