@po-ui/ng-components 18.3.0 → 18.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view-base.component.mjs +27 -2
- package/esm2022/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view.component.mjs +7 -3
- package/esm2022/lib/components/po-field/po-combo/po-combo-base.component.mjs +2 -1
- package/esm2022/lib/components/po-field/po-combo/po-combo.component.mjs +66 -47
- package/esm2022/lib/components/po-field/po-multiselect/po-multiselect-dropdown/po-multiselect-dropdown.component.mjs +8 -4
- package/esm2022/lib/components/po-field/po-multiselect/po-multiselect.component.mjs +52 -34
- package/esm2022/lib/components/po-listbox/po-listbox-base.component.mjs +6 -2
- package/esm2022/lib/components/po-listbox/po-listbox.component.mjs +23 -5
- package/esm2022/lib/components/po-loading/po-loading-overlay/po-loading-overlay-base.component.mjs +10 -4
- package/esm2022/lib/components/po-tabs/po-tabs.component.mjs +2 -3
- package/fesm2022/po-ui-ng-components.mjs +217 -119
- package/fesm2022/po-ui-ng-components.mjs.map +1 -1
- package/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view-base.component.d.ts +23 -1
- package/lib/components/po-dynamic/po-dynamic-view/po-dynamic-view.component.d.ts +1 -0
- package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +1 -0
- package/lib/components/po-field/po-combo/po-combo.component.d.ts +3 -0
- package/lib/components/po-field/po-multiselect/po-multiselect-dropdown/po-multiselect-dropdown.component.d.ts +2 -1
- package/lib/components/po-field/po-multiselect/po-multiselect.component.d.ts +3 -0
- package/lib/components/po-listbox/po-listbox-base.component.d.ts +2 -1
- package/lib/components/po-listbox/po-listbox.component.d.ts +2 -0
- package/lib/components/po-loading/po-loading-overlay/po-loading-overlay-base.component.d.ts +9 -3
- package/package.json +4 -4
- package/po-ui-ng-components-18.5.0.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-update/v14/index.js +1 -1
- package/schematics/ng-update/v15/index.js +1 -1
- package/schematics/ng-update/v16/index.js +1 -1
- package/schematics/ng-update/v17/index.js +1 -1
- package/schematics/ng-update/v18/index.js +2 -2
- package/schematics/ng-update/v2/index.js +1 -1
- package/schematics/ng-update/v3/index.js +1 -1
- package/schematics/ng-update/v4/index.js +1 -1
- package/schematics/ng-update/v5/index.js +1 -1
- package/schematics/ng-update/v6/index.js +1 -1
- package/po-ui-ng-components-18.3.0.tgz +0 -0
|
@@ -19,14 +19,15 @@ import * as i7 from "../po-field-container/po-field-container-bottom/po-field-co
|
|
|
19
19
|
import * as i8 from "../po-field-container/po-field-container.component";
|
|
20
20
|
import * as i9 from "../../po-icon/po-icon.component";
|
|
21
21
|
import * as i10 from "../../po-listbox/po-listbox.component";
|
|
22
|
-
const _c0 = ["
|
|
23
|
-
const _c1 = ["
|
|
24
|
-
const _c2 = ["
|
|
25
|
-
const _c3 = ["
|
|
26
|
-
const _c4 = ["
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
i0.ɵɵ
|
|
22
|
+
const _c0 = ["outerContainer"];
|
|
23
|
+
const _c1 = ["containerElement"];
|
|
24
|
+
const _c2 = ["contentElement"];
|
|
25
|
+
const _c3 = ["iconArrow"];
|
|
26
|
+
const _c4 = ["inp"];
|
|
27
|
+
const _c5 = ["poListbox"];
|
|
28
|
+
function PoComboComponent_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
29
|
+
i0.ɵɵelementStart(0, "div", 19);
|
|
30
|
+
i0.ɵɵelement(1, "po-icon", 20);
|
|
30
31
|
i0.ɵɵelementEnd();
|
|
31
32
|
} if (rf & 2) {
|
|
32
33
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -34,56 +35,56 @@ function PoComboComponent_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
|
34
35
|
i0.ɵɵclassProp("po-field-icon-disabled", ctx_r1.disabled);
|
|
35
36
|
i0.ɵɵproperty("p-icon", ctx_r1.icon);
|
|
36
37
|
} }
|
|
37
|
-
function
|
|
38
|
+
function PoComboComponent_po_clean_9_Template(rf, ctx) { if (rf & 1) {
|
|
38
39
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
39
|
-
i0.ɵɵelementStart(0, "po-clean",
|
|
40
|
-
i0.ɵɵlistener("p-change-event", function
|
|
40
|
+
i0.ɵɵelementStart(0, "po-clean", 21);
|
|
41
|
+
i0.ɵɵlistener("p-change-event", function PoComboComponent_po_clean_9_Template_po_clean_p_change_event_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clear($event)); })("click", function PoComboComponent_po_clean_9_Template_po_clean_click_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.clear(null); return i0.ɵɵresetView($event.preventDefault()); })("keydown.enter", function PoComboComponent_po_clean_9_Template_po_clean_keydown_enter_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.clearAndFocus(); return i0.ɵɵresetView($event.preventDefault()); });
|
|
41
42
|
i0.ɵɵelementEnd();
|
|
42
43
|
} if (rf & 2) {
|
|
43
44
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
44
45
|
i0.ɵɵproperty("p-element-ref", ctx_r1.inputEl);
|
|
45
46
|
i0.ɵɵattribute("aria-label", ctx_r1.literals.clean);
|
|
46
47
|
} }
|
|
47
|
-
function
|
|
48
|
+
function PoComboComponent_ng_container_13_Template(rf, ctx) { if (rf & 1) {
|
|
48
49
|
i0.ɵɵelementContainer(0);
|
|
49
50
|
} }
|
|
50
|
-
function
|
|
51
|
+
function PoComboComponent_ng_template_14_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
51
52
|
i0.ɵɵelementContainer(0);
|
|
52
53
|
} }
|
|
53
|
-
function
|
|
54
|
-
i0.ɵɵtemplate(0,
|
|
54
|
+
function PoComboComponent_ng_template_14_Template(rf, ctx) { if (rf & 1) {
|
|
55
|
+
i0.ɵɵtemplate(0, PoComboComponent_ng_template_14_ng_container_0_Template, 1, 0, "ng-container", 22);
|
|
55
56
|
} if (rf & 2) {
|
|
56
57
|
i0.ɵɵnextContext();
|
|
57
|
-
const dropdownListbox_r4 = i0.ɵɵreference(
|
|
58
|
+
const dropdownListbox_r4 = i0.ɵɵreference(20);
|
|
58
59
|
i0.ɵɵproperty("ngTemplateOutlet", dropdownListbox_r4);
|
|
59
60
|
} }
|
|
60
|
-
function
|
|
61
|
+
function PoComboComponent_ng_template_16_ng_template_0_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
61
62
|
i0.ɵɵelementContainer(0);
|
|
62
63
|
} }
|
|
63
|
-
function
|
|
64
|
-
i0.ɵɵtemplate(0,
|
|
64
|
+
function PoComboComponent_ng_template_16_ng_template_0_Template(rf, ctx) { if (rf & 1) {
|
|
65
|
+
i0.ɵɵtemplate(0, PoComboComponent_ng_template_16_ng_template_0_ng_container_0_Template, 1, 0, "ng-container", 22);
|
|
65
66
|
} if (rf & 2) {
|
|
66
67
|
i0.ɵɵnextContext(2);
|
|
67
|
-
const dropdownListbox_r4 = i0.ɵɵreference(
|
|
68
|
+
const dropdownListbox_r4 = i0.ɵɵreference(20);
|
|
68
69
|
i0.ɵɵproperty("ngTemplateOutlet", dropdownListbox_r4);
|
|
69
70
|
} }
|
|
70
|
-
function
|
|
71
|
-
i0.ɵɵtemplate(0,
|
|
71
|
+
function PoComboComponent_ng_template_16_Template(rf, ctx) { if (rf & 1) {
|
|
72
|
+
i0.ɵɵtemplate(0, PoComboComponent_ng_template_16_ng_template_0_Template, 1, 1, "ng-template", 23);
|
|
72
73
|
} if (rf & 2) {
|
|
73
74
|
i0.ɵɵnextContext();
|
|
74
|
-
const trigger_r5 = i0.ɵɵreference(
|
|
75
|
+
const trigger_r5 = i0.ɵɵreference(4);
|
|
75
76
|
i0.ɵɵproperty("cdkConnectedOverlayOrigin", trigger_r5)("cdkConnectedOverlayOpen", true);
|
|
76
77
|
} }
|
|
77
|
-
function
|
|
78
|
+
function PoComboComponent_ng_template_19_Template(rf, ctx) { if (rf & 1) {
|
|
78
79
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
79
|
-
i0.ɵɵelementStart(0, "div",
|
|
80
|
-
i0.ɵɵlistener("p-selectcombo-item", function
|
|
80
|
+
i0.ɵɵelementStart(0, "div", 24, 7)(2, "po-listbox", 25, 8);
|
|
81
|
+
i0.ɵɵlistener("p-selectcombo-item", function PoComboComponent_ng_template_19_Template_po_listbox_p_selectcombo_item_2_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOptionClick($event, $event.event)); })("p-update-infinite-scroll", function PoComboComponent_ng_template_19_Template_po_listbox_p_update_infinite_scroll_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showMoreInfiniteScroll()); })("p-close", function PoComboComponent_ng_template_19_Template_po_listbox_p_close_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCloseCombo()); });
|
|
81
82
|
i0.ɵɵelementEnd()();
|
|
82
83
|
} if (rf & 2) {
|
|
83
84
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
84
85
|
i0.ɵɵproperty("hidden", !ctx_r1.comboOpen && !ctx_r1.isServerSearching);
|
|
85
86
|
i0.ɵɵadvance(2);
|
|
86
|
-
i0.ɵɵproperty("p-items", ctx_r1.visibleOptions)("p-field-value", ctx_r1.dynamicValue)("p-field-label", ctx_r1.dynamicLabel)("p-template", ctx_r1.comboOptionTemplate)("p-search-value", ctx_r1.getInputValue())("p-infinite-loading", ctx_r1.infiniteLoading)("p-infinite-scroll", ctx_r1.infiniteScroll)("p-filtering", ctx_r1.isFiltering)("p-cache", ctx_r1.cache)("p-filter-mode", ctx_r1.filterMode)("p-visible", ctx_r1.comboOpen)("p-is-searching", ctx_r1.isServerSearching)("p-should-mark-letter", ctx_r1.shouldMarkLetters)("p-compare-cache", ctx_r1.compareObjects(ctx_r1.cacheOptions, ctx_r1.visibleOptions))("p-combo-service", ctx_r1.service)("p-infinite-scroll-distance", ctx_r1.infiniteScrollDistance);
|
|
87
|
+
i0.ɵɵproperty("p-items", ctx_r1.visibleOptions)("p-field-value", ctx_r1.dynamicValue)("p-field-label", ctx_r1.dynamicLabel)("p-template", ctx_r1.comboOptionTemplate)("p-search-value", ctx_r1.getInputValue())("p-infinite-loading", ctx_r1.infiniteLoading)("p-infinite-scroll", ctx_r1.infiniteScroll)("p-filtering", ctx_r1.isFiltering)("p-cache", ctx_r1.cache)("p-filter-mode", ctx_r1.filterMode)("p-visible", ctx_r1.comboOpen)("p-is-searching", ctx_r1.isServerSearching)("p-should-mark-letter", ctx_r1.shouldMarkLetters)("p-compare-cache", ctx_r1.compareObjects(ctx_r1.cacheOptions, ctx_r1.visibleOptions))("p-combo-service", ctx_r1.service)("p-infinite-scroll-distance", ctx_r1.infiniteScrollDistance)("p-container-width", ctx_r1.containerWidth);
|
|
87
88
|
} }
|
|
88
89
|
const poComboContainerOffset = 8;
|
|
89
90
|
const poComboContainerPositionDefault = 'bottom';
|
|
@@ -142,6 +143,7 @@ export class PoComboComponent extends PoComboBaseComponent {
|
|
|
142
143
|
changeDetector;
|
|
143
144
|
controlPosition;
|
|
144
145
|
comboOptionTemplate;
|
|
146
|
+
outerContainer;
|
|
145
147
|
containerElement;
|
|
146
148
|
contentElement;
|
|
147
149
|
iconElement;
|
|
@@ -155,6 +157,7 @@ export class PoComboComponent extends PoComboBaseComponent {
|
|
|
155
157
|
scrollTop = 0;
|
|
156
158
|
shouldMarkLetters = true;
|
|
157
159
|
infiniteLoading = false;
|
|
160
|
+
containerWidth;
|
|
158
161
|
_isServerSearching = false;
|
|
159
162
|
lastKey;
|
|
160
163
|
clickoutListener;
|
|
@@ -190,6 +193,7 @@ export class PoComboComponent extends PoComboBaseComponent {
|
|
|
190
193
|
if (this.autoFocus) {
|
|
191
194
|
this.focus();
|
|
192
195
|
}
|
|
196
|
+
this.setContainerWidth();
|
|
193
197
|
}
|
|
194
198
|
ngOnChanges(changes) {
|
|
195
199
|
if (changes.debounceTime) {
|
|
@@ -565,6 +569,9 @@ export class PoComboComponent extends PoComboBaseComponent {
|
|
|
565
569
|
? this.renderer.addClass(this.inputEl.nativeElement, 'po-combo-input-focus')
|
|
566
570
|
: this.inputEl.nativeElement.focus();
|
|
567
571
|
this.setContainerPosition();
|
|
572
|
+
if (this.comboOpen) {
|
|
573
|
+
this.setContainerWidth();
|
|
574
|
+
}
|
|
568
575
|
}
|
|
569
576
|
removeListeners() {
|
|
570
577
|
if (this.clickoutListener) {
|
|
@@ -579,6 +586,11 @@ export class PoComboComponent extends PoComboBaseComponent {
|
|
|
579
586
|
this.controlPosition.setElements(this.containerElement.nativeElement, poComboContainerOffset, this.inputEl, ['top', 'bottom'], true);
|
|
580
587
|
this.adjustContainerPosition();
|
|
581
588
|
}
|
|
589
|
+
setContainerWidth() {
|
|
590
|
+
if (this.outerContainer) {
|
|
591
|
+
this.containerWidth = this.outerContainer.nativeElement.offsetWidth;
|
|
592
|
+
}
|
|
593
|
+
}
|
|
582
594
|
setOptions() {
|
|
583
595
|
return this.getInputValue() ? this.options : [];
|
|
584
596
|
}
|
|
@@ -614,11 +626,13 @@ export class PoComboComponent extends PoComboBaseComponent {
|
|
|
614
626
|
} }, viewQuery: function PoComboComponent_Query(rf, ctx) { if (rf & 1) {
|
|
615
627
|
i0.ɵɵviewQuery(_c0, 5, ElementRef);
|
|
616
628
|
i0.ɵɵviewQuery(_c1, 5, ElementRef);
|
|
617
|
-
i0.ɵɵviewQuery(_c2,
|
|
629
|
+
i0.ɵɵviewQuery(_c2, 5, ElementRef);
|
|
618
630
|
i0.ɵɵviewQuery(_c3, 7, ElementRef);
|
|
619
|
-
i0.ɵɵviewQuery(_c4,
|
|
631
|
+
i0.ɵɵviewQuery(_c4, 7, ElementRef);
|
|
632
|
+
i0.ɵɵviewQuery(_c5, 5);
|
|
620
633
|
} if (rf & 2) {
|
|
621
634
|
let _t;
|
|
635
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.outerContainer = _t.first);
|
|
622
636
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.containerElement = _t.first);
|
|
623
637
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentElement = _t.first);
|
|
624
638
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.iconElement = _t.first);
|
|
@@ -637,27 +651,29 @@ export class PoComboComponent extends PoComboBaseComponent {
|
|
|
637
651
|
useExisting: forwardRef(() => PoComboComponent),
|
|
638
652
|
multi: true
|
|
639
653
|
}
|
|
640
|
-
]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls:
|
|
654
|
+
]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 21, vars: 30, consts: [["outerContainer", ""], ["trigger", "cdkOverlayOrigin"], ["inp", ""], ["iconArrow", ""], ["dropdownDefault", ""], ["dropdownCDK", ""], ["dropdownListbox", ""], ["containerElement", ""], ["poListbox", "", "contentElement", ""], [3, "p-disabled", "p-id", "p-label", "p-optional", "p-required", "p-show-required"], ["cdkOverlayOrigin", "", 1, "po-field-container-content", "po-combo-container-content"], ["class", "po-field-icon-container-left", 4, "ngIf"], ["autocomplete", "off", "type", "text", 1, "po-combo-input", 3, "click", "keyup", "blur", "keydown", "ngClass", "disabled", "id", "placeholder", "required"], [1, "po-field-icon-container-right"], ["tabindex", "0", "role", "button", "class", "po-combo-clean po-icon-input", 3, "p-element-ref", "p-change-event", "click", "keydown.enter", 4, "ngIf"], [1, "po-combo-arrow", "po-field-icon", 3, "click"], [3, "p-icon"], [4, "ngIf", "ngIfThen", "ngIfElse"], [3, "p-help", "p-disabled"], [1, "po-field-icon-container-left"], [1, "po-field-icon", "po-icon-input", 3, "p-icon"], ["tabindex", "0", "role", "button", 1, "po-combo-clean", "po-icon-input", 3, "p-change-event", "click", "keydown.enter", "p-element-ref"], [4, "ngTemplateOutlet"], ["cdkConnectedOverlay", "", 3, "cdkConnectedOverlayOrigin", "cdkConnectedOverlayOpen"], [1, "po-combo-container", 3, "hidden"], ["p-type", "option", 3, "p-selectcombo-item", "p-update-infinite-scroll", "p-close", "p-items", "p-field-value", "p-field-label", "p-template", "p-search-value", "p-infinite-loading", "p-infinite-scroll", "p-filtering", "p-cache", "p-filter-mode", "p-visible", "p-is-searching", "p-should-mark-letter", "p-compare-cache", "p-combo-service", "p-infinite-scroll-distance", "p-container-width"]], template: function PoComboComponent_Template(rf, ctx) { if (rf & 1) {
|
|
641
655
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
642
|
-
i0.ɵɵelementStart(0, "po-field-container",
|
|
643
|
-
i0.ɵɵtemplate(
|
|
644
|
-
i0.ɵɵelementStart(
|
|
645
|
-
i0.ɵɵlistener("click", function
|
|
656
|
+
i0.ɵɵelementStart(0, "div", null, 0)(2, "po-field-container", 9)(3, "div", 10, 1);
|
|
657
|
+
i0.ɵɵtemplate(5, PoComboComponent_div_5_Template, 2, 3, "div", 11);
|
|
658
|
+
i0.ɵɵelementStart(6, "input", 12, 2);
|
|
659
|
+
i0.ɵɵlistener("click", function PoComboComponent_Template_input_click_6_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleComboVisibility()); })("keyup", function PoComboComponent_Template_input_keyup_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyUp($event)); })("blur", function PoComboComponent_Template_input_blur_6_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onBlur()); })("keyup", function PoComboComponent_Template_input_keyup_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.searchOnEnterOrArrow($event, $event.target.value)); })("keydown", function PoComboComponent_Template_input_keydown_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyDown($event)); });
|
|
646
660
|
i0.ɵɵelementEnd();
|
|
647
|
-
i0.ɵɵelementStart(
|
|
648
|
-
i0.ɵɵtemplate(
|
|
649
|
-
i0.ɵɵelementStart(
|
|
650
|
-
i0.ɵɵlistener("click", function
|
|
651
|
-
i0.ɵɵelement(
|
|
661
|
+
i0.ɵɵelementStart(8, "div", 13);
|
|
662
|
+
i0.ɵɵtemplate(9, PoComboComponent_po_clean_9_Template, 1, 2, "po-clean", 14);
|
|
663
|
+
i0.ɵɵelementStart(10, "div", 15, 3);
|
|
664
|
+
i0.ɵɵlistener("click", function PoComboComponent_Template_div_click_10_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleComboVisibility(true)); });
|
|
665
|
+
i0.ɵɵelement(12, "po-icon", 16);
|
|
652
666
|
i0.ɵɵelementEnd()()();
|
|
653
|
-
i0.ɵɵtemplate(
|
|
654
|
-
i0.ɵɵelement(
|
|
667
|
+
i0.ɵɵtemplate(13, PoComboComponent_ng_container_13_Template, 1, 0, "ng-container", 17)(14, PoComboComponent_ng_template_14_Template, 1, 1, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor)(16, PoComboComponent_ng_template_16_Template, 1, 2, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
|
|
668
|
+
i0.ɵɵelement(18, "po-field-container-bottom", 18);
|
|
669
|
+
i0.ɵɵelementEnd();
|
|
670
|
+
i0.ɵɵtemplate(19, PoComboComponent_ng_template_19_Template, 5, 18, "ng-template", null, 6, i0.ɵɵtemplateRefExtractor);
|
|
655
671
|
i0.ɵɵelementEnd();
|
|
656
|
-
i0.ɵɵtemplate(17, PoComboComponent_ng_template_17_Template, 5, 17, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
|
|
657
672
|
} if (rf & 2) {
|
|
658
|
-
const inp_r7 = i0.ɵɵreference(
|
|
659
|
-
const dropdownDefault_r8 = i0.ɵɵreference(
|
|
660
|
-
const dropdownCDK_r9 = i0.ɵɵreference(
|
|
673
|
+
const inp_r7 = i0.ɵɵreference(7);
|
|
674
|
+
const dropdownDefault_r8 = i0.ɵɵreference(15);
|
|
675
|
+
const dropdownCDK_r9 = i0.ɵɵreference(17);
|
|
676
|
+
i0.ɵɵadvance(2);
|
|
661
677
|
i0.ɵɵproperty("p-disabled", ctx.disabled)("p-id", ctx.id)("p-label", ctx.label)("p-optional", ctx.optional)("p-required", ctx.required)("p-show-required", ctx.showRequired);
|
|
662
678
|
i0.ɵɵadvance(3);
|
|
663
679
|
i0.ɵɵproperty("ngIf", ctx.icon);
|
|
@@ -693,10 +709,13 @@ export class PoComboComponent extends PoComboBaseComponent {
|
|
|
693
709
|
useExisting: forwardRef(() => PoComboComponent),
|
|
694
710
|
multi: true
|
|
695
711
|
}
|
|
696
|
-
], template: "<po-field-container\n
|
|
712
|
+
], template: "<div #outerContainer>\n <po-field-container\n [p-disabled]=\"disabled\"\n [p-id]=\"id\"\n [p-label]=\"label\"\n [p-optional]=\"optional\"\n [p-required]=\"required\"\n [p-show-required]=\"showRequired\"\n >\n <div cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\" class=\"po-field-container-content po-combo-container-content\">\n <div *ngIf=\"icon\" class=\"po-field-icon-container-left\">\n <po-icon\n class=\"po-field-icon po-icon-input\"\n [class.po-field-icon-disabled]=\"disabled\"\n [p-icon]=\"icon\"\n ></po-icon>\n </div>\n\n <input\n #inp\n class=\"po-combo-input\"\n [ngClass]=\"clean && inp.value ? 'po-input-double-icon-right' : 'po-input-icon-right'\"\n [class.po-input-icon-left]=\"icon\"\n autocomplete=\"off\"\n type=\"text\"\n [attr.name]=\"name\"\n [disabled]=\"disabled\"\n [id]=\"id\"\n [placeholder]=\"disabled ? '' : placeholder\"\n [required]=\"required\"\n (click)=\"toggleComboVisibility()\"\n (keyup)=\"onKeyUp($event)\"\n (blur)=\"onBlur()\"\n (keyup)=\"searchOnEnterOrArrow($event, $event.target.value)\"\n (keydown)=\"onKeyDown($event)\"\n />\n\n <div class=\"po-field-icon-container-right\">\n <po-clean\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"literals.clean\"\n class=\"po-combo-clean po-icon-input\"\n *ngIf=\"clean && !disabled && inp.value\"\n [p-element-ref]=\"inputEl\"\n (p-change-event)=\"clear($event)\"\n (click)=\"clear(null); $event.preventDefault()\"\n (keydown.enter)=\"clearAndFocus(); $event.preventDefault()\"\n >\n </po-clean>\n\n <div\n #iconArrow\n class=\"po-combo-arrow po-field-icon\"\n [class.po-field-icon-disabled]=\"disabled\"\n (click)=\"toggleComboVisibility(true)\"\n >\n <po-icon\n [p-icon]=\"comboOpen ? 'ICON_ARROW_UP po-icon-input' : 'ICON_ARROW_DOWN po-icon-input'\"\n [class.po-field-icon]=\"!disabled\"\n [class.po-combo-default-border]=\"!disabled && inp.value\"\n [class.po-combo-background-arrow-up]=\"!disabled && comboOpen\"\n ></po-icon>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"appendBox; then dropdownCDK; else dropdownDefault\"> </ng-container>\n\n <ng-template #dropdownDefault>\n <ng-container *ngTemplateOutlet=\"dropdownListbox\"> </ng-container>\n </ng-template>\n\n <ng-template #dropdownCDK>\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\" [cdkConnectedOverlayOpen]=\"true\">\n <ng-container *ngTemplateOutlet=\"dropdownListbox\"></ng-container>\n </ng-template>\n </ng-template>\n\n <po-field-container-bottom [p-help]=\"help\" [p-disabled]=\"disabled\"></po-field-container-bottom>\n </po-field-container>\n\n <ng-template #dropdownListbox>\n <div #containerElement class=\"po-combo-container\" [hidden]=\"!comboOpen && !isServerSearching\">\n <po-listbox\n #poListbox\n #contentElement\n p-type=\"option\"\n [p-items]=\"visibleOptions\"\n [p-field-value]=\"dynamicValue\"\n [p-field-label]=\"dynamicLabel\"\n [p-template]=\"comboOptionTemplate\"\n [p-search-value]=\"getInputValue()\"\n [p-infinite-loading]=\"infiniteLoading\"\n [p-infinite-scroll]=\"infiniteScroll\"\n [p-filtering]=\"isFiltering\"\n [p-cache]=\"cache\"\n (p-selectcombo-item)=\"onOptionClick($event, $event.event)\"\n [p-filter-mode]=\"filterMode\"\n [p-visible]=\"comboOpen\"\n [p-is-searching]=\"isServerSearching\"\n [p-should-mark-letter]=\"shouldMarkLetters\"\n [p-compare-cache]=\"compareObjects(cacheOptions, visibleOptions)\"\n [p-combo-service]=\"service\"\n [p-infinite-scroll-distance]=\"infiniteScrollDistance\"\n (p-update-infinite-scroll)=\"showMoreInfiniteScroll()\"\n (p-close)=\"onCloseCombo()\"\n [p-container-width]=\"containerWidth\"\n ></po-listbox>\n </div>\n </ng-template>\n</div>\n" }]
|
|
697
713
|
}], () => [{ type: i0.ElementRef }, { type: i0.IterableDiffers }, { type: i1.PoComboFilterService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i2.PoControlPositionService }, { type: i3.PoLanguageService }], { comboOptionTemplate: [{
|
|
698
714
|
type: ContentChild,
|
|
699
715
|
args: [PoComboOptionTemplateDirective, { static: true }]
|
|
716
|
+
}], outerContainer: [{
|
|
717
|
+
type: ViewChild,
|
|
718
|
+
args: ['outerContainer ', { read: ElementRef }]
|
|
700
719
|
}], containerElement: [{
|
|
701
720
|
type: ViewChild,
|
|
702
721
|
args: ['containerElement', { read: ElementRef }]
|
|
@@ -714,4 +733,4 @@ export class PoComboComponent extends PoComboBaseComponent {
|
|
|
714
733
|
args: ['poListbox']
|
|
715
734
|
}] }); })();
|
|
716
735
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PoComboComponent, { className: "PoComboComponent", filePath: "lib/components/po-field/po-combo/po-combo.component.ts", lineNumber: 102 }); })();
|
|
717
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWNvbWJvL3BvLWNvbWJvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1jb21iby9wby1jb21iby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFVBQVUsRUFNVixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtRUFBbUUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHakUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDL0csT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNwQnZDLCtCQUF1RDtJQUNyRCw4QkFBaUg7SUFDbkgsaUJBQU07OztJQUR5QyxjQUF5QztJQUF6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QWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ1csV0FBVztrQkFBdEUsU0FBUzttQkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDSixPQUFPO2tCQUE1RCxTQUFTO21CQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQUM1QixTQUFTO2tCQUFoQyxTQUFTO21CQUFDLFdBQVc7O2tGQVBYLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEl0ZXJhYmxlRGlmZmVycyxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1jb250cm9sLXBvc2l0aW9uL3BvLWNvbnRyb2wtcG9zaXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQb0tleUNvZGVFbnVtIH0gZnJvbSAnLi8uLi8uLi8uLi9lbnVtcy9wby1rZXktY29kZS5lbnVtJztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5cbmltcG9ydCB7IFBvQ29tYm9CYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9wby1jb21iby1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb0NvbWJvRmlsdGVyU2VydmljZSB9IGZyb20gJy4vcG8tY29tYm8tZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9Db21ib0dyb3VwIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWNvbWJvLWdyb3VwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0NvbWJvT3B0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWNvbWJvLW9wdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib09wdGlvblRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9wby1jb21iby1vcHRpb24tdGVtcGxhdGUvcG8tY29tYm8tb3B0aW9uLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0xpc3RCb3hDb21wb25lbnQgfSBmcm9tICcuLy4uLy4uL3BvLWxpc3Rib3gvcG8tbGlzdGJveC5jb21wb25lbnQnO1xuXG5jb25zdCBwb0NvbWJvQ29udGFpbmVyT2Zmc2V0ID0gODtcbmNvbnN0IHBvQ29tYm9Db250YWluZXJQb3NpdGlvbkRlZmF1bHQgPSAnYm90dG9tJztcblxuLyoqXG4gKiBAZG9jc0V4dGVuZHMgUG9Db21ib0Jhc2VDb21wb25lbnRcbiAqXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8tYmFzaWNcIiB0aXRsZT1cIlBPIENvbWJvIEJhc2ljXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tYmFzaWMvc2FtcGxlLXBvLWNvbWJvLWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1iYXNpYy9zYW1wbGUtcG8tY29tYm8tYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8tbGFic1wiIHRpdGxlPVwiUE8gQ29tYm8gTGFic1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWxhYnMvc2FtcGxlLXBvLWNvbWJvLWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWxhYnMvc2FtcGxlLXBvLWNvbWJvLWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8tc2NoZWR1bGluZ1wiIHRpdGxlPVwiUE8gQ29tYm8gLSBTY2hlZHVsaW5nXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tc2NoZWR1bGluZy9zYW1wbGUtcG8tY29tYm8tc2NoZWR1bGluZy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tc2NoZWR1bGluZy9zYW1wbGUtcG8tY29tYm8tc2NoZWR1bGluZy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcvc2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLXRyYW5zZmVyXCIgdGl0bGU9XCJQTyBDb21ibyAtIEJhbmtpbmcgVHJhbnNmZXJcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby10cmFuc2Zlci9zYW1wbGUtcG8tY29tYm8tdHJhbnNmZXIuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLXRyYW5zZmVyL3NhbXBsZS1wby1jb21iby10cmFuc2Zlci5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby1oZXJvZXNcIiB0aXRsZT1cIlBPIENvbWJvIC0gSGVyb2VzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taGVyb2VzL3NhbXBsZS1wby1jb21iby1oZXJvZXMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhlcm9lcy9zYW1wbGUtcG8tY29tYm8taGVyb2VzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWhlcm9lcy1yZWFjdGl2ZS1mb3JtXCIgdGl0bGU9XCJQTyBDb21ibyAtIEhlcm9lcyBSZWFjdGl2ZSBGb3JtXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taGVyb2VzLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWNvbWJvLWhlcm9lcy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1oZXJvZXMtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tY29tYm8taGVyb2VzLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8taW5maW5pdHktc2Nyb2xsXCIgdGl0bGU9XCJQTyBDb21ibyAtIEluaWZpdHkgU2Nyb2xsXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taW5maW5pdHktc2Nyb2xsL3NhbXBsZS1wby1jb21iby1pbmZpbml0eS1zY3JvbGwuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWluZmluaXR5LXNjcm9sbC9zYW1wbGUtcG8tY29tYm8taW5maW5pdHktc2Nyb2xsLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWhvdGVsc1wiIHRpdGxlPVwiUE8gQ29tYm8gLSBCb29raW5nIEhvdGVsXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taG90ZWxzL3NhbXBsZS1wby1jb21iby1ob3RlbHMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhvdGVscy9zYW1wbGUtcG8tY29tYm8taG90ZWxzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLWNvbWJvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLWNvbWJvLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIFBvQ29tYm9GaWx0ZXJTZXJ2aWNlLFxuICAgIFBvQ29udHJvbFBvc2l0aW9uU2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvQ29tYm9Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0NvbWJvQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFBvQ29tYm9Db21wb25lbnQgZXh0ZW5kcyBQb0NvbWJvQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQENvbnRlbnRDaGlsZChQb0NvbWJvT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGNvbWJvT3B0aW9uVGVtcGxhdGU6IFBvQ29tYm9PcHRpb25UZW1wbGF0ZURpcmVjdGl2ZTtcblxuICBAVmlld0NoaWxkKCdjb250YWluZXJFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNvbnRhaW5lckVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnRFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNvbnRlbnRFbGVtZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpY29uQXJyb3cnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpY29uRWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnaW5wJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgaW5wdXRFbDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncG9MaXN0Ym94JykgcG9MaXN0Ym94OiBQb0xpc3RCb3hDb21wb25lbnQ7XG5cbiAgY29tYm9JY29uOiBzdHJpbmcgPSAnSUNPTl9BUlJPV19ET1dOJztcbiAgY29tYm9PcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGRpZmZlcjogYW55O1xuICBpZCA9IGBwby1jb21ib1ske3V1aWQoKX1dYDtcbiAgaXNQcm9jZXNzaW5nVmFsdWVCeVRhYjogYm9vbGVhbiA9IGZhbHNlO1xuICBzY3JvbGxUb3AgPSAwO1xuICBzaG91bGRNYXJrTGV0dGVyczogYm9vbGVhbiA9IHRydWU7XG4gIGluZmluaXRlTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2lzU2VydmVyU2VhcmNoaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdEtleTtcblxuICBwcml2YXRlIGNsaWNrb3V0TGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgZXZlbnRSZXNpemVMaXN0ZW5lcjogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIGZpbHRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGdldFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uU2Nyb2xsRXZlbnQ6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwdWJsaWMgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgIHB1YmxpYyBkZWZhdWx0U2VydmljZTogUG9Db21ib0ZpbHRlclNlcnZpY2UsXG4gICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjb250cm9sUG9zaXRpb246IFBvQ29udHJvbFBvc2l0aW9uU2VydmljZSxcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGxhbmd1YWdlU2VydmljZSk7XG5cbiAgICB0aGlzLmRpZmZlciA9IGRpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgc2V0IGlzU2VydmVyU2VhcmNoaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9pc1NlcnZlclNlYXJjaGluZyA9IHZhbHVlO1xuXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgdGhpcy5zZXRDb250YWluZXJQb3NpdGlvbigpO1xuICAgICAgdGhpcy5pbml0aWFsaXplTGlzdGVuZXJzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lzU2VydmVyU2VhcmNoaW5nID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzU2VydmVyU2VhcmNoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1NlcnZlclNlYXJjaGluZztcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuZGVib3VuY2VUaW1lKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlS2V5dXBPYnNlcnZhYmxlKCk7XG4gICAgICB0aGlzLmluaXRJbnB1dE9ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5maWx0ZXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLmNvbmZpZ0FmdGVyU2V0RmlsdGVyU2VydmljZSh0aGlzLmZpbHRlclNlcnZpY2UpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG5cbiAgICBpZiAodGhpcy5maWx0ZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmdldFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvblNjcm9sbEV2ZW50Py51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBxdWUgYXRyaWJ1aSBmb2NvIGFvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6w6EtbGEgw6kgbmVjZXNzw6FyaW8gdGVyIGEgaW5zdMOibmNpYSBkbyBjb21wb25lbnRlIG5vIERPTSwgcG9kZW5kbyBzZXIgdXRpbGl6YWRvIG8gVmlld0NoaWxkIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0IHsgUG9Db21ib0NvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9Db21ib0NvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgY29tYm86IFBvQ29tYm9Db21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzQ29tYm8oKSB7XG4gICAqICAgdGhpcy5jb21iby5mb2N1cygpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG9uQmx1cigpIHtcbiAgICB0aGlzLm9uTW9kZWxUb3VjaGVkPy4oKTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudD86IGFueSkge1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGU7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIGlmIChldmVudC5zaGlmdEtleSAmJiBrZXkgPT09IFBvS2V5Q29kZUVudW0udGFiKSB7XG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGJ1c2NhIHVtIHJlZ2lzdHJvIHF1YW5kbyBhY2lvbmFyIG8gdGFiXG4gICAgaWYgKHRoaXMuc2VydmljZSAmJiBrZXkgPT09IFBvS2V5Q29kZUVudW0udGFiICYmIGlucHV0VmFsdWUgJiYgIXRoaXMuZGlzYWJsZWRUYWJGaWx0ZXIpIHtcbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RCeVZhbHVlKGlucHV0VmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09IFBvS2V5Q29kZUVudW0uYXJyb3dEb3duKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKHRoaXMudmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eSh0cnVlKTtcbiAgICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSB0aGlzLmNoYW5nZU9uRW50ZXIgPyB0aGlzLmlzRmlsdGVyaW5nIDogZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGVjbGEgXCJlbnRlclwiXG4gICAgaWYgKGtleSA9PT0gUG9LZXlDb2RlRW51bS5lbnRlciAmJiB0aGlzLnNlbGVjdGVkVmlldyAmJiB0aGlzLmNvbWJvT3Blbikge1xuICAgICAgY29uc3QgaXNVcGRhdGVNb2RlbCA9IHRoaXMuc2VsZWN0ZWRWaWV3LnZhbHVlICE9PSB0aGlzLnNlbGVjdGVkVmFsdWUgfHwgaW5wdXRWYWx1ZSAhPT0gdGhpcy5zZWxlY3RlZFZpZXcubGFiZWw7XG5cbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eShmYWxzZSk7XG5cbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSh0aGlzLnNlbGVjdGVkVmlldywgaXNVcGRhdGVNb2RlbCk7XG4gICAgICB0aGlzLmlzRmlsdGVyaW5nID0gZmFsc2U7XG5cbiAgICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KFsuLi50aGlzLmNhY2hlU3RhdGljT3B0aW9uc10pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09IFBvS2V5Q29kZUVudW0uZW50ZXIpIHtcbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eSh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBQb0tleUNvZGVFbnVtLmVzYykge1xuICAgICAgaWYgKGtleSA9PT0gdGhpcy5sYXN0S2V5KSB7XG4gICAgICAgIHRoaXMubGFzdEtleSA9ICcnO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckFuZEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkNsb3NlQ29tYm8oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxhc3RLZXkgPSBldmVudC5rZXlDb2RlO1xuICB9XG5cbiAgb25LZXlVcChldmVudD86IGFueSkge1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIGNvbnN0IGlzVmFsaWRLZXkgPVxuICAgICAga2V5ICE9PSBQb0tleUNvZGVFbnVtLmFycm93VXAgJiZcbiAgICAgIGtleSAhPT0gUG9LZXlDb2RlRW51bS5hcnJvd0Rvd24gJiZcbiAgICAgIGtleSAhPT0gUG9LZXlDb2RlRW51bS5lbnRlciAmJlxuICAgICAga2V5ICE9PSBQb0tleUNvZGVFbnVtLmVzYyAmJlxuICAgICAga2V5ICE9PSBQb0tleUNvZGVFbnVtLnRhYjtcblxuICAgIGlmIChpc1ZhbGlkS2V5KSB7XG4gICAgICBpZiAoaW5wdXRWYWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuc2VydmljZSAmJiB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgIT09IGlucHV0VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNob3VsZE1hcmtMZXR0ZXJzID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzRmlsdGVyaW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvckxhYmVsKGlucHV0VmFsdWUsIHRoaXMuY29tYm9PcHRpb25zTGlzdCwgdGhpcy5maWx0ZXJNb2RlKTtcbiAgICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoaW5wdXRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHF1YW5kbyBhcGFnYXIgcmFwaWRvIG8gY2FtcG8gZSBjb250ZXIgc2VydmnDp28sIHZhbG9yLCBuw6NvIGRpc3BhcmF2YSBvIGtleXVwIG9ic2VydmFibGVcbiAgICAgICAgLy8gbmVjZXNzYXJpbyBlc3RlIHRyYXRhbWVudG8gcGFyYSByZXRvcm5hciBhIGxpc3RhICdkZWZhdWx0Jy5cbiAgICAgICAgY29uc3QgdXNlRGVmYXVsdE9wdGlvbnNTZXJ2aWNlID1cbiAgICAgICAgICB0aGlzLnNlcnZpY2UgJiYgdGhpcy5zZWxlY3RlZFZhbHVlICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24ubGFiZWwgPT09IHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUobnVsbCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHVzZURlZmF1bHRPcHRpb25zU2VydmljZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KFsuLi50aGlzLmNhY2hlT3B0aW9uc10pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0ZpbHRlcmluZyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBjYXNvIG8gdmFsb3IgcGVzcXVpc2FkbyBmb3IgZGlmZXJlbnRlIGRvIGFudGVyaW9yIGRldmUgYWJyaXIgbyBjb21ib1xuICAgICAgaWYgKHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSAhPT0gaW5wdXRWYWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlID0gaW5wdXRWYWx1ZTtcbiAgfVxuXG4gIGluaXRJbnB1dE9ic2VydmFibGUoKSB7XG4gICAgaWYgKHRoaXMuc2VydmljZSkge1xuICAgICAgY29uc3Qga2V5dXBPYnNlcnZhYmxlID0gZnJvbUV2ZW50KHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LCAna2V5dXAnKS5waXBlKFxuICAgICAgICBmaWx0ZXIoKGU6IGFueSkgPT4gdGhpcy5pc1ZhbGlkQ2hhcmFjdGVyVG9TZWFyY2goZS5rZXlDb2RlKSksXG4gICAgICAgIG1hcCgoZTogYW55KSA9PiBlLmN1cnJlbnRUYXJnZXQudmFsdWUpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvdWxkTWFya0xldHRlcnMgPSBmYWxzZTtcbiAgICAgICAgfSksXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSlcbiAgICAgICk7XG5cbiAgICAgIHRoaXMua2V5dXBTdWJzY3JpYmUgPSBrZXl1cE9ic2VydmFibGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+PSB0aGlzLmZpbHRlck1pbmxlbmd0aCB8fCAhdmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmNvbnRyb2xBcHBseUZpbHRlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRyb2xBcHBseUZpbHRlcih2YWx1ZSwgaXNBcnJvd0Rvd24/OiBib29sZWFuKSB7XG4gICAgaWYgKFxuICAgICAgKCF0aGlzLmlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWIgJiYgKCF0aGlzLnNlbGVjdGVkT3B0aW9uIHx8IHZhbHVlICE9PSB0aGlzLnNlbGVjdGVkT3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXSkpIHx8XG4gICAgICAhdGhpcy5jYWNoZVxuICAgICkge1xuICAgICAgdGhpcy5kZWZhdWx0U2VydmljZS5oYXNOZXh0ID0gdHJ1ZTtcbiAgICAgIHRoaXMucGFnZSA9IHRoaXMuc2V0UGFnZSgpO1xuICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKHZhbHVlLCB0cnVlLCBpc0Fycm93RG93bik7XG4gICAgfVxuICAgIHRoaXMuaXNQcm9jZXNzaW5nVmFsdWVCeVRhYiA9IGZhbHNlO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIodmFsdWU6IHN0cmluZywgcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSwgaXNBcnJvd0Rvd24/OiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuZGVmYXVsdFNlcnZpY2UuaGFzTmV4dCkge1xuICAgICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KGZhbHNlLCByZXNldCk7XG4gICAgICB0aGlzLmlzU2VydmVyU2VhcmNoaW5nID0gdHJ1ZTtcblxuICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLmluZmluaXRlU2Nyb2xsXG4gICAgICAgID8geyBwcm9wZXJ0eTogdGhpcy5maWVsZExhYmVsLCB2YWx1ZSwgcGFnZTogdGhpcy5wYWdlLCBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSB9XG4gICAgICAgIDogeyBwcm9wZXJ0eTogdGhpcy5maWVsZExhYmVsLCB2YWx1ZSB9O1xuXG4gICAgICB0aGlzLmZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZS5nZXRGaWx0ZXJlZERhdGEocGFyYW0sIHRoaXMuZmlsdGVyUGFyYW1zKS5zdWJzY3JpYmUoXG4gICAgICAgIGl0ZW1zID0+IHtcbiAgICAgICAgICB0aGlzLnNldE9wdGlvbnNCeUFwcGx5RmlsdGVyKHZhbHVlLCBpdGVtcywgcmVzZXQpO1xuICAgICAgICAgIGlmIChpc0Fycm93RG93bikge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHRoaXMub25FcnJvckZpbHRlcmVkRGF0YSgpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNldE9wdGlvbnNCeUFwcGx5RmlsdGVyKHZhbHVlLCBpdGVtcywgcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuc2hvdWxkTWFya0xldHRlcnMgPSB0cnVlO1xuICAgIHRoaXMuaXNTZXJ2ZXJTZWFyY2hpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmluZmluaXRlTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMucHJlcGFyZU9wdGlvbnMoaXRlbXMpO1xuXG4gICAgdGhpcy5zZWFyY2hGb3JMYWJlbCh2YWx1ZSwgaXRlbXMsIHRoaXMuZmlsdGVyTW9kZSk7XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eSh0cnVlLCByZXNldCk7XG5cbiAgICBpZiAodGhpcy5pc0ZpcnN0RmlsdGVyKSB7XG4gICAgICB0aGlzLmlzRmlyc3RGaWx0ZXIgPSAhdGhpcy5pc0ZpcnN0RmlsdGVyO1xuXG4gICAgICB0aGlzLmNhY2hlT3B0aW9ucyA9IHRoaXMuY29tYm9PcHRpb25zTGlzdDtcbiAgICB9XG4gIH1cblxuICBnZXRPYmplY3RCeVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSAhPT0gdmFsdWUgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbj8uW3RoaXMuZHluYW1pY0xhYmVsXSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuaXNQcm9jZXNzaW5nVmFsdWVCeVRhYiA9IHRydWU7XG5cbiAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uID0gdGhpcy5zZXJ2aWNlLmdldE9iamVjdEJ5VmFsdWUodmFsdWUsIHRoaXMuZmlsdGVyUGFyYW1zKS5zdWJzY3JpYmUoXG4gICAgICAgIGl0ZW0gPT4gdGhpcy51cGRhdGVPcHRpb25CeUZpbHRlcmVkVmFsdWUoaXRlbSksXG4gICAgICAgIGVycm9yID0+IHRoaXMub25FcnJvckdldE9iamVjdEJ5VmFsdWUoKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVPcHRpb25CeUZpbHRlcmVkVmFsdWUoaXRlbSkge1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBbaXRlbV07XG4gICAgICB0aGlzLm9uT3B0aW9uQ2xpY2soaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShudWxsKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNQcm9jZXNzaW5nVmFsdWVCeVRhYiA9IGZhbHNlO1xuICAgIH0sIHRoaXMuZGVib3VuY2VUaW1lKTtcbiAgfVxuXG4gIHNldFNob3VsZEFwcGx5Rm9jdXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNob3VsZEFwcGx5Rm9jdXMgPSB2YWx1ZTtcbiAgfVxuXG4gIHRvZ2dsZUNvbWJvVmlzaWJpbGl0eShpc0J1dHRvbj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2hvdWxkQXBwbHlGb2N1cyh0cnVlKTtcblxuICAgIGlmICh0aGlzLnNlcnZpY2UgJiYgIXRoaXMuZGlzYWJsZWRJbml0RmlsdGVyKSB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVySW5GaXJzdENsaWNrKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KCF0aGlzLmNvbWJvT3BlbiwgZmFsc2UsIGlzQnV0dG9uKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVySW5GaXJzdENsaWNrKCkge1xuICAgIGlmICh0aGlzLmlzRmlyc3RGaWx0ZXIgJiYgIXRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgICBjb25zdCBzY3JvbGxpbmdDb250cm9sID0gdGhpcy5zZXRTY3JvbGxpbmdDb250cm9sKCk7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKCcnLCBzY3JvbGxpbmdDb250cm9sKTtcbiAgICB9XG4gIH1cblxuICBjb250cm9sQ29tYm9WaXNpYmlsaXR5KHRvT3BlbjogYm9vbGVhbiwgcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSwgaXNCdXR0b24/OiBib29sZWFuKSB7XG4gICAgdG9PcGVuID8gdGhpcy5vcGVuKHJlc2V0LCBpc0J1dHRvbikgOiB0aGlzLmNsb3NlKHJlc2V0KTtcbiAgfVxuXG4gIG9uQ2xvc2VDb21ibygpIHtcbiAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBvbk9wdGlvbkNsaWNrKG9wdGlvbjogUG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cCwgZXZlbnQ/OiBhbnkpIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5nZXRJbnB1dFZhbHVlKCk7XG4gICAgY29uc3QgaXNVcGRhdGVNb2RlbCA9XG4gICAgICBvcHRpb25bdGhpcy5keW5hbWljVmFsdWVdICE9PSB0aGlzLnNlbGVjdGVkVmFsdWUgfHxcbiAgICAgICEhKHRoaXMuc2VsZWN0ZWRWaWV3ICYmIGlucHV0VmFsdWUgIT09IHRoaXMuc2VsZWN0ZWRWaWV3W3RoaXMuZHluYW1pY0xhYmVsXSk7XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShvcHRpb24sIGlzVXBkYXRlTW9kZWwpO1xuICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KFsuLi50aGlzLmNhY2hlU3RhdGljT3B0aW9uc10pO1xuICAgIH1cblxuICAgIHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWaWV3W3RoaXMuZHluYW1pY0xhYmVsXTtcblxuICAgIGlmICh0aGlzLnNob3VsZEFwcGx5Rm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlU2Nyb2xsVG9wKHNlbGVjdGVkSXRlbSwgaW5kZXgpIHtcbiAgICBpZiAoIXNlbGVjdGVkSXRlbS5sZW5ndGggfHwgaW5kZXggPD0gMSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1bMF0ub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFuTGlzdGJveCgpIHtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUobnVsbCk7XG4gICAgdGhpcy5vcHRpb25zLm1hcChvcHRpb24gPT4gKG9wdGlvbi5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gIH1cblxuICBnZXRJbnB1dFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldElucHV0VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuY2xlYW5MaXN0Ym94KCk7XG4gICAgfVxuICB9XG5cbiAgd2FzQ2xpY2tlZE9uVG9nZ2xlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb21ib09wZW4gJiZcbiAgICAgICF0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAhdGhpcy5pY29uRWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICghdGhpcy5jb250ZW50RWxlbWVudCB8fCAhdGhpcy5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpXG4gICAgKSB7XG4gICAgICAvLyBFc2NvbmRlIENvbnRlbnQgZG8gQ29tYm8gcXVhbmRvIGZvciBjbGljYWRvIGZvcmFcbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eShmYWxzZSk7XG5cbiAgICAgIHRoaXMudmVyaWZ5VmFsaWRPcHRpb24oKTtcblxuICAgICAgLy8gY2FzbyBmb3IgY2hhbmdlT25FbnRlciBkZXZlIGxpbXBhciBvIHNlbGVjdGVkVmlldyBwYXJhIHJlaW5pY2lhLWxvXG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IHRoaXMuY2hhbmdlT25FbnRlciAmJiAhdGhpcy5zZWxlY3RlZFZhbHVlID8gdW5kZWZpbmVkIDogdGhpcy5zZWxlY3RlZFZpZXc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlcnZpY2UgJiYgIXRoaXMuZ2V0SW5wdXRWYWx1ZSgpICYmICF0aGlzLmlzRmlyc3RGaWx0ZXIpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsaW5nQ29udHJvbCA9IHRoaXMuc2V0U2Nyb2xsaW5nQ29udHJvbCgpO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCcnLCBzY3JvbGxpbmdDb250cm9sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkQ2hhcmFjdGVyVG9TZWFyY2goa2V5Q29kZSkge1xuICAgIHJldHVybiAoXG4gICAgICBrZXlDb2RlICE9PSA5ICYmIC8vIHRhYlxuICAgICAga2V5Q29kZSAhPT0gMTMgJiYgLy8gZW50ZXRcbiAgICAgIGtleUNvZGUgIT09IDE2ICYmIC8vIHNoaWZ0XG4gICAgICBrZXlDb2RlICE9PSAxNyAmJiAvLyBjdHJsXG4gICAgICBrZXlDb2RlICE9PSAxOCAmJiAvLyBhbHRcbiAgICAgIGtleUNvZGUgIT09IDIwICYmIC8vIGNhcHNsb2NrXG4gICAgICBrZXlDb2RlICE9PSAyNyAmJiAvLyBlc2NcbiAgICAgIGtleUNvZGUgIT09IDM3ICYmIC8vIHNldGFcbiAgICAgIGtleUNvZGUgIT09IDM4ICYmIC8vIHNldGFcbiAgICAgIGtleUNvZGUgIT09IDM5ICYmIC8vIHNldGFcbiAgICAgIGtleUNvZGUgIT09IDQwICYmIC8vIHNldGFcbiAgICAgIGtleUNvZGUgIT09IDkzXG4gICAgKTsgLy8gd2luZG93cyBtZW51XG4gIH1cblxuICBzZWFyY2hPbkVudGVyT3JBcnJvdyhldmVudCwgdmFsdWU6IHN0cmluZykge1xuICAgIGlmIChcbiAgICAgIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJykgJiZcbiAgICAgIHRoaXMuc2VydmljZSAmJlxuICAgICAgIXRoaXMuc2VsZWN0ZWRWaWV3ICYmXG4gICAgICB2YWx1ZS5sZW5ndGggPj0gdGhpcy5maWx0ZXJNaW5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMuY29udHJvbEFwcGx5RmlsdGVyKHZhbHVlLCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKTtcbiAgICB9XG4gIH1cblxuICBzaG93TW9yZUluZmluaXRlU2Nyb2xsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlZmF1bHRTZXJ2aWNlLmhhc05leHQpIHtcbiAgICAgIHRoaXMuaW5maW5pdGVMb2FkaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5wYWdlKys7XG4gICAgdGhpcy5hcHBseUZpbHRlcignJywgdHJ1ZSk7XG4gIH1cblxuICBjbGVhckFuZEZvY3VzKCkge1xuICAgIHRoaXMuY2xlYXIobnVsbCk7XG4gICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24oKSB7XG4gICAgdGhpcy5jb250cm9sUG9zaXRpb24uYWRqdXN0UG9zaXRpb24ocG9Db21ib0NvbnRhaW5lclBvc2l0aW9uRGVmYXVsdCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlKHJlc2V0OiBib29sZWFuKSB7XG4gICAgdGhpcy5jb21ib09wZW4gPSBmYWxzZTtcblxuICAgIGlmICghcmVzZXQpIHtcbiAgICAgIGlmICghdGhpcy5nZXRJbnB1dFZhbHVlKCkpIHtcbiAgICAgICAgdGhpcy5wYWdlID0gdGhpcy5zZXRQYWdlKCk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFNlcnZpY2UuaGFzTmV4dCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnNldE9wdGlvbnMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgIHRoaXMuY29tYm9JY29uID0gJ0lDT05fQVJST1dfRE9XTic7XG5cbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuXG4gICAgdGhpcy5pc0ZpbHRlcmluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudCwgJ3BvLWNvbWJvLWlucHV0LWZvY3VzJyk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcblxuICAgIHRoaXMuY2xpY2tvdXRMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy53YXNDbGlja2VkT25Ub2dnbGUoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAvLyB0aW1lb3V0IG5lY2Vzc2FyaW8gcG9pcyBhIGFuaW1hw6fDo28gZG8gcG8tbWVudSBpbXBhY3RhIG5vIGFqdXN0ZSBkYSBwb3Npw6fDo28gZG8gY29udGFpbmVyLlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkanVzdENvbnRhaW5lclBvc2l0aW9uKCksIDI1MCk7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG9uRXJyb3JHZXRPYmplY3RCeVZhbHVlKCkge1xuICAgIHRoaXMudXBkYXRlT3B0aW9uQnlGaWx0ZXJlZFZhbHVlKG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBvblNjcm9sbCA9ICgpOiB2b2lkID0+IHtcbiAgICB0aGlzLmFkanVzdENvbnRhaW5lclBvc2l0aW9uKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBvbkVycm9yRmlsdGVyZWREYXRhKCkge1xuICAgIHRoaXMuaXNTZXJ2ZXJTZWFyY2hpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KFtdKTtcblxuICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eSh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbihyZXNldDogYm9vbGVhbiwgaXNCdXR0b24/OiBib29sZWFuKSB7XG4gICAgdGhpcy5jb21ib09wZW4gPSB0cnVlO1xuICAgIGlmICghcmVzZXQgJiYgdGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgaWYgKCF0aGlzLmdldElucHV0VmFsdWUoKSkge1xuICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5zZXRPcHRpb25zKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmNvbWJvSWNvbiA9ICdJQ09OX0FSUk9XX1VQJztcblxuICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuXG4gICAgaXNCdXR0b25cbiAgICAgID8gdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudCwgJ3BvLWNvbWJvLWlucHV0LWZvY3VzJylcbiAgICAgIDogdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgIHRoaXMuc2V0Q29udGFpbmVyUG9zaXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLmNsaWNrb3V0TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tvdXRMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29udGFpbmVyUG9zaXRpb24oKSB7XG4gICAgdGhpcy5jb250cm9sUG9zaXRpb24uc2V0RWxlbWVudHMoXG4gICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgIHBvQ29tYm9Db250YWluZXJPZmZzZXQsXG4gICAgICB0aGlzLmlucHV0RWwsXG4gICAgICBbJ3RvcCcsICdib3R0b20nXSxcbiAgICAgIHRydWVcbiAgICApO1xuXG4gICAgdGhpcy5hZGp1c3RDb250YWluZXJQb3NpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldElucHV0VmFsdWUoKSA/IHRoaXMub3B0aW9ucyA6IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlT3B0aW9ucyhpdGVtcykge1xuICAgIHJldHVybiB0aGlzLmluZmluaXRlU2Nyb2xsID8gWy4uLnRoaXMub3B0aW9ucywgLi4uaXRlbXNdIDogaXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHNldFBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5maW5pdGVTY3JvbGwgPyAxIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTY3JvbGxpbmdDb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLmluZmluaXRlU2Nyb2xsID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0l0ZW0oKSB7XG4gICAgdGhpcy5wb0xpc3Rib3g/Lmxpc3Rib3hJdGVtTGlzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbGV0IGl0ZW07XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIGl0ZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucG8tbGlzdGJveC1pdGVtW2FyaWEtc2VsZWN0ZWQ9XCJ0cnVlXCJdJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBvLWxpc3Rib3gtaXRlbScpWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgfVxuICAgICAgdGhpcy5wb0xpc3Rib3g/Lmxpc3Rib3hJdGVtTGlzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXG4gICAgICBpdGVtPy5mb2N1cygpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cG8tZmllbGQtY29udGFpbmVyXG4gIFtwLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW3AtaWRdPVwiaWRcIlxuICBbcC1sYWJlbF09XCJsYWJlbFwiXG4gIFtwLW9wdGlvbmFsXT1cIm9wdGlvbmFsXCJcbiAgW3AtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICBbcC1zaG93LXJlcXVpcmVkXT1cInNob3dSZXF1aXJlZFwiXG4+XG4gIDxkaXYgY2RrT3ZlcmxheU9yaWdpbiAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIiBjbGFzcz1cInBvLWZpZWxkLWNvbnRhaW5lci1jb250ZW50IHBvLWNvbWJvLWNvbnRhaW5lci1jb250ZW50XCI+XG4gICAgPGRpdiAqbmdJZj1cImljb25cIiBjbGFzcz1cInBvLWZpZWxkLWljb24tY29udGFpbmVyLWxlZnRcIj5cbiAgICAgIDxwby1pY29uIGNsYXNzPVwicG8tZmllbGQtaWNvbiBwby1pY29uLWlucHV0XCIgW2NsYXNzLnBvLWZpZWxkLWljb24tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcC1pY29uXT1cImljb25cIj48L3BvLWljb24+XG4gICAgPC9kaXY+XG5cbiAgICA8aW5wdXRcbiAgICAgICNpbnBcbiAgICAgIGNsYXNzPVwicG8tY29tYm8taW5wdXRcIlxuICAgICAgW25nQ2xhc3NdPVwiY2xlYW4gJiYgaW5wLnZhbHVlID8gJ3BvLWlucHV0LWRvdWJsZS1pY29uLXJpZ2h0JyA6ICdwby1pbnB1dC1pY29uLXJpZ2h0J1wiXG4gICAgICBbY2xhc3MucG8taW5wdXQtaWNvbi1sZWZ0XT1cImljb25cIlxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2lkXT1cImlkXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJkaXNhYmxlZCA/ICcnIDogcGxhY2Vob2xkZXJcIlxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVDb21ib1Zpc2liaWxpdHkoKVwiXG4gICAgICAoa2V5dXApPVwib25LZXlVcCgkZXZlbnQpXCJcbiAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgIChrZXl1cCk9XCJzZWFyY2hPbkVudGVyT3JBcnJvdygkZXZlbnQsICRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAvPlxuXG4gICAgPGRpdiBjbGFzcz1cInBvLWZpZWxkLWljb24tY29udGFpbmVyLXJpZ2h0XCI+XG4gICAgICA8cG8tY2xlYW5cbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGl0ZXJhbHMuY2xlYW5cIlxuICAgICAgICBjbGFzcz1cInBvLWNvbWJvLWNsZWFuIHBvLWljb24taW5wdXRcIlxuICAgICAgICAqbmdJZj1cImNsZWFuICYmICFkaXNhYmxlZCAmJiBpbnAudmFsdWVcIlxuICAgICAgICBbcC1lbGVtZW50LXJlZl09XCJpbnB1dEVsXCJcbiAgICAgICAgKHAtY2hhbmdlLWV2ZW50KT1cImNsZWFyKCRldmVudClcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXIobnVsbCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xlYXJBbmRGb2N1cygpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICA+XG4gICAgICA8L3BvLWNsZWFuPlxuXG4gICAgICA8ZGl2XG4gICAgICAgICNpY29uQXJyb3dcbiAgICAgICAgY2xhc3M9XCJwby1jb21iby1hcnJvdyBwby1maWVsZC1pY29uXCJcbiAgICAgICAgW2NsYXNzLnBvLWZpZWxkLWljb24tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29tYm9WaXNpYmlsaXR5KHRydWUpXCJcbiAgICAgID5cbiAgICAgICAgPHBvLWljb25cbiAgICAgICAgICBbcC1pY29uXT1cImNvbWJvT3BlbiA/ICdJQ09OX0FSUk9XX1VQIHBvLWljb24taW5wdXQnIDogJ0lDT05fQVJST1dfRE9XTiBwby1pY29uLWlucHV0J1wiXG4gICAgICAgICAgW2NsYXNzLnBvLWZpZWxkLWljb25dPVwiIWRpc2FibGVkXCJcbiAgICAgICAgICBbY2xhc3MucG8tY29tYm8tZGVmYXVsdC1ib3JkZXJdPVwiIWRpc2FibGVkICYmIGlucC52YWx1ZVwiXG4gICAgICAgICAgW2NsYXNzLnBvLWNvbWJvLWJhY2tncm91bmQtYXJyb3ctdXBdPVwiIWRpc2FibGVkICYmIGNvbWJvT3BlblwiXG4gICAgICAgID48L3BvLWljb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFwcGVuZEJveDsgdGhlbiBkcm9wZG93bkNESzsgZWxzZSBkcm9wZG93bkRlZmF1bHRcIj4gPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNkcm9wZG93bkRlZmF1bHQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duTGlzdGJveFwiPiA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duQ0RLPlxuICAgIDxuZy10ZW1wbGF0ZSBjZGtDb25uZWN0ZWRPdmVybGF5IFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIiBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwidHJ1ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duTGlzdGJveFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPHBvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20gW3AtaGVscF09XCJoZWxwXCIgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj48L3BvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20+XG48L3BvLWZpZWxkLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNkcm9wZG93bkxpc3Rib3g+XG4gIDxkaXYgI2NvbnRhaW5lckVsZW1lbnQgY2xhc3M9XCJwby1jb21iby1jb250YWluZXJcIiBbaGlkZGVuXT1cIiFjb21ib09wZW4gJiYgIWlzU2VydmVyU2VhcmNoaW5nXCI+XG4gICAgPHBvLWxpc3Rib3hcbiAgICAgICNwb0xpc3Rib3hcbiAgICAgICNjb250ZW50RWxlbWVudFxuICAgICAgcC10eXBlPVwib3B0aW9uXCJcbiAgICAgIFtwLWl0ZW1zXT1cInZpc2libGVPcHRpb25zXCJcbiAgICAgIFtwLWZpZWxkLXZhbHVlXT1cImR5bmFtaWNWYWx1ZVwiXG4gICAgICBbcC1maWVsZC1sYWJlbF09XCJkeW5hbWljTGFiZWxcIlxuICAgICAgW3AtdGVtcGxhdGVdPVwiY29tYm9PcHRpb25UZW1wbGF0ZVwiXG4gICAgICBbcC1zZWFyY2gtdmFsdWVdPVwiZ2V0SW5wdXRWYWx1ZSgpXCJcbiAgICAgIFtwLWluZmluaXRlLWxvYWRpbmddPVwiaW5maW5pdGVMb2FkaW5nXCJcbiAgICAgIFtwLWluZmluaXRlLXNjcm9sbF09XCJpbmZpbml0ZVNjcm9sbFwiXG4gICAgICBbcC1maWx0ZXJpbmddPVwiaXNGaWx0ZXJpbmdcIlxuICAgICAgW3AtY2FjaGVdPVwiY2FjaGVcIlxuICAgICAgKHAtc2VsZWN0Y29tYm8taXRlbSk9XCJvbk9wdGlvbkNsaWNrKCRldmVudCwgJGV2ZW50LmV2ZW50KVwiXG4gICAgICBbcC1maWx0ZXItbW9kZV09XCJmaWx0ZXJNb2RlXCJcbiAgICAgIFtwLXZpc2libGVdPVwiY29tYm9PcGVuXCJcbiAgICAgIFtwLWlzLXNlYXJjaGluZ109XCJpc1NlcnZlclNlYXJjaGluZ1wiXG4gICAgICBbcC1zaG91bGQtbWFyay1sZXR0ZXJdPVwic2hvdWxkTWFya0xldHRlcnNcIlxuICAgICAgW3AtY29tcGFyZS1jYWNoZV09XCJjb21wYXJlT2JqZWN0cyhjYWNoZU9wdGlvbnMsIHZpc2libGVPcHRpb25zKVwiXG4gICAgICBbcC1jb21iby1zZXJ2aWNlXT1cInNlcnZpY2VcIlxuICAgICAgW3AtaW5maW5pdGUtc2Nyb2xsLWRpc3RhbmNlXT1cImluZmluaXRlU2Nyb2xsRGlzdGFuY2VcIlxuICAgICAgKHAtdXBkYXRlLWluZmluaXRlLXNjcm9sbCk9XCJzaG93TW9yZUluZmluaXRlU2Nyb2xsKClcIlxuICAgICAgKHAtY2xvc2UpPVwib25DbG9zZUNvbWJvKClcIlxuICAgID48L3BvLWxpc3Rib3g+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
736
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWNvbWJvL3BvLWNvbWJvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1jb21iby9wby1jb21iby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFVBQVUsRUFNVixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtRUFBbUUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHakUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDL0csT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDbkJyQywrQkFBdUQ7SUFDckQsOEJBSVc7SUFDYixpQkFBTTs7O0lBSEYsY0FBeUM7SUFBekMs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LFVBQVUsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUM7d0JBQy9DLEtBQUssRUFBRSxJQUFJO3FCQUNaO29CQUNEO3dCQUNFLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQzt3QkFDL0MsS0FBSyxFQUFFLElBQUk7cUJBQ1o7aUJBQ0Y7Mk9BRytELG1CQUFtQjtrQkFBbEYsWUFBWTttQkFBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDVixjQUFjO2tCQUFqRSxTQUFTO21CQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNHLGdCQUFnQjtrQkFBcEUsU0FBUzttQkFBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDQSxjQUFjO2tCQUFoRSxTQUFTO21CQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNXLFdBQVc7a0JBQXRFLFNBQVM7bUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQ0osT0FBTztrQkFBNUQsU0FBUzttQkFBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDNUIsU0FBUztrQkFBaEMsU0FBUzttQkFBQyxXQUFXOztrRkFQWCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tY29udHJvbC1wb3NpdGlvbi9wby1jb250cm9sLXBvc2l0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9LZXlDb2RlRW51bSB9IGZyb20gJy4vLi4vLi4vLi4vZW51bXMvcG8ta2V5LWNvZGUuZW51bSc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQb0NvbWJvQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tY29tYm8tYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9Db21ib0ZpbHRlclNlcnZpY2UgfSBmcm9tICcuL3BvLWNvbWJvLWZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBvQ29tYm9Hcm91cCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1ncm91cC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib09wdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1vcHRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9PcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vcG8tY29tYm8tb3B0aW9uLXRlbXBsYXRlL3BvLWNvbWJvLW9wdGlvbi10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9MaXN0Qm94Q29tcG9uZW50IH0gZnJvbSAnLi8uLi8uLi9wby1saXN0Ym94L3BvLWxpc3Rib3guY29tcG9uZW50JztcblxuY29uc3QgcG9Db21ib0NvbnRhaW5lck9mZnNldCA9IDg7XG5jb25zdCBwb0NvbWJvQ29udGFpbmVyUG9zaXRpb25EZWZhdWx0ID0gJ2JvdHRvbSc7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvQ29tYm9CYXNlQ29tcG9uZW50XG4gKlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWJhc2ljXCIgdGl0bGU9XCJQTyBDb21ibyBCYXNpY1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWJhc2ljL3NhbXBsZS1wby1jb21iby1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tYmFzaWMvc2FtcGxlLXBvLWNvbWJvLWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWxhYnNcIiB0aXRsZT1cIlBPIENvbWJvIExhYnNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1sYWJzL3NhbXBsZS1wby1jb21iby1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1sYWJzL3NhbXBsZS1wby1jb21iby1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLXNjaGVkdWxpbmdcIiB0aXRsZT1cIlBPIENvbWJvIC0gU2NoZWR1bGluZ1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcvc2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcvc2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1zY2hlZHVsaW5nL3NhbXBsZS1wby1jb21iby1zY2hlZHVsaW5nLnNlcnZpY2UudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby10cmFuc2ZlclwiIHRpdGxlPVwiUE8gQ29tYm8gLSBCYW5raW5nIFRyYW5zZmVyXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tdHJhbnNmZXIvc2FtcGxlLXBvLWNvbWJvLXRyYW5zZmVyLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby10cmFuc2Zlci9zYW1wbGUtcG8tY29tYm8tdHJhbnNmZXIuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8taGVyb2VzXCIgdGl0bGU9XCJQTyBDb21ibyAtIEhlcm9lc1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhlcm9lcy9zYW1wbGUtcG8tY29tYm8taGVyb2VzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1oZXJvZXMvc2FtcGxlLXBvLWNvbWJvLWhlcm9lcy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby1oZXJvZXMtcmVhY3RpdmUtZm9ybVwiIHRpdGxlPVwiUE8gQ29tYm8gLSBIZXJvZXMgUmVhY3RpdmUgRm9ybVwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhlcm9lcy1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1jb21iby1oZXJvZXMtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taGVyb2VzLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWNvbWJvLWhlcm9lcy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWluZmluaXR5LXNjcm9sbFwiIHRpdGxlPVwiUE8gQ29tYm8gLSBJbmlmaXR5IFNjcm9sbFwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWluZmluaXR5LXNjcm9sbC9zYW1wbGUtcG8tY29tYm8taW5maW5pdHktc2Nyb2xsLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1pbmZpbml0eS1zY3JvbGwvc2FtcGxlLXBvLWNvbWJvLWluZmluaXR5LXNjcm9sbC5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby1ob3RlbHNcIiB0aXRsZT1cIlBPIENvbWJvIC0gQm9va2luZyBIb3RlbFwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhvdGVscy9zYW1wbGUtcG8tY29tYm8taG90ZWxzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1ob3RlbHMvc2FtcGxlLXBvLWNvbWJvLWhvdGVscy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1jb21ibycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1jb21iby5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBQb0NvbWJvRmlsdGVyU2VydmljZSxcbiAgICBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0NvbWJvQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9Db21ib0NvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQb0NvbWJvQ29tcG9uZW50IGV4dGVuZHMgUG9Db21ib0Jhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBDb250ZW50Q2hpbGQoUG9Db21ib09wdGlvblRlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb21ib09wdGlvblRlbXBsYXRlOiBQb0NvbWJvT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGQoJ291dGVyQ29udGFpbmVyICcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBvdXRlckNvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyRWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBjb250YWluZXJFbGVtZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb250ZW50RWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBjb250ZW50RWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnaWNvbkFycm93JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgaWNvbkVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2lucCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGlucHV0RWw6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvTGlzdGJveCcpIHBvTGlzdGJveDogUG9MaXN0Qm94Q29tcG9uZW50O1xuXG4gIGNvbWJvSWNvbjogc3RyaW5nID0gJ0lDT05fQVJST1dfRE9XTic7XG4gIGNvbWJvT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBkaWZmZXI6IGFueTtcbiAgaWQgPSBgcG8tY29tYm9bJHt1dWlkKCl9XWA7XG4gIGlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2Nyb2xsVG9wID0gMDtcbiAgc2hvdWxkTWFya0xldHRlcnM6IGJvb2xlYW4gPSB0cnVlO1xuICBpbmZpbml0ZUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29udGFpbmVyV2lkdGg6IG51bWJlcjtcblxuICBwcml2YXRlIF9pc1NlcnZlclNlYXJjaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3RLZXk7XG5cbiAgcHJpdmF0ZSBjbGlja291dExpc3RlbmVyOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGV2ZW50UmVzaXplTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBmaWx0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBnZXRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvblNjcm9sbEV2ZW50OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICBwdWJsaWMgZGVmYXVsdFNlcnZpY2U6IFBvQ29tYm9GaWx0ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgY29udHJvbFBvc2l0aW9uOiBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZVxuICApIHtcbiAgICBzdXBlcihsYW5ndWFnZVNlcnZpY2UpO1xuXG4gICAgdGhpcy5kaWZmZXIgPSBkaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIHNldCBpc1NlcnZlclNlYXJjaGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5faXNTZXJ2ZXJTZWFyY2hpbmcgPSB2YWx1ZTtcblxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIHRoaXMuc2V0Q29udGFpbmVyUG9zaXRpb24oKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pc1NlcnZlclNlYXJjaGluZyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc1NlcnZlclNlYXJjaGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTZXJ2ZXJTZWFyY2hpbmc7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRDb250YWluZXJXaWR0aCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmRlYm91bmNlVGltZSkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUtleXVwT2JzZXJ2YWJsZSgpO1xuICAgICAgdGhpcy5pbml0SW5wdXRPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuZmlsdGVyU2VydmljZSkge1xuICAgICAgdGhpcy5jb25maWdBZnRlclNldEZpbHRlclNlcnZpY2UodGhpcy5maWx0ZXJTZXJ2aWNlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZpbHRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdldFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25TY3JvbGxFdmVudD8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRnVuw6fDo28gcXVlIGF0cmlidWkgZm9jbyBhbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBQYXJhIHV0aWxpesOhLWxhIMOpIG5lY2Vzc8OhcmlvIHRlciBhIGluc3TDom5jaWEgZG8gY29tcG9uZW50ZSBubyBET00sIHBvZGVuZG8gc2VyIHV0aWxpemFkbyBvIFZpZXdDaGlsZCBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICogYGBgXG4gICAqIGltcG9ydCB7IFBvQ29tYm9Db21wb25lbnQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiBAVmlld0NoaWxkKFBvQ29tYm9Db21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGNvbWJvOiBQb0NvbWJvQ29tcG9uZW50O1xuICAgKlxuICAgKiBmb2N1c0NvbWJvKCkge1xuICAgKiAgIHRoaXMuY29tYm8uZm9jdXMoKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5vbk1vZGVsVG91Y2hlZD8uKCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ/OiBhbnkpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXlDb2RlO1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYga2V5ID09PSBQb0tleUNvZGVFbnVtLnRhYikge1xuICAgICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBidXNjYSB1bSByZWdpc3RybyBxdWFuZG8gYWNpb25hciBvIHRhYlxuICAgIGlmICh0aGlzLnNlcnZpY2UgJiYga2V5ID09PSBQb0tleUNvZGVFbnVtLnRhYiAmJiBpbnB1dFZhbHVlICYmICF0aGlzLmRpc2FibGVkVGFiRmlsdGVyKSB7XG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlWYWx1ZShpbnB1dFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBQb0tleUNvZGVFbnVtLmFycm93RG93bikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmICh0aGlzLnZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZvY3VzSXRlbSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSk7XG4gICAgICB0aGlzLmlzRmlsdGVyaW5nID0gdGhpcy5jaGFuZ2VPbkVudGVyID8gdGhpcy5pc0ZpbHRlcmluZyA6IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRlY2xhIFwiZW50ZXJcIlxuICAgIGlmIChrZXkgPT09IFBvS2V5Q29kZUVudW0uZW50ZXIgJiYgdGhpcy5zZWxlY3RlZFZpZXcgJiYgdGhpcy5jb21ib09wZW4pIHtcbiAgICAgIGNvbnN0IGlzVXBkYXRlTW9kZWwgPSB0aGlzLnNlbGVjdGVkVmlldy52YWx1ZSAhPT0gdGhpcy5zZWxlY3RlZFZhbHVlIHx8IGlucHV0VmFsdWUgIT09IHRoaXMuc2VsZWN0ZWRWaWV3LmxhYmVsO1xuXG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUodGhpcy5zZWxlY3RlZFZpZXcsIGlzVXBkYXRlTW9kZWwpO1xuICAgICAgdGhpcy5pc0ZpbHRlcmluZyA9IGZhbHNlO1xuXG4gICAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbLi4udGhpcy5jYWNoZVN0YXRpY09wdGlvbnNdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBQb0tleUNvZGVFbnVtLmVudGVyKSB7XG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gUG9LZXlDb2RlRW51bS5lc2MpIHtcbiAgICAgIGlmIChrZXkgPT09IHRoaXMubGFzdEtleSkge1xuICAgICAgICB0aGlzLmxhc3RLZXkgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJBbmRGb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25DbG9zZUNvbWJvKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0S2V5ID0gZXZlbnQua2V5Q29kZTtcbiAgfVxuXG4gIG9uS2V5VXAoZXZlbnQ/OiBhbnkpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoO1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICBjb25zdCBpc1ZhbGlkS2V5ID1cbiAgICAgIGtleSAhPT0gUG9LZXlDb2RlRW51bS5hcnJvd1VwICYmXG4gICAgICBrZXkgIT09IFBvS2V5Q29kZUVudW0uYXJyb3dEb3duICYmXG4gICAgICBrZXkgIT09IFBvS2V5Q29kZUVudW0uZW50ZXIgJiZcbiAgICAgIGtleSAhPT0gUG9LZXlDb2RlRW51bS5lc2MgJiZcbiAgICAgIGtleSAhPT0gUG9LZXlDb2RlRW51bS50YWI7XG5cbiAgICBpZiAoaXNWYWxpZEtleSkge1xuICAgICAgaWYgKGlucHV0VmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UgJiYgdGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlICE9PSBpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zaG91bGRNYXJrTGV0dGVycyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0ZpbHRlcmluZyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JMYWJlbChpbnB1dFZhbHVlLCB0aGlzLmNvbWJvT3B0aW9uc0xpc3QsIHRoaXMuZmlsdGVyTW9kZSk7XG4gICAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KGlucHV0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBxdWFuZG8gYXBhZ2FyIHJhcGlkbyBvIGNhbXBvIGUgY29udGVyIHNlcnZpw6dvLCB2YWxvciwgbsOjbyBkaXNwYXJhdmEgbyBrZXl1cCBvYnNlcnZhYmxlXG4gICAgICAgIC8vIG5lY2Vzc2FyaW8gZXN0ZSB0cmF0YW1lbnRvIHBhcmEgcmV0b3JuYXIgYSBsaXN0YSAnZGVmYXVsdCcuXG4gICAgICAgIGNvbnN0IHVzZURlZmF1bHRPcHRpb25zU2VydmljZSA9XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZSAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uLmxhYmVsID09PSB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWU7XG5cbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwpO1xuXG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1c2VEZWZhdWx0T3B0aW9uc1NlcnZpY2UpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbLi4udGhpcy5jYWNoZU9wdGlvbnNdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gY2FzbyBvIHZhbG9yIHBlc3F1aXNhZG8gZm9yIGRpZmVyZW50ZSBkbyBhbnRlcmlvciBkZXZlIGFicmlyIG8gY29tYm9cbiAgICAgIGlmICh0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgIT09IGlucHV0VmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSA9IGlucHV0VmFsdWU7XG4gIH1cblxuICBpbml0SW5wdXRPYnNlcnZhYmxlKCkge1xuICAgIGlmICh0aGlzLnNlcnZpY2UpIHtcbiAgICAgIGNvbnN0IGtleXVwT2JzZXJ2YWJsZSA9IGZyb21FdmVudCh0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudCwgJ2tleXVwJykucGlwZShcbiAgICAgICAgZmlsdGVyKChlOiBhbnkpID0+IHRoaXMuaXNWYWxpZENoYXJhY3RlclRvU2VhcmNoKGUua2V5Q29kZSkpLFxuICAgICAgICBtYXAoKGU6IGFueSkgPT4gZS5jdXJyZW50VGFyZ2V0LnZhbHVlKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3VsZE1hcmtMZXR0ZXJzID0gZmFsc2U7XG4gICAgICAgIH0pLFxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpXG4gICAgICApO1xuXG4gICAgICB0aGlzLmtleXVwU3Vic2NyaWJlID0ga2V5dXBPYnNlcnZhYmxlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPj0gdGhpcy5maWx0ZXJNaW5sZW5ndGggfHwgIXZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5jb250cm9sQXBwbHlGaWx0ZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb250cm9sQXBwbHlGaWx0ZXIodmFsdWUsIGlzQXJyb3dEb3duPzogYm9vbGVhbikge1xuICAgIGlmIChcbiAgICAgICghdGhpcy5pc1Byb2Nlc3NpbmdWYWx1ZUJ5VGFiICYmICghdGhpcy5zZWxlY3RlZE9wdGlvbiB8fCB2YWx1ZSAhPT0gdGhpcy5zZWxlY3RlZE9wdGlvblt0aGlzLmR5bmFtaWNMYWJlbF0pKSB8fFxuICAgICAgIXRoaXMuY2FjaGVcbiAgICApIHtcbiAgICAgIHRoaXMuZGVmYXVsdFNlcnZpY2UuaGFzTmV4dCA9IHRydWU7XG4gICAgICB0aGlzLnBhZ2UgPSB0aGlzLnNldFBhZ2UoKTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcih2YWx1ZSwgdHJ1ZSwgaXNBcnJvd0Rvd24pO1xuICAgIH1cbiAgICB0aGlzLmlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWIgPSBmYWxzZTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKHZhbHVlOiBzdHJpbmcsIHJlc2V0OiBib29sZWFuID0gZmFsc2UsIGlzQXJyb3dEb3duPzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmRlZmF1bHRTZXJ2aWNlLmhhc05leHQpIHtcbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eShmYWxzZSwgcmVzZXQpO1xuICAgICAgdGhpcy5pc1NlcnZlclNlYXJjaGluZyA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5pbmZpbml0ZVNjcm9sbFxuICAgICAgICA/IHsgcHJvcGVydHk6IHRoaXMuZmllbGRMYWJlbCwgdmFsdWUsIHBhZ2U6IHRoaXMucGFnZSwgcGFnZVNpemU6IHRoaXMucGFnZVNpemUgfVxuICAgICAgICA6IHsgcHJvcGVydHk6IHRoaXMuZmllbGRMYWJlbCwgdmFsdWUgfTtcblxuICAgICAgdGhpcy5maWx0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLnNlcnZpY2UuZ2V0RmlsdGVyZWREYXRhKHBhcmFtLCB0aGlzLmZpbHRlclBhcmFtcykuc3Vic2NyaWJlKFxuICAgICAgICBpdGVtcyA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRPcHRpb25zQnlBcHBseUZpbHRlcih2YWx1ZSwgaXRlbXMsIHJlc2V0KTtcbiAgICAgICAgICBpZiAoaXNBcnJvd0Rvd24pIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB0aGlzLm9uRXJyb3JGaWx0ZXJlZERhdGEoKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzZXRPcHRpb25zQnlBcHBseUZpbHRlcih2YWx1ZSwgaXRlbXMsIHJlc2V0OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnNob3VsZE1hcmtMZXR0ZXJzID0gdHJ1ZTtcbiAgICB0aGlzLmlzU2VydmVyU2VhcmNoaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pbmZpbml0ZUxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnByZXBhcmVPcHRpb25zKGl0ZW1zKTtcblxuICAgIHRoaXMuc2VhcmNoRm9yTGFiZWwodmFsdWUsIGl0ZW1zLCB0aGlzLmZpbHRlck1vZGUpO1xuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSwgcmVzZXQpO1xuXG4gICAgaWYgKHRoaXMuaXNGaXJzdEZpbHRlcikge1xuICAgICAgdGhpcy5pc0ZpcnN0RmlsdGVyID0gIXRoaXMuaXNGaXJzdEZpbHRlcjtcblxuICAgICAgdGhpcy5jYWNoZU9wdGlvbnMgPSB0aGlzLmNvbWJvT3B0aW9uc0xpc3Q7XG4gICAgfVxuICB9XG5cbiAgZ2V0T2JqZWN0QnlWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUgIT09IHZhbHVlICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24/Llt0aGlzLmR5bmFtaWNMYWJlbF0gIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWIgPSB0cnVlO1xuXG4gICAgICB0aGlzLmdldFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZS5nZXRPYmplY3RCeVZhbHVlKHZhbHVlLCB0aGlzLmZpbHRlclBhcmFtcykuc3Vic2NyaWJlKFxuICAgICAgICBpdGVtID0+IHRoaXMudXBkYXRlT3B0aW9uQnlGaWx0ZXJlZFZhbHVlKGl0ZW0pLFxuICAgICAgICBlcnJvciA9PiB0aGlzLm9uRXJyb3JHZXRPYmplY3RCeVZhbHVlKClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlT3B0aW9uQnlGaWx0ZXJlZFZhbHVlKGl0ZW0pIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgdGhpcy5vcHRpb25zID0gW2l0ZW1dO1xuICAgICAgdGhpcy5vbk9wdGlvbkNsaWNrKGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUobnVsbCk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWIgPSBmYWxzZTtcbiAgICB9LCB0aGlzLmRlYm91bmNlVGltZSk7XG4gIH1cblxuICBzZXRTaG91bGRBcHBseUZvY3VzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG91bGRBcHBseUZvY3VzID0gdmFsdWU7XG4gIH1cblxuICB0b2dnbGVDb21ib1Zpc2liaWxpdHkoaXNCdXR0b24/OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNob3VsZEFwcGx5Rm9jdXModHJ1ZSk7XG5cbiAgICBpZiAodGhpcy5zZXJ2aWNlICYmICF0aGlzLmRpc2FibGVkSW5pdEZpbHRlcikge1xuICAgICAgdGhpcy5hcHBseUZpbHRlckluRmlyc3RDbGljaygpO1xuICAgIH1cblxuICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eSghdGhpcy5jb21ib09wZW4sIGZhbHNlLCBpc0J1dHRvbik7XG4gIH1cblxuICBhcHBseUZpbHRlckluRmlyc3RDbGljaygpIHtcbiAgICBpZiAodGhpcy5pc0ZpcnN0RmlsdGVyICYmICF0aGlzLnNlbGVjdGVkVmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgICAgY29uc3Qgc2Nyb2xsaW5nQ29udHJvbCA9IHRoaXMuc2V0U2Nyb2xsaW5nQ29udHJvbCgpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcignJywgc2Nyb2xsaW5nQ29udHJvbCk7XG4gICAgfVxuICB9XG5cbiAgY29udHJvbENvbWJvVmlzaWJpbGl0eSh0b09wZW46IGJvb2xlYW4sIHJlc2V0OiBib29sZWFuID0gZmFsc2UsIGlzQnV0dG9uPzogYm9vbGVhbikge1xuICAgIHRvT3BlbiA/IHRoaXMub3BlbihyZXNldCwgaXNCdXR0b24pIDogdGhpcy5jbG9zZShyZXNldCk7XG4gIH1cblxuICBvbkNsb3NlQ29tYm8oKSB7XG4gICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KGZhbHNlKTtcbiAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25PcHRpb25DbGljayhvcHRpb246IFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXAsIGV2ZW50PzogYW55KSB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IHRoaXMuZ2V0SW5wdXRWYWx1ZSgpO1xuICAgIGNvbnN0IGlzVXBkYXRlTW9kZWwgPVxuICAgICAgb3B0aW9uW3RoaXMuZHluYW1pY1ZhbHVlXSAhPT0gdGhpcy5zZWxlY3RlZFZhbHVlIHx8XG4gICAgICAhISh0aGlzLnNlbGVjdGVkVmlldyAmJiBpbnB1dFZhbHVlICE9PSB0aGlzLnNlbGVjdGVkVmlld1t0aGlzLmR5bmFtaWNMYWJlbF0pO1xuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUob3B0aW9uLCBpc1VwZGF0ZU1vZGVsKTtcbiAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbLi4udGhpcy5jYWNoZVN0YXRpY09wdGlvbnNdKTtcbiAgICB9XG5cbiAgICB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmlld1t0aGlzLmR5bmFtaWNMYWJlbF07XG5cbiAgICBpZiAodGhpcy5zaG91bGRBcHBseUZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZVNjcm9sbFRvcChzZWxlY3RlZEl0ZW0sIGluZGV4KSB7XG4gICAgaWYgKCFzZWxlY3RlZEl0ZW0ubGVuZ3RoIHx8IGluZGV4IDw9IDEpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtWzBdLm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICBjbGVhbkxpc3Rib3goKSB7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwpO1xuICAgIHRoaXMub3B0aW9ucy5tYXAob3B0aW9uID0+IChvcHRpb24uc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICB9XG5cbiAgZ2V0SW5wdXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBzZXRJbnB1dFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLmNsZWFuTGlzdGJveCgpO1xuICAgIH1cbiAgfVxuXG4gIHdhc0NsaWNrZWRPblRvZ2dsZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29tYm9PcGVuICYmXG4gICAgICAhdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaWNvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAoIXRoaXMuY29udGVudEVsZW1lbnQgfHwgIXRoaXMuY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKVxuICAgICkge1xuICAgICAgLy8gRXNjb25kZSBDb250ZW50IGRvIENvbWJvIHF1YW5kbyBmb3IgY2xpY2FkbyBmb3JhXG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuXG4gICAgICB0aGlzLnZlcmlmeVZhbGlkT3B0aW9uKCk7XG5cbiAgICAgIC8vIGNhc28gZm9yIGNoYW5nZU9uRW50ZXIgZGV2ZSBsaW1wYXIgbyBzZWxlY3RlZFZpZXcgcGFyYSByZWluaWNpYS1sb1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSB0aGlzLmNoYW5nZU9uRW50ZXIgJiYgIXRoaXMuc2VsZWN0ZWRWYWx1ZSA/IHVuZGVmaW5lZCA6IHRoaXMuc2VsZWN0ZWRWaWV3O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZXJ2aWNlICYmICF0aGlzLmdldElucHV0VmFsdWUoKSAmJiAhdGhpcy5pc0ZpcnN0RmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGluZ0NvbnRyb2wgPSB0aGlzLnNldFNjcm9sbGluZ0NvbnRyb2woKTtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcignJywgc2Nyb2xsaW5nQ29udHJvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZENoYXJhY3RlclRvU2VhcmNoKGtleUNvZGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAga2V5Q29kZSAhPT0gOSAmJiAvLyB0YWJcbiAgICAgIGtleUNvZGUgIT09IDEzICYmIC8vIGVudGV0XG4gICAgICBrZXlDb2RlICE9PSAxNiAmJiAvLyBzaGlmdFxuICAgICAga2V5Q29kZSAhPT0gMTcgJiYgLy8gY3RybFxuICAgICAga2V5Q29kZSAhPT0gMTggJiYgLy8gYWx0XG4gICAgICBrZXlDb2RlICE9PSAyMCAmJiAvLyBjYXBzbG9ja1xuICAgICAga2V5Q29kZSAhPT0gMjcgJiYgLy8gZXNjXG4gICAgICBrZXlDb2RlICE9PSAzNyAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSAzOCAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSAzOSAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSA0MCAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSA5M1xuICAgICk7IC8vIHdpbmRvd3MgbWVudVxuICB9XG5cbiAgc2VhcmNoT25FbnRlck9yQXJyb3coZXZlbnQsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpICYmXG4gICAgICB0aGlzLnNlcnZpY2UgJiZcbiAgICAgICF0aGlzLnNlbGVjdGVkVmlldyAmJlxuICAgICAgdmFsdWUubGVuZ3RoID49IHRoaXMuZmlsdGVyTWlubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRyb2xBcHBseUZpbHRlcih2YWx1ZSwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyk7XG4gICAgfVxuICB9XG5cbiAgc2hvd01vcmVJbmZpbml0ZVNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0U2VydmljZS5oYXNOZXh0KSB7XG4gICAgICB0aGlzLmluZmluaXRlTG9hZGluZyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMucGFnZSsrO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIoJycsIHRydWUpO1xuICB9XG5cbiAgY2xlYXJBbmRGb2N1cygpIHtcbiAgICB0aGlzLmNsZWFyKG51bGwpO1xuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIGFkanVzdENvbnRhaW5lclBvc2l0aW9uKCkge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ29tYm9Db250YWluZXJQb3NpdGlvbkRlZmF1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZShyZXNldDogYm9vbGVhbikge1xuICAgIHRoaXMuY29tYm9PcGVuID0gZmFsc2U7XG5cbiAgICBpZiAoIXJlc2V0KSB7XG4gICAgICBpZiAoIXRoaXMuZ2V0SW5wdXRWYWx1ZSgpKSB7XG4gICAgICAgIHRoaXMucGFnZSA9IHRoaXMuc2V0UGFnZSgpO1xuICAgICAgICB0aGlzLmRlZmF1bHRTZXJ2aWNlLmhhc05leHQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5zZXRPcHRpb25zKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmNvbWJvSWNvbiA9ICdJQ09OX0FSUk9XX0RPV04nO1xuXG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcblxuICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQsICdwby1jb21iby1pbnB1dC1mb2N1cycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGlzdGVuZXJzKCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG5cbiAgICB0aGlzLmNsaWNrb3V0TGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMud2FzQ2xpY2tlZE9uVG9nZ2xlKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgKCkgPT4ge1xuICAgICAgLy8gdGltZW91dCBuZWNlc3NhcmlvIHBvaXMgYSBhbmltYcOnw6NvIGRvIHBvLW1lbnUgaW1wYWN0YSBubyBhanVzdGUgZGEgcG9zacOnw6NvIGRvIGNvbnRhaW5lci5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGp1c3RDb250YWluZXJQb3NpdGlvbigpLCAyNTApO1xuICAgIH0pO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkVycm9yR2V0T2JqZWN0QnlWYWx1ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZU9wdGlvbkJ5RmlsdGVyZWRWYWx1ZShudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TY3JvbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgdGhpcy5hZGp1c3RDb250YWluZXJQb3NpdGlvbigpO1xuICB9O1xuXG4gIHByaXZhdGUgb25FcnJvckZpbHRlcmVkRGF0YSgpIHtcbiAgICB0aGlzLmlzU2VydmVyU2VhcmNoaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbXSk7XG5cbiAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW4ocmVzZXQ6IGJvb2xlYW4sIGlzQnV0dG9uPzogYm9vbGVhbikge1xuICAgIHRoaXMuY29tYm9PcGVuID0gdHJ1ZTtcbiAgICBpZiAoIXJlc2V0ICYmIHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgIGlmICghdGhpcy5nZXRJbnB1dFZhbHVlKCkpIHtcbiAgICAgICAgdGhpcy5wYWdlID0gMTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuc2V0T3B0aW9ucygpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdGhpcy5jb21ib0ljb24gPSAnSUNPTl9BUlJPV19VUCc7XG5cbiAgICB0aGlzLmluaXRpYWxpemVMaXN0ZW5lcnMoKTtcblxuICAgIGlzQnV0dG9uXG4gICAgICA/IHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQsICdwby1jb21iby1pbnB1dC1mb2N1cycpXG4gICAgICA6IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cbiAgICB0aGlzLnNldENvbnRhaW5lclBvc2l0aW9uKCk7XG4gICAgaWYgKHRoaXMuY29tYm9PcGVuKSB7XG4gICAgICB0aGlzLnNldENvbnRhaW5lcldpZHRoKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuY2xpY2tvdXRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5jbGlja291dExpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb250YWluZXJQb3NpdGlvbigpIHtcbiAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5zZXRFbGVtZW50cyhcbiAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgcG9Db21ib0NvbnRhaW5lck9mZnNldCxcbiAgICAgIHRoaXMuaW5wdXRFbCxcbiAgICAgIFsndG9wJywgJ2JvdHRvbSddLFxuICAgICAgdHJ1ZVxuICAgICk7XG5cbiAgICB0aGlzLmFkanVzdENvbnRhaW5lclBvc2l0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbnRhaW5lcldpZHRoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm91dGVyQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gdGhpcy5vdXRlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnB1dFZhbHVlKCkgPyB0aGlzLm9wdGlvbnMgOiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZU9wdGlvbnMoaXRlbXMpIHtcbiAgICByZXR1cm4gdGhpcy5pbmZpbml0ZVNjcm9sbCA/IFsuLi50aGlzLm9wdGlvbnMsIC4uLml0ZW1zXSA6IGl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmluZmluaXRlU2Nyb2xsID8gMSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2Nyb2xsaW5nQ29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmZpbml0ZVNjcm9sbCA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNJdGVtKCkge1xuICAgIHRoaXMucG9MaXN0Ym94Py5saXN0Ym94SXRlbUxpc3Q/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxldCBpdGVtO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBpdGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBvLWxpc3Rib3gtaXRlbVthcmlhLXNlbGVjdGVkPVwidHJ1ZVwiXScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wby1saXN0Ym94LWl0ZW0nKVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIH1cbiAgICAgIHRoaXMucG9MaXN0Ym94Py5saXN0Ym94SXRlbUxpc3Q/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgaXRlbT8uZm9jdXMoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiAjb3V0ZXJDb250YWluZXI+XG4gIDxwby1maWVsZC1jb250YWluZXJcbiAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3AtaWRdPVwiaWRcIlxuICAgIFtwLWxhYmVsXT1cImxhYmVsXCJcbiAgICBbcC1vcHRpb25hbF09XCJvcHRpb25hbFwiXG4gICAgW3AtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFtwLXNob3ctcmVxdWlyZWRdPVwic2hvd1JlcXVpcmVkXCJcbiAgPlxuICAgIDxkaXYgY2RrT3ZlcmxheU9yaWdpbiAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIiBjbGFzcz1cInBvLWZpZWxkLWNvbnRhaW5lci1jb250ZW50IHBvLWNvbWJvLWNvbnRhaW5lci1jb250ZW50XCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaWNvblwiIGNsYXNzPVwicG8tZmllbGQtaWNvbi1jb250YWluZXItbGVmdFwiPlxuICAgICAgICA8cG8taWNvblxuICAgICAgICAgIGNsYXNzPVwicG8tZmllbGQtaWNvbiBwby1pY29uLWlucHV0XCJcbiAgICAgICAgICBbY2xhc3MucG8tZmllbGQtaWNvbi1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW3AtaWNvbl09XCJpY29uXCJcbiAgICAgICAgPjwvcG8taWNvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgI2lucFxuICAgICAgICBjbGFzcz1cInBvLWNvbWJvLWlucHV0XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiY2xlYW4gJiYgaW5wLnZhbHVlID8gJ3BvLWlucHV0LWRvdWJsZS1pY29uLXJpZ2h0JyA6ICdwby1pbnB1dC1pY29uLXJpZ2h0J1wiXG4gICAgICAgIFtjbGFzcy5wby1pbnB1dC1pY29uLWxlZnRdPVwiaWNvblwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRpc2FibGVkID8gJycgOiBwbGFjZWhvbGRlclwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21ib1Zpc2liaWxpdHkoKVwiXG4gICAgICAgIChrZXl1cCk9XCJvbktleVVwKCRldmVudClcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgIChrZXl1cCk9XCJzZWFyY2hPbkVudGVyT3JBcnJvdygkZXZlbnQsICRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiBjbGFzcz1cInBvLWZpZWxkLWljb24tY29udGFpbmVyLXJpZ2h0XCI+XG4gICAgICAgIDxwby1jbGVhblxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsaXRlcmFscy5jbGVhblwiXG4gICAgICAgICAgY2xhc3M9XCJwby1jb21iby1jbGVhbiBwby1pY29uLWlucHV0XCJcbiAgICAgICAgICAqbmdJZj1cImNsZWFuICYmICFkaXNhYmxlZCAmJiBpbnAudmFsdWVcIlxuICAgICAgICAgIFtwLWVsZW1lbnQtcmVmXT1cImlucHV0RWxcIlxuICAgICAgICAgIChwLWNoYW5nZS1ldmVudCk9XCJjbGVhcigkZXZlbnQpXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXIobnVsbCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbGVhckFuZEZvY3VzKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L3BvLWNsZWFuPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAjaWNvbkFycm93XG4gICAgICAgICAgY2xhc3M9XCJwby1jb21iby1hcnJvdyBwby1maWVsZC1pY29uXCJcbiAgICAgICAgICBbY2xhc3MucG8tZmllbGQtaWNvbi1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbWJvVmlzaWJpbGl0eSh0cnVlKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cG8taWNvblxuICAgICAgICAgICAgW3AtaWNvbl09XCJjb21ib09wZW4gPyAnSUNPTl9BUlJPV19VUCBwby1pY29uLWlucHV0JyA6ICdJQ09OX0FSUk9XX0RPV04gcG8taWNvbi1pbnB1dCdcIlxuICAgICAgICAgICAgW2NsYXNzLnBvLWZpZWxkLWljb25dPVwiIWRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5wby1jb21iby1kZWZhdWx0LWJvcmRlcl09XCIhZGlzYWJsZWQgJiYgaW5wLnZhbHVlXCJcbiAgICAgICAgICAgIFtjbGFzcy5wby1jb21iby1iYWNrZ3JvdW5kLWFycm93LXVwXT1cIiFkaXNhYmxlZCAmJiBjb21ib09wZW5cIlxuICAgICAgICAgID48L3BvLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXBwZW5kQm94OyB0aGVuIGRyb3Bkb3duQ0RLOyBlbHNlIGRyb3Bkb3duRGVmYXVsdFwiPiA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25EZWZhdWx0PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duTGlzdGJveFwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNkcm9wZG93bkNESz5cbiAgICAgIDxuZy10ZW1wbGF0ZSBjZGtDb25uZWN0ZWRPdmVybGF5IFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIiBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwidHJ1ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25MaXN0Ym94XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8cG8tZmllbGQtY29udGFpbmVyLWJvdHRvbSBbcC1oZWxwXT1cImhlbHBcIiBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPjwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbiAgPC9wby1maWVsZC1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNkcm9wZG93bkxpc3Rib3g+XG4gICAgPGRpdiAjY29udGFpbmVyRWxlbWVudCBjbGFzcz1cInBvLWNvbWJvLWNvbnRhaW5lclwiIFtoaWRkZW5dPVwiIWNvbWJvT3BlbiAmJiAhaXNTZXJ2ZXJTZWFyY2hpbmdcIj5cbiAgICAgIDxwby1saXN0Ym94XG4gICAgICAgICNwb0xpc3Rib3hcbiAgICAgICAgI2NvbnRlbnRFbGVtZW50XG4gICAgICAgIHAtdHlwZT1cIm9wdGlvblwiXG4gICAgICAgIFtwLWl0ZW1zXT1cInZpc2libGVPcHRpb25zXCJcbiAgICAgICAgW3AtZmllbGQtdmFsdWVdPVwiZHluYW1pY1ZhbHVlXCJcbiAgICAgICAgW3AtZmllbGQtbGFiZWxdPVwiZHluYW1pY0xhYmVsXCJcbiAgICAgICAgW3AtdGVtcGxhdGVdPVwiY29tYm9PcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgIFtwLXNlYXJjaC12YWx1ZV09XCJnZXRJbnB1dFZhbHVlKClcIlxuICAgICAgICBbcC1pbmZpbml0ZS1sb2FkaW5nXT1cImluZmluaXRlTG9hZGluZ1wiXG4gICAgICAgIFtwLWluZmluaXRlLXNjcm9sbF09XCJpbmZpbml0ZVNjcm9sbFwiXG4gICAgICAgIFtwLWZpbHRlcmluZ109XCJpc0ZpbHRlcmluZ1wiXG4gICAgICAgIFtwLWNhY2hlXT1cImNhY2hlXCJcbiAgICAgICAgKHAtc2VsZWN0Y29tYm8taXRlbSk9XCJvbk9wdGlvbkNsaWNrKCRldmVudCwgJGV2ZW50LmV2ZW50KVwiXG4gICAgICAgIFtwLWZpbHRlci1tb2RlXT1cImZpbHRlck1vZGVcIlxuICAgICAgICBbcC12aXNpYmxlXT1cImNvbWJvT3BlblwiXG4gICAgICAgIFtwLWlzLXNlYXJjaGluZ109XCJpc1NlcnZlclNlYXJjaGluZ1wiXG4gICAgICAgIFtwLXNob3VsZC1tYXJrLWxldHRlcl09XCJzaG91bGRNYXJrTGV0dGVyc1wiXG4gICAgICAgIFtwLWNvbXBhcmUtY2FjaGVdPVwiY29tcGFyZU9iamVjdHMoY2FjaGVPcHRpb25zLCB2aXNpYmxlT3B0aW9ucylcIlxuICAgICAgICBbcC1jb21iby1zZXJ2aWNlXT1cInNlcnZpY2VcIlxuICAgICAgICBbcC1pbmZpbml0ZS1zY3JvbGwtZGlzdGFuY2VdPVwiaW5maW5pdGVTY3JvbGxEaXN0YW5jZVwiXG4gICAgICAgIChwLXVwZGF0ZS1pbmZpbml0ZS1zY3JvbGwpPVwic2hvd01vcmVJbmZpbml0ZVNjcm9sbCgpXCJcbiAgICAgICAgKHAtY2xvc2UpPVwib25DbG9zZUNvbWJvKClcIlxuICAgICAgICBbcC1jb250YWluZXItd2lkdGhdPVwiY29udGFpbmVyV2lkdGhcIlxuICAgICAgPjwvcG8tbGlzdGJveD5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
|