valtech-components 4.0.244 → 4.0.246
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/esm2022/lib/components/molecules/chat-composer/chat-composer.component.mjs +128 -12
- package/esm2022/lib/components/organisms/chat-window/chat-window.component.mjs +8 -3
- package/esm2022/lib/components/organisms/thread-panel/thread-panel.component.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +136 -15
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/molecules/chat-composer/chat-composer.component.d.ts +13 -1
- package/lib/components/organisms/chat-window/chat-window.component.d.ts +4 -1
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -2,19 +2,30 @@ import { Component, computed, inject, input, output, signal, viewChild } from '@
|
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { IonIcon } from '@ionic/angular/standalone';
|
|
4
4
|
import { addIcons } from 'ionicons';
|
|
5
|
-
import { addOutline, checkmarkOutline, closeOutline, documentOutline, micOutline, arrowUpOutline, trashOutline, } from 'ionicons/icons';
|
|
5
|
+
import { addOutline, checkmarkOutline, closeOutline, documentOutline, micOutline, pulseOutline, arrowUpOutline, trashOutline, } from 'ionicons/icons';
|
|
6
6
|
import fixWebmDuration from 'fix-webm-duration';
|
|
7
7
|
import { I18nService } from '../../../services/i18n';
|
|
8
8
|
import { ModalService } from '../../../services/modal/modal.service';
|
|
9
9
|
import { MediaViewerModalComponent } from '../../organisms/media-viewer-modal/media-viewer-modal.component';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
|
-
addIcons({
|
|
11
|
+
addIcons({
|
|
12
|
+
addOutline,
|
|
13
|
+
checkmarkOutline,
|
|
14
|
+
closeOutline,
|
|
15
|
+
documentOutline,
|
|
16
|
+
micOutline,
|
|
17
|
+
pulseOutline,
|
|
18
|
+
arrowUpOutline,
|
|
19
|
+
trashOutline,
|
|
20
|
+
});
|
|
12
21
|
const CHAT_COMPOSER_I18N = {
|
|
13
22
|
es: {
|
|
14
23
|
placeholder: 'Escribe un mensaje',
|
|
15
24
|
send: 'Enviar',
|
|
16
25
|
attach: 'Adjuntar',
|
|
17
26
|
voice: 'Mensaje de voz',
|
|
27
|
+
dictate: 'Dictar',
|
|
28
|
+
listening: 'Escuchando…',
|
|
18
29
|
done: 'Listo',
|
|
19
30
|
replyingTo: 'Respondiendo a',
|
|
20
31
|
cancel: 'Cancelar',
|
|
@@ -25,6 +36,8 @@ const CHAT_COMPOSER_I18N = {
|
|
|
25
36
|
send: 'Send',
|
|
26
37
|
attach: 'Attach',
|
|
27
38
|
voice: 'Voice message',
|
|
39
|
+
dictate: 'Dictate',
|
|
40
|
+
listening: 'Listening…',
|
|
28
41
|
done: 'Done',
|
|
29
42
|
replyingTo: 'Replying to',
|
|
30
43
|
cancel: 'Cancel',
|
|
@@ -52,12 +65,20 @@ export class ChatComposerComponent {
|
|
|
52
65
|
this.maxLength = input(4000);
|
|
53
66
|
this.replyingTo = input(null);
|
|
54
67
|
this.showAttach = input(true);
|
|
68
|
+
/** Botón de dictado voz→texto (SpeechRecognition). Nativo en Safari/iOS y Chrome. */
|
|
55
69
|
this.showMic = input(true);
|
|
70
|
+
/** Botón de mensaje de voz (grabar clip). Opt-in: la reproducción cross-device
|
|
71
|
+
* requiere transcode server-side (pendiente), por eso default false. */
|
|
72
|
+
this.showVoiceMessage = input(false);
|
|
56
73
|
this.send = output();
|
|
57
74
|
this.typing = output();
|
|
58
75
|
this.voice = output();
|
|
59
76
|
this.cancelReply = output();
|
|
60
77
|
this.editableRef = viewChild('editable');
|
|
78
|
+
// Dictado voz→texto (Web Speech API).
|
|
79
|
+
this.dictating = signal(false);
|
|
80
|
+
this.dictationSupported = !!(window.SpeechRecognition ||
|
|
81
|
+
window.webkitSpeechRecognition);
|
|
61
82
|
this.body = signal('');
|
|
62
83
|
this.pending = signal([]);
|
|
63
84
|
this.pendingId = 0;
|
|
@@ -312,8 +333,83 @@ export class ChatComposerComponent {
|
|
|
312
333
|
return 'error';
|
|
313
334
|
}
|
|
314
335
|
}
|
|
336
|
+
// ─── Dictado voz→texto (Web Speech API) ───────────────────────────────────
|
|
337
|
+
toggleDictation() {
|
|
338
|
+
if (this.dictating()) {
|
|
339
|
+
this.stopDictation();
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
this.startDictation();
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
startDictation() {
|
|
346
|
+
const Ctor = window.SpeechRecognition ||
|
|
347
|
+
window.webkitSpeechRecognition;
|
|
348
|
+
if (!Ctor)
|
|
349
|
+
return;
|
|
350
|
+
const rec = new Ctor();
|
|
351
|
+
rec.lang = this.i18n.lang() === 'en' ? 'en-US' : 'es-CL';
|
|
352
|
+
rec.continuous = true;
|
|
353
|
+
rec.interimResults = false; // solo resultados finales → insertamos texto limpio
|
|
354
|
+
rec.onresult = event => {
|
|
355
|
+
let finalText = '';
|
|
356
|
+
for (let i = event.resultIndex; i < event.results.length; i++) {
|
|
357
|
+
const r = event.results[i];
|
|
358
|
+
if (r.isFinal)
|
|
359
|
+
finalText += r[0].transcript;
|
|
360
|
+
}
|
|
361
|
+
if (finalText)
|
|
362
|
+
this.insertDictated(finalText);
|
|
363
|
+
};
|
|
364
|
+
rec.onerror = () => this.stopDictation();
|
|
365
|
+
rec.onend = () => {
|
|
366
|
+
// El reconocimiento puede cortarse solo; reflejamos el estado.
|
|
367
|
+
this.dictating.set(false);
|
|
368
|
+
};
|
|
369
|
+
this.recognition = rec;
|
|
370
|
+
this.editableRef()?.nativeElement.focus();
|
|
371
|
+
try {
|
|
372
|
+
rec.start();
|
|
373
|
+
this.dictating.set(true);
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
this.dictating.set(false);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
stopDictation() {
|
|
380
|
+
try {
|
|
381
|
+
this.recognition?.stop();
|
|
382
|
+
}
|
|
383
|
+
catch {
|
|
384
|
+
/* noop */
|
|
385
|
+
}
|
|
386
|
+
this.dictating.set(false);
|
|
387
|
+
}
|
|
388
|
+
/** Inserta el texto dictado al final del editable y sincroniza el body. */
|
|
389
|
+
insertDictated(text) {
|
|
390
|
+
const el = this.editableRef()?.nativeElement;
|
|
391
|
+
if (!el)
|
|
392
|
+
return;
|
|
393
|
+
const current = el.innerText.replace(/\n$/, '');
|
|
394
|
+
const sep = current && !current.endsWith(' ') ? ' ' : '';
|
|
395
|
+
el.innerText = current + sep + text;
|
|
396
|
+
// Coloca el caret al final.
|
|
397
|
+
const range = document.createRange();
|
|
398
|
+
range.selectNodeContents(el);
|
|
399
|
+
range.collapse(false);
|
|
400
|
+
const sel = window.getSelection();
|
|
401
|
+
sel?.removeAllRanges();
|
|
402
|
+
sel?.addRange(range);
|
|
403
|
+
this.body.set(el.innerText.replace(/\n$/, ''));
|
|
404
|
+
}
|
|
315
405
|
ngOnDestroy() {
|
|
316
406
|
this.cleanupRecording();
|
|
407
|
+
try {
|
|
408
|
+
this.recognition?.abort();
|
|
409
|
+
}
|
|
410
|
+
catch {
|
|
411
|
+
/* noop */
|
|
412
|
+
}
|
|
317
413
|
for (const att of this.pending()) {
|
|
318
414
|
if (att.url)
|
|
319
415
|
URL.revokeObjectURL(att.url);
|
|
@@ -323,7 +419,7 @@ export class ChatComposerComponent {
|
|
|
323
419
|
return this.i18n.t(key, 'ChatComposer');
|
|
324
420
|
}
|
|
325
421
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatComposerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
326
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChatComposerComponent, isStandalone: true, selector: "val-chat-composer", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, replyingTo: { classPropertyName: "replyingTo", publicName: "replyingTo", isSignal: true, isRequired: false, transformFunction: null }, showAttach: { classPropertyName: "showAttach", publicName: "showAttach", isSignal: true, isRequired: false, transformFunction: null }, showMic: { classPropertyName: "showMic", publicName: "showMic", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { send: "send", typing: "typing", voice: "voice", cancelReply: "cancelReply" }, viewQueries: [{ propertyName: "editableRef", first: true, predicate: ["editable"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
422
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChatComposerComponent, isStandalone: true, selector: "val-chat-composer", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, replyingTo: { classPropertyName: "replyingTo", publicName: "replyingTo", isSignal: true, isRequired: false, transformFunction: null }, showAttach: { classPropertyName: "showAttach", publicName: "showAttach", isSignal: true, isRequired: false, transformFunction: null }, showMic: { classPropertyName: "showMic", publicName: "showMic", isSignal: true, isRequired: false, transformFunction: null }, showVoiceMessage: { classPropertyName: "showVoiceMessage", publicName: "showVoiceMessage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { send: "send", typing: "typing", voice: "voice", cancelReply: "cancelReply" }, viewQueries: [{ propertyName: "editableRef", first: true, predicate: ["editable"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
327
423
|
<div class="composer">
|
|
328
424
|
@if (replyingTo()) {
|
|
329
425
|
<div class="reply-bar">
|
|
@@ -401,7 +497,7 @@ export class ChatComposerComponent {
|
|
|
401
497
|
contenteditable="true"
|
|
402
498
|
role="textbox"
|
|
403
499
|
aria-multiline="true"
|
|
404
|
-
[attr.data-placeholder]="placeholderText()"
|
|
500
|
+
[attr.data-placeholder]="dictating() ? t('listening') : placeholderText()"
|
|
405
501
|
[attr.aria-label]="placeholderText()"
|
|
406
502
|
(input)="syncBody()"
|
|
407
503
|
(keydown)="onKeydown($event)"
|
|
@@ -416,8 +512,18 @@ export class ChatComposerComponent {
|
|
|
416
512
|
<input type="file" hidden (change)="onFile($event)" accept="image/*,application/pdf" />
|
|
417
513
|
</label>
|
|
418
514
|
}
|
|
419
|
-
@if (
|
|
420
|
-
<button class="icon-btn
|
|
515
|
+
@if (showVoiceMessage()) {
|
|
516
|
+
<button class="icon-btn" [attr.aria-label]="t('voice')" (click)="startRecording()">
|
|
517
|
+
<ion-icon name="pulse-outline" aria-hidden="true" />
|
|
518
|
+
</button>
|
|
519
|
+
}
|
|
520
|
+
@if (showMic() && dictationSupported) {
|
|
521
|
+
<button
|
|
522
|
+
class="icon-btn dictate"
|
|
523
|
+
[class.active]="dictating()"
|
|
524
|
+
[attr.aria-label]="t('dictate')"
|
|
525
|
+
(click)="toggleDictation()"
|
|
526
|
+
>
|
|
421
527
|
<ion-icon name="mic-outline" aria-hidden="true" />
|
|
422
528
|
</button>
|
|
423
529
|
}
|
|
@@ -430,7 +536,7 @@ export class ChatComposerComponent {
|
|
|
430
536
|
</div>
|
|
431
537
|
}
|
|
432
538
|
</div>
|
|
433
|
-
`, isInline: true, styles: [":host{display:block}.composer{display:flex;flex-direction:column;gap:6px;padding:8px 10px calc(8px + env(safe-area-inset-bottom,0px));background:var(--ion-background-color, #fff);border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .08))}.reply-bar{display:flex;align-items:center;gap:8px;padding:6px 10px;border-left:3px solid var(--ion-color-primary);border-radius:8px;background:var(--ion-color-step-100, rgba(127, 127, 127, .1))}.reply-content{display:flex;flex-direction:column;flex:1;min-width:0;font-size:.8125rem}.reply-name{font-weight:700;color:var(--ion-color-primary)}.reply-body{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ion-color-medium, #92949c)}.pending-row{display:flex;gap:8px;flex-wrap:wrap;padding:2px 4px}.thumb{position:relative;width:72px;height:72px;border-radius:12px;overflow:hidden;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-step-100, rgba(127, 127, 127, .1));cursor:pointer}.thumb img{width:100%;height:100%;object-fit:cover}.thumb.file{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:4px;color:var(--ion-color-medium, #92949c);font-size:1.5rem}.thumb-name{font-size:.5625rem;line-height:1.1;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ion-text-color, #000)}.thumb-remove{position:absolute;top:2px;right:2px;width:20px;height:20px;border:none;border-radius:50%;background:#0000008c;color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:.875rem}.shell{display:flex;flex-direction:column;gap:8px;background:var(--ion-color-light, #f4f5f8);border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));border-radius:26px;padding:12px 16px}.editable{min-height:40px;max-height:180px;overflow-y:auto;outline:none;font-size:.9375rem;line-height:1.4;color:var(--ion-text-color, #000);white-space:pre-wrap;word-break:break-word;-webkit-user-select:text;user-select:text}.editable.is-empty:before{content:attr(data-placeholder);color:var(--ion-color-medium, #92949c);pointer-events:none}.actions{display:flex;align-items:center;gap:4px}.actions-spacer{flex:1}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex-shrink:0;border:none;border-radius:50%;background:transparent;color:var(--ion-color-medium, #92949c);cursor:pointer;font-size:1.25rem}.icon-btn:hover{color:var(--ion-color-primary)}.send-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex-shrink:0;border:none;border-radius:50%;background:var(--ion-color-primary);color:var(--ion-color-primary-contrast, #fff);cursor:pointer;font-size:1.125rem;transition:transform .1s ease}.send-btn:active{transform:scale(.92)}.icon-btn.danger{color:var(--ion-color-danger, #eb445a)}.audio-chip{display:flex;align-items:center;gap:6px;width:100%;padding:4px 6px;border-radius:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-step-100, rgba(127, 127, 127, .1))}.audio-chip audio{flex:1;height:36px;min-width:0}.thumb-remove.inline{position:static;flex-shrink:0;background:var(--ion-color-medium, #92949c)}.rec-bar{display:flex;align-items:center;gap:10px;background:var(--ion-color-light, #f4f5f8);border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));border-radius:20px;padding:4px 8px}.rec-dot{width:10px;height:10px;border-radius:50%;background:var(--ion-color-danger, #eb445a);animation:rec-pulse 1.2s ease-in-out infinite}.rec-time{font-variant-numeric:tabular-nums;font-size:.9375rem;color:var(--ion-text-color, #000)}.rec-spacer{flex:1}@keyframes rec-pulse{0%,to{opacity:1}50%{opacity:.3}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
539
|
+
`, isInline: true, styles: [":host{display:block}.composer{display:flex;flex-direction:column;gap:6px;padding:8px 10px calc(8px + env(safe-area-inset-bottom,0px));background:var(--ion-background-color, #fff);border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .08))}.reply-bar{display:flex;align-items:center;gap:8px;padding:6px 10px;border-left:3px solid var(--ion-color-primary);border-radius:8px;background:var(--ion-color-step-100, rgba(127, 127, 127, .1))}.reply-content{display:flex;flex-direction:column;flex:1;min-width:0;font-size:.8125rem}.reply-name{font-weight:700;color:var(--ion-color-primary)}.reply-body{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ion-color-medium, #92949c)}.pending-row{display:flex;gap:8px;flex-wrap:wrap;padding:2px 4px}.thumb{position:relative;width:72px;height:72px;border-radius:12px;overflow:hidden;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-step-100, rgba(127, 127, 127, .1));cursor:pointer}.thumb img{width:100%;height:100%;object-fit:cover}.thumb.file{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:4px;color:var(--ion-color-medium, #92949c);font-size:1.5rem}.thumb-name{font-size:.5625rem;line-height:1.1;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ion-text-color, #000)}.thumb-remove{position:absolute;top:2px;right:2px;width:20px;height:20px;border:none;border-radius:50%;background:#0000008c;color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:.875rem}.shell{display:flex;flex-direction:column;gap:8px;background:var(--ion-color-light, #f4f5f8);border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));border-radius:26px;padding:12px 16px}.editable{min-height:40px;max-height:180px;overflow-y:auto;outline:none;font-size:.9375rem;line-height:1.4;color:var(--ion-text-color, #000);white-space:pre-wrap;word-break:break-word;-webkit-user-select:text;user-select:text}.editable.is-empty:before{content:attr(data-placeholder);color:var(--ion-color-medium, #92949c);pointer-events:none}.actions{display:flex;align-items:center;gap:4px}.actions-spacer{flex:1}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex-shrink:0;border:none;border-radius:50%;background:transparent;color:var(--ion-color-medium, #92949c);cursor:pointer;font-size:1.25rem}.icon-btn:hover{color:var(--ion-color-primary)}.icon-btn.dictate.active{color:var(--ion-color-primary);animation:dictate-pulse 1.2s ease-in-out infinite}@keyframes dictate-pulse{0%,to{opacity:1}50%{opacity:.4}}.send-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex-shrink:0;border:none;border-radius:50%;background:var(--ion-color-primary);color:var(--ion-color-primary-contrast, #fff);cursor:pointer;font-size:1.125rem;transition:transform .1s ease}.send-btn:active{transform:scale(.92)}.icon-btn.danger{color:var(--ion-color-danger, #eb445a)}.audio-chip{display:flex;align-items:center;gap:6px;width:100%;padding:4px 6px;border-radius:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-step-100, rgba(127, 127, 127, .1))}.audio-chip audio{flex:1;height:36px;min-width:0}.thumb-remove.inline{position:static;flex-shrink:0;background:var(--ion-color-medium, #92949c)}.rec-bar{display:flex;align-items:center;gap:10px;background:var(--ion-color-light, #f4f5f8);border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));border-radius:20px;padding:4px 8px}.rec-dot{width:10px;height:10px;border-radius:50%;background:var(--ion-color-danger, #eb445a);animation:rec-pulse 1.2s ease-in-out infinite}.rec-time{font-variant-numeric:tabular-nums;font-size:.9375rem;color:var(--ion-text-color, #000)}.rec-spacer{flex:1}@keyframes rec-pulse{0%,to{opacity:1}50%{opacity:.3}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
434
540
|
}
|
|
435
541
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatComposerComponent, decorators: [{
|
|
436
542
|
type: Component,
|
|
@@ -512,7 +618,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
512
618
|
contenteditable="true"
|
|
513
619
|
role="textbox"
|
|
514
620
|
aria-multiline="true"
|
|
515
|
-
[attr.data-placeholder]="placeholderText()"
|
|
621
|
+
[attr.data-placeholder]="dictating() ? t('listening') : placeholderText()"
|
|
516
622
|
[attr.aria-label]="placeholderText()"
|
|
517
623
|
(input)="syncBody()"
|
|
518
624
|
(keydown)="onKeydown($event)"
|
|
@@ -527,8 +633,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
527
633
|
<input type="file" hidden (change)="onFile($event)" accept="image/*,application/pdf" />
|
|
528
634
|
</label>
|
|
529
635
|
}
|
|
530
|
-
@if (
|
|
531
|
-
<button class="icon-btn
|
|
636
|
+
@if (showVoiceMessage()) {
|
|
637
|
+
<button class="icon-btn" [attr.aria-label]="t('voice')" (click)="startRecording()">
|
|
638
|
+
<ion-icon name="pulse-outline" aria-hidden="true" />
|
|
639
|
+
</button>
|
|
640
|
+
}
|
|
641
|
+
@if (showMic() && dictationSupported) {
|
|
642
|
+
<button
|
|
643
|
+
class="icon-btn dictate"
|
|
644
|
+
[class.active]="dictating()"
|
|
645
|
+
[attr.aria-label]="t('dictate')"
|
|
646
|
+
(click)="toggleDictation()"
|
|
647
|
+
>
|
|
532
648
|
<ion-icon name="mic-outline" aria-hidden="true" />
|
|
533
649
|
</button>
|
|
534
650
|
}
|
|
@@ -541,6 +657,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
541
657
|
</div>
|
|
542
658
|
}
|
|
543
659
|
</div>
|
|
544
|
-
`, styles: [":host{display:block}.composer{display:flex;flex-direction:column;gap:6px;padding:8px 10px calc(8px + env(safe-area-inset-bottom,0px));background:var(--ion-background-color, #fff);border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .08))}.reply-bar{display:flex;align-items:center;gap:8px;padding:6px 10px;border-left:3px solid var(--ion-color-primary);border-radius:8px;background:var(--ion-color-step-100, rgba(127, 127, 127, .1))}.reply-content{display:flex;flex-direction:column;flex:1;min-width:0;font-size:.8125rem}.reply-name{font-weight:700;color:var(--ion-color-primary)}.reply-body{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ion-color-medium, #92949c)}.pending-row{display:flex;gap:8px;flex-wrap:wrap;padding:2px 4px}.thumb{position:relative;width:72px;height:72px;border-radius:12px;overflow:hidden;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-step-100, rgba(127, 127, 127, .1));cursor:pointer}.thumb img{width:100%;height:100%;object-fit:cover}.thumb.file{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:4px;color:var(--ion-color-medium, #92949c);font-size:1.5rem}.thumb-name{font-size:.5625rem;line-height:1.1;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ion-text-color, #000)}.thumb-remove{position:absolute;top:2px;right:2px;width:20px;height:20px;border:none;border-radius:50%;background:#0000008c;color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:.875rem}.shell{display:flex;flex-direction:column;gap:8px;background:var(--ion-color-light, #f4f5f8);border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));border-radius:26px;padding:12px 16px}.editable{min-height:40px;max-height:180px;overflow-y:auto;outline:none;font-size:.9375rem;line-height:1.4;color:var(--ion-text-color, #000);white-space:pre-wrap;word-break:break-word;-webkit-user-select:text;user-select:text}.editable.is-empty:before{content:attr(data-placeholder);color:var(--ion-color-medium, #92949c);pointer-events:none}.actions{display:flex;align-items:center;gap:4px}.actions-spacer{flex:1}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex-shrink:0;border:none;border-radius:50%;background:transparent;color:var(--ion-color-medium, #92949c);cursor:pointer;font-size:1.25rem}.icon-btn:hover{color:var(--ion-color-primary)}.send-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex-shrink:0;border:none;border-radius:50%;background:var(--ion-color-primary);color:var(--ion-color-primary-contrast, #fff);cursor:pointer;font-size:1.125rem;transition:transform .1s ease}.send-btn:active{transform:scale(.92)}.icon-btn.danger{color:var(--ion-color-danger, #eb445a)}.audio-chip{display:flex;align-items:center;gap:6px;width:100%;padding:4px 6px;border-radius:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-step-100, rgba(127, 127, 127, .1))}.audio-chip audio{flex:1;height:36px;min-width:0}.thumb-remove.inline{position:static;flex-shrink:0;background:var(--ion-color-medium, #92949c)}.rec-bar{display:flex;align-items:center;gap:10px;background:var(--ion-color-light, #f4f5f8);border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));border-radius:20px;padding:4px 8px}.rec-dot{width:10px;height:10px;border-radius:50%;background:var(--ion-color-danger, #eb445a);animation:rec-pulse 1.2s ease-in-out infinite}.rec-time{font-variant-numeric:tabular-nums;font-size:.9375rem;color:var(--ion-text-color, #000)}.rec-spacer{flex:1}@keyframes rec-pulse{0%,to{opacity:1}50%{opacity:.3}}\n"] }]
|
|
660
|
+
`, styles: [":host{display:block}.composer{display:flex;flex-direction:column;gap:6px;padding:8px 10px calc(8px + env(safe-area-inset-bottom,0px));background:var(--ion-background-color, #fff);border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .08))}.reply-bar{display:flex;align-items:center;gap:8px;padding:6px 10px;border-left:3px solid var(--ion-color-primary);border-radius:8px;background:var(--ion-color-step-100, rgba(127, 127, 127, .1))}.reply-content{display:flex;flex-direction:column;flex:1;min-width:0;font-size:.8125rem}.reply-name{font-weight:700;color:var(--ion-color-primary)}.reply-body{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ion-color-medium, #92949c)}.pending-row{display:flex;gap:8px;flex-wrap:wrap;padding:2px 4px}.thumb{position:relative;width:72px;height:72px;border-radius:12px;overflow:hidden;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-step-100, rgba(127, 127, 127, .1));cursor:pointer}.thumb img{width:100%;height:100%;object-fit:cover}.thumb.file{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:4px;color:var(--ion-color-medium, #92949c);font-size:1.5rem}.thumb-name{font-size:.5625rem;line-height:1.1;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ion-text-color, #000)}.thumb-remove{position:absolute;top:2px;right:2px;width:20px;height:20px;border:none;border-radius:50%;background:#0000008c;color:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:.875rem}.shell{display:flex;flex-direction:column;gap:8px;background:var(--ion-color-light, #f4f5f8);border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));border-radius:26px;padding:12px 16px}.editable{min-height:40px;max-height:180px;overflow-y:auto;outline:none;font-size:.9375rem;line-height:1.4;color:var(--ion-text-color, #000);white-space:pre-wrap;word-break:break-word;-webkit-user-select:text;user-select:text}.editable.is-empty:before{content:attr(data-placeholder);color:var(--ion-color-medium, #92949c);pointer-events:none}.actions{display:flex;align-items:center;gap:4px}.actions-spacer{flex:1}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex-shrink:0;border:none;border-radius:50%;background:transparent;color:var(--ion-color-medium, #92949c);cursor:pointer;font-size:1.25rem}.icon-btn:hover{color:var(--ion-color-primary)}.icon-btn.dictate.active{color:var(--ion-color-primary);animation:dictate-pulse 1.2s ease-in-out infinite}@keyframes dictate-pulse{0%,to{opacity:1}50%{opacity:.4}}.send-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;flex-shrink:0;border:none;border-radius:50%;background:var(--ion-color-primary);color:var(--ion-color-primary-contrast, #fff);cursor:pointer;font-size:1.125rem;transition:transform .1s ease}.send-btn:active{transform:scale(.92)}.icon-btn.danger{color:var(--ion-color-danger, #eb445a)}.audio-chip{display:flex;align-items:center;gap:6px;width:100%;padding:4px 6px;border-radius:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));background:var(--ion-color-step-100, rgba(127, 127, 127, .1))}.audio-chip audio{flex:1;height:36px;min-width:0}.thumb-remove.inline{position:static;flex-shrink:0;background:var(--ion-color-medium, #92949c)}.rec-bar{display:flex;align-items:center;gap:10px;background:var(--ion-color-light, #f4f5f8);border:1px solid var(--ion-border-color, rgba(0, 0, 0, .08));border-radius:20px;padding:4px 8px}.rec-dot{width:10px;height:10px;border-radius:50%;background:var(--ion-color-danger, #eb445a);animation:rec-pulse 1.2s ease-in-out infinite}.rec-time{font-variant-numeric:tabular-nums;font-size:.9375rem;color:var(--ion-text-color, #000)}.rec-spacer{flex:1}@keyframes rec-pulse{0%,to{opacity:1}50%{opacity:.3}}\n"] }]
|
|
545
661
|
}], ctorParameters: () => [] });
|
|
546
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1jb21wb3Nlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2NoYXQtY29tcG9zZXIvY2hhdC1jb21wb3Nlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBeUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLGNBQWMsRUFDZCxZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLGVBQWUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDOztBQUU1RyxRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFFcEgsTUFBTSxrQkFBa0IsR0FBRztJQUN6QixFQUFFLEVBQUU7UUFDRixXQUFXLEVBQUUsb0JBQW9CO1FBQ2pDLElBQUksRUFBRSxRQUFRO1FBQ2QsTUFBTSxFQUFFLFVBQVU7UUFD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QU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakMsSUFBSSxHQUFHLENBQUMsR0FBRztnQkFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUVELENBQUMsQ0FBQyxHQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDMUMsQ0FBQzsrR0F6U1UscUJBQXFCO21HQUFyQixxQkFBcUIsc2tDQTdVdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkdULHNzSEE1R1MsWUFBWSwrQkFBRSxPQUFPOzs0RkE4VXBCLHFCQUFxQjtrQkFqVmpDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFDdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkdUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQge1xuICBhZGRPdXRsaW5lLFxuICBjaGVja21hcmtPdXRsaW5lLFxuICBjbG9zZU91dGxpbmUsXG4gIGRvY3VtZW50T3V0bGluZSxcbiAgbWljT3V0bGluZSxcbiAgYXJyb3dVcE91dGxpbmUsXG4gIHRyYXNoT3V0bGluZSxcbn0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgZml4V2VibUR1cmF0aW9uIGZyb20gJ2ZpeC13ZWJtLWR1cmF0aW9uJztcblxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IE1lc3NhZ2VSZXBseVRvIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2hhdC90eXBlcyc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IE1lZGlhVmlld2VyTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvbWVkaWEtdmlld2VyLW1vZGFsL21lZGlhLXZpZXdlci1tb2RhbC5jb21wb25lbnQnO1xuXG5hZGRJY29ucyh7IGFkZE91dGxpbmUsIGNoZWNrbWFya091dGxpbmUsIGNsb3NlT3V0bGluZSwgZG9jdW1lbnRPdXRsaW5lLCBtaWNPdXRsaW5lLCBhcnJvd1VwT3V0bGluZSwgdHJhc2hPdXRsaW5lIH0pO1xuXG5jb25zdCBDSEFUX0NPTVBPU0VSX0kxOE4gPSB7XG4gIGVzOiB7XG4gICAgcGxhY2Vob2xkZXI6ICdFc2NyaWJlIHVuIG1lbnNhamUnLFxuICAgIHNlbmQ6ICdFbnZpYXInLFxuICAgIGF0dGFjaDogJ0FkanVudGFyJyxcbiAgICB2b2ljZTogJ01lbnNhamUgZGUgdm96JyxcbiAgICBkb25lOiAnTGlzdG8nLFxuICAgIHJlcGx5aW5nVG86ICdSZXNwb25kaWVuZG8gYScsXG4gICAgY2FuY2VsOiAnQ2FuY2VsYXInLFxuICAgIHJlbW92ZTogJ1F1aXRhcicsXG4gIH0sXG4gIGVuOiB7XG4gICAgcGxhY2Vob2xkZXI6ICdXcml0ZSBhIG1lc3NhZ2UnLFxuICAgIHNlbmQ6ICdTZW5kJyxcbiAgICBhdHRhY2g6ICdBdHRhY2gnLFxuICAgIHZvaWNlOiAnVm9pY2UgbWVzc2FnZScsXG4gICAgZG9uZTogJ0RvbmUnLFxuICAgIHJlcGx5aW5nVG86ICdSZXBseWluZyB0bycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICByZW1vdmU6ICdSZW1vdmUnLFxuICB9LFxufTtcblxudHlwZSBQZW5kaW5nS2luZCA9ICdpbWFnZScgfCAnYXVkaW8nIHwgJ2ZpbGUnO1xuXG5pbnRlcmZhY2UgUGVuZGluZ0F0dGFjaG1lbnQge1xuICBpZDogbnVtYmVyO1xuICBmaWxlOiBGaWxlO1xuICB1cmw/OiBzdHJpbmc7XG4gIGtpbmQ6IFBlbmRpbmdLaW5kO1xufVxuXG4vKiogRXZlbnRvIGRlIGVudsOtbzogdGV4dG8gKGNhcHRpb24pICsgYWRqdW50b3Mgc3RhZ2VkLiBmaWxlcyB2YWPDrW8gPT4gc29sbyB0ZXh0by4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbXBvc2VyU2VuZEV2ZW50IHtcbiAgdGV4dDogc3RyaW5nO1xuICBmaWxlczogRmlsZVtdO1xufVxuXG4vKipcbiAqIHZhbC1jaGF0LWNvbXBvc2VyIOKAlCBiYXJyYSBkZSByZWRhY2Npw7NuIGVzdGlsbyBOb3Rpb24vQ2xhdWRlIChmdWxsIGN1c3RvbSkuXG4gKlxuICogRWwgZWRpdG9yIGVzIHVuIGBjb250ZW50ZWRpdGFibGVgIChOTyBpb24tdGV4dGFyZWEpOiBjcmVjZSBoYXN0YSB1biBtYXgtaGVpZ2h0LFxuICogc29wb3J0YSBwZWdhciB0ZXh0byBwbGFubyBlIGltw6FnZW5lcyBkZWwgcG9ydGFwYXBlbGVzLCBFbnRlciBlbnbDrWEgLyBTaGlmdCtFbnRlclxuICogc2FsdGEgbMOtbmVhLiBEZWJham8sIHVuYSBmaWxhIGRlIGFjY2lvbmVzIHByb3BpYXM6IGFkanVudGFyICgrKSwgbWljL2Vudmlhci5cbiAqIExvcyBhZGp1bnRvcyAoYm90w7NuIC8gcGVnYXIgLyBhdWRpbyBncmFiYWRvKSBzZSBhY3VtdWxhbiBjb21vIG1pbmlhdHVyYXMgZGVcbiAqIFBSRVZJRVcgeSBzZSBtYW5kYW4gZW4gVU4gc29sbyBldmVudG8gYHNlbmQge3RleHQsIGZpbGVzfWAgKGNhcHRpb24gKyBhZGp1bnRvcykuXG4gKlxuICogUGVuc2FkbyBwYXJhIHZpdmlyIGVuIHVuIGNvbnRlbmVkb3IgZmlqbyBhbCBmb25kbyBkZWwgdmlld3BvcnQgKGVsIGNvbnN1bWVyXG4gKiBhbmNsYSBsYSBwb3NpY2nDs24pLiBObyBpbmNsdXllIGVtb2ppIHBpY2tlciAoZWwgdGVjbGFkbyBkZWwgc2lzdGVtYSBsbyB0cmFlKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWNoYXQtY29tcG9zZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25JY29uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiY29tcG9zZXJcIj5cbiAgICAgIEBpZiAocmVwbHlpbmdUbygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXBseS1iYXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVwbHktY29udGVudFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXBseS1uYW1lXCI+e3sgcmVwbHlpbmdUbygpIS5zZW5kZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXBseS1ib2R5XCI+e3sgcmVwbHlpbmdUbygpIS5ib2R5IH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2FuY2VsJylcIiAoY2xpY2spPVwiY2FuY2VsUmVwbHkuZW1pdCgpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmIChyZWNvcmRpbmcoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicmVjLWJhclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biBkYW5nZXJcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NhbmNlbCcpXCIgKGNsaWNrKT1cImNhbmNlbFJlY29yZGluZygpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRyYXNoLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVjLWRvdFwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlYy10aW1lXCI+e3sgcmVjVGltZUxhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWMtc3BhY2VyXCI+PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0blwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnZG9uZScpXCIgKGNsaWNrKT1cImZpbmlzaFJlY29yZGluZygpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZWNrbWFyay1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoZWxsXCI+XG4gICAgICAgICAgQGlmIChwZW5kaW5nKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlbmRpbmctcm93XCI+XG4gICAgICAgICAgICAgIEBmb3IgKGF0dCBvZiBwZW5kaW5nKCk7IHRyYWNrIGF0dC5pZCkge1xuICAgICAgICAgICAgICAgIEBpZiAoYXR0LmtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdWRpby1jaGlwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhdWRpb1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzXG4gICAgICAgICAgICAgICAgICAgICAgcHJlbG9hZD1cIm1ldGFkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImF0dC51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJvbkF1ZGlvRXJyb3IoJ3ByZXZpZXcnLCBhdHQuZmlsZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGxvYWRlZG1ldGFkYXRhKT1cIm9uQXVkaW9Mb2FkZWQoJ3ByZXZpZXcnLCBhdHQuZmlsZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L2F1ZGlvPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGh1bWItcmVtb3ZlIGlubGluZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgncmVtb3ZlJylcIiAoY2xpY2spPVwicmVtb3ZlUGVuZGluZyhhdHQuaWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0aHVtYlwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maWxlXT1cImF0dC5raW5kID09PSAnZmlsZSdcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld0F0dGFjaG1lbnQoYXR0KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJ2aWV3QXR0YWNobWVudChhdHQpXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChhdHQua2luZCA9PT0gJ2ltYWdlJykge1xuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJhdHQudXJsXCIgW2FsdF09XCJhdHQuZmlsZS5uYW1lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJkb2N1bWVudC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRodW1iLW5hbWVcIj57eyBhdHQuZmlsZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRodW1iLXJlbW92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdyZW1vdmUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVtb3ZlUGVuZGluZyhhdHQuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZWRpdGFibGVcbiAgICAgICAgICAgIGNsYXNzPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWVtcHR5XT1cIiFib2R5KClcIlxuICAgICAgICAgICAgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgICByb2xlPVwidGV4dGJveFwiXG4gICAgICAgICAgICBhcmlhLW11bHRpbGluZT1cInRydWVcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclRleHQoKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInBsYWNlaG9sZGVyVGV4dCgpXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJzeW5jQm9keSgpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChwYXN0ZSk9XCJvblBhc3RlKCRldmVudClcIlxuICAgICAgICAgID48L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbnMtc3BhY2VyXCI+PC9zcGFuPlxuICAgICAgICAgICAgQGlmIChzaG93QXR0YWNoKCkpIHtcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaWNvbi1idG5cIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2F0dGFjaCcpXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJhZGQtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaGlkZGVuIChjaGFuZ2UpPVwib25GaWxlKCRldmVudClcIiBhY2NlcHQ9XCJpbWFnZS8qLGFwcGxpY2F0aW9uL3BkZlwiIC8+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHNob3dNaWMoKSkge1xuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4gbWljXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCd2b2ljZScpXCIgKGNsaWNrKT1cInN0YXJ0UmVjb3JkaW5nKClcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cIm1pYy1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGNhblNlbmQoKSkge1xuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VuZC1idG5cIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ3NlbmQnKVwiIChjbGljayk9XCJvblNlbmQoKVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiYXJyb3ctdXAtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIC5jb21wb3NlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBwYWRkaW5nOiA4cHggMTBweCBjYWxjKDhweCArIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwcHgpKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IsICNmZmYpO1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICB9XG4gICAgICAucmVwbHktYmFyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIHBhZGRpbmc6IDZweCAxMHB4O1xuICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc3RlcC0xMDAsIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4xKSk7XG4gICAgICB9XG4gICAgICAucmVwbHktY29udGVudCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICB9XG4gICAgICAucmVwbHktbmFtZSB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICB9XG4gICAgICAucmVwbHktYm9keSB7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAucGVuZGluZy1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBwYWRkaW5nOiAycHggNHB4O1xuICAgICAgfVxuICAgICAgLnRodW1iIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB3aWR0aDogNzJweDtcbiAgICAgICAgaGVpZ2h0OiA3MnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc3RlcC0xMDAsIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4xKSk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICAgIC50aHVtYiBpbWcge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgIH1cbiAgICAgIC50aHVtYi5maWxlIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgICBwYWRkaW5nOiA0cHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjOTI5NDljKTtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgICB9XG4gICAgICAudGh1bWItbmFtZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC41NjI1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4xO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IsICMwMDApO1xuICAgICAgfVxuICAgICAgLnRodW1iLXJlbW92ZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAycHg7XG4gICAgICAgIHJpZ2h0OiAycHg7XG4gICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICB9XG4gICAgICAvKiBTaGVsbCBlc3RpbG8gTm90aW9uOiBlZGl0YWJsZSBhcnJpYmEsIGZpbGEgZGUgYWNjaW9uZXMgYWJham8uICovXG4gICAgICAuc2hlbGwge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCAjZjRmNWY4KTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDI2cHg7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICAgIH1cbiAgICAgIC5lZGl0YWJsZSB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDE4MHB4O1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0O1xuICAgICAgICB1c2VyLXNlbGVjdDogdGV4dDtcbiAgICAgIH1cbiAgICAgIC5lZGl0YWJsZS5pcy1lbXB0eTo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogYXR0cihkYXRhLXBsYWNlaG9sZGVyKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIH1cbiAgICAgIC5hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICB9XG4gICAgICAuYWN0aW9ucy1zcGFjZXIge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuICAgICAgLmljb24tYnRuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB3aWR0aDogMzRweDtcbiAgICAgICAgaGVpZ2h0OiAzNHB4O1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgfVxuICAgICAgLmljb24tYnRuOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgIH1cbiAgICAgIC5zZW5kLWJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDM0cHg7XG4gICAgICAgIGhlaWdodDogMzRweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeS1jb250cmFzdCwgI2ZmZik7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMXMgZWFzZTtcbiAgICAgIH1cbiAgICAgIC5zZW5kLWJ0bjphY3RpdmUge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTIpO1xuICAgICAgfVxuICAgICAgLmljb24tYnRuLmRhbmdlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLCAjZWI0NDVhKTtcbiAgICAgIH1cbiAgICAgIC5hdWRpby1jaGlwIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiA0cHggNnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc3RlcC0xMDAsIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4xKSk7XG4gICAgICB9XG4gICAgICAuYXVkaW8tY2hpcCBhdWRpbyB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGhlaWdodDogMzZweDtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgLnRodW1iLXJlbW92ZS5pbmxpbmUge1xuICAgICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAucmVjLWJhciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCAjZjRmNWY4KTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgICB9XG4gICAgICAucmVjLWRvdCB7XG4gICAgICAgIHdpZHRoOiAxMHB4O1xuICAgICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWRhbmdlciwgI2ViNDQ1YSk7XG4gICAgICAgIGFuaW1hdGlvbjogcmVjLXB1bHNlIDEuMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgICB9XG4gICAgICAucmVjLXRpbWUge1xuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgIH1cbiAgICAgIC5yZWMtc3BhY2VyIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cbiAgICAgIEBrZXlmcmFtZXMgcmVjLXB1bHNlIHtcbiAgICAgICAgMCUsXG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICAgICAgNTAlIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDaGF0Q29tcG9zZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIG1vZGFsID0gaW5qZWN0KE1vZGFsU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IG1heExlbmd0aCA9IGlucHV0PG51bWJlcj4oNDAwMCk7XG4gIHJlYWRvbmx5IHJlcGx5aW5nVG8gPSBpbnB1dDxNZXNzYWdlUmVwbHlUbyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBzaG93QXR0YWNoID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IHNob3dNaWMgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICByZWFkb25seSBzZW5kID0gb3V0cHV0PENoYXRDb21wb3NlclNlbmRFdmVudD4oKTtcbiAgcmVhZG9ubHkgdHlwaW5nID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IHZvaWNlID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IGNhbmNlbFJlcGx5ID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlZGl0YWJsZVJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2VkaXRhYmxlJyk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJvZHkgPSBzaWduYWwoJycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGVuZGluZyA9IHNpZ25hbDxQZW5kaW5nQXR0YWNobWVudFtdPihbXSk7XG4gIHByaXZhdGUgcGVuZGluZ0lkID0gMDtcblxuICAvLyBHcmFiYWNpw7NuIGRlIGF1ZGlvIChNZWRpYVJlY29yZGVyKS5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlY29yZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVjU2Vjb25kcyA9IHNpZ25hbCgwKTtcbiAgcHJpdmF0ZSByZWNvcmRlcj86IE1lZGlhUmVjb3JkZXI7XG4gIHByaXZhdGUgcmVjU3RyZWFtPzogTWVkaWFTdHJlYW07XG4gIHByaXZhdGUgcmVjQ2h1bmtzOiBCbG9iW10gPSBbXTtcbiAgcHJpdmF0ZSByZWNUaW1lcj86IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVjVGltZUxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHMgPSB0aGlzLnJlY1NlY29uZHMoKTtcbiAgICBjb25zdCBtbSA9IFN0cmluZyhNYXRoLmZsb29yKHMgLyA2MCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3Qgc3MgPSBTdHJpbmcocyAlIDYwKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBgJHttbX06JHtzc31gO1xuICB9KTtcblxuICBwcml2YXRlIGxhc3RUeXBpbmdFbWl0ID0gMDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnQ2hhdENvbXBvc2VyJywgQ0hBVF9DT01QT1NFUl9JMThOKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBjYW5TZW5kID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB0ID0gdGhpcy5ib2R5KCkudHJpbSgpO1xuICAgIHJldHVybiAodC5sZW5ndGggPiAwICYmIHQubGVuZ3RoIDw9IHRoaXMubWF4TGVuZ3RoKCkpIHx8IHRoaXMucGVuZGluZygpLmxlbmd0aCA+IDA7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBwbGFjZWhvbGRlclRleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcigpIHx8IHRoaXMuaTE4bi50KCdwbGFjZWhvbGRlcicsICdDaGF0Q29tcG9zZXInKTtcbiAgfSk7XG5cbiAgLyoqIExlZSBlbCB0ZXh0byBkZWwgY29udGVudGVkaXRhYmxlIGEgbGEgc2lnbmFsIGBib2R5YC4gKi9cbiAgcHJvdGVjdGVkIHN5bmNCb2R5KCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy5lZGl0YWJsZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgIC8vIGlubmVyVGV4dCBjb25zZXJ2YSBsb3Mgc2FsdG9zIGRlIGzDrW5lYTsgcXVpdGEgZWwgXFxuIGZpbmFsIHF1ZSBlbCBuYXZlZ2Fkb3IgYWdyZWdhLlxuICAgIGNvbnN0IHRleHQgPSAoZWw/LmlubmVyVGV4dCA/PyAnJykucmVwbGFjZSgvXFxuJC8sICcnKTtcbiAgICB0aGlzLmJvZHkuc2V0KHRleHQpO1xuICAgIHRoaXMuZW1pdFR5cGluZ0RlYm91bmNlZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5vblNlbmQoKTtcbiAgICB9XG4gIH1cblxuICAvKiogUGVnYXI6IHRleHRvIHBsYW5vIChzaW4gZm9ybWF0bykgKyBpbcOhZ2VuZXMgZGVsIHBvcnRhcGFwZWxlcy4gKi9cbiAgcHJvdGVjdGVkIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBkYXRhID0gZXZlbnQuY2xpcGJvYXJkRGF0YTtcbiAgICBpZiAoIWRhdGEpIHJldHVybjtcblxuICAgIC8vIEltw6FnZW5lcyAoY2FwdHVyYXMgLyBjb3BpYXIgaW1hZ2VuKS5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgQXJyYXkuZnJvbShkYXRhLml0ZW1zKSkge1xuICAgICAgaWYgKGl0ZW0udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICBjb25zdCBmaWxlID0gaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgaWYgKGZpbGUpIHRoaXMuYWRkUGVuZGluZyhmaWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUZXh0byBwbGFubyBpbnNlcnRhZG8gZW4gZWwgY2FyZXQgKGV2aXRhIHBlZ2FyIEhUTUwgY29uIGVzdGlsb3MpLlxuICAgIGNvbnN0IHRleHQgPSBkYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcbiAgICBpZiAodGV4dCkge1xuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgdGV4dCk7XG4gICAgfVxuICAgIHRoaXMuc3luY0JvZHkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblNlbmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblNlbmQoKSkgcmV0dXJuO1xuICAgIGNvbnN0IGZpbGVzID0gdGhpcy5wZW5kaW5nKCkubWFwKHAgPT4gcC5maWxlKTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5ib2R5KCkudHJpbSgpO1xuICAgIHRoaXMuc2VuZC5lbWl0KHsgdGV4dCwgZmlsZXMgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGF0dCBvZiB0aGlzLnBlbmRpbmcoKSkge1xuICAgICAgaWYgKGF0dC51cmwpIFVSTC5yZXZva2VPYmplY3RVUkwoYXR0LnVybCk7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZy5zZXQoW10pO1xuICAgIHRoaXMuY2xlYXJFZGl0YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckVkaXRhYmxlKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy5lZGl0YWJsZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChlbCkgZWwuaW5uZXJUZXh0ID0gJyc7XG4gICAgdGhpcy5ib2R5LnNldCgnJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25GaWxlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzPy5bMF07XG4gICAgaWYgKGZpbGUpIHRoaXMuYWRkUGVuZGluZyhmaWxlKTtcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQZW5kaW5nKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICBjb25zdCBraW5kOiBQZW5kaW5nS2luZCA9IGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKVxuICAgICAgPyAnaW1hZ2UnXG4gICAgICA6IGZpbGUudHlwZS5zdGFydHNXaXRoKCdhdWRpby8nKVxuICAgICAgICA/ICdhdWRpbydcbiAgICAgICAgOiAnZmlsZSc7XG4gICAgY29uc3QgdXJsID0ga2luZCA9PT0gJ2ZpbGUnID8gdW5kZWZpbmVkIDogVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcbiAgICB0aGlzLnBlbmRpbmcudXBkYXRlKGFyciA9PiBbLi4uYXJyLCB7IGlkOiB0aGlzLnBlbmRpbmdJZCsrLCBmaWxlLCB1cmwsIGtpbmQgfV0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZVBlbmRpbmcoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZy51cGRhdGUoYXJyID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gYXJyLmZpbmQoYSA9PiBhLmlkID09PSBpZCk7XG4gICAgICBpZiAoZm91bmQ/LnVybCkgVVJMLnJldm9rZU9iamVjdFVSTChmb3VuZC51cmwpO1xuICAgICAgcmV0dXJuIGFyci5maWx0ZXIoYSA9PiBhLmlkICE9PSBpZCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogQWJyZSBlbCBhZGp1bnRvIHN0YWdlZCBlbiBlbCB2aXNvciBkZSBtZWRpb3MgKGltYWdlbiBmdWxsIC8gZGVzY2FyZ2EpLiAqL1xuICBwcm90ZWN0ZWQgdmlld0F0dGFjaG1lbnQoYXR0OiBQZW5kaW5nQXR0YWNobWVudCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbC5vcGVuKHtcbiAgICAgIGNvbXBvbmVudDogTWVkaWFWaWV3ZXJNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7IHVybDogYXR0LnVybCwgbmFtZTogYXR0LmZpbGUubmFtZSwgbWltZVR5cGU6IGF0dC5maWxlLnR5cGUgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFR5cGluZ0RlYm91bmNlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBpZiAobm93IC0gdGhpcy5sYXN0VHlwaW5nRW1pdCA+IDIwMDApIHtcbiAgICAgIHRoaXMubGFzdFR5cGluZ0VtaXQgPSBub3c7XG4gICAgICB0aGlzLnR5cGluZy5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSA4pSAIEdyYWJhY2nDs24gZGUgYXVkaW8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBwaWNrQXVkaW9NaW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IFsnYXVkaW8vd2VibTtjb2RlY3M9b3B1cycsICdhdWRpby93ZWJtJywgJ2F1ZGlvL21wNCddO1xuICAgIGNvbnN0IE1SID0gKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgTWVkaWFSZWNvcmRlcj86IHR5cGVvZiBNZWRpYVJlY29yZGVyIH0pLk1lZGlhUmVjb3JkZXI7XG4gICAgaWYgKCFNUj8uaXNUeXBlU3VwcG9ydGVkKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGNhbmRpZGF0ZXMuZmluZChjID0+IE1SLmlzVHlwZVN1cHBvcnRlZChjKSkgPz8gJyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc3RhcnRSZWNvcmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMucmVjb3JkaW5nKCkpIHJldHVybjtcbiAgICBpZiAoIW5hdmlnYXRvci5tZWRpYURldmljZXM/LmdldFVzZXJNZWRpYSB8fCAhKCdNZWRpYVJlY29yZGVyJyBpbiB3aW5kb3cpKSB7XG4gICAgICB0aGlzLnZvaWNlLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7XG4gICAgICB0aGlzLnJlY1N0cmVhbSA9IHN0cmVhbTtcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gdGhpcy5waWNrQXVkaW9NaW1lKCk7XG4gICAgICB0aGlzLnJlY29yZGVyID0gbmV3IE1lZGlhUmVjb3JkZXIoc3RyZWFtLCBtaW1lVHlwZSA/IHsgbWltZVR5cGUgfSA6IHVuZGVmaW5lZCk7XG4gICAgICBjb25zb2xlLmxvZygnW0NoYXRDb21wb3Nlcl0gcmVjb3JkaW5nIHN0YXJ0Jywge1xuICAgICAgICBwaWNrZWQ6IG1pbWVUeXBlIHx8ICcoZGVmYXVsdCknLFxuICAgICAgICByZWNvcmRlck1pbWVUeXBlOiB0aGlzLnJlY29yZGVyLm1pbWVUeXBlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlY0NodW5rcyA9IFtdO1xuICAgICAgdGhpcy5yZWNvcmRlci5vbmRhdGFhdmFpbGFibGUgPSBlID0+IHtcbiAgICAgICAgaWYgKGUuZGF0YS5zaXplID4gMCkgdGhpcy5yZWNDaHVua3MucHVzaChlLmRhdGEpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucmVjb3JkZXIuc3RhcnQoKTtcbiAgICAgIHRoaXMucmVjb3JkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMucmVjU2Vjb25kcy5zZXQoMCk7XG4gICAgICB0aGlzLnJlY1RpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5yZWNTZWNvbmRzLnVwZGF0ZShzID0+IHMgKyAxKSwgMTAwMCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKiogUGFyYSBsYSBncmFiYWNpw7NuIHkgbGEgc3RhZ2VhIGNvbW8gYWRqdW50byBwZW5kaWVudGUgKGNvbiBwcmV2aWV3IGRlIGF1ZGlvKS4gKi9cbiAgcHJvdGVjdGVkIGZpbmlzaFJlY29yZGluZygpOiB2b2lkIHtcbiAgICBjb25zdCByZWMgPSB0aGlzLnJlY29yZGVyO1xuICAgIGlmICghcmVjKSB7XG4gICAgICB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVjLm9uc3RvcCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSByZWMubWltZVR5cGUgfHwgJ2F1ZGlvL3dlYm0nO1xuICAgICAgY29uc3QgZHVyYXRpb25NcyA9IHRoaXMucmVjU2Vjb25kcygpICogMTAwMDtcbiAgICAgIGxldCBibG9iID0gbmV3IEJsb2IodGhpcy5yZWNDaHVua3MsIHsgdHlwZSB9KTtcblxuICAgICAgLy8gTWVkaWFSZWNvcmRlciBlc2NyaWJlIFdlYk0gU0lOIGVsIGhlYWRlciBkZSBkdXJhY2nDs24gKFNlZ21lbnQvRHVyYXRpb24pIOKGklxuICAgICAgLy8gZWwgPGF1ZGlvPiBsbyByZWNoYXphIGNvbiBTUkNfTk9UX1NVUFBPUlRFRCBhdW5xdWUgZWwgY29kZWMgZXN0w6kgc29wb3J0YWRvLlxuICAgICAgLy8gZml4LXdlYm0tZHVyYXRpb24gcGFyY2hlYSBlbCBoZWFkZXIgY29uIGxhIGR1cmFjacOzbiByZWFsIOKGkiByZXByb2R1Y2libGUuXG4gICAgICBpZiAodHlwZS5pbmNsdWRlcygnd2VibScpICYmIGJsb2Iuc2l6ZSA+IDApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBibG9iID0gYXdhaXQgZml4V2VibUR1cmF0aW9uKGJsb2IsIGR1cmF0aW9uTXMsIHsgbG9nZ2VyOiBmYWxzZSB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbQ2hhdENvbXBvc2VyXSBmaXhXZWJtRHVyYXRpb24gZmFsbMOzLCBzZSB1c2EgZWwgYmxvYiBjcnVkbycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZXh0ID0gdHlwZS5pbmNsdWRlcygnbXA0JykgPyAnbTRhJyA6ICd3ZWJtJztcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGBhdWRpby0ke3RoaXMucmVjU2Vjb25kcygpfXMuJHtleHR9YCwgeyB0eXBlIH0pO1xuICAgICAgY29uc29sZS5sb2coJ1tDaGF0Q29tcG9zZXJdIGF1ZGlvIHJlY29yZGVkJywge1xuICAgICAgICB0eXBlLFxuICAgICAgICBzaXplOiBibG9iLnNpemUsXG4gICAgICAgIGNodW5rczogdGhpcy5yZWNDaHVua3MubGVuZ3RoLFxuICAgICAgICBjYW5QbGF5V2VibTogdGhpcy5jYW5QbGF5KCdhdWRpby93ZWJtJyksXG4gICAgICAgIGNhblBsYXlNcDQ6IHRoaXMuY2FuUGxheSgnYXVkaW8vbXA0JyksXG4gICAgICB9KTtcbiAgICAgIGlmIChibG9iLnNpemUgPiAwKSB0aGlzLmFkZFBlbmRpbmcoZmlsZSk7XG4gICAgICB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICB9O1xuICAgIHJlYy5zdG9wKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuY2VsUmVjb3JkaW5nKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlYyA9IHRoaXMucmVjb3JkZXI7XG4gICAgaWYgKHJlYykgcmVjLm9uc3RvcCA9ICgpID0+IHRoaXMuY2xlYW51cFJlY29yZGluZygpO1xuICAgIHRyeSB7XG4gICAgICByZWM/LnN0b3AoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuY2xlYW51cFJlY29yZGluZygpO1xuICAgIH1cbiAgICBpZiAoIXJlYykgdGhpcy5jbGVhbnVwUmVjb3JkaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBSZWNvcmRpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjVGltZXIpIGNsZWFySW50ZXJ2YWwodGhpcy5yZWNUaW1lcik7XG4gICAgdGhpcy5yZWNUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlY1N0cmVhbT8uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0ID0+IHQuc3RvcCgpKTtcbiAgICB0aGlzLnJlY1N0cmVhbSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlY29yZGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVjQ2h1bmtzID0gW107XG4gICAgdGhpcy5yZWNvcmRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnJlY1NlY29uZHMuc2V0KDApO1xuICB9XG5cbiAgLyoqIERpYWduw7NzdGljbzogZWwgbmF2ZWdhZG9yIG5vIHB1ZG8gcmVwcm9kdWNpciBlbCBhZGp1bnRvIGRlIGF1ZGlvLiAqL1xuICBwcm90ZWN0ZWQgb25BdWRpb0Vycm9yKHdoZXJlOiBzdHJpbmcsIGZpbGU6IEZpbGUsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxBdWRpb0VsZW1lbnQ7XG4gICAgY29uc3QgZXJyID0gZWwuZXJyb3I7XG4gICAgY29uc3QgY29kZXM6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgICAxOiAnQUJPUlRFRCcsXG4gICAgICAyOiAnTkVUV09SSycsXG4gICAgICAzOiAnREVDT0RFJyxcbiAgICAgIDQ6ICdTUkNfTk9UX1NVUFBPUlRFRCcsXG4gICAgfTtcbiAgICBjb25zb2xlLmVycm9yKCdbQ2hhdENvbXBvc2VyXSBhdWRpbyBwbGF5IGVycm9yJywge1xuICAgICAgd2hlcmUsXG4gICAgICBmaWxlVHlwZTogZmlsZS50eXBlLFxuICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgIGNvZGU6IGVycj8uY29kZSxcbiAgICAgIHJlYXNvbjogZXJyID8gY29kZXNbZXJyLmNvZGVdIDogJ3Vua25vd24nLFxuICAgICAgbWVzc2FnZTogZXJyPy5tZXNzYWdlLFxuICAgICAgY2FuUGxheVRoaXNUeXBlOiB0aGlzLmNhblBsYXkoZmlsZS50eXBlKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkF1ZGlvTG9hZGVkKHdoZXJlOiBzdHJpbmcsIGZpbGU6IEZpbGUsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxBdWRpb0VsZW1lbnQ7XG4gICAgY29uc29sZS5sb2coJ1tDaGF0Q29tcG9zZXJdIGF1ZGlvIGxvYWRlZG1ldGFkYXRhJywge1xuICAgICAgd2hlcmUsXG4gICAgICBmaWxlVHlwZTogZmlsZS50eXBlLFxuICAgICAgZHVyYXRpb246IGVsLmR1cmF0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIMK/RWwgbmF2ZWdhZG9yIGRlY2xhcmEgcXVlIHB1ZWRlIHJlcHJvZHVjaXIgZXN0ZSB0aXBvPyAnJyAvICdtYXliZScgLyAncHJvYmFibHknLiAqL1xuICBwcml2YXRlIGNhblBsYXkodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJykuY2FuUGxheVR5cGUodHlwZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICBmb3IgKGNvbnN0IGF0dCBvZiB0aGlzLnBlbmRpbmcoKSkge1xuICAgICAgaWYgKGF0dC51cmwpIFVSTC5yZXZva2VPYmplY3RVUkwoYXR0LnVybCk7XG4gICAgfVxuICB9XG5cbiAgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgJ0NoYXRDb21wb3NlcicpO1xuICB9XG59XG4iXX0=
|
|
662
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1jb21wb3Nlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2NoYXQtY29tcG9zZXIvY2hhdC1jb21wb3Nlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBeUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixjQUFjLEVBQ2QsWUFBWSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxlQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQzs7QUFFNUcsUUFBUSxDQUFDO0lBQ1AsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osZUFBZTtJQUNmLFVBQVU7SUFDVixZQUFZO0lBQ1osY0FBYztJQUNkLFlBQVk7Q0FDYixDQUFDLENBQUM7QUFFSCxNQUFNLGtCQUFrQixHQUFHO0lBQ3pCLEVBQUUsRUFBRTtRQUNGLFdBQVcsRUFBRSxvQkFBb0I7UUFDakMsSUFBSSxFQUFFLFFBQVE7UUFD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VyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxVQUFVO1FBQ1osQ0FBQztRQUNELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakMsSUFBSSxHQUFHLENBQUMsR0FBRztnQkFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUVELENBQUMsQ0FBQyxHQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDMUMsQ0FBQzsrR0FqWVUscUJBQXFCO21HQUFyQixxQkFBcUIsK3RDQXBXdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFIVCx5MkhBdEhTLFlBQVksK0JBQUUsT0FBTzs7NEZBcVdwQixxQkFBcUI7a0JBeFdqQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQ3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxSFQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7XG4gIGFkZE91dGxpbmUsXG4gIGNoZWNrbWFya091dGxpbmUsXG4gIGNsb3NlT3V0bGluZSxcbiAgZG9jdW1lbnRPdXRsaW5lLFxuICBtaWNPdXRsaW5lLFxuICBwdWxzZU91dGxpbmUsXG4gIGFycm93VXBPdXRsaW5lLFxuICB0cmFzaE91dGxpbmUsXG59IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuaW1wb3J0IGZpeFdlYm1EdXJhdGlvbiBmcm9tICdmaXgtd2VibS1kdXJhdGlvbic7XG5cbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBNZXNzYWdlUmVwbHlUbyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NoYXQvdHlwZXMnO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kYWwvbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBNZWRpYVZpZXdlck1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL21lZGlhLXZpZXdlci1tb2RhbC9tZWRpYS12aWV3ZXItbW9kYWwuY29tcG9uZW50JztcblxuYWRkSWNvbnMoe1xuICBhZGRPdXRsaW5lLFxuICBjaGVja21hcmtPdXRsaW5lLFxuICBjbG9zZU91dGxpbmUsXG4gIGRvY3VtZW50T3V0bGluZSxcbiAgbWljT3V0bGluZSxcbiAgcHVsc2VPdXRsaW5lLFxuICBhcnJvd1VwT3V0bGluZSxcbiAgdHJhc2hPdXRsaW5lLFxufSk7XG5cbmNvbnN0IENIQVRfQ09NUE9TRVJfSTE4TiA9IHtcbiAgZXM6IHtcbiAgICBwbGFjZWhvbGRlcjogJ0VzY3JpYmUgdW4gbWVuc2FqZScsXG4gICAgc2VuZDogJ0VudmlhcicsXG4gICAgYXR0YWNoOiAnQWRqdW50YXInLFxuICAgIHZvaWNlOiAnTWVuc2FqZSBkZSB2b3onLFxuICAgIGRpY3RhdGU6ICdEaWN0YXInLFxuICAgIGxpc3RlbmluZzogJ0VzY3VjaGFuZG/igKYnLFxuICAgIGRvbmU6ICdMaXN0bycsXG4gICAgcmVwbHlpbmdUbzogJ1Jlc3BvbmRpZW5kbyBhJyxcbiAgICBjYW5jZWw6ICdDYW5jZWxhcicsXG4gICAgcmVtb3ZlOiAnUXVpdGFyJyxcbiAgfSxcbiAgZW46IHtcbiAgICBwbGFjZWhvbGRlcjogJ1dyaXRlIGEgbWVzc2FnZScsXG4gICAgc2VuZDogJ1NlbmQnLFxuICAgIGF0dGFjaDogJ0F0dGFjaCcsXG4gICAgdm9pY2U6ICdWb2ljZSBtZXNzYWdlJyxcbiAgICBkaWN0YXRlOiAnRGljdGF0ZScsXG4gICAgbGlzdGVuaW5nOiAnTGlzdGVuaW5n4oCmJyxcbiAgICBkb25lOiAnRG9uZScsXG4gICAgcmVwbHlpbmdUbzogJ1JlcGx5aW5nIHRvJyxcbiAgICBjYW5jZWw6ICdDYW5jZWwnLFxuICAgIHJlbW92ZTogJ1JlbW92ZScsXG4gIH0sXG59O1xuXG4vKiogVGlwb3MgbcOtbmltb3MgZGUgbGEgV2ViIFNwZWVjaCBBUEkgKG5vIGVzdMOhbiBlbiBsaWIuZG9tIGVzdMOhbmRhcikuICovXG5pbnRlcmZhY2UgU3BlZWNoUmVjb2duaXRpb25MaWtlIHtcbiAgbGFuZzogc3RyaW5nO1xuICBjb250aW51b3VzOiBib29sZWFuO1xuICBpbnRlcmltUmVzdWx0czogYm9vbGVhbjtcbiAgc3RhcnQoKTogdm9pZDtcbiAgc3RvcCgpOiB2b2lkO1xuICBhYm9ydCgpOiB2b2lkO1xuICBvbnJlc3VsdDpcbiAgICB8ICgoZXZlbnQ6IHsgcmVzdWx0SW5kZXg6IG51bWJlcjsgcmVzdWx0czogQXJyYXlMaWtlPHsgMDogeyB0cmFuc2NyaXB0OiBzdHJpbmcgfTsgaXNGaW5hbDogYm9vbGVhbiB9PiB9KSA9PiB2b2lkKVxuICAgIHwgbnVsbDtcbiAgb25lbmQ6ICgoKSA9PiB2b2lkKSB8IG51bGw7XG4gIG9uZXJyb3I6ICgoZXZlbnQ6IHsgZXJyb3I6IHN0cmluZyB9KSA9PiB2b2lkKSB8IG51bGw7XG59XG5cbnR5cGUgUGVuZGluZ0tpbmQgPSAnaW1hZ2UnIHwgJ2F1ZGlvJyB8ICdmaWxlJztcblxuaW50ZXJmYWNlIFBlbmRpbmdBdHRhY2htZW50IHtcbiAgaWQ6IG51bWJlcjtcbiAgZmlsZTogRmlsZTtcbiAgdXJsPzogc3RyaW5nO1xuICBraW5kOiBQZW5kaW5nS2luZDtcbn1cblxuLyoqIEV2ZW50byBkZSBlbnbDrW86IHRleHRvIChjYXB0aW9uKSArIGFkanVudG9zIHN0YWdlZC4gZmlsZXMgdmFjw61vID0+IHNvbG8gdGV4dG8uICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRDb21wb3NlclNlbmRFdmVudCB7XG4gIHRleHQ6IHN0cmluZztcbiAgZmlsZXM6IEZpbGVbXTtcbn1cblxuLyoqXG4gKiB2YWwtY2hhdC1jb21wb3NlciDigJQgYmFycmEgZGUgcmVkYWNjacOzbiBlc3RpbG8gTm90aW9uL0NsYXVkZSAoZnVsbCBjdXN0b20pLlxuICpcbiAqIEVsIGVkaXRvciBlcyB1biBgY29udGVudGVkaXRhYmxlYCAoTk8gaW9uLXRleHRhcmVhKTogY3JlY2UgaGFzdGEgdW4gbWF4LWhlaWdodCxcbiAqIHNvcG9ydGEgcGVnYXIgdGV4dG8gcGxhbm8gZSBpbcOhZ2VuZXMgZGVsIHBvcnRhcGFwZWxlcywgRW50ZXIgZW52w61hIC8gU2hpZnQrRW50ZXJcbiAqIHNhbHRhIGzDrW5lYS4gRGViYWpvLCB1bmEgZmlsYSBkZSBhY2Npb25lcyBwcm9waWFzOiBhZGp1bnRhciAoKyksIG1pYy9lbnZpYXIuXG4gKiBMb3MgYWRqdW50b3MgKGJvdMOzbiAvIHBlZ2FyIC8gYXVkaW8gZ3JhYmFkbykgc2UgYWN1bXVsYW4gY29tbyBtaW5pYXR1cmFzIGRlXG4gKiBQUkVWSUVXIHkgc2UgbWFuZGFuIGVuIFVOIHNvbG8gZXZlbnRvIGBzZW5kIHt0ZXh0LCBmaWxlc31gIChjYXB0aW9uICsgYWRqdW50b3MpLlxuICpcbiAqIFBlbnNhZG8gcGFyYSB2aXZpciBlbiB1biBjb250ZW5lZG9yIGZpam8gYWwgZm9uZG8gZGVsIHZpZXdwb3J0IChlbCBjb25zdW1lclxuICogYW5jbGEgbGEgcG9zaWNpw7NuKS4gTm8gaW5jbHV5ZSBlbW9qaSBwaWNrZXIgKGVsIHRlY2xhZG8gZGVsIHNpc3RlbWEgbG8gdHJhZSkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1jaGF0LWNvbXBvc2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uSWNvbl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImNvbXBvc2VyXCI+XG4gICAgICBAaWYgKHJlcGx5aW5nVG8oKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicmVwbHktYmFyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlcGx5LWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVwbHktbmFtZVwiPnt7IHJlcGx5aW5nVG8oKSEuc2VuZGVyTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVwbHktYm9keVwiPnt7IHJlcGx5aW5nVG8oKSEuYm9keSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG5cIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NhbmNlbCcpXCIgKGNsaWNrKT1cImNhbmNlbFJlcGx5LmVtaXQoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocmVjb3JkaW5nKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlYy1iYXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4gZGFuZ2VyXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjYW5jZWwnKVwiIChjbGljayk9XCJjYW5jZWxSZWNvcmRpbmcoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ0cmFzaC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlYy1kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWMtdGltZVwiPnt7IHJlY1RpbWVMYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVjLXNwYWNlclwiPjwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VuZC1idG5cIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2RvbmUnKVwiIChjbGljayk9XCJmaW5pc2hSZWNvcmRpbmcoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGVja21hcmstb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGVsbFwiPlxuICAgICAgICAgIEBpZiAocGVuZGluZygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZW5kaW5nLXJvd1wiPlxuICAgICAgICAgICAgICBAZm9yIChhdHQgb2YgcGVuZGluZygpOyB0cmFjayBhdHQuaWQpIHtcbiAgICAgICAgICAgICAgICBAaWYgKGF0dC5raW5kID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXVkaW8tY2hpcFwiPlxuICAgICAgICAgICAgICAgICAgICA8YXVkaW9cbiAgICAgICAgICAgICAgICAgICAgICBjb250cm9sc1xuICAgICAgICAgICAgICAgICAgICAgIHByZWxvYWQ9XCJtZXRhZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJhdHQudXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25BdWRpb0Vycm9yKCdwcmV2aWV3JywgYXR0LmZpbGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIChsb2FkZWRtZXRhZGF0YSk9XCJvbkF1ZGlvTG9hZGVkKCdwcmV2aWV3JywgYXR0LmZpbGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hdWRpbz5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRodW1iLXJlbW92ZSBpbmxpbmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ3JlbW92ZScpXCIgKGNsaWNrKT1cInJlbW92ZVBlbmRpbmcoYXR0LmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGh1bWJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmlsZV09XCJhdHQua2luZCA9PT0gJ2ZpbGUnXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdBdHRhY2htZW50KGF0dClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwidmlld0F0dGFjaG1lbnQoYXR0KVwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoYXR0LmtpbmQgPT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiYXR0LnVybFwiIFthbHRdPVwiYXR0LmZpbGUubmFtZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiZG9jdW1lbnQtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aHVtYi1uYW1lXCI+e3sgYXR0LmZpbGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0aHVtYi1yZW1vdmVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgncmVtb3ZlJylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlbW92ZVBlbmRpbmcoYXR0LmlkKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2VkaXRhYmxlXG4gICAgICAgICAgICBjbGFzcz1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgIFtjbGFzcy5pcy1lbXB0eV09XCIhYm9keSgpXCJcbiAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIlxuICAgICAgICAgICAgcm9sZT1cInRleHRib3hcIlxuICAgICAgICAgICAgYXJpYS1tdWx0aWxpbmU9XCJ0cnVlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtcGxhY2Vob2xkZXJdPVwiZGljdGF0aW5nKCkgPyB0KCdsaXN0ZW5pbmcnKSA6IHBsYWNlaG9sZGVyVGV4dCgpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicGxhY2Vob2xkZXJUZXh0KClcIlxuICAgICAgICAgICAgKGlucHV0KT1cInN5bmNCb2R5KClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9ucy1zcGFjZXJcIj48L3NwYW4+XG4gICAgICAgICAgICBAaWYgKHNob3dBdHRhY2goKSkge1xuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJpY29uLWJ0blwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnYXR0YWNoJylcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFkZC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBoaWRkZW4gKGNoYW5nZSk9XCJvbkZpbGUoJGV2ZW50KVwiIGFjY2VwdD1cImltYWdlLyosYXBwbGljYXRpb24vcGRmXCIgLz5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoc2hvd1ZvaWNlTWVzc2FnZSgpKSB7XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0blwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgndm9pY2UnKVwiIChjbGljayk9XCJzdGFydFJlY29yZGluZygpXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJwdWxzZS1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHNob3dNaWMoKSAmJiBkaWN0YXRpb25TdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1idG4gZGljdGF0ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJkaWN0YXRpbmcoKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdkaWN0YXRlJylcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEaWN0YXRpb24oKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cIm1pYy1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGNhblNlbmQoKSkge1xuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VuZC1idG5cIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ3NlbmQnKVwiIChjbGljayk9XCJvblNlbmQoKVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiYXJyb3ctdXAtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIC5jb21wb3NlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBwYWRkaW5nOiA4cHggMTBweCBjYWxjKDhweCArIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwcHgpKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IsICNmZmYpO1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICB9XG4gICAgICAucmVwbHktYmFyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIHBhZGRpbmc6IDZweCAxMHB4O1xuICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc3RlcC0xMDAsIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4xKSk7XG4gICAgICB9XG4gICAgICAucmVwbHktY29udGVudCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICB9XG4gICAgICAucmVwbHktbmFtZSB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICB9XG4gICAgICAucmVwbHktYm9keSB7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAucGVuZGluZy1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBwYWRkaW5nOiAycHggNHB4O1xuICAgICAgfVxuICAgICAgLnRodW1iIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB3aWR0aDogNzJweDtcbiAgICAgICAgaGVpZ2h0OiA3MnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc3RlcC0xMDAsIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4xKSk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICAgIC50aHVtYiBpbWcge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgIH1cbiAgICAgIC50aHVtYi5maWxlIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgICBwYWRkaW5nOiA0cHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjOTI5NDljKTtcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgICB9XG4gICAgICAudGh1bWItbmFtZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC41NjI1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4xO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IsICMwMDApO1xuICAgICAgfVxuICAgICAgLnRodW1iLXJlbW92ZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAycHg7XG4gICAgICAgIHJpZ2h0OiAycHg7XG4gICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICB9XG4gICAgICAvKiBTaGVsbCBlc3RpbG8gTm90aW9uOiBlZGl0YWJsZSBhcnJpYmEsIGZpbGEgZGUgYWNjaW9uZXMgYWJham8uICovXG4gICAgICAuc2hlbGwge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCAjZjRmNWY4KTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDI2cHg7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICAgIH1cbiAgICAgIC5lZGl0YWJsZSB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDE4MHB4O1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0O1xuICAgICAgICB1c2VyLXNlbGVjdDogdGV4dDtcbiAgICAgIH1cbiAgICAgIC5lZGl0YWJsZS5pcy1lbXB0eTo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogYXR0cihkYXRhLXBsYWNlaG9sZGVyKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIH1cbiAgICAgIC5hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICB9XG4gICAgICAuYWN0aW9ucy1zcGFjZXIge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuICAgICAgLmljb24tYnRuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB3aWR0aDogMzRweDtcbiAgICAgICAgaGVpZ2h0OiAzNHB4O1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgfVxuICAgICAgLmljb24tYnRuOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgIH1cbiAgICAgIC5pY29uLWJ0bi5kaWN0YXRlLmFjdGl2ZSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGFuaW1hdGlvbjogZGljdGF0ZS1wdWxzZSAxLjJzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgICAgfVxuICAgICAgQGtleWZyYW1lcyBkaWN0YXRlLXB1bHNlIHtcbiAgICAgICAgMCUsXG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICAgICAgNTAlIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC5zZW5kLWJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDM0cHg7XG4gICAgICAgIGhlaWdodDogMzRweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeS1jb250cmFzdCwgI2ZmZik7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMXMgZWFzZTtcbiAgICAgIH1cbiAgICAgIC5zZW5kLWJ0bjphY3RpdmUge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTIpO1xuICAgICAgfVxuICAgICAgLmljb24tYnRuLmRhbmdlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLCAjZWI0NDVhKTtcbiAgICAgIH1cbiAgICAgIC5hdWRpby1jaGlwIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiA0cHggNnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3Itc3RlcC0xMDAsIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4xKSk7XG4gICAgICB9XG4gICAgICAuYXVkaW8tY2hpcCBhdWRpbyB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGhlaWdodDogMzZweDtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgLnRodW1iLXJlbW92ZS5pbmxpbmUge1xuICAgICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAucmVjLWJhciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCAjZjRmNWY4KTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgICB9XG4gICAgICAucmVjLWRvdCB7XG4gICAgICAgIHdpZHRoOiAxMHB4O1xuICAgICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWRhbmdlciwgI2ViNDQ1YSk7XG4gICAgICAgIGFuaW1hdGlvbjogcmVjLXB1bHNlIDEuMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgICB9XG4gICAgICAucmVjLXRpbWUge1xuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgIH1cbiAgICAgIC5yZWMtc3BhY2VyIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cbiAgICAgIEBrZXlmcmFtZXMgcmVjLXB1bHNlIHtcbiAgICAgICAgMCUsXG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICAgICAgNTAlIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDaGF0Q29tcG9zZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIG1vZGFsID0gaW5qZWN0KE1vZGFsU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IG1heExlbmd0aCA9IGlucHV0PG51bWJlcj4oNDAwMCk7XG4gIHJlYWRvbmx5IHJlcGx5aW5nVG8gPSBpbnB1dDxNZXNzYWdlUmVwbHlUbyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBzaG93QXR0YWNoID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIC8qKiBCb3TDs24gZGUgZGljdGFkbyB2b3rihpJ0ZXh0byAoU3BlZWNoUmVjb2duaXRpb24pLiBOYXRpdm8gZW4gU2FmYXJpL2lPUyB5IENocm9tZS4gKi9cbiAgcmVhZG9ubHkgc2hvd01pYyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICAvKiogQm90w7NuIGRlIG1lbnNhamUgZGUgdm96IChncmFiYXIgY2xpcCkuIE9wdC1pbjogbGEgcmVwcm9kdWNjacOzbiBjcm9zcy1kZXZpY2VcbiAgICogIHJlcXVpZXJlIHRyYW5zY29kZSBzZXJ2ZXItc2lkZSAocGVuZGllbnRlKSwgcG9yIGVzbyBkZWZhdWx0IGZhbHNlLiAqL1xuICByZWFkb25seSBzaG93Vm9pY2VNZXNzYWdlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IHNlbmQgPSBvdXRwdXQ8Q2hhdENvbXBvc2VyU2VuZEV2ZW50PigpO1xuICByZWFkb25seSB0eXBpbmcgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgdm9pY2UgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgY2FuY2VsUmVwbHkgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGVkaXRhYmxlUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignZWRpdGFibGUnKTtcblxuICAvLyBEaWN0YWRvIHZveuKGknRleHRvIChXZWIgU3BlZWNoIEFQSSkuXG4gIHByb3RlY3RlZCByZWFkb25seSBkaWN0YXRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGljdGF0aW9uU3VwcG9ydGVkID0gISEoXG4gICAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgU3BlZWNoUmVjb2duaXRpb24/OiB1bmtub3duIH0pLlNwZWVjaFJlY29nbml0aW9uIHx8XG4gICAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgd2Via2l0U3BlZWNoUmVjb2duaXRpb24/OiB1bmtub3duIH0pLndlYmtpdFNwZWVjaFJlY29nbml0aW9uXG4gICk7XG4gIHByaXZhdGUgcmVjb2duaXRpb24/OiBTcGVlY2hSZWNvZ25pdGlvbkxpa2U7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJvZHkgPSBzaWduYWwoJycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGVuZGluZyA9IHNpZ25hbDxQZW5kaW5nQXR0YWNobWVudFtdPihbXSk7XG4gIHByaXZhdGUgcGVuZGluZ0lkID0gMDtcblxuICAvLyBHcmFiYWNpw7NuIGRlIGF1ZGlvIChNZWRpYVJlY29yZGVyKS5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlY29yZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVjU2Vjb25kcyA9IHNpZ25hbCgwKTtcbiAgcHJpdmF0ZSByZWNvcmRlcj86IE1lZGlhUmVjb3JkZXI7XG4gIHByaXZhdGUgcmVjU3RyZWFtPzogTWVkaWFTdHJlYW07XG4gIHByaXZhdGUgcmVjQ2h1bmtzOiBCbG9iW10gPSBbXTtcbiAgcHJpdmF0ZSByZWNUaW1lcj86IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVjVGltZUxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHMgPSB0aGlzLnJlY1NlY29uZHMoKTtcbiAgICBjb25zdCBtbSA9IFN0cmluZyhNYXRoLmZsb29yKHMgLyA2MCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3Qgc3MgPSBTdHJpbmcocyAlIDYwKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBgJHttbX06JHtzc31gO1xuICB9KTtcblxuICBwcml2YXRlIGxhc3RUeXBpbmdFbWl0ID0gMDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnQ2hhdENvbXBvc2VyJywgQ0hBVF9DT01QT1NFUl9JMThOKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBjYW5TZW5kID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB0ID0gdGhpcy5ib2R5KCkudHJpbSgpO1xuICAgIHJldHVybiAodC5sZW5ndGggPiAwICYmIHQubGVuZ3RoIDw9IHRoaXMubWF4TGVuZ3RoKCkpIHx8IHRoaXMucGVuZGluZygpLmxlbmd0aCA+IDA7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBwbGFjZWhvbGRlclRleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcigpIHx8IHRoaXMuaTE4bi50KCdwbGFjZWhvbGRlcicsICdDaGF0Q29tcG9zZXInKTtcbiAgfSk7XG5cbiAgLyoqIExlZSBlbCB0ZXh0byBkZWwgY29udGVudGVkaXRhYmxlIGEgbGEgc2lnbmFsIGBib2R5YC4gKi9cbiAgcHJvdGVjdGVkIHN5bmNCb2R5KCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy5lZGl0YWJsZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgIC8vIGlubmVyVGV4dCBjb25zZXJ2YSBsb3Mgc2FsdG9zIGRlIGzDrW5lYTsgcXVpdGEgZWwgXFxuIGZpbmFsIHF1ZSBlbCBuYXZlZ2Fkb3IgYWdyZWdhLlxuICAgIGNvbnN0IHRleHQgPSAoZWw/LmlubmVyVGV4dCA/PyAnJykucmVwbGFjZSgvXFxuJC8sICcnKTtcbiAgICB0aGlzLmJvZHkuc2V0KHRleHQpO1xuICAgIHRoaXMuZW1pdFR5cGluZ0RlYm91bmNlZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5vblNlbmQoKTtcbiAgICB9XG4gIH1cblxuICAvKiogUGVnYXI6IHRleHRvIHBsYW5vIChzaW4gZm9ybWF0bykgKyBpbcOhZ2VuZXMgZGVsIHBvcnRhcGFwZWxlcy4gKi9cbiAgcHJvdGVjdGVkIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBkYXRhID0gZXZlbnQuY2xpcGJvYXJkRGF0YTtcbiAgICBpZiAoIWRhdGEpIHJldHVybjtcblxuICAgIC8vIEltw6FnZW5lcyAoY2FwdHVyYXMgLyBjb3BpYXIgaW1hZ2VuKS5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgQXJyYXkuZnJvbShkYXRhLml0ZW1zKSkge1xuICAgICAgaWYgKGl0ZW0udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICBjb25zdCBmaWxlID0gaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgaWYgKGZpbGUpIHRoaXMuYWRkUGVuZGluZyhmaWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUZXh0byBwbGFubyBpbnNlcnRhZG8gZW4gZWwgY2FyZXQgKGV2aXRhIHBlZ2FyIEhUTUwgY29uIGVzdGlsb3MpLlxuICAgIGNvbnN0IHRleHQgPSBkYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcbiAgICBpZiAodGV4dCkge1xuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgdGV4dCk7XG4gICAgfVxuICAgIHRoaXMuc3luY0JvZHkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblNlbmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblNlbmQoKSkgcmV0dXJuO1xuICAgIGNvbnN0IGZpbGVzID0gdGhpcy5wZW5kaW5nKCkubWFwKHAgPT4gcC5maWxlKTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5ib2R5KCkudHJpbSgpO1xuICAgIHRoaXMuc2VuZC5lbWl0KHsgdGV4dCwgZmlsZXMgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGF0dCBvZiB0aGlzLnBlbmRpbmcoKSkge1xuICAgICAgaWYgKGF0dC51cmwpIFVSTC5yZXZva2VPYmplY3RVUkwoYXR0LnVybCk7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZy5zZXQoW10pO1xuICAgIHRoaXMuY2xlYXJFZGl0YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckVkaXRhYmxlKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy5lZGl0YWJsZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChlbCkgZWwuaW5uZXJUZXh0ID0gJyc7XG4gICAgdGhpcy5ib2R5LnNldCgnJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25GaWxlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzPy5bMF07XG4gICAgaWYgKGZpbGUpIHRoaXMuYWRkUGVuZGluZyhmaWxlKTtcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQZW5kaW5nKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICBjb25zdCBraW5kOiBQZW5kaW5nS2luZCA9IGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKVxuICAgICAgPyAnaW1hZ2UnXG4gICAgICA6IGZpbGUudHlwZS5zdGFydHNXaXRoKCdhdWRpby8nKVxuICAgICAgICA/ICdhdWRpbydcbiAgICAgICAgOiAnZmlsZSc7XG4gICAgY29uc3QgdXJsID0ga2luZCA9PT0gJ2ZpbGUnID8gdW5kZWZpbmVkIDogVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcbiAgICB0aGlzLnBlbmRpbmcudXBkYXRlKGFyciA9PiBbLi4uYXJyLCB7IGlkOiB0aGlzLnBlbmRpbmdJZCsrLCBmaWxlLCB1cmwsIGtpbmQgfV0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZVBlbmRpbmcoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZy51cGRhdGUoYXJyID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gYXJyLmZpbmQoYSA9PiBhLmlkID09PSBpZCk7XG4gICAgICBpZiAoZm91bmQ/LnVybCkgVVJMLnJldm9rZU9iamVjdFVSTChmb3VuZC51cmwpO1xuICAgICAgcmV0dXJuIGFyci5maWx0ZXIoYSA9PiBhLmlkICE9PSBpZCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogQWJyZSBlbCBhZGp1bnRvIHN0YWdlZCBlbiBlbCB2aXNvciBkZSBtZWRpb3MgKGltYWdlbiBmdWxsIC8gZGVzY2FyZ2EpLiAqL1xuICBwcm90ZWN0ZWQgdmlld0F0dGFjaG1lbnQoYXR0OiBQZW5kaW5nQXR0YWNobWVudCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbC5vcGVuKHtcbiAgICAgIGNvbXBvbmVudDogTWVkaWFWaWV3ZXJNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7IHVybDogYXR0LnVybCwgbmFtZTogYXR0LmZpbGUubmFtZSwgbWltZVR5cGU6IGF0dC5maWxlLnR5cGUgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFR5cGluZ0RlYm91bmNlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBpZiAobm93IC0gdGhpcy5sYXN0VHlwaW5nRW1pdCA+IDIwMDApIHtcbiAgICAgIHRoaXMubGFzdFR5cGluZ0VtaXQgPSBub3c7XG4gICAgICB0aGlzLnR5cGluZy5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSA4pSAIEdyYWJhY2nDs24gZGUgYXVkaW8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBwaWNrQXVkaW9NaW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IFsnYXVkaW8vd2VibTtjb2RlY3M9b3B1cycsICdhdWRpby93ZWJtJywgJ2F1ZGlvL21wNCddO1xuICAgIGNvbnN0IE1SID0gKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgTWVkaWFSZWNvcmRlcj86IHR5cGVvZiBNZWRpYVJlY29yZGVyIH0pLk1lZGlhUmVjb3JkZXI7XG4gICAgaWYgKCFNUj8uaXNUeXBlU3VwcG9ydGVkKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGNhbmRpZGF0ZXMuZmluZChjID0+IE1SLmlzVHlwZVN1cHBvcnRlZChjKSkgPz8gJyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc3RhcnRSZWNvcmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMucmVjb3JkaW5nKCkpIHJldHVybjtcbiAgICBpZiAoIW5hdmlnYXRvci5tZWRpYURldmljZXM/LmdldFVzZXJNZWRpYSB8fCAhKCdNZWRpYVJlY29yZGVyJyBpbiB3aW5kb3cpKSB7XG4gICAgICB0aGlzLnZvaWNlLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7XG4gICAgICB0aGlzLnJlY1N0cmVhbSA9IHN0cmVhbTtcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gdGhpcy5waWNrQXVkaW9NaW1lKCk7XG4gICAgICB0aGlzLnJlY29yZGVyID0gbmV3IE1lZGlhUmVjb3JkZXIoc3RyZWFtLCBtaW1lVHlwZSA/IHsgbWltZVR5cGUgfSA6IHVuZGVmaW5lZCk7XG4gICAgICBjb25zb2xlLmxvZygnW0NoYXRDb21wb3Nlcl0gcmVjb3JkaW5nIHN0YXJ0Jywge1xuICAgICAgICBwaWNrZWQ6IG1pbWVUeXBlIHx8ICcoZGVmYXVsdCknLFxuICAgICAgICByZWNvcmRlck1pbWVUeXBlOiB0aGlzLnJlY29yZGVyLm1pbWVUeXBlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlY0NodW5rcyA9IFtdO1xuICAgICAgdGhpcy5yZWNvcmRlci5vbmRhdGFhdmFpbGFibGUgPSBlID0+IHtcbiAgICAgICAgaWYgKGUuZGF0YS5zaXplID4gMCkgdGhpcy5yZWNDaHVua3MucHVzaChlLmRhdGEpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucmVjb3JkZXIuc3RhcnQoKTtcbiAgICAgIHRoaXMucmVjb3JkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMucmVjU2Vjb25kcy5zZXQoMCk7XG4gICAgICB0aGlzLnJlY1RpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5yZWNTZWNvbmRzLnVwZGF0ZShzID0+IHMgKyAxKSwgMTAwMCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKiogUGFyYSBsYSBncmFiYWNpw7NuIHkgbGEgc3RhZ2VhIGNvbW8gYWRqdW50byBwZW5kaWVudGUgKGNvbiBwcmV2aWV3IGRlIGF1ZGlvKS4gKi9cbiAgcHJvdGVjdGVkIGZpbmlzaFJlY29yZGluZygpOiB2b2lkIHtcbiAgICBjb25zdCByZWMgPSB0aGlzLnJlY29yZGVyO1xuICAgIGlmICghcmVjKSB7XG4gICAgICB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVjLm9uc3RvcCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSByZWMubWltZVR5cGUgfHwgJ2F1ZGlvL3dlYm0nO1xuICAgICAgY29uc3QgZHVyYXRpb25NcyA9IHRoaXMucmVjU2Vjb25kcygpICogMTAwMDtcbiAgICAgIGxldCBibG9iID0gbmV3IEJsb2IodGhpcy5yZWNDaHVua3MsIHsgdHlwZSB9KTtcblxuICAgICAgLy8gTWVkaWFSZWNvcmRlciBlc2NyaWJlIFdlYk0gU0lOIGVsIGhlYWRlciBkZSBkdXJhY2nDs24gKFNlZ21lbnQvRHVyYXRpb24pIOKGklxuICAgICAgLy8gZWwgPGF1ZGlvPiBsbyByZWNoYXphIGNvbiBTUkNfTk9UX1NVUFBPUlRFRCBhdW5xdWUgZWwgY29kZWMgZXN0w6kgc29wb3J0YWRvLlxuICAgICAgLy8gZml4LXdlYm0tZHVyYXRpb24gcGFyY2hlYSBlbCBoZWFkZXIgY29uIGxhIGR1cmFjacOzbiByZWFsIOKGkiByZXByb2R1Y2libGUuXG4gICAgICBpZiAodHlwZS5pbmNsdWRlcygnd2VibScpICYmIGJsb2Iuc2l6ZSA+IDApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBibG9iID0gYXdhaXQgZml4V2VibUR1cmF0aW9uKGJsb2IsIGR1cmF0aW9uTXMsIHsgbG9nZ2VyOiBmYWxzZSB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbQ2hhdENvbXBvc2VyXSBmaXhXZWJtRHVyYXRpb24gZmFsbMOzLCBzZSB1c2EgZWwgYmxvYiBjcnVkbycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZXh0ID0gdHlwZS5pbmNsdWRlcygnbXA0JykgPyAnbTRhJyA6ICd3ZWJtJztcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGBhdWRpby0ke3RoaXMucmVjU2Vjb25kcygpfXMuJHtleHR9YCwgeyB0eXBlIH0pO1xuICAgICAgY29uc29sZS5sb2coJ1tDaGF0Q29tcG9zZXJdIGF1ZGlvIHJlY29yZGVkJywge1xuICAgICAgICB0eXBlLFxuICAgICAgICBzaXplOiBibG9iLnNpemUsXG4gICAgICAgIGNodW5rczogdGhpcy5yZWNDaHVua3MubGVuZ3RoLFxuICAgICAgICBjYW5QbGF5V2VibTogdGhpcy5jYW5QbGF5KCdhdWRpby93ZWJtJyksXG4gICAgICAgIGNhblBsYXlNcDQ6IHRoaXMuY2FuUGxheSgnYXVkaW8vbXA0JyksXG4gICAgICB9KTtcbiAgICAgIGlmIChibG9iLnNpemUgPiAwKSB0aGlzLmFkZFBlbmRpbmcoZmlsZSk7XG4gICAgICB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICB9O1xuICAgIHJlYy5zdG9wKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuY2VsUmVjb3JkaW5nKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlYyA9IHRoaXMucmVjb3JkZXI7XG4gICAgaWYgKHJlYykgcmVjLm9uc3RvcCA9ICgpID0+IHRoaXMuY2xlYW51cFJlY29yZGluZygpO1xuICAgIHRyeSB7XG4gICAgICByZWM/LnN0b3AoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuY2xlYW51cFJlY29yZGluZygpO1xuICAgIH1cbiAgICBpZiAoIXJlYykgdGhpcy5jbGVhbnVwUmVjb3JkaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBSZWNvcmRpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjVGltZXIpIGNsZWFySW50ZXJ2YWwodGhpcy5yZWNUaW1lcik7XG4gICAgdGhpcy5yZWNUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlY1N0cmVhbT8uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0ID0+IHQuc3RvcCgpKTtcbiAgICB0aGlzLnJlY1N0cmVhbSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlY29yZGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVjQ2h1bmtzID0gW107XG4gICAgdGhpcy5yZWNvcmRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnJlY1NlY29uZHMuc2V0KDApO1xuICB9XG5cbiAgLyoqIERpYWduw7NzdGljbzogZWwgbmF2ZWdhZG9yIG5vIHB1ZG8gcmVwcm9kdWNpciBlbCBhZGp1bnRvIGRlIGF1ZGlvLiAqL1xuICBwcm90ZWN0ZWQgb25BdWRpb0Vycm9yKHdoZXJlOiBzdHJpbmcsIGZpbGU6IEZpbGUsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxBdWRpb0VsZW1lbnQ7XG4gICAgY29uc3QgZXJyID0gZWwuZXJyb3I7XG4gICAgY29uc3QgY29kZXM6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgICAxOiAnQUJPUlRFRCcsXG4gICAgICAyOiAnTkVUV09SSycsXG4gICAgICAzOiAnREVDT0RFJyxcbiAgICAgIDQ6ICdTUkNfTk9UX1NVUFBPUlRFRCcsXG4gICAgfTtcbiAgICBjb25zb2xlLmVycm9yKCdbQ2hhdENvbXBvc2VyXSBhdWRpbyBwbGF5IGVycm9yJywge1xuICAgICAgd2hlcmUsXG4gICAgICBmaWxlVHlwZTogZmlsZS50eXBlLFxuICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgIGNvZGU6IGVycj8uY29kZSxcbiAgICAgIHJlYXNvbjogZXJyID8gY29kZXNbZXJyLmNvZGVdIDogJ3Vua25vd24nLFxuICAgICAgbWVzc2FnZTogZXJyPy5tZXNzYWdlLFxuICAgICAgY2FuUGxheVRoaXNUeXBlOiB0aGlzLmNhblBsYXkoZmlsZS50eXBlKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkF1ZGlvTG9hZGVkKHdoZXJlOiBzdHJpbmcsIGZpbGU6IEZpbGUsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxBdWRpb0VsZW1lbnQ7XG4gICAgY29uc29sZS5sb2coJ1tDaGF0Q29tcG9zZXJdIGF1ZGlvIGxvYWRlZG1ldGFkYXRhJywge1xuICAgICAgd2hlcmUsXG4gICAgICBmaWxlVHlwZTogZmlsZS50eXBlLFxuICAgICAgZHVyYXRpb246IGVsLmR1cmF0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIMK/RWwgbmF2ZWdhZG9yIGRlY2xhcmEgcXVlIHB1ZWRlIHJlcHJvZHVjaXIgZXN0ZSB0aXBvPyAnJyAvICdtYXliZScgLyAncHJvYmFibHknLiAqL1xuICBwcml2YXRlIGNhblBsYXkodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJykuY2FuUGxheVR5cGUodHlwZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIDilIAgRGljdGFkbyB2b3rihpJ0ZXh0byAoV2ViIFNwZWVjaCBBUEkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByb3RlY3RlZCB0b2dnbGVEaWN0YXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGljdGF0aW5nKCkpIHtcbiAgICAgIHRoaXMuc3RvcERpY3RhdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0RGljdGF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGFydERpY3RhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBDdG9yID1cbiAgICAgICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IFNwZWVjaFJlY29nbml0aW9uPzogbmV3ICgpID0+IFNwZWVjaFJlY29nbml0aW9uTGlrZSB9KS5TcGVlY2hSZWNvZ25pdGlvbiB8fFxuICAgICAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgd2Via2l0U3BlZWNoUmVjb2duaXRpb24/OiBuZXcgKCkgPT4gU3BlZWNoUmVjb2duaXRpb25MaWtlIH0pLndlYmtpdFNwZWVjaFJlY29nbml0aW9uO1xuICAgIGlmICghQ3RvcikgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVjID0gbmV3IEN0b3IoKTtcbiAgICByZWMubGFuZyA9IHRoaXMuaTE4bi5sYW5nKCkgPT09ICdlbicgPyAnZW4tVVMnIDogJ2VzLUNMJztcbiAgICByZWMuY29udGludW91cyA9IHRydWU7XG4gICAgcmVjLmludGVyaW1SZXN1bHRzID0gZmFsc2U7IC8vIHNvbG8gcmVzdWx0YWRvcyBmaW5hbGVzIOKGkiBpbnNlcnRhbW9zIHRleHRvIGxpbXBpb1xuXG4gICAgcmVjLm9ucmVzdWx0ID0gZXZlbnQgPT4ge1xuICAgICAgbGV0IGZpbmFsVGV4dCA9ICcnO1xuICAgICAgZm9yIChsZXQgaSA9IGV2ZW50LnJlc3VsdEluZGV4OyBpIDwgZXZlbnQucmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByID0gZXZlbnQucmVzdWx0c1tpXTtcbiAgICAgICAgaWYgKHIuaXNGaW5hbCkgZmluYWxUZXh0ICs9IHJbMF0udHJhbnNjcmlwdDtcbiAgICAgIH1cbiAgICAgIGlmIChmaW5hbFRleHQpIHRoaXMuaW5zZXJ0RGljdGF0ZWQoZmluYWxUZXh0KTtcbiAgICB9O1xuICAgIHJlYy5vbmVycm9yID0gKCkgPT4gdGhpcy5zdG9wRGljdGF0aW9uKCk7XG4gICAgcmVjLm9uZW5kID0gKCkgPT4ge1xuICAgICAgLy8gRWwgcmVjb25vY2ltaWVudG8gcHVlZGUgY29ydGFyc2Ugc29sbzsgcmVmbGVqYW1vcyBlbCBlc3RhZG8uXG4gICAgICB0aGlzLmRpY3RhdGluZy5zZXQoZmFsc2UpO1xuICAgIH07XG5cbiAgICB0aGlzLnJlY29nbml0aW9uID0gcmVjO1xuICAgIHRoaXMuZWRpdGFibGVSZWYoKT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIHRyeSB7XG4gICAgICByZWMuc3RhcnQoKTtcbiAgICAgIHRoaXMuZGljdGF0aW5nLnNldCh0cnVlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuZGljdGF0aW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wRGljdGF0aW9uKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnJlY29nbml0aW9uPy5zdG9wKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBub29wICovXG4gICAgfVxuICAgIHRoaXMuZGljdGF0aW5nLnNldChmYWxzZSk7XG4gIH1cblxuICAvKiogSW5zZXJ0YSBlbCB0ZXh0byBkaWN0YWRvIGFsIGZpbmFsIGRlbCBlZGl0YWJsZSB5IHNpbmNyb25pemEgZWwgYm9keS4gKi9cbiAgcHJpdmF0ZSBpbnNlcnREaWN0YXRlZCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWRpdGFibGVSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgY29uc3QgY3VycmVudCA9IGVsLmlubmVyVGV4dC5yZXBsYWNlKC9cXG4kLywgJycpO1xuICAgIGNvbnN0IHNlcCA9IGN1cnJlbnQgJiYgIWN1cnJlbnQuZW5kc1dpdGgoJyAnKSA/ICcgJyA6ICcnO1xuICAgIGVsLmlubmVyVGV4dCA9IGN1cnJlbnQgKyBzZXAgKyB0ZXh0O1xuICAgIC8vIENvbG9jYSBlbCBjYXJldCBhbCBmaW5hbC5cbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsKTtcbiAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7XG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIHNlbD8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgc2VsPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgdGhpcy5ib2R5LnNldChlbC5pbm5lclRleHQucmVwbGFjZSgvXFxuJC8sICcnKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFudXBSZWNvcmRpbmcoKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5yZWNvZ25pdGlvbj8uYWJvcnQoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8qIG5vb3AgKi9cbiAgICB9XG4gICAgZm9yIChjb25zdCBhdHQgb2YgdGhpcy5wZW5kaW5nKCkpIHtcbiAgICAgIGlmIChhdHQudXJsKSBVUkwucmV2b2tlT2JqZWN0VVJMKGF0dC51cmwpO1xuICAgIH1cbiAgfVxuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdDaGF0Q29tcG9zZXInKTtcbiAgfVxufVxuIl19
|