valtech-components 4.0.1005 → 4.0.1007
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/organisms/field-schema-editor/field-schema-editor.component.mjs +14 -3
- package/esm2022/lib/components/organisms/field-schema-editor/field-schema-editor.i18n.mjs +5 -1
- package/esm2022/lib/components/organisms/field-schema-editor/types.mjs +1 -1
- package/esm2022/lib/components/organisms/survey-builder/survey-builder.component.mjs +88 -13
- package/esm2022/lib/components/organisms/survey-builder/survey-builder.i18n.mjs +15 -1
- package/esm2022/lib/components/organisms/survey-builder/survey-preview-modal.component.mjs +129 -0
- package/esm2022/lib/components/organisms/survey-response/survey-response.component.mjs +135 -5
- package/esm2022/lib/components/organisms/survey-response/survey-response.i18n.mjs +7 -1
- package/esm2022/lib/services/forms/form-schema-builder.service.mjs +18 -4
- package/esm2022/lib/services/forms/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +396 -21
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/field-schema-editor/field-schema-editor.component.d.ts +1 -0
- package/lib/components/organisms/field-schema-editor/types.d.ts +2 -0
- package/lib/components/organisms/survey-builder/survey-builder.component.d.ts +7 -0
- package/lib/components/organisms/survey-builder/survey-preview-modal.component.d.ts +28 -0
- package/lib/components/organisms/survey-response/survey-response.component.d.ts +11 -1
- package/lib/services/forms/types.d.ts +6 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -3,13 +3,14 @@ import { Component, EventEmitter, Input, Output, inject, signal } from '@angular
|
|
|
3
3
|
import { FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
4
4
|
import { IonIcon, IonSpinner } from '@ionic/angular/standalone';
|
|
5
5
|
import { addIcons } from 'ionicons';
|
|
6
|
-
import { cloudUploadOutline, trashOutline } from 'ionicons/icons';
|
|
6
|
+
import { cloudUploadOutline, eyeOutline, trashOutline } from 'ionicons/icons';
|
|
7
7
|
import { firstValueFrom } from 'rxjs';
|
|
8
8
|
import { I18nService } from '../../../services/i18n';
|
|
9
9
|
import { RequestService } from '../../../services/requests/request.service';
|
|
10
10
|
import { RequestFormBuilderService } from '../../../services/requests/request-form-builder.service';
|
|
11
11
|
import { ComponentStates } from '../../types';
|
|
12
12
|
import { ValtechErrorService } from '../../../services/errors/valtech-error.service';
|
|
13
|
+
import { ModalService } from '../../../services/modal/modal.service';
|
|
13
14
|
import { TextInputComponent } from '../../molecules/text-input/text-input.component';
|
|
14
15
|
import { ButtonComponent } from '../../atoms/button/button.component';
|
|
15
16
|
import { FormFieldComponent } from '../../molecules/form-field/form-field.component';
|
|
@@ -17,6 +18,7 @@ import { FIELD_TYPES_WITH_OPTIONS, FieldSchemaEditorComponent, } from '../field-
|
|
|
17
18
|
import { FIELD_SCHEMA_EDITOR_I18N } from '../field-schema-editor/field-schema-editor.i18n';
|
|
18
19
|
import { SURVEY_QUESTION_TYPES, } from './types';
|
|
19
20
|
import { SURVEY_BUILDER_I18N } from './survey-builder.i18n';
|
|
21
|
+
import { SurveyPreviewModalComponent } from './survey-preview-modal.component';
|
|
20
22
|
import * as i0 from "@angular/core";
|
|
21
23
|
const NAMESPACE = 'SurveyBuilder';
|
|
22
24
|
const EDITOR_NAMESPACE = 'FieldSchemaEditor';
|
|
@@ -54,6 +56,7 @@ export class SurveyBuilderComponent {
|
|
|
54
56
|
this.requests = inject(RequestService);
|
|
55
57
|
this.formBuilder = inject(RequestFormBuilderService);
|
|
56
58
|
this.errors = inject(ValtechErrorService);
|
|
59
|
+
this.modals = inject(ModalService);
|
|
57
60
|
this.titleControl = new FormControl('', { nonNullable: true });
|
|
58
61
|
this.subtitleControl = new FormControl('', { nonNullable: true });
|
|
59
62
|
this.headerImageControl = new FormControl('', { nonNullable: true });
|
|
@@ -83,7 +86,9 @@ export class SurveyBuilderComponent {
|
|
|
83
86
|
if (!this.i18n.hasNamespace(EDITOR_NAMESPACE)) {
|
|
84
87
|
this.i18n.registerDefaults(EDITOR_NAMESPACE, FIELD_SCHEMA_EDITOR_I18N);
|
|
85
88
|
}
|
|
86
|
-
|
|
89
|
+
this.successTitleControl.setValue(this.defaultSuccessTitle());
|
|
90
|
+
this.successMessageControl.setValue(this.defaultSuccessMessage());
|
|
91
|
+
addIcons({ cloudUploadOutline, eyeOutline, trashOutline });
|
|
87
92
|
}
|
|
88
93
|
async ngOnInit() {
|
|
89
94
|
// Sembrado directo: la app ya tenía la encuesta, no hace falta leerla.
|
|
@@ -332,6 +337,9 @@ export class SurveyBuilderComponent {
|
|
|
332
337
|
label: row.label.trim(),
|
|
333
338
|
type: row.type,
|
|
334
339
|
required: row.required,
|
|
340
|
+
sectionId: row.sectionLabel ? this.formBuilder.toToken(row.sectionLabel) : undefined,
|
|
341
|
+
sectionLabel: row.sectionLabel,
|
|
342
|
+
sectionOrder: this.sectionOrderFor(row.sectionLabel, rows),
|
|
335
343
|
placeholderText: row.placeholderText,
|
|
336
344
|
hintText: row.hintText,
|
|
337
345
|
options: row.options,
|
|
@@ -383,20 +391,26 @@ export class SurveyBuilderComponent {
|
|
|
383
391
|
this.titleControl.setValue(label ?? '');
|
|
384
392
|
this.subtitleControl.setValue(subtitle ?? '');
|
|
385
393
|
this.headerImageControl.setValue(presentation?.headerImageUrl ?? '');
|
|
386
|
-
this.successTitleControl.setValue(presentation?.successTitle
|
|
387
|
-
this.successMessageControl.setValue(presentation?.successMessage
|
|
394
|
+
this.successTitleControl.setValue(presentation?.successTitle || this.defaultSuccessTitle());
|
|
395
|
+
this.successMessageControl.setValue(presentation?.successMessage || this.defaultSuccessMessage());
|
|
388
396
|
this.successImageControl.setValue(presentation?.successImageUrl ?? '');
|
|
389
397
|
this.questions.set([...(questions ?? [])].sort((a, b) => a.order - b.order).map(f => this.rowFromField(f)));
|
|
390
398
|
}
|
|
391
399
|
presentationPayload() {
|
|
392
400
|
const presentation = {
|
|
393
401
|
headerImageUrl: this.headerImageControl.value.trim(),
|
|
394
|
-
successTitle: this.successTitleControl.value.trim(),
|
|
395
|
-
successMessage: this.successMessageControl.value.trim(),
|
|
402
|
+
successTitle: this.successTitleControl.value.trim() || this.defaultSuccessTitle(),
|
|
403
|
+
successMessage: this.successMessageControl.value.trim() || this.defaultSuccessMessage(),
|
|
396
404
|
successImageUrl: this.successImageControl.value.trim(),
|
|
397
405
|
};
|
|
398
406
|
return Object.values(presentation).some(Boolean) ? presentation : undefined;
|
|
399
407
|
}
|
|
408
|
+
defaultSuccessTitle() {
|
|
409
|
+
return this.t('defaultSuccessTitle');
|
|
410
|
+
}
|
|
411
|
+
defaultSuccessMessage() {
|
|
412
|
+
return this.t('defaultSuccessMessage');
|
|
413
|
+
}
|
|
400
414
|
validateWizardStep(step) {
|
|
401
415
|
this.validationError.set('');
|
|
402
416
|
if (step === 0) {
|
|
@@ -435,9 +449,60 @@ export class SurveyBuilderComponent {
|
|
|
435
449
|
hintText: f.hintText ?? '',
|
|
436
450
|
type: f.type,
|
|
437
451
|
required: !!f.required,
|
|
452
|
+
sectionLabel: f.sectionLabel ?? '',
|
|
453
|
+
sectionOrder: f.sectionOrder,
|
|
438
454
|
options: f.options,
|
|
439
455
|
};
|
|
440
456
|
}
|
|
457
|
+
reviewQuestionsCount() {
|
|
458
|
+
const count = this.questions().length;
|
|
459
|
+
const key = count === 1 ? 'reviewQuestionCount' : 'reviewQuestionsCount';
|
|
460
|
+
return this.interpolate(this.t(key), { count });
|
|
461
|
+
}
|
|
462
|
+
previewProps() {
|
|
463
|
+
return {
|
|
464
|
+
token: 'survey-builder-preview',
|
|
465
|
+
text: this.t('preview'),
|
|
466
|
+
color: 'dark',
|
|
467
|
+
fill: 'outline',
|
|
468
|
+
shape: 'round',
|
|
469
|
+
size: 'default',
|
|
470
|
+
type: 'button',
|
|
471
|
+
state: ComponentStates.ENABLED,
|
|
472
|
+
icon: { name: 'eye-outline', slot: 'start' },
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
async openPreview() {
|
|
476
|
+
await this.modals.open({
|
|
477
|
+
component: SurveyPreviewModalComponent,
|
|
478
|
+
componentProps: {
|
|
479
|
+
modalTitle: this.t('previewTitle'),
|
|
480
|
+
closeLabel: this.t('closePreview'),
|
|
481
|
+
title: this.titleControl.value.trim() || this.t('untitledQuestion'),
|
|
482
|
+
subtitle: this.subtitleControl.value.trim(),
|
|
483
|
+
presentation: this.presentationPayload(),
|
|
484
|
+
successTitle: this.successTitleControl.value.trim() || this.defaultSuccessTitle(),
|
|
485
|
+
successMessage: this.successMessageControl.value.trim() || this.defaultSuccessMessage(),
|
|
486
|
+
requiredSuffix: ` · ${this.t('requiredTag')}`,
|
|
487
|
+
questions: this.questions().map((question, index) => ({
|
|
488
|
+
...question,
|
|
489
|
+
order: index,
|
|
490
|
+
name: question.name || this.formBuilder.toToken(question.label),
|
|
491
|
+
typeLabel: this.typeLabel(question.type),
|
|
492
|
+
sectionId: question.sectionLabel ? this.formBuilder.toToken(question.sectionLabel) : undefined,
|
|
493
|
+
sectionOrder: this.sectionOrderFor(question.sectionLabel, this.questions()),
|
|
494
|
+
})),
|
|
495
|
+
},
|
|
496
|
+
size: 'medium',
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
sectionOrderFor(sectionLabel, rows) {
|
|
500
|
+
const label = sectionLabel?.trim();
|
|
501
|
+
if (!label)
|
|
502
|
+
return undefined;
|
|
503
|
+
const labels = [...new Set(rows.map(row => row.sectionLabel?.trim()).filter(Boolean))];
|
|
504
|
+
return labels.indexOf(label);
|
|
505
|
+
}
|
|
441
506
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SurveyBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
442
507
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SurveyBuilderComponent, isStandalone: true, selector: "val-survey-builder", inputs: { props: "props" }, outputs: { saved: "saved", draft: "draft" }, ngImport: i0, template: `
|
|
443
508
|
<div class="survey-builder">
|
|
@@ -550,6 +615,7 @@ export class SurveyBuilderComponent {
|
|
|
550
615
|
</label>
|
|
551
616
|
}
|
|
552
617
|
</div>
|
|
618
|
+
<p class="survey-builder__optional-note">{{ t('successOptionalNote') }}</p>
|
|
553
619
|
<val-form-field [label]="t('successTitleLabel')">
|
|
554
620
|
<val-text-input [props]="{ control: successTitleControl, placeholder: t('successTitlePlaceholder') }" />
|
|
555
621
|
</val-form-field>
|
|
@@ -596,6 +662,7 @@ export class SurveyBuilderComponent {
|
|
|
596
662
|
@if (showWizardSection(2)) {
|
|
597
663
|
<section class="survey-builder__section">
|
|
598
664
|
<span class="survey-builder__questions-label">{{ t('stepClose') }}</span>
|
|
665
|
+
<p class="survey-builder__optional-note">{{ t('successOptionalNote') }}</p>
|
|
599
666
|
<val-form-field [label]="t('successTitleLabel')">
|
|
600
667
|
<val-text-input [props]="{ control: successTitleControl, placeholder: t('successTitlePlaceholder') }" />
|
|
601
668
|
</val-form-field>
|
|
@@ -652,7 +719,9 @@ export class SurveyBuilderComponent {
|
|
|
652
719
|
<div class="survey-builder__row-head">
|
|
653
720
|
<div class="survey-builder__row-text">
|
|
654
721
|
<strong>{{ row.label || t('untitledQuestion') }}</strong>
|
|
655
|
-
<span>
|
|
722
|
+
<span>
|
|
723
|
+
{{ typeLabel(row.type) }}{{ row.required ? ' · ' + t('requiredTag') : '' }}{{ row.sectionLabel ? ' · ' + row.sectionLabel : '' }}
|
|
724
|
+
</span>
|
|
656
725
|
</div>
|
|
657
726
|
<div class="survey-builder__row-actions">
|
|
658
727
|
<val-button
|
|
@@ -726,11 +795,12 @@ export class SurveyBuilderComponent {
|
|
|
726
795
|
<span class="survey-builder__questions-label">{{ t('reviewTitle') }}</span>
|
|
727
796
|
<strong>{{ titleControl.value || t('untitledQuestion') }}</strong>
|
|
728
797
|
<span>{{ subtitleControl.value || t('reviewNoSubtitle') }}</span>
|
|
729
|
-
<span>{{
|
|
798
|
+
<span>{{ reviewQuestionsCount() }}</span>
|
|
730
799
|
@if (headerImageControl.value) {
|
|
731
800
|
<span>{{ t('reviewHeaderImage') }}</span>
|
|
732
801
|
}
|
|
733
802
|
<span>{{ successImageControl.value ? t('reviewSuccessImage') : t('reviewDefaultClose') }}</span>
|
|
803
|
+
<val-button [props]="previewProps()" (onClick)="openPreview()" />
|
|
734
804
|
</section>
|
|
735
805
|
}
|
|
736
806
|
|
|
@@ -753,7 +823,7 @@ export class SurveyBuilderComponent {
|
|
|
753
823
|
<val-button [props]="saveProps()" (onClick)="save()" />
|
|
754
824
|
}
|
|
755
825
|
</div>
|
|
756
|
-
`, isInline: true, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__presentation{display:flex;flex-direction:column;gap:12px;padding-top:4px}.survey-builder__section,.survey-builder__review{display:flex;flex-direction:column;gap:12px}.survey-builder__steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-bottom:12px}.survey-builder__step{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:8px;background:var(--ion-card-background, var(--ion-background-color, #fff));color:var(--ion-color-medium-shade, #6b6675);font-size:.8125rem;font-weight:700;cursor:pointer}.survey-builder__step span{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:999px;background:var(--ion-color-light, #f4f5f8);color:inherit;font-size:.75rem}.survey-builder__step--active{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__wizard-actions{display:flex;justify-content:flex-end;gap:8px}.survey-builder__review{padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__review strong{color:var(--ion-text-color, #000)}.survey-builder__review span:not(.survey-builder__questions-label){color:var(--ion-color-medium, #92949c);font-size:.875rem}.survey-builder__image-field{display:flex;flex-direction:column;gap:10px}.survey-builder__image-preview{position:relative;width:100%}.survey-builder__image-preview img{display:block;width:100%;aspect-ratio:16 / 9;object-fit:contain;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;background:var(--ion-color-light, #f4f5f8)}.survey-builder__image-clear{position:absolute;top:8px;right:8px;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;border-radius:999px;background:#0009;color:#fff;cursor:pointer}.survey-builder__image-upload{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 18px;border:2px dashed var(--ion-color-dark, #2f2c3a);border-radius:20px;color:var(--ion-color-dark, #2f2c3a);font-size:.875rem;font-weight:600;cursor:pointer}.survey-builder__image-upload:hover{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__image-upload--loading{opacity:.7;cursor:default}.survey-builder__image-upload ion-spinner{width:16px;height:16px}.survey-builder__image-upload input{display:none}.survey-builder__questions-label{font-size:.8125rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ion-color-medium, #92949c)}.survey-builder__empty{margin:0;font-size:.875rem;color:var(--ion-color-medium, #92949c)}.survey-builder__row{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__row-head{display:flex;flex-direction:column;gap:8px}.survey-builder__row-text{display:flex;flex-direction:column;gap:2px;min-width:0}.survey-builder__row-text strong{color:var(--ion-text-color, #000);font-size:.9375rem}.survey-builder__row-text span{color:var(--ion-color-medium, #92949c);font-size:.8125rem}.survey-builder__row-actions{display:flex;gap:4px;flex-wrap:wrap}.survey-builder__row-editor{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__error{margin:0;color:var(--ion-color-danger);font-size:.875rem;font-weight:700}@media (min-width: 576px){.survey-builder__row-head{flex-direction:row;align-items:flex-start;justify-content:space-between}.survey-builder__row-text{flex:1}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: FormFieldComponent, selector: "val-form-field", inputs: ["label"] }, { kind: "component", type: FieldSchemaEditorComponent, selector: "val-field-schema-editor", inputs: ["props"], outputs: ["save", "changed"] }] }); }
|
|
826
|
+
`, isInline: true, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__presentation{display:flex;flex-direction:column;gap:12px;padding-top:4px}.survey-builder__section,.survey-builder__review{display:flex;flex-direction:column;gap:12px}.survey-builder__steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-bottom:12px}.survey-builder__step{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:8px;background:var(--ion-card-background, var(--ion-background-color, #fff));color:var(--ion-color-medium-shade, #6b6675);font-size:.8125rem;font-weight:700;cursor:pointer}.survey-builder__step span{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:999px;background:var(--ion-color-light, #f4f5f8);color:inherit;font-size:.75rem}.survey-builder__step--active{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__wizard-actions{display:flex;justify-content:flex-end;gap:8px}.survey-builder__review{padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__review strong{color:var(--ion-text-color, #000)}.survey-builder__review span:not(.survey-builder__questions-label){color:var(--ion-color-medium, #92949c);font-size:.875rem}.survey-builder__image-field{display:flex;flex-direction:column;gap:10px}.survey-builder__image-preview{position:relative;width:100%}.survey-builder__image-preview img{display:block;width:100%;aspect-ratio:16 / 9;object-fit:contain;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;background:var(--ion-color-light, #f4f5f8)}.survey-builder__image-clear{position:absolute;top:8px;right:8px;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;border-radius:999px;background:#0009;color:#fff;cursor:pointer}.survey-builder__image-upload{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 18px;border:2px dashed var(--ion-color-dark, #2f2c3a);border-radius:20px;color:var(--ion-color-dark, #2f2c3a);font-size:.875rem;font-weight:600;cursor:pointer}.survey-builder__image-upload:hover{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__image-upload--loading{opacity:.7;cursor:default}.survey-builder__image-upload ion-spinner{width:16px;height:16px}.survey-builder__image-upload input{display:none}.survey-builder__questions-label{font-size:.8125rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ion-color-medium, #92949c)}.survey-builder__empty{margin:0;font-size:.875rem;color:var(--ion-color-medium, #92949c)}.survey-builder__optional-note{margin:0;color:var(--ion-color-medium, #92949c);font-size:.875rem;line-height:1.35}.survey-builder__row{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__row-head{display:flex;flex-direction:column;gap:8px}.survey-builder__row-text{display:flex;flex-direction:column;gap:2px;min-width:0}.survey-builder__row-text strong{color:var(--ion-text-color, #000);font-size:.9375rem}.survey-builder__row-text span{color:var(--ion-color-medium, #92949c);font-size:.8125rem}.survey-builder__row-actions{display:flex;gap:4px;flex-wrap:wrap}.survey-builder__row-editor{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__error{margin:0;color:var(--ion-color-danger);font-size:.875rem;font-weight:700}@media (min-width: 576px){.survey-builder__row-head{flex-direction:row;align-items:flex-start;justify-content:space-between}.survey-builder__row-text{flex:1}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: FormFieldComponent, selector: "val-form-field", inputs: ["label"] }, { kind: "component", type: FieldSchemaEditorComponent, selector: "val-field-schema-editor", inputs: ["props"], outputs: ["save", "changed"] }] }); }
|
|
757
827
|
}
|
|
758
828
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SurveyBuilderComponent, decorators: [{
|
|
759
829
|
type: Component,
|
|
@@ -877,6 +947,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
877
947
|
</label>
|
|
878
948
|
}
|
|
879
949
|
</div>
|
|
950
|
+
<p class="survey-builder__optional-note">{{ t('successOptionalNote') }}</p>
|
|
880
951
|
<val-form-field [label]="t('successTitleLabel')">
|
|
881
952
|
<val-text-input [props]="{ control: successTitleControl, placeholder: t('successTitlePlaceholder') }" />
|
|
882
953
|
</val-form-field>
|
|
@@ -923,6 +994,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
923
994
|
@if (showWizardSection(2)) {
|
|
924
995
|
<section class="survey-builder__section">
|
|
925
996
|
<span class="survey-builder__questions-label">{{ t('stepClose') }}</span>
|
|
997
|
+
<p class="survey-builder__optional-note">{{ t('successOptionalNote') }}</p>
|
|
926
998
|
<val-form-field [label]="t('successTitleLabel')">
|
|
927
999
|
<val-text-input [props]="{ control: successTitleControl, placeholder: t('successTitlePlaceholder') }" />
|
|
928
1000
|
</val-form-field>
|
|
@@ -979,7 +1051,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
979
1051
|
<div class="survey-builder__row-head">
|
|
980
1052
|
<div class="survey-builder__row-text">
|
|
981
1053
|
<strong>{{ row.label || t('untitledQuestion') }}</strong>
|
|
982
|
-
<span>
|
|
1054
|
+
<span>
|
|
1055
|
+
{{ typeLabel(row.type) }}{{ row.required ? ' · ' + t('requiredTag') : '' }}{{ row.sectionLabel ? ' · ' + row.sectionLabel : '' }}
|
|
1056
|
+
</span>
|
|
983
1057
|
</div>
|
|
984
1058
|
<div class="survey-builder__row-actions">
|
|
985
1059
|
<val-button
|
|
@@ -1053,11 +1127,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1053
1127
|
<span class="survey-builder__questions-label">{{ t('reviewTitle') }}</span>
|
|
1054
1128
|
<strong>{{ titleControl.value || t('untitledQuestion') }}</strong>
|
|
1055
1129
|
<span>{{ subtitleControl.value || t('reviewNoSubtitle') }}</span>
|
|
1056
|
-
<span>{{
|
|
1130
|
+
<span>{{ reviewQuestionsCount() }}</span>
|
|
1057
1131
|
@if (headerImageControl.value) {
|
|
1058
1132
|
<span>{{ t('reviewHeaderImage') }}</span>
|
|
1059
1133
|
}
|
|
1060
1134
|
<span>{{ successImageControl.value ? t('reviewSuccessImage') : t('reviewDefaultClose') }}</span>
|
|
1135
|
+
<val-button [props]="previewProps()" (onClick)="openPreview()" />
|
|
1061
1136
|
</section>
|
|
1062
1137
|
}
|
|
1063
1138
|
|
|
@@ -1080,7 +1155,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1080
1155
|
<val-button [props]="saveProps()" (onClick)="save()" />
|
|
1081
1156
|
}
|
|
1082
1157
|
</div>
|
|
1083
|
-
`, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__presentation{display:flex;flex-direction:column;gap:12px;padding-top:4px}.survey-builder__section,.survey-builder__review{display:flex;flex-direction:column;gap:12px}.survey-builder__steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-bottom:12px}.survey-builder__step{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:8px;background:var(--ion-card-background, var(--ion-background-color, #fff));color:var(--ion-color-medium-shade, #6b6675);font-size:.8125rem;font-weight:700;cursor:pointer}.survey-builder__step span{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:999px;background:var(--ion-color-light, #f4f5f8);color:inherit;font-size:.75rem}.survey-builder__step--active{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__wizard-actions{display:flex;justify-content:flex-end;gap:8px}.survey-builder__review{padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__review strong{color:var(--ion-text-color, #000)}.survey-builder__review span:not(.survey-builder__questions-label){color:var(--ion-color-medium, #92949c);font-size:.875rem}.survey-builder__image-field{display:flex;flex-direction:column;gap:10px}.survey-builder__image-preview{position:relative;width:100%}.survey-builder__image-preview img{display:block;width:100%;aspect-ratio:16 / 9;object-fit:contain;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;background:var(--ion-color-light, #f4f5f8)}.survey-builder__image-clear{position:absolute;top:8px;right:8px;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;border-radius:999px;background:#0009;color:#fff;cursor:pointer}.survey-builder__image-upload{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 18px;border:2px dashed var(--ion-color-dark, #2f2c3a);border-radius:20px;color:var(--ion-color-dark, #2f2c3a);font-size:.875rem;font-weight:600;cursor:pointer}.survey-builder__image-upload:hover{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__image-upload--loading{opacity:.7;cursor:default}.survey-builder__image-upload ion-spinner{width:16px;height:16px}.survey-builder__image-upload input{display:none}.survey-builder__questions-label{font-size:.8125rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ion-color-medium, #92949c)}.survey-builder__empty{margin:0;font-size:.875rem;color:var(--ion-color-medium, #92949c)}.survey-builder__row{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__row-head{display:flex;flex-direction:column;gap:8px}.survey-builder__row-text{display:flex;flex-direction:column;gap:2px;min-width:0}.survey-builder__row-text strong{color:var(--ion-text-color, #000);font-size:.9375rem}.survey-builder__row-text span{color:var(--ion-color-medium, #92949c);font-size:.8125rem}.survey-builder__row-actions{display:flex;gap:4px;flex-wrap:wrap}.survey-builder__row-editor{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__error{margin:0;color:var(--ion-color-danger);font-size:.875rem;font-weight:700}@media (min-width: 576px){.survey-builder__row-head{flex-direction:row;align-items:flex-start;justify-content:space-between}.survey-builder__row-text{flex:1}}\n"] }]
|
|
1158
|
+
`, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__presentation{display:flex;flex-direction:column;gap:12px;padding-top:4px}.survey-builder__section,.survey-builder__review{display:flex;flex-direction:column;gap:12px}.survey-builder__steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-bottom:12px}.survey-builder__step{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:8px;background:var(--ion-card-background, var(--ion-background-color, #fff));color:var(--ion-color-medium-shade, #6b6675);font-size:.8125rem;font-weight:700;cursor:pointer}.survey-builder__step span{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:999px;background:var(--ion-color-light, #f4f5f8);color:inherit;font-size:.75rem}.survey-builder__step--active{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__wizard-actions{display:flex;justify-content:flex-end;gap:8px}.survey-builder__review{padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__review strong{color:var(--ion-text-color, #000)}.survey-builder__review span:not(.survey-builder__questions-label){color:var(--ion-color-medium, #92949c);font-size:.875rem}.survey-builder__image-field{display:flex;flex-direction:column;gap:10px}.survey-builder__image-preview{position:relative;width:100%}.survey-builder__image-preview img{display:block;width:100%;aspect-ratio:16 / 9;object-fit:contain;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;background:var(--ion-color-light, #f4f5f8)}.survey-builder__image-clear{position:absolute;top:8px;right:8px;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;border-radius:999px;background:#0009;color:#fff;cursor:pointer}.survey-builder__image-upload{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 18px;border:2px dashed var(--ion-color-dark, #2f2c3a);border-radius:20px;color:var(--ion-color-dark, #2f2c3a);font-size:.875rem;font-weight:600;cursor:pointer}.survey-builder__image-upload:hover{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__image-upload--loading{opacity:.7;cursor:default}.survey-builder__image-upload ion-spinner{width:16px;height:16px}.survey-builder__image-upload input{display:none}.survey-builder__questions-label{font-size:.8125rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ion-color-medium, #92949c)}.survey-builder__empty{margin:0;font-size:.875rem;color:var(--ion-color-medium, #92949c)}.survey-builder__optional-note{margin:0;color:var(--ion-color-medium, #92949c);font-size:.875rem;line-height:1.35}.survey-builder__row{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__row-head{display:flex;flex-direction:column;gap:8px}.survey-builder__row-text{display:flex;flex-direction:column;gap:2px;min-width:0}.survey-builder__row-text strong{color:var(--ion-text-color, #000);font-size:.9375rem}.survey-builder__row-text span{color:var(--ion-color-medium, #92949c);font-size:.8125rem}.survey-builder__row-actions{display:flex;gap:4px;flex-wrap:wrap}.survey-builder__row-editor{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__error{margin:0;color:var(--ion-color-danger);font-size:.875rem;font-weight:700}@media (min-width: 576px){.survey-builder__row-head{flex-direction:row;align-items:flex-start;justify-content:space-between}.survey-builder__row-text{flex:1}}\n"] }]
|
|
1084
1159
|
}], ctorParameters: () => [], propDecorators: { props: [{
|
|
1085
1160
|
type: Input
|
|
1086
1161
|
}], saved: [{
|
|
@@ -1088,4 +1163,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1088
1163
|
}], draft: [{
|
|
1089
1164
|
type: Output
|
|
1090
1165
|
}] } });
|
|
1091
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9zdXJ2ZXktYnVpbGRlci9zdXJ2ZXktYnVpbGRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFFcEcsT0FBTyxFQUFrQixlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDckYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBUVDt3REEyTlEsS0FBSztzQkFBYixLQUFLO2dCQUNhLEtBQUs7c0JBQXZCLE1BQU07Z0JBT1ksS0FBSztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJb25JY29uLCBJb25TcGlubmVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNsb3VkVXBsb2FkT3V0bGluZSwgdHJhc2hPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVxdWVzdHMvcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcXVlc3RGb3JtQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXF1ZXN0cy9yZXF1ZXN0LWZvcm0tYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZpZWxkU2NoZW1hRGVmLCBSZXF1ZXN0VHlwZVByZXNlbnRhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3JlcXVlc3RzL3R5cGVzJztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IENvbG9yIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHsgVmFsdGVjaEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy92YWx0ZWNoLWVycm9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RleHQtaW5wdXQvdGV4dC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRklFTERfVFlQRVNfV0lUSF9PUFRJT05TLFxuICBGaWVsZFNjaGVtYUVkaXRvckNvbXBvbmVudCxcbn0gZnJvbSAnLi4vZmllbGQtc2NoZW1hLWVkaXRvci9maWVsZC1zY2hlbWEtZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGSUVMRF9TQ0hFTUFfRURJVE9SX0kxOE4gfSBmcm9tICcuLi9maWVsZC1zY2hlbWEtZWRpdG9yL2ZpZWxkLXNjaGVtYS1lZGl0b3IuaTE4bic7XG5pbXBvcnQgeyBFZGl0YWJsZUZpZWxkRGVmLCBGaWVsZFNjaGVtYUVkaXRvck1ldGFkYXRhIH0gZnJvbSAnLi4vZmllbGQtc2NoZW1hLWVkaXRvci90eXBlcyc7XG5pbXBvcnQge1xuICBTdXJ2ZXlCdWlsZGVyTWV0YWRhdGEsXG4gIFN1cnZleUJ1aWxkZXJTYXZlRXZlbnQsXG4gIFN1cnZleURyYWZ0RXZlbnQsXG4gIFNVUlZFWV9RVUVTVElPTl9UWVBFUyxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBTVVJWRVlfQlVJTERFUl9JMThOIH0gZnJvbSAnLi9zdXJ2ZXktYnVpbGRlci5pMThuJztcblxuY29uc3QgTkFNRVNQQUNFID0gJ1N1cnZleUJ1aWxkZXInO1xuY29uc3QgRURJVE9SX05BTUVTUEFDRSA9ICdGaWVsZFNjaGVtYUVkaXRvcic7XG5jb25zdCBERUZBVUxUX1RZUEVfUFJFRklYID0gJ3N1cnZleSc7XG5cbmxldCByb3dVaWQgPSAwO1xuXG4vKipcbiAqIHZhbC1zdXJ2ZXktYnVpbGRlclxuICpcbiAqIEF1dG9yw61hIGRlIHVuYSBlbmN1ZXN0YTogdMOtdHVsbywgc3VidMOtdHVsbywgcHJlZ3VudGFzIOKAlCBhcm1hIG8gYWN0dWFsaXphIHVuXG4gKiBgUmVxdWVzdFR5cGVDb25maWdgIGNvbiBgVHlwZTogXCI8cHJlZml4Pjo8c2x1Zz5cImAgKEFEUi0wOTIpLCBgc2tpcFJldmlldzpcbiAqIHRydWVgIChjYWRhIHJlc3B1ZXN0YSBzZSBhZ3JlZ2EsIG5vIHNlIHJldmlzYSB1bmEgcG9yIHVuYSkgeSBlbCBgRW50aXR5UmVmYFxuICogcXVlIGxlIHBhc2EgZWwgY29uc3VtZXIgKGVqLiBlbCBldmVudG8gZGUgYmluZ28gZHVlw7FvIGRlIGxhIGVuY3Vlc3RhKS5cbiAqXG4gKiBDYWRhIHByZWd1bnRhIHNlIGVkaXRhIGNvbiBgdmFsLWZpZWxkLXNjaGVtYS1lZGl0b3JgLCBlbCBtaXNtbyBlZGl0b3IgcXVlIHVzYVxuICogZWwgY2hlY2tvdXQgZGUgYmluZ28g4oCUIGRlIGFow60gcXVlIHVuYSBwcmVndW50YSB0ZW5nYSB0aXBvLCBwbGFjZWhvbGRlciwgbm90YVxuICogeSBvcGNpb25lcywgbm8gc29sbyB0ZXh0by4gTGEgdjEgZGUgZXN0ZSBjb21wb25lbnRlIHRlbsOtYSBzdSBwcm9waW8gZWRpdG9yXG4gKiBwb2JyZSAoZG9zIHRpcG9zLCBzaW4gb3BjaW9uZXMpOyBsYSBGYXNlIDUgZGVsIEFEUi0wOTIgbG8gcmVlbXBsYXrDsyBwb3IgZWxcbiAqIG9yZ2FuaXNtIGNvbXBhcnRpZG8gZW4gdmV6IGRlIG1lam9yYXJsbyBwb3IgZHVwbGljYWRvLlxuICpcbiAqIEVsIGNhdMOhbG9nbyBxdWUgb2ZyZWNlIHNhbGUgZGUgYFNVUlZFWV9RVUVTVElPTl9UWVBFU2Ag4oCUIGFjb3RhZG8gYSBsbyBxdWVcbiAqIGB2YWwtc3VydmV5LXJlc3BvbnNlYCBzYWJlIHJlbmRlcml6YXIsIG5vIGEgbG8gcXVlIGVsIGVkaXRvciBzYWJlIGVkaXRhci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXN1cnZleS1idWlsZGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIElvbkljb24sXG4gICAgSW9uU3Bpbm5lcixcbiAgICBUZXh0SW5wdXRDb21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIEZvcm1GaWVsZENvbXBvbmVudCxcbiAgICBGaWVsZFNjaGVtYUVkaXRvckNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJcIj5cbiAgICAgIEBpZiAoaXNXaXphcmQoKSkge1xuICAgICAgICA8bmF2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3N0ZXBzXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCd3aXphcmRTdGVwc0xhYmVsJylcIj5cbiAgICAgICAgICBAZm9yIChzdGVwIG9mIHdpemFyZFN0ZXBzOyB0cmFjayBzdGVwLmlkOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fc3RlcFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zdXJ2ZXktYnVpbGRlcl9fc3RlcC0tYWN0aXZlXT1cIndpemFyZFN0ZXAoKSA9PT0gaVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJ3aXphcmRTdGVwKCkgPT09IGkgPyAnc3RlcCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9TdGVwKGkpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgaSArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgIHt7IHQoc3RlcC5sYWJlbEtleSkgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9uYXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoIWlzV2l6YXJkKCkpIHtcbiAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCd0aXRsZUxhYmVsJylcIj5cbiAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogdGl0bGVDb250cm9sLCBwbGFjZWhvbGRlcjogdCgndGl0bGVQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3N1YnRpdGxlTGFiZWwnKVwiPlxuICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdWJ0aXRsZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdzdWJ0aXRsZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2hvd1dpemFyZFNlY3Rpb24oMCkpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fc2VjdGlvblwiPlxuICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgndGl0bGVMYWJlbCcpXCI+XG4gICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogdGl0bGVDb250cm9sLCBwbGFjZWhvbGRlcjogdCgndGl0bGVQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdzdWJ0aXRsZUxhYmVsJylcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdWJ0aXRsZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdzdWJ0aXRsZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWxcIj57eyB0KCdwcmVzZW50YXRpb25MYWJlbCcpIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtZmllbGRcIj5cbiAgICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnaGVhZGVySW1hZ2VMYWJlbCcpXCI+XG4gICAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBoZWFkZXJJbWFnZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdoZWFkZXJJbWFnZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgQGlmIChoZWFkZXJJbWFnZUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1wcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImhlYWRlckltYWdlQ29udHJvbC52YWx1ZVwiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1jbGVhclwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2ltYWdlUmVtb3ZlJylcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyUHJlc2VudGF0aW9uSW1hZ2UoJ2hlYWRlcicpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRyYXNoLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAocHJvcHMucHJlc2VudGF0aW9uSW1hZ2VVcGxvYWQpIHtcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZFwiIFtjbGFzcy5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkLS1sb2FkaW5nXT1cInVwbG9hZGluZ0ltYWdlKCkgPT09ICdoZWFkZXInXCI+XG4gICAgICAgICAgICAgICAgQGlmICh1cGxvYWRpbmdJbWFnZSgpID09PSAnaGVhZGVyJykge1xuICAgICAgICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJjcmVzY2VudFwiIC8+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3VkLXVwbG9hZC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgaGVhZGVySW1hZ2VDb250cm9sLnZhbHVlID8gdCgnaW1hZ2VDaGFuZ2UnKSA6IHQoJ2ltYWdlVXBsb2FkJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS9qcGVnLGltYWdlL3BuZyxpbWFnZS93ZWJwLGltYWdlL2dpZiwuanBnLC5qcGVnLC5wbmcsLndlYnAsLmdpZlwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ2hlYWRlcidcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblByZXNlbnRhdGlvbkZpbGVTZWxlY3RlZCgnaGVhZGVyJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKCFpc1dpemFyZCgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb25zLWxhYmVsXCI+e3sgdCgncHJlc2VudGF0aW9uTGFiZWwnKSB9fTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1maWVsZFwiPlxuICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnaGVhZGVySW1hZ2VMYWJlbCcpXCI+XG4gICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogaGVhZGVySW1hZ2VDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnaGVhZGVySW1hZ2VQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgQGlmIChoZWFkZXJJbWFnZUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtcHJldmlld1wiPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaGVhZGVySW1hZ2VDb250cm9sLnZhbHVlXCIgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLWNsZWFyXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2ltYWdlUmVtb3ZlJylcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclByZXNlbnRhdGlvbkltYWdlKCdoZWFkZXInKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRyYXNoLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHByb3BzLnByZXNlbnRhdGlvbkltYWdlVXBsb2FkKSB7XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkXCIgW2NsYXNzLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQtLWxvYWRpbmddPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ2hlYWRlcidcIj5cbiAgICAgICAgICAgICAgQGlmICh1cGxvYWRpbmdJbWFnZSgpID09PSAnaGVhZGVyJykge1xuICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIiAvPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3VkLXVwbG9hZC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8c3Bhbj57eyBoZWFkZXJJbWFnZUNvbnRyb2wudmFsdWUgPyB0KCdpbWFnZUNoYW5nZScpIDogdCgnaW1hZ2VVcGxvYWQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlL2pwZWcsaW1hZ2UvcG5nLGltYWdlL3dlYnAsaW1hZ2UvZ2lmLC5qcGcsLmpwZWcsLnBuZywud2VicCwuZ2lmXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ2hlYWRlcidcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25QcmVzZW50YXRpb25GaWxlU2VsZWN0ZWQoJ2hlYWRlcicsICRldmVudClcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3N1Y2Nlc3NUaXRsZUxhYmVsJylcIj5cbiAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogc3VjY2Vzc1RpdGxlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3N1Y2Nlc3NUaXRsZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnc3VjY2Vzc01lc3NhZ2VMYWJlbCcpXCI+XG4gICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IHN1Y2Nlc3NNZXNzYWdlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3N1Y2Nlc3NNZXNzYWdlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1maWVsZFwiPlxuICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnc3VjY2Vzc0ltYWdlTGFiZWwnKVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IHN1Y2Nlc3NJbWFnZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdzdWNjZXNzSW1hZ2VQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgQGlmIChzdWNjZXNzSW1hZ2VDb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLXByZXZpZXdcIj5cbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInN1Y2Nlc3NJbWFnZUNvbnRyb2wudmFsdWVcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtY2xlYXJcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnaW1hZ2VSZW1vdmUnKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyUHJlc2VudGF0aW9uSW1hZ2UoJ3N1Y2Nlc3MnKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRyYXNoLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHByb3BzLnByZXNlbnRhdGlvbkltYWdlVXBsb2FkKSB7XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkXCIgW2NsYXNzLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQtLWxvYWRpbmddPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ3N1Y2Nlc3MnXCI+XG4gICAgICAgICAgICAgIEBpZiAodXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJjcmVzY2VudFwiIC8+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvdWQtdXBsb2FkLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHN1Y2Nlc3NJbWFnZUNvbnRyb2wudmFsdWUgPyB0KCdpbWFnZUNoYW5nZScpIDogdCgnaW1hZ2VVcGxvYWQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlL2pwZWcsaW1hZ2UvcG5nLGltYWdlL3dlYnAsaW1hZ2UvZ2lmLC5qcGcsLmpwZWcsLnBuZywud2VicCwuZ2lmXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ3N1Y2Nlc3MnXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUHJlc2VudGF0aW9uRmlsZVNlbGVjdGVkKCdzdWNjZXNzJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICBAaWYgKHNob3dXaXphcmRTZWN0aW9uKDIpKSB7XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3NlY3Rpb25cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWxcIj57eyB0KCdzdGVwQ2xvc2UnKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3N1Y2Nlc3NUaXRsZUxhYmVsJylcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdWNjZXNzVGl0bGVDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnc3VjY2Vzc1RpdGxlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnc3VjY2Vzc01lc3NhZ2VMYWJlbCcpXCI+XG4gICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogc3VjY2Vzc01lc3NhZ2VDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnc3VjY2Vzc01lc3NhZ2VQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1maWVsZFwiPlxuICAgICAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdzdWNjZXNzSW1hZ2VMYWJlbCcpXCI+XG4gICAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdWNjZXNzSW1hZ2VDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnc3VjY2Vzc0ltYWdlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgICBAaWYgKHN1Y2Nlc3NJbWFnZUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1wcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInN1Y2Nlc3NJbWFnZUNvbnRyb2wudmFsdWVcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdpbWFnZVJlbW92ZScpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclByZXNlbnRhdGlvbkltYWdlKCdzdWNjZXNzJylcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwidHJhc2gtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChwcm9wcy5wcmVzZW50YXRpb25JbWFnZVVwbG9hZCkge1xuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkXCIgW2NsYXNzLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQtLWxvYWRpbmddPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ3N1Y2Nlc3MnXCI+XG4gICAgICAgICAgICAgICAgQGlmICh1cGxvYWRpbmdJbWFnZSgpID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIiAvPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG91ZC11cGxvYWQtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN1Y2Nlc3NJbWFnZUNvbnRyb2wudmFsdWUgPyB0KCdpbWFnZUNoYW5nZScpIDogdCgnaW1hZ2VVcGxvYWQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlL2pwZWcsaW1hZ2UvcG5nLGltYWdlL3dlYnAsaW1hZ2UvZ2lmLC5qcGcsLmpwZWcsLnBuZywud2VicCwuZ2lmXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1cGxvYWRpbmdJbWFnZSgpID09PSAnc3VjY2VzcydcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblByZXNlbnRhdGlvbkZpbGVTZWxlY3RlZCgnc3VjY2VzcycsICRldmVudClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChzaG93V2l6YXJkU2VjdGlvbigxKSkge1xuICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19xdWVzdGlvbnNcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb25zLWxhYmVsXCI+e3sgdCgncXVlc3Rpb25zTGFiZWwnKSB9fTwvc3Bhbj5cblxuICAgICAgICBAaWYgKCFxdWVzdGlvbnMoKS5sZW5ndGgpIHtcbiAgICAgICAgICA8cCBjbGFzcz1cInN1cnZleS1idWlsZGVyX19lbXB0eVwiPnt7IHQoJ25vUXVlc3Rpb25zJykgfX08L3A+XG4gICAgICAgIH1cblxuICAgICAgICBAZm9yIChyb3cgb2YgcXVlc3Rpb25zKCk7IHRyYWNrIHJvdy5pZDsgbGV0IGkgPSAkaW5kZXg7IGxldCBmaXJzdCA9ICRmaXJzdDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3Jvdy1oZWFkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcm93LXRleHRcIj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHJvdy5sYWJlbCB8fCB0KCd1bnRpdGxlZFF1ZXN0aW9uJykgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyB0eXBlTGFiZWwocm93LnR5cGUpIH19e3sgcm93LnJlcXVpcmVkID8gJyDCtyAnICsgdCgncmVxdWlyZWRUYWcnKSA6ICcnIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbcHJvcHNdPVwiaWNvbkFjdGlvbigncS11cC0nICsgcm93LmlkLCAnYXJyb3ctdXAtb3V0bGluZScsIHQoJ21vdmVVcCcpLCBmaXJzdClcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwibW92ZShpLCAtMSlcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJpY29uQWN0aW9uKCdxLWRvd24tJyArIHJvdy5pZCwgJ2Fycm93LWRvd24tb3V0bGluZScsIHQoJ21vdmVEb3duJyksIGxhc3QpXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm1vdmUoaSwgMSlcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJpY29uQWN0aW9uKCdxLWNvcHktJyArIHJvdy5pZCwgJ2NvcHktb3V0bGluZScsIHQoJ2R1cGxpY2F0ZVF1ZXN0aW9uJykpXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImR1cGxpY2F0ZShyb3cpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbcHJvcHNdPVwiaWNvbkFjdGlvbigncS1lZGl0LScgKyByb3cuaWQsICdjcmVhdGUtb3V0bGluZScsIHQoJ2VkaXRRdWVzdGlvbicpKVwiXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJ0b2dnbGVFZGl0KHJvdylcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJpY29uQWN0aW9uKCdxLXJlbW92ZS0nICsgcm93LmlkLCAndHJhc2gtb3V0bGluZScsIHQoJ3JlbW92ZVF1ZXN0aW9uJyksIGZhbHNlLCAnZGFuZ2VyJylcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwicmVtb3ZlUXVlc3Rpb24ocm93KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgQGlmIChlZGl0aW5nSWQoKSA9PT0gcm93LmlkKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcm93LWVkaXRvclwiPlxuICAgICAgICAgICAgICAgIDx2YWwtZmllbGQtc2NoZW1hLWVkaXRvclxuICAgICAgICAgICAgICAgICAgI2VkaXRvclxuICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cImVkaXRvclByb3BzKHJvdylcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZWQpPVwiZHJhZnRRdWVzdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChzYXZlKT1cImFwcGx5UXVlc3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICdxLWRvbmUtJyArIHJvdy5pZCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdCgnZG9uZUVkaXRpbmcnKSxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3NvbGlkJyxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImVkaXRvci5zdWJtaXQoKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICB0b2tlbjogJ3N1cnZleS1idWlsZGVyLWFkZC1xdWVzdGlvbicsXG4gICAgICAgICAgICB0ZXh0OiB0KCdhZGRRdWVzdGlvbicpLFxuICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgICAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICBzdGF0ZTogJ0VOQUJMRUQnLFxuICAgICAgICAgICAgaWNvbjogeyBuYW1lOiAnYWRkLW91dGxpbmUnLCBzbG90OiAnc3RhcnQnIH0sXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKG9uQ2xpY2spPVwiYWRkUXVlc3Rpb24oKVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmIChzaG93V2l6YXJkU2VjdGlvbigzKSkge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19yZXZpZXdcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWxcIj57eyB0KCdyZXZpZXdUaXRsZScpIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGl0bGVDb250cm9sLnZhbHVlIHx8IHQoJ3VudGl0bGVkUXVlc3Rpb24nKSB9fTwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IHN1YnRpdGxlQ29udHJvbC52YWx1ZSB8fCB0KCdyZXZpZXdOb1N1YnRpdGxlJykgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4+e3sgaW50ZXJwb2xhdGUodCgncmV2aWV3UXVlc3Rpb25zQ291bnQnKSwgeyBjb3VudDogcXVlc3Rpb25zKCkubGVuZ3RoIH0pIH19PC9zcGFuPlxuICAgICAgICAgIEBpZiAoaGVhZGVySW1hZ2VDb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICA8c3Bhbj57eyB0KCdyZXZpZXdIZWFkZXJJbWFnZScpIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8c3Bhbj57eyBzdWNjZXNzSW1hZ2VDb250cm9sLnZhbHVlID8gdCgncmV2aWV3U3VjY2Vzc0ltYWdlJykgOiB0KCdyZXZpZXdEZWZhdWx0Q2xvc2UnKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHZhbGlkYXRpb25FcnJvcigpKSB7XG4gICAgICAgIDxwIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2Vycm9yXCI+e3sgdmFsaWRhdGlvbkVycm9yKCkgfX08L3A+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoaXNXaXphcmQoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3dpemFyZC1hY3Rpb25zXCI+XG4gICAgICAgICAgQGlmICh3aXphcmRTdGVwKCkgPiAwKSB7XG4gICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwid2l6YXJkQmFja1Byb3BzKClcIiAob25DbGljayk9XCJwcmV2aW91c1N0ZXAoKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAod2l6YXJkU3RlcCgpIDwgd2l6YXJkU3RlcHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cIndpemFyZE5leHRQcm9wcygpXCIgKG9uQ2xpY2spPVwibmV4dFN0ZXAoKVwiIC8+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwic2F2ZVByb3BzKClcIiAob25DbGljayk9XCJzYXZlKClcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInNhdmVQcm9wcygpXCIgKG9uQ2xpY2spPVwic2F2ZSgpXCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTZweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19wcmVzZW50YXRpb24ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiA0cHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24sXG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3JldmlldyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fc3RlcHMge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCBtaW5tYXgoMCwgMWZyKSk7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19zdGVwIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgbWluLWhlaWdodDogNDBweDtcbiAgICAgICAgcGFkZGluZzogOHB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMTIpKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY2FyZC1iYWNrZ3JvdW5kLCB2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciwgI2ZmZikpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bS1zaGFkZSwgIzZiNjY3NSk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3N0ZXAgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDIwcHg7XG4gICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgI2Y0ZjVmOCk7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3N0ZXAtLWFjdGl2ZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX193aXphcmQtYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yZXZpZXcge1xuICAgICAgICBwYWRkaW5nOiAxMnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS12YWwtcmFkaXVzLW1kLCAxMnB4KTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IsICNmZmYpKTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcmV2aWV3IHN0cm9uZyB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzAwMCk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3JldmlldyBzcGFuOm5vdCguc3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9ucy1sYWJlbCkge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2ltYWdlLWZpZWxkIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS1wcmV2aWV3IHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtcHJldmlldyBpbWcge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGFzcGVjdC1yYXRpbzogMTYgLyA5O1xuICAgICAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgI2Y0ZjVmOCk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2ltYWdlLWNsZWFyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDhweDtcbiAgICAgICAgcmlnaHQ6IDhweDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB3aWR0aDogMzJweDtcbiAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQ0cHg7XG4gICAgICAgIHBhZGRpbmc6IDEwcHggMThweDtcbiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkIHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMmYyYzNhKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMmYyYzNhKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQ6aG92ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkLS1sb2FkaW5nIHtcbiAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZCBpb24tc3Bpbm5lciB7XG4gICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZCBpbnB1dCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9ucy1sYWJlbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2VtcHR5IHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3JvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdmFsLXJhZGl1cy1tZCwgMTJweCk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jYXJkLWJhY2tncm91bmQsIHZhcigtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKSk7XG4gICAgICB9XG4gICAgICAvKiBNb2JpbGUtZmlyc3Q6IGVsIHRleHRvIGRlIGxhIHByZWd1bnRhIHkgc3VzIGFjY2lvbmVzIGFwaWxhZG9zLiBFbiBmaWxhXG4gICAgICAgICBmaWphLCBjaW5jbyBib3RvbmVzIGxlIGNvbWVuIGVsIGFuY2hvIGFsIHRleHRvIHkgbG8gcGFydGVuIGVuIG11Y2hhc1xuICAgICAgICAgbMOtbmVhcyBhbmdvc3RhcyDigJQganVzdG8gZW4gZWwgdmlld3BvcnQgZG9uZGUgbcOhcyBzZSB1c2EuICovXG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy1oZWFkIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy10ZXh0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAycHg7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcm93LXRleHQgc3Ryb25nIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy10ZXh0IHNwYW4ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yb3ctYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy1lZGl0b3Ige1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxMnB4O1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fZXJyb3Ige1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cbiAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xuICAgICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy1oZWFkIHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgfVxuICAgICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy10ZXh0IHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU3VydmV5QnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHByb3BzOiBTdXJ2ZXlCdWlsZGVyTWV0YWRhdGEgPSB7fTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxTdXJ2ZXlCdWlsZGVyU2F2ZUV2ZW50PigpO1xuICAvKipcbiAgICogRW1pdGUgbG8gZXNjcml0bywgeWEgdmFsaWRhZG8sIFNJTiBndWFyZGFybG8uIFNvbG8gY29uIGBwcm9wcy5wZXJzaXN0OlxuICAgKiBmYWxzZWAg4oCUIHZlciBlbCBjb21lbnRhcmlvIGRlIGVzZSBjYW1wbzogY3VhbmRvIGxhIGFwcCB0aWVuZSBlbmRwb2ludFxuICAgKiBwcm9waW8sIGd1YXJkYXIgZGVzZGUgYWPDoSBzZSBzYWx0YSBsYSB2YWxpZGFjacOzbiBkZSBsYSBlbnRpZGFkIGR1ZcOxYSB5IGVsXG4gICAqIHBlcm1pc28gZGUgbGEgdmVydGljYWwuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZHJhZnQgPSBuZXcgRXZlbnRFbWl0dGVyPFN1cnZleURyYWZ0RXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0cyA9IGluamVjdChSZXF1ZXN0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXIgPSBpbmplY3QoUmVxdWVzdEZvcm1CdWlsZGVyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IHRpdGxlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgc3VidGl0bGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuICByZWFkb25seSBoZWFkZXJJbWFnZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHN1Y2Nlc3NUaXRsZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHN1Y2Nlc3NNZXNzYWdlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgc3VjY2Vzc0ltYWdlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgcXVlc3Rpb25zID0gc2lnbmFsPEVkaXRhYmxlRmllbGREZWZbXT4oW10pO1xuICByZWFkb25seSBlZGl0aW5nSWQgPSBzaWduYWwoJycpO1xuICByZWFkb25seSB3aXphcmRTdGVwID0gc2lnbmFsKDApO1xuICByZWFkb25seSB2YWxpZGF0aW9uRXJyb3IgPSBzaWduYWwoJycpO1xuICByZWFkb25seSBzYXZpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSB1cGxvYWRpbmdJbWFnZSA9IHNpZ25hbDwnaGVhZGVyJyB8ICdzdWNjZXNzJyB8ICcnPignJyk7XG5cbiAgcmVhZG9ubHkgd2l6YXJkU3RlcHMgPSBbXG4gICAgeyBpZDogJ3N0YXJ0JywgbGFiZWxLZXk6ICdzdGVwU3RhcnQnIH0sXG4gICAgeyBpZDogJ3F1ZXN0aW9ucycsIGxhYmVsS2V5OiAnc3RlcFF1ZXN0aW9ucycgfSxcbiAgICB7IGlkOiAnY2xvc2UnLCBsYWJlbEtleTogJ3N0ZXBDbG9zZScgfSxcbiAgICB7IGlkOiAncmV2aWV3JywgbGFiZWxLZXk6ICdzdGVwUmV2aWV3JyB9LFxuICBdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dlZEltYWdlVHlwZXMgPSBbJ2ltYWdlL2pwZWcnLCAnaW1hZ2UvcG5nJywgJ2ltYWdlL3dlYnAnLCAnaW1hZ2UvZ2lmJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4SW1hZ2VCeXRlcyA9IDEwICogMTAyNCAqIDEwMjQ7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmkxOG4uaGFzTmFtZXNwYWNlKE5BTUVTUEFDRSkpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKE5BTUVTUEFDRSwgU1VSVkVZX0JVSUxERVJfSTE4Tik7XG4gICAgfVxuICAgIC8vIEVsIG5vbWJyZSBkZWwgdGlwbyBkZSBjYWRhIHByZWd1bnRhIHNlIG11ZXN0cmEgZW4gbGEgZmlsYSBjb2xhcHNhZGEsIHF1ZVxuICAgIC8vIGRpYnVqYSBlc3RlIGNvbXBvbmVudGUgeSBubyBlbCBlZGl0b3Ig4oCUIHNpIG5hZGllIG1vbnTDsyB1biBlZGl0b3IgdG9kYXbDrWEsXG4gICAgLy8gZWwgbmFtZXNwYWNlIG5vIGV4aXN0aXLDrWEgeSBsYSBmaWxhIG1vc3RyYXLDrWEgbGEgY2xhdmUgY3J1ZGEuXG4gICAgaWYgKCF0aGlzLmkxOG4uaGFzTmFtZXNwYWNlKEVESVRPUl9OQU1FU1BBQ0UpKSB7XG4gICAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhFRElUT1JfTkFNRVNQQUNFLCBGSUVMRF9TQ0hFTUFfRURJVE9SX0kxOE4pO1xuICAgIH1cbiAgICBhZGRJY29ucyh7IGNsb3VkVXBsb2FkT3V0bGluZSwgdHJhc2hPdXRsaW5lIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gU2VtYnJhZG8gZGlyZWN0bzogbGEgYXBwIHlhIHRlbsOtYSBsYSBlbmN1ZXN0YSwgbm8gaGFjZSBmYWx0YSBsZWVybGEuXG4gICAgaWYgKHRoaXMucHJvcHMuaW5pdGlhbCkge1xuICAgICAgdGhpcy5oeWRyYXRlKFxuICAgICAgICB0aGlzLnByb3BzLmluaXRpYWwubGFiZWwsXG4gICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbC5zdWJ0aXRsZSxcbiAgICAgICAgdGhpcy5wcm9wcy5pbml0aWFsLnF1ZXN0aW9ucyxcbiAgICAgICAgdGhpcy5wcm9wcy5pbml0aWFsLnByZXNlbnRhdGlvblxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnByb3BzLnR5cGVJZCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjZmcgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnJlcXVlc3RzLmdldFJlcXVlc3RUeXBlKHRoaXMucHJvcHMudHlwZUlkKSk7XG4gICAgICB0aGlzLmh5ZHJhdGUoY2ZnLmxhYmVsLCBjZmcuc3VidGl0bGUgPz8gJycsIGNmZy5maWVsZFNjaGVtYSwgY2ZnLnByZXNlbnRhdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdzdXJ2ZXlCdWlsZGVyLmxvYWQnLFxuICAgICAgICBmYWxsYmFja0tleTogJ2xvYWRFcnJvcicsXG4gICAgICAgIGkxOG5OYW1lc3BhY2U6IE5BTUVTUEFDRSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgTkFNRVNQQUNFKTtcbiAgfVxuXG4gIHR5cGVMYWJlbCh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGB0eXBlJHt0eXBlfWAsIEVESVRPUl9OQU1FU1BBQ0UpO1xuICB9XG5cbiAgcXVlc3Rpb25UeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb25UeXBlcz8ubGVuZ3RoID8gdGhpcy5wcm9wcy5xdWVzdGlvblR5cGVzIDogU1VSVkVZX1FVRVNUSU9OX1RZUEVTO1xuICB9XG5cbiAgaXNXaXphcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubGF5b3V0ID09PSAnd2l6YXJkJztcbiAgfVxuXG4gIHNob3dXaXphcmRTZWN0aW9uKHN0ZXA6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzV2l6YXJkKCkgJiYgdGhpcy53aXphcmRTdGVwKCkgPT09IHN0ZXA7XG4gIH1cblxuICBnb1RvU3RlcChzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNXaXphcmQoKSkgcmV0dXJuO1xuICAgIGlmIChzdGVwIDw9IHRoaXMud2l6YXJkU3RlcCgpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQoJycpO1xuICAgICAgdGhpcy53aXphcmRTdGVwLnNldChzdGVwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2hpbGUgKHRoaXMud2l6YXJkU3RlcCgpIDwgc3RlcCkge1xuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlV2l6YXJkU3RlcCh0aGlzLndpemFyZFN0ZXAoKSkpIHJldHVybjtcbiAgICAgIHRoaXMud2l6YXJkU3RlcC51cGRhdGUoY3VycmVudCA9PiBjdXJyZW50ICsgMSk7XG4gICAgfVxuICB9XG5cbiAgbmV4dFN0ZXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlV2l6YXJkU3RlcCh0aGlzLndpemFyZFN0ZXAoKSkpIHJldHVybjtcbiAgICB0aGlzLndpemFyZFN0ZXAudXBkYXRlKHN0ZXAgPT4gTWF0aC5taW4oc3RlcCArIDEsIHRoaXMud2l6YXJkU3RlcHMubGVuZ3RoIC0gMSkpO1xuICB9XG5cbiAgcHJldmlvdXNTdGVwKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG4gICAgdGhpcy53aXphcmRTdGVwLnVwZGF0ZShzdGVwID0+IE1hdGgubWF4KHN0ZXAgLSAxLCAwKSk7XG4gIH1cblxuICB3aXphcmRCYWNrUHJvcHMoKTogQnV0dG9uTWV0YWRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogJ3N1cnZleS1idWlsZGVyLXdpemFyZC1iYWNrJyxcbiAgICAgIHRleHQ6IHRoaXMudCgncHJldmlvdXMnKSxcbiAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH07XG4gIH1cblxuICB3aXphcmROZXh0UHJvcHMoKTogQnV0dG9uTWV0YWRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogJ3N1cnZleS1idWlsZGVyLXdpemFyZC1uZXh0JyxcbiAgICAgIHRleHQ6IHRoaXMudCgnbmV4dCcpLFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgIGZpbGw6ICdzb2xpZCcsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH07XG4gIH1cblxuICBzYXZlUHJvcHMoKTogQnV0dG9uTWV0YWRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogJ3N1cnZleS1idWlsZGVyLXNhdmUnLFxuICAgICAgdGV4dDogdGhpcy50KCdzYXZlJyksXG4gICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgZmlsbDogJ3NvbGlkJyxcbiAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgIGV4cGFuZDogdGhpcy5pc1dpemFyZCgpID8gdW5kZWZpbmVkIDogJ2Jsb2NrJyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgc3RhdGU6IHRoaXMuc2F2aW5nKCkgPyBDb21wb25lbnRTdGF0ZXMuV09SS0lORyA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH07XG4gIH1cblxuICBpbnRlcnBvbGF0ZSh0ZW1wbGF0ZTogc3RyaW5nLCB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4pOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh2YWx1ZXMpLnJlZHVjZShcbiAgICAgICh0ZXh0LCBba2V5LCB2YWx1ZV0pID0+IHRleHQucmVwbGFjZUFsbChgeyR7a2V5fX1gLCBTdHJpbmcodmFsdWUpKSxcbiAgICAgIHRlbXBsYXRlXG4gICAgKTtcbiAgfVxuXG4gIGVkaXRvclByb3BzKHJvdzogRWRpdGFibGVGaWVsZERlZik6IEZpZWxkU2NoZW1hRWRpdG9yTWV0YWRhdGEge1xuICAgIHJldHVybiB7IG1vZGU6ICdlZGl0JywgZmllbGQ6IHJvdywgYWxsb3dlZFR5cGVzOiB0aGlzLnF1ZXN0aW9uVHlwZXMoKSB9O1xuICB9XG5cbiAgaWNvbkFjdGlvbihcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGljb246IHN0cmluZyxcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgY29sb3I6IENvbG9yID0gJ2RhcmsnXG4gICk6IEJ1dHRvbk1ldGFkYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICB0ZXh0OiAnJyxcbiAgICAgIGFyaWFMYWJlbDogbGFiZWwsXG4gICAgICBjb2xvcixcbiAgICAgIGZpbGw6ICdjbGVhcicsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIHN0YXRlOiBkaXNhYmxlZCA/IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgaWNvbjogeyBuYW1lOiBpY29uLCBzbG90OiAnaWNvbi1vbmx5JyB9LFxuICAgIH07XG4gIH1cblxuICBhZGRRdWVzdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCByb3c6IEVkaXRhYmxlRmllbGREZWYgPSB7XG4gICAgICBpZDogYHJvdy0ke3Jvd1VpZCsrfWAsXG4gICAgICBuYW1lOiAnJyxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIHBsYWNlaG9sZGVyVGV4dDogJycsXG4gICAgICBoaW50VGV4dDogJycsXG4gICAgICB0eXBlOiB0aGlzLnF1ZXN0aW9uVHlwZXMoKVswXSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbnMudXBkYXRlKHJvd3MgPT4gWy4uLnJvd3MsIHJvd10pO1xuICAgIC8vIFVuYSBwcmVndW50YSByZWNpw6luIGFncmVnYWRhIGVzdMOhIHZhY8OtYTogYWJyaXJsYSBlcyBlbCDDum5pY28gcGFzb1xuICAgIC8vIHNpZ3VpZW50ZSBwb3NpYmxlLCB5IGRlamFybGEgY2VycmFkYSBsYSBoYXLDrWEgdmVyIGNvbW8gdW5hIGZpbGEgcm90YS5cbiAgICB0aGlzLmVkaXRpbmdJZC5zZXQocm93LmlkKTtcbiAgfVxuXG4gIHRvZ2dsZUVkaXQocm93OiBFZGl0YWJsZUZpZWxkRGVmKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0aW5nSWQudXBkYXRlKGN1cnJlbnQgPT4gKGN1cnJlbnQgPT09IHJvdy5pZCA/ICcnIDogcm93LmlkKSk7XG4gIH1cblxuICByZW1vdmVRdWVzdGlvbihyb3c6IEVkaXRhYmxlRmllbGREZWYpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXN0aW9ucy51cGRhdGUocm93cyA9PiByb3dzLmZpbHRlcihyID0+IHIuaWQgIT09IHJvdy5pZCkpO1xuICAgIGlmICh0aGlzLmVkaXRpbmdJZCgpID09PSByb3cuaWQpIHRoaXMuZWRpdGluZ0lkLnNldCgnJyk7XG4gIH1cblxuICBkdXBsaWNhdGUocm93OiBFZGl0YWJsZUZpZWxkRGVmKTogdm9pZCB7XG4gICAgY29uc3QgY29weTogRWRpdGFibGVGaWVsZERlZiA9IHtcbiAgICAgIC4uLnJvdyxcbiAgICAgIGlkOiBgcm93LSR7cm93VWlkKyt9YCxcbiAgICAgIC8vIFNpbiB0b2tlbiBwcm9waW8gbGEgY29waWEgcGlzYXLDrWEgbGFzIHJlc3B1ZXN0YXMgZGVsIG9yaWdpbmFsOiBkb3NcbiAgICAgIC8vIGNhbXBvcyBjb24gZWwgbWlzbW8gYG5hbWVgIHNvbiBlbCBtaXNtbyBjYW1wbyBwYXJhIGVsIGJhY2tlbmQuXG4gICAgICBuYW1lOiB0aGlzLmZvcm1CdWlsZGVyLnVuaXF1ZUZpZWxkTmFtZShyb3cubmFtZSB8fCByb3cubGFiZWwsIHRoaXMucXVlc3Rpb25zKCkpLFxuICAgICAgb3B0aW9uczogcm93Lm9wdGlvbnMgPyByb3cub3B0aW9ucy5tYXAobyA9PiAoeyAuLi5vIH0pKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gcm93cy5maW5kSW5kZXgociA9PiByLmlkID09PSByb3cuaWQpO1xuICAgICAgcmV0dXJuIFsuLi5yb3dzLnNsaWNlKDAsIGluZGV4ICsgMSksIGNvcHksIC4uLnJvd3Muc2xpY2UoaW5kZXggKyAxKV07XG4gICAgfSk7XG4gIH1cblxuICBtb3ZlKGluZGV4OiBudW1iZXIsIGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBpbmRleCArIGRlbHRhO1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHtcbiAgICAgIGlmICh0YXJnZXQgPCAwIHx8IHRhcmdldCA+PSByb3dzLmxlbmd0aCkgcmV0dXJuIHJvd3M7XG4gICAgICBjb25zdCBuZXh0ID0gWy4uLnJvd3NdO1xuICAgICAgW25leHRbaW5kZXhdLCBuZXh0W3RhcmdldF1dID0gW25leHRbdGFyZ2V0XSwgbmV4dFtpbmRleF1dO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3VhcmRhIGxvIHF1ZSBzZSBlc3TDoSBlc2NyaWJpZW5kbywgc2luIGNlcnJhciBlbCBlZGl0b3IgbmkgdmFsaWRhci5cbiAgICpcbiAgICogU2luIGVzdG8sIGxvIHRpcGVhZG8gc29sbyBleGlzdMOtYSBkZW50cm8gZGVsIGVkaXRvciBoYXN0YSBxdWUgYWxndWllblxuICAgKiB0b2NhYmEgXCJMaXN0b1wiOiBsYSBmaWxhIHNlZ3XDrWEgZGljaWVuZG8gXCJQcmVndW50YSBzaW4gdGV4dG9cIiB5LCBwZW9yLFxuICAgKiBcIkd1YXJkYXIgZW5jdWVzdGFcIiBmYWxsYWJhIGNvbiBcInRvZGFzIGxhcyBwcmVndW50YXMgbmVjZXNpdGFuIHRleHRvXCIgc29icmVcbiAgICogdW5hIHByZWd1bnRhIHF1ZSBlbiBwYW50YWxsYSBjbGFyYW1lbnRlIHRlbsOtYSB0ZXh0by4gVG9jYXIgXCJMaXN0b1wiIGVyYSB1blxuICAgKiBwYXNvIG9ibGlnYXRvcmlvIHF1ZSBubyBzZSB2ZcOtYSBwb3IgbmluZ8O6biBsYWRvLlxuICAgKi9cbiAgZHJhZnRRdWVzdGlvbihmaWVsZDogRWRpdGFibGVGaWVsZERlZik6IHZvaWQge1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHJvd3MubWFwKHIgPT4gKHIuaWQgPT09IGZpZWxkLmlkID8geyAuLi5yLCAuLi5maWVsZCB9IDogcikpKTtcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uRXJyb3IoKSkgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KCcnKTtcbiAgfVxuXG4gIGFwcGx5UXVlc3Rpb24oZmllbGQ6IEVkaXRhYmxlRmllbGREZWYpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXN0aW9ucy51cGRhdGUocm93cyA9PlxuICAgICAgcm93cy5tYXAociA9PlxuICAgICAgICByLmlkID09PSBmaWVsZC5pZFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgICAgICAgbmFtZTogdGhpcy5mb3JtQnVpbGRlci51bmlxdWVGaWVsZE5hbWUoXG4gICAgICAgICAgICAgICAgZmllbGQubmFtZSB8fCBmaWVsZC5sYWJlbCxcbiAgICAgICAgICAgICAgICByb3dzLmZpbHRlcihvID0+IG8uaWQgIT09IHIuaWQpXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiByXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLmVkaXRpbmdJZC5zZXQoJycpO1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG4gIH1cblxuICBhc3luYyBvblByZXNlbnRhdGlvbkZpbGVTZWxlY3RlZChzbG90OiAnaGVhZGVyJyB8ICdzdWNjZXNzJywgZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXM/LlswXTtcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgIGlmICghZmlsZSB8fCAhdGhpcy5wcm9wcy5wcmVzZW50YXRpb25JbWFnZVVwbG9hZCB8fCB0aGlzLnVwbG9hZGluZ0ltYWdlKCkpIHJldHVybjtcblxuICAgIGlmIChmaWxlLnR5cGUgJiYgIXRoaXMuYWxsb3dlZEltYWdlVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KHRoaXMudCgnaW1hZ2VUeXBlRXJyb3InKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChmaWxlLnNpemUgPiB0aGlzLm1heEltYWdlQnl0ZXMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCh0aGlzLnQoJ2ltYWdlU2l6ZUVycm9yJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBsb2FkaW5nSW1hZ2Uuc2V0KHNsb3QpO1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHRoaXMucHJvcHMucHJlc2VudGF0aW9uSW1hZ2VVcGxvYWQoc2xvdCwgZmlsZSk7XG4gICAgICBpZiAoc2xvdCA9PT0gJ2hlYWRlcicpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJJbWFnZUNvbnRyb2wuc2V0VmFsdWUodXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3VjY2Vzc0ltYWdlQ29udHJvbC5zZXRWYWx1ZSh1cmwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiBgc3VydmV5QnVpbGRlci5wcmVzZW50YXRpb25JbWFnZVVwbG9hZCBzbG90PSR7c2xvdH1gLFxuICAgICAgICBmYWxsYmFja0tleTogJ2ltYWdlVXBsb2FkRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiBOQU1FU1BBQ0UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51cGxvYWRpbmdJbWFnZS5zZXQoJycpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyUHJlc2VudGF0aW9uSW1hZ2Uoc2xvdDogJ2hlYWRlcicgfCAnc3VjY2VzcycpOiB2b2lkIHtcbiAgICBpZiAoc2xvdCA9PT0gJ2hlYWRlcicpIHtcbiAgICAgIHRoaXMuaGVhZGVySW1hZ2VDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdWNjZXNzSW1hZ2VDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc2F2aW5nKCkpIHJldHVybjtcbiAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQoJycpO1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlV2l6YXJkU3RlcCgwKSB8fCAhdGhpcy52YWxpZGF0ZVdpemFyZFN0ZXAoMSkpIHJldHVybjtcblxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy50aXRsZUNvbnRyb2wudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLnF1ZXN0aW9ucygpO1xuICAgIGNvbnN0IGZpZWxkU2NoZW1hOiBGaWVsZFNjaGVtYURlZltdID0gW107XG4gICAgcm93cy5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5mb3JtQnVpbGRlci51bmlxdWVGaWVsZE5hbWUocm93Lm5hbWUgfHwgcm93LmxhYmVsLCBmaWVsZFNjaGVtYSk7XG4gICAgICBmaWVsZFNjaGVtYS5wdXNoKFxuICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmNyZWF0ZUZpZWxkU2NoZW1hKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBsYWJlbDogcm93LmxhYmVsLnRyaW0oKSxcbiAgICAgICAgICAgIHR5cGU6IHJvdy50eXBlLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHJvdy5yZXF1aXJlZCxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyVGV4dDogcm93LnBsYWNlaG9sZGVyVGV4dCxcbiAgICAgICAgICAgIGhpbnRUZXh0OiByb3cuaGludFRleHQsXG4gICAgICAgICAgICBvcHRpb25zOiByb3cub3B0aW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluZGV4XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzdWJ0aXRsZSA9IHRoaXMuc3VidGl0bGVDb250cm9sLnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBwcmVzZW50YXRpb24gPSB0aGlzLnByZXNlbnRhdGlvblBheWxvYWQoKTtcblxuICAgIC8vIExhIGFwcCBndWFyZGE6IGFjw6Egc29sbyBzZSB2YWxpZGEgeSBzZSBlbnRyZWdhIGxvIGVzY3JpdG8uXG4gICAgaWYgKHRoaXMucHJvcHMucGVyc2lzdCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZHJhZnQuZW1pdCh7IGxhYmVsOiB0aXRsZSwgc3VidGl0bGUsIHByZXNlbnRhdGlvbiwgcXVlc3Rpb25zOiBmaWVsZFNjaGVtYSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmluZy5zZXQodHJ1ZSk7XG5cbiAgICAvLyBgdHlwZUlkYCBkZXJpdmFkbyBkZWwgdMOtdHVsbzogc2lydmUgcGFyYSB1biB0aXBvIGRlIHNvbGljaXR1ZCBkZVxuICAgIC8vIHBsYXRhZm9ybWEsIGRvbmRlIGVsIHTDrXR1bG8gRVMgbGEgaWRlbnRpZGFkLiBQYXJhIHVuYSBlbmN1ZXN0YSBhdGFkYSBhXG4gICAgLy8gdW5hIGVudGlkYWQgTk8gYWxjYW56YSDigJQgZG9zIGV2ZW50b3MgY29uIGVsIG1pc21vIHTDrXR1bG8gY29saXNpb25hcsOtYW4gZW5cbiAgICAvLyBlbCBtaXNtbyB0aXBvIHkgY29tcGFydGlyw61hbiByZXNwdWVzdGFzLiBQb3IgZXNvIHVuYSB2ZXJ0aWNhbCB1c2Egc3VcbiAgICAvLyBlbmRwb2ludCAoYHBlcnNpc3Q6IGZhbHNlYCkgeSBhcm1hIGVsIGlkIGNvbiBsYSBlbnRpZGFkIGFkZW50cm8uXG4gICAgY29uc3QgdHlwZUlkID1cbiAgICAgIHRoaXMucHJvcHMudHlwZUlkID8/IGAke3RoaXMucHJvcHMudHlwZVByZWZpeCA/PyBERUZBVUxUX1RZUEVfUFJFRklYfToke3RoaXMuZm9ybUJ1aWxkZXIudG9Ub2tlbih0aXRsZSl9YDtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBsYWJlbDogdGl0bGUsXG4gICAgICBzdWJ0aXRsZSxcbiAgICAgIHByZXNlbnRhdGlvbixcbiAgICAgIGVudGl0eVJlZjogdGhpcy5wcm9wcy5lbnRpdHlSZWYsXG4gICAgICBza2lwUmV2aWV3OiB0cnVlLFxuICAgICAgc2tpcFN1Ym1pdHRlcklkZW50aXR5OiB0cnVlLFxuICAgICAgZmllbGRTY2hlbWEsXG4gICAgICBhbGxvd0Fub255bW91czogdGhpcy5wcm9wcy5hbGxvd0Fub255bW91cyA/PyB0cnVlLFxuICAgICAgdmlzaWJpbGl0eTogdGhpcy5wcm9wcy52aXNpYmlsaXR5ID8/ICgnUFVCTElDJyBhcyBjb25zdCksXG4gICAgfTtcblxuICAgIGNvbnN0IGNhbGwkID0gdGhpcy5wcm9wcy50eXBlSWRcbiAgICAgID8gdGhpcy5yZXF1ZXN0cy51cGRhdGVSZXF1ZXN0VHlwZSh0aGlzLnByb3BzLnR5cGVJZCwgcGF5bG9hZClcbiAgICAgIDogdGhpcy5yZXF1ZXN0cy5jcmVhdGVSZXF1ZXN0VHlwZSh7IC4uLnBheWxvYWQsIHR5cGVJZCB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0eXBlQ29uZmlnID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oY2FsbCQpO1xuICAgICAgdGhpcy5zYXZpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuc2F2ZWQuZW1pdCh7IHR5cGVDb25maWcgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNhdmluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnc3VydmV5QnVpbGRlci5zYXZlJyxcbiAgICAgICAgZmFsbGJhY2tLZXk6ICdzYXZlRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiBOQU1FU1BBQ0UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGh5ZHJhdGUoXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBzdWJ0aXRsZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uczogRmllbGRTY2hlbWFEZWZbXSxcbiAgICBwcmVzZW50YXRpb24/OiBSZXF1ZXN0VHlwZVByZXNlbnRhdGlvblxuICApOiB2b2lkIHtcbiAgICB0aGlzLnRpdGxlQ29udHJvbC5zZXRWYWx1ZShsYWJlbCA/PyAnJyk7XG4gICAgdGhpcy5zdWJ0aXRsZUNvbnRyb2wuc2V0VmFsdWUoc3VidGl0bGUgPz8gJycpO1xuICAgIHRoaXMuaGVhZGVySW1hZ2VDb250cm9sLnNldFZhbHVlKHByZXNlbnRhdGlvbj8uaGVhZGVySW1hZ2VVcmwgPz8gJycpO1xuICAgIHRoaXMuc3VjY2Vzc1RpdGxlQ29udHJvbC5zZXRWYWx1ZShwcmVzZW50YXRpb24/LnN1Y2Nlc3NUaXRsZSA/PyAnJyk7XG4gICAgdGhpcy5zdWNjZXNzTWVzc2FnZUNvbnRyb2wuc2V0VmFsdWUocHJlc2VudGF0aW9uPy5zdWNjZXNzTWVzc2FnZSA/PyAnJyk7XG4gICAgdGhpcy5zdWNjZXNzSW1hZ2VDb250cm9sLnNldFZhbHVlKHByZXNlbnRhdGlvbj8uc3VjY2Vzc0ltYWdlVXJsID8/ICcnKTtcbiAgICB0aGlzLnF1ZXN0aW9ucy5zZXQoWy4uLihxdWVzdGlvbnMgPz8gW10pXS5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcikubWFwKGYgPT4gdGhpcy5yb3dGcm9tRmllbGQoZikpKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlc2VudGF0aW9uUGF5bG9hZCgpOiBSZXF1ZXN0VHlwZVByZXNlbnRhdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcHJlc2VudGF0aW9uID0ge1xuICAgICAgaGVhZGVySW1hZ2VVcmw6IHRoaXMuaGVhZGVySW1hZ2VDb250cm9sLnZhbHVlLnRyaW0oKSxcbiAgICAgIHN1Y2Nlc3NUaXRsZTogdGhpcy5zdWNjZXNzVGl0bGVDb250cm9sLnZhbHVlLnRyaW0oKSxcbiAgICAgIHN1Y2Nlc3NNZXNzYWdlOiB0aGlzLnN1Y2Nlc3NNZXNzYWdlQ29udHJvbC52YWx1ZS50cmltKCksXG4gICAgICBzdWNjZXNzSW1hZ2VVcmw6IHRoaXMuc3VjY2Vzc0ltYWdlQ29udHJvbC52YWx1ZS50cmltKCksXG4gICAgfTtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhwcmVzZW50YXRpb24pLnNvbWUoQm9vbGVhbikgPyBwcmVzZW50YXRpb24gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlV2l6YXJkU3RlcChzdGVwOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQoJycpO1xuICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICBpZiAoIXRoaXMudGl0bGVDb250cm9sLnZhbHVlLnRyaW0oKSkge1xuICAgICAgICB0aGlzLnRpdGxlQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCh0aGlzLnQoJ25vVGl0bGUnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoc3RlcCA9PT0gMSkge1xuICAgICAgY29uc3Qgcm93cyA9IHRoaXMucXVlc3Rpb25zKCk7XG4gICAgICBpZiAoIXJvd3MubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCh0aGlzLnQoJ25vUXVlc3Rpb25zJykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAocm93cy5zb21lKHIgPT4gIXIubGFiZWwudHJpbSgpKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQodGhpcy50KCdlbXB0eVF1ZXN0aW9uTGFiZWwnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEVsIGVkaXRvciB5YSBsbyB2YWxpZGEgYWwgY2VycmFyIGNhZGEgcHJlZ3VudGEsIHBlcm8gdW5hIHByZWd1bnRhIGFiaWVydGFcbiAgICAgIC8vIChvIGNhcmdhZGEgZGUgdW5hIGVuY3Vlc3RhIHZpZWphKSBwdWVkZSBsbGVnYXIgYWPDoSBzaW4gb3BjaW9uZXMuXG4gICAgICBpZiAocm93cy5zb21lKHIgPT4gRklFTERfVFlQRVNfV0lUSF9PUFRJT05TLmluY2x1ZGVzKHIudHlwZSkgJiYgIXIub3B0aW9ucz8ubGVuZ3RoKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQodGhpcy50KCdtaXNzaW5nT3B0aW9ucycpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcm93RnJvbUZpZWxkKGY6IEZpZWxkU2NoZW1hRGVmKTogRWRpdGFibGVGaWVsZERlZiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgcm93LSR7cm93VWlkKyt9YCxcbiAgICAgIG5hbWU6IGYubmFtZSxcbiAgICAgIGxhYmVsOiBmLmxhYmVsID8/ICcnLFxuICAgICAgcGxhY2Vob2xkZXJUZXh0OiBmLnBsYWNlaG9sZGVyVGV4dCA/PyAnJyxcbiAgICAgIGhpbnRUZXh0OiBmLmhpbnRUZXh0ID8/ICcnLFxuICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgcmVxdWlyZWQ6ICEhZi5yZXF1aXJlZCxcbiAgICAgIG9wdGlvbnM6IGYub3B0aW9ucyxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
1166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9zdXJ2ZXktYnVpbGRlci9zdXJ2ZXktYnVpbGRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBRXBHLE9BQU8sRUFBa0IsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFP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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK1RUO3dEQWlPUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ2EsS0FBSztzQkFBdkIsTUFBTTtnQkFPWSxLQUFLO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElvbkljb24sIElvblNwaW5uZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgY2xvdWRVcGxvYWRPdXRsaW5lLCBleWVPdXRsaW5lLCB0cmFzaE91dGxpbmUgfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXF1ZXN0cy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdEZvcm1CdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3JlcXVlc3RzL3JlcXVlc3QtZm9ybS1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmllbGRTY2hlbWFEZWYsIFJlcXVlc3RUeXBlUHJlc2VudGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVxdWVzdHMvdHlwZXMnO1xuaW1wb3J0IHsgQnV0dG9uTWV0YWRhdGEsIENvbXBvbmVudFN0YXRlcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgQ29sb3IgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBWYWx0ZWNoRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL3ZhbHRlY2gtZXJyb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IFRleHRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90ZXh0LWlucHV0L3RleHQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEZJRUxEX1RZUEVTX1dJVEhfT1BUSU9OUyxcbiAgRmllbGRTY2hlbWFFZGl0b3JDb21wb25lbnQsXG59IGZyb20gJy4uL2ZpZWxkLXNjaGVtYS1lZGl0b3IvZmllbGQtc2NoZW1hLWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRklFTERfU0NIRU1BX0VESVRPUl9JMThOIH0gZnJvbSAnLi4vZmllbGQtc2NoZW1hLWVkaXRvci9maWVsZC1zY2hlbWEtZWRpdG9yLmkxOG4nO1xuaW1wb3J0IHsgRWRpdGFibGVGaWVsZERlZiwgRmllbGRTY2hlbWFFZGl0b3JNZXRhZGF0YSB9IGZyb20gJy4uL2ZpZWxkLXNjaGVtYS1lZGl0b3IvdHlwZXMnO1xuaW1wb3J0IHtcbiAgU3VydmV5QnVpbGRlck1ldGFkYXRhLFxuICBTdXJ2ZXlCdWlsZGVyU2F2ZUV2ZW50LFxuICBTdXJ2ZXlEcmFmdEV2ZW50LFxuICBTVVJWRVlfUVVFU1RJT05fVFlQRVMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgU1VSVkVZX0JVSUxERVJfSTE4TiB9IGZyb20gJy4vc3VydmV5LWJ1aWxkZXIuaTE4bic7XG5pbXBvcnQgeyBTdXJ2ZXlQcmV2aWV3TW9kYWxDb21wb25lbnQgfSBmcm9tICcuL3N1cnZleS1wcmV2aWV3LW1vZGFsLmNvbXBvbmVudCc7XG5cbmNvbnN0IE5BTUVTUEFDRSA9ICdTdXJ2ZXlCdWlsZGVyJztcbmNvbnN0IEVESVRPUl9OQU1FU1BBQ0UgPSAnRmllbGRTY2hlbWFFZGl0b3InO1xuY29uc3QgREVGQVVMVF9UWVBFX1BSRUZJWCA9ICdzdXJ2ZXknO1xuXG5sZXQgcm93VWlkID0gMDtcblxuLyoqXG4gKiB2YWwtc3VydmV5LWJ1aWxkZXJcbiAqXG4gKiBBdXRvcsOtYSBkZSB1bmEgZW5jdWVzdGE6IHTDrXR1bG8sIHN1YnTDrXR1bG8sIHByZWd1bnRhcyDigJQgYXJtYSBvIGFjdHVhbGl6YSB1blxuICogYFJlcXVlc3RUeXBlQ29uZmlnYCBjb24gYFR5cGU6IFwiPHByZWZpeD46PHNsdWc+XCJgIChBRFItMDkyKSwgYHNraXBSZXZpZXc6XG4gKiB0cnVlYCAoY2FkYSByZXNwdWVzdGEgc2UgYWdyZWdhLCBubyBzZSByZXZpc2EgdW5hIHBvciB1bmEpIHkgZWwgYEVudGl0eVJlZmBcbiAqIHF1ZSBsZSBwYXNhIGVsIGNvbnN1bWVyIChlai4gZWwgZXZlbnRvIGRlIGJpbmdvIGR1ZcOxbyBkZSBsYSBlbmN1ZXN0YSkuXG4gKlxuICogQ2FkYSBwcmVndW50YSBzZSBlZGl0YSBjb24gYHZhbC1maWVsZC1zY2hlbWEtZWRpdG9yYCwgZWwgbWlzbW8gZWRpdG9yIHF1ZSB1c2FcbiAqIGVsIGNoZWNrb3V0IGRlIGJpbmdvIOKAlCBkZSBhaMOtIHF1ZSB1bmEgcHJlZ3VudGEgdGVuZ2EgdGlwbywgcGxhY2Vob2xkZXIsIG5vdGFcbiAqIHkgb3BjaW9uZXMsIG5vIHNvbG8gdGV4dG8uIExhIHYxIGRlIGVzdGUgY29tcG9uZW50ZSB0ZW7DrWEgc3UgcHJvcGlvIGVkaXRvclxuICogcG9icmUgKGRvcyB0aXBvcywgc2luIG9wY2lvbmVzKTsgbGEgRmFzZSA1IGRlbCBBRFItMDkyIGxvIHJlZW1wbGF6w7MgcG9yIGVsXG4gKiBvcmdhbmlzbSBjb21wYXJ0aWRvIGVuIHZleiBkZSBtZWpvcmFybG8gcG9yIGR1cGxpY2Fkby5cbiAqXG4gKiBFbCBjYXTDoWxvZ28gcXVlIG9mcmVjZSBzYWxlIGRlIGBTVVJWRVlfUVVFU1RJT05fVFlQRVNgIOKAlCBhY290YWRvIGEgbG8gcXVlXG4gKiBgdmFsLXN1cnZleS1yZXNwb25zZWAgc2FiZSByZW5kZXJpemFyLCBubyBhIGxvIHF1ZSBlbCBlZGl0b3Igc2FiZSBlZGl0YXIuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1zdXJ2ZXktYnVpbGRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBJb25JY29uLFxuICAgIElvblNwaW5uZXIsXG4gICAgVGV4dElucHV0Q29tcG9uZW50LFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBGb3JtRmllbGRDb21wb25lbnQsXG4gICAgRmllbGRTY2hlbWFFZGl0b3JDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyXCI+XG4gICAgICBAaWYgKGlzV2l6YXJkKCkpIHtcbiAgICAgICAgPG5hdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19zdGVwc1wiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnd2l6YXJkU3RlcHNMYWJlbCcpXCI+XG4gICAgICAgICAgQGZvciAoc3RlcCBvZiB3aXphcmRTdGVwczsgdHJhY2sgc3RlcC5pZDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3N0ZXBcIlxuICAgICAgICAgICAgICBbY2xhc3Muc3VydmV5LWJ1aWxkZXJfX3N0ZXAtLWFjdGl2ZV09XCJ3aXphcmRTdGVwKCkgPT09IGlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwid2l6YXJkU3RlcCgpID09PSBpID8gJ3N0ZXAnIDogbnVsbFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJnb1RvU3RlcChpKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGkgKyAxIH19PC9zcGFuPlxuICAgICAgICAgICAgICB7eyB0KHN0ZXAubGFiZWxLZXkpIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbmF2PlxuICAgICAgfVxuXG4gICAgICBAaWYgKCFpc1dpemFyZCgpKSB7XG4gICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgndGl0bGVMYWJlbCcpXCI+XG4gICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IHRpdGxlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3RpdGxlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdzdWJ0aXRsZUxhYmVsJylcIj5cbiAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogc3VidGl0bGVDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnc3VidGl0bGVQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHNob3dXaXphcmRTZWN0aW9uKDApKSB7XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3NlY3Rpb25cIj5cbiAgICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3RpdGxlTGFiZWwnKVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IHRpdGxlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3RpdGxlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnc3VidGl0bGVMYWJlbCcpXCI+XG4gICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogc3VidGl0bGVDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnc3VidGl0bGVQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb25zLWxhYmVsXCI+e3sgdCgncHJlc2VudGF0aW9uTGFiZWwnKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLWZpZWxkXCI+XG4gICAgICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ2hlYWRlckltYWdlTGFiZWwnKVwiPlxuICAgICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogaGVhZGVySW1hZ2VDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnaGVhZGVySW1hZ2VQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIEBpZiAoaGVhZGVySW1hZ2VDb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtcHJldmlld1wiPlxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJoZWFkZXJJbWFnZUNvbnRyb2wudmFsdWVcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdpbWFnZVJlbW92ZScpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclByZXNlbnRhdGlvbkltYWdlKCdoZWFkZXInKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ0cmFzaC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHByb3BzLnByZXNlbnRhdGlvbkltYWdlVXBsb2FkKSB7XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWRcIiBbY2xhc3Muc3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZC0tbG9hZGluZ109XCJ1cGxvYWRpbmdJbWFnZSgpID09PSAnaGVhZGVyJ1wiPlxuICAgICAgICAgICAgICAgIEBpZiAodXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ2hlYWRlcicpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIiAvPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG91ZC11cGxvYWQtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGhlYWRlckltYWdlQ29udHJvbC52YWx1ZSA/IHQoJ2ltYWdlQ2hhbmdlJykgOiB0KCdpbWFnZVVwbG9hZCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvanBlZyxpbWFnZS9wbmcsaW1hZ2Uvd2VicCxpbWFnZS9naWYsLmpwZywuanBlZywucG5nLC53ZWJwLC5naWZcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVwbG9hZGluZ0ltYWdlKCkgPT09ICdoZWFkZXInXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25QcmVzZW50YXRpb25GaWxlU2VsZWN0ZWQoJ2hlYWRlcicsICRldmVudClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmICghaXNXaXphcmQoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3ByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9ucy1sYWJlbFwiPnt7IHQoJ3ByZXNlbnRhdGlvbkxhYmVsJykgfX08L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtZmllbGRcIj5cbiAgICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ2hlYWRlckltYWdlTGFiZWwnKVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IGhlYWRlckltYWdlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ2hlYWRlckltYWdlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICAgIEBpZiAoaGVhZGVySW1hZ2VDb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLXByZXZpZXdcIj5cbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImhlYWRlckltYWdlQ29udHJvbC52YWx1ZVwiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1jbGVhclwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdpbWFnZVJlbW92ZScpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJQcmVzZW50YXRpb25JbWFnZSgnaGVhZGVyJylcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ0cmFzaC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChwcm9wcy5wcmVzZW50YXRpb25JbWFnZVVwbG9hZCkge1xuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZFwiIFtjbGFzcy5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkLS1sb2FkaW5nXT1cInVwbG9hZGluZ0ltYWdlKCkgPT09ICdoZWFkZXInXCI+XG4gICAgICAgICAgICAgIEBpZiAodXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ2hlYWRlcicpIHtcbiAgICAgICAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImNyZXNjZW50XCIgLz5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG91ZC11cGxvYWQtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPHNwYW4+e3sgaGVhZGVySW1hZ2VDb250cm9sLnZhbHVlID8gdCgnaW1hZ2VDaGFuZ2UnKSA6IHQoJ2ltYWdlVXBsb2FkJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS9qcGVnLGltYWdlL3BuZyxpbWFnZS93ZWJwLGltYWdlL2dpZiwuanBnLC5qcGVnLC5wbmcsLndlYnAsLmdpZlwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVwbG9hZGluZ0ltYWdlKCkgPT09ICdoZWFkZXInXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUHJlc2VudGF0aW9uRmlsZVNlbGVjdGVkKCdoZWFkZXInLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHAgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fb3B0aW9uYWwtbm90ZVwiPnt7IHQoJ3N1Y2Nlc3NPcHRpb25hbE5vdGUnKSB9fTwvcD5cbiAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdzdWNjZXNzVGl0bGVMYWJlbCcpXCI+XG4gICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IHN1Y2Nlc3NUaXRsZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdzdWNjZXNzVGl0bGVQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3N1Y2Nlc3NNZXNzYWdlTGFiZWwnKVwiPlxuICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdWNjZXNzTWVzc2FnZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdzdWNjZXNzTWVzc2FnZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtZmllbGRcIj5cbiAgICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3N1Y2Nlc3NJbWFnZUxhYmVsJylcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdWNjZXNzSW1hZ2VDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnc3VjY2Vzc0ltYWdlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICAgIEBpZiAoc3VjY2Vzc0ltYWdlQ29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1wcmV2aWV3XCI+XG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCJzdWNjZXNzSW1hZ2VDb250cm9sLnZhbHVlXCIgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLWNsZWFyXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2ltYWdlUmVtb3ZlJylcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclByZXNlbnRhdGlvbkltYWdlKCdzdWNjZXNzJylcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ0cmFzaC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChwcm9wcy5wcmVzZW50YXRpb25JbWFnZVVwbG9hZCkge1xuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZFwiIFtjbGFzcy5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkLS1sb2FkaW5nXT1cInVwbG9hZGluZ0ltYWdlKCkgPT09ICdzdWNjZXNzJ1wiPlxuICAgICAgICAgICAgICBAaWYgKHVwbG9hZGluZ0ltYWdlKCkgPT09ICdzdWNjZXNzJykge1xuICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIiAvPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3VkLXVwbG9hZC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8c3Bhbj57eyBzdWNjZXNzSW1hZ2VDb250cm9sLnZhbHVlID8gdCgnaW1hZ2VDaGFuZ2UnKSA6IHQoJ2ltYWdlVXBsb2FkJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS9qcGVnLGltYWdlL3BuZyxpbWFnZS93ZWJwLGltYWdlL2dpZiwuanBnLC5qcGVnLC5wbmcsLndlYnAsLmdpZlwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVwbG9hZGluZ0ltYWdlKCkgPT09ICdzdWNjZXNzJ1wiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblByZXNlbnRhdGlvbkZpbGVTZWxlY3RlZCgnc3VjY2VzcycsICRldmVudClcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmIChzaG93V2l6YXJkU2VjdGlvbigyKSkge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19zZWN0aW9uXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb25zLWxhYmVsXCI+e3sgdCgnc3RlcENsb3NlJykgfX08L3NwYW4+XG4gICAgICAgICAgPHAgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fb3B0aW9uYWwtbm90ZVwiPnt7IHQoJ3N1Y2Nlc3NPcHRpb25hbE5vdGUnKSB9fTwvcD5cbiAgICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3N1Y2Nlc3NUaXRsZUxhYmVsJylcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdWNjZXNzVGl0bGVDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnc3VjY2Vzc1RpdGxlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnc3VjY2Vzc01lc3NhZ2VMYWJlbCcpXCI+XG4gICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogc3VjY2Vzc01lc3NhZ2VDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnc3VjY2Vzc01lc3NhZ2VQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1maWVsZFwiPlxuICAgICAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdzdWNjZXNzSW1hZ2VMYWJlbCcpXCI+XG4gICAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdWNjZXNzSW1hZ2VDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnc3VjY2Vzc0ltYWdlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgICBAaWYgKHN1Y2Nlc3NJbWFnZUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1wcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInN1Y2Nlc3NJbWFnZUNvbnRyb2wudmFsdWVcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdpbWFnZVJlbW92ZScpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclByZXNlbnRhdGlvbkltYWdlKCdzdWNjZXNzJylcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwidHJhc2gtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChwcm9wcy5wcmVzZW50YXRpb25JbWFnZVVwbG9hZCkge1xuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkXCIgW2NsYXNzLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQtLWxvYWRpbmddPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ3N1Y2Nlc3MnXCI+XG4gICAgICAgICAgICAgICAgQGlmICh1cGxvYWRpbmdJbWFnZSgpID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIiAvPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG91ZC11cGxvYWQtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN1Y2Nlc3NJbWFnZUNvbnRyb2wudmFsdWUgPyB0KCdpbWFnZUNoYW5nZScpIDogdCgnaW1hZ2VVcGxvYWQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlL2pwZWcsaW1hZ2UvcG5nLGltYWdlL3dlYnAsaW1hZ2UvZ2lmLC5qcGcsLmpwZWcsLnBuZywud2VicCwuZ2lmXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1cGxvYWRpbmdJbWFnZSgpID09PSAnc3VjY2VzcydcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblByZXNlbnRhdGlvbkZpbGVTZWxlY3RlZCgnc3VjY2VzcycsICRldmVudClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChzaG93V2l6YXJkU2VjdGlvbigxKSkge1xuICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19xdWVzdGlvbnNcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb25zLWxhYmVsXCI+e3sgdCgncXVlc3Rpb25zTGFiZWwnKSB9fTwvc3Bhbj5cblxuICAgICAgICBAaWYgKCFxdWVzdGlvbnMoKS5sZW5ndGgpIHtcbiAgICAgICAgICA8cCBjbGFzcz1cInN1cnZleS1idWlsZGVyX19lbXB0eVwiPnt7IHQoJ25vUXVlc3Rpb25zJykgfX08L3A+XG4gICAgICAgIH1cblxuICAgICAgICBAZm9yIChyb3cgb2YgcXVlc3Rpb25zKCk7IHRyYWNrIHJvdy5pZDsgbGV0IGkgPSAkaW5kZXg7IGxldCBmaXJzdCA9ICRmaXJzdDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3Jvdy1oZWFkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcm93LXRleHRcIj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHJvdy5sYWJlbCB8fCB0KCd1bnRpdGxlZFF1ZXN0aW9uJykgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIHt7IHR5cGVMYWJlbChyb3cudHlwZSkgfX17eyByb3cucmVxdWlyZWQgPyAnIMK3ICcgKyB0KCdyZXF1aXJlZFRhZycpIDogJycgfX17eyByb3cuc2VjdGlvbkxhYmVsID8gJyDCtyAnICsgcm93LnNlY3Rpb25MYWJlbCA6ICcnIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbcHJvcHNdPVwiaWNvbkFjdGlvbigncS11cC0nICsgcm93LmlkLCAnYXJyb3ctdXAtb3V0bGluZScsIHQoJ21vdmVVcCcpLCBmaXJzdClcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwibW92ZShpLCAtMSlcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJpY29uQWN0aW9uKCdxLWRvd24tJyArIHJvdy5pZCwgJ2Fycm93LWRvd24tb3V0bGluZScsIHQoJ21vdmVEb3duJyksIGxhc3QpXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm1vdmUoaSwgMSlcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJpY29uQWN0aW9uKCdxLWNvcHktJyArIHJvdy5pZCwgJ2NvcHktb3V0bGluZScsIHQoJ2R1cGxpY2F0ZVF1ZXN0aW9uJykpXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImR1cGxpY2F0ZShyb3cpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbcHJvcHNdPVwiaWNvbkFjdGlvbigncS1lZGl0LScgKyByb3cuaWQsICdjcmVhdGUtb3V0bGluZScsIHQoJ2VkaXRRdWVzdGlvbicpKVwiXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJ0b2dnbGVFZGl0KHJvdylcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJpY29uQWN0aW9uKCdxLXJlbW92ZS0nICsgcm93LmlkLCAndHJhc2gtb3V0bGluZScsIHQoJ3JlbW92ZVF1ZXN0aW9uJyksIGZhbHNlLCAnZGFuZ2VyJylcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwicmVtb3ZlUXVlc3Rpb24ocm93KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgQGlmIChlZGl0aW5nSWQoKSA9PT0gcm93LmlkKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcm93LWVkaXRvclwiPlxuICAgICAgICAgICAgICAgIDx2YWwtZmllbGQtc2NoZW1hLWVkaXRvclxuICAgICAgICAgICAgICAgICAgI2VkaXRvclxuICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cImVkaXRvclByb3BzKHJvdylcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZWQpPVwiZHJhZnRRdWVzdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChzYXZlKT1cImFwcGx5UXVlc3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICdxLWRvbmUtJyArIHJvdy5pZCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdCgnZG9uZUVkaXRpbmcnKSxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3NvbGlkJyxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImVkaXRvci5zdWJtaXQoKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICB0b2tlbjogJ3N1cnZleS1idWlsZGVyLWFkZC1xdWVzdGlvbicsXG4gICAgICAgICAgICB0ZXh0OiB0KCdhZGRRdWVzdGlvbicpLFxuICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgICAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICBzdGF0ZTogJ0VOQUJMRUQnLFxuICAgICAgICAgICAgaWNvbjogeyBuYW1lOiAnYWRkLW91dGxpbmUnLCBzbG90OiAnc3RhcnQnIH0sXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKG9uQ2xpY2spPVwiYWRkUXVlc3Rpb24oKVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmIChzaG93V2l6YXJkU2VjdGlvbigzKSkge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19yZXZpZXdcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWxcIj57eyB0KCdyZXZpZXdUaXRsZScpIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGl0bGVDb250cm9sLnZhbHVlIHx8IHQoJ3VudGl0bGVkUXVlc3Rpb24nKSB9fTwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IHN1YnRpdGxlQ29udHJvbC52YWx1ZSB8fCB0KCdyZXZpZXdOb1N1YnRpdGxlJykgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4+e3sgcmV2aWV3UXVlc3Rpb25zQ291bnQoKSB9fTwvc3Bhbj5cbiAgICAgICAgICBAaWYgKGhlYWRlckltYWdlQ29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgPHNwYW4+e3sgdCgncmV2aWV3SGVhZGVySW1hZ2UnKSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4+e3sgc3VjY2Vzc0ltYWdlQ29udHJvbC52YWx1ZSA/IHQoJ3Jldmlld1N1Y2Nlc3NJbWFnZScpIDogdCgncmV2aWV3RGVmYXVsdENsb3NlJykgfX08L3NwYW4+XG4gICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInByZXZpZXdQcm9wcygpXCIgKG9uQ2xpY2spPVwib3BlblByZXZpZXcoKVwiIC8+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmICh2YWxpZGF0aW9uRXJyb3IoKSkge1xuICAgICAgICA8cCBjbGFzcz1cInN1cnZleS1idWlsZGVyX19lcnJvclwiPnt7IHZhbGlkYXRpb25FcnJvcigpIH19PC9wPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGlzV2l6YXJkKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX193aXphcmQtYWN0aW9uc1wiPlxuICAgICAgICAgIEBpZiAod2l6YXJkU3RlcCgpID4gMCkge1xuICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cIndpemFyZEJhY2tQcm9wcygpXCIgKG9uQ2xpY2spPVwicHJldmlvdXNTdGVwKClcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHdpemFyZFN0ZXAoKSA8IHdpemFyZFN0ZXBzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJ3aXphcmROZXh0UHJvcHMoKVwiIChvbkNsaWNrKT1cIm5leHRTdGVwKClcIiAvPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInNhdmVQcm9wcygpXCIgKG9uQ2xpY2spPVwic2F2ZSgpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJzYXZlUHJvcHMoKVwiIChvbkNsaWNrKT1cInNhdmUoKVwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDE2cHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcHJlc2VudGF0aW9uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBwYWRkaW5nLXRvcDogNHB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19zZWN0aW9uLFxuICAgICAgLnN1cnZleS1idWlsZGVyX19yZXZpZXcge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3N0ZXBzIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgbWlubWF4KDAsIDFmcikpO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fc3RlcCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG4gICAgICAgIHBhZGRpbmc6IDhweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEyKSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IsICNmZmYpKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0tc2hhZGUsICM2YjY2NzUpO1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19zdGVwIHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsICNmNGY1ZjgpO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19zdGVwLS1hY3RpdmUge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fd2l6YXJkLWFjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcmV2aWV3IHtcbiAgICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdmFsLXJhZGl1cy1tZCwgMTJweCk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jYXJkLWJhY2tncm91bmQsIHZhcigtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKSk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3JldmlldyBzdHJvbmcge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IsICMwMDApO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yZXZpZXcgc3Bhbjpub3QoLnN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWwpIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS1maWVsZCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtcHJldmlldyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2ltYWdlLXByZXZpZXcgaW1nIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBhc3BlY3QtcmF0aW86IDE2IC8gOTtcbiAgICAgICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsICNmNGY1ZjgpO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS1jbGVhciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA4cHg7XG4gICAgICAgIHJpZ2h0OiA4cHg7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBtaW4taGVpZ2h0OiA0NHB4O1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDE4cHg7XG4gICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1pb24tY29sb3ItZGFyaywgIzJmMmMzYSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzJmMmMzYSk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZC0tbG9hZGluZyB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQgaW9uLXNwaW5uZXIge1xuICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQgaW5wdXQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19lbXB0eSB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19vcHRpb25hbC1ub3RlIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM1O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXZhbC1yYWRpdXMtbWQsIDEycHgpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY2FyZC1iYWNrZ3JvdW5kLCB2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciwgI2ZmZikpO1xuICAgICAgfVxuICAgICAgLyogTW9iaWxlLWZpcnN0OiBlbCB0ZXh0byBkZSBsYSBwcmVndW50YSB5IHN1cyBhY2Npb25lcyBhcGlsYWRvcy4gRW4gZmlsYVxuICAgICAgICAgZmlqYSwgY2luY28gYm90b25lcyBsZSBjb21lbiBlbCBhbmNobyBhbCB0ZXh0byB5IGxvIHBhcnRlbiBlbiBtdWNoYXNcbiAgICAgICAgIGzDrW5lYXMgYW5nb3N0YXMg4oCUIGp1c3RvIGVuIGVsIHZpZXdwb3J0IGRvbmRlIG3DoXMgc2UgdXNhLiAqL1xuICAgICAgLnN1cnZleS1idWlsZGVyX19yb3ctaGVhZCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yb3ctdGV4dCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy10ZXh0IHN0cm9uZyB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzAwMCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yb3ctdGV4dCBzcGFuIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcm93LWFjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yb3ctZWRpdG9yIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBwYWRkaW5nLXRvcDogMTJweDtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2Vycm9yIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhbmdlcik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICB9XG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcbiAgICAgICAgLnN1cnZleS1idWlsZGVyX19yb3ctaGVhZCB7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIH1cbiAgICAgICAgLnN1cnZleS1idWlsZGVyX19yb3ctdGV4dCB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFN1cnZleUJ1aWxkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwcm9wczogU3VydmV5QnVpbGRlck1ldGFkYXRhID0ge307XG4gIEBPdXRwdXQoKSByZWFkb25seSBzYXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U3VydmV5QnVpbGRlclNhdmVFdmVudD4oKTtcbiAgLyoqXG4gICAqIEVtaXRlIGxvIGVzY3JpdG8sIHlhIHZhbGlkYWRvLCBTSU4gZ3VhcmRhcmxvLiBTb2xvIGNvbiBgcHJvcHMucGVyc2lzdDpcbiAgICogZmFsc2VgIOKAlCB2ZXIgZWwgY29tZW50YXJpbyBkZSBlc2UgY2FtcG86IGN1YW5kbyBsYSBhcHAgdGllbmUgZW5kcG9pbnRcbiAgICogcHJvcGlvLCBndWFyZGFyIGRlc2RlIGFjw6Egc2Ugc2FsdGEgbGEgdmFsaWRhY2nDs24gZGUgbGEgZW50aWRhZCBkdWXDsWEgeSBlbFxuICAgKiBwZXJtaXNvIGRlIGxhIHZlcnRpY2FsLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGRyYWZ0ID0gbmV3IEV2ZW50RW1pdHRlcjxTdXJ2ZXlEcmFmdEV2ZW50PigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdHMgPSBpbmplY3QoUmVxdWVzdFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyID0gaW5qZWN0KFJlcXVlc3RGb3JtQnVpbGRlclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9ycyA9IGluamVjdChWYWx0ZWNoRXJyb3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtb2RhbHMgPSBpbmplY3QoTW9kYWxTZXJ2aWNlKTtcblxuICByZWFkb25seSB0aXRsZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHN1YnRpdGxlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgaGVhZGVySW1hZ2VDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuICByZWFkb25seSBzdWNjZXNzVGl0bGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuICByZWFkb25seSBzdWNjZXNzTWVzc2FnZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHN1Y2Nlc3NJbWFnZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHF1ZXN0aW9ucyA9IHNpZ25hbDxFZGl0YWJsZUZpZWxkRGVmW10+KFtdKTtcbiAgcmVhZG9ubHkgZWRpdGluZ0lkID0gc2lnbmFsKCcnKTtcbiAgcmVhZG9ubHkgd2l6YXJkU3RlcCA9IHNpZ25hbCgwKTtcbiAgcmVhZG9ubHkgdmFsaWRhdGlvbkVycm9yID0gc2lnbmFsKCcnKTtcbiAgcmVhZG9ubHkgc2F2aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgdXBsb2FkaW5nSW1hZ2UgPSBzaWduYWw8J2hlYWRlcicgfCAnc3VjY2VzcycgfCAnJz4oJycpO1xuXG4gIHJlYWRvbmx5IHdpemFyZFN0ZXBzID0gW1xuICAgIHsgaWQ6ICdzdGFydCcsIGxhYmVsS2V5OiAnc3RlcFN0YXJ0JyB9LFxuICAgIHsgaWQ6ICdxdWVzdGlvbnMnLCBsYWJlbEtleTogJ3N0ZXBRdWVzdGlvbnMnIH0sXG4gICAgeyBpZDogJ2Nsb3NlJywgbGFiZWxLZXk6ICdzdGVwQ2xvc2UnIH0sXG4gICAgeyBpZDogJ3JldmlldycsIGxhYmVsS2V5OiAnc3RlcFJldmlldycgfSxcbiAgXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFsbG93ZWRJbWFnZVR5cGVzID0gWydpbWFnZS9qcGVnJywgJ2ltYWdlL3BuZycsICdpbWFnZS93ZWJwJywgJ2ltYWdlL2dpZiddO1xuICBwcml2YXRlIHJlYWRvbmx5IG1heEltYWdlQnl0ZXMgPSAxMCAqIDEwMjQgKiAxMDI0O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pMThuLmhhc05hbWVzcGFjZShOQU1FU1BBQ0UpKSB7XG4gICAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhOQU1FU1BBQ0UsIFNVUlZFWV9CVUlMREVSX0kxOE4pO1xuICAgIH1cbiAgICAvLyBFbCBub21icmUgZGVsIHRpcG8gZGUgY2FkYSBwcmVndW50YSBzZSBtdWVzdHJhIGVuIGxhIGZpbGEgY29sYXBzYWRhLCBxdWVcbiAgICAvLyBkaWJ1amEgZXN0ZSBjb21wb25lbnRlIHkgbm8gZWwgZWRpdG9yIOKAlCBzaSBuYWRpZSBtb250w7MgdW4gZWRpdG9yIHRvZGF2w61hLFxuICAgIC8vIGVsIG5hbWVzcGFjZSBubyBleGlzdGlyw61hIHkgbGEgZmlsYSBtb3N0cmFyw61hIGxhIGNsYXZlIGNydWRhLlxuICAgIGlmICghdGhpcy5pMThuLmhhc05hbWVzcGFjZShFRElUT1JfTkFNRVNQQUNFKSkge1xuICAgICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMoRURJVE9SX05BTUVTUEFDRSwgRklFTERfU0NIRU1BX0VESVRPUl9JMThOKTtcbiAgICB9XG4gICAgdGhpcy5zdWNjZXNzVGl0bGVDb250cm9sLnNldFZhbHVlKHRoaXMuZGVmYXVsdFN1Y2Nlc3NUaXRsZSgpKTtcbiAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmRlZmF1bHRTdWNjZXNzTWVzc2FnZSgpKTtcbiAgICBhZGRJY29ucyh7IGNsb3VkVXBsb2FkT3V0bGluZSwgZXllT3V0bGluZSwgdHJhc2hPdXRsaW5lIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gU2VtYnJhZG8gZGlyZWN0bzogbGEgYXBwIHlhIHRlbsOtYSBsYSBlbmN1ZXN0YSwgbm8gaGFjZSBmYWx0YSBsZWVybGEuXG4gICAgaWYgKHRoaXMucHJvcHMuaW5pdGlhbCkge1xuICAgICAgdGhpcy5oeWRyYXRlKFxuICAgICAgICB0aGlzLnByb3BzLmluaXRpYWwubGFiZWwsXG4gICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbC5zdWJ0aXRsZSxcbiAgICAgICAgdGhpcy5wcm9wcy5pbml0aWFsLnF1ZXN0aW9ucyxcbiAgICAgICAgdGhpcy5wcm9wcy5pbml0aWFsLnByZXNlbnRhdGlvblxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnByb3BzLnR5cGVJZCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjZmcgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnJlcXVlc3RzLmdldFJlcXVlc3RUeXBlKHRoaXMucHJvcHMudHlwZUlkKSk7XG4gICAgICB0aGlzLmh5ZHJhdGUoY2ZnLmxhYmVsLCBjZmcuc3VidGl0bGUgPz8gJycsIGNmZy5maWVsZFNjaGVtYSwgY2ZnLnByZXNlbnRhdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdzdXJ2ZXlCdWlsZGVyLmxvYWQnLFxuICAgICAgICBmYWxsYmFja0tleTogJ2xvYWRFcnJvcicsXG4gICAgICAgIGkxOG5OYW1lc3BhY2U6IE5BTUVTUEFDRSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgTkFNRVNQQUNFKTtcbiAgfVxuXG4gIHR5cGVMYWJlbCh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGB0eXBlJHt0eXBlfWAsIEVESVRPUl9OQU1FU1BBQ0UpO1xuICB9XG5cbiAgcXVlc3Rpb25UeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb25UeXBlcz8ubGVuZ3RoID8gdGhpcy5wcm9wcy5xdWVzdGlvblR5cGVzIDogU1VSVkVZX1FVRVNUSU9OX1RZUEVTO1xuICB9XG5cbiAgaXNXaXphcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubGF5b3V0ID09PSAnd2l6YXJkJztcbiAgfVxuXG4gIHNob3dXaXphcmRTZWN0aW9uKHN0ZXA6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzV2l6YXJkKCkgJiYgdGhpcy53aXphcmRTdGVwKCkgPT09IHN0ZXA7XG4gIH1cblxuICBnb1RvU3RlcChzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNXaXphcmQoKSkgcmV0dXJuO1xuICAgIGlmIChzdGVwIDw9IHRoaXMud2l6YXJkU3RlcCgpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQoJycpO1xuICAgICAgdGhpcy53aXphcmRTdGVwLnNldChzdGVwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2hpbGUgKHRoaXMud2l6YXJkU3RlcCgpIDwgc3RlcCkge1xuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlV2l6YXJkU3RlcCh0aGlzLndpemFyZFN0ZXAoKSkpIHJldHVybjtcbiAgICAgIHRoaXMud2l6YXJkU3RlcC51cGRhdGUoY3VycmVudCA9PiBjdXJyZW50ICsgMSk7XG4gICAgfVxuICB9XG5cbiAgbmV4dFN0ZXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlV2l6YXJkU3RlcCh0aGlzLndpemFyZFN0ZXAoKSkpIHJldHVybjtcbiAgICB0aGlzLndpemFyZFN0ZXAudXBkYXRlKHN0ZXAgPT4gTWF0aC5taW4oc3RlcCArIDEsIHRoaXMud2l6YXJkU3RlcHMubGVuZ3RoIC0gMSkpO1xuICB9XG5cbiAgcHJldmlvdXNTdGVwKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG4gICAgdGhpcy53aXphcmRTdGVwLnVwZGF0ZShzdGVwID0+IE1hdGgubWF4KHN0ZXAgLSAxLCAwKSk7XG4gIH1cblxuICB3aXphcmRCYWNrUHJvcHMoKTogQnV0dG9uTWV0YWRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogJ3N1cnZleS1idWlsZGVyLXdpemFyZC1iYWNrJyxcbiAgICAgIHRleHQ6IHRoaXMudCgncHJldmlvdXMnKSxcbiAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH07XG4gIH1cblxuICB3aXphcmROZXh0UHJvcHMoKTogQnV0dG9uTWV0YWRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogJ3N1cnZleS1idWlsZGVyLXdpemFyZC1uZXh0JyxcbiAgICAgIHRleHQ6IHRoaXMudCgnbmV4dCcpLFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgIGZpbGw6ICdzb2xpZCcsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH07XG4gIH1cblxuICBzYXZlUHJvcHMoKTogQnV0dG9uTWV0YWRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogJ3N1cnZleS1idWlsZGVyLXNhdmUnLFxuICAgICAgdGV4dDogdGhpcy50KCdzYXZlJyksXG4gICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgZmlsbDogJ3NvbGlkJyxcbiAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgIGV4cGFuZDogdGhpcy5pc1dpemFyZCgpID8gdW5kZWZpbmVkIDogJ2Jsb2NrJyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgc3RhdGU6IHRoaXMuc2F2aW5nKCkgPyBDb21wb25lbnRTdGF0ZXMuV09SS0lORyA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH07XG4gIH1cblxuICBpbnRlcnBvbGF0ZSh0ZW1wbGF0ZTogc3RyaW5nLCB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4pOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh2YWx1ZXMpLnJlZHVjZShcbiAgICAgICh0ZXh0LCBba2V5LCB2YWx1ZV0pID0+IHRleHQucmVwbGFjZUFsbChgeyR7a2V5fX1gLCBTdHJpbmcodmFsdWUpKSxcbiAgICAgIHRlbXBsYXRlXG4gICAgKTtcbiAgfVxuXG4gIGVkaXRvclByb3BzKHJvdzogRWRpdGFibGVGaWVsZERlZik6IEZpZWxkU2NoZW1hRWRpdG9yTWV0YWRhdGEge1xuICAgIHJldHVybiB7IG1vZGU6ICdlZGl0JywgZmllbGQ6IHJvdywgYWxsb3dlZFR5cGVzOiB0aGlzLnF1ZXN0aW9uVHlwZXMoKSB9O1xuICB9XG5cbiAgaWNvbkFjdGlvbihcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGljb246IHN0cmluZyxcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgY29sb3I6IENvbG9yID0gJ2RhcmsnXG4gICk6IEJ1dHRvbk1ldGFkYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICB0ZXh0OiAnJyxcbiAgICAgIGFyaWFMYWJlbDogbGFiZWwsXG4gICAgICBjb2xvcixcbiAgICAgIGZpbGw6ICdjbGVhcicsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIHN0YXRlOiBkaXNhYmxlZCA/IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgaWNvbjogeyBuYW1lOiBpY29uLCBzbG90OiAnaWNvbi1vbmx5JyB9LFxuICAgIH07XG4gIH1cblxuICBhZGRRdWVzdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCByb3c6IEVkaXRhYmxlRmllbGREZWYgPSB7XG4gICAgICBpZDogYHJvdy0ke3Jvd1VpZCsrfWAsXG4gICAgICBuYW1lOiAnJyxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIHBsYWNlaG9sZGVyVGV4dDogJycsXG4gICAgICBoaW50VGV4dDogJycsXG4gICAgICB0eXBlOiB0aGlzLnF1ZXN0aW9uVHlwZXMoKVswXSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbnMudXBkYXRlKHJvd3MgPT4gWy4uLnJvd3MsIHJvd10pO1xuICAgIC8vIFVuYSBwcmVndW50YSByZWNpw6luIGFncmVnYWRhIGVzdMOhIHZhY8OtYTogYWJyaXJsYSBlcyBlbCDDum5pY28gcGFzb1xuICAgIC8vIHNpZ3VpZW50ZSBwb3NpYmxlLCB5IGRlamFybGEgY2VycmFkYSBsYSBoYXLDrWEgdmVyIGNvbW8gdW5hIGZpbGEgcm90YS5cbiAgICB0aGlzLmVkaXRpbmdJZC5zZXQocm93LmlkKTtcbiAgfVxuXG4gIHRvZ2dsZUVkaXQocm93OiBFZGl0YWJsZUZpZWxkRGVmKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0aW5nSWQudXBkYXRlKGN1cnJlbnQgPT4gKGN1cnJlbnQgPT09IHJvdy5pZCA/ICcnIDogcm93LmlkKSk7XG4gIH1cblxuICByZW1vdmVRdWVzdGlvbihyb3c6IEVkaXRhYmxlRmllbGREZWYpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXN0aW9ucy51cGRhdGUocm93cyA9PiByb3dzLmZpbHRlcihyID0+IHIuaWQgIT09IHJvdy5pZCkpO1xuICAgIGlmICh0aGlzLmVkaXRpbmdJZCgpID09PSByb3cuaWQpIHRoaXMuZWRpdGluZ0lkLnNldCgnJyk7XG4gIH1cblxuICBkdXBsaWNhdGUocm93OiBFZGl0YWJsZUZpZWxkRGVmKTogdm9pZCB7XG4gICAgY29uc3QgY29weTogRWRpdGFibGVGaWVsZERlZiA9IHtcbiAgICAgIC4uLnJvdyxcbiAgICAgIGlkOiBgcm93LSR7cm93VWlkKyt9YCxcbiAgICAgIC8vIFNpbiB0b2tlbiBwcm9waW8gbGEgY29waWEgcGlzYXLDrWEgbGFzIHJlc3B1ZXN0YXMgZGVsIG9yaWdpbmFsOiBkb3NcbiAgICAgIC8vIGNhbXBvcyBjb24gZWwgbWlzbW8gYG5hbWVgIHNvbiBlbCBtaXNtbyBjYW1wbyBwYXJhIGVsIGJhY2tlbmQuXG4gICAgICBuYW1lOiB0aGlzLmZvcm1CdWlsZGVyLnVuaXF1ZUZpZWxkTmFtZShyb3cubmFtZSB8fCByb3cubGFiZWwsIHRoaXMucXVlc3Rpb25zKCkpLFxuICAgICAgb3B0aW9uczogcm93Lm9wdGlvbnMgPyByb3cub3B0aW9ucy5tYXAobyA9PiAoeyAuLi5vIH0pKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gcm93cy5maW5kSW5kZXgociA9PiByLmlkID09PSByb3cuaWQpO1xuICAgICAgcmV0dXJuIFsuLi5yb3dzLnNsaWNlKDAsIGluZGV4ICsgMSksIGNvcHksIC4uLnJvd3Muc2xpY2UoaW5kZXggKyAxKV07XG4gICAgfSk7XG4gIH1cblxuICBtb3ZlKGluZGV4OiBudW1iZXIsIGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBpbmRleCArIGRlbHRhO1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHtcbiAgICAgIGlmICh0YXJnZXQgPCAwIHx8IHRhcmdldCA+PSByb3dzLmxlbmd0aCkgcmV0dXJuIHJvd3M7XG4gICAgICBjb25zdCBuZXh0ID0gWy4uLnJvd3NdO1xuICAgICAgW25leHRbaW5kZXhdLCBuZXh0W3RhcmdldF1dID0gW25leHRbdGFyZ2V0XSwgbmV4dFtpbmRleF1dO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3VhcmRhIGxvIHF1ZSBzZSBlc3TDoSBlc2NyaWJpZW5kbywgc2luIGNlcnJhciBlbCBlZGl0b3IgbmkgdmFsaWRhci5cbiAgICpcbiAgICogU2luIGVzdG8sIGxvIHRpcGVhZG8gc29sbyBleGlzdMOtYSBkZW50cm8gZGVsIGVkaXRvciBoYXN0YSBxdWUgYWxndWllblxuICAgKiB0b2NhYmEgXCJMaXN0b1wiOiBsYSBmaWxhIHNlZ3XDrWEgZGljaWVuZG8gXCJQcmVndW50YSBzaW4gdGV4dG9cIiB5LCBwZW9yLFxuICAgKiBcIkd1YXJkYXIgZW5jdWVzdGFcIiBmYWxsYWJhIGNvbiBcInRvZGFzIGxhcyBwcmVndW50YXMgbmVjZXNpdGFuIHRleHRvXCIgc29icmVcbiAgICogdW5hIHByZWd1bnRhIHF1ZSBlbiBwYW50YWxsYSBjbGFyYW1lbnRlIHRlbsOtYSB0ZXh0by4gVG9jYXIgXCJMaXN0b1wiIGVyYSB1blxuICAgKiBwYXNvIG9ibGlnYXRvcmlvIHF1ZSBubyBzZSB2ZcOtYSBwb3IgbmluZ8O6biBsYWRvLlxuICAgKi9cbiAgZHJhZnRRdWVzdGlvbihmaWVsZDogRWRpdGFibGVGaWVsZERlZik6IHZvaWQge1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHJvd3MubWFwKHIgPT4gKHIuaWQgPT09IGZpZWxkLmlkID8geyAuLi5yLCAuLi5maWVsZCB9IDogcikpKTtcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uRXJyb3IoKSkgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KCcnKTtcbiAgfVxuXG4gIGFwcGx5UXVlc3Rpb24oZmllbGQ6IEVkaXRhYmxlRmllbGREZWYpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXN0aW9ucy51cGRhdGUocm93cyA9PlxuICAgICAgcm93cy5tYXAociA9PlxuICAgICAgICByLmlkID09PSBmaWVsZC5pZFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgICAgICAgbmFtZTogdGhpcy5mb3JtQnVpbGRlci51bmlxdWVGaWVsZE5hbWUoXG4gICAgICAgICAgICAgICAgZmllbGQubmFtZSB8fCBmaWVsZC5sYWJlbCxcbiAgICAgICAgICAgICAgICByb3dzLmZpbHRlcihvID0+IG8uaWQgIT09IHIuaWQpXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiByXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLmVkaXRpbmdJZC5zZXQoJycpO1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG4gIH1cblxuICBhc3luYyBvblByZXNlbnRhdGlvbkZpbGVTZWxlY3RlZChzbG90OiAnaGVhZGVyJyB8ICdzdWNjZXNzJywgZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXM/LlswXTtcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgIGlmICghZmlsZSB8fCAhdGhpcy5wcm9wcy5wcmVzZW50YXRpb25JbWFnZVVwbG9hZCB8fCB0aGlzLnVwbG9hZGluZ0ltYWdlKCkpIHJldHVybjtcblxuICAgIGlmIChmaWxlLnR5cGUgJiYgIXRoaXMuYWxsb3dlZEltYWdlVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KHRoaXMudCgnaW1hZ2VUeXBlRXJyb3InKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChmaWxlLnNpemUgPiB0aGlzLm1heEltYWdlQnl0ZXMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCh0aGlzLnQoJ2ltYWdlU2l6ZUVycm9yJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBsb2FkaW5nSW1hZ2Uuc2V0KHNsb3QpO1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHRoaXMucHJvcHMucHJlc2VudGF0aW9uSW1hZ2VVcGxvYWQoc2xvdCwgZmlsZSk7XG4gICAgICBpZiAoc2xvdCA9PT0gJ2hlYWRlcicpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJJbWFnZUNvbnRyb2wuc2V0VmFsdWUodXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3VjY2Vzc0ltYWdlQ29udHJvbC5zZXRWYWx1ZSh1cmwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiBgc3VydmV5QnVpbGRlci5wcmVzZW50YXRpb25JbWFnZVVwbG9hZCBzbG90PSR7c2xvdH1gLFxuICAgICAgICBmYWxsYmFja0tleTogJ2ltYWdlVXBsb2FkRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiBOQU1FU1BBQ0UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51cGxvYWRpbmdJbWFnZS5zZXQoJycpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyUHJlc2VudGF0aW9uSW1hZ2Uoc2xvdDogJ2hlYWRlcicgfCAnc3VjY2VzcycpOiB2b2lkIHtcbiAgICBpZiAoc2xvdCA9PT0gJ2hlYWRlcicpIHtcbiAgICAgIHRoaXMuaGVhZGVySW1hZ2VDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdWNjZXNzSW1hZ2VDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc2F2aW5nKCkpIHJldHVybjtcbiAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQoJycpO1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlV2l6YXJkU3RlcCgwKSB8fCAhdGhpcy52YWxpZGF0ZVdpemFyZFN0ZXAoMSkpIHJldHVybjtcblxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy50aXRsZUNvbnRyb2wudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLnF1ZXN0aW9ucygpO1xuICAgIGNvbnN0IGZpZWxkU2NoZW1hOiBGaWVsZFNjaGVtYURlZltdID0gW107XG4gICAgcm93cy5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5mb3JtQnVpbGRlci51bmlxdWVGaWVsZE5hbWUocm93Lm5hbWUgfHwgcm93LmxhYmVsLCBmaWVsZFNjaGVtYSk7XG4gICAgICBmaWVsZFNjaGVtYS5wdXNoKFxuICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmNyZWF0ZUZpZWxkU2NoZW1hKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBsYWJlbDogcm93LmxhYmVsLnRyaW0oKSxcbiAgICAgICAgICAgIHR5cGU6IHJvdy50eXBlLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHJvdy5yZXF1aXJlZCxcbiAgICAgICAgICAgIHNlY3Rpb25JZDogcm93LnNlY3Rpb25MYWJlbCA/IHRoaXMuZm9ybUJ1aWxkZXIudG9Ub2tlbihyb3cuc2VjdGlvbkxhYmVsKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHNlY3Rpb25MYWJlbDogcm93LnNlY3Rpb25MYWJlbCxcbiAgICAgICAgICAgIHNlY3Rpb25PcmRlcjogdGhpcy5zZWN0aW9uT3JkZXJGb3Iocm93LnNlY3Rpb25MYWJlbCwgcm93cyksXG4gICAgICAgICAgICBwbGFjZWhvbGRlclRleHQ6IHJvdy5wbGFjZWhvbGRlclRleHQsXG4gICAgICAgICAgICBoaW50VGV4dDogcm93LmhpbnRUZXh0LFxuICAgICAgICAgICAgb3B0aW9uczogcm93Lm9wdGlvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmRleFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc3VidGl0bGUgPSB0aGlzLnN1YnRpdGxlQ29udHJvbC52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgcHJlc2VudGF0aW9uID0gdGhpcy5wcmVzZW50YXRpb25QYXlsb2FkKCk7XG5cbiAgICAvLyBMYSBhcHAgZ3VhcmRhOiBhY8OhIHNvbG8gc2UgdmFsaWRhIHkgc2UgZW50cmVnYSBsbyBlc2NyaXRvLlxuICAgIGlmICh0aGlzLnByb3BzLnBlcnNpc3QgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmRyYWZ0LmVtaXQoeyBsYWJlbDogdGl0bGUsIHN1YnRpdGxlLCBwcmVzZW50YXRpb24sIHF1ZXN0aW9uczogZmllbGRTY2hlbWEgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zYXZpbmcuc2V0KHRydWUpO1xuXG4gICAgLy8gYHR5cGVJZGAgZGVyaXZhZG8gZGVsIHTDrXR1bG86IHNpcnZlIHBhcmEgdW4gdGlwbyBkZSBzb2xpY2l0dWQgZGVcbiAgICAvLyBwbGF0YWZvcm1hLCBkb25kZSBlbCB0w610dWxvIEVTIGxhIGlkZW50aWRhZC4gUGFyYSB1bmEgZW5jdWVzdGEgYXRhZGEgYVxuICAgIC8vIHVuYSBlbnRpZGFkIE5PIGFsY2FuemEg4oCUIGRvcyBldmVudG9zIGNvbiBlbCBtaXNtbyB0w610dWxvIGNvbGlzaW9uYXLDrWFuIGVuXG4gICAgLy8gZWwgbWlzbW8gdGlwbyB5IGNvbXBhcnRpcsOtYW4gcmVzcHVlc3Rhcy4gUG9yIGVzbyB1bmEgdmVydGljYWwgdXNhIHN1XG4gICAgLy8gZW5kcG9pbnQgKGBwZXJzaXN0OiBmYWxzZWApIHkgYXJtYSBlbCBpZCBjb24gbGEgZW50aWRhZCBhZGVudHJvLlxuICAgIGNvbnN0IHR5cGVJZCA9XG4gICAgICB0aGlzLnByb3BzLnR5cGVJZCA/PyBgJHt0aGlzLnByb3BzLnR5cGVQcmVmaXggPz8gREVGQVVMVF9UWVBFX1BSRUZJWH06JHt0aGlzLmZvcm1CdWlsZGVyLnRvVG9rZW4odGl0bGUpfWA7XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgbGFiZWw6IHRpdGxlLFxuICAgICAgc3VidGl0bGUsXG4gICAgICBwcmVzZW50YXRpb24sXG4gICAgICBlbnRpdHlSZWY6IHRoaXMucHJvcHMuZW50aXR5UmVmLFxuICAgICAgc2tpcFJldmlldzogdHJ1ZSxcbiAgICAgIHNraXBTdWJtaXR0ZXJJZGVudGl0eTogdHJ1ZSxcbiAgICAgIGZpZWxkU2NoZW1hLFxuICAgICAgYWxsb3dBbm9ueW1vdXM6IHRoaXMucHJvcHMuYWxsb3dBbm9ueW1vdXMgPz8gdHJ1ZSxcbiAgICAgIHZpc2liaWxpdHk6IHRoaXMucHJvcHMudmlzaWJpbGl0eSA/PyAoJ1BVQkxJQycgYXMgY29uc3QpLFxuICAgIH07XG5cbiAgICBjb25zdCBjYWxsJCA9IHRoaXMucHJvcHMudHlwZUlkXG4gICAgICA/IHRoaXMucmVxdWVzdHMudXBkYXRlUmVxdWVzdFR5cGUodGhpcy5wcm9wcy50eXBlSWQsIHBheWxvYWQpXG4gICAgICA6IHRoaXMucmVxdWVzdHMuY3JlYXRlUmVxdWVzdFR5cGUoeyAuLi5wYXlsb2FkLCB0eXBlSWQgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdHlwZUNvbmZpZyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGNhbGwkKTtcbiAgICAgIHRoaXMuc2F2aW5nLnNldChmYWxzZSk7XG4gICAgICB0aGlzLnNhdmVkLmVtaXQoeyB0eXBlQ29uZmlnIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zYXZpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgY29udGV4dDogJ3N1cnZleUJ1aWxkZXIuc2F2ZScsXG4gICAgICAgIGZhbGxiYWNrS2V5OiAnc2F2ZUVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogTkFNRVNQQUNFLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoeWRyYXRlKFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgc3VidGl0bGU6IHN0cmluZyxcbiAgICBxdWVzdGlvbnM6IEZpZWxkU2NoZW1hRGVmW10sXG4gICAgcHJlc2VudGF0aW9uPzogUmVxdWVzdFR5cGVQcmVzZW50YXRpb25cbiAgKTogdm9pZCB7XG4gICAgdGhpcy50aXRsZUNvbnRyb2wuc2V0VmFsdWUobGFiZWwgPz8gJycpO1xuICAgIHRoaXMuc3VidGl0bGVDb250cm9sLnNldFZhbHVlKHN1YnRpdGxlID8/ICcnKTtcbiAgICB0aGlzLmhlYWRlckltYWdlQ29udHJvbC5zZXRWYWx1ZShwcmVzZW50YXRpb24/LmhlYWRlckltYWdlVXJsID8/ICcnKTtcbiAgICB0aGlzLnN1Y2Nlc3NUaXRsZUNvbnRyb2wuc2V0VmFsdWUocHJlc2VudGF0aW9uPy5zdWNjZXNzVGl0bGUgfHwgdGhpcy5kZWZhdWx0U3VjY2Vzc1RpdGxlKCkpO1xuICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2VDb250cm9sLnNldFZhbHVlKHByZXNlbnRhdGlvbj8uc3VjY2Vzc01lc3NhZ2UgfHwgdGhpcy5kZWZhdWx0U3VjY2Vzc01lc3NhZ2UoKSk7XG4gICAgdGhpcy5zdWNjZXNzSW1hZ2VDb250cm9sLnNldFZhbHVlKHByZXNlbnRhdGlvbj8uc3VjY2Vzc0ltYWdlVXJsID8/ICcnKTtcbiAgICB0aGlzLnF1ZXN0aW9ucy5zZXQoWy4uLihxdWVzdGlvbnMgPz8gW10pXS5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcikubWFwKGYgPT4gdGhpcy5yb3dGcm9tRmllbGQoZikpKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlc2VudGF0aW9uUGF5bG9hZCgpOiBSZXF1ZXN0VHlwZVByZXNlbnRhdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcHJlc2VudGF0aW9uID0ge1xuICAgICAgaGVhZGVySW1hZ2VVcmw6IHRoaXMuaGVhZGVySW1hZ2VDb250cm9sLnZhbHVlLnRyaW0oKSxcbiAgICAgIHN1Y2Nlc3NUaXRsZTogdGhpcy5zdWNjZXNzVGl0bGVDb250cm9sLnZhbHVlLnRyaW0oKSB8fCB0aGlzLmRlZmF1bHRTdWNjZXNzVGl0bGUoKSxcbiAgICAgIHN1Y2Nlc3NNZXNzYWdlOiB0aGlzLnN1Y2Nlc3NNZXNzYWdlQ29udHJvbC52YWx1ZS50cmltKCkgfHwgdGhpcy5kZWZhdWx0U3VjY2Vzc01lc3NhZ2UoKSxcbiAgICAgIHN1Y2Nlc3NJbWFnZVVybDogdGhpcy5zdWNjZXNzSW1hZ2VDb250cm9sLnZhbHVlLnRyaW0oKSxcbiAgICB9O1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHByZXNlbnRhdGlvbikuc29tZShCb29sZWFuKSA/IHByZXNlbnRhdGlvbiA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFN1Y2Nlc3NUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnQoJ2RlZmF1bHRTdWNjZXNzVGl0bGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFN1Y2Nlc3NNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudCgnZGVmYXVsdFN1Y2Nlc3NNZXNzYWdlJyk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlV2l6YXJkU3RlcChzdGVwOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQoJycpO1xuICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICBpZiAoIXRoaXMudGl0bGVDb250cm9sLnZhbHVlLnRyaW0oKSkge1xuICAgICAgICB0aGlzLnRpdGxlQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCh0aGlzLnQoJ25vVGl0bGUnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoc3RlcCA9PT0gMSkge1xuICAgICAgY29uc3Qgcm93cyA9IHRoaXMucXVlc3Rpb25zKCk7XG4gICAgICBpZiAoIXJvd3MubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCh0aGlzLnQoJ25vUXVlc3Rpb25zJykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAocm93cy5zb21lKHIgPT4gIXIubGFiZWwudHJpbSgpKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQodGhpcy50KCdlbXB0eVF1ZXN0aW9uTGFiZWwnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEVsIGVkaXRvciB5YSBsbyB2YWxpZGEgYWwgY2VycmFyIGNhZGEgcHJlZ3VudGEsIHBlcm8gdW5hIHByZWd1bnRhIGFiaWVydGFcbiAgICAgIC8vIChvIGNhcmdhZGEgZGUgdW5hIGVuY3Vlc3RhIHZpZWphKSBwdWVkZSBsbGVnYXIgYWPDoSBzaW4gb3BjaW9uZXMuXG4gICAgICBpZiAocm93cy5zb21lKHIgPT4gRklFTERfVFlQRVNfV0lUSF9PUFRJT05TLmluY2x1ZGVzKHIudHlwZSkgJiYgIXIub3B0aW9ucz8ubGVuZ3RoKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQodGhpcy50KCdtaXNzaW5nT3B0aW9ucycpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcm93RnJvbUZpZWxkKGY6IEZpZWxkU2NoZW1hRGVmKTogRWRpdGFibGVGaWVsZERlZiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgcm93LSR7cm93VWlkKyt9YCxcbiAgICAgIG5hbWU6IGYubmFtZSxcbiAgICAgIGxhYmVsOiBmLmxhYmVsID8/ICcnLFxuICAgICAgcGxhY2Vob2xkZXJUZXh0OiBmLnBsYWNlaG9sZGVyVGV4dCA/PyAnJyxcbiAgICAgIGhpbnRUZXh0OiBmLmhpbnRUZXh0ID8/ICcnLFxuICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgcmVxdWlyZWQ6ICEhZi5yZXF1aXJlZCxcbiAgICAgIHNlY3Rpb25MYWJlbDogZi5zZWN0aW9uTGFiZWwgPz8gJycsXG4gICAgICBzZWN0aW9uT3JkZXI6IGYuc2VjdGlvbk9yZGVyLFxuICAgICAgb3B0aW9uczogZi5vcHRpb25zLFxuICAgIH07XG4gIH1cblxuICByZXZpZXdRdWVzdGlvbnNDb3VudCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5xdWVzdGlvbnMoKS5sZW5ndGg7XG4gICAgY29uc3Qga2V5ID0gY291bnQgPT09IDEgPyAncmV2aWV3UXVlc3Rpb25Db3VudCcgOiAncmV2aWV3UXVlc3Rpb25zQ291bnQnO1xuICAgIHJldHVybiB0aGlzLmludGVycG9sYXRlKHRoaXMudChrZXkpLCB7IGNvdW50IH0pO1xuICB9XG5cbiAgcHJldmlld1Byb3BzKCk6IEJ1dHRvbk1ldGFkYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46ICdzdXJ2ZXktYnVpbGRlci1wcmV2aWV3JyxcbiAgICAgIHRleHQ6IHRoaXMudCgncHJldmlldycpLFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICBpY29uOiB7IG5hbWU6ICdleWUtb3V0bGluZScsIHNsb3Q6ICdzdGFydCcgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgb3BlblByZXZpZXcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5tb2RhbHMub3Blbih7XG4gICAgICBjb21wb25lbnQ6IFN1cnZleVByZXZpZXdNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIG1vZGFsVGl0bGU6IHRoaXMudCgncHJldmlld1RpdGxlJyksXG4gICAgICAgIGNsb3NlTGFiZWw6IHRoaXMudCgnY2xvc2VQcmV2aWV3JyksXG4gICAgICAgIHRpdGxlOiB0aGlzLnRpdGxlQ29udHJvbC52YWx1ZS50cmltKCkgfHwgdGhpcy50KCd1bnRpdGxlZFF1ZXN0aW9uJyksXG4gICAgICAgIHN1YnRpdGxlOiB0aGlzLnN1YnRpdGxlQ29udHJvbC52YWx1ZS50cmltKCksXG4gICAgICAgIHByZXNlbnRhdGlvbjogdGhpcy5wcmVzZW50YXRpb25QYXlsb2FkKCksXG4gICAgICAgIHN1Y2Nlc3NUaXRsZTogdGhpcy5zdWNjZXNzVGl0bGVDb250cm9sLnZhbHVlLnRyaW0oKSB8fCB0aGlzLmRlZmF1bHRTdWNjZXNzVGl0bGUoKSxcbiAgICAgICAgc3VjY2Vzc01lc3NhZ2U6IHRoaXMuc3VjY2Vzc01lc3NhZ2VDb250cm9sLnZhbHVlLnRyaW0oKSB8fCB0aGlzLmRlZmF1bHRTdWNjZXNzTWVzc2FnZSgpLFxuICAgICAgICByZXF1aXJlZFN1ZmZpeDogYCDCtyAke3RoaXMudCgncmVxdWlyZWRUYWcnKX1gLFxuICAgICAgICBxdWVzdGlvbnM6IHRoaXMucXVlc3Rpb25zKCkubWFwKChxdWVzdGlvbiwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgb3JkZXI6IGluZGV4LFxuICAgICAgICAgIG5hbWU6IHF1ZXN0aW9uLm5hbWUgfHwgdGhpcy5mb3JtQnVpbGRlci50b1Rva2VuKHF1ZXN0aW9uLmxhYmVsKSxcbiAgICAgICAgICB0eXBlTGFiZWw6IHRoaXMudHlwZUxhYmVsKHF1ZXN0aW9uLnR5cGUpLFxuICAgICAgICAgIHNlY3Rpb25JZDogcXVlc3Rpb24uc2VjdGlvbkxhYmVsID8gdGhpcy5mb3JtQnVpbGRlci50b1Rva2VuKHF1ZXN0aW9uLnNlY3Rpb25MYWJlbCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgc2VjdGlvbk9yZGVyOiB0aGlzLnNlY3Rpb25PcmRlckZvcihxdWVzdGlvbi5zZWN0aW9uTGFiZWwsIHRoaXMucXVlc3Rpb25zKCkpLFxuICAgICAgICB9KSksXG4gICAgICB9LFxuICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlY3Rpb25PcmRlckZvcihzZWN0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCwgcm93czogQXJyYXk8UGljazxFZGl0YWJsZUZpZWxkRGVmLCAnc2VjdGlvbkxhYmVsJz4+KTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsYWJlbCA9IHNlY3Rpb25MYWJlbD8udHJpbSgpO1xuICAgIGlmICghbGFiZWwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbGFiZWxzID0gWy4uLm5ldyBTZXQocm93cy5tYXAocm93ID0+IHJvdy5zZWN0aW9uTGFiZWw/LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIGFzIHN0cmluZ1tdKV07XG4gICAgcmV0dXJuIGxhYmVscy5pbmRleE9mKGxhYmVsKTtcbiAgfVxufVxuIl19
|