carbon-components-angular 5.26.3 → 5.27.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/combobox/combobox.component.d.ts +5 -1
- package/docs/documentation/components/ComboBox.html +176 -131
- package/docs/documentation/components/Dropdown.html +154 -109
- package/docs/documentation/coverage.html +4 -4
- package/docs/documentation/js/search/search_index.js +2 -2
- package/docs/documentation/modules/CodeSnippetModule/dependencies.svg +4 -4
- package/docs/documentation/modules/CodeSnippetModule.html +4 -4
- package/docs/documentation/modules/ComboBoxModule/dependencies.svg +4 -4
- package/docs/documentation/modules/ComboBoxModule.html +4 -4
- package/docs/documentation/modules/ContentSwitcherModule/dependencies.svg +4 -4
- package/docs/documentation/modules/ContentSwitcherModule.html +4 -4
- package/docs/documentation/modules/DatePickerInputModule/dependencies.svg +20 -20
- package/docs/documentation/modules/DatePickerInputModule.html +20 -20
- package/docs/documentation/modules/DatePickerModule/dependencies.svg +50 -46
- package/docs/documentation/modules/DatePickerModule.html +50 -46
- package/docs/documentation/modules/FileUploaderModule/dependencies.svg +58 -58
- package/docs/documentation/modules/FileUploaderModule.html +58 -58
- package/docs/documentation/modules/NumberModule/dependencies.svg +4 -4
- package/docs/documentation/modules/NumberModule.html +4 -4
- package/docs/documentation/modules/PanelModule/dependencies.svg +36 -36
- package/docs/documentation/modules/PanelModule.html +36 -36
- package/docs/documentation/modules/RadioModule/dependencies.svg +43 -47
- package/docs/documentation/modules/RadioModule.html +43 -47
- package/docs/documentation/modules/SearchModule/dependencies.svg +4 -4
- package/docs/documentation/modules/SearchModule.html +4 -4
- package/docs/documentation/modules/SelectModule/dependencies.svg +34 -34
- package/docs/documentation/modules/SelectModule.html +34 -34
- package/docs/documentation/modules/SliderModule/dependencies.svg +4 -4
- package/docs/documentation/modules/SliderModule.html +4 -4
- package/docs/documentation/modules/TagModule/dependencies.svg +28 -28
- package/docs/documentation/modules/TagModule.html +28 -28
- package/docs/documentation/modules/ThemeModule/dependencies.svg +15 -15
- package/docs/documentation/modules/ThemeModule.html +15 -15
- package/docs/documentation/modules/TilesModule/dependencies.svg +98 -98
- package/docs/documentation/modules/TilesModule.html +98 -98
- package/docs/documentation/modules/TimePickerModule/dependencies.svg +45 -41
- package/docs/documentation/modules/TimePickerModule.html +45 -41
- package/docs/documentation/modules/TimePickerSelectModule/dependencies.svg +49 -45
- package/docs/documentation/modules/TimePickerSelectModule.html +49 -45
- package/docs/documentation/modules/ToggleModule/dependencies.svg +41 -37
- package/docs/documentation/modules/ToggleModule.html +41 -37
- package/docs/documentation/modules/ToggletipModule/dependencies.svg +37 -37
- package/docs/documentation/modules/ToggletipModule.html +37 -37
- package/docs/documentation/modules/TooltipModule/dependencies.svg +28 -28
- package/docs/documentation/modules/TooltipModule.html +28 -28
- package/docs/documentation/modules/TreeviewModule/dependencies.svg +34 -34
- package/docs/documentation/modules/TreeviewModule.html +34 -34
- package/docs/documentation.json +231 -200
- package/docs/storybook/3224.a6cd0578.iframe.bundle.js +1 -0
- package/docs/storybook/combobox-combobox-stories.92875119.iframe.bundle.js +1 -0
- package/docs/storybook/{dropdown-dropdown-stories.57d6428d.iframe.bundle.js → dropdown-dropdown-stories.eb5b6694.iframe.bundle.js} +1 -1
- package/docs/storybook/iframe.html +2 -2
- package/docs/storybook/main.19e797ce.iframe.bundle.js +1 -0
- package/docs/storybook/project.json +1 -1
- package/docs/storybook/{runtime~main.2319260a.iframe.bundle.js → runtime~main.8c077096.iframe.bundle.js} +1 -1
- package/dropdown/dropdown.component.d.ts +5 -1
- package/esm2020/combobox/combobox.component.mjs +16 -4
- package/esm2020/dropdown/dropdown.component.mjs +16 -4
- package/fesm2015/carbon-components-angular-combobox.mjs +15 -3
- package/fesm2015/carbon-components-angular-combobox.mjs.map +1 -1
- package/fesm2015/carbon-components-angular-dropdown.mjs +15 -3
- package/fesm2015/carbon-components-angular-dropdown.mjs.map +1 -1
- package/fesm2020/carbon-components-angular-combobox.mjs +15 -3
- package/fesm2020/carbon-components-angular-combobox.mjs.map +1 -1
- package/fesm2020/carbon-components-angular-dropdown.mjs +15 -3
- package/fesm2020/carbon-components-angular-dropdown.mjs.map +1 -1
- package/package.json +1 -1
- package/docs/storybook/3224.aa2b4664.iframe.bundle.js +0 -1
- package/docs/storybook/combobox-combobox-stories.330abc6c.iframe.bundle.js +0 -1
- package/docs/storybook/main.d6e42b2b.iframe.bundle.js +0 -1
|
@@ -43,6 +43,10 @@ export class Dropdown {
|
|
|
43
43
|
this.dropdownService = dropdownService;
|
|
44
44
|
this.elementService = elementService;
|
|
45
45
|
this.id = `dropdown-${Dropdown.dropdownCount++}`;
|
|
46
|
+
/**
|
|
47
|
+
* Hide label while keeping it accessible for screen readers
|
|
48
|
+
*/
|
|
49
|
+
this.hideLabel = false;
|
|
46
50
|
/**
|
|
47
51
|
* Value displayed if no item is selected.
|
|
48
52
|
*/
|
|
@@ -584,7 +588,7 @@ export class Dropdown {
|
|
|
584
588
|
}
|
|
585
589
|
Dropdown.dropdownCount = 0;
|
|
586
590
|
Dropdown.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Dropdown, deps: [{ token: i0.ElementRef }, { token: i1.I18n }, { token: i2.DropdownService }, { token: i3.ElementService }], target: i0.ɵɵFactoryTarget.Component });
|
|
587
|
-
Dropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: { id: "id", label: "label", helperText: "helperText", placeholder: "placeholder", displayValue: "displayValue", clearText: "clearText", size: "size", type: "type", theme: "theme", disabled: "disabled", skeleton: "skeleton", inline: "inline", disableArrowKeys: "disableArrowKeys", invalid: "invalid", invalidText: "invalidText", warn: "warn", warnText: "warnText", appendInline: "appendInline", scrollableContainer: "scrollableContainer", itemValueKey: "itemValueKey", selectionFeedback: "selectionFeedback", menuButtonLabel: "menuButtonLabel", selectedLabel: "selectedLabel", dropUp: "dropUp" }, outputs: { selected: "selected", onClose: "onClose", close: "close" }, host: { listeners: { "keydown": "onKeyDown($event)" }, properties: { "class.cds--dropdown__wrapper": "this.hostClass" } }, providers: [
|
|
591
|
+
Dropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: { id: "id", label: "label", hideLabel: "hideLabel", helperText: "helperText", placeholder: "placeholder", displayValue: "displayValue", clearText: "clearText", size: "size", type: "type", theme: "theme", disabled: "disabled", skeleton: "skeleton", inline: "inline", disableArrowKeys: "disableArrowKeys", invalid: "invalid", invalidText: "invalidText", warn: "warn", warnText: "warnText", appendInline: "appendInline", scrollableContainer: "scrollableContainer", itemValueKey: "itemValueKey", selectionFeedback: "selectionFeedback", menuButtonLabel: "menuButtonLabel", selectedLabel: "selectedLabel", dropUp: "dropUp" }, outputs: { selected: "selected", onClose: "onClose", close: "close" }, host: { listeners: { "keydown": "onKeyDown($event)" }, properties: { "class.cds--dropdown__wrapper": "this.hostClass" } }, providers: [
|
|
588
592
|
{
|
|
589
593
|
provide: NG_VALUE_ACCESSOR,
|
|
590
594
|
useExisting: Dropdown,
|
|
@@ -595,7 +599,10 @@ Dropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
|
|
|
595
599
|
*ngIf="label && !skeleton"
|
|
596
600
|
[for]="id"
|
|
597
601
|
class="cds--label"
|
|
598
|
-
[ngClass]="{
|
|
602
|
+
[ngClass]="{
|
|
603
|
+
'cds--label--disabled': disabled,
|
|
604
|
+
'cds--visually-hidden': hideLabel
|
|
605
|
+
}">
|
|
599
606
|
<ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>
|
|
600
607
|
<ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>
|
|
601
608
|
</label>
|
|
@@ -713,7 +720,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
713
720
|
*ngIf="label && !skeleton"
|
|
714
721
|
[for]="id"
|
|
715
722
|
class="cds--label"
|
|
716
|
-
[ngClass]="{
|
|
723
|
+
[ngClass]="{
|
|
724
|
+
'cds--label--disabled': disabled,
|
|
725
|
+
'cds--visually-hidden': hideLabel
|
|
726
|
+
}">
|
|
717
727
|
<ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>
|
|
718
728
|
<ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>
|
|
719
729
|
</label>
|
|
@@ -834,6 +844,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
834
844
|
type: Input
|
|
835
845
|
}], label: [{
|
|
836
846
|
type: Input
|
|
847
|
+
}], hideLabel: [{
|
|
848
|
+
type: Input
|
|
837
849
|
}], helperText: [{
|
|
838
850
|
type: Input
|
|
839
851
|
}], placeholder: [{
|
|
@@ -900,4 +912,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
900
912
|
type: HostListener,
|
|
901
913
|
args: ["keydown", ["$event"]]
|
|
902
914
|
}] } });
|
|
903
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLFlBQVksRUFFWixTQUFTLEVBRVQsWUFBWSxFQUVaLFdBQVcsRUFDWCxXQUFXLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBRXpFLHlFQUF5RTtBQUN6RSxPQUFPLEVBRU4sRUFBRSxFQUNGLFlBQVksRUFDWixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSXRFLE9BQU8sRUFBa0Isb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7OztBQUV2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBNkhILE1BQU0sT0FBTyxRQUFRO0lBbUtwQjs7T0FFRztJQUNILFlBQ1csVUFBc0IsRUFDdEIsSUFBVSxFQUNWLGVBQWdDLEVBQ2hDLGNBQThCO1FBSDlCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBTTtRQUNWLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUF4S2hDLE9BQUUsR0FBRyxZQUFZLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBU3JEOztXQUVHO1FBQ00sZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDMUI7O1dBRUc7UUFDTSxpQkFBWSxHQUE4QixFQUFFLENBQUM7UUFDdEQ7O1dBRUc7UUFDTSxjQUFTLEdBQVcsSUFBSSxDQUFD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QkFPRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBS0csZUFBZTtzQkFBdkIsS0FBSztnQkFLRyxhQUFhO3NCQUFyQixLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFJSSxRQUFRO3NCQUFqQixNQUFNO2dCQUlHLE9BQU87c0JBQWhCLE1BQU07Z0JBSUcsS0FBSztzQkFBZCxNQUFNO2dCQUsrQyxJQUFJO3NCQUF6RCxZQUFZO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJTCxjQUFjO3NCQUE1RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJQSxZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRUUsU0FBUztzQkFBckQsV0FBVzt1QkFBQyw4QkFBOEI7Z0JBeU0zQyxTQUFTO3NCQURSLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHRFdmVudEVtaXR0ZXIsXG5cdEVsZW1lbnRSZWYsXG5cdENvbnRlbnRDaGlsZCxcblx0T25Jbml0LFxuXHRWaWV3Q2hpbGQsXG5cdEFmdGVyQ29udGVudEluaXQsXG5cdEhvc3RMaXN0ZW5lcixcblx0T25EZXN0cm95LFxuXHRIb3N0QmluZGluZyxcblx0VGVtcGxhdGVSZWYsXG5cdEFmdGVyVmlld0luaXRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuXG4vLyBPYnNlcnZhYmxlIGltcG9ydCBpcyByZXF1aXJlZCBoZXJlIHNvIHR5cGVzY3JpcHQgY2FuIGNvbXBpbGUgY29ycmVjdGx5XG5pbXBvcnQge1xuXHRPYnNlcnZhYmxlLFxuXHRvZixcblx0U3Vic2NyaXB0aW9uXG59IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB7IEFic3RyYWN0RHJvcGRvd25WaWV3IH0gZnJvbSBcIi4vYWJzdHJhY3QtZHJvcGRvd24tdmlldy5jbGFzc1wiO1xuaW1wb3J0IHsgSTE4biB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2kxOG5cIjtcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSBcIi4vbGlzdC1pdGVtLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgRHJvcGRvd25TZXJ2aWNlIH0gZnJvbSBcIi4vZHJvcGRvd24uc2VydmljZVwiO1xuaW1wb3J0IHsgRWxlbWVudFNlcnZpY2UsIGdldFNjcm9sbGFibGVQYXJlbnRzIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvdXRpbHNcIjtcbmltcG9ydCB7IGhhc1Njcm9sbGFibGVQYXJlbnRzIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvdXRpbHNcIjtcblxuLyoqXG4gKiBEcm9wLWRvd24gbGlzdHMgZW5hYmxlIHVzZXJzIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBpdGVtcyBmcm9tIGEgbGlzdC5cbiAqXG4gKiAjIyMjIE9wZW5pbmcgYmVoYXZpb3IvTGlzdCBET00gcGxhY2VtZW50XG4gKiBCeSBkZWZhdWx0IHRoZSBkcm9wZG93biB3aWxsIHRyeSB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHBsYWNlbWVudCBmb3IgdGhlIGRyb3Bkb3duIGxpc3QuXG4gKlxuICogSWYgaXQncyBub3QgY29udGFpbmVkIHdpdGhpbiBhbnkgc2Nyb2xsaW5nIGVsZW1lbnRzLCBpdCB3aWxsIG9wZW4gaW5saW5lLCBpZiBpdCBfaXNfXG4gKiBjb250YWluZWQgd2l0aGluIGEgc2Nyb2xsaW5nIGNvbnRhaW5lciBpdCB3aWxsIHRyeSB0byBvcGVuIGluIHRoZSBib2R5LCBvciBhbiBgY2RzLXBsYWNlaG9sZGVyYC5cbiAqXG4gKiBUbyBjb250cm9sIHRoaXMgYmVoYXZpb3IgeW91IGNhbiB1c2UgdGhlIGBhcHBlbmRJbmxpbmVgIGlucHV0OlxuICogLSBgW2FwcGVuZElubGluZV09XCJudWxsXCJgIGlzIHRoZSBkZWZhdWx0IChhdXRvIGRldGVjdGlvbilcbiAqIC0gYFthcHBlbmRJbmxpbmVdPVwiZmFsc2VcImAgd2lsbCBhbHdheXMgYXBwZW5kIHRvIHRoZSBib2R5L2BjZHMtcGxhY2Vob2xkZXJgXG4gKiAtIGBbYXBwZW5kSW5saW5lXT1cInRydWVcImAgd2lsbCBhbHdheXMgYXBwZW5kIGlubGluZSAobmV4dCB0byB0aGUgZHJvcGRvd24gYnV0dG9uKVxuICpcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbiAqIGBgYFxuICpcbiAqIFtTZWUgZGVtb10oLi4vLi4vP3BhdGg9L3N0b3J5L2NvbXBvbmVudHMtZHJvcGRvd24tLWJhc2ljKVxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLWRyb3Bkb3duLCBpYm0tZHJvcGRvd25cIixcblx0dGVtcGxhdGU6IGBcblx0PGxhYmVsXG5cdFx0Km5nSWY9XCJsYWJlbCAmJiAhc2tlbGV0b25cIlxuXHRcdFtmb3JdPVwiaWRcIlxuXHRcdGNsYXNzPVwiY2RzLS1sYWJlbFwiXG5cdFx0W25nQ2xhc3NdPVwieydjZHMtLWxhYmVsLS1kaXNhYmxlZCc6IGRpc2FibGVkfVwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShsYWJlbClcIj57e2xhYmVsfX08L25nLWNvbnRhaW5lcj5cblx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGxhYmVsKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCI+PC9uZy10ZW1wbGF0ZT5cblx0PC9sYWJlbD5cblx0PGRpdlxuXHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveFwiXG5cdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0J2Nkcy0tZHJvcGRvd24nOiB0eXBlICE9PSAnbXVsdGknLFxuXHRcdFx0J2Nkcy0tbXVsdGlzZWxlY3QnOiB0eXBlID09PSAnbXVsdGknLFxuXHRcdFx0J2Nkcy0tbXVsdGktc2VsZWN0LS1zZWxlY3RlZCc6IHR5cGUgPT09ICdtdWx0aScgJiYgZ2V0U2VsZWN0ZWRDb3VudCgpID4gMCxcblx0XHRcdCdjZHMtLWRyb3Bkb3duLS1saWdodCc6IHRoZW1lID09PSAnbGlnaHQnLFxuXHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWxpZ2h0JzogdGhlbWUgPT09ICdsaWdodCcsXG5cdFx0XHQnY2RzLS1saXN0LWJveC0taW5saW5lJzogaW5saW5lLFxuXHRcdFx0J2Nkcy0tc2tlbGV0b24nOiBza2VsZXRvbixcblx0XHRcdCdjZHMtLWRyb3Bkb3duLS1kaXNhYmxlZCBjZHMtLWxpc3QtYm94LS1kaXNhYmxlZCc6IGRpc2FibGVkLFxuXHRcdFx0J2Nkcy0tZHJvcGRvd24tLWludmFsaWQnOiBpbnZhbGlkLFxuXHRcdFx0J2Nkcy0tZHJvcGRvd24tLXdhcm5pbmcgY2RzLS1saXN0LWJveC0td2FybmluZyc6IHdhcm4sXG5cdFx0XHQnY2RzLS1kcm9wZG93bi0tc20gY2RzLS1saXN0LWJveC0tc20nOiBzaXplID09PSAnc20nLFxuXHRcdFx0J2Nkcy0tZHJvcGRvd24tLW1kIGNkcy0tbGlzdC1ib3gtLW1kJzogc2l6ZSA9PT0gJ21kJyxcblx0XHRcdCdjZHMtLWRyb3Bkb3duLS1sZyBjZHMtLWxpc3QtYm94LS1sZyc6IHNpemUgPT09ICdsZycsXG5cdFx0XHQnY2RzLS1saXN0LWJveC0tZXhwYW5kZWQnOiAhbWVudUlzQ2xvc2VkXG5cdFx0fVwiPlxuXHRcdDxidXR0b25cblx0XHRcdCNkcm9wZG93bkJ1dHRvblxuXHRcdFx0W2lkXT1cImlkXCJcblx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19maWVsZFwiXG5cdFx0XHRbbmdDbGFzc109XCJ7J2EnOiAhbWVudUlzQ2xvc2VkfVwiXG5cdFx0XHRbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiFtZW51SXNDbG9zZWRcIlxuXHRcdFx0W2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG5cdFx0XHRhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG5cdFx0XHQoY2xpY2spPVwiZGlzYWJsZWQgPyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgOiB0b2dnbGVNZW51KClcIlxuXHRcdFx0KGJsdXIpPVwib25CbHVyKClcIlxuXHRcdFx0W2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyB0cnVlIDogbnVsbFwiPlxuXHRcdFx0PGRpdlxuXHRcdFx0XHQoY2xpY2spPVwiY2xlYXJTZWxlY3RlZCgpXCJcblx0XHRcdFx0KGtleWRvd24uZW50ZXIpPVwiY2xlYXJTZWxlY3RlZCgpXCJcblx0XHRcdFx0Km5nSWY9XCJ0eXBlID09PSAnbXVsdGknICYmIGdldFNlbGVjdGVkQ291bnQoKSA+IDBcIlxuXHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX3NlbGVjdGlvbiBjZHMtLXRhZy0tZmlsdGVyIGNkcy0tbGlzdC1ib3hfX3NlbGVjdGlvbi0tbXVsdGlcIlxuXHRcdFx0XHR0YWJpbmRleD1cIjBcIlxuXHRcdFx0XHRbdGl0bGVdPVwiY2xlYXJUZXh0XCI+XG5cdFx0XHRcdHt7Z2V0U2VsZWN0ZWRDb3VudCgpfX1cblx0XHRcdFx0PHN2Z1xuXHRcdFx0XHRcdGZvY3VzYWJsZT1cImZhbHNlXCJcblx0XHRcdFx0XHRwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwieE1pZFlNaWQgbWVldFwiXG5cdFx0XHRcdFx0c3R5bGU9XCJ3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1wiXG5cdFx0XHRcdFx0cm9sZT1cImltZ1wiXG5cdFx0XHRcdFx0eG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG5cdFx0XHRcdFx0d2lkdGg9XCIxNlwiXG5cdFx0XHRcdFx0aGVpZ2h0PVwiMTZcIlxuXHRcdFx0XHRcdHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuXHRcdFx0XHRcdGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuXHRcdFx0XHRcdDxwYXRoIGQ9XCJNMTIgNC43bC0uNy0uN0w4IDcuMyA0LjcgNGwtLjcuN0w3LjMgOCA0IDExLjNsLjcuN0w4IDguN2wzLjMgMy4zLjctLjdMOC43IDh6XCI+PC9wYXRoPlxuXHRcdFx0XHQ8L3N2Zz5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PHNwYW4gKm5nSWY9XCJpc1JlbmRlclN0cmluZygpXCIgY2xhc3M9XCJjZHMtLWxpc3QtYm94X19sYWJlbFwiPnt7Z2V0RGlzcGxheVN0cmluZ1ZhbHVlKCkgfCBhc3luY319PC9zcGFuPlxuXHRcdFx0PG5nLXRlbXBsYXRlXG5cdFx0XHRcdCpuZ0lmPVwiIWlzUmVuZGVyU3RyaW5nKClcIlxuXHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0UmVuZGVyVGVtcGxhdGVDb250ZXh0KClcIlxuXHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldF09XCJkaXNwbGF5VmFsdWVcIj5cblx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHQ8c3ZnXG5cdFx0XHRcdCpuZ0lmPVwiaW52YWxpZFwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1kcm9wZG93bl9faW52YWxpZC1pY29uXCJcblx0XHRcdFx0Y2RzSWNvbj1cIndhcm5pbmctLWZpbGxlZFwiXG5cdFx0XHRcdHNpemU9XCIxNlwiPlxuXHRcdFx0PC9zdmc+XG5cdFx0XHQ8c3ZnXG5cdFx0XHRcdCpuZ0lmPVwiIWludmFsaWQgJiYgd2FyblwiXG5cdFx0XHRcdGNkc0ljb249XCJ3YXJuaW5nLS1hbHQtLWZpbGxlZFwiXG5cdFx0XHRcdHNpemU9XCIxNlwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9faW52YWxpZC1pY29uIGNkcy0tbGlzdC1ib3hfX2ludmFsaWQtaWNvbi0td2FybmluZ1wiPlxuXHRcdFx0PC9zdmc+XG5cdFx0XHQ8c3BhbiBjbGFzcz1cImNkcy0tbGlzdC1ib3hfX21lbnUtaWNvblwiPlxuXHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0Km5nSWY9XCIhc2tlbGV0b25cIlxuXHRcdFx0XHRcdGNkc0ljb249XCJjaGV2cm9uLS1kb3duXCJcblx0XHRcdFx0XHRzaXplPVwiMTZcIlxuXHRcdFx0XHRcdFthdHRyLmFyaWEtbGFiZWxdPVwibWVudUJ1dHRvbkxhYmVsXCJcblx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2Nkcy0tbGlzdC1ib3hfX21lbnUtaWNvbi0tb3Blbic6ICFtZW51SXNDbG9zZWQgfVwiPlxuXHRcdFx0XHQ8L3N2Zz5cblx0XHRcdDwvc3Bhbj5cblx0XHQ8L2J1dHRvbj5cblx0XHQ8ZGl2XG5cdFx0XHQjZHJvcGRvd25NZW51XG5cdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdCdjZHMtLWxpc3QtYm94LS11cCc6IHRoaXMuZHJvcFVwICE9PSBudWxsICYmIHRoaXMuZHJvcFVwICE9PSB1bmRlZmluZWQgPyBkcm9wVXAgOiBfZHJvcFVwXG5cdFx0XHR9XCI+XG5cdFx0XHQ8bmctY29udGVudCAqbmdJZj1cIiFtZW51SXNDbG9zZWRcIj48L25nLWNvbnRlbnQ+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2XG5cdFx0Km5nSWY9XCJoZWxwZXJUZXh0ICYmICFpbnZhbGlkICYmICF3YXJuICYmICFza2VsZXRvblwiXG5cdFx0Y2xhc3M9XCJjZHMtLWZvcm1fX2hlbHBlci10ZXh0XCJcblx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHQnY2RzLS1mb3JtX19oZWxwZXItdGV4dC0tZGlzYWJsZWQnOiBkaXNhYmxlZFxuXHRcdH1cIj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUoaGVscGVyVGV4dClcIj57e2hlbHBlclRleHR9fTwvbmctY29udGFpbmVyPlxuXHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaGVscGVyVGV4dClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWxwZXJUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0PC9kaXY+XG5cdDxkaXYgKm5nSWY9XCJpbnZhbGlkXCIgY2xhc3M9XCJjZHMtLWZvcm0tcmVxdWlyZW1lbnRcIj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCI+e3sgaW52YWxpZFRleHQgfX08L25nLWNvbnRhaW5lcj5cblx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGludmFsaWRUZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImludmFsaWRUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0PC9kaXY+XG5cdDxkaXYgKm5nSWY9XCIhaW52YWxpZCAmJiB3YXJuXCIgY2xhc3M9XCJjZHMtLWZvcm0tcmVxdWlyZW1lbnRcIj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUod2FyblRleHQpXCI+e3t3YXJuVGV4dH19PC9uZy1jb250YWluZXI+XG5cdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZSh3YXJuVGV4dClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ3YXJuVGV4dFwiPjwvbmctdGVtcGxhdGU+XG5cdDwvZGl2PlxuXHRgLFxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcblx0XHRcdHVzZUV4aXN0aW5nOiBEcm9wZG93bixcblx0XHRcdG11bHRpOiB0cnVlXG5cdFx0fVxuXHRdXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblx0c3RhdGljIGRyb3Bkb3duQ291bnQgPSAwO1xuXHRASW5wdXQoKSBpZCA9IGBkcm9wZG93bi0ke0Ryb3Bkb3duLmRyb3Bkb3duQ291bnQrK31gO1xuXHQvKipcblx0ICogTGFiZWwgZm9yIHRoZSBkcm9wZG93bi5cblx0ICovXG5cdEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogU2V0cyB0aGUgb3B0aW9uYWwgaGVscGVyIHRleHQuXG5cdCAqL1xuXHRASW5wdXQoKSBoZWxwZXJUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIG5vIGl0ZW0gaXMgc2VsZWN0ZWQuXG5cdCAqL1xuXHRASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XG5cdC8qKlxuXHQgKiBUaGUgc2VsZWN0ZWQgdmFsdWUgZnJvbSB0aGUgYERyb3Bkb3duYC4gQ2FuIGJlIGEgc3RyaW5nIG9yIHRlbXBsYXRlLlxuXHQgKi9cblx0QElucHV0KCkgZGlzcGxheVZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gXCJcIjtcblx0LyoqXG5cdCAqIFNldHMgdGhlIG9wdGlvbmFsIGNsZWFyIGJ1dHRvbiB0b29sdGlwIHRleHQuXG5cdCAqL1xuXHRASW5wdXQoKSBjbGVhclRleHQ6IHN0cmluZyA9IHRoaXMuaTE4bi5nZXQoKS5EUk9QRE9XTi5DTEVBUjtcblx0LyoqXG5cdCAqIFNpemUgdG8gcmVuZGVyIHRoZSBkcm9wZG93biBmaWVsZC5cblx0ICovXG5cdEBJbnB1dCgpIHNpemU6IFwic21cIiB8IFwibWRcIiB8IFwibGdcIiA9IFwibWRcIjtcblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciBvciBub3QgdGhlIGBEcm9wZG93bmAgc3VwcG9ydHMgc2VsZWN0aW5nIG11bHRpcGxlIGl0ZW1zIGFzIG9wcG9zZWQgdG8gc2luZ2xlXG5cdCAqIGl0ZW0gc2VsZWN0aW9uLlxuXHQgKi9cblx0QElucHV0KCkgdHlwZTogXCJzaW5nbGVcIiB8IFwibXVsdGlcIiA9IFwic2luZ2xlXCI7XG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2NSAtIFVzZSBgY2RzTGF5ZXJgIGRpcmVjdGl2ZSBpbnN0ZWFkXG5cdCAqIGBsaWdodGAgb3IgYGRhcmtgIGRyb3Bkb3duIHRoZW1lXG5cdCAqL1xuXHRASW5wdXQoKSB0aGVtZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgPSBcImRhcmtcIjtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gZGlzYWJsZSB0aGUgZHJvcGRvd24uXG5cdCAqL1xuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgYSBsb2FkaW5nIGRyb3Bkb3duLlxuXHQgKi9cblx0QElucHV0KCkgc2tlbGV0b24gPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgZm9yIGFuIGlubGluZSBkcm9wZG93bi5cblx0ICovXG5cdEBJbnB1dCgpIGlubGluZSA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgYSBkcm9wZG93biB3aXRob3V0IGFycm93IGtleSBhY3RpdmF0aW9uLlxuXHQgKi9cblx0QElucHV0KCkgZGlzYWJsZUFycm93S2V5cyA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgaW52YWxpZCBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFZhbHVlIGRpc3BsYXllZCBpZiBkcm9wZG93biBpcyBpbiBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZFRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgICogU2V0IHRvIGB0cnVlYCB0byBzaG93IGEgd2FybmluZyAoY29udGVudHMgc2V0IGJ5IHdhcm5pbmdUZXh0KVxuXHQgICovXG5cdEBJbnB1dCgpIHdhcm4gPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldHMgdGhlIHdhcm5pbmcgdGV4dFxuXHQgKi9cblx0QElucHV0KCkgd2FyblRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBzZXQgdG8gYHRydWVgIHRvIHBsYWNlIHRoZSBkcm9wZG93biB2aWV3IGlubGluZSB3aXRoIHRoZSBjb21wb25lbnRcblx0ICovXG5cdEBJbnB1dCgpIGFwcGVuZElubGluZTogYm9vbGVhbiA9IG51bGw7XG5cdC8qKlxuXHQgKiBRdWVyeSBzdHJpbmcgZm9yIHRoZSBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIGBEcm9wZG93bmAuXG5cdCAqIFVzZWQgdG8gdHJpZ2dlciBjbG9zaW5nIHRoZSBkcm9wZG93biBpZiBpdCBzY3JvbGxzIG91dHNpZGUgb2YgdGhlIHZpZXdwb3J0IG9mIHRoZSBgc2Nyb2xsYWJsZUNvbnRhaW5lcmAuXG5cdCAqL1xuXHRASW5wdXQoKSBzY3JvbGxhYmxlQ29udGFpbmVyOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgdGhlIHByb3BlcnR5IHRvIGJlIHVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSB0byBgbmdNb2RlbGBcblx0ICovXG5cdEBJbnB1dCgpIGl0ZW1WYWx1ZUtleTogc3RyaW5nO1xuXHQvKipcblx0ICogU3BlY2lmeSBmZWVkYmFjayAobW9kZSkgb2YgdGhlIHNlbGVjdGlvbi5cblx0ICogYHRvcGA6IHNlbGVjdGVkIGl0ZW0ganVtcHMgdG8gdG9wXG5cdCAqIGBmaXhlZGA6IHNlbGVjdGVkIGl0ZW0gc3RheXMgYXQgaXQncyBwb3NpdGlvblxuXHQgKiBgdG9wLWFmdGVyLXJlb3BlbmA6IHNlbGVjdGVkIGl0ZW0ganVtcCB0byB0b3AgYWZ0ZXIgcmVvcGVuIGRyb3Bkb3duXG5cdCAqL1xuXHRASW5wdXQoKSBzZWxlY3Rpb25GZWVkYmFjazogXCJ0b3BcIiB8IFwiZml4ZWRcIiB8IFwidG9wLWFmdGVyLXJlb3BlblwiID0gXCJ0b3AtYWZ0ZXItcmVvcGVuXCI7XG5cdC8qKlxuXHQgKiBBY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgYnV0dG9uIHRoYXQgb3BlbnMgdGhlIGRyb3Bkb3duIGxpc3QuXG5cdCAqIERlZmF1bHRzIHRvIHRoZSBgRFJPUERPV04uT1BFTmAgdmFsdWUgZnJvbSB0aGUgaTE4biBzZXJ2aWNlLlxuXHQgKi9cblx0QElucHV0KCkgbWVudUJ1dHRvbkxhYmVsID0gdGhpcy5pMThuLmdldCgpLkRST1BET1dOLk9QRU47XG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgbGFiZWwgZm9yIHRoZSBcIiMgc2VsZWN0ZWRcIiB0ZXh0LlxuXHQgKiBEZWZhdWx0cyB0byB0aGUgYERST1BET1dOLlNFTEVDVEVEYCB2YWx1ZSBmcm9tIHRoZSBpMThuIHNlcnZpY2UuXG5cdCAqL1xuXHRASW5wdXQoKSBzZWxlY3RlZExhYmVsID0gdGhpcy5pMThuLmdldCgpLkRST1BET1dOLlNFTEVDVEVEO1xuXHQvKipcblx0ICogT3ZlcnJpZGVzIHRoZSBhdXRvbWF0aWMgZHJvcFVwLlxuXHQgKi9cblx0QElucHV0KCkgZHJvcFVwOiBib29sZWFuO1xuXHQvKipcblx0ICogRW1pdHMgc2VsZWN0aW9uIGV2ZW50cy5cblx0ICovXG5cdEBPdXRwdXQoKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPE9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPE9iamVjdD4oKTtcblx0LyoqXG5cdCAqIEVtaXRzIGV2ZW50IG5vdGlmeWluZyB0byBvdGhlciBjbGFzc2VzIHRoYXQgdGhlIGBEcm9wZG93bmAgaGFzIGJlZW4gY2xvc2VkIChjb2xsYXBzZWQpLlxuXHQgKi9cblx0QE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cdC8qKlxuXHQgKiBFbWl0cyBldmVudCBub3RpZnlpbmcgdG8gb3RoZXIgY2xhc3NlcyB0aGF0IHRoZSBgRHJvcGRvd25gIGhhcyBiZWVuIGNsb3NlZCAoY29sbGFwc2VkKS5cblx0ICovXG5cdEBPdXRwdXQoKSBjbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuXHQvKipcblx0ICogTWFpbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBgQWJzdHJhY3REcm9wZG93blZpZXdgIG9iamVjdCB3aXRoaW4gdGhlIGNvbnRlbnQgRE9NLlxuXHQgKi9cblx0QENvbnRlbnRDaGlsZChBYnN0cmFjdERyb3Bkb3duVmlldywgeyBzdGF0aWM6IHRydWUgfSkgdmlldzogQWJzdHJhY3REcm9wZG93blZpZXc7XG5cdC8qKlxuXHQgKiBNYWludGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZpZXcgRE9NIGVsZW1lbnQgb2YgdGhlIGBEcm9wZG93bmAgYnV0dG9uLlxuXHQgKi9cblx0QFZpZXdDaGlsZChcImRyb3Bkb3duQnV0dG9uXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRyb3Bkb3duQnV0dG9uO1xuXHQvKipcblx0ICogVmlld0NoaWQgb2YgdGhlIGRyb3Bkb3duIHZpZXcuXG5cdCAqL1xuXHRAVmlld0NoaWxkKFwiZHJvcGRvd25NZW51XCIsIHsgc3RhdGljOiB0cnVlIH0pIGRyb3Bkb3duTWVudTtcblxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWRyb3Bkb3duX193cmFwcGVyXCIpIGhvc3RDbGFzcyA9IHRydWU7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGlmIHRoZSBkcm9wZG93biBpcyBjbG9zZWQgKG5vdCBleHBhbmRlZCkuXG5cdCAqL1xuXHRtZW51SXNDbG9zZWQgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBjb250cm9scyB3aGV0aGVyIHRoZSBgZHJvcC11cGAgY2xhc3MgaXMgYXBwbGllZFxuXHQgKi9cblx0X2Ryb3BVcCA9IGZhbHNlO1xuXG5cdC8vIC5iaW5kIGNyZWF0ZXMgYSBuZXcgZnVuY3Rpb24sIHNvIHdlIGRlY2xhcmUgdGhlIG1ldGhvZHMgYmVsb3dcblx0Ly8gYnV0IC5iaW5kIHRoZW0gdXAgaGVyZVxuXHRub29wID0gdGhpcy5fbm9vcC5iaW5kKHRoaXMpO1xuXHRvdXRzaWRlQ2xpY2sgPSB0aGlzLl9vdXRzaWRlQ2xpY2suYmluZCh0aGlzKTtcblx0b3V0c2lkZUtleSA9IHRoaXMuX291dHNpZGVLZXkuYmluZCh0aGlzKTtcblx0a2V5Ym9hcmROYXYgPSB0aGlzLl9rZXlib2FyZE5hdi5iaW5kKHRoaXMpO1xuXG5cdHByb3RlY3RlZCB2aXNpYmlsaXR5U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG5cdHByb3RlY3RlZCBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IHRoaXMuX25vb3A7XG5cblx0Ly8gcHJpbWFyaWx5IHVzZWQgdG8gY2FwdHVyZSBhbmQgcHJvcGFnYXRlIGlucHV0IHRvIGB3cml0ZVZhbHVlYCBiZWZvcmUgdGhlIGNvbnRlbnQgaXMgYXZhaWxhYmxlXG5cdHByaXZhdGUgX3dyaXR0ZW5WYWx1ZTogYW55ID0gW107XG5cdHByb3RlY3RlZCBnZXQgd3JpdHRlblZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLl93cml0dGVuVmFsdWU7XG5cdH1cblx0cHJvdGVjdGVkIHNldCB3cml0dGVuVmFsdWUodmFsOiBhbnlbXSkge1xuXHRcdGlmICh2YWwgJiYgdmFsLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5jbGVhclNlbGVjdGVkKCk7XG5cdFx0fVxuXHRcdHRoaXMuX3dyaXR0ZW5WYWx1ZSA9IHZhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIERyb3Bkb3duLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG5cdFx0cHJvdGVjdGVkIGkxOG46IEkxOG4sXG5cdFx0cHJvdGVjdGVkIGRyb3Bkb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlLFxuXHRcdHByb3RlY3RlZCBlbGVtZW50U2VydmljZTogRWxlbWVudFNlcnZpY2UpIHt9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGB0eXBlYCBwcm9wZXJ0eSBpbiB0aGUgYEBDb250ZW50Q2hpbGRgLlxuXHQgKiBUaGUgYHR5cGVgIHByb3BlcnR5IHNwZWNpZmllcyB3aGV0aGVyIHRoZSBgRHJvcGRvd25gIGFsbG93cyBzaW5nbGUgc2VsZWN0aW9uIG9yIG11bHRpIHNlbGVjdGlvbi5cblx0ICovXG5cdG5nT25Jbml0KCkge1xuXHRcdGlmICh0aGlzLnZpZXcpIHtcblx0XHRcdHRoaXMudmlldy50eXBlID0gdGhpcy50eXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBjbGFzc2VzIGFuZCBzdWJzY3JpYmVzIHRvIGV2ZW50cyBmb3Igc2luZ2xlIG9yIG11bHRpIHNlbGVjdGlvbi5cblx0ICovXG5cdG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcblx0XHRpZiAoIXRoaXMudmlldykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoKHRoaXMud3JpdHRlblZhbHVlICYmIHRoaXMud3JpdHRlblZhbHVlLmxlbmd0aCkgfHwgdHlwZW9mIHRoaXMud3JpdHRlblZhbHVlID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHR0aGlzLndyaXRlVmFsdWUodGhpcy53cml0dGVuVmFsdWUpO1xuXHRcdH1cblx0XHR0aGlzLnZpZXcudHlwZSA9IHRoaXMudHlwZTtcblx0XHR0aGlzLnZpZXcuc2l6ZSA9IHRoaXMuc2l6ZTtcblxuXHRcdC8vIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBldmVudCBpcyBvcmdhbmljIChpc1VwZGF0ZSA9PT0gZmFsc2UpIG9yIHByb2dyYW1tYXRpY1xuXHRcdGNvbnN0IGlzVXBkYXRlID0gZXZlbnQgPT4gZXZlbnQgJiYgZXZlbnQuaXNVcGRhdGU7XG5cblx0XHR0aGlzLnZpZXcuc2VsZWN0LnN1YnNjcmliZShldmVudCA9PiB7XG5cdFx0XHRpZiAodGhpcy50eXBlID09PSBcInNpbmdsZVwiICYmICFpc1VwZGF0ZShldmVudCkgJiYgIUFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG5cdFx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0XHRcdGlmIChldmVudC5pdGVtICYmIGV2ZW50Lml0ZW0uc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkpIHtcblx0XHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKGV2ZW50Lml0ZW1bdGhpcy5pdGVtVmFsdWVLZXldKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UoZXZlbnQuaXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwibXVsdGlcIiAmJiAhaXNVcGRhdGUoZXZlbnQpKSB7XG5cdFx0XHRcdC8vIGlmIHdlIGhhdmUgYSBgdmFsdWVgIHNlbGVjdG9yIGFuZCBzZWxlY3RlZCBpdGVtcyBtYXAgdGhlbSBhcHByb3ByaWF0ZWx5XG5cdFx0XHRcdGlmICh0aGlzLml0ZW1WYWx1ZUtleSAmJiB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlcyA9IHRoaXMudmlldy5nZXRTZWxlY3RlZCgpLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldKTtcblx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSh2YWx1ZXMpO1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSBqdXN0IHBhc3MgdXAgdGhlIHZhbHVlcyBmcm9tIGBnZXRTZWxlY3RlZGBcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIG9ubHkgZW1pdCBzZWxlY3RlZCBmb3IgXCJvcmdhbmljXCIgc2VsZWN0aW9uc1xuXHRcdFx0aWYgKCFpc1VwZGF0ZShldmVudCkpIHtcblx0XHRcdFx0dGhpcy5jaGVja0ZvclJlb3JkZXIoKTtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZC5lbWl0KGV2ZW50KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHQvLyBpZiBhcHBlbmRJbmxpbmUgaXMgZGVmYXVsdCB2YWx1ZWQgKG51bGwpIHdlIHNob3VsZDpcblx0XHQvLyAxLiBpZiB0aGVyZSBhcmUgc2Nyb2xsYWJsZSBwYXJlbnRzIChub3QgaW5jbHVkaW5nIGJvZHkpIGRvbid0IGFwcGVuZCBpbmxpbmVcblx0XHQvLyAgICB0aGlzIHNob3VsZCBhbHNvIGNvdmVyIHRoZSBjYXNlIHdoZXJlIHRoZSBkcm9wZG93biBpcyBpbiBhIG1vZGFsXG5cdFx0Ly8gICAgKHdoZXJlIHdlIF9kb18gd2FudCB0byBhcHBlbmQgdG8gdGhlIHBsYWNlaG9sZGVyKVxuXHRcdGlmICh0aGlzLmFwcGVuZElubGluZSA9PT0gbnVsbCAmJiBoYXNTY3JvbGxhYmxlUGFyZW50cyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpIHtcblx0XHRcdHRoaXMuYXBwZW5kSW5saW5lID0gZmFsc2U7XG5cdFx0XHQvLyAyLiBvdGhlcndpc2Ugd2Ugc2hvdWxkIGFwcGVuZCBpbmxpbmVcblx0XHR9IGVsc2UgaWYgKHRoaXMuYXBwZW5kSW5saW5lID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLmFwcGVuZElubGluZSA9IHRydWU7XG5cdFx0fVxuXHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZpbmcgdGhlIGBEcm9wZG93bmAgZnJvbSB0aGUgYm9keSBpZiBpdCBpcyBhcHBlbmRlZCB0byB0aGUgYm9keS5cblx0ICovXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdGlmICghdGhpcy5hcHBlbmRJbmxpbmUpIHtcblx0XHRcdHRoaXMuX2FwcGVuZFRvRHJvcGRvd24oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJvcGFnYXRlcyB0aGUgaW5qZWN0ZWQgYHZhbHVlYC5cblx0ICovXG5cdHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuXHRcdC8vIGNhY2hlIHRoZSB3cml0dGVuIHZhbHVlIHNvIHdlIGNhbiB1c2UgaXQgaW4gYEFmdGVyQ29udGVudEluaXRgXG5cdFx0dGhpcy53cml0dGVuVmFsdWUgPSB2YWx1ZTtcblx0XHR0aGlzLnZpZXcub25JdGVtc1JlYWR5KCgpID0+IHtcblx0XHRcdC8vIHByb3BhZ2F0ZSBudWxsL2ZhbHNleSBhcyBhbiBhcnJheSAoZGVzZWxlY3QgZXZlcnl0aGluZylcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKFt2YWx1ZV0pO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIpIHtcblx0XHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5KSB7XG5cdFx0XHRcdFx0Ly8gY2xvbmUgdGhlIHNwZWNpZmllZCBpdGVtIGFuZCB1cGRhdGUgaXRzIHN0YXRlXG5cdFx0XHRcdFx0Y29uc3QgbmV3VmFsdWUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnZpZXcuZ2V0TGlzdEl0ZW1zKCkuZmluZChpdGVtID0+IGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldID09PSB2YWx1ZSkpO1xuXHRcdFx0XHRcdG5ld1ZhbHVlLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQoW25ld1ZhbHVlXSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gcGFzcyB0aGUgc2luZ3VsYXIgdmFsdWUgYXMgYW4gYXJyYXkgb2YgTGlzdEl0ZW1cblx0XHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQoW3ZhbHVlXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICh0aGlzLml0ZW1WYWx1ZUtleSkge1xuXHRcdFx0XHRcdC8vIGNsb25lIHRoZSBpdGVtcyBhbmQgdXBkYXRlIHRoZWlyIHN0YXRlIGJhc2VkIG9uIHRoZSByZWNlaXZlZCB2YWx1ZSBhcnJheVxuXHRcdFx0XHRcdC8vIHRoaXMgd2F5IHdlIGRvbid0IGxvc2UgYW55IGFkZGl0aW9uYWwgbWV0YWRhdGEgdGhhdCBtYXkgYmUgcGFzc2VkIGluIHZpYSB0aGUgYGl0ZW1zYCBJbnB1dFxuXHRcdFx0XHRcdGxldCBuZXdWYWx1ZXMgPSBbXTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgdmFsdWUpIHtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnZpZXcuZ2V0TGlzdEl0ZW1zKCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldID09PSB2KSB7XG5cdFx0XHRcdFx0XHRcdFx0bmV3VmFsdWVzLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgaXRlbSwgeyBzZWxlY3RlZDogdHJ1ZSB9KSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKG5ld1ZhbHVlcyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gd2UgY2FuIHNhZmVseSBhc3N1bWUgd2UncmUgcGFzc2luZyBhbiBhcnJheSBvZiBgTGlzdEl0ZW1gc1xuXHRcdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZCh2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRvbkJsdXIoKSB7XG5cdFx0dGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xuXHR9XG5cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcmluZyB0aGUgZnVuY3Rpb24gaW5qZWN0ZWQgdG8gY29udHJvbCB0aGUgdG91Y2ggdXNlIG9mIHRoZSBgRHJvcGRvd25gLlxuXHQgKi9cblx0cmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuXHRcdHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBmdW5jdGlvbiBwYXNzZWQgaW4gYnkgYHJlZ2lzdGVyT25DaGFuZ2VgXG5cdCAqL1xuXHRwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG5cblx0LyoqXG5cdCAqIGBDb250cm9sVmFsdWVBY2Nlc3NvcmAgbWV0aG9kIHRvIHByb2dyYW1tYXRpY2FsbHkgZGlzYWJsZSB0aGUgZHJvcGRvd24uXG5cdCAqXG5cdCAqIGV4OiBgdGhpcy5mb3JtR3JvdXAuZ2V0KFwibXlEcm9wZG93blwiKS5kaXNhYmxlKCk7YFxuXHQgKlxuXHQgKiBAcGFyYW0gaXNEaXNhYmxlZCBgdHJ1ZWAgdG8gZGlzYWJsZSB0aGUgaW5wdXRcblx0ICovXG5cdHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMga2V5Ym9hcmQgZnVuY3Rpb25hbGl0eSBmb3IgbmF2aWdhdGlvbiwgc2VsZWN0aW9uIGFuZCBjbG9zaW5nIG9mIHRoZSBgRHJvcGRvd25gLlxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lcihcImtleWRvd25cIiwgW1wiJGV2ZW50XCJdKVxuXHRvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblx0XHRpZiAoKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikgJiYgIXRoaXMubWVudUlzQ2xvc2VkKSB7XG5cdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsgIC8vIGRvbid0IHVuaW50ZW50aW9uYWxseSBjbG9zZSBvdGhlciB3aWRnZXRzIHRoYXQgbGlzdGVuIGZvciBFc2NhcGVcblx0XHR9XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0XHR0aGlzLmRyb3Bkb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMubWVudUlzQ2xvc2VkICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSkge1xuXHRcdFx0aWYgKHRoaXMuZGlzYWJsZUFycm93S2V5cyAmJiAoZXZlbnQua2V5ID09PSBcIkFycm93RG93blwiIHx8IGV2ZW50LmtleSA9PT0gXCJBcnJvd1VwXCIpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLm9wZW5NZW51KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLm1lbnVJc0Nsb3NlZCAmJiBldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLm1lbnVJc0Nsb3NlZCAmJiBldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgZXZlbnQuc2hpZnRLZXkpIHtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiKSB7IHJldHVybjsgfVxuXG5cdFx0aWYgKHRoaXMubWVudUlzQ2xvc2VkKSB7XG5cdFx0XHR0aGlzLmNsb3NlZERyb3Bkb3duTmF2aWdhdGlvbihldmVudCk7XG5cdFx0fVxuXHR9XG5cblx0Y2xvc2VkRHJvcGRvd25OYXZpZ2F0aW9uKGV2ZW50KSB7XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0Rvd25cIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMudmlldy5nZXRDdXJyZW50SXRlbSgpLnNlbGVjdGVkID0gZmFsc2U7XG5cdFx0XHRsZXQgaXRlbSA9IHRoaXMudmlldy5nZXROZXh0SXRlbSgpO1xuXHRcdFx0aWYgKGl0ZW0pIHsgaXRlbS5zZWxlY3RlZCA9IHRydWU7IH1cblx0XHR9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd1VwXCIpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLnZpZXcuZ2V0Q3VycmVudEl0ZW0oKS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0bGV0IGl0ZW0gPSB0aGlzLnZpZXcuZ2V0UHJldkl0ZW0oKTtcblx0XHRcdGlmIChpdGVtKSB7IGl0ZW0uc2VsZWN0ZWQgPSB0cnVlOyB9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGRpc3BsYXkgdmFsdWUgaWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24gYW5kIGRpc3BsYXlWYWx1ZSBpcyBzZXQsXG5cdCAqIGlmIHRoZXJlIGlzIGp1c3QgYSBzZWxlY3Rpb24gdGhlIExpc3RJdGVtIGNvbnRlbnQgcHJvcGVydHkgd2lsbCBiZSByZXR1cm5lZCxcblx0ICogb3RoZXJ3aXNlIHRoZSBwbGFjZWhvbGRlciB3aWxsIGJlIHJldHVybmVkLlxuXHQgKi9cblx0Z2V0RGlzcGxheVN0cmluZ1ZhbHVlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG5cdFx0aWYgKCF0aGlzLnZpZXcgfHwgdGhpcy5za2VsZXRvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgc2VsZWN0ZWQgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKTtcblx0XHRpZiAoc2VsZWN0ZWQubGVuZ3RoICYmICghdGhpcy5kaXNwbGF5VmFsdWUgfHwgIXRoaXMuaXNSZW5kZXJTdHJpbmcoKSkpIHtcblx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwibXVsdGlcIikge1xuXHRcdFx0XHRyZXR1cm4gb2YodGhpcy5wbGFjZWhvbGRlcik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gb2Yoc2VsZWN0ZWRbMF0uY29udGVudCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChzZWxlY3RlZC5sZW5ndGggJiYgdGhpcy5pc1JlbmRlclN0cmluZygpKSB7XG5cdFx0XHRyZXR1cm4gb2YodGhpcy5kaXNwbGF5VmFsdWUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9mKHRoaXMucGxhY2Vob2xkZXIpO1xuXHR9XG5cblx0aXNSZW5kZXJTdHJpbmcoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHR5cGVvZiB0aGlzLmRpc3BsYXlWYWx1ZSA9PT0gXCJzdHJpbmdcIjtcblx0fVxuXG5cdGdldFJlbmRlclRlbXBsYXRlQ29udGV4dCgpIHtcblx0XHRpZiAoIXRoaXMudmlldykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgc2VsZWN0ZWQgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKTtcblx0XHRpZiAodGhpcy50eXBlID09PSBcIm11bHRpXCIpIHtcblx0XHRcdHJldHVybiB7IGl0ZW1zOiBzZWxlY3RlZCB9O1xuXHRcdH0gZWxzZSBpZiAoc2VsZWN0ZWQgJiYgc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIHsgaXRlbTogc2VsZWN0ZWRbMF0gfTsgLy8gdGhpcyBpcyB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGRyb3Bkb3duLWxpc3QgdGVtcGxhdGVcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblx0fVxuXG5cdGdldFNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcblx0XHRpZiAodGhpcy52aWV3LmdldFNlbGVjdGVkKCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKS5sZW5ndGg7XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJTZWxlY3RlZCgpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmdldFNlbGVjdGVkQ291bnQoKSA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy52aWV3LmdldExpc3RJdGVtcygpKSB7XG5cdFx0XHRpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG5cdFx0fVxuXHRcdHRoaXMuc2VsZWN0ZWQuZW1pdChbXSk7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UoW10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGEgdmFsdWUgc2VsZWN0ZWQuXG5cdCAqL1xuXHR2YWx1ZVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSkgeyByZXR1cm4gdHJ1ZTsgfVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdF9ub29wKCkgeyB9XG5cdC8qKlxuXHQgKiBIYW5kbGVzIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBgRHJvcGRvd25gLlxuXHQgKi9cblx0X291dHNpZGVDbGljayhldmVudCkge1xuXHRcdGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuXHRcdFx0Ly8gaWYgd2UncmUgYXBwZW5kVG9Cb2R5IHRoZSBsaXN0IGlzbid0IHdpdGhpbiB0aGUgX2VsZW1lbnRSZWYsXG5cdFx0XHQvLyBzbyB3ZSd2ZSBnb3QgdG8gY2hlY2sgaWYgb3VyIHRhcmdldCBpcyBwb3NzaWJseSBpbiB0aGVyZSB0b28uXG5cdFx0XHQhdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblx0fVxuXHRfb3V0c2lkZUtleShldmVudCkge1xuXHRcdGlmICghdGhpcy5tZW51SXNDbG9zZWQgJiYgZXZlbnQua2V5ID09PSBcIlRhYlwiICYmIHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgc28gdXNlcnMgYXJlIGNvbnRyb2xsaW5nIHRoZSBgRHJvcGRvd25gIGluc3RlYWQgb2YgdW5pbnRlbnRpb25hbGx5IGNvbnRyb2xsaW5nIG91dHNpZGUgZWxlbWVudHMuXG5cdCAqL1xuXHRfa2V5Ym9hcmROYXYoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiICYmICF0aGlzLm1lbnVJc0Nsb3NlZCkge1xuXHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7ICAvLyBkb24ndCB1bmludGVudGlvbmFsbHkgY2xvc2UgbW9kYWwgaWYgaW5zaWRlIG9mIGl0XG5cdFx0fVxuXHRcdGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdFx0dGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5tZW51SXNDbG9zZWQgJiYgZXZlbnQua2V5ID09PSBcIlRhYlwiKSB7XG5cdFx0XHQvLyB0aGlzIHdheSBmb2N1cyB3aWxsIHN0YXJ0IG9uIHRoZSBuZXh0IGZvY3VzYWJsZSBpdGVtIGZyb20gdGhlIGRyb3Bkb3duXG5cdFx0XHQvLyBub3QgdGhlIHRvcCBvZiB0aGUgYm9keSFcblx0XHRcdHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0dGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoXCJrZXlkb3duXCIsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwga2V5OiBcIlRhYlwiIH0pKTtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGBEcm9wZG93bmAgbGlzdCBhcHBlbmRpbmcgaXQgdG8gdGhlIGRyb3Bkb3duIHBhcmVudCBvYmplY3QgaW5zdGVhZCBvZiB0aGUgYm9keS5cblx0ICovXG5cdF9hcHBlbmRUb0Ryb3Bkb3duKCkge1xuXHRcdHRoaXMuZHJvcGRvd25TZXJ2aWNlLmFwcGVuZFRvRHJvcGRvd24odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlib2FyZE5hdiwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgYERyb3Bkb3duYCBsaXN0IGFzIGFuIGVsZW1lbnQgdGhhdCBpcyBhcHBlbmRlZCB0byB0aGUgRE9NIGJvZHkuXG5cdCAqL1xuXHRfYXBwZW5kVG9Cb2R5KCkge1xuXHRcdGNvbnN0IGxpZ2h0Q2xhc3MgPSB0aGlzLnRoZW1lID09PSBcImxpZ2h0XCIgPyBcIiBjZHMtLWxpc3QtYm94LS1saWdodFwiIDogXCJcIjtcblx0XHRjb25zdCBleHBhbmRlZENsYXNzID0gIXRoaXMubWVudUlzQ2xvc2VkID8gXCIgY2RzLS1saXN0LWJveC0tZXhwYW5kZWRcIiA6IFwiXCI7XG5cdFx0dGhpcy5kcm9wZG93blNlcnZpY2UuYXBwZW5kVG9Cb2R5KFxuXHRcdFx0dGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0dGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudCxcblx0XHRcdGAke3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZX0ke2xpZ2h0Q2xhc3N9JHtleHBhbmRlZENsYXNzfWApO1xuXHRcdHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlib2FyZE5hdiwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgYERyb3Bkb3duYCBsaXN0IGlzIHZpc2libGUgd2l0aGluIGFsbCBzY3JvbGxhYmxlIHBhcmVudHMuXG5cdCAqIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBpbiBhIHZhbHVlIHRvIHRoZSBgZHJvcFVwYCBpbnB1dC5cblx0ICovXG5cdF9zaG91bGREcm9wVXAoKSB7XG5cdFx0Ly8gY2hlY2sgaWYgZHJvcGRvd25NZW51IGV4aXN0cyBmaXJzdC5cblx0XHRjb25zdCBtZW51ID0gdGhpcy5kcm9wZG93bk1lbnUgJiYgdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmNkcy0tbGlzdC1ib3hfX21lbnVcIik7XG5cdFx0Ly8gY2hlY2sgaWYgbWVudSBleGlzdHMgZmlyc3QuXG5cdFx0Y29uc3QgbWVudVJlY3QgPSBtZW51ICYmIG1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0aWYgKG1lbnUgJiYgbWVudVJlY3QpIHtcblx0XHRcdGNvbnN0IHNjcm9sbGFibGVQYXJlbnRzID0gZ2V0U2Nyb2xsYWJsZVBhcmVudHMobWVudSk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYWJsZVBhcmVudHMucmVkdWNlKChzaG91bGREcm9wVXA6IGJvb2xlYW4sIHBhcmVudDogSFRNTEVsZW1lbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyZW50UmVjdCA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0Y29uc3QgaXNCZWxvd1BhcmVudCA9ICEobWVudVJlY3QuYm90dG9tIDw9IHBhcmVudFJlY3QuYm90dG9tKTtcblx0XHRcdFx0cmV0dXJuIHNob3VsZERyb3BVcCB8fCBpc0JlbG93UGFyZW50O1xuXHRcdFx0fSwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHBhbmRzIHRoZSBkcm9wZG93biBtZW51IGluIHRoZSB2aWV3LlxuXHQgKi9cblx0b3Blbk1lbnUoKSB7XG5cdFx0Ly8gcHJldmVudHMgdGhlIGRyb3Bkb3duIGZyb20gb3BlbmluZyB3aGVuIGxpc3Qgb2YgaXRlbXMgaXMgZW1wdHlcblx0XHRpZiAodGhpcy52aWV3LmdldExpc3RJdGVtcygpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2Ryb3BVcCA9IGZhbHNlO1xuXHRcdHRoaXMubWVudUlzQ2xvc2VkID0gZmFsc2U7XG5cblx0XHQvLyBtb3ZlIHRoZSBkcm9wZG93biBsaXN0IHRvIHRoZSBib2R5IGlmIHdlJ3JlIG5vdCBhcHBlbmRpbmcgaW5saW5lXG5cdFx0Ly8gYW5kIHBvc2l0aW9uIGl0IHJlbGF0aXZlIHRvIHRoZSBkcm9wZG93biB3cmFwcGVyXG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0Y29uc3QgdGFyZ2V0ID0gdGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50O1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHR0aGlzLnZpc2liaWxpdHlTdWJzY3JpcHRpb24gPSB0aGlzLmVsZW1lbnRTZXJ2aWNlXG5cdFx0XHRcdC52aXNpYmlsaXR5KHRhcmdldCwgcGFyZW50KVxuXHRcdFx0XHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcblx0XHRcdFx0XHRpZiAoIXZhbHVlLnZpc2libGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdHRoaXMuX2FwcGVuZFRvQm9keSgpO1xuXHRcdH1cblxuXHRcdC8vIHNldCB0aGUgZHJvcGRvd24gbWVudSB0byBkcm9wIHVwIGlmIGl0J3MgbmVhciB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW5cblx0XHQvLyBzZXRUaW1lb3V0IGxldHMgdXMgbWVhc3VyZSBhZnRlciBpdCdzIHZpc2libGUgaW4gdGhlIERPTVxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZHJvcFVwID09PSBudWxsIHx8IHRoaXMuZHJvcFVwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5fZHJvcFVwID0gdGhpcy5fc2hvdWxkRHJvcFVwKCk7XG5cdFx0XHR9XG5cdFx0fSwgMCk7XG5cblx0XHQvLyB3ZSBiaW5kIG5vb3AgdG8gZG9jdW1lbnQuYm9keS5maXJzdEVsZW1lbnRDaGlsZCB0byBhbGxvdyBzYWZhcmkgdG8gZmlyZSBldmVudHNcblx0XHQvLyBmcm9tIGRvY3VtZW50LiBUaGVuIHdlIHVuYmluZCBldmVyeXRoaW5nIGxhdGVyIHRvIGtlZXAgdGhpbmdzIGxpZ2h0LlxuXHRcdGRvY3VtZW50LmJvZHkuZmlyc3RFbGVtZW50Q2hpbGQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMubm9vcCwgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQuYm9keS5maXJzdEVsZW1lbnRDaGlsZC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm5vb3AsIHRydWUpO1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLm91dHNpZGVDbGljaywgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5vdXRzaWRlS2V5LCB0cnVlKTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHRoaXMudmlldy5pbml0Rm9jdXMoKSwgMCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29sbGFwc2luZyB0aGUgZHJvcGRvd24gbWVudSBhbmQgcmVtb3ZpbmcgdW5uZWNlc3NhcnkgYEV2ZW50TGlzdGVuZXJzYC5cblx0ICovXG5cdGNsb3NlTWVudSgpIHtcblx0XHQvLyByZXR1cm4gZWFybHkgaWYgdGhlIG1lbnUgaXMgYWxyZWFkeSBjbG9zZWRcblx0XHRpZiAodGhpcy5tZW51SXNDbG9zZWQpIHsgcmV0dXJuOyB9XG5cdFx0dGhpcy5tZW51SXNDbG9zZWQgPSB0cnVlO1xuXHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdFx0dGhpcy5vbkNsb3NlLmVtaXQoKTtcblx0XHR0aGlzLmNsb3NlLmVtaXQoKTtcblxuXHRcdC8vIGZvY3VzIHRoZSB0cmlnZ2VyIGJ1dHRvbiB3aGVuIHdlIGNsb3NlIC4uLlxuXHRcdHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXG5cdFx0Ly8gcmVtb3ZlIHRoZSBjb25kaXRpb25hbCBvbmNlIHRoaXMgYXBpIGlzIHNldHRsZWQgYW5kIHBhcnQgb2YgYWJzdHJhY3QtZHJvcGRvd24tdmlldy5jbGFzc1xuXHRcdGlmICh0aGlzLnZpZXdbXCJkaXNhYmxlU2Nyb2xsXCJdKSB7XG5cdFx0XHR0aGlzLnZpZXdbXCJkaXNhYmxlU2Nyb2xsXCJdKCk7XG5cdFx0fVxuXG5cdFx0Ly8gbW92ZSB0aGUgbGlzdCBiYWNrIGluIHRoZSBjb21wb25lbnQgb24gY2xvc2Vcblx0XHRpZiAoIXRoaXMuYXBwZW5kSW5saW5lKSB7XG5cdFx0XHR0aGlzLnZpc2liaWxpdHlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblx0XHRcdHRoaXMuX2FwcGVuZFRvRHJvcGRvd24oKTtcblx0XHR9XG5cdFx0ZG9jdW1lbnQuYm9keS5maXJzdEVsZW1lbnRDaGlsZC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5ub29wLCB0cnVlKTtcblx0XHRkb2N1bWVudC5ib2R5LmZpcnN0RWxlbWVudENoaWxkLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMubm9vcCwgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMub3V0c2lkZUNsaWNrLCB0cnVlKTtcblx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm91dHNpZGVLZXksIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIHRvZ2dsaW5nIG1lbnUgc3RhdGVzIGJldHdlZW4gb3Blbi9leHBhbmRlZCBhbmQgY2xvc2VkL2NvbGxhcHNlZC5cblx0ICovXG5cdHRvZ2dsZU1lbnUoKSB7XG5cdFx0aWYgKHRoaXMubWVudUlzQ2xvc2VkKSB7XG5cdFx0XHR0aGlzLm9wZW5NZW51KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGlzVGVtcGxhdGUodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb250cm9scyB3aGVuIGl0J3MgbmVlZGVkIHRvIGFwcGx5IHRoZSBzZWxlY3Rpb24gZmVlZGJhY2tcblx0ICovXG5cdHByb3RlY3RlZCBjaGVja0ZvclJlb3JkZXIoKSB7XG5cdFx0Y29uc3QgdG9wQWZ0ZXJSZW9wZW4gPSB0aGlzLm1lbnVJc0Nsb3NlZCAmJiB0aGlzLnNlbGVjdGlvbkZlZWRiYWNrID09PSBcInRvcC1hZnRlci1yZW9wZW5cIjtcblx0XHRpZiAoKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiKSAmJiAodG9wQWZ0ZXJSZW9wZW4gfHwgdGhpcy5zZWxlY3Rpb25GZWVkYmFjayA9PT0gXCJ0b3BcIikpIHtcblx0XHRcdHRoaXMudmlldy5yZW9yZGVyU2VsZWN0ZWQoKTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==
|
|
915
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLFlBQVksRUFFWixTQUFTLEVBRVQsWUFBWSxFQUVaLFdBQVcsRUFDWCxXQUFXLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBRXpFLHlFQUF5RTtBQUN6RSxPQUFPLEVBRU4sRUFBRSxFQUNGLFlBQVksRUFDWixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSXRFLE9BQU8sRUFBa0Isb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7OztBQUV2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBZ0lILE1BQU0sT0FBTyxRQUFRO0lBdUtwQjs7T0FFRztJQUNILFlBQ1csVUFBc0IsRUFDdEIsSUFBVSxFQUNWLGVBQWdDLEVBQ2hDLGNBQThCO1FBSDlCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBTTtRQUNWLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUE1S2hDLE9BQUUsR0FBRyxZQUFZLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBS3JEOztXQUVHO1FBQ00sY0FBUyxHQUFHLEtBQUssQ0FBQztRQUszQjs7V0FFRztRQUNNLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQzFCOztXQUVHO1FBQ00saUJBQVksR0FBOEIsRUFBRSxDQUFD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WUFBWTtzQkFBcEIsS0FBSztnQkFLRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBSUcsWUFBWTtzQkFBcEIsS0FBSztnQkFPRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBS0csZUFBZTtzQkFBdkIsS0FBSztnQkFLRyxhQUFhO3NCQUFyQixLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFJSSxRQUFRO3NCQUFqQixNQUFNO2dCQUlHLE9BQU87c0JBQWhCLE1BQU07Z0JBSUcsS0FBSztzQkFBZCxNQUFNO2dCQUsrQyxJQUFJO3NCQUF6RCxZQUFZO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJTCxjQUFjO3NCQUE1RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJQSxZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRUUsU0FBUztzQkFBckQsV0FBVzt1QkFBQyw4QkFBOEI7Z0JBeU0zQyxTQUFTO3NCQURSLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHRFdmVudEVtaXR0ZXIsXG5cdEVsZW1lbnRSZWYsXG5cdENvbnRlbnRDaGlsZCxcblx0T25Jbml0LFxuXHRWaWV3Q2hpbGQsXG5cdEFmdGVyQ29udGVudEluaXQsXG5cdEhvc3RMaXN0ZW5lcixcblx0T25EZXN0cm95LFxuXHRIb3N0QmluZGluZyxcblx0VGVtcGxhdGVSZWYsXG5cdEFmdGVyVmlld0luaXRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuXG4vLyBPYnNlcnZhYmxlIGltcG9ydCBpcyByZXF1aXJlZCBoZXJlIHNvIHR5cGVzY3JpcHQgY2FuIGNvbXBpbGUgY29ycmVjdGx5XG5pbXBvcnQge1xuXHRPYnNlcnZhYmxlLFxuXHRvZixcblx0U3Vic2NyaXB0aW9uXG59IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB7IEFic3RyYWN0RHJvcGRvd25WaWV3IH0gZnJvbSBcIi4vYWJzdHJhY3QtZHJvcGRvd24tdmlldy5jbGFzc1wiO1xuaW1wb3J0IHsgSTE4biB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2kxOG5cIjtcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSBcIi4vbGlzdC1pdGVtLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgRHJvcGRvd25TZXJ2aWNlIH0gZnJvbSBcIi4vZHJvcGRvd24uc2VydmljZVwiO1xuaW1wb3J0IHsgRWxlbWVudFNlcnZpY2UsIGdldFNjcm9sbGFibGVQYXJlbnRzIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvdXRpbHNcIjtcbmltcG9ydCB7IGhhc1Njcm9sbGFibGVQYXJlbnRzIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvdXRpbHNcIjtcblxuLyoqXG4gKiBEcm9wLWRvd24gbGlzdHMgZW5hYmxlIHVzZXJzIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBpdGVtcyBmcm9tIGEgbGlzdC5cbiAqXG4gKiAjIyMjIE9wZW5pbmcgYmVoYXZpb3IvTGlzdCBET00gcGxhY2VtZW50XG4gKiBCeSBkZWZhdWx0IHRoZSBkcm9wZG93biB3aWxsIHRyeSB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHBsYWNlbWVudCBmb3IgdGhlIGRyb3Bkb3duIGxpc3QuXG4gKlxuICogSWYgaXQncyBub3QgY29udGFpbmVkIHdpdGhpbiBhbnkgc2Nyb2xsaW5nIGVsZW1lbnRzLCBpdCB3aWxsIG9wZW4gaW5saW5lLCBpZiBpdCBfaXNfXG4gKiBjb250YWluZWQgd2l0aGluIGEgc2Nyb2xsaW5nIGNvbnRhaW5lciBpdCB3aWxsIHRyeSB0byBvcGVuIGluIHRoZSBib2R5LCBvciBhbiBgY2RzLXBsYWNlaG9sZGVyYC5cbiAqXG4gKiBUbyBjb250cm9sIHRoaXMgYmVoYXZpb3IgeW91IGNhbiB1c2UgdGhlIGBhcHBlbmRJbmxpbmVgIGlucHV0OlxuICogLSBgW2FwcGVuZElubGluZV09XCJudWxsXCJgIGlzIHRoZSBkZWZhdWx0IChhdXRvIGRldGVjdGlvbilcbiAqIC0gYFthcHBlbmRJbmxpbmVdPVwiZmFsc2VcImAgd2lsbCBhbHdheXMgYXBwZW5kIHRvIHRoZSBib2R5L2BjZHMtcGxhY2Vob2xkZXJgXG4gKiAtIGBbYXBwZW5kSW5saW5lXT1cInRydWVcImAgd2lsbCBhbHdheXMgYXBwZW5kIGlubGluZSAobmV4dCB0byB0aGUgZHJvcGRvd24gYnV0dG9uKVxuICpcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbiAqIGBgYFxuICpcbiAqIFtTZWUgZGVtb10oLi4vLi4vP3BhdGg9L3N0b3J5L2NvbXBvbmVudHMtZHJvcGRvd24tLWJhc2ljKVxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLWRyb3Bkb3duLCBpYm0tZHJvcGRvd25cIixcblx0dGVtcGxhdGU6IGBcblx0PGxhYmVsXG5cdFx0Km5nSWY9XCJsYWJlbCAmJiAhc2tlbGV0b25cIlxuXHRcdFtmb3JdPVwiaWRcIlxuXHRcdGNsYXNzPVwiY2RzLS1sYWJlbFwiXG5cdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0J2Nkcy0tbGFiZWwtLWRpc2FibGVkJzogZGlzYWJsZWQsXG5cdFx0XHQnY2RzLS12aXN1YWxseS1oaWRkZW4nOiBoaWRlTGFiZWxcblx0XHR9XCI+XG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGxhYmVsKVwiPnt7bGFiZWx9fTwvbmctY29udGFpbmVyPlxuXHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUobGFiZWwpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxuXHQ8L2xhYmVsPlxuXHQ8ZGl2XG5cdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94XCJcblx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHQnY2RzLS1kcm9wZG93bic6IHR5cGUgIT09ICdtdWx0aScsXG5cdFx0XHQnY2RzLS1tdWx0aXNlbGVjdCc6IHR5cGUgPT09ICdtdWx0aScsXG5cdFx0XHQnY2RzLS1tdWx0aS1zZWxlY3QtLXNlbGVjdGVkJzogdHlwZSA9PT0gJ211bHRpJyAmJiBnZXRTZWxlY3RlZENvdW50KCkgPiAwLFxuXHRcdFx0J2Nkcy0tZHJvcGRvd24tLWxpZ2h0JzogdGhlbWUgPT09ICdsaWdodCcsXG5cdFx0XHQnY2RzLS1saXN0LWJveC0tbGlnaHQnOiB0aGVtZSA9PT0gJ2xpZ2h0Jyxcblx0XHRcdCdjZHMtLWxpc3QtYm94LS1pbmxpbmUnOiBpbmxpbmUsXG5cdFx0XHQnY2RzLS1za2VsZXRvbic6IHNrZWxldG9uLFxuXHRcdFx0J2Nkcy0tZHJvcGRvd24tLWRpc2FibGVkIGNkcy0tbGlzdC1ib3gtLWRpc2FibGVkJzogZGlzYWJsZWQsXG5cdFx0XHQnY2RzLS1kcm9wZG93bi0taW52YWxpZCc6IGludmFsaWQsXG5cdFx0XHQnY2RzLS1kcm9wZG93bi0td2FybmluZyBjZHMtLWxpc3QtYm94LS13YXJuaW5nJzogd2Fybixcblx0XHRcdCdjZHMtLWRyb3Bkb3duLS1zbSBjZHMtLWxpc3QtYm94LS1zbSc6IHNpemUgPT09ICdzbScsXG5cdFx0XHQnY2RzLS1kcm9wZG93bi0tbWQgY2RzLS1saXN0LWJveC0tbWQnOiBzaXplID09PSAnbWQnLFxuXHRcdFx0J2Nkcy0tZHJvcGRvd24tLWxnIGNkcy0tbGlzdC1ib3gtLWxnJzogc2l6ZSA9PT0gJ2xnJyxcblx0XHRcdCdjZHMtLWxpc3QtYm94LS1leHBhbmRlZCc6ICFtZW51SXNDbG9zZWRcblx0XHR9XCI+XG5cdFx0PGJ1dHRvblxuXHRcdFx0I2Ryb3Bkb3duQnV0dG9uXG5cdFx0XHRbaWRdPVwiaWRcIlxuXHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2ZpZWxkXCJcblx0XHRcdFtuZ0NsYXNzXT1cInsnYSc6ICFtZW51SXNDbG9zZWR9XCJcblx0XHRcdFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIW1lbnVJc0Nsb3NlZFwiXG5cdFx0XHRbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkXCJcblx0XHRcdGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcblx0XHRcdChjbGljayk9XCJkaXNhYmxlZCA/ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKSA6IHRvZ2dsZU1lbnUoKVwiXG5cdFx0XHQoYmx1cik9XCJvbkJsdXIoKVwiXG5cdFx0XHRbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/IHRydWUgOiBudWxsXCI+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdChjbGljayk9XCJjbGVhclNlbGVjdGVkKClcIlxuXHRcdFx0XHQoa2V5ZG93bi5lbnRlcik9XCJjbGVhclNlbGVjdGVkKClcIlxuXHRcdFx0XHQqbmdJZj1cInR5cGUgPT09ICdtdWx0aScgJiYgZ2V0U2VsZWN0ZWRDb3VudCgpID4gMFwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9fc2VsZWN0aW9uIGNkcy0tdGFnLS1maWx0ZXIgY2RzLS1saXN0LWJveF9fc2VsZWN0aW9uLS1tdWx0aVwiXG5cdFx0XHRcdHRhYmluZGV4PVwiMFwiXG5cdFx0XHRcdFt0aXRsZV09XCJjbGVhclRleHRcIj5cblx0XHRcdFx0e3tnZXRTZWxlY3RlZENvdW50KCl9fVxuXHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0Zm9jdXNhYmxlPVwiZmFsc2VcIlxuXHRcdFx0XHRcdHByZXNlcnZlQXNwZWN0UmF0aW89XCJ4TWlkWU1pZCBtZWV0XCJcblx0XHRcdFx0XHRzdHlsZT1cIndpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XCJcblx0XHRcdFx0XHRyb2xlPVwiaW1nXCJcblx0XHRcdFx0XHR4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcblx0XHRcdFx0XHR3aWR0aD1cIjE2XCJcblx0XHRcdFx0XHRoZWlnaHQ9XCIxNlwiXG5cdFx0XHRcdFx0dmlld0JveD1cIjAgMCAxNiAxNlwiXG5cdFx0XHRcdFx0YXJpYS1oaWRkZW49XCJ0cnVlXCI+XG5cdFx0XHRcdFx0PHBhdGggZD1cIk0xMiA0LjdsLS43LS43TDggNy4zIDQuNyA0bC0uNy43TDcuMyA4IDQgMTEuM2wuNy43TDggOC43bDMuMyAzLjMuNy0uN0w4LjcgOHpcIj48L3BhdGg+XG5cdFx0XHRcdDwvc3ZnPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cImlzUmVuZGVyU3RyaW5nKClcIiBjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2xhYmVsXCI+e3tnZXREaXNwbGF5U3RyaW5nVmFsdWUoKSB8IGFzeW5jfX08L3NwYW4+XG5cdFx0XHQ8bmctdGVtcGxhdGVcblx0XHRcdFx0Km5nSWY9XCIhaXNSZW5kZXJTdHJpbmcoKVwiXG5cdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRSZW5kZXJUZW1wbGF0ZUNvbnRleHQoKVwiXG5cdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRpc3BsYXlWYWx1ZVwiPlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDxzdmdcblx0XHRcdFx0Km5nSWY9XCJpbnZhbGlkXCJcblx0XHRcdFx0Y2xhc3M9XCJjZHMtLWRyb3Bkb3duX19pbnZhbGlkLWljb25cIlxuXHRcdFx0XHRjZHNJY29uPVwid2FybmluZy0tZmlsbGVkXCJcblx0XHRcdFx0c2l6ZT1cIjE2XCI+XG5cdFx0XHQ8L3N2Zz5cblx0XHRcdDxzdmdcblx0XHRcdFx0Km5nSWY9XCIhaW52YWxpZCAmJiB3YXJuXCJcblx0XHRcdFx0Y2RzSWNvbj1cIndhcm5pbmctLWFsdC0tZmlsbGVkXCJcblx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19pbnZhbGlkLWljb24gY2RzLS1saXN0LWJveF9faW52YWxpZC1pY29uLS13YXJuaW5nXCI+XG5cdFx0XHQ8L3N2Zz5cblx0XHRcdDxzcGFuIGNsYXNzPVwiY2RzLS1saXN0LWJveF9fbWVudS1pY29uXCI+XG5cdFx0XHRcdDxzdmdcblx0XHRcdFx0XHQqbmdJZj1cIiFza2VsZXRvblwiXG5cdFx0XHRcdFx0Y2RzSWNvbj1cImNoZXZyb24tLWRvd25cIlxuXHRcdFx0XHRcdHNpemU9XCIxNlwiXG5cdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJtZW51QnV0dG9uTGFiZWxcIlxuXHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1saXN0LWJveF9fbWVudS1pY29uLS1vcGVuJzogIW1lbnVJc0Nsb3NlZCB9XCI+XG5cdFx0XHRcdDwvc3ZnPlxuXHRcdFx0PC9zcGFuPlxuXHRcdDwvYnV0dG9uPlxuXHRcdDxkaXZcblx0XHRcdCNkcm9wZG93bk1lbnVcblx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLXVwJzogdGhpcy5kcm9wVXAgIT09IG51bGwgJiYgdGhpcy5kcm9wVXAgIT09IHVuZGVmaW5lZCA/IGRyb3BVcCA6IF9kcm9wVXBcblx0XHRcdH1cIj5cblx0XHRcdDxuZy1jb250ZW50ICpuZ0lmPVwiIW1lbnVJc0Nsb3NlZFwiPjwvbmctY29udGVudD5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cdDxkaXZcblx0XHQqbmdJZj1cImhlbHBlclRleHQgJiYgIWludmFsaWQgJiYgIXdhcm4gJiYgIXNrZWxldG9uXCJcblx0XHRjbGFzcz1cImNkcy0tZm9ybV9faGVscGVyLXRleHRcIlxuXHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdCdjZHMtLWZvcm1fX2hlbHBlci10ZXh0LS1kaXNhYmxlZCc6IGRpc2FibGVkXG5cdFx0fVwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShoZWxwZXJUZXh0KVwiPnt7aGVscGVyVGV4dH19PC9uZy1jb250YWluZXI+XG5cdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShoZWxwZXJUZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlbHBlclRleHRcIj48L25nLXRlbXBsYXRlPlxuXHQ8L2Rpdj5cblx0PGRpdiAqbmdJZj1cImludmFsaWRcIiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShpbnZhbGlkVGV4dClcIj57eyBpbnZhbGlkVGV4dCB9fTwvbmctY29udGFpbmVyPlxuXHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW52YWxpZFRleHRcIj48L25nLXRlbXBsYXRlPlxuXHQ8L2Rpdj5cblx0PGRpdiAqbmdJZj1cIiFpbnZhbGlkICYmIHdhcm5cIiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZSh3YXJuVGV4dClcIj57e3dhcm5UZXh0fX08L25nLWNvbnRhaW5lcj5cblx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKHdhcm5UZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndhcm5UZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0PC9kaXY+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IERyb3Bkb3duLFxuXHRcdFx0bXVsdGk6IHRydWVcblx0XHR9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd24gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXHRzdGF0aWMgZHJvcGRvd25Db3VudCA9IDA7XG5cdEBJbnB1dCgpIGlkID0gYGRyb3Bkb3duLSR7RHJvcGRvd24uZHJvcGRvd25Db3VudCsrfWA7XG5cdC8qKlxuXHQgKiBMYWJlbCBmb3IgdGhlIGRyb3Bkb3duLlxuXHQgKi9cblx0QElucHV0KCkgbGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBIaWRlIGxhYmVsIHdoaWxlIGtlZXBpbmcgaXQgYWNjZXNzaWJsZSBmb3Igc2NyZWVuIHJlYWRlcnNcblx0ICovXG5cdEBJbnB1dCgpIGhpZGVMYWJlbCA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgb3B0aW9uYWwgaGVscGVyIHRleHQuXG5cdCAqL1xuXHRASW5wdXQoKSBoZWxwZXJUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIG5vIGl0ZW0gaXMgc2VsZWN0ZWQuXG5cdCAqL1xuXHRASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XG5cdC8qKlxuXHQgKiBUaGUgc2VsZWN0ZWQgdmFsdWUgZnJvbSB0aGUgYERyb3Bkb3duYC4gQ2FuIGJlIGEgc3RyaW5nIG9yIHRlbXBsYXRlLlxuXHQgKi9cblx0QElucHV0KCkgZGlzcGxheVZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gXCJcIjtcblx0LyoqXG5cdCAqIFNldHMgdGhlIG9wdGlvbmFsIGNsZWFyIGJ1dHRvbiB0b29sdGlwIHRleHQuXG5cdCAqL1xuXHRASW5wdXQoKSBjbGVhclRleHQ6IHN0cmluZyA9IHRoaXMuaTE4bi5nZXQoKS5EUk9QRE9XTi5DTEVBUjtcblx0LyoqXG5cdCAqIFNpemUgdG8gcmVuZGVyIHRoZSBkcm9wZG93biBmaWVsZC5cblx0ICovXG5cdEBJbnB1dCgpIHNpemU6IFwic21cIiB8IFwibWRcIiB8IFwibGdcIiA9IFwibWRcIjtcblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciBvciBub3QgdGhlIGBEcm9wZG93bmAgc3VwcG9ydHMgc2VsZWN0aW5nIG11bHRpcGxlIGl0ZW1zIGFzIG9wcG9zZWQgdG8gc2luZ2xlXG5cdCAqIGl0ZW0gc2VsZWN0aW9uLlxuXHQgKi9cblx0QElucHV0KCkgdHlwZTogXCJzaW5nbGVcIiB8IFwibXVsdGlcIiA9IFwic2luZ2xlXCI7XG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2NSAtIFVzZSBgY2RzTGF5ZXJgIGRpcmVjdGl2ZSBpbnN0ZWFkXG5cdCAqIGBsaWdodGAgb3IgYGRhcmtgIGRyb3Bkb3duIHRoZW1lXG5cdCAqL1xuXHRASW5wdXQoKSB0aGVtZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgPSBcImRhcmtcIjtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gZGlzYWJsZSB0aGUgZHJvcGRvd24uXG5cdCAqL1xuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgYSBsb2FkaW5nIGRyb3Bkb3duLlxuXHQgKi9cblx0QElucHV0KCkgc2tlbGV0b24gPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgZm9yIGFuIGlubGluZSBkcm9wZG93bi5cblx0ICovXG5cdEBJbnB1dCgpIGlubGluZSA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgYSBkcm9wZG93biB3aXRob3V0IGFycm93IGtleSBhY3RpdmF0aW9uLlxuXHQgKi9cblx0QElucHV0KCkgZGlzYWJsZUFycm93S2V5cyA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgaW52YWxpZCBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFZhbHVlIGRpc3BsYXllZCBpZiBkcm9wZG93biBpcyBpbiBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZFRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgICogU2V0IHRvIGB0cnVlYCB0byBzaG93IGEgd2FybmluZyAoY29udGVudHMgc2V0IGJ5IHdhcm5pbmdUZXh0KVxuXHQgICovXG5cdEBJbnB1dCgpIHdhcm4gPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldHMgdGhlIHdhcm5pbmcgdGV4dFxuXHQgKi9cblx0QElucHV0KCkgd2FyblRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBzZXQgdG8gYHRydWVgIHRvIHBsYWNlIHRoZSBkcm9wZG93biB2aWV3IGlubGluZSB3aXRoIHRoZSBjb21wb25lbnRcblx0ICovXG5cdEBJbnB1dCgpIGFwcGVuZElubGluZTogYm9vbGVhbiA9IG51bGw7XG5cdC8qKlxuXHQgKiBRdWVyeSBzdHJpbmcgZm9yIHRoZSBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIGBEcm9wZG93bmAuXG5cdCAqIFVzZWQgdG8gdHJpZ2dlciBjbG9zaW5nIHRoZSBkcm9wZG93biBpZiBpdCBzY3JvbGxzIG91dHNpZGUgb2YgdGhlIHZpZXdwb3J0IG9mIHRoZSBgc2Nyb2xsYWJsZUNvbnRhaW5lcmAuXG5cdCAqL1xuXHRASW5wdXQoKSBzY3JvbGxhYmxlQ29udGFpbmVyOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgdGhlIHByb3BlcnR5IHRvIGJlIHVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSB0byBgbmdNb2RlbGBcblx0ICovXG5cdEBJbnB1dCgpIGl0ZW1WYWx1ZUtleTogc3RyaW5nO1xuXHQvKipcblx0ICogU3BlY2lmeSBmZWVkYmFjayAobW9kZSkgb2YgdGhlIHNlbGVjdGlvbi5cblx0ICogYHRvcGA6IHNlbGVjdGVkIGl0ZW0ganVtcHMgdG8gdG9wXG5cdCAqIGBmaXhlZGA6IHNlbGVjdGVkIGl0ZW0gc3RheXMgYXQgaXQncyBwb3NpdGlvblxuXHQgKiBgdG9wLWFmdGVyLXJlb3BlbmA6IHNlbGVjdGVkIGl0ZW0ganVtcCB0byB0b3AgYWZ0ZXIgcmVvcGVuIGRyb3Bkb3duXG5cdCAqL1xuXHRASW5wdXQoKSBzZWxlY3Rpb25GZWVkYmFjazogXCJ0b3BcIiB8IFwiZml4ZWRcIiB8IFwidG9wLWFmdGVyLXJlb3BlblwiID0gXCJ0b3AtYWZ0ZXItcmVvcGVuXCI7XG5cdC8qKlxuXHQgKiBBY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgYnV0dG9uIHRoYXQgb3BlbnMgdGhlIGRyb3Bkb3duIGxpc3QuXG5cdCAqIERlZmF1bHRzIHRvIHRoZSBgRFJPUERPV04uT1BFTmAgdmFsdWUgZnJvbSB0aGUgaTE4biBzZXJ2aWNlLlxuXHQgKi9cblx0QElucHV0KCkgbWVudUJ1dHRvbkxhYmVsID0gdGhpcy5pMThuLmdldCgpLkRST1BET1dOLk9QRU47XG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgbGFiZWwgZm9yIHRoZSBcIiMgc2VsZWN0ZWRcIiB0ZXh0LlxuXHQgKiBEZWZhdWx0cyB0byB0aGUgYERST1BET1dOLlNFTEVDVEVEYCB2YWx1ZSBmcm9tIHRoZSBpMThuIHNlcnZpY2UuXG5cdCAqL1xuXHRASW5wdXQoKSBzZWxlY3RlZExhYmVsID0gdGhpcy5pMThuLmdldCgpLkRST1BET1dOLlNFTEVDVEVEO1xuXHQvKipcblx0ICogT3ZlcnJpZGVzIHRoZSBhdXRvbWF0aWMgZHJvcFVwLlxuXHQgKi9cblx0QElucHV0KCkgZHJvcFVwOiBib29sZWFuO1xuXHQvKipcblx0ICogRW1pdHMgc2VsZWN0aW9uIGV2ZW50cy5cblx0ICovXG5cdEBPdXRwdXQoKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPE9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPE9iamVjdD4oKTtcblx0LyoqXG5cdCAqIEVtaXRzIGV2ZW50IG5vdGlmeWluZyB0byBvdGhlciBjbGFzc2VzIHRoYXQgdGhlIGBEcm9wZG93bmAgaGFzIGJlZW4gY2xvc2VkIChjb2xsYXBzZWQpLlxuXHQgKi9cblx0QE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cdC8qKlxuXHQgKiBFbWl0cyBldmVudCBub3RpZnlpbmcgdG8gb3RoZXIgY2xhc3NlcyB0aGF0IHRoZSBgRHJvcGRvd25gIGhhcyBiZWVuIGNsb3NlZCAoY29sbGFwc2VkKS5cblx0ICovXG5cdEBPdXRwdXQoKSBjbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuXHQvKipcblx0ICogTWFpbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBgQWJzdHJhY3REcm9wZG93blZpZXdgIG9iamVjdCB3aXRoaW4gdGhlIGNvbnRlbnQgRE9NLlxuXHQgKi9cblx0QENvbnRlbnRDaGlsZChBYnN0cmFjdERyb3Bkb3duVmlldywgeyBzdGF0aWM6IHRydWUgfSkgdmlldzogQWJzdHJhY3REcm9wZG93blZpZXc7XG5cdC8qKlxuXHQgKiBNYWludGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZpZXcgRE9NIGVsZW1lbnQgb2YgdGhlIGBEcm9wZG93bmAgYnV0dG9uLlxuXHQgKi9cblx0QFZpZXdDaGlsZChcImRyb3Bkb3duQnV0dG9uXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRyb3Bkb3duQnV0dG9uO1xuXHQvKipcblx0ICogVmlld0NoaWQgb2YgdGhlIGRyb3Bkb3duIHZpZXcuXG5cdCAqL1xuXHRAVmlld0NoaWxkKFwiZHJvcGRvd25NZW51XCIsIHsgc3RhdGljOiB0cnVlIH0pIGRyb3Bkb3duTWVudTtcblxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWRyb3Bkb3duX193cmFwcGVyXCIpIGhvc3RDbGFzcyA9IHRydWU7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGlmIHRoZSBkcm9wZG93biBpcyBjbG9zZWQgKG5vdCBleHBhbmRlZCkuXG5cdCAqL1xuXHRtZW51SXNDbG9zZWQgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBjb250cm9scyB3aGV0aGVyIHRoZSBgZHJvcC11cGAgY2xhc3MgaXMgYXBwbGllZFxuXHQgKi9cblx0X2Ryb3BVcCA9IGZhbHNlO1xuXG5cdC8vIC5iaW5kIGNyZWF0ZXMgYSBuZXcgZnVuY3Rpb24sIHNvIHdlIGRlY2xhcmUgdGhlIG1ldGhvZHMgYmVsb3dcblx0Ly8gYnV0IC5iaW5kIHRoZW0gdXAgaGVyZVxuXHRub29wID0gdGhpcy5fbm9vcC5iaW5kKHRoaXMpO1xuXHRvdXRzaWRlQ2xpY2sgPSB0aGlzLl9vdXRzaWRlQ2xpY2suYmluZCh0aGlzKTtcblx0b3V0c2lkZUtleSA9IHRoaXMuX291dHNpZGVLZXkuYmluZCh0aGlzKTtcblx0a2V5Ym9hcmROYXYgPSB0aGlzLl9rZXlib2FyZE5hdi5iaW5kKHRoaXMpO1xuXG5cdHByb3RlY3RlZCB2aXNpYmlsaXR5U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG5cdHByb3RlY3RlZCBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IHRoaXMuX25vb3A7XG5cblx0Ly8gcHJpbWFyaWx5IHVzZWQgdG8gY2FwdHVyZSBhbmQgcHJvcGFnYXRlIGlucHV0IHRvIGB3cml0ZVZhbHVlYCBiZWZvcmUgdGhlIGNvbnRlbnQgaXMgYXZhaWxhYmxlXG5cdHByaXZhdGUgX3dyaXR0ZW5WYWx1ZTogYW55ID0gW107XG5cdHByb3RlY3RlZCBnZXQgd3JpdHRlblZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLl93cml0dGVuVmFsdWU7XG5cdH1cblx0cHJvdGVjdGVkIHNldCB3cml0dGVuVmFsdWUodmFsOiBhbnlbXSkge1xuXHRcdGlmICh2YWwgJiYgdmFsLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5jbGVhclNlbGVjdGVkKCk7XG5cdFx0fVxuXHRcdHRoaXMuX3dyaXR0ZW5WYWx1ZSA9IHZhbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIERyb3Bkb3duLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG5cdFx0cHJvdGVjdGVkIGkxOG46IEkxOG4sXG5cdFx0cHJvdGVjdGVkIGRyb3Bkb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlLFxuXHRcdHByb3RlY3RlZCBlbGVtZW50U2VydmljZTogRWxlbWVudFNlcnZpY2UpIHt9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGB0eXBlYCBwcm9wZXJ0eSBpbiB0aGUgYEBDb250ZW50Q2hpbGRgLlxuXHQgKiBUaGUgYHR5cGVgIHByb3BlcnR5IHNwZWNpZmllcyB3aGV0aGVyIHRoZSBgRHJvcGRvd25gIGFsbG93cyBzaW5nbGUgc2VsZWN0aW9uIG9yIG11bHRpIHNlbGVjdGlvbi5cblx0ICovXG5cdG5nT25Jbml0KCkge1xuXHRcdGlmICh0aGlzLnZpZXcpIHtcblx0XHRcdHRoaXMudmlldy50eXBlID0gdGhpcy50eXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBjbGFzc2VzIGFuZCBzdWJzY3JpYmVzIHRvIGV2ZW50cyBmb3Igc2luZ2xlIG9yIG11bHRpIHNlbGVjdGlvbi5cblx0ICovXG5cdG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcblx0XHRpZiAoIXRoaXMudmlldykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoKHRoaXMud3JpdHRlblZhbHVlICYmIHRoaXMud3JpdHRlblZhbHVlLmxlbmd0aCkgfHwgdHlwZW9mIHRoaXMud3JpdHRlblZhbHVlID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHR0aGlzLndyaXRlVmFsdWUodGhpcy53cml0dGVuVmFsdWUpO1xuXHRcdH1cblx0XHR0aGlzLnZpZXcudHlwZSA9IHRoaXMudHlwZTtcblx0XHR0aGlzLnZpZXcuc2l6ZSA9IHRoaXMuc2l6ZTtcblxuXHRcdC8vIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBldmVudCBpcyBvcmdhbmljIChpc1VwZGF0ZSA9PT0gZmFsc2UpIG9yIHByb2dyYW1tYXRpY1xuXHRcdGNvbnN0IGlzVXBkYXRlID0gZXZlbnQgPT4gZXZlbnQgJiYgZXZlbnQuaXNVcGRhdGU7XG5cblx0XHR0aGlzLnZpZXcuc2VsZWN0LnN1YnNjcmliZShldmVudCA9PiB7XG5cdFx0XHRpZiAodGhpcy50eXBlID09PSBcInNpbmdsZVwiICYmICFpc1VwZGF0ZShldmVudCkgJiYgIUFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG5cdFx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0XHRcdGlmIChldmVudC5pdGVtICYmIGV2ZW50Lml0ZW0uc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkpIHtcblx0XHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKGV2ZW50Lml0ZW1bdGhpcy5pdGVtVmFsdWVLZXldKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UoZXZlbnQuaXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwibXVsdGlcIiAmJiAhaXNVcGRhdGUoZXZlbnQpKSB7XG5cdFx0XHRcdC8vIGlmIHdlIGhhdmUgYSBgdmFsdWVgIHNlbGVjdG9yIGFuZCBzZWxlY3RlZCBpdGVtcyBtYXAgdGhlbSBhcHByb3ByaWF0ZWx5XG5cdFx0XHRcdGlmICh0aGlzLml0ZW1WYWx1ZUtleSAmJiB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlcyA9IHRoaXMudmlldy5nZXRTZWxlY3RlZCgpLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldKTtcblx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSh2YWx1ZXMpO1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSBqdXN0IHBhc3MgdXAgdGhlIHZhbHVlcyBmcm9tIGBnZXRTZWxlY3RlZGBcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIG9ubHkgZW1pdCBzZWxlY3RlZCBmb3IgXCJvcmdhbmljXCIgc2VsZWN0aW9uc1xuXHRcdFx0aWYgKCFpc1VwZGF0ZShldmVudCkpIHtcblx0XHRcdFx0dGhpcy5jaGVja0ZvclJlb3JkZXIoKTtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZC5lbWl0KGV2ZW50KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHQvLyBpZiBhcHBlbmRJbmxpbmUgaXMgZGVmYXVsdCB2YWx1ZWQgKG51bGwpIHdlIHNob3VsZDpcblx0XHQvLyAxLiBpZiB0aGVyZSBhcmUgc2Nyb2xsYWJsZSBwYXJlbnRzIChub3QgaW5jbHVkaW5nIGJvZHkpIGRvbid0IGFwcGVuZCBpbmxpbmVcblx0XHQvLyAgICB0aGlzIHNob3VsZCBhbHNvIGNvdmVyIHRoZSBjYXNlIHdoZXJlIHRoZSBkcm9wZG93biBpcyBpbiBhIG1vZGFsXG5cdFx0Ly8gICAgKHdoZXJlIHdlIF9kb18gd2FudCB0byBhcHBlbmQgdG8gdGhlIHBsYWNlaG9sZGVyKVxuXHRcdGlmICh0aGlzLmFwcGVuZElubGluZSA9PT0gbnVsbCAmJiBoYXNTY3JvbGxhYmxlUGFyZW50cyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpIHtcblx0XHRcdHRoaXMuYXBwZW5kSW5saW5lID0gZmFsc2U7XG5cdFx0XHQvLyAyLiBvdGhlcndpc2Ugd2Ugc2hvdWxkIGFwcGVuZCBpbmxpbmVcblx0XHR9IGVsc2UgaWYgKHRoaXMuYXBwZW5kSW5saW5lID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLmFwcGVuZElubGluZSA9IHRydWU7XG5cdFx0fVxuXHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZpbmcgdGhlIGBEcm9wZG93bmAgZnJvbSB0aGUgYm9keSBpZiBpdCBpcyBhcHBlbmRlZCB0byB0aGUgYm9keS5cblx0ICovXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdGlmICghdGhpcy5hcHBlbmRJbmxpbmUpIHtcblx0XHRcdHRoaXMuX2FwcGVuZFRvRHJvcGRvd24oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJvcGFnYXRlcyB0aGUgaW5qZWN0ZWQgYHZhbHVlYC5cblx0ICovXG5cdHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuXHRcdC8vIGNhY2hlIHRoZSB3cml0dGVuIHZhbHVlIHNvIHdlIGNhbiB1c2UgaXQgaW4gYEFmdGVyQ29udGVudEluaXRgXG5cdFx0dGhpcy53cml0dGVuVmFsdWUgPSB2YWx1ZTtcblx0XHR0aGlzLnZpZXcub25JdGVtc1JlYWR5KCgpID0+IHtcblx0XHRcdC8vIHByb3BhZ2F0ZSBudWxsL2ZhbHNleSBhcyBhbiBhcnJheSAoZGVzZWxlY3QgZXZlcnl0aGluZylcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKFt2YWx1ZV0pO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIpIHtcblx0XHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5KSB7XG5cdFx0XHRcdFx0Ly8gY2xvbmUgdGhlIHNwZWNpZmllZCBpdGVtIGFuZCB1cGRhdGUgaXRzIHN0YXRlXG5cdFx0XHRcdFx0Y29uc3QgbmV3VmFsdWUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnZpZXcuZ2V0TGlzdEl0ZW1zKCkuZmluZChpdGVtID0+IGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldID09PSB2YWx1ZSkpO1xuXHRcdFx0XHRcdG5ld1ZhbHVlLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQoW25ld1ZhbHVlXSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gcGFzcyB0aGUgc2luZ3VsYXIgdmFsdWUgYXMgYW4gYXJyYXkgb2YgTGlzdEl0ZW1cblx0XHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQoW3ZhbHVlXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICh0aGlzLml0ZW1WYWx1ZUtleSkge1xuXHRcdFx0XHRcdC8vIGNsb25lIHRoZSBpdGVtcyBhbmQgdXBkYXRlIHRoZWlyIHN0YXRlIGJhc2VkIG9uIHRoZSByZWNlaXZlZCB2YWx1ZSBhcnJheVxuXHRcdFx0XHRcdC8vIHRoaXMgd2F5IHdlIGRvbid0IGxvc2UgYW55IGFkZGl0aW9uYWwgbWV0YWRhdGEgdGhhdCBtYXkgYmUgcGFzc2VkIGluIHZpYSB0aGUgYGl0ZW1zYCBJbnB1dFxuXHRcdFx0XHRcdGxldCBuZXdWYWx1ZXMgPSBbXTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgdmFsdWUpIHtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnZpZXcuZ2V0TGlzdEl0ZW1zKCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldID09PSB2KSB7XG5cdFx0XHRcdFx0XHRcdFx0bmV3VmFsdWVzLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgaXRlbSwgeyBzZWxlY3RlZDogdHJ1ZSB9KSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKG5ld1ZhbHVlcyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gd2UgY2FuIHNhZmVseSBhc3N1bWUgd2UncmUgcGFzc2luZyBhbiBhcnJheSBvZiBgTGlzdEl0ZW1gc1xuXHRcdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZCh2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRvbkJsdXIoKSB7XG5cdFx0dGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xuXHR9XG5cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcmluZyB0aGUgZnVuY3Rpb24gaW5qZWN0ZWQgdG8gY29udHJvbCB0aGUgdG91Y2ggdXNlIG9mIHRoZSBgRHJvcGRvd25gLlxuXHQgKi9cblx0cmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuXHRcdHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBmdW5jdGlvbiBwYXNzZWQgaW4gYnkgYHJlZ2lzdGVyT25DaGFuZ2VgXG5cdCAqL1xuXHRwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG5cblx0LyoqXG5cdCAqIGBDb250cm9sVmFsdWVBY2Nlc3NvcmAgbWV0aG9kIHRvIHByb2dyYW1tYXRpY2FsbHkgZGlzYWJsZSB0aGUgZHJvcGRvd24uXG5cdCAqXG5cdCAqIGV4OiBgdGhpcy5mb3JtR3JvdXAuZ2V0KFwibXlEcm9wZG93blwiKS5kaXNhYmxlKCk7YFxuXHQgKlxuXHQgKiBAcGFyYW0gaXNEaXNhYmxlZCBgdHJ1ZWAgdG8gZGlzYWJsZSB0aGUgaW5wdXRcblx0ICovXG5cdHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMga2V5Ym9hcmQgZnVuY3Rpb25hbGl0eSBmb3IgbmF2aWdhdGlvbiwgc2VsZWN0aW9uIGFuZCBjbG9zaW5nIG9mIHRoZSBgRHJvcGRvd25gLlxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lcihcImtleWRvd25cIiwgW1wiJGV2ZW50XCJdKVxuXHRvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblx0XHRpZiAoKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikgJiYgIXRoaXMubWVudUlzQ2xvc2VkKSB7XG5cdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsgIC8vIGRvbid0IHVuaW50ZW50aW9uYWxseSBjbG9zZSBvdGhlciB3aWRnZXRzIHRoYXQgbGlzdGVuIGZvciBFc2NhcGVcblx0XHR9XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0XHR0aGlzLmRyb3Bkb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMubWVudUlzQ2xvc2VkICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSkge1xuXHRcdFx0aWYgKHRoaXMuZGlzYWJsZUFycm93S2V5cyAmJiAoZXZlbnQua2V5ID09PSBcIkFycm93RG93blwiIHx8IGV2ZW50LmtleSA9PT0gXCJBcnJvd1VwXCIpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLm9wZW5NZW51KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLm1lbnVJc0Nsb3NlZCAmJiBldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLm1lbnVJc0Nsb3NlZCAmJiBldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgZXZlbnQuc2hpZnRLZXkpIHtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiKSB7IHJldHVybjsgfVxuXG5cdFx0aWYgKHRoaXMubWVudUlzQ2xvc2VkKSB7XG5cdFx0XHR0aGlzLmNsb3NlZERyb3Bkb3duTmF2aWdhdGlvbihldmVudCk7XG5cdFx0fVxuXHR9XG5cblx0Y2xvc2VkRHJvcGRvd25OYXZpZ2F0aW9uKGV2ZW50KSB7XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0Rvd25cIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMudmlldy5nZXRDdXJyZW50SXRlbSgpLnNlbGVjdGVkID0gZmFsc2U7XG5cdFx0XHRsZXQgaXRlbSA9IHRoaXMudmlldy5nZXROZXh0SXRlbSgpO1xuXHRcdFx0aWYgKGl0ZW0pIHsgaXRlbS5zZWxlY3RlZCA9IHRydWU7IH1cblx0XHR9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd1VwXCIpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLnZpZXcuZ2V0Q3VycmVudEl0ZW0oKS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0bGV0IGl0ZW0gPSB0aGlzLnZpZXcuZ2V0UHJldkl0ZW0oKTtcblx0XHRcdGlmIChpdGVtKSB7IGl0ZW0uc2VsZWN0ZWQgPSB0cnVlOyB9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGRpc3BsYXkgdmFsdWUgaWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24gYW5kIGRpc3BsYXlWYWx1ZSBpcyBzZXQsXG5cdCAqIGlmIHRoZXJlIGlzIGp1c3QgYSBzZWxlY3Rpb24gdGhlIExpc3RJdGVtIGNvbnRlbnQgcHJvcGVydHkgd2lsbCBiZSByZXR1cm5lZCxcblx0ICogb3RoZXJ3aXNlIHRoZSBwbGFjZWhvbGRlciB3aWxsIGJlIHJldHVybmVkLlxuXHQgKi9cblx0Z2V0RGlzcGxheVN0cmluZ1ZhbHVlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG5cdFx0aWYgKCF0aGlzLnZpZXcgfHwgdGhpcy5za2VsZXRvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgc2VsZWN0ZWQgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKTtcblx0XHRpZiAoc2VsZWN0ZWQubGVuZ3RoICYmICghdGhpcy5kaXNwbGF5VmFsdWUgfHwgIXRoaXMuaXNSZW5kZXJTdHJpbmcoKSkpIHtcblx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwibXVsdGlcIikge1xuXHRcdFx0XHRyZXR1cm4gb2YodGhpcy5wbGFjZWhvbGRlcik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gb2Yoc2VsZWN0ZWRbMF0uY29udGVudCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChzZWxlY3RlZC5sZW5ndGggJiYgdGhpcy5pc1JlbmRlclN0cmluZygpKSB7XG5cdFx0XHRyZXR1cm4gb2YodGhpcy5kaXNwbGF5VmFsdWUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9mKHRoaXMucGxhY2Vob2xkZXIpO1xuXHR9XG5cblx0aXNSZW5kZXJTdHJpbmcoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHR5cGVvZiB0aGlzLmRpc3BsYXlWYWx1ZSA9PT0gXCJzdHJpbmdcIjtcblx0fVxuXG5cdGdldFJlbmRlclRlbXBsYXRlQ29udGV4dCgpIHtcblx0XHRpZiAoIXRoaXMudmlldykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgc2VsZWN0ZWQgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKTtcblx0XHRpZiAodGhpcy50eXBlID09PSBcIm11bHRpXCIpIHtcblx0XHRcdHJldHVybiB7IGl0ZW1zOiBzZWxlY3RlZCB9O1xuXHRcdH0gZWxzZSBpZiAoc2VsZWN0ZWQgJiYgc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIHsgaXRlbTogc2VsZWN0ZWRbMF0gfTsgLy8gdGhpcyBpcyB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGRyb3Bkb3duLWxpc3QgdGVtcGxhdGVcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblx0fVxuXG5cdGdldFNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcblx0XHRpZiAodGhpcy52aWV3LmdldFNlbGVjdGVkKCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKS5sZW5ndGg7XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJTZWxlY3RlZCgpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmdldFNlbGVjdGVkQ291bnQoKSA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy52aWV3LmdldExpc3RJdGVtcygpKSB7XG5cdFx0XHRpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG5cdFx0fVxuXHRcdHRoaXMuc2VsZWN0ZWQuZW1pdChbXSk7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UoW10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGEgdmFsdWUgc2VsZWN0ZWQuXG5cdCAqL1xuXHR2YWx1ZVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSkgeyByZXR1cm4gdHJ1ZTsgfVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdF9ub29wKCkgeyB9XG5cdC8qKlxuXHQgKiBIYW5kbGVzIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBgRHJvcGRvd25gLlxuXHQgKi9cblx0X291dHNpZGVDbGljayhldmVudCkge1xuXHRcdGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuXHRcdFx0Ly8gaWYgd2UncmUgYXBwZW5kVG9Cb2R5IHRoZSBsaXN0IGlzbid0IHdpdGhpbiB0aGUgX2VsZW1lbnRSZWYsXG5cdFx0XHQvLyBzbyB3ZSd2ZSBnb3QgdG8gY2hlY2sgaWYgb3VyIHRhcmdldCBpcyBwb3NzaWJseSBpbiB0aGVyZSB0b28uXG5cdFx0XHQhdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblx0fVxuXHRfb3V0c2lkZUtleShldmVudCkge1xuXHRcdGlmICghdGhpcy5tZW51SXNDbG9zZWQgJiYgZXZlbnQua2V5ID09PSBcIlRhYlwiICYmIHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgc28gdXNlcnMgYXJlIGNvbnRyb2xsaW5nIHRoZSBgRHJvcGRvd25gIGluc3RlYWQgb2YgdW5pbnRlbnRpb25hbGx5IGNvbnRyb2xsaW5nIG91dHNpZGUgZWxlbWVudHMuXG5cdCAqL1xuXHRfa2V5Ym9hcmROYXYoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiICYmICF0aGlzLm1lbnVJc0Nsb3NlZCkge1xuXHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7ICAvLyBkb24ndCB1bmludGVudGlvbmFsbHkgY2xvc2UgbW9kYWwgaWYgaW5zaWRlIG9mIGl0XG5cdFx0fVxuXHRcdGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdFx0dGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5tZW51SXNDbG9zZWQgJiYgZXZlbnQua2V5ID09PSBcIlRhYlwiKSB7XG5cdFx0XHQvLyB0aGlzIHdheSBmb2N1cyB3aWxsIHN0YXJ0IG9uIHRoZSBuZXh0IGZvY3VzYWJsZSBpdGVtIGZyb20gdGhlIGRyb3Bkb3duXG5cdFx0XHQvLyBub3QgdGhlIHRvcCBvZiB0aGUgYm9keSFcblx0XHRcdHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0dGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoXCJrZXlkb3duXCIsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwga2V5OiBcIlRhYlwiIH0pKTtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGBEcm9wZG93bmAgbGlzdCBhcHBlbmRpbmcgaXQgdG8gdGhlIGRyb3Bkb3duIHBhcmVudCBvYmplY3QgaW5zdGVhZCBvZiB0aGUgYm9keS5cblx0ICovXG5cdF9hcHBlbmRUb0Ryb3Bkb3duKCkge1xuXHRcdHRoaXMuZHJvcGRvd25TZXJ2aWNlLmFwcGVuZFRvRHJvcGRvd24odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlib2FyZE5hdiwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgYERyb3Bkb3duYCBsaXN0IGFzIGFuIGVsZW1lbnQgdGhhdCBpcyBhcHBlbmRlZCB0byB0aGUgRE9NIGJvZHkuXG5cdCAqL1xuXHRfYXBwZW5kVG9Cb2R5KCkge1xuXHRcdGNvbnN0IGxpZ2h0Q2xhc3MgPSB0aGlzLnRoZW1lID09PSBcImxpZ2h0XCIgPyBcIiBjZHMtLWxpc3QtYm94LS1saWdodFwiIDogXCJcIjtcblx0XHRjb25zdCBleHBhbmRlZENsYXNzID0gIXRoaXMubWVudUlzQ2xvc2VkID8gXCIgY2RzLS1saXN0LWJveC0tZXhwYW5kZWRcIiA6IFwiXCI7XG5cdFx0dGhpcy5kcm9wZG93blNlcnZpY2UuYXBwZW5kVG9Cb2R5KFxuXHRcdFx0dGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0dGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudCxcblx0XHRcdGAke3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZX0ke2xpZ2h0Q2xhc3N9JHtleHBhbmRlZENsYXNzfWApO1xuXHRcdHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlib2FyZE5hdiwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgYERyb3Bkb3duYCBsaXN0IGlzIHZpc2libGUgd2l0aGluIGFsbCBzY3JvbGxhYmxlIHBhcmVudHMuXG5cdCAqIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBpbiBhIHZhbHVlIHRvIHRoZSBgZHJvcFVwYCBpbnB1dC5cblx0ICovXG5cdF9zaG91bGREcm9wVXAoKSB7XG5cdFx0Ly8gY2hlY2sgaWYgZHJvcGRvd25NZW51IGV4aXN0cyBmaXJzdC5cblx0XHRjb25zdCBtZW51ID0gdGhpcy5kcm9wZG93bk1lbnUgJiYgdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmNkcy0tbGlzdC1ib3hfX21lbnVcIik7XG5cdFx0Ly8gY2hlY2sgaWYgbWVudSBleGlzdHMgZmlyc3QuXG5cdFx0Y29uc3QgbWVudVJlY3QgPSBtZW51ICYmIG1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0aWYgKG1lbnUgJiYgbWVudVJlY3QpIHtcblx0XHRcdGNvbnN0IHNjcm9sbGFibGVQYXJlbnRzID0gZ2V0U2Nyb2xsYWJsZVBhcmVudHMobWVudSk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYWJsZVBhcmVudHMucmVkdWNlKChzaG91bGREcm9wVXA6IGJvb2xlYW4sIHBhcmVudDogSFRNTEVsZW1lbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyZW50UmVjdCA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0Y29uc3QgaXNCZWxvd1BhcmVudCA9ICEobWVudVJlY3QuYm90dG9tIDw9IHBhcmVudFJlY3QuYm90dG9tKTtcblx0XHRcdFx0cmV0dXJuIHNob3VsZERyb3BVcCB8fCBpc0JlbG93UGFyZW50O1xuXHRcdFx0fSwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHBhbmRzIHRoZSBkcm9wZG93biBtZW51IGluIHRoZSB2aWV3LlxuXHQgKi9cblx0b3Blbk1lbnUoKSB7XG5cdFx0Ly8gcHJldmVudHMgdGhlIGRyb3Bkb3duIGZyb20gb3BlbmluZyB3aGVuIGxpc3Qgb2YgaXRlbXMgaXMgZW1wdHlcblx0XHRpZiAodGhpcy52aWV3LmdldExpc3RJdGVtcygpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2Ryb3BVcCA9IGZhbHNlO1xuXHRcdHRoaXMubWVudUlzQ2xvc2VkID0gZmFsc2U7XG5cblx0XHQvLyBtb3ZlIHRoZSBkcm9wZG93biBsaXN0IHRvIHRoZSBib2R5IGlmIHdlJ3JlIG5vdCBhcHBlbmRpbmcgaW5saW5lXG5cdFx0Ly8gYW5kIHBvc2l0aW9uIGl0IHJlbGF0aXZlIHRvIHRoZSBkcm9wZG93biB3cmFwcGVyXG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0Y29uc3QgdGFyZ2V0ID0gdGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50O1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHR0aGlzLnZpc2liaWxpdHlTdWJzY3JpcHRpb24gPSB0aGlzLmVsZW1lbnRTZXJ2aWNlXG5cdFx0XHRcdC52aXNpYmlsaXR5KHRhcmdldCwgcGFyZW50KVxuXHRcdFx0XHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcblx0XHRcdFx0XHRpZiAoIXZhbHVlLnZpc2libGUpIHtcblx0XHRcdFx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdHRoaXMuX2FwcGVuZFRvQm9keSgpO1xuXHRcdH1cblxuXHRcdC8vIHNldCB0aGUgZHJvcGRvd24gbWVudSB0byBkcm9wIHVwIGlmIGl0J3MgbmVhciB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW5cblx0XHQvLyBzZXRUaW1lb3V0IGxldHMgdXMgbWVhc3VyZSBhZnRlciBpdCdzIHZpc2libGUgaW4gdGhlIERPTVxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZHJvcFVwID09PSBudWxsIHx8IHRoaXMuZHJvcFVwID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhpcy5fZHJvcFVwID0gdGhpcy5fc2hvdWxkRHJvcFVwKCk7XG5cdFx0XHR9XG5cdFx0fSwgMCk7XG5cblx0XHQvLyB3ZSBiaW5kIG5vb3AgdG8gZG9jdW1lbnQuYm9keS5maXJzdEVsZW1lbnRDaGlsZCB0byBhbGxvdyBzYWZhcmkgdG8gZmlyZSBldmVudHNcblx0XHQvLyBmcm9tIGRvY3VtZW50LiBUaGVuIHdlIHVuYmluZCBldmVyeXRoaW5nIGxhdGVyIHRvIGtlZXAgdGhpbmdzIGxpZ2h0LlxuXHRcdGRvY3VtZW50LmJvZHkuZmlyc3RFbGVtZW50Q2hpbGQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMubm9vcCwgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQuYm9keS5maXJzdEVsZW1lbnRDaGlsZC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm5vb3AsIHRydWUpO1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLm91dHNpZGVDbGljaywgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5vdXRzaWRlS2V5LCB0cnVlKTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHRoaXMudmlldy5pbml0Rm9jdXMoKSwgMCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29sbGFwc2luZyB0aGUgZHJvcGRvd24gbWVudSBhbmQgcmVtb3ZpbmcgdW5uZWNlc3NhcnkgYEV2ZW50TGlzdGVuZXJzYC5cblx0ICovXG5cdGNsb3NlTWVudSgpIHtcblx0XHQvLyByZXR1cm4gZWFybHkgaWYgdGhlIG1lbnUgaXMgYWxyZWFkeSBjbG9zZWRcblx0XHRpZiAodGhpcy5tZW51SXNDbG9zZWQpIHsgcmV0dXJuOyB9XG5cdFx0dGhpcy5tZW51SXNDbG9zZWQgPSB0cnVlO1xuXHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdFx0dGhpcy5vbkNsb3NlLmVtaXQoKTtcblx0XHR0aGlzLmNsb3NlLmVtaXQoKTtcblxuXHRcdC8vIGZvY3VzIHRoZSB0cmlnZ2VyIGJ1dHRvbiB3aGVuIHdlIGNsb3NlIC4uLlxuXHRcdHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXG5cdFx0Ly8gcmVtb3ZlIHRoZSBjb25kaXRpb25hbCBvbmNlIHRoaXMgYXBpIGlzIHNldHRsZWQgYW5kIHBhcnQgb2YgYWJzdHJhY3QtZHJvcGRvd24tdmlldy5jbGFzc1xuXHRcdGlmICh0aGlzLnZpZXdbXCJkaXNhYmxlU2Nyb2xsXCJdKSB7XG5cdFx0XHR0aGlzLnZpZXdbXCJkaXNhYmxlU2Nyb2xsXCJdKCk7XG5cdFx0fVxuXG5cdFx0Ly8gbW92ZSB0aGUgbGlzdCBiYWNrIGluIHRoZSBjb21wb25lbnQgb24gY2xvc2Vcblx0XHRpZiAoIXRoaXMuYXBwZW5kSW5saW5lKSB7XG5cdFx0XHR0aGlzLnZpc2liaWxpdHlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblx0XHRcdHRoaXMuX2FwcGVuZFRvRHJvcGRvd24oKTtcblx0XHR9XG5cdFx0ZG9jdW1lbnQuYm9keS5maXJzdEVsZW1lbnRDaGlsZC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5ub29wLCB0cnVlKTtcblx0XHRkb2N1bWVudC5ib2R5LmZpcnN0RWxlbWVudENoaWxkLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMubm9vcCwgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMub3V0c2lkZUNsaWNrLCB0cnVlKTtcblx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm91dHNpZGVLZXksIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIHRvZ2dsaW5nIG1lbnUgc3RhdGVzIGJldHdlZW4gb3Blbi9leHBhbmRlZCBhbmQgY2xvc2VkL2NvbGxhcHNlZC5cblx0ICovXG5cdHRvZ2dsZU1lbnUoKSB7XG5cdFx0aWYgKHRoaXMubWVudUlzQ2xvc2VkKSB7XG5cdFx0XHR0aGlzLm9wZW5NZW51KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGlzVGVtcGxhdGUodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb250cm9scyB3aGVuIGl0J3MgbmVlZGVkIHRvIGFwcGx5IHRoZSBzZWxlY3Rpb24gZmVlZGJhY2tcblx0ICovXG5cdHByb3RlY3RlZCBjaGVja0ZvclJlb3JkZXIoKSB7XG5cdFx0Y29uc3QgdG9wQWZ0ZXJSZW9wZW4gPSB0aGlzLm1lbnVJc0Nsb3NlZCAmJiB0aGlzLnNlbGVjdGlvbkZlZWRiYWNrID09PSBcInRvcC1hZnRlci1yZW9wZW5cIjtcblx0XHRpZiAoKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiKSAmJiAodG9wQWZ0ZXJSZW9wZW4gfHwgdGhpcy5zZWxlY3Rpb25GZWVkYmFjayA9PT0gXCJ0b3BcIikpIHtcblx0XHRcdHRoaXMudmlldy5yZW9yZGVyU2VsZWN0ZWQoKTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==
|
|
@@ -69,6 +69,10 @@ class ComboBox {
|
|
|
69
69
|
* Combo box render size.
|
|
70
70
|
*/
|
|
71
71
|
this.size = "md";
|
|
72
|
+
/**
|
|
73
|
+
* Hide label while keeping it accessible for screen readers
|
|
74
|
+
*/
|
|
75
|
+
this.hideLabel = false;
|
|
72
76
|
/**
|
|
73
77
|
* set to `true` to place the dropdown view inline with the component
|
|
74
78
|
*/
|
|
@@ -636,7 +640,7 @@ class ComboBox {
|
|
|
636
640
|
}
|
|
637
641
|
ComboBox.comboBoxCount = 0;
|
|
638
642
|
ComboBox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComboBox, deps: [{ token: i0.ElementRef }, { token: i1.DropdownService }, { token: i2.I18n }], target: i0.ɵɵFactoryTarget.Component });
|
|
639
|
-
ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: { placeholder: "placeholder", openMenuAria: "openMenuAria", closeMenuAria: "closeMenuAria", clearSelectionsTitle: "clearSelectionsTitle", clearSelectionsAria: "clearSelectionsAria", clearSelectionTitle: "clearSelectionTitle", clearSelectionAria: "clearSelectionAria", id: "id", labelId: "labelId", items: "items", type: "type", size: "size", itemValueKey: "itemValueKey", label: "label", helperText: "helperText", appendInline: "appendInline", invalid: "invalid", invalidText: "invalidText", warn: "warn", warnText: "warnText", maxLength: "maxLength", theme: "theme", selectionFeedback: "selectionFeedback", autocomplete: "autocomplete", dropUp: "dropUp", disabled: "disabled" }, outputs: { selected: "selected", submit: "submit", close: "close", search: "search", clear: "clear" }, host: { listeners: { "keydown": "hostkeys($event)" }, properties: { "class.cds--list-box__wrapper": "this.hostClass", "style.display": "this.display" } }, providers: [
|
|
643
|
+
ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: { placeholder: "placeholder", openMenuAria: "openMenuAria", closeMenuAria: "closeMenuAria", clearSelectionsTitle: "clearSelectionsTitle", clearSelectionsAria: "clearSelectionsAria", clearSelectionTitle: "clearSelectionTitle", clearSelectionAria: "clearSelectionAria", id: "id", labelId: "labelId", items: "items", type: "type", size: "size", itemValueKey: "itemValueKey", label: "label", hideLabel: "hideLabel", helperText: "helperText", appendInline: "appendInline", invalid: "invalid", invalidText: "invalidText", warn: "warn", warnText: "warnText", maxLength: "maxLength", theme: "theme", selectionFeedback: "selectionFeedback", autocomplete: "autocomplete", dropUp: "dropUp", disabled: "disabled" }, outputs: { selected: "selected", submit: "submit", close: "close", search: "search", clear: "clear" }, host: { listeners: { "keydown": "hostkeys($event)" }, properties: { "class.cds--list-box__wrapper": "this.hostClass", "style.display": "this.display" } }, providers: [
|
|
640
644
|
{
|
|
641
645
|
provide: NG_VALUE_ACCESSOR,
|
|
642
646
|
useExisting: ComboBox,
|
|
@@ -649,7 +653,10 @@ ComboBox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
|
|
|
649
653
|
[for]="id"
|
|
650
654
|
[id]="labelId"
|
|
651
655
|
class="cds--label"
|
|
652
|
-
[ngClass]="{
|
|
656
|
+
[ngClass]="{
|
|
657
|
+
'cds--label--disabled': disabled,
|
|
658
|
+
'cds--visually-hidden': hideLabel
|
|
659
|
+
}">
|
|
653
660
|
<ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>
|
|
654
661
|
<ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>
|
|
655
662
|
</label>
|
|
@@ -792,7 +799,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
792
799
|
[for]="id"
|
|
793
800
|
[id]="labelId"
|
|
794
801
|
class="cds--label"
|
|
795
|
-
[ngClass]="{
|
|
802
|
+
[ngClass]="{
|
|
803
|
+
'cds--label--disabled': disabled,
|
|
804
|
+
'cds--visually-hidden': hideLabel
|
|
805
|
+
}">
|
|
796
806
|
<ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>
|
|
797
807
|
<ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>
|
|
798
808
|
</label>
|
|
@@ -960,6 +970,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
960
970
|
type: Input
|
|
961
971
|
}], label: [{
|
|
962
972
|
type: Input
|
|
973
|
+
}], hideLabel: [{
|
|
974
|
+
type: Input
|
|
963
975
|
}], helperText: [{
|
|
964
976
|
type: Input
|
|
965
977
|
}], appendInline: [{
|