@eui/components 18.0.0-next.30 → 18.0.0-next.32
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/docs/components/EuiDateRangeSelectorComponent.html +1 -20
- package/docs/components/EuiDatepickerComponent.html +1 -20
- package/docs/components/EuiFieldsetComponent.html +1 -1
- package/docs/components/EuiMenuComponent.html +2 -42
- package/docs/components/EuiMenuItemComponent.html +1 -24
- package/docs/dependencies.html +1 -1
- package/docs/js/search/search_index.js +2 -2
- package/esm2022/directives/eui-resizable/eui-resizable.component.mjs +2 -2
- package/esm2022/directives/eui-tooltip/container/eui-tooltip-container.component.mjs +3 -3
- package/esm2022/eui-alert/eui-alert.component.mjs +2 -2
- package/esm2022/eui-autocomplete/eui-autocomplete.component.mjs +6 -3
- package/esm2022/eui-avatar/eui-avatar.component.mjs +2 -2
- package/esm2022/eui-badge/eui-badge.component.mjs +2 -2
- package/esm2022/eui-block-content/eui-block-content.component.mjs +2 -2
- package/esm2022/eui-block-document/eui-block-document.component.mjs +2 -2
- package/esm2022/eui-button/eui-button.component.mjs +2 -2
- package/esm2022/eui-button-group/eui-button-group.component.mjs +2 -2
- package/esm2022/eui-button-v2/eui-button-v2.component.mjs +2 -2
- package/esm2022/eui-card/eui-card.component.mjs +2 -2
- package/esm2022/eui-chip/eui-chip.component.mjs +2 -2
- package/esm2022/eui-dashboard-button/eui-dashboard-button.component.mjs +2 -2
- package/esm2022/eui-dashboard-card/eui-dashboard-card.component.mjs +2 -2
- package/esm2022/eui-date-range-selector/eui-date-range-selector.component.mjs +3 -5
- package/esm2022/eui-datepicker/eui-datepicker.component.mjs +3 -5
- package/esm2022/eui-dialog/container/eui-dialog-container.component.mjs +2 -2
- package/esm2022/eui-dialog/eui-dialog.component.mjs +2 -2
- package/esm2022/eui-discussion-thread/eui-discussion-thread.component.mjs +2 -2
- package/esm2022/eui-dropdown/dropdown-item/eui-dropdown-item.component.mjs +2 -2
- package/esm2022/eui-dropdown/eui-dropdown.component.mjs +3 -3
- package/esm2022/eui-ecl-date-block/eui-ecl-date-block.component.mjs +2 -2
- package/esm2022/eui-ecl-label/eui-ecl-label.component.mjs +2 -2
- package/esm2022/eui-feedback-message/eui-feedback-message.component.mjs +2 -2
- package/esm2022/eui-fieldset/eui-fieldset.component.mjs +4 -3
- package/esm2022/eui-file-upload/eui-file-upload.component.mjs +2 -2
- package/esm2022/eui-growl/eui-growl.component.mjs +2 -2
- package/esm2022/eui-icon/eui-icon-svg-button/eui-icon-svg-button.component.mjs +2 -2
- package/esm2022/eui-icon/eui-icon-svg.component.mjs +4 -4
- package/esm2022/eui-icon-toggle/eui-icon-toggle.component.mjs +2 -2
- package/esm2022/eui-input-checkbox/eui-input-checkbox.component.mjs +2 -2
- package/esm2022/eui-input-group/eui-input-group.component.mjs +2 -2
- package/esm2022/eui-input-number/eui-input-number.component.mjs +2 -2
- package/esm2022/eui-input-radio/eui-input-radio.component.mjs +2 -2
- package/esm2022/eui-input-text/eui-input-text.component.mjs +2 -2
- package/esm2022/eui-label/eui-label.component.mjs +2 -2
- package/esm2022/eui-language-selector/language-selector.component.mjs +2 -2
- package/esm2022/eui-list/eui-list-item/eui-list-item.component.mjs +2 -2
- package/esm2022/eui-list/eui-list.component.mjs +2 -2
- package/esm2022/eui-menu/eui-menu-item.component.mjs +3 -5
- package/esm2022/eui-menu/eui-menu.component.mjs +3 -6
- package/esm2022/eui-overlay/eui-overlay.component.mjs +2 -2
- package/esm2022/eui-page/eui-page.component.mjs +2 -2
- package/esm2022/eui-popover/eui-popover.component.mjs +2 -2
- package/esm2022/eui-progress-bar/eui-progress-bar.component.mjs +2 -2
- package/esm2022/eui-progress-circle/eui-progress-circle.component.mjs +2 -2
- package/esm2022/eui-select/eui-select.component.mjs +2 -2
- package/esm2022/eui-sidebar-menu/eui-sidebar-menu.component.mjs +2 -2
- package/esm2022/eui-skeleton/eui-skeleton.component.mjs +2 -2
- package/esm2022/eui-slide-toggle/eui-slide-toggle.component.mjs +3 -3
- package/esm2022/eui-table/eui-table.component.mjs +2 -2
- package/esm2022/eui-tabs/eui-tab/eui-tab.component.mjs +2 -2
- package/esm2022/eui-tabs/eui-tabs.component.mjs +2 -2
- package/esm2022/eui-textarea/eui-textarea.component.mjs +2 -2
- package/esm2022/eui-timebar/eui-timebar.component.mjs +2 -2
- package/esm2022/eui-timeline/eui-timeline-item.component.mjs +2 -2
- package/esm2022/eui-timeline/eui-timeline.component.mjs +2 -2
- package/esm2022/eui-timepicker/eui-timepicker.component.mjs +2 -2
- package/esm2022/eui-tree/eui-tree.component.mjs +2 -2
- package/esm2022/eui-tree-list/eui-tree-list.component.mjs +2 -2
- package/esm2022/eui-wizard/eui-wizard-step.component.mjs +2 -2
- package/esm2022/eui-wizard/eui-wizard.component.mjs +2 -2
- package/esm2022/externals/charts/chart/chart.component.mjs +2 -2
- package/esm2022/externals/eui-editor/eui-editor.component.mjs +2 -2
- package/esm2022/layout/eui-app/eui-app-footer/footer.component.mjs +2 -2
- package/esm2022/layout/eui-app/eui-app-header/header.component.mjs +2 -2
- package/esm2022/layout/eui-app/eui-app-sidebar/sidebar-header-user-profile/sidebar-header-user-profile.component.mjs +2 -2
- package/esm2022/layout/eui-app/eui-app-sidebar/sidebar.component.mjs +2 -2
- package/esm2022/layout/eui-app/eui-app-toolbar/toolbar.component.mjs +2 -2
- package/esm2022/layout/eui-app/eui-app-top-message/top-message.component.mjs +2 -2
- package/esm2022/layout/eui-app/eui-app.component.mjs +2 -2
- package/esm2022/layout/eui-breadcrumb/breadcrumb.component.mjs +2 -2
- package/esm2022/layout/eui-breadcrumb/collapsed-breadcrumb/collapsed-breadcrumb.component.mjs +2 -2
- package/esm2022/layout/eui-breadcrumb/item/breadcrumb-item.component.mjs +2 -2
- package/esm2022/layout/eui-footer/footer.component.mjs +2 -2
- package/esm2022/layout/eui-header/header.component.mjs +2 -2
- package/esm2022/layout/eui-notifications/eui-notifications.component.mjs +2 -2
- package/esm2022/layout/eui-notifications-v2/eui-notifications.component.mjs +2 -2
- package/esm2022/layout/eui-search/search.component.mjs +2 -2
- package/esm2022/layout/eui-toolbar/toolbar.component.mjs +2 -2
- package/esm2022/layout/eui-user-profile/user-profile.component.mjs +2 -2
- package/eui-autocomplete/eui-autocomplete.component.d.ts.map +1 -1
- package/eui-date-range-selector/eui-date-range-selector.component.d.ts +1 -2
- package/eui-date-range-selector/eui-date-range-selector.component.d.ts.map +1 -1
- package/eui-datepicker/eui-datepicker.component.d.ts +1 -2
- package/eui-datepicker/eui-datepicker.component.d.ts.map +1 -1
- package/eui-fieldset/eui-fieldset.component.d.ts.map +1 -1
- package/eui-icon/eui-icon-svg.component.d.ts.map +1 -1
- package/eui-menu/eui-menu-item.component.d.ts +0 -1
- package/eui-menu/eui-menu-item.component.d.ts.map +1 -1
- package/eui-menu/eui-menu.component.d.ts.map +1 -1
- package/fesm2022/eui-components-directives.mjs +4 -4
- package/fesm2022/eui-components-directives.mjs.map +1 -1
- package/fesm2022/eui-components-eui-alert.mjs +2 -2
- package/fesm2022/eui-components-eui-alert.mjs.map +1 -1
- package/fesm2022/eui-components-eui-autocomplete.mjs +5 -2
- package/fesm2022/eui-components-eui-autocomplete.mjs.map +2 -2
- package/fesm2022/eui-components-eui-avatar.mjs +2 -2
- package/fesm2022/eui-components-eui-avatar.mjs.map +1 -1
- package/fesm2022/eui-components-eui-badge.mjs +2 -2
- package/fesm2022/eui-components-eui-badge.mjs.map +1 -1
- package/fesm2022/eui-components-eui-block-content.mjs +2 -2
- package/fesm2022/eui-components-eui-block-content.mjs.map +1 -1
- package/fesm2022/eui-components-eui-block-document.mjs +2 -2
- package/fesm2022/eui-components-eui-block-document.mjs.map +1 -1
- package/fesm2022/eui-components-eui-button-group.mjs +2 -2
- package/fesm2022/eui-components-eui-button-group.mjs.map +1 -1
- package/fesm2022/eui-components-eui-button-v2.mjs +2 -2
- package/fesm2022/eui-components-eui-button-v2.mjs.map +1 -1
- package/fesm2022/eui-components-eui-button.mjs +2 -2
- package/fesm2022/eui-components-eui-button.mjs.map +1 -1
- package/fesm2022/eui-components-eui-card.mjs +2 -2
- package/fesm2022/eui-components-eui-card.mjs.map +1 -1
- package/fesm2022/eui-components-eui-chip.mjs +2 -2
- package/fesm2022/eui-components-eui-chip.mjs.map +1 -1
- package/fesm2022/eui-components-eui-dashboard-button.mjs +2 -2
- package/fesm2022/eui-components-eui-dashboard-button.mjs.map +1 -1
- package/fesm2022/eui-components-eui-dashboard-card.mjs +2 -2
- package/fesm2022/eui-components-eui-dashboard-card.mjs.map +1 -1
- package/fesm2022/eui-components-eui-date-range-selector.mjs +5 -7
- package/fesm2022/eui-components-eui-date-range-selector.mjs.map +2 -2
- package/fesm2022/eui-components-eui-datepicker.mjs +5 -7
- package/fesm2022/eui-components-eui-datepicker.mjs.map +2 -2
- package/fesm2022/eui-components-eui-dialog.mjs +4 -4
- package/fesm2022/eui-components-eui-dialog.mjs.map +1 -1
- package/fesm2022/eui-components-eui-discussion-thread.mjs +2 -2
- package/fesm2022/eui-components-eui-discussion-thread.mjs.map +1 -1
- package/fesm2022/eui-components-eui-dropdown.mjs +4 -4
- package/fesm2022/eui-components-eui-dropdown.mjs.map +1 -1
- package/fesm2022/eui-components-eui-ecl-date-block.mjs +2 -2
- package/fesm2022/eui-components-eui-ecl-date-block.mjs.map +1 -1
- package/fesm2022/eui-components-eui-ecl-label.mjs +2 -2
- package/fesm2022/eui-components-eui-ecl-label.mjs.map +1 -1
- package/fesm2022/eui-components-eui-feedback-message.mjs +2 -2
- package/fesm2022/eui-components-eui-feedback-message.mjs.map +1 -1
- package/fesm2022/eui-components-eui-fieldset.mjs +4 -3
- package/fesm2022/eui-components-eui-fieldset.mjs.map +2 -2
- package/fesm2022/eui-components-eui-file-upload.mjs +2 -2
- package/fesm2022/eui-components-eui-file-upload.mjs.map +1 -1
- package/fesm2022/eui-components-eui-growl.mjs +2 -2
- package/fesm2022/eui-components-eui-growl.mjs.map +1 -1
- package/fesm2022/eui-components-eui-icon-toggle.mjs +2 -2
- package/fesm2022/eui-components-eui-icon-toggle.mjs.map +1 -1
- package/fesm2022/eui-components-eui-icon.mjs +2 -5
- package/fesm2022/eui-components-eui-icon.mjs.map +2 -2
- package/fesm2022/eui-components-eui-input-checkbox.mjs +2 -2
- package/fesm2022/eui-components-eui-input-checkbox.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-group.mjs +2 -2
- package/fesm2022/eui-components-eui-input-group.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-number.mjs +2 -2
- package/fesm2022/eui-components-eui-input-number.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-radio.mjs +2 -2
- package/fesm2022/eui-components-eui-input-radio.mjs.map +1 -1
- package/fesm2022/eui-components-eui-input-text.mjs +2 -2
- package/fesm2022/eui-components-eui-input-text.mjs.map +1 -1
- package/fesm2022/eui-components-eui-label.mjs +2 -2
- package/fesm2022/eui-components-eui-label.mjs.map +1 -1
- package/fesm2022/eui-components-eui-language-selector.mjs +2 -2
- package/fesm2022/eui-components-eui-language-selector.mjs.map +1 -1
- package/fesm2022/eui-components-eui-list.mjs +4 -4
- package/fesm2022/eui-components-eui-list.mjs.map +1 -1
- package/fesm2022/eui-components-eui-menu.mjs +8 -11
- package/fesm2022/eui-components-eui-menu.mjs.map +2 -2
- package/fesm2022/eui-components-eui-overlay.mjs +2 -2
- package/fesm2022/eui-components-eui-overlay.mjs.map +1 -1
- package/fesm2022/eui-components-eui-page.mjs +2 -2
- package/fesm2022/eui-components-eui-page.mjs.map +1 -1
- package/fesm2022/eui-components-eui-popover.mjs +2 -2
- package/fesm2022/eui-components-eui-popover.mjs.map +1 -1
- package/fesm2022/eui-components-eui-progress-bar.mjs +2 -2
- package/fesm2022/eui-components-eui-progress-bar.mjs.map +1 -1
- package/fesm2022/eui-components-eui-progress-circle.mjs +2 -2
- package/fesm2022/eui-components-eui-progress-circle.mjs.map +1 -1
- package/fesm2022/eui-components-eui-select.mjs +2 -2
- package/fesm2022/eui-components-eui-select.mjs.map +1 -1
- package/fesm2022/eui-components-eui-sidebar-menu.mjs +2 -2
- package/fesm2022/eui-components-eui-sidebar-menu.mjs.map +1 -1
- package/fesm2022/eui-components-eui-skeleton.mjs +2 -2
- package/fesm2022/eui-components-eui-skeleton.mjs.map +1 -1
- package/fesm2022/eui-components-eui-slide-toggle.mjs +2 -2
- package/fesm2022/eui-components-eui-slide-toggle.mjs.map +1 -1
- package/fesm2022/eui-components-eui-table.mjs +2 -2
- package/fesm2022/eui-components-eui-table.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tabs.mjs +4 -4
- package/fesm2022/eui-components-eui-tabs.mjs.map +1 -1
- package/fesm2022/eui-components-eui-textarea.mjs +2 -2
- package/fesm2022/eui-components-eui-textarea.mjs.map +1 -1
- package/fesm2022/eui-components-eui-timebar.mjs +2 -2
- package/fesm2022/eui-components-eui-timebar.mjs.map +1 -1
- package/fesm2022/eui-components-eui-timeline.mjs +4 -4
- package/fesm2022/eui-components-eui-timeline.mjs.map +1 -1
- package/fesm2022/eui-components-eui-timepicker.mjs +2 -2
- package/fesm2022/eui-components-eui-timepicker.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tree-list.mjs +2 -2
- package/fesm2022/eui-components-eui-tree-list.mjs.map +1 -1
- package/fesm2022/eui-components-eui-tree.mjs +2 -2
- package/fesm2022/eui-components-eui-tree.mjs.map +1 -1
- package/fesm2022/eui-components-eui-wizard.mjs +4 -4
- package/fesm2022/eui-components-eui-wizard.mjs.map +1 -1
- package/fesm2022/eui-components-externals-charts.mjs +2 -2
- package/fesm2022/eui-components-externals-charts.mjs.map +1 -1
- package/fesm2022/eui-components-externals-eui-editor.mjs +2 -2
- package/fesm2022/eui-components-externals-eui-editor.mjs.map +1 -1
- package/fesm2022/eui-components-layout.mjs +34 -34
- package/fesm2022/eui-components-layout.mjs.map +1 -1
- package/package.json +3 -3
@@ -128,6 +128,9 @@ export class EuiAutocompleteComponent {
|
|
128
128
|
this.updateInputAriaRequiredAttribute(this.control);
|
129
129
|
this.control.statusChanges.pipe(takeUntil(this.destroy$)).subscribe((status) => {
|
130
130
|
this.autocompleteControl.setErrors(this.control.errors);
|
131
|
+
if (this.control.untouched) {
|
132
|
+
this.autocompleteControl.markAsUntouched();
|
133
|
+
}
|
131
134
|
});
|
132
135
|
this.control.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value) => {
|
133
136
|
this.updateInputAriaRequiredAttribute(this.control);
|
@@ -656,7 +659,7 @@ export class EuiAutocompleteComponent {
|
|
656
659
|
this.cd.markForCheck();
|
657
660
|
}
|
658
661
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: EuiAutocompleteComponent, deps: [{ token: i1.Overlay }, { token: i0.ChangeDetectorRef }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i2.LiveAnnouncer }, { token: i3.ScrollDispatcher }, { token: i4.BaseStatesDirective }, { token: i5.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
659
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0-next.4", type: EuiAutocompleteComponent, selector: "eui-autocomplete, input[euiAutocomplete]", inputs: { autocompleteData: "autocompleteData", visibleOptions: "visibleOptions", matching: "matching", placeholder: "placeholder", autocompleteDataSelected: "autocompleteDataSelected", chipsSortOrder: "chipsSortOrder", itemsSortOrder: "itemsSortOrder", chipsPosition: "chipsPosition", groupBy: "groupBy", toggleLinkMoreLabel: "toggleLinkMoreLabel", toggleLinkLessLabel: "toggleLinkLessLabel", classList: "classList", panelWidth: "panelWidth", dragAndDropSourceName: "dragAndDropSourceName", dragAndDropConnectedTo: "dragAndDropConnectedTo", isFreeValueAllowed: ["isFreeValueAllowed", "isFreeValueAllowed", booleanAttribute], isReadonly: ["isReadonly", "isReadonly", booleanAttribute], isLoading: ["isLoading", "isLoading", booleanAttribute], hasChips: ["hasChips", "hasChips", booleanAttribute], isAsync: ["isAsync", "isAsync", booleanAttribute], isChipsSorted: ["isChipsSorted", "isChipsSorted", booleanAttribute], isItemsSorted: ["isItemsSorted", "isItemsSorted", booleanAttribute], isChipsRemovable: ["isChipsRemovable", "isChipsRemovable", booleanAttribute], isDuplicateValueAllowed: ["isDuplicateValueAllowed", "isDuplicateValueAllowed", booleanAttribute], isAddOnBlur: ["isAddOnBlur", "isAddOnBlur", booleanAttribute], isForceSelection: ["isForceSelection", "isForceSelection", booleanAttribute], maxVisibleChipsCount: ["maxVisibleChipsCount", "maxVisibleChipsCount", numberAttribute], chipsLabelTruncateCount: ["chipsLabelTruncateCount", "chipsLabelTruncateCount", numberAttribute], isMaxVisibleChipsOpened: ["isMaxVisibleChipsOpened", "isMaxVisibleChipsOpened", booleanAttribute], isChipsDragAndDrop: ["isChipsDragAndDrop", "isChipsDragAndDrop", booleanAttribute] }, outputs: { panelClose: "panelClose", panelOpen: "panelOpen", inputFocus: "inputFocus", inputBlur: "inputBlur", clear: "clear", selectionChange: "selectionChange", itemAdd: "itemAdd", itemRemove: "itemRemove", inputChange: "inputChange", chipDragStart: "chipDragStart", chipDragRelease: "chipDragRelease", chipDrop: "chipDrop" }, host: { properties: { "class": "this.cssClasses" } }, queries: [{ propertyName: "templates", predicate: EuiTemplateDirective }], viewQueries: [{ propertyName: "templatePortalContent", first: true, predicate: ["templatePortalContent"], descendants: true }, { propertyName: "inputContainerRef", first: true, predicate: ["inputContainerRef"], descendants: true }, { propertyName: "virtualScrolling", first: true, predicate: ["virtualScrolling"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true, read: ElementRef }], usesOnChanges: true, hostDirectives: [{ directive: i4.BaseStatesDirective, inputs: ["euiSecondary", "euiSecondary", "euiSuccess", "euiSuccess", "euiInfo", "euiInfo", "euiWarning", "euiWarning", "euiDanger", "euiDanger", "euiAccent", "euiAccent"] }], ngImport: i0, template: "<div class=\"eui-autocomplete__wrapper\">\n @if (chipsPosition === 'bottom') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n @if (hasChips) {\n <eui-chip-list\n [chips]=\"chips\"\n [isChipsRemovable]=\"isChipsRemovable && !isReadonly\"\n [maxVisibleChipsCount]=\"maxVisibleChipsCount\"\n [isMaxVisibleChipsOpened]=\"isMaxVisibleChipsOpened\"\n [chipsLabelTruncateCount]=\"chipsLabelTruncateCount\"\n [toggleLinkMoreLabel]=\"toggleLinkMoreLabel\"\n [toggleLinkLessLabel]=\"toggleLinkLessLabel\"\n [isChipsDragAndDrop]=\"isChipsDragAndDrop\"\n [dragAndDropSourceName]=\"dragAndDropSourceName\"\n [dragAndDropConnectedTo]=\"dragAndDropConnectedTo\"\n (chipDrop)=\"onChipDropped($event)\"\n (chipDragStart)=\"onChipDragStarted($event)\"\n (chipDragRelease)=\"onChipDragReleased($event)\"\n (chipRemove)=\"onChipRemove($event)\">\n <euiChipListAppendContent>\n <ng-template [ngIf]=\"chipsPosition === 'inside'\">\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n </ng-template>\n </euiChipListAppendContent>\n </eui-chip-list>\n }\n @if (chipsPosition === 'top') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n</div>\n\n<ng-template #control>\n <div *ngIf=\"!hasChips || (hasChips && !isReadonly)\" class=\"eui-autocomplete__input-container\" #inputContainerRef>\n <input\n #input\n euiInputText\n [euiClearable]=\"!isReadonly && !isDisabled\"\n [euiLoading]=\"isLoading\"\n [formControl]=\"autocompleteControl\"\n class=\"eui-autocomplete__input {{ classList }}\"\n placeholder=\"{{ placeholder }}\"\n [readonly]=\"isReadonly\"\n (clear)=\"onClear()\"\n (click)=\"openPanel()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.aria-controls]=\"isOpen ? 'eui-autocomplete__panel' : null\"\n [attr.aria-label]=\"autocompleteControl.value?.length > 0 ? autocompleteControl.value : 'Input field without value'\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n aria-autocomplete=\"both\"\n aria-haspopup=\"true\" />\n </div>\n</ng-template>\n\n<ng-template #templatePortalContent>\n <div\n id=\"eui-autocomplete__panel\"\n class=\"eui-autocomplete__panel\"\n [@panelAnimation]=\"isOpen ? 'visible' : 'hidden'\"\n role=\"listbox\"\n aria-live=\"polite\"\n aria-label=\"Autocomplete panel\">\n <cdk-virtual-scroll-viewport\n #virtualScrolling\n [itemSize]=\"itemSize\"\n tabindex=\"0\"\n minBufferPx=\"500\"\n maxBufferPx=\"750\"\n [style.min-height]=\"cdkVirtualScrollViewport + 'px'\">\n @if (groupBy) {\n @for (distinctOptionGroup of distinctOptionGroups; let i = $index; track distinctOptionGroup) {\n @if ((groupedOptions | async)[distinctOptionGroup].options.length > 0) {\n <eui-autocomplete-option-group [label]=\"distinctOptionGroup\">\n <div class=\"eui-autocomplete-option-group__label\">\n @if (autocompleteOptGroupTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptGroupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: distinctOptionGroup } }\">\n </ng-template>\n } @else {\n {{ distinctOptionGroup }}\n }\n </div>\n <div class=\"eui-autocomplete-option-group__options\">\n @for (autocompleteOption of (groupedOptions | async)[distinctOptionGroup].options; let j = $index; track autocompleteOption.id) {\n <eui-autocomplete-option\n isGroupItem\n [isActive]=\"selectedOptionIndex === (groupedOptions | async)[distinctOptionGroup].ancestorLength + j\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </div>\n </eui-autocomplete-option-group>\n }\n }\n } @else {\n <eui-autocomplete-option\n *cdkVirtualFor=\"let autocompleteOption of autocompleteOptions | async; let i = index; trackBy: optionsTrackByFn\"\n [isActive]=\"selectedOptionIndex === i\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </cdk-virtual-scroll-viewport>\n </div> \n</ng-template>\n", styles: [".eui-autocomplete,.eui-autocomplete__wrapper{width:100%}.eui-autocomplete__wrapper .eui-autocomplete__input-container{display:flex;width:100%}.eui-autocomplete__panel-container .eui-autocomplete__panel{box-shadow:var(--eui-base-shadow-8);width:100%}.eui-autocomplete__panel-container.eui-autocomplete__panel-container--no-option .eui-autocomplete__panel{box-shadow:none}.eui-autocomplete.eui-autocomplete--chips-position-bottom .eui-autocomplete__input-container{margin-bottom:var(--eui-base-spacing-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper{background-color:var(--eui-base-color-white);border:1px solid var(--eui-base-color-grey-50);border-radius:var(--eui-base-border-radius);padding:0 var(--eui-base-spacing-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list,.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container{display:block}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container .eui-chip{margin-bottom:0;margin-top:var(--eui-base-spacing-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-input-text{border:0;min-height:calc(var(--eui-base-spacing-2xl) + var(--eui-base-spacing-2xs) - 2px)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list euichiplistappendcontent{flex-grow:1}button~.eui-autocomplete .eui-autocomplete__input,.eui-input-group-addon-item~.eui-autocomplete .eui-autocomplete__input{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.eui-autocomplete:has(+button) .eui-autocomplete__input{border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete:has(+.eui-input-group-addon-item) .eui-autocomplete__input{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete-option-group .eui-autocomplete-option-group__label{align-items:center;background-color:var(--eui-base-color-grey-10);border-bottom:1px solid var(--eui-base-color-grey-10);border-left:var(--eui-base-border-state-width) solid transparent;cursor:pointer;display:flex;font-weight:700;min-height:var(--eui-base-spacing-3xl);padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon-svg,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-flag-icon{margin-right:var(--eui-base-spacing-2xs)}.eui-autocomplete-option{align-items:center;border-bottom:1px solid var(--eui-base-color-grey-10);border-left:var(--eui-base-border-state-width) solid transparent;cursor:pointer;display:flex;min-height:var(--eui-base-spacing-3xl);padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.eui-autocomplete-option:hover{background-color:var(--eui-base-color-grey-5)}.eui-autocomplete-option--group-item{padding-left:var(--eui-base-spacing-l)}.eui-autocomplete-option .eui-icon,.eui-autocomplete-option .eui-icon-svg,.eui-autocomplete-option .eui-flag-icon{margin-right:var(--eui-base-spacing-xs)}.eui-autocomplete-option--primary{border-left-color:var(--eui-base-color-primary-100)}.eui-autocomplete-option--secondary{border-left-color:var(--eui-base-color-grey-25)}.eui-autocomplete-option--info{border-left-color:var(--eui-base-color-info-100)}.eui-autocomplete-option--success{border-left-color:var(--eui-base-color-success-100)}.eui-autocomplete-option--warning{border-left-color:var(--eui-base-color-warning-100)}.eui-autocomplete-option--danger{border-left-color:var(--eui-base-color-danger-100)}.eui-autocomplete-option--accent{border-left-color:var(--eui-base-color-accent-100)}.eui-autocomplete-option--active{background-color:var(--eui-base-color-grey-5);outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:-2px}.eui-autocomplete-option--disabled{cursor:default;opacity:.4}.eui-autocomplete-option--disabled:hover{background:none}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i7.EuiInputTextComponent, selector: "input[euiInputText]", inputs: ["isInvalid"] }, { kind: "component", type: i8.EuiChipListComponent, selector: "eui-chip-list, div[euiChipList], ul[euiChipList]", inputs: ["chips", "toggleLinkMoreLabel", "toggleLinkLessLabel", "chipsSortOrder", "dragAndDropSourceName", "dragAndDropConnectedTo", "ariaLabel", "dropListOrientation", "isSquared", "isChipsRemovable", "isMaxVisibleChipsOpened", "isChipsSorted", "isChipsDragAndDrop", "isGrid", "maxVisibleChipsCount", "chipsLabelTruncateCount"], outputs: ["chipsInit", "chipRemove", "chipDragStart", "chipDragRelease", "chipDrop", "chiplistFocus"] }, { kind: "directive", type: i8.EuiChipListAppendContentDirective, selector: "euiChipListAppendContent" }, { kind: "component", type: i9.EuiAutocompleteOptionComponent, selector: "eui-autocomplete-option", inputs: ["isActive", "isDisabled", "isGroupItem"] }, { kind: "component", type: i10.EuiAutocompleteOptionGroupComponent, selector: "eui-autocomplete-option-group", inputs: ["label"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }], animations: [panelAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
662
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0-next.4", type: EuiAutocompleteComponent, selector: "eui-autocomplete, input[euiAutocomplete]", inputs: { autocompleteData: "autocompleteData", visibleOptions: "visibleOptions", matching: "matching", placeholder: "placeholder", autocompleteDataSelected: "autocompleteDataSelected", chipsSortOrder: "chipsSortOrder", itemsSortOrder: "itemsSortOrder", chipsPosition: "chipsPosition", groupBy: "groupBy", toggleLinkMoreLabel: "toggleLinkMoreLabel", toggleLinkLessLabel: "toggleLinkLessLabel", classList: "classList", panelWidth: "panelWidth", dragAndDropSourceName: "dragAndDropSourceName", dragAndDropConnectedTo: "dragAndDropConnectedTo", isFreeValueAllowed: ["isFreeValueAllowed", "isFreeValueAllowed", booleanAttribute], isReadonly: ["isReadonly", "isReadonly", booleanAttribute], isLoading: ["isLoading", "isLoading", booleanAttribute], hasChips: ["hasChips", "hasChips", booleanAttribute], isAsync: ["isAsync", "isAsync", booleanAttribute], isChipsSorted: ["isChipsSorted", "isChipsSorted", booleanAttribute], isItemsSorted: ["isItemsSorted", "isItemsSorted", booleanAttribute], isChipsRemovable: ["isChipsRemovable", "isChipsRemovable", booleanAttribute], isDuplicateValueAllowed: ["isDuplicateValueAllowed", "isDuplicateValueAllowed", booleanAttribute], isAddOnBlur: ["isAddOnBlur", "isAddOnBlur", booleanAttribute], isForceSelection: ["isForceSelection", "isForceSelection", booleanAttribute], maxVisibleChipsCount: ["maxVisibleChipsCount", "maxVisibleChipsCount", numberAttribute], chipsLabelTruncateCount: ["chipsLabelTruncateCount", "chipsLabelTruncateCount", numberAttribute], isMaxVisibleChipsOpened: ["isMaxVisibleChipsOpened", "isMaxVisibleChipsOpened", booleanAttribute], isChipsDragAndDrop: ["isChipsDragAndDrop", "isChipsDragAndDrop", booleanAttribute] }, outputs: { panelClose: "panelClose", panelOpen: "panelOpen", inputFocus: "inputFocus", inputBlur: "inputBlur", clear: "clear", selectionChange: "selectionChange", itemAdd: "itemAdd", itemRemove: "itemRemove", inputChange: "inputChange", chipDragStart: "chipDragStart", chipDragRelease: "chipDragRelease", chipDrop: "chipDrop" }, host: { properties: { "class": "this.cssClasses" } }, queries: [{ propertyName: "templates", predicate: EuiTemplateDirective }], viewQueries: [{ propertyName: "templatePortalContent", first: true, predicate: ["templatePortalContent"], descendants: true }, { propertyName: "inputContainerRef", first: true, predicate: ["inputContainerRef"], descendants: true }, { propertyName: "virtualScrolling", first: true, predicate: ["virtualScrolling"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true, read: ElementRef }], usesOnChanges: true, hostDirectives: [{ directive: i4.BaseStatesDirective, inputs: ["euiSecondary", "euiSecondary", "euiSuccess", "euiSuccess", "euiInfo", "euiInfo", "euiWarning", "euiWarning", "euiDanger", "euiDanger", "euiAccent", "euiAccent"] }], ngImport: i0, template: "<div class=\"eui-autocomplete__wrapper\">\n @if (chipsPosition === 'bottom') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n @if (hasChips) {\n <eui-chip-list\n [chips]=\"chips\"\n [isChipsRemovable]=\"isChipsRemovable && !isReadonly\"\n [maxVisibleChipsCount]=\"maxVisibleChipsCount\"\n [isMaxVisibleChipsOpened]=\"isMaxVisibleChipsOpened\"\n [chipsLabelTruncateCount]=\"chipsLabelTruncateCount\"\n [toggleLinkMoreLabel]=\"toggleLinkMoreLabel\"\n [toggleLinkLessLabel]=\"toggleLinkLessLabel\"\n [isChipsDragAndDrop]=\"isChipsDragAndDrop\"\n [dragAndDropSourceName]=\"dragAndDropSourceName\"\n [dragAndDropConnectedTo]=\"dragAndDropConnectedTo\"\n (chipDrop)=\"onChipDropped($event)\"\n (chipDragStart)=\"onChipDragStarted($event)\"\n (chipDragRelease)=\"onChipDragReleased($event)\"\n (chipRemove)=\"onChipRemove($event)\">\n <euiChipListAppendContent>\n <ng-template [ngIf]=\"chipsPosition === 'inside'\">\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n </ng-template>\n </euiChipListAppendContent>\n </eui-chip-list>\n }\n @if (chipsPosition === 'top') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n</div>\n\n<ng-template #control>\n <div *ngIf=\"!hasChips || (hasChips && !isReadonly)\" class=\"eui-autocomplete__input-container\" #inputContainerRef>\n <input\n #input\n euiInputText\n [euiClearable]=\"!isReadonly && !isDisabled\"\n [euiLoading]=\"isLoading\"\n [formControl]=\"autocompleteControl\"\n class=\"eui-autocomplete__input {{ classList }}\"\n placeholder=\"{{ placeholder }}\"\n [readonly]=\"isReadonly\"\n (clear)=\"onClear()\"\n (click)=\"openPanel()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.aria-controls]=\"isOpen ? 'eui-autocomplete__panel' : null\"\n [attr.aria-label]=\"autocompleteControl.value?.length > 0 ? autocompleteControl.value : 'Input field without value'\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n aria-autocomplete=\"both\"\n aria-haspopup=\"true\" />\n </div>\n</ng-template>\n\n<ng-template #templatePortalContent>\n <div\n id=\"eui-autocomplete__panel\"\n class=\"eui-autocomplete__panel\"\n [@panelAnimation]=\"isOpen ? 'visible' : 'hidden'\"\n role=\"listbox\"\n aria-live=\"polite\"\n aria-label=\"Autocomplete panel\">\n <cdk-virtual-scroll-viewport\n #virtualScrolling\n [itemSize]=\"itemSize\"\n tabindex=\"0\"\n minBufferPx=\"500\"\n maxBufferPx=\"750\"\n [style.min-height]=\"cdkVirtualScrollViewport + 'px'\">\n @if (groupBy) {\n @for (distinctOptionGroup of distinctOptionGroups; let i = $index; track distinctOptionGroup) {\n @if ((groupedOptions | async)[distinctOptionGroup].options.length > 0) {\n <eui-autocomplete-option-group [label]=\"distinctOptionGroup\">\n <div class=\"eui-autocomplete-option-group__label\">\n @if (autocompleteOptGroupTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptGroupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: distinctOptionGroup } }\">\n </ng-template>\n } @else {\n {{ distinctOptionGroup }}\n }\n </div>\n <div class=\"eui-autocomplete-option-group__options\">\n @for (autocompleteOption of (groupedOptions | async)[distinctOptionGroup].options; let j = $index; track autocompleteOption.id) {\n <eui-autocomplete-option\n isGroupItem\n [isActive]=\"selectedOptionIndex === (groupedOptions | async)[distinctOptionGroup].ancestorLength + j\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </div>\n </eui-autocomplete-option-group>\n }\n }\n } @else {\n <eui-autocomplete-option\n *cdkVirtualFor=\"let autocompleteOption of autocompleteOptions | async; let i = index; trackBy: optionsTrackByFn\"\n [isActive]=\"selectedOptionIndex === i\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </cdk-virtual-scroll-viewport>\n </div> \n</ng-template>\n", styles: [".eui-autocomplete,.eui-autocomplete__wrapper{width:100%}.eui-autocomplete__wrapper .eui-autocomplete__input-container{display:flex;width:100%}.eui-autocomplete__panel-container .eui-autocomplete__panel{box-shadow:var(--eui-base-shadow-8);width:100%}.eui-autocomplete__panel-container.eui-autocomplete__panel-container--no-option .eui-autocomplete__panel{box-shadow:none}.eui-autocomplete.eui-autocomplete--chips-position-bottom .eui-autocomplete__input-container{margin-bottom:var(--eui-base-spacing-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper{background-color:var(--eui-ctx-c-white);border:1px solid var(--eui-ctx-c-s-lighter);border-radius:var(--eui-base-border-radius);padding:0 var(--eui-base-spacing-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list,.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container{display:block}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container .eui-chip{margin-bottom:0;margin-top:var(--eui-base-spacing-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-input-text{border:0;min-height:calc(var(--eui-base-spacing-2xl) + var(--eui-base-spacing-2xs) - 2px)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list euichiplistappendcontent{flex-grow:1}button~.eui-autocomplete .eui-autocomplete__input,.eui-input-group-addon-item~.eui-autocomplete .eui-autocomplete__input{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.eui-autocomplete:has(+button) .eui-autocomplete__input{border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete:has(+.eui-input-group-addon-item) .eui-autocomplete__input{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete-option-group .eui-autocomplete-option-group__label{align-items:center;background-color:var(--eui-ctx-c-s-bg-light);border-bottom:1px solid var(--eui-ctx-c-s-bg-light);border-left:var(--eui-base-border-state-width) solid transparent;cursor:pointer;display:flex;font-weight:700;min-height:var(--eui-base-spacing-3xl);padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon-svg,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-flag-icon{margin-right:var(--eui-base-spacing-2xs)}.eui-autocomplete-option{align-items:center;border-bottom:1px solid var(--eui-ctx-c-s-bg-light);border-left:var(--eui-base-border-state-width) solid transparent;cursor:pointer;display:flex;min-height:var(--eui-base-spacing-3xl);padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.eui-autocomplete-option:hover{background-color:var(--eui-ctx-c-s-bg-light)}.eui-autocomplete-option--group-item{padding-left:var(--eui-base-spacing-l)}.eui-autocomplete-option .eui-icon,.eui-autocomplete-option .eui-icon-svg,.eui-autocomplete-option .eui-flag-icon{margin-right:var(--eui-base-spacing-xs)}.eui-autocomplete-option--primary{border-left-color:var(--eui-ctx-c-p)}.eui-autocomplete-option--secondary{border-left-color:var(--eui-ctx-c-s-lighter)}.eui-autocomplete-option--info{border-left-color:var(--eui-ctx-c-in)}.eui-autocomplete-option--success{border-left-color:var(--eui-ctx-c-su)}.eui-autocomplete-option--warning{border-left-color:var(--eui-ctx-c-wa)}.eui-autocomplete-option--danger{border-left-color:var(--eui-ctx-c-da)}.eui-autocomplete-option--accent{border-left-color:var(--eui-ctx-c-ac)}.eui-autocomplete-option--active{background-color:var(--eui-ctx-c-active);outline:2px solid var(--eui-ctx-c-focus-visible);outline-offset:-2px}.eui-autocomplete-option--disabled{cursor:default;opacity:.4}.eui-autocomplete-option--disabled:hover{background:none}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i7.EuiInputTextComponent, selector: "input[euiInputText]", inputs: ["isInvalid"] }, { kind: "component", type: i8.EuiChipListComponent, selector: "eui-chip-list, div[euiChipList], ul[euiChipList]", inputs: ["chips", "toggleLinkMoreLabel", "toggleLinkLessLabel", "chipsSortOrder", "dragAndDropSourceName", "dragAndDropConnectedTo", "ariaLabel", "dropListOrientation", "isSquared", "isChipsRemovable", "isMaxVisibleChipsOpened", "isChipsSorted", "isChipsDragAndDrop", "isGrid", "maxVisibleChipsCount", "chipsLabelTruncateCount"], outputs: ["chipsInit", "chipRemove", "chipDragStart", "chipDragRelease", "chipDrop", "chiplistFocus"] }, { kind: "directive", type: i8.EuiChipListAppendContentDirective, selector: "euiChipListAppendContent" }, { kind: "component", type: i9.EuiAutocompleteOptionComponent, selector: "eui-autocomplete-option", inputs: ["isActive", "isDisabled", "isGroupItem"] }, { kind: "component", type: i10.EuiAutocompleteOptionGroupComponent, selector: "eui-autocomplete-option-group", inputs: ["label"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }], animations: [panelAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
660
663
|
}
|
661
664
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4", ngImport: i0, type: EuiAutocompleteComponent, decorators: [{
|
662
665
|
type: Component,
|
@@ -672,7 +675,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4",
|
|
672
675
|
'euiAccent',
|
673
676
|
],
|
674
677
|
},
|
675
|
-
], template: "<div class=\"eui-autocomplete__wrapper\">\n @if (chipsPosition === 'bottom') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n @if (hasChips) {\n <eui-chip-list\n [chips]=\"chips\"\n [isChipsRemovable]=\"isChipsRemovable && !isReadonly\"\n [maxVisibleChipsCount]=\"maxVisibleChipsCount\"\n [isMaxVisibleChipsOpened]=\"isMaxVisibleChipsOpened\"\n [chipsLabelTruncateCount]=\"chipsLabelTruncateCount\"\n [toggleLinkMoreLabel]=\"toggleLinkMoreLabel\"\n [toggleLinkLessLabel]=\"toggleLinkLessLabel\"\n [isChipsDragAndDrop]=\"isChipsDragAndDrop\"\n [dragAndDropSourceName]=\"dragAndDropSourceName\"\n [dragAndDropConnectedTo]=\"dragAndDropConnectedTo\"\n (chipDrop)=\"onChipDropped($event)\"\n (chipDragStart)=\"onChipDragStarted($event)\"\n (chipDragRelease)=\"onChipDragReleased($event)\"\n (chipRemove)=\"onChipRemove($event)\">\n <euiChipListAppendContent>\n <ng-template [ngIf]=\"chipsPosition === 'inside'\">\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n </ng-template>\n </euiChipListAppendContent>\n </eui-chip-list>\n }\n @if (chipsPosition === 'top') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n</div>\n\n<ng-template #control>\n <div *ngIf=\"!hasChips || (hasChips && !isReadonly)\" class=\"eui-autocomplete__input-container\" #inputContainerRef>\n <input\n #input\n euiInputText\n [euiClearable]=\"!isReadonly && !isDisabled\"\n [euiLoading]=\"isLoading\"\n [formControl]=\"autocompleteControl\"\n class=\"eui-autocomplete__input {{ classList }}\"\n placeholder=\"{{ placeholder }}\"\n [readonly]=\"isReadonly\"\n (clear)=\"onClear()\"\n (click)=\"openPanel()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.aria-controls]=\"isOpen ? 'eui-autocomplete__panel' : null\"\n [attr.aria-label]=\"autocompleteControl.value?.length > 0 ? autocompleteControl.value : 'Input field without value'\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n aria-autocomplete=\"both\"\n aria-haspopup=\"true\" />\n </div>\n</ng-template>\n\n<ng-template #templatePortalContent>\n <div\n id=\"eui-autocomplete__panel\"\n class=\"eui-autocomplete__panel\"\n [@panelAnimation]=\"isOpen ? 'visible' : 'hidden'\"\n role=\"listbox\"\n aria-live=\"polite\"\n aria-label=\"Autocomplete panel\">\n <cdk-virtual-scroll-viewport\n #virtualScrolling\n [itemSize]=\"itemSize\"\n tabindex=\"0\"\n minBufferPx=\"500\"\n maxBufferPx=\"750\"\n [style.min-height]=\"cdkVirtualScrollViewport + 'px'\">\n @if (groupBy) {\n @for (distinctOptionGroup of distinctOptionGroups; let i = $index; track distinctOptionGroup) {\n @if ((groupedOptions | async)[distinctOptionGroup].options.length > 0) {\n <eui-autocomplete-option-group [label]=\"distinctOptionGroup\">\n <div class=\"eui-autocomplete-option-group__label\">\n @if (autocompleteOptGroupTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptGroupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: distinctOptionGroup } }\">\n </ng-template>\n } @else {\n {{ distinctOptionGroup }}\n }\n </div>\n <div class=\"eui-autocomplete-option-group__options\">\n @for (autocompleteOption of (groupedOptions | async)[distinctOptionGroup].options; let j = $index; track autocompleteOption.id) {\n <eui-autocomplete-option\n isGroupItem\n [isActive]=\"selectedOptionIndex === (groupedOptions | async)[distinctOptionGroup].ancestorLength + j\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </div>\n </eui-autocomplete-option-group>\n }\n }\n } @else {\n <eui-autocomplete-option\n *cdkVirtualFor=\"let autocompleteOption of autocompleteOptions | async; let i = index; trackBy: optionsTrackByFn\"\n [isActive]=\"selectedOptionIndex === i\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </cdk-virtual-scroll-viewport>\n </div> \n</ng-template>\n", styles: [".eui-autocomplete,.eui-autocomplete__wrapper{width:100%}.eui-autocomplete__wrapper .eui-autocomplete__input-container{display:flex;width:100%}.eui-autocomplete__panel-container .eui-autocomplete__panel{box-shadow:var(--eui-base-shadow-8);width:100%}.eui-autocomplete__panel-container.eui-autocomplete__panel-container--no-option .eui-autocomplete__panel{box-shadow:none}.eui-autocomplete.eui-autocomplete--chips-position-bottom .eui-autocomplete__input-container{margin-bottom:var(--eui-base-spacing-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper{background-color:var(--eui-base-color-white);border:1px solid var(--eui-base-color-grey-50);border-radius:var(--eui-base-border-radius);padding:0 var(--eui-base-spacing-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list,.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container{display:block}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container .eui-chip{margin-bottom:0;margin-top:var(--eui-base-spacing-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-input-text{border:0;min-height:calc(var(--eui-base-spacing-2xl) + var(--eui-base-spacing-2xs) - 2px)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list euichiplistappendcontent{flex-grow:1}button~.eui-autocomplete .eui-autocomplete__input,.eui-input-group-addon-item~.eui-autocomplete .eui-autocomplete__input{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.eui-autocomplete:has(+button) .eui-autocomplete__input{border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete:has(+.eui-input-group-addon-item) .eui-autocomplete__input{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete-option-group .eui-autocomplete-option-group__label{align-items:center;background-color:var(--eui-base-color-grey-10);border-bottom:1px solid var(--eui-base-color-grey-10);border-left:var(--eui-base-border-state-width) solid transparent;cursor:pointer;display:flex;font-weight:700;min-height:var(--eui-base-spacing-3xl);padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon-svg,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-flag-icon{margin-right:var(--eui-base-spacing-2xs)}.eui-autocomplete-option{align-items:center;border-bottom:1px solid var(--eui-base-color-grey-10);border-left:var(--eui-base-border-state-width) solid transparent;cursor:pointer;display:flex;min-height:var(--eui-base-spacing-3xl);padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.eui-autocomplete-option:hover{background-color:var(--eui-base-color-grey-5)}.eui-autocomplete-option--group-item{padding-left:var(--eui-base-spacing-l)}.eui-autocomplete-option .eui-icon,.eui-autocomplete-option .eui-icon-svg,.eui-autocomplete-option .eui-flag-icon{margin-right:var(--eui-base-spacing-xs)}.eui-autocomplete-option--primary{border-left-color:var(--eui-base-color-primary-100)}.eui-autocomplete-option--secondary{border-left-color:var(--eui-base-color-grey-25)}.eui-autocomplete-option--info{border-left-color:var(--eui-base-color-info-100)}.eui-autocomplete-option--success{border-left-color:var(--eui-base-color-success-100)}.eui-autocomplete-option--warning{border-left-color:var(--eui-base-color-warning-100)}.eui-autocomplete-option--danger{border-left-color:var(--eui-base-color-danger-100)}.eui-autocomplete-option--accent{border-left-color:var(--eui-base-color-accent-100)}.eui-autocomplete-option--active{background-color:var(--eui-base-color-grey-5);outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:-2px}.eui-autocomplete-option--disabled{cursor:default;opacity:.4}.eui-autocomplete-option--disabled:hover{background:none}\n"] }]
|
678
|
+
], template: "<div class=\"eui-autocomplete__wrapper\">\n @if (chipsPosition === 'bottom') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n @if (hasChips) {\n <eui-chip-list\n [chips]=\"chips\"\n [isChipsRemovable]=\"isChipsRemovable && !isReadonly\"\n [maxVisibleChipsCount]=\"maxVisibleChipsCount\"\n [isMaxVisibleChipsOpened]=\"isMaxVisibleChipsOpened\"\n [chipsLabelTruncateCount]=\"chipsLabelTruncateCount\"\n [toggleLinkMoreLabel]=\"toggleLinkMoreLabel\"\n [toggleLinkLessLabel]=\"toggleLinkLessLabel\"\n [isChipsDragAndDrop]=\"isChipsDragAndDrop\"\n [dragAndDropSourceName]=\"dragAndDropSourceName\"\n [dragAndDropConnectedTo]=\"dragAndDropConnectedTo\"\n (chipDrop)=\"onChipDropped($event)\"\n (chipDragStart)=\"onChipDragStarted($event)\"\n (chipDragRelease)=\"onChipDragReleased($event)\"\n (chipRemove)=\"onChipRemove($event)\">\n <euiChipListAppendContent>\n <ng-template [ngIf]=\"chipsPosition === 'inside'\">\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n </ng-template>\n </euiChipListAppendContent>\n </eui-chip-list>\n }\n @if (chipsPosition === 'top') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n</div>\n\n<ng-template #control>\n <div *ngIf=\"!hasChips || (hasChips && !isReadonly)\" class=\"eui-autocomplete__input-container\" #inputContainerRef>\n <input\n #input\n euiInputText\n [euiClearable]=\"!isReadonly && !isDisabled\"\n [euiLoading]=\"isLoading\"\n [formControl]=\"autocompleteControl\"\n class=\"eui-autocomplete__input {{ classList }}\"\n placeholder=\"{{ placeholder }}\"\n [readonly]=\"isReadonly\"\n (clear)=\"onClear()\"\n (click)=\"openPanel()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.aria-controls]=\"isOpen ? 'eui-autocomplete__panel' : null\"\n [attr.aria-label]=\"autocompleteControl.value?.length > 0 ? autocompleteControl.value : 'Input field without value'\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n aria-autocomplete=\"both\"\n aria-haspopup=\"true\" />\n </div>\n</ng-template>\n\n<ng-template #templatePortalContent>\n <div\n id=\"eui-autocomplete__panel\"\n class=\"eui-autocomplete__panel\"\n [@panelAnimation]=\"isOpen ? 'visible' : 'hidden'\"\n role=\"listbox\"\n aria-live=\"polite\"\n aria-label=\"Autocomplete panel\">\n <cdk-virtual-scroll-viewport\n #virtualScrolling\n [itemSize]=\"itemSize\"\n tabindex=\"0\"\n minBufferPx=\"500\"\n maxBufferPx=\"750\"\n [style.min-height]=\"cdkVirtualScrollViewport + 'px'\">\n @if (groupBy) {\n @for (distinctOptionGroup of distinctOptionGroups; let i = $index; track distinctOptionGroup) {\n @if ((groupedOptions | async)[distinctOptionGroup].options.length > 0) {\n <eui-autocomplete-option-group [label]=\"distinctOptionGroup\">\n <div class=\"eui-autocomplete-option-group__label\">\n @if (autocompleteOptGroupTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptGroupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: distinctOptionGroup } }\">\n </ng-template>\n } @else {\n {{ distinctOptionGroup }}\n }\n </div>\n <div class=\"eui-autocomplete-option-group__options\">\n @for (autocompleteOption of (groupedOptions | async)[distinctOptionGroup].options; let j = $index; track autocompleteOption.id) {\n <eui-autocomplete-option\n isGroupItem\n [isActive]=\"selectedOptionIndex === (groupedOptions | async)[distinctOptionGroup].ancestorLength + j\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </div>\n </eui-autocomplete-option-group>\n }\n }\n } @else {\n <eui-autocomplete-option\n *cdkVirtualFor=\"let autocompleteOption of autocompleteOptions | async; let i = index; trackBy: optionsTrackByFn\"\n [isActive]=\"selectedOptionIndex === i\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </cdk-virtual-scroll-viewport>\n </div> \n</ng-template>\n", styles: [".eui-autocomplete,.eui-autocomplete__wrapper{width:100%}.eui-autocomplete__wrapper .eui-autocomplete__input-container{display:flex;width:100%}.eui-autocomplete__panel-container .eui-autocomplete__panel{box-shadow:var(--eui-base-shadow-8);width:100%}.eui-autocomplete__panel-container.eui-autocomplete__panel-container--no-option .eui-autocomplete__panel{box-shadow:none}.eui-autocomplete.eui-autocomplete--chips-position-bottom .eui-autocomplete__input-container{margin-bottom:var(--eui-base-spacing-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper{background-color:var(--eui-ctx-c-white);border:1px solid var(--eui-ctx-c-s-lighter);border-radius:var(--eui-base-border-radius);padding:0 var(--eui-base-spacing-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list,.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container{display:block}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container .eui-chip{margin-bottom:0;margin-top:var(--eui-base-spacing-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-input-text{border:0;min-height:calc(var(--eui-base-spacing-2xl) + var(--eui-base-spacing-2xs) - 2px)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list euichiplistappendcontent{flex-grow:1}button~.eui-autocomplete .eui-autocomplete__input,.eui-input-group-addon-item~.eui-autocomplete .eui-autocomplete__input{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.eui-autocomplete:has(+button) .eui-autocomplete__input{border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete:has(+.eui-input-group-addon-item) .eui-autocomplete__input{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete-option-group .eui-autocomplete-option-group__label{align-items:center;background-color:var(--eui-ctx-c-s-bg-light);border-bottom:1px solid var(--eui-ctx-c-s-bg-light);border-left:var(--eui-base-border-state-width) solid transparent;cursor:pointer;display:flex;font-weight:700;min-height:var(--eui-base-spacing-3xl);padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon-svg,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-flag-icon{margin-right:var(--eui-base-spacing-2xs)}.eui-autocomplete-option{align-items:center;border-bottom:1px solid var(--eui-ctx-c-s-bg-light);border-left:var(--eui-base-border-state-width) solid transparent;cursor:pointer;display:flex;min-height:var(--eui-base-spacing-3xl);padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.eui-autocomplete-option:hover{background-color:var(--eui-ctx-c-s-bg-light)}.eui-autocomplete-option--group-item{padding-left:var(--eui-base-spacing-l)}.eui-autocomplete-option .eui-icon,.eui-autocomplete-option .eui-icon-svg,.eui-autocomplete-option .eui-flag-icon{margin-right:var(--eui-base-spacing-xs)}.eui-autocomplete-option--primary{border-left-color:var(--eui-ctx-c-p)}.eui-autocomplete-option--secondary{border-left-color:var(--eui-ctx-c-s-lighter)}.eui-autocomplete-option--info{border-left-color:var(--eui-ctx-c-in)}.eui-autocomplete-option--success{border-left-color:var(--eui-ctx-c-su)}.eui-autocomplete-option--warning{border-left-color:var(--eui-ctx-c-wa)}.eui-autocomplete-option--danger{border-left-color:var(--eui-ctx-c-da)}.eui-autocomplete-option--accent{border-left-color:var(--eui-ctx-c-ac)}.eui-autocomplete-option--active{background-color:var(--eui-ctx-c-active);outline:2px solid var(--eui-ctx-c-focus-visible);outline-offset:-2px}.eui-autocomplete-option--disabled{cursor:default;opacity:.4}.eui-autocomplete-option--disabled:hover{background:none}\n"] }]
|
676
679
|
}], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i2.LiveAnnouncer }, { type: i3.ScrollDispatcher }, { type: i4.BaseStatesDirective }, { type: i5.NgControl, decorators: [{
|
677
680
|
type: Self
|
678
681
|
}, {
|
@@ -795,4 +798,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0-next.4",
|
|
795
798
|
}], chipDrop: [{
|
796
799
|
type: Output
|
797
800
|
}] } });
|
798
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktYXV0b2NvbXBsZXRlL2V1aS1hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLWF1dG9jb21wbGV0ZS9ldWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUtqQixXQUFXLEVBR1gsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixJQUFJLEVBQ0osUUFBUSxFQUVSLGVBQWUsRUFFZixnQkFBZ0IsRUFDaEIsZUFBZSxHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxzQkFBc0IsR0FDOUIsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUc3QixPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBdUJ6RCxNQUFNLE9BQU8sd0JBQXdCO0lBQ2pDLElBQ1csVUFBVTtRQUNqQixPQUFPO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztZQUMxRCxtQ0FBbUMsR0FBRyxJQUFJLENBQUMsYUFBYTtTQUMzRDthQUNJLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDVCxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBeUZELFlBQ1ksT0FBZ0IsRUFDaEIsRUFBcUIsRUFDckIsZ0JBQWtDLEVBQ2xDLFVBQXNCLEVBQ3RCLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxtQkFBd0MsRUFDcEIsT0FBa0I7UUFQdEMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3BCLFlBQU8sR0FBUCxPQUFPLENBQVc7UUEvRnpDLHFCQUFnQixHQUEwQixFQUFFLENBQUM7UUFDN0MsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsYUFBUSxHQUE2QixVQUFVLENBQUM7UUFDaEQsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsNkJBQXdCLEdBQTBCLEVBQUUsQ0FBQztRQUNyRCxtQkFBYyxHQUFtQixLQUFLLENBQUM7UUFDdkMsbUJBQWMsR0FBbUIsS0FBSyxDQUFDO1FBQ3ZDLGtCQUFhLEdBQWdDLEtBQUssQ0FBQztRQUVuRCx3QkFBbUIsR0FBVyxJQUFJLENBQUM7UUFDbkMsd0JBQW1CLEdBQVcsSUFBSSxDQUFDO1FBQ25DLGNBQVMsR0FBVyxJQUFJLENBQUM7UUFHekIsMkJBQXNCLEdBQWEsRUFBRSxDQUFDO1FBRVAsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQzFCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNoQyxnQkFBVyxHQUFJLEtBQUssQ0FBQztRQUNyQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDMUIseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLDRCQUF1QixHQUFHLElBQUksQ0FBQztRQUM5Qiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDaEMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTVELHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUF3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4Rix3QkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDeEIsd0JBQW1CLEdBQUcsSUFBSSxXQUFXLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDbEQsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixVQUFLLEdBQWMsRUFBRSxDQUFDO1FBRXRCLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQStFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZILHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUN0QixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBV1gsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0IsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0IsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0Isb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUM1RCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDbEQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ3JELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN6QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBQ3BELG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDdEQsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBR2pELGFBQVEsR0FBcUIsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUVwRCxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFOUMsOENBQXlDLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMvRCxzQ0FBaUMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZELGlDQUE0QixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEQseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQyxvQ0FBK0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JELGlDQUE0QixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEQsNkJBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QyxVQUFLLEdBQWdELElBQUksQ0FBQztRQUMxRCxRQUFHLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM1SCwyQkFBMkI7WUFDM0IsZ0NBQWdDO1NBQ25DLENBQUMsQ0FBQztRQUNLLFdBQU0sR0FBRyxJQUFJLHNCQUFzQixDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQy9ILDJCQUEyQjtZQUMzQixtQ0FBbUM7U0FDdEMsQ0FBQyxDQUFDO1FBQ0ssc0JBQWlCLEdBQTZCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFncEJ0RSxhQUFRLEdBQUcsQ0FBSSxNQUFVLEVBQVEsRUFBRTtZQUN2QyxZQUFZO1FBQ2hCLENBQUMsQ0FBQztRQUVNLFlBQU8sR0FBRyxHQUFTLEVBQUU7WUFDekIsWUFBWTtRQUNoQixDQUFDLENBQUM7UUExb0JFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLENBQWdCO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLHdCQUF3QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5SSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUMzRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN6RSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUM3RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLENBQUM7WUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFM0MsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuRyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7b0JBRWpILElBQUksU0FBUyxFQUFFLENBQUM7d0JBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDN0IsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNsRSxDQUFDO2dCQUNMLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2xELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzVDLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUYsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFNUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM1QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDdEQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3RCxJQUFJLENBQUMsaUNBQWlDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsK0JBQStCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLHdCQUF3QjtRQUN4QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLE1BQU0sb0JBQW9CLEdBQWEsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUs7aUJBQ2hFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztpQkFDckcsTUFBTSxDQUFDLENBQUMsV0FBbUIsRUFBRSxFQUFFO2dCQUM1QixPQUFPLENBQ0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQy9CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssV0FBVyxDQUN6SCxDQUNKLENBQUM7WUFDTixDQUFDLENBQUM7aUJBQ0QsTUFBTSxDQUFDLENBQUMsV0FBbUIsRUFBRSxLQUFLLEVBQUUsS0FBZSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBRW5HLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMvRCxPQUFPLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDO2dCQUN4RixPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDbkcsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzlELENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLFNBQVM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjtpQkFDcEQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCLFNBQVMsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtnQkFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN0QixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFUCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7aUJBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN2RSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQzt3QkFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsV0FBVztxQkFDMUQsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVQLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDcEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFaEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDbEMsV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLGdCQUFnQjtnQkFDaEIsY0FBYztnQkFDZCxtQkFBbUIsRUFBRSxJQUFJO2dCQUN6QixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxXQUFXO2dCQUMzRixVQUFVLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2FBQ3BFLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUU1QyxJQUFJLENBQUMsVUFBVTtpQkFDVixvQkFBb0IsRUFBRTtpQkFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNiLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxNQUFxQixDQUFDO2dCQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDMUYsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLE9BQW9CLEVBQUUsYUFBMEIsRUFBVyxFQUFFO29CQUM1RixPQUFPLE9BQU8sRUFBRSxDQUFDO3dCQUNiLElBQUksT0FBTyxLQUFLLGFBQWEsRUFBRSxDQUFDOzRCQUM1QixPQUFPLElBQUksQ0FBQzt3QkFDaEIsQ0FBQzt3QkFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztvQkFDcEMsQ0FBQztvQkFDRCxPQUFPLEtBQUssQ0FBQztnQkFDakIsQ0FBQyxDQUFDO2dCQUVGLE1BQU0saUJBQWlCLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDbkYsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFFNUUsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQzVGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQztnQkFFRCxJQUFJLGlCQUFpQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7b0JBQzlFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQztnQkFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO29CQUNwRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3RCLENBQUM7Z0JBRUQsSUFBSyxDQUFDLENBQUMsTUFBc0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztvQkFDMUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDUCxJQUFJLENBQUMsVUFBVTtpQkFDVixhQUFhLEVBQUU7aUJBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCLFNBQVMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO2dCQUN6QixJQUFJLGFBQWEsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ2hELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRVAsSUFBSSxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO2dCQUM5RixJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLDhDQUE4QyxDQUFDLENBQUM7Z0JBQ2pGLElBQUksbUJBQW1CLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO29CQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO2dCQUNsRixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7WUFFckosSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUUzRCxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztZQUMxQixJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMseUNBQXlDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQztpQkFDMUYsSUFBSSxDQUNELE1BQU0sQ0FBQyxDQUFDLENBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQ3RILFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQzNCO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLENBQWdCLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDSixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDakcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7d0JBQzNCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBRXhCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQzt3QkFFckosSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBRWpGLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsQ0FBQztvQkFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDdkQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7d0JBQzNCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBRXhCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQzt3QkFFckosSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBRWpGLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsQ0FBQztvQkFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDO29CQUUxRixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLE1BQU0sR0FBRyxlQUFlLEdBQUcsaUJBQWlCLEdBQUcsZUFBZSxFQUFFLENBQUM7d0JBQzNGLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQzt3QkFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7d0JBQ3hELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDOzRCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0NBQzNELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO29DQUMzRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRSxDQUFDO29DQUN6RixjQUFjLEVBQUcsQ0FBQztnQ0FDdEIsQ0FBQzs0QkFDTCxDQUFDLENBQUMsQ0FBQzt3QkFDUCxDQUFDO3dCQUVELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsY0FBYyxDQUFDLEdBQUcsZUFBZSxJQUFJLGVBQWUsSUFBSSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUMsRUFBRSxDQUFDOzRCQUNuSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGNBQWMsQ0FBQyxHQUFHLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDOzRCQUN2SCxpQkFBaUIsRUFBRSxDQUFDOzRCQUNwQixlQUFlLEVBQUUsQ0FBQzt3QkFDdEIsQ0FBQztvQkFDTCxDQUFDO29CQUNELElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksTUFBTSxHQUFHLGlCQUFpQixFQUFFLENBQUM7d0JBQ3JELElBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLGlCQUFpQixFQUFFLENBQUM7NEJBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7NEJBQzlELGlCQUFpQixFQUFFLENBQUM7NEJBQ3BCLGVBQWUsRUFBRSxDQUFDO3dCQUN0QixDQUFDO29CQUNMLENBQUM7b0JBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO3dCQUNyQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDOzRCQUN4QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQ0FDZixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dDQUNuRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7NEJBQzdELENBQUM7aUNBQU0sQ0FBQztnQ0FDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDOzRCQUNwRixDQUFDO3dCQUNMLENBQUM7NkJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDOzRCQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDN0MsQ0FBQztvQkFDTCxDQUFDO29CQUNELElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQzt3QkFDbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7NEJBQ2QsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFLLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0NBQzFGLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUNwRCxDQUFDOzRCQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0NBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0NBQ3BDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0NBQzlELElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzs0QkFDNUMsQ0FBQzs0QkFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ3RCLENBQUM7b0JBQ0wsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFUCxJQUFJLENBQUMsaUNBQWlDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFHLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBbUIsRUFBRSxFQUFFO29CQUNuSSxJQUFJLENBQUUsS0FBSyxDQUFDLE1BQXNCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ3JKLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUNwRCxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUVELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsNEJBQTRCLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtvQkFDOUgsSUFBSSxDQUFFLEtBQUssQ0FBQyxNQUFzQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDO3dCQUMvRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO3dCQUNwQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO3dCQUM5RCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzVDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVU7UUFDYixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMseUNBQXlDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0QsSUFBSSxDQUFDLCtCQUErQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsQ0FBc0I7UUFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBRUQsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVoRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNMLENBQUM7SUFFTSxHQUFHLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckcsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDNUcsT0FBTztRQUNYLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBRTVILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEIsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVoRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBYSxFQUFFLElBQXlCO1FBQzVELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQWtEO1FBQ2hFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQThCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkYsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFFLEtBQTZCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMvRyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFFLEtBQTZCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsVUFBbUI7UUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVwRixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBYztRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0saUJBQWlCLENBQUMsRUFBYztRQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0sT0FBTztRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLE9BQU87UUFDVixJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQzthQUNyRSxJQUFJLENBQ0QsTUFBTSxDQUFDLENBQUMsS0FBb0IsRUFBRSxFQUFFLENBQzVCLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUMvQixLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU87WUFDckIsS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXO1lBQ3pCLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUN4QixDQUNKO2FBQ0osU0FBUyxDQUFDLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDNUIsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbkosTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBRXZELElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBRXhCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDeEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNyQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFUCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxNQUFNO1FBQ1QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTSxZQUFZLENBQUMsQ0FBMkU7UUFDM0YsTUFBTSxLQUFLLEdBQUcsQ0FBMkMsQ0FBQztRQUMxRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZGLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCO2FBQ3hELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDakQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sYUFBYSxDQUFDLENBQWtCO1FBQ25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxDQUFrQjtRQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sa0JBQWtCLENBQUMsQ0FBa0I7UUFDeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLFdBQVc7UUFDZixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsMEJBQTBCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDaEssT0FBTyxZQUFZLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBYSxFQUFFLGFBQXNCO1FBQ3BELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRTdJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsTUFBTSxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFcEgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO1FBQ3JELENBQUM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLE9BQU87YUFDZCxRQUFRLEVBQUU7YUFDVixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBd0QsQ0FBQzthQUNwRyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2FBQ3JDLHNCQUFzQixDQUFDLEtBQUssQ0FBQzthQUM3QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU8sYUFBYSxDQUFDLFVBQWtCO1FBQ3BDLElBQUksSUFBSSxHQUEwQixFQUFFLENBQUM7UUFDckMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtnQkFDckQsSUFDSSxJQUFJLENBQUMsUUFBUSxLQUFLLFVBQVU7b0JBQzVCLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQzFGLENBQUM7b0JBQ0MsT0FBTyxnQkFBZ0IsQ0FBQztnQkFDNUIsQ0FBQztnQkFDRCxJQUNJLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVztvQkFDN0IsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFDM0csQ0FBQztvQkFDQyxPQUFPLGdCQUFnQixDQUFDO2dCQUM1QixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDakMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsSixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUE0QjtRQUMxQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDakMsT0FBTyxJQUFJLE9BQU8sQ0FBQztnQkFDZixFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ2YsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhO2dCQUNyQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQ3JCLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztnQkFDN0IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2dCQUM3QixTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7Z0JBQzdCLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztnQkFDN0IsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO2dCQUNqQyxjQUFjLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxjQUFjO2dCQUNoRCxPQUFPLEVBQUUsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztnQkFDN0MsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2FBQ2hDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN2SCxDQUFDO0lBRU8sVUFBVSxDQUErQixHQUFRLEVBQUUsU0FBeUI7UUFDaEYsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUksRUFBRSxDQUFJLEVBQUUsRUFBRTtZQUNwQixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFbkMsSUFBSSxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO29CQUNkLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDZCxPQUFPLENBQUMsQ0FBQztnQkFDYixDQUFDO2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ2IsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO29CQUNkLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDZCxPQUFPLENBQUMsQ0FBQztnQkFDYixDQUFDO2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ2IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQThCLEVBQUUsT0FBZTtRQUVuRSxNQUFNLGNBQWMsR0FBYSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4SixNQUFNLG9CQUFvQixHQUFhLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckgsTUFBTSxjQUFjLEdBQWlGLEVBQUUsQ0FBQztRQUV4RyxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDdkIsS0FBSyxNQUFNLEtBQUssSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUNsSSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQTBCLENBQUM7WUFDekUsQ0FBQztZQUVELGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDdkQsY0FBYyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDL0IsQ0FBQztRQUVELE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQW1CLEVBQUUsZ0JBQTZCO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRSxNQUFNLHNCQUFzQixHQUFHLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVwRixPQUFPLENBQ0gsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQztZQUNqRCxDQUFDLE9BQU8sR0FBRyxpQkFBaUIsR0FBRyxDQUFDLElBQUksT0FBTyxHQUFHLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDLENBQzVGLENBQUM7SUFDTixDQUFDO0lBVUQ7OztPQUdHO0lBQ0ssZ0NBQWdDLENBQUMsT0FBa0I7UUFDdkQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNCLENBQUM7cUhBL3ZCUSx3QkFBd0I7eUdBQXhCLHdCQUF3Qix1cEJBMkJiLGdCQUFnQiw0Q0FDaEIsZ0JBQWdCLHlDQUNoQixnQkFBZ0Isc0NBQ2hCLGdCQUFnQixtQ0FDaEIsZ0JBQWdCLHFEQUNoQixnQkFBZ0IscURBQ2hCLGdCQUFnQiw4REFDaEIsZ0JBQWdCLG1GQUNoQixnQkFBZ0IsK0NBQ2hCLGdCQUFnQiw4REFDaEIsZ0JBQWdCLDBFQUNoQixlQUFlLG1GQUNmLGVBQWUsbUZBQ2YsZ0JBQWdCLG9FQUNoQixnQkFBZ0Isc2JBY25CLG9CQUFvQix5YUFLVCxVQUFVLHVSQzNIMUMsMnJPQXNJQSxnb05EdEZnQixDQUFDLGNBQWMsQ0FBQzs7a0dBZW5CLHdCQUF3QjtrQkFyQnBDLFNBQVM7K0JBRUksMENBQTBDLG1CQUVuQyx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCLENBQUMsY0FBYyxDQUFDLGtCQUNaO3dCQUNaOzRCQUNJLFNBQVMsRUFBRSxtQkFBbUI7NEJBQzlCLE1BQU0sRUFBRTtnQ0FDSixjQUFjO2dDQUNkLFlBQVk7Z0NBQ1osU0FBUztnQ0FDVCxZQUFZO2dDQUNaLFdBQVc7Z0NBQ1gsV0FBVzs2QkFDZDt5QkFDSjtxQkFDSjs7MEJBNEdJLElBQUk7OzBCQUFJLFFBQVE7eUNBeEdWLFVBQVU7c0JBRHBCLFdBQVc7dUJBQUMsT0FBTztnQkFVWCxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUVrQyxrQkFBa0I7c0JBQXpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsT0FBTztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxhQUFhO3NCQUFwRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLGFBQWE7c0JBQXBELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsZ0JBQWdCO3NCQUF2RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLHVCQUF1QjtzQkFBOUQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxXQUFXO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLGdCQUFnQjtzQkFBdkQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDQyxvQkFBb0I7c0JBQTFELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUNFLHVCQUF1QjtzQkFBN0QsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBQ0csdUJBQXVCO3NCQUE5RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLGtCQUFrQjtzQkFBekQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFjQyxTQUFTO3NCQUEvQyxlQUFlO3VCQUFDLG9CQUFvQjtnQkFFRCxxQkFBcUI7c0JBQXhELFNBQVM7dUJBQUMsdUJBQXVCO2dCQUNGLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0MsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFDYSxLQUFLO3NCQUE5QyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBRTlCLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT3V0cHV0LFxuICAgIFNlbGYsXG4gICAgT3B0aW9uYWwsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5nQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmaWx0ZXIsIGZyb21FdmVudCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblBvc2l0aW9uUGFpciwgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luLCBPdmVybGF5LCBPdmVybGF5UmVmLCBQb3NpdGlvblN0cmF0ZWd5LCBSZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3ksXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENka1Njcm9sbGFibGUsIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgU2Nyb2xsRGlzcGF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgTGl2ZUFubm91bmNlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XG5cbmltcG9ydCB7IEV1aUNoaXBEcmFnRHJvcCB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktY2hpcC1saXN0JztcbmltcG9ydCB7IEV1aUNoaXAsIEV1aUNoaXBUb29sdGlwIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1jaGlwJztcbmltcG9ydCB7IEV1aVRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgQmFzZVN0YXRlc0RpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9zaGFyZWQnO1xuXG5pbXBvcnQgeyBFdWlBdXRvQ29tcGxldGVJdGVtIH0gZnJvbSAnLi9tb2RlbHMvZXVpLWF1dG9jb21wbGV0ZS1pdGVtLm1vZGVsJztcbmltcG9ydCB7IHBhbmVsQW5pbWF0aW9uIH0gZnJvbSAnLi9hbmltYXRpb25zL2FuaW1hdGlvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc2VsZWN0b3I6ICdldWktYXV0b2NvbXBsZXRlLCBpbnB1dFtldWlBdXRvY29tcGxldGVdJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGFuaW1hdGlvbnM6IFtwYW5lbEFuaW1hdGlvbl0sXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBCYXNlU3RhdGVzRGlyZWN0aXZlLFxuICAgICAgICAgICAgaW5wdXRzOiBbXG4gICAgICAgICAgICAgICAgJ2V1aVNlY29uZGFyeScsXG4gICAgICAgICAgICAgICAgJ2V1aVN1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICdldWlJbmZvJyxcbiAgICAgICAgICAgICAgICAnZXVpV2FybmluZycsXG4gICAgICAgICAgICAgICAgJ2V1aURhbmdlcicsXG4gICAgICAgICAgICAgICAgJ2V1aUFjY2VudCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aUF1dG9jb21wbGV0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBwdWJsaWMgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuYmFzZVN0YXRlc0RpcmVjdGl2ZS5nZXRDc3NDbGFzc2VzKCdldWktYXV0b2NvbXBsZXRlJyksXG4gICAgICAgICAgICAnZXVpLWF1dG9jb21wbGV0ZS0tY2hpcHMtcG9zaXRpb24tJyArIHRoaXMuY2hpcHNQb3NpdGlvbixcbiAgICAgICAgXVxuICAgICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBhdXRvY29tcGxldGVEYXRhOiBFdWlBdXRvQ29tcGxldGVJdGVtW10gPSBbXTtcbiAgICBASW5wdXQoKSB2aXNpYmxlT3B0aW9ucyA9IDU7XG4gICAgQElucHV0KCkgbWF0Y2hpbmc6ICdzdGFydFdpdGgnIHwgJ2NvbnRhaW5zJyA9ICdjb250YWlucyc7XG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbiAgICBASW5wdXQoKSBhdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQ6IEV1aUF1dG9Db21wbGV0ZUl0ZW1bXSA9IFtdO1xuICAgIEBJbnB1dCgpIGNoaXBzU29ydE9yZGVyOiAnQVNDJyB8ICdERVNDJyA9ICdBU0MnO1xuICAgIEBJbnB1dCgpIGl0ZW1zU29ydE9yZGVyOiAnQVNDJyB8ICdERVNDJyA9ICdBU0MnO1xuICAgIEBJbnB1dCgpIGNoaXBzUG9zaXRpb246ICd0b3AnIHwgJ2JvdHRvbScgfCAnaW5zaWRlJyA9ICd0b3AnO1xuICAgIEBJbnB1dCgpIGdyb3VwQnk6IHN0cmluZztcbiAgICBASW5wdXQoKSB0b2dnbGVMaW5rTW9yZUxhYmVsOiBzdHJpbmcgPSBudWxsO1xuICAgIEBJbnB1dCgpIHRvZ2dsZUxpbmtMZXNzTGFiZWw6IHN0cmluZyA9IG51bGw7XG4gICAgQElucHV0KCkgY2xhc3NMaXN0OiBzdHJpbmcgPSBudWxsO1xuICAgIEBJbnB1dCgpIHBhbmVsV2lkdGg6IHN0cmluZyB8IG51bWJlcjtcbiAgICBASW5wdXQoKSBkcmFnQW5kRHJvcFNvdXJjZU5hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBkcmFnQW5kRHJvcENvbm5lY3RlZFRvOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzRnJlZVZhbHVlQWxsb3dlZCA9IHRydWU7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzUmVhZG9ubHkgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc0NoaXBzID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQXN5bmMgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNDaGlwc1NvcnRlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0l0ZW1zU29ydGVkID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ2hpcHNSZW1vdmFibGUgPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0R1cGxpY2F0ZVZhbHVlQWxsb3dlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0FkZE9uQmx1ciAgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNGb3JjZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIG1heFZpc2libGVDaGlwc0NvdW50ID0gbnVsbDtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBjaGlwc0xhYmVsVHJ1bmNhdGVDb3VudCA9IG51bGw7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzTWF4VmlzaWJsZUNoaXBzT3BlbmVkID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ2hpcHNEcmFnQW5kRHJvcCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEV1aUF1dG9Db21wbGV0ZUl0ZW1bXT4odGhpcy5hdXRvY29tcGxldGVEYXRhKTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRPcHRpb25JbmRleCA9IDA7XG4gICAgcHVibGljIGF1dG9jb21wbGV0ZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPignJyk7XG4gICAgcHVibGljIGlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgY2hpcHM6IEV1aUNoaXBbXSA9IFtdO1xuICAgIHB1YmxpYyBkaXN0aW5jdE9wdGlvbkdyb3Vwczogc3RyaW5nW107XG4gICAgcHVibGljIGdyb3VwZWRPcHRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtpZDogc3RyaW5nXTogeyBvcHRpb25zOiBFdWlBdXRvQ29tcGxldGVJdGVtW10sIGFuY2VzdG9yTGVuZ3RoOiBudW1iZXIgfSB9Pih7fSk7XG4gICAgcHVibGljIGdsb2JhbE9wdGlvbkluZGV4ID0gMDtcbiAgICBwdWJsaWMgaXRlbVNpemUgPSA0ODtcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBFdWlBdXRvQ29tcGxldGVJdGVtIH0+O1xuICAgIHB1YmxpYyBhdXRvY29tcGxldGVPcHRHcm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogeyBsYWJlbDogc3RyaW5nIH0gfT47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKEV1aVRlbXBsYXRlRGlyZWN0aXZlKSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxFdWlUZW1wbGF0ZURpcmVjdGl2ZT47XG5cbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVBvcnRhbENvbnRlbnQnKSB0ZW1wbGF0ZVBvcnRhbENvbnRlbnQ6IFRlbXBsYXRlUmVmPEVsZW1lbnRSZWY+O1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0Q29udGFpbmVyUmVmJykgaW5wdXRDb250YWluZXJSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgndmlydHVhbFNjcm9sbGluZycpIHZpcnR1YWxTY3JvbGxpbmc6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcbiAgICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBpbnB1dDogRWxlbWVudFJlZjtcblxuICAgIEBPdXRwdXQoKSBwYW5lbENsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwYW5lbE9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGlucHV0Rm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGlucHV0Qmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgY2xlYXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpQXV0b0NvbXBsZXRlSXRlbVtdPigpO1xuICAgIEBPdXRwdXQoKSBpdGVtQWRkID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlBdXRvQ29tcGxldGVJdGVtPigpO1xuICAgIEBPdXRwdXQoKSBpdGVtUmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlBdXRvQ29tcGxldGVJdGVtPigpO1xuICAgIEBPdXRwdXQoKSBpbnB1dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAgIEBPdXRwdXQoKSBjaGlwRHJhZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlDaGlwRHJhZ0Ryb3A+KCk7XG4gICAgQE91dHB1dCgpIGNoaXBEcmFnUmVsZWFzZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpQ2hpcERyYWdEcm9wPigpO1xuICAgIEBPdXRwdXQoKSBjaGlwRHJvcCA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpQ2hpcERyYWdEcm9wPigpO1xuXG4gICAgcHJvdGVjdGVkIGhhc0FyaWFSZXF1aXJlZEF0dHJpYnV0ZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG4gICAgcHJpdmF0ZSBpc09wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZVBvcnRhbDogVGVtcGxhdGVQb3J0YWw8dW5rbm93bj47XG4gICAgcHJpdmF0ZSBrZXlib2FyZE9wdGlvblNlbGVjdG9ySGFuZGxlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIGFkZE9uQmx1ckNsaWNrSGFuZGxlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIGlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgcHJpdmF0ZSBrZXlib2FyZFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIGF1dG9jb21wbGV0ZU9wdGlvbnNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgcHJpdmF0ZSBzY3JvbGxEaXNwYXRjaGVyU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUgd2luZG93UmVzaXplU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUgdmFsdWU6IEV1aUF1dG9Db21wbGV0ZUl0ZW0gfCBFdWlBdXRvQ29tcGxldGVJdGVtW10gPSBudWxsO1xuICAgIHByaXZhdGUgVE9QID0gbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAndG9wJyB9LCB7IG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2JvdHRvbScgfSwgMCwgMCwgW1xuICAgICAgICAnZXVpLWF1dG9jb21wbGV0ZS1wb3NpdGlvbicsXG4gICAgICAgICdldWktYXV0b2NvbXBsZXRlLXBvc2l0aW9uLS10b3AnLFxuICAgIF0pO1xuICAgIHByaXZhdGUgQk9UVE9NID0gbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAnYm90dG9tJyB9LCB7IG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ3RvcCcgfSwgMCwgMCwgW1xuICAgICAgICAnZXVpLWF1dG9jb21wbGV0ZS1wb3NpdGlvbicsXG4gICAgICAgICdldWktYXV0b2NvbXBsZXRlLXBvc2l0aW9uLS1ib3R0b20nLFxuICAgIF0pO1xuICAgIHByaXZhdGUgcHJlZmVycmVkUG9zaXRvbnM6IENvbm5lY3Rpb25Qb3NpdGlvblBhaXJbXSA9IFt0aGlzLkJPVFRPTSwgdGhpcy5UT1BdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIGxpdmVBbm5vdW5jZXI6IExpdmVBbm5vdW5jZXIsXG4gICAgICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlcjogU2Nyb2xsRGlzcGF0Y2hlcixcbiAgICAgICAgcHJpdmF0ZSBiYXNlU3RhdGVzRGlyZWN0aXZlOiBCYXNlU3RhdGVzRGlyZWN0aXZlLFxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbDogTmdDb250cm9sLFxuICAgICkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjICYmIGMuYXV0b2NvbXBsZXRlRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgJiYgYy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQgJiYgdGhpcy5oYXNDaGlwcykge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQgPSBjLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZC5jdXJyZW50VmFsdWUubWFwKChzOiBFdWlBdXRvQ29tcGxldGVJdGVtKSA9PiAoeyAuLi5zLCBldWlJbnRlcm5hbElkOiB1dWlkLnY0KCkgfSkpO1xuICAgICAgICAgICAgdGhpcy5jaGlwcyA9IHRoaXMubWFwVG9DaGlwKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucygnJywgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlucHV0QXJpYVJlcXVpcmVkQXR0cmlidXRlKHRoaXMuY29udHJvbCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wuc2V0RXJyb3JzKHRoaXMuY29udHJvbC5lcnJvcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dEFyaWFSZXF1aXJlZEF0dHJpYnV0ZSh0aGlzLmNvbnRyb2wpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKHZhbHVlLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNDaGlwcykge1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZC5sZW5ndGggPiAwID8gdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQgOiBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kSXRlbSA9IHRoaXMuYXV0b2NvbXBsZXRlRGF0YS5maW5kKChkKSA9PiBkLmxhYmVsLnRvTG93ZXJDYXNlKCkudHJpbSgpID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShmb3VuZEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPyB0aGlzLm9uQ2hhbmdlKHsgbGFiZWw6IHZhbHVlIH0pIDogdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucygnJywgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KHZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0FzeW5jKSB7XG4gICAgICAgICAgICB0aGlzLnNldE9wdGlvbnMoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/ICcnIDogdGhpcy52YWx1ZT8ubGFiZWwsIHRoaXMuaXNJdGVtc1NvcnRlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVQb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy50ZW1wbGF0ZVBvcnRhbENvbnRlbnQsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG5cbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0VHlwZSgpID09PSAnZHJvcGRvd25PcHRpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5nZXRUeXBlKCkgPT09ICdkcm9wZG93bk9wdEdyb3VwJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0R3JvdXBUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5rZXlib2FyZE9wdGlvblNlbGVjdG9ySGFuZGxlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmFkZE9uQmx1ckNsaWNrSGFuZGxlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy53aW5kb3dSZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBnZXQgY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9uR3JvdXBzOiBzdHJpbmdbXSA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZVxuICAgICAgICAgICAgICAgIC5tYXAoaXRlbSA9PiB0aGlzLmdyb3VwQnkuc3BsaXQoJy4nKS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChwcmV2ID8gcHJldltjdXJyXSA6IG51bGwpLCBpdGVtIHx8IHNlbGYpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKG9wdGlvbkdyb3VwOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZS5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb24pID0+IHRoaXMuZ3JvdXBCeS5zcGxpdCgnLicpLnJlZHVjZSgocHJldiwgY3VycikgPT4gKHByZXYgPyBwcmV2W2N1cnJdIDogbnVsbCksIG9wdGlvbiB8fCBzZWxmKSA9PT0gb3B0aW9uR3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChvcHRpb25Hcm91cDogc3RyaW5nLCBpbmRleCwgYXJyYXk6IHN0cmluZ1tdKSA9PiBhcnJheS5pbmRleE9mKG9wdGlvbkdyb3VwKSA9PT0gaW5kZXgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlLmxlbmd0aCA+PSB0aGlzLnZpc2libGVPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZU9wdGlvbnMgKiB0aGlzLml0ZW1TaXplO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxJdGVtcyA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZS5sZW5ndGggKyBmaWx0ZXJlZE9wdGlvbkdyb3Vwcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChzY3JvbGxJdGVtcyA+IHRoaXMudmlzaWJsZU9wdGlvbnMgPyB0aGlzLnZpc2libGVPcHRpb25zIDogc2Nyb2xsSXRlbXMpICogdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWUubGVuZ3RoID49IHRoaXMudmlzaWJsZU9wdGlvbnMgP1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZU9wdGlvbnMgKiB0aGlzLml0ZW1TaXplIDpcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWUubGVuZ3RoICogdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzT3BlbiQudmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGhhc09wdGlvbnNSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWUubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3BlblBhbmVsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuICYmICF0aGlzLmlzUmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnNjcmlwdGlvbiA9IHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclxuICAgICAgICAgICAgICAgIC5hbmNlc3RvclNjcm9sbGVkKHRoaXMuaW5wdXQpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDZGtTY3JvbGxhYmxlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVQYXJlbnQgPSBldmVudCA/IGV2ZW50LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50IDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgc2Nyb2xsYWJsZVBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMud2luZG93UmVzaXplU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5UmVmICYmIHRoaXMub3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpICYmICF0aGlzLnBhbmVsV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVTaXplKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5pbnB1dENvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuZ2V0UG9zaXRpb25TdHJhdGVneSgpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLmdldFNjcm9sbFN0cmF0ZWd5KCk7XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMucGFuZWxXaWR0aCA/IHRoaXMucGFuZWxXaWR0aCA6IHRoaXMuaW5wdXRDb250YWluZXJSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ2V1aS1hdXRvY29tcGxldGVfX3BhbmVsLWNvbnRhaW5lcicsIHRoaXMuY2xhc3NMaXN0XSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaCh0aGlzLnRlbXBsYXRlUG9ydGFsKTtcblxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmXG4gICAgICAgICAgICAgICAgLm91dHNpZGVQb2ludGVyRXZlbnRzKClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFyRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ldWktc3ByaXRlLWV1aS1jbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0VsZW1lbnRPckNoaWxkT2ZFbGVtZW50ID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwYXJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gcGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0NsZWFyYWJsZUJ1dHRvbiA9IHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdldWktc3ByaXRlLWV1aS1jbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0lucHV0ID0gdGFyZ2V0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aS1hdXRvY29tcGxldGVfX2lucHV0Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NsZWFyYWJsZUJ1dHRvbiAmJiAhaXNJbnB1dCAmJiAhaXNFbGVtZW50T3JDaGlsZE9mRWxlbWVudCh0YXJnZXRFbGVtZW50LCBjbGVhckVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NsZWFyYWJsZUJ1dHRvbiAmJiAhdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0RWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5wdXQgJiYgIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucygnZXVpLWF1dG9jb21wbGV0ZV9faW5wdXQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmXG4gICAgICAgICAgICAgICAgLmtleWRvd25FdmVudHMoKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChrZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmtleT8udG9Mb3dlckNhc2UoKSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9uc1N1YnNjcmlwdGlvbiA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy5zdWJzY3JpYmUoKGF1dG9jb21wbGV0ZU9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYucmVtb3ZlUGFuZWxDbGFzcygnZXVpLWF1dG9jb21wbGV0ZV9fcGFuZWwtY29udGFpbmVyLS1uby1vcHRpb24nKTtcbiAgICAgICAgICAgICAgICBpZiAoYXV0b2NvbXBsZXRlT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3MoJ2V1aS1hdXRvY29tcGxldGVfX3BhbmVsLWNvbnRhaW5lci0tbm8tb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxpdmVBbm5vdW5jZXJTb3VyY2UgPSB0aGlzLmdyb3VwQnkgPyBPYmplY3QudmFsdWVzKHRoaXMuZ3JvdXBlZE9wdGlvbnMudmFsdWUpLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAub3B0aW9ucykgOiB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMubGl2ZUFubm91bmNlci5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5saXZlQW5ub3VuY2VyLmFubm91bmNlKGxpdmVBbm5vdW5jZXJTb3VyY2VbMF0/LmxhYmVsKTtcblxuICAgICAgICAgICAgbGV0IHZpc2libGVSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGxldCB2aXNpYmxlUmFuZ2VFbmQgPSB0aGlzLnZpc2libGVPcHRpb25zIC0gMTtcbiAgICAgICAgICAgIHRoaXMua2V5Ym9hcmRPcHRpb25TZWxlY3RvckhhbmRsZXJTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoZTogS2V5Ym9hcmRFdmVudCkgPT4gZS5jb2RlID09PSAnQXJyb3dEb3duJyB8fCBlLmNvZGUgPT09ICdBcnJvd1VwJyB8fCBlLmNvZGUgPT09ICdFbnRlcicgfHwgZS5jb2RlID09PSAnVGFiJyksXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0Fycm93RG93bicgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4IDwgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXZlQW5ub3VuY2VyU291cmNlID0gdGhpcy5ncm91cEJ5ID8gT2JqZWN0LnZhbHVlcyh0aGlzLmdyb3VwZWRPcHRpb25zLnZhbHVlKS5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLm9wdGlvbnMpIDogdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXZlQW5ub3VuY2VyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXZlQW5ub3VuY2VyLmFubm91bmNlKGxpdmVBbm5vdW5jZXJTb3VyY2VbdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4XS5sYWJlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnQXJyb3dVcCcgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGl2ZUFubm91bmNlclNvdXJjZSA9IHRoaXMuZ3JvdXBCeSA/IE9iamVjdC52YWx1ZXModGhpcy5ncm91cGVkT3B0aW9ucy52YWx1ZSkuZmxhdE1hcChncm91cCA9PiBncm91cC5vcHRpb25zKSA6IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUFubm91bmNlci5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUFubm91bmNlci5hbm5vdW5jZShsaXZlQW5ub3VuY2VyU291cmNlW3RoaXMuc2VsZWN0ZWRPcHRpb25JbmRleF0ubGFiZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjSW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggLSB0aGlzLnZpcnR1YWxTY3JvbGxpbmc/LmdldFJlbmRlcmVkUmFuZ2UoKS5zdGFydDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0Fycm93RG93bicgJiYgY0luZGV4ID4gdmlzaWJsZVJhbmdlRW5kIC0gdmlzaWJsZVJhbmdlU3RhcnQgLSB2aXNpYmxlUmFuZ2VFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmJPcHRpb25zR3JvdXAgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5iT3B0aW9ucyA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmdyb3VwZWRPcHRpb25zLnZhbHVlKS5mb3JFYWNoKGdyb3VwZWRPcHRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBlZE9wdGlvbnMudmFsdWVbZ3JvdXBlZE9wdGlvbl0ub3B0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4ID4gdGhpcy5ncm91cGVkT3B0aW9ucy52YWx1ZVtncm91cGVkT3B0aW9uXS5hbmNlc3Rvckxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYk9wdGlvbnNHcm91cCArKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggKyBuYk9wdGlvbnNHcm91cCkgPiB2aXNpYmxlUmFuZ2VFbmQgJiYgdmlzaWJsZVJhbmdlRW5kIDw9IChuYk9wdGlvbnMgKyBuYk9wdGlvbnNHcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsaW5nLnNjcm9sbFRvSW5kZXgoKHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCArIG5iT3B0aW9uc0dyb3VwKSAtIHZpc2libGVSYW5nZUVuZCArIHZpc2libGVSYW5nZVN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJhbmdlU3RhcnQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJhbmdlRW5kKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0Fycm93VXAnICYmIGNJbmRleCA8IHZpc2libGVSYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCA8IHZpc2libGVSYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbGluZy5zY3JvbGxUb0luZGV4KHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVSYW5nZVN0YXJ0LS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVSYW5nZUVuZC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmNvZGUgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNPcHRpb25zUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBbXS5jb25jYXQoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmdyb3VwZWRPcHRpb25zLnZhbHVlKS5tYXAoZ3JvdXAgPT4gZ3JvdXAub3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdGVkKG9wdGlvbnNbdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uU2VsZWN0ZWQodGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlW3RoaXMuc2VsZWN0ZWRPcHRpb25JbmRleF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0NoaXBzICYmIHRoaXMuaXNGcmVlVmFsdWVBbGxvd2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkKHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBZGRPbkJsdXIgICYmIHRoaXMuaGFzQ2hpcHMgJiYgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnZhbHVlPy50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGQodGhpcy5hdXRvY29tcGxldGVDb250cm9sLnZhbHVlLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGb3JjZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wuc2V0VmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmFkZE9uQmx1ckNsaWNrSGFuZGxlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNBZGRPbkJsdXIgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRPbkJsdXJDbGlja0hhbmRsZXJTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aS1hdXRvY29tcGxldGUtb3B0aW9uJykgJiYgdGhpcy5oYXNDaGlwcyAmJiB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWU/LnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZCh0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWUudHJpbSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRm9yY2VTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aS1hdXRvY29tcGxldGUtb3B0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucygnJywgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlzT3BlbiQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucGFuZWxPcGVuLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZVBhbmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xuICAgICAgICB0aGlzLmlzT3BlbiQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmtleWJvYXJkT3B0aW9uU2VsZWN0b3JIYW5kbGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy53aW5kb3dSZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5wYW5lbENsb3NlLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25PcHRpb25TZWxlY3RlZChlOiBFdWlBdXRvQ29tcGxldGVJdGVtKTogdm9pZCB7XG4gICAgICAgIGlmICghZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNDaGlwcykge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkLnB1c2goeyAuLi5lLCBldWlJbnRlcm5hbElkOiB1dWlkLnY0KCkgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwcyA9IHRoaXMubWFwVG9DaGlwKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCA9IFtlXTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBlLmxhYmVsO1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5zZXRWYWx1ZShlLmxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIHRoaXMuYWRkT25CbHVyQ2xpY2tIYW5kbGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5pdGVtQWRkLmVtaXQoZSk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhZGQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXZhbHVlIHx8ICghdGhpcy5pc0ZyZWVWYWx1ZUFsbG93ZWQgJiYgIXRoaXMuYXV0b2NvbXBsZXRlRGF0YS5maW5kKGEgPT4gYS5sYWJlbCA9PT0gdmFsdWUudHJpbSgpKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBpZiAoIXRoaXMuaXNEdXBsaWNhdGVWYWx1ZUFsbG93ZWQgJiYgdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQuc29tZShzID0+IHMubGFiZWwudHJpbSgpID09PSB2YWx1ZS50cmltKCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuYXV0b2NvbXBsZXRlRGF0YS5maW5kKGEgPT4gYS5sYWJlbCA9PT0gdmFsdWUudHJpbSgpKSB8fCB7IGxhYmVsOiB2YWx1ZS50cmltKCksIGV1aUludGVybmFsSWQ6IHV1aWQudjQoKSB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQucHVzaChpdGVtKTtcbiAgICAgICAgdGhpcy5jaGlwcyA9IHRoaXMubWFwVG9DaGlwKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG5cbiAgICAgICAgdGhpcy5hZGRPbkJsdXJDbGlja0hhbmRsZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pc0ZvcmNlU2VsZWN0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLml0ZW1BZGQuZW1pdChpdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3B0aW9uc1RyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBFdWlBdXRvQ29tcGxldGVJdGVtKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IEV1aUF1dG9Db21wbGV0ZUl0ZW0gfCBFdWlBdXRvQ29tcGxldGVJdGVtW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0NoaXBzKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCA9IHZhbHVlID8gKFsuLi52YWx1ZSBhcyBFdWlBdXRvQ29tcGxldGVJdGVtW11dKSA6IFtdO1xuICAgICAgICAgICAgdGhpcy5jaGlwcyA9IHRoaXMubWFwVG9DaGlwKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5wYXRjaFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucygnJywgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlID8gKHZhbHVlIGFzIEV1aUF1dG9Db21wbGV0ZUl0ZW0pLmxhYmVsIDogbnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IHZhbHVlID8gKHZhbHVlIGFzIEV1aUF1dG9Db21wbGV0ZUl0ZW0pLmxhYmVsIDogbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucyhpbnB1dFZhbHVlLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICBpc0Rpc2FibGVkID8gdGhpcy5hdXRvY29tcGxldGVDb250cm9sLmRpc2FibGUoKSA6IHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaCA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IFxuICAgICAgICAgICAgICAgICAgICAvXlthLXpBLVowLTldJC8udGVzdChldmVudC5rZXkpIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleSA9PT0gJ1NwYWNlJyB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlblBhbmVsKCk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaXBzUG9zaXRpb24gPT09ICdpbnNpZGUnICYmIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgJiYgKCF0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWUgfHwgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMuY2hpcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGlwUmVtb3ZlKHsgY2hpcHM6IFsuLi50aGlzLmNoaXBzXSwgcmVtb3ZlZCB9KTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7IHdpZHRoOiB0aGlzLmlucHV0Q29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub3BlblBhbmVsKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlucHV0Rm9jdXMuZW1pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pbnB1dEJsdXIuZW1pdCgpO1xuICAgICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGlwUmVtb3ZlKGU6IHsgY2hpcHM6IEV1aUNoaXBbXTsgcmVtb3ZlZDogRXVpQ2hpcCB8IHsgY2hpcDogRXVpQ2hpcDsgZXZlbnQ6IEV2ZW50IH0gfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudCA9IGUgYXMgeyBjaGlwczogRXVpQ2hpcFtdOyByZW1vdmVkOiBFdWlDaGlwIH07XG4gICAgICAgIGNvbnN0IGl0ZW1SZW1vdmVkID0gdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQuZmluZChpID0+IGkuaWQgPT09IGV2ZW50LnJlbW92ZWQuaWQpO1xuXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkID0gdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWRcbiAgICAgICAgICAgIC5maWx0ZXIoaSA9PiBldmVudC5jaGlwcy5maW5kKGMgPT4gYy5pZCA9PT0gaS5pZCkpXG4gICAgICAgICAgICAuZmlsdGVyKGkgPT4gZXZlbnQuY2hpcHMuZmluZChjID0+IGMuZXVpSW50ZXJuYWxJZCA9PT0gaS5ldWlJbnRlcm5hbElkKSk7XG4gICAgICAgIHRoaXMuY2hpcHMgPSB0aGlzLm1hcFRvQ2hpcCh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCk7XG5cbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQubGVuZ3RoID4gMCA/IHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkIDogbnVsbCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLml0ZW1SZW1vdmUuZW1pdChpdGVtUmVtb3ZlZCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hpcERyb3BwZWQoZTogRXVpQ2hpcERyYWdEcm9wKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkID0gZS5jaGlwcy5tYXAoYyA9PiBzZWxlY3RlZC5maW5kKChhKSA9PiBhLmlkID09PSBjLmlkKSk7XG4gICAgICAgIHRoaXMuY2hpcHMgPSB0aGlzLm1hcFRvQ2hpcCh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy5uZXh0KHRoaXMuZmlsdGVyT3B0aW9ucygnJykpO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQubGVuZ3RoID4gMCA/IHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkIDogbnVsbCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuXG4gICAgICAgIHRoaXMuY2hpcERyb3AuZW1pdChlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGlwRHJhZ1N0YXJ0ZWQoZTogRXVpQ2hpcERyYWdEcm9wKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hpcERyYWdTdGFydC5lbWl0KGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoaXBEcmFnUmVsZWFzZWQoZTogRXVpQ2hpcERyYWdEcm9wKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hpcERyYWdSZWxlYXNlLmVtaXQoZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJdGVtU2l6ZSgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBvcHRpb25IZWlnaHQgPSB0aGlzLm92ZXJsYXlSZWY/Lmhvc3RFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCcuZXVpLWF1dG9jb21wbGV0ZV9fcGFuZWwnKT8ucXVlcnlTZWxlY3RvckFsbCgnLmV1aS1hdXRvY29tcGxldGUtb3B0aW9uJylbMF0/LmNsaWVudEhlaWdodCArIDE7XG4gICAgICAgIHJldHVybiBvcHRpb25IZWlnaHQgfHwgNDg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRPcHRpb25zKHZhbHVlOiBzdHJpbmcsIGlzSXRlbXNTb3J0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLm5leHQoaXNJdGVtc1NvcnRlZCA/ICh0aGlzLm9yZGVyQXJyYXkodGhpcy5maWx0ZXJPcHRpb25zKHZhbHVlKSwgdGhpcy5pdGVtc1NvcnRPcmRlcikpIDogdGhpcy5maWx0ZXJPcHRpb25zKHZhbHVlKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgICAgY29uc3QgeyBncm91cGVkT3B0aW9ucywgZGlzdGluY3RPcHRpb25Hcm91cHMgfSA9IHRoaXMuZ3JvdXBpbmdIYW5kbGVyKHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZSwgdGhpcy5ncm91cEJ5KTtcblxuICAgICAgICAgICAgdGhpcy5ncm91cGVkT3B0aW9ucy5uZXh0KGdyb3VwZWRPcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuZGlzdGluY3RPcHRpb25Hcm91cHMgPSBkaXN0aW5jdE9wdGlvbkdyb3VwcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UG9zaXRpb25TdHJhdGVneSgpOiBQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheVxuICAgICAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuaW5wdXRDb250YWluZXJSZWYubmF0aXZlRWxlbWVudCBhcyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4pXG4gICAgICAgICAgICAud2l0aFBvc2l0aW9ucyh0aGlzLnByZWZlcnJlZFBvc2l0b25zKVxuICAgICAgICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoZmFsc2UpXG4gICAgICAgICAgICAud2l0aExvY2tlZFBvc2l0aW9uKHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2Nyb2xsU3RyYXRlZ3koKTogUmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oeyBzY3JvbGxUaHJvdHRsZTogMTAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJPcHRpb25zKGlucHV0VmFsdWU6IHN0cmluZyk6IEV1aUF1dG9Db21wbGV0ZUl0ZW1bXSB7XG4gICAgICAgIGxldCBkYXRhOiBFdWlBdXRvQ29tcGxldGVJdGVtW10gPSBbXTtcbiAgICAgICAgaWYgKGlucHV0VmFsdWUpIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmF1dG9jb21wbGV0ZURhdGEuZmlsdGVyKChhdXRvY29tcGxldGVJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoaW5nID09PSAnY29udGFpbnMnICYmXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZUl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKGlucHV0VmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSAhPT0gLTFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF1dG9jb21wbGV0ZUl0ZW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGluZyA9PT0gJ3N0YXJ0V2l0aCcgJiZcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlSXRlbS5sYWJlbC50b0xvd2VyQ2FzZSgpLnN1YnN0cigwLCBpbnB1dFZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKSA9PT0gaW5wdXRWYWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhdXRvY29tcGxldGVJdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuYXV0b2NvbXBsZXRlRGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc0NoaXBzKSB7XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoZCA9PiAhdGhpcy5pc0R1cGxpY2F0ZVZhbHVlQWxsb3dlZCA/ICF0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZC5zb21lKHNlbGVjdGVkSXRlbSA9PiBkLmlkID09PSBzZWxlY3RlZEl0ZW0uaWQpIDogdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0l0ZW1zU29ydGVkKSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5vcmRlckFycmF5KGRhdGEsIHRoaXMuaXRlbXNTb3J0T3JkZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBUb0NoaXAoaXRlbXM6IEV1aUF1dG9Db21wbGV0ZUl0ZW1bXSk6IEV1aUNoaXBbXSB7XG4gICAgICAgIGNvbnN0IGNoaXBzID0gaXRlbXMubWFwKChzZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFdWlDaGlwKHtcbiAgICAgICAgICAgICAgICBpZDogc2VsZWN0ZWQuaWQsXG4gICAgICAgICAgICAgICAgZXVpSW50ZXJuYWxJZDogc2VsZWN0ZWQuZXVpSW50ZXJuYWxJZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogc2VsZWN0ZWQubGFiZWwsXG4gICAgICAgICAgICAgICAgdHlwZUNsYXNzOiBzZWxlY3RlZC50eXBlQ2xhc3MsXG4gICAgICAgICAgICAgICAgaXNPdXRsaW5lOiBzZWxlY3RlZC5pc091dGxpbmUsXG4gICAgICAgICAgICAgICAgaXNSb3VuZGVkOiBzZWxlY3RlZC5pc1JvdW5kZWQsXG4gICAgICAgICAgICAgICAgc2l6ZUNsYXNzOiBzZWxlY3RlZC5zaXplQ2xhc3MsXG4gICAgICAgICAgICAgICAgaXNSZW1vdmFibGU6IHNlbGVjdGVkLmlzUmVtb3ZhYmxlLFxuICAgICAgICAgICAgICAgIHRvb2x0aXBNZXNzYWdlOiBzZWxlY3RlZC50b29sdGlwPy50b29sdGlwTWVzc2FnZSxcbiAgICAgICAgICAgICAgICB0b29sdGlwOiBuZXcgRXVpQ2hpcFRvb2x0aXAoc2VsZWN0ZWQudG9vbHRpcCksXG4gICAgICAgICAgICAgICAgaWNvbkNsYXNzOiBzZWxlY3RlZC5pY29uQ2xhc3MsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDaGlwc1NvcnRlZCAmJiBjaGlwcy5sZW5ndGggPiAwID8gKHRoaXMub3JkZXJBcnJheShjaGlwcywgdGhpcy5jaGlwc1NvcnRPcmRlcikgYXMgRXVpQ2hpcFtdKSA6IGNoaXBzO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3JkZXJBcnJheTxUIGV4dGVuZHMgeyBsYWJlbDogc3RyaW5nOyB9Pih0YWI6IFRbXSwgc29ydE9yZGVyOiAnQVNDJyB8ICdERVNDJyk6IFRbXSB7XG4gICAgICAgIHRhYi5zb3J0KChhOiBULCBiOiBUKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhT2JqID0gYS5sYWJlbC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgYk9iaiA9IGIubGFiZWwudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgaWYgKHNvcnRPcmRlciA9PT0gJ0FTQycpIHtcbiAgICAgICAgICAgICAgICBpZiAoYU9iaiA8IGJPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYU9iaiA+IGJPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoYU9iaiA+IGJPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYU9iaiA8IGJPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGFiO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ3JvdXBpbmdIYW5kbGVyKG9wdGlvbnM6IEV1aUF1dG9Db21wbGV0ZUl0ZW1bXSwgZ3JvdXBCeTogc3RyaW5nKTogXG4gICAgeyBncm91cGVkT3B0aW9uczogeyBbaWQ6IHN0cmluZ106IHsgb3B0aW9uczogRXVpQXV0b0NvbXBsZXRlSXRlbVtdLCBhbmNlc3Rvckxlbmd0aDogbnVtYmVyIH0gfSwgZGlzdGluY3RPcHRpb25Hcm91cHM6IHN0cmluZ1tdIH0ge1xuICAgICAgICBjb25zdCBkaXN0aW5jdEdyb3Vwczogc3RyaW5nW10gPSB0aGlzLmF1dG9jb21wbGV0ZURhdGEubWFwKGl0ZW0gPT4gZ3JvdXBCeS5zcGxpdCgnLicpLnJlZHVjZSgocHJldiwgY3VycikgPT4gKHByZXYgPyBwcmV2W2N1cnJdIDogbnVsbCksIGl0ZW0gfHwgc2VsZikpO1xuICAgICAgICBjb25zdCBkaXN0aW5jdE9wdGlvbkdyb3Vwczogc3RyaW5nW10gPSBbLi4ubmV3IFNldChkaXN0aW5jdEdyb3VwcyldLnNvcnQoKGE6IHN0cmluZywgYjogc3RyaW5nKSA9PiAoYSA+IGIgPyAxIDogLTEpKTtcbiAgICAgICAgY29uc3QgZ3JvdXBlZE9wdGlvbnM6IHsgW2lkOiBzdHJpbmddOiB7IG9wdGlvbnM6IEV1aUF1dG9Db21wbGV0ZUl0ZW1bXSwgYW5jZXN0b3JMZW5ndGg6IG51bWJlciB9IH0gPSB7fTtcbiAgICBcbiAgICAgICAgbGV0IGFuY2VzdG9yTGVuZ3RoID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBkaXN0aW5jdE9wdGlvbkdyb3Vwcykge1xuICAgICAgICAgICAgbGV0IG8gPSBvcHRpb25zLmZpbHRlcihvcHRpb24gPT4gZ3JvdXBCeS5zcGxpdCgnLicpLnJlZHVjZSgocHJldiwgY3VycikgPT4gKHByZXYgPyBwcmV2W2N1cnJdIDogbnVsbCksIG9wdGlvbiB8fCBzZWxmKSA9PT0gZ3JvdXApO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNJdGVtc1NvcnRlZCkge1xuICAgICAgICAgICAgICAgIG8gPSB0aGlzLm9yZGVyQXJyYXkobywgdGhpcy5pdGVtc1NvcnRPcmRlcikgYXMgRXVpQXV0b0NvbXBsZXRlSXRlbVtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBncm91cGVkT3B0aW9uc1tncm91cF0gPSB7IG9wdGlvbnM6IG8sIGFuY2VzdG9yTGVuZ3RoIH07XG4gICAgICAgICAgICBhbmNlc3Rvckxlbmd0aCArPSBvLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICByZXR1cm4geyBncm91cGVkT3B0aW9ucywgZGlzdGluY3RPcHRpb25Hcm91cHMgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmlzaWJsZShvcmlnaW46IEhUTUxFbGVtZW50LCBzY3JvbGxhYmxlUGFyZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBvcmlnaW5ZID0gb3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnk7XG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGVQYXJlbnRZID0gTWF0aC5hYnMoc2Nyb2xsYWJsZVBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55KTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZVBhcmVudEhlaWdodCA9IHNjcm9sbGFibGVQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IC0gNTU7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChvcmlnaW5ZID4gMCAmJiBvcmlnaW5ZIDwgc2Nyb2xsYWJsZVBhcmVudEhlaWdodCkgfHxcbiAgICAgICAgICAgIChvcmlnaW5ZIC0gc2Nyb2xsYWJsZVBhcmVudFkgPiAwICYmIG9yaWdpblkgPCBzY3JvbGxhYmxlUGFyZW50WSArIHNjcm9sbGFibGVQYXJlbnRIZWlnaHQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZSA9IDxUPihjaGFuZ2U/OiBUKTogdm9pZCA9PiB7XG4gICAgICAgIC8qKiBlbXB0eSAqL1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uVG91Y2ggPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIC8qKiBlbXB0eSAqL1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBgYXJpYS1yZXF1aXJlZGAgYXR0cmlidXRlIG9uIHRoZSBpbnB1dCBlbGVtZW50LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVJbnB1dEFyaWFSZXF1aXJlZEF0dHJpYnV0ZShjb250cm9sOiBOZ0NvbnRyb2wpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYXNBcmlhUmVxdWlyZWRBdHRyaWJ1dGUgPSBjb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImV1aS1hdXRvY29tcGxldGVfX3dyYXBwZXJcIj5cbiAgICBAaWYgKGNoaXBzUG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBpZiAoaGFzQ2hpcHMpIHtcbiAgICAgICAgPGV1aS1jaGlwLWxpc3RcbiAgICAgICAgICAgIFtjaGlwc109XCJjaGlwc1wiXG4gICAgICAgICAgICBbaXNDaGlwc1JlbW92YWJsZV09XCJpc0NoaXBzUmVtb3ZhYmxlICYmICFpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgIFttYXhWaXNpYmxlQ2hpcHNDb3VudF09XCJtYXhWaXNpYmxlQ2hpcHNDb3VudFwiXG4gICAgICAgICAgICBbaXNNYXhWaXNpYmxlQ2hpcHNPcGVuZWRdPVwiaXNNYXhWaXNpYmxlQ2hpcHNPcGVuZWRcIlxuICAgICAgICAgICAgW2NoaXBzTGFiZWxUcnVuY2F0ZUNvdW50XT1cImNoaXBzTGFiZWxUcnVuY2F0ZUNvdW50XCJcbiAgICAgICAgICAgIFt0b2dnbGVMaW5rTW9yZUxhYmVsXT1cInRvZ2dsZUxpbmtNb3JlTGFiZWxcIlxuICAgICAgICAgICAgW3RvZ2dsZUxpbmtMZXNzTGFiZWxdPVwidG9nZ2xlTGlua0xlc3NMYWJlbFwiXG4gICAgICAgICAgICBbaXNDaGlwc0RyYWdBbmREcm9wXT1cImlzQ2hpcHNEcmFnQW5kRHJvcFwiXG4gICAgICAgICAgICBbZHJhZ0FuZERyb3BTb3VyY2VOYW1lXT1cImRyYWdBbmREcm9wU291cmNlTmFtZVwiXG4gICAgICAgICAgICBbZHJhZ0FuZERyb3BDb25uZWN0ZWRUb109XCJkcmFnQW5kRHJvcENvbm5lY3RlZFRvXCJcbiAgICAgICAgICAgIChjaGlwRHJvcCk9XCJvbkNoaXBEcm9wcGVkKCRldmVudClcIlxuICAgICAgICAgICAgKGNoaXBEcmFnU3RhcnQpPVwib25DaGlwRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2hpcERyYWdSZWxlYXNlKT1cIm9uQ2hpcERyYWdSZWxlYXNlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjaGlwUmVtb3ZlKT1cIm9uQ2hpcFJlbW92ZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8ZXVpQ2hpcExpc3RBcHBlbmRDb250ZW50PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjaGlwc1Bvc2l0aW9uID09PSAnaW5zaWRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2V1aUNoaXBMaXN0QXBwZW5kQ29udGVudD5cbiAgICAgICAgPC9ldWktY2hpcC1saXN0PlxuICAgIH1cbiAgICBAaWYgKGNoaXBzUG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY29udHJvbD5cbiAgICA8ZGl2ICpuZ0lmPVwiIWhhc0NoaXBzIHx8IChoYXNDaGlwcyAmJiAhaXNSZWFkb25seSlcIiBjbGFzcz1cImV1aS1hdXRvY29tcGxldGVfX2lucHV0LWNvbnRhaW5lclwiICNpbnB1dENvbnRhaW5lclJlZj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgIGV1aUlucHV0VGV4dFxuICAgICAgICAgICAgW2V1aUNsZWFyYWJsZV09XCIhaXNSZWFkb25seSAmJiAhaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbZXVpTG9hZGluZ109XCJpc0xvYWRpbmdcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImF1dG9jb21wbGV0ZUNvbnRyb2xcIlxuICAgICAgICAgICAgY2xhc3M9XCJldWktYXV0b2NvbXBsZXRlX19pbnB1dCB7eyBjbGFzc0xpc3QgfX1cIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlciB9fVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAoY2xlYXIpPVwib25DbGVhcigpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuUGFuZWwoKVwiXG4gICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygpXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXNPcGVuID8gJ2V1aS1hdXRvY29tcGxldGVfX3BhbmVsJyA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhdXRvY29tcGxldGVDb250cm9sLnZhbHVlPy5sZW5ndGggPiAwID8gYXV0b2NvbXBsZXRlQ29udHJvbC52YWx1ZSA6ICdJbnB1dCBmaWVsZCB3aXRob3V0IHZhbHVlJ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cImhhc0FyaWFSZXF1aXJlZEF0dHJpYnV0ZSA/ICd0cnVlJyA6IG51bGxcIlxuICAgICAgICAgICAgYXJpYS1hdXRvY29tcGxldGU9XCJib3RoXCJcbiAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgLz5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVQb3J0YWxDb250ZW50PlxuICAgIDxkaXZcbiAgICAgICAgaWQ9XCJldWktYXV0b2NvbXBsZXRlX19wYW5lbFwiXG4gICAgICAgIGNsYXNzPVwiZXVpLWF1dG9jb21wbGV0ZV9fcGFuZWxcIlxuICAgICAgICBbQHBhbmVsQW5pbWF0aW9uXT1cImlzT3BlbiA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiQXV0b2NvbXBsZXRlIHBhbmVsXCI+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgICAgICN2aXJ0dWFsU2Nyb2xsaW5nXG4gICAgICAgICAgICBbaXRlbVNpemVdPVwiaXRlbVNpemVcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIG1pbkJ1ZmZlclB4PVwiNTAwXCJcbiAgICAgICAgICAgIG1heEJ1ZmZlclB4PVwiNzUwXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cImNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCArICdweCdcIj5cbiAgICAgICAgICAgIEBpZiAoZ3JvdXBCeSkge1xuICAgICAgICAgICAgICAgIEBmb3IgKGRpc3RpbmN0T3B0aW9uR3JvdXAgb2YgZGlzdGluY3RPcHRpb25Hcm91cHM7IGxldCBpID0gJGluZGV4OyB0cmFjayBkaXN0aW5jdE9wdGlvbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKChncm91cGVkT3B0aW9ucyB8IGFzeW5jKVtkaXN0aW5jdE9wdGlvbkdyb3VwXS5vcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWF1dG9jb21wbGV0ZS1vcHRpb24tZ3JvdXAgW2xhYmVsXT1cImRpc3RpbmN0T3B0aW9uR3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1hdXRvY29tcGxldGUtb3B0aW9uLWdyb3VwX19sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRvY29tcGxldGVPcHRHcm91cFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImF1dG9jb21wbGV0ZU9wdEdyb3VwVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHsgbGFiZWw6IGRpc3RpbmN0T3B0aW9uR3JvdXAgfSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRpc3RpbmN0T3B0aW9uR3JvdXAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktYXV0b2NvbXBsZXRlLW9wdGlvbi1ncm91cF9fb3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYXV0b2NvbXBsZXRlT3B0aW9uIG9mIChncm91cGVkT3B0aW9ucyB8IGFzeW5jKVtkaXN0aW5jdE9wdGlvbkdyb3VwXS5vcHRpb25zOyBsZXQgaiA9ICRpbmRleDsgdHJhY2sgYXV0b2NvbXBsZXRlT3B0aW9uLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1hdXRvY29tcGxldGUtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzR3JvdXBJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0FjdGl2ZV09XCJzZWxlY3RlZE9wdGlvbkluZGV4ID09PSAoZ3JvdXBlZE9wdGlvbnMgfCBhc3luYylbZGlzdGluY3RPcHRpb25Hcm91cF0uYW5jZXN0b3JMZW5ndGggKyBqXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImF1dG9jb21wbGV0ZU9wdGlvbi5pc0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V1aVZhcmlhbnRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uLnR5cGVDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk9wdGlvblNlbGVjdGVkKGF1dG9jb21wbGV0ZU9wdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogYXV0b2NvbXBsZXRlT3B0aW9uIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRvY29tcGxldGVPcHRpb24uaWNvbkNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ7eyBhdXRvY29tcGxldGVPcHRpb24uaWNvbkNsYXNzIH19XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXV0b2NvbXBsZXRlT3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V1aS1hdXRvY29tcGxldGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V1aS1hdXRvY29tcGxldGUtb3B0aW9uLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxldWktYXV0b2NvbXBsZXRlLW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBhdXRvY29tcGxldGVPcHRpb24gb2YgYXV0b2NvbXBsZXRlT3B0aW9ucyB8IGFzeW5jOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiBvcHRpb25zVHJhY2tCeUZuXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzQWN0aXZlXT1cInNlbGVjdGVkT3B0aW9uSW5kZXggPT09IGlcIlxuICAgICAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCJhdXRvY29tcGxldGVPcHRpb24uaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJhdXRvY29tcGxldGVPcHRpb24udHlwZUNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uU2VsZWN0ZWQoYXV0b2NvbXBsZXRlT3B0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGF1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBhdXRvY29tcGxldGVPcHRpb24gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGF1dG9jb21wbGV0ZU9wdGlvbi5pY29uQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7IGF1dG9jb21wbGV0ZU9wdGlvbi5pY29uQ2xhc3MgfX1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBhdXRvY29tcGxldGVPcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZXVpLWF1dG9jb21wbGV0ZS1vcHRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIDwvZGl2PiAgXG48L25nLXRlbXBsYXRlPlxuIl19
|
801
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktYXV0b2NvbXBsZXRlL2V1aS1hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLWF1dG9jb21wbGV0ZS9ldWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUtqQixXQUFXLEVBR1gsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixJQUFJLEVBQ0osUUFBUSxFQUVSLGVBQWUsRUFFZixnQkFBZ0IsRUFDaEIsZUFBZSxHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBZ0MsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0csT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsc0JBQXNCLEdBQzlCLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUc3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7OztBQXVCekQsTUFBTSxPQUFPLHdCQUF3QjtJQUNqQyxJ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QkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIElucHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBPcHRpb25hbCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybUNvbnRyb2xTdGF0dXMsIE5nQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmaWx0ZXIsIGZyb21FdmVudCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblBvc2l0aW9uUGFpciwgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luLCBPdmVybGF5LCBPdmVybGF5UmVmLCBQb3NpdGlvblN0cmF0ZWd5LCBSZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3ksXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENka1Njcm9sbGFibGUsIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgU2Nyb2xsRGlzcGF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgTGl2ZUFubm91bmNlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XG5cbmltcG9ydCB7IEV1aUNoaXBEcmFnRHJvcCB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktY2hpcC1saXN0JztcbmltcG9ydCB7IEV1aUNoaXAsIEV1aUNoaXBUb29sdGlwIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1jaGlwJztcbmltcG9ydCB7IEV1aVRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgQmFzZVN0YXRlc0RpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9zaGFyZWQnO1xuXG5pbXBvcnQgeyBFdWlBdXRvQ29tcGxldGVJdGVtIH0gZnJvbSAnLi9tb2RlbHMvZXVpLWF1dG9jb21wbGV0ZS1pdGVtLm1vZGVsJztcbmltcG9ydCB7IHBhbmVsQW5pbWF0aW9uIH0gZnJvbSAnLi9hbmltYXRpb25zL2FuaW1hdGlvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc2VsZWN0b3I6ICdldWktYXV0b2NvbXBsZXRlLCBpbnB1dFtldWlBdXRvY29tcGxldGVdJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGFuaW1hdGlvbnM6IFtwYW5lbEFuaW1hdGlvbl0sXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBCYXNlU3RhdGVzRGlyZWN0aXZlLFxuICAgICAgICAgICAgaW5wdXRzOiBbXG4gICAgICAgICAgICAgICAgJ2V1aVNlY29uZGFyeScsXG4gICAgICAgICAgICAgICAgJ2V1aVN1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICdldWlJbmZvJyxcbiAgICAgICAgICAgICAgICAnZXVpV2FybmluZycsXG4gICAgICAgICAgICAgICAgJ2V1aURhbmdlcicsXG4gICAgICAgICAgICAgICAgJ2V1aUFjY2VudCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aUF1dG9jb21wbGV0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBwdWJsaWMgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuYmFzZVN0YXRlc0RpcmVjdGl2ZS5nZXRDc3NDbGFzc2VzKCdldWktYXV0b2NvbXBsZXRlJyksXG4gICAgICAgICAgICAnZXVpLWF1dG9jb21wbGV0ZS0tY2hpcHMtcG9zaXRpb24tJyArIHRoaXMuY2hpcHNQb3NpdGlvbixcbiAgICAgICAgXVxuICAgICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBhdXRvY29tcGxldGVEYXRhOiBFdWlBdXRvQ29tcGxldGVJdGVtW10gPSBbXTtcbiAgICBASW5wdXQoKSB2aXNpYmxlT3B0aW9ucyA9IDU7XG4gICAgQElucHV0KCkgbWF0Y2hpbmc6ICdzdGFydFdpdGgnIHwgJ2NvbnRhaW5zJyA9ICdjb250YWlucyc7XG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbiAgICBASW5wdXQoKSBhdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQ6IEV1aUF1dG9Db21wbGV0ZUl0ZW1bXSA9IFtdO1xuICAgIEBJbnB1dCgpIGNoaXBzU29ydE9yZGVyOiAnQVNDJyB8ICdERVNDJyA9ICdBU0MnO1xuICAgIEBJbnB1dCgpIGl0ZW1zU29ydE9yZGVyOiAnQVNDJyB8ICdERVNDJyA9ICdBU0MnO1xuICAgIEBJbnB1dCgpIGNoaXBzUG9zaXRpb246ICd0b3AnIHwgJ2JvdHRvbScgfCAnaW5zaWRlJyA9ICd0b3AnO1xuICAgIEBJbnB1dCgpIGdyb3VwQnk6IHN0cmluZztcbiAgICBASW5wdXQoKSB0b2dnbGVMaW5rTW9yZUxhYmVsOiBzdHJpbmcgPSBudWxsO1xuICAgIEBJbnB1dCgpIHRvZ2dsZUxpbmtMZXNzTGFiZWw6IHN0cmluZyA9IG51bGw7XG4gICAgQElucHV0KCkgY2xhc3NMaXN0OiBzdHJpbmcgPSBudWxsO1xuICAgIEBJbnB1dCgpIHBhbmVsV2lkdGg6IHN0cmluZyB8IG51bWJlcjtcbiAgICBASW5wdXQoKSBkcmFnQW5kRHJvcFNvdXJjZU5hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBkcmFnQW5kRHJvcENvbm5lY3RlZFRvOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzRnJlZVZhbHVlQWxsb3dlZCA9IHRydWU7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzUmVhZG9ubHkgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc0NoaXBzID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQXN5bmMgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNDaGlwc1NvcnRlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0l0ZW1zU29ydGVkID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ2hpcHNSZW1vdmFibGUgPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0R1cGxpY2F0ZVZhbHVlQWxsb3dlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0FkZE9uQmx1ciAgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNGb3JjZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIG1heFZpc2libGVDaGlwc0NvdW50ID0gbnVsbDtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBjaGlwc0xhYmVsVHJ1bmNhdGVDb3VudCA9IG51bGw7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzTWF4VmlzaWJsZUNoaXBzT3BlbmVkID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ2hpcHNEcmFnQW5kRHJvcCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEV1aUF1dG9Db21wbGV0ZUl0ZW1bXT4odGhpcy5hdXRvY29tcGxldGVEYXRhKTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRPcHRpb25JbmRleCA9IDA7XG4gICAgcHVibGljIGF1dG9jb21wbGV0ZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPignJyk7XG4gICAgcHVibGljIGlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgY2hpcHM6IEV1aUNoaXBbXSA9IFtdO1xuICAgIHB1YmxpYyBkaXN0aW5jdE9wdGlvbkdyb3Vwczogc3RyaW5nW107XG4gICAgcHVibGljIGdyb3VwZWRPcHRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtpZDogc3RyaW5nXTogeyBvcHRpb25zOiBFdWlBdXRvQ29tcGxldGVJdGVtW10sIGFuY2VzdG9yTGVuZ3RoOiBudW1iZXIgfSB9Pih7fSk7XG4gICAgcHVibGljIGdsb2JhbE9wdGlvbkluZGV4ID0gMDtcbiAgICBwdWJsaWMgaXRlbVNpemUgPSA0ODtcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBFdWlBdXRvQ29tcGxldGVJdGVtIH0+O1xuICAgIHB1YmxpYyBhdXRvY29tcGxldGVPcHRHcm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogeyBsYWJlbDogc3RyaW5nIH0gfT47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKEV1aVRlbXBsYXRlRGlyZWN0aXZlKSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxFdWlUZW1wbGF0ZURpcmVjdGl2ZT47XG5cbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVBvcnRhbENvbnRlbnQnKSB0ZW1wbGF0ZVBvcnRhbENvbnRlbnQ6IFRlbXBsYXRlUmVmPEVsZW1lbnRSZWY+O1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0Q29udGFpbmVyUmVmJykgaW5wdXRDb250YWluZXJSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgndmlydHVhbFNjcm9sbGluZycpIHZpcnR1YWxTY3JvbGxpbmc6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcbiAgICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBpbnB1dDogRWxlbWVudFJlZjtcblxuICAgIEBPdXRwdXQoKSBwYW5lbENsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBwYW5lbE9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGlucHV0Rm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGlucHV0Qmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgY2xlYXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpQXV0b0NvbXBsZXRlSXRlbVtdPigpO1xuICAgIEBPdXRwdXQoKSBpdGVtQWRkID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlBdXRvQ29tcGxldGVJdGVtPigpO1xuICAgIEBPdXRwdXQoKSBpdGVtUmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlBdXRvQ29tcGxldGVJdGVtPigpO1xuICAgIEBPdXRwdXQoKSBpbnB1dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAgIEBPdXRwdXQoKSBjaGlwRHJhZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlDaGlwRHJhZ0Ryb3A+KCk7XG4gICAgQE91dHB1dCgpIGNoaXBEcmFnUmVsZWFzZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpQ2hpcERyYWdEcm9wPigpO1xuICAgIEBPdXRwdXQoKSBjaGlwRHJvcCA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpQ2hpcERyYWdEcm9wPigpO1xuXG4gICAgcHJvdGVjdGVkIGhhc0FyaWFSZXF1aXJlZEF0dHJpYnV0ZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG4gICAgcHJpdmF0ZSBpc09wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZVBvcnRhbDogVGVtcGxhdGVQb3J0YWw8dW5rbm93bj47XG4gICAgcHJpdmF0ZSBrZXlib2FyZE9wdGlvblNlbGVjdG9ySGFuZGxlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIGFkZE9uQmx1ckNsaWNrSGFuZGxlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIGlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgcHJpdmF0ZSBrZXlib2FyZFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIGF1dG9jb21wbGV0ZU9wdGlvbnNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgcHJpdmF0ZSBzY3JvbGxEaXNwYXRjaGVyU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUgd2luZG93UmVzaXplU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUgdmFsdWU6IEV1aUF1dG9Db21wbGV0ZUl0ZW0gfCBFdWlBdXRvQ29tcGxldGVJdGVtW10gPSBudWxsO1xuICAgIHByaXZhdGUgVE9QID0gbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAndG9wJyB9LCB7IG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2JvdHRvbScgfSwgMCwgMCwgW1xuICAgICAgICAnZXVpLWF1dG9jb21wbGV0ZS1wb3NpdGlvbicsXG4gICAgICAgICdldWktYXV0b2NvbXBsZXRlLXBvc2l0aW9uLS10b3AnLFxuICAgIF0pO1xuICAgIHByaXZhdGUgQk9UVE9NID0gbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAnYm90dG9tJyB9LCB7IG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ3RvcCcgfSwgMCwgMCwgW1xuICAgICAgICAnZXVpLWF1dG9jb21wbGV0ZS1wb3NpdGlvbicsXG4gICAgICAgICdldWktYXV0b2NvbXBsZXRlLXBvc2l0aW9uLS1ib3R0b20nLFxuICAgIF0pO1xuICAgIHByaXZhdGUgcHJlZmVycmVkUG9zaXRvbnM6IENvbm5lY3Rpb25Qb3NpdGlvblBhaXJbXSA9IFt0aGlzLkJPVFRPTSwgdGhpcy5UT1BdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIGxpdmVBbm5vdW5jZXI6IExpdmVBbm5vdW5jZXIsXG4gICAgICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlcjogU2Nyb2xsRGlzcGF0Y2hlcixcbiAgICAgICAgcHJpdmF0ZSBiYXNlU3RhdGVzRGlyZWN0aXZlOiBCYXNlU3RhdGVzRGlyZWN0aXZlLFxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbDogTmdDb250cm9sLFxuICAgICkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjICYmIGMuYXV0b2NvbXBsZXRlRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgJiYgYy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQgJiYgdGhpcy5oYXNDaGlwcykge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQgPSBjLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZC5jdXJyZW50VmFsdWUubWFwKChzOiBFdWlBdXRvQ29tcGxldGVJdGVtKSA9PiAoeyAuLi5zLCBldWlJbnRlcm5hbElkOiB1dWlkLnY0KCkgfSkpO1xuICAgICAgICAgICAgdGhpcy5jaGlwcyA9IHRoaXMubWFwVG9DaGlwKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucygnJywgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlucHV0QXJpYVJlcXVpcmVkQXR0cmlidXRlKHRoaXMuY29udHJvbCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzdGF0dXM6IEZvcm1Db250cm9sU3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnNldEVycm9ycyh0aGlzLmNvbnRyb2wuZXJyb3JzKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNvbnRyb2wudW50b3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUlucHV0QXJpYVJlcXVpcmVkQXR0cmlidXRlKHRoaXMuY29udHJvbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5QYW5lbCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldE9wdGlvbnModmFsdWUsIHRoaXMuaXNJdGVtc1NvcnRlZCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0NoaXBzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkLmxlbmd0aCA+IDAgPyB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm91bmRJdGVtID0gdGhpcy5hdXRvY29tcGxldGVEYXRhLmZpbmQoKGQpID0+IGQubGFiZWwudG9Mb3dlckNhc2UoKS50cmltKCkgPT09IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGZvdW5kSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHRoaXMub25DaGFuZ2UoeyBsYWJlbDogdmFsdWUgfSkgOiB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQodmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzQXN5bmMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucyhBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gJycgOiB0aGlzLnZhbHVlPy5sYWJlbCwgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLnRlbXBsYXRlUG9ydGFsQ29udGVudCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcblxuICAgICAgICB0aGlzLnRlbXBsYXRlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5nZXRUeXBlKCkgPT09ICdkcm9wZG93bk9wdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLmdldFR5cGUoKSA9PT0gJ2Ryb3Bkb3duT3B0R3JvdXAnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRHcm91cFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmtleWJvYXJkT3B0aW9uU2VsZWN0b3JIYW5kbGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuYWRkT25CbHVyQ2xpY2tIYW5kbGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNGb3JjZVNlbGVjdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmtleWJvYXJkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLndpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGdldCBjZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25Hcm91cHM6IHN0cmluZ1tdID0gdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlXG4gICAgICAgICAgICAgICAgLm1hcChpdGVtID0+IHRoaXMuZ3JvdXBCeS5zcGxpdCgnLicpLnJlZHVjZSgocHJldiwgY3VycikgPT4gKHByZXYgPyBwcmV2W2N1cnJdIDogbnVsbCksIGl0ZW0gfHwgc2VsZikpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigob3B0aW9uR3JvdXA6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbikgPT4gdGhpcy5ncm91cEJ5LnNwbGl0KCcuJykucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAocHJldiA/IHByZXZbY3Vycl0gOiBudWxsKSwgb3B0aW9uIHx8IHNlbGYpID09PSBvcHRpb25Hcm91cCxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKG9wdGlvbkdyb3VwOiBzdHJpbmcsIGluZGV4LCBhcnJheTogc3RyaW5nW10pID0+IGFycmF5LmluZGV4T2Yob3B0aW9uR3JvdXApID09PSBpbmRleCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWUubGVuZ3RoID49IHRoaXMudmlzaWJsZU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlT3B0aW9ucyAqIHRoaXMuaXRlbVNpemU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbEl0ZW1zID0gdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlLmxlbmd0aCArIGZpbHRlcmVkT3B0aW9uR3JvdXBzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHNjcm9sbEl0ZW1zID4gdGhpcy52aXNpYmxlT3B0aW9ucyA/IHRoaXMudmlzaWJsZU9wdGlvbnMgOiBzY3JvbGxJdGVtcykgKiB0aGlzLml0ZW1TaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZS5sZW5ndGggPj0gdGhpcy52aXNpYmxlT3B0aW9ucyA/XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlT3B0aW9ucyAqIHRoaXMuaXRlbVNpemUgOlxuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZS5sZW5ndGggKiB0aGlzLml0ZW1TaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcGVuJC52YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgaGFzT3B0aW9uc1Jlc3VsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuUGFuZWwoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4gJiYgIXRoaXMuaXNSZWFkb25seSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyU3Vic2NyaXB0aW9uID0gdGhpcy5zY3JvbGxEaXNwYXRjaGVyXG4gICAgICAgICAgICAgICAgLmFuY2VzdG9yU2Nyb2xsZWQodGhpcy5pbnB1dClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IENka1Njcm9sbGFibGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZVBhcmVudCA9IGV2ZW50ID8gZXZlbnQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1Zpc2libGUodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCBzY3JvbGxhYmxlUGFyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy53aW5kb3dSZXNpemVTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm92ZXJsYXlSZWYgJiYgdGhpcy5vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkgJiYgIXRoaXMucGFuZWxXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVNpemUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLmlucHV0Q29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5nZXRQb3NpdGlvblN0cmF0ZWd5KCk7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxTdHJhdGVneSA9IHRoaXMuZ2V0U2Nyb2xsU3RyYXRlZ3koKTtcblxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5wYW5lbFdpZHRoID8gdGhpcy5wYW5lbFdpZHRoIDogdGhpcy5pbnB1dENvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnZXVpLWF1dG9jb21wbGV0ZV9fcGFuZWwtY29udGFpbmVyJywgdGhpcy5jbGFzc0xpc3RdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHRoaXMudGVtcGxhdGVQb3J0YWwpO1xuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWZcbiAgICAgICAgICAgICAgICAub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xlYXJFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmV1aS1zcHJpdGUtZXVpLWNsb3NlJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRWxlbWVudE9yQ2hpbGRPZkVsZW1lbnQgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIHBhcmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBwYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ2xlYXJhYmxlQnV0dG9uID0gdGFyZ2V0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aS1zcHJpdGUtZXVpLWNsb3NlJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzSW5wdXQgPSB0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZXVpLWF1dG9jb21wbGV0ZV9faW5wdXQnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2xlYXJhYmxlQnV0dG9uICYmICFpc0lucHV0ICYmICFpc0VsZW1lbnRPckNoaWxkT2ZFbGVtZW50KHRhcmdldEVsZW1lbnQsIGNsZWFyRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2xlYXJhYmxlQnV0dG9uICYmICF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXRFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnB1dCAmJiAhdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0RWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKCdldWktYXV0b2NvbXBsZXRlX19pbnB1dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWZcbiAgICAgICAgICAgICAgICAua2V5ZG93bkV2ZW50cygpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQua2V5Py50b0xvd2VyQ2FzZSgpID09PSAnZXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zU3Vic2NyaXB0aW9uID0gdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnN1YnNjcmliZSgoYXV0b2NvbXBsZXRlT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5yZW1vdmVQYW5lbENsYXNzKCdldWktYXV0b2NvbXBsZXRlX19wYW5lbC1jb250YWluZXItLW5vLW9wdGlvbicpO1xuICAgICAgICAgICAgICAgIGlmIChhdXRvY29tcGxldGVPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcygnZXVpLWF1dG9jb21wbGV0ZV9fcGFuZWwtY29udGFpbmVyLS1uby1vcHRpb24nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgbGl2ZUFubm91bmNlclNvdXJjZSA9IHRoaXMuZ3JvdXBCeSA/IE9iamVjdC52YWx1ZXModGhpcy5ncm91cGVkT3B0aW9ucy52YWx1ZSkuZmxhdE1hcChncm91cCA9PiBncm91cC5vcHRpb25zKSA6IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZTtcblxuICAgICAgICAgICAgdGhpcy5saXZlQW5ub3VuY2VyLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmxpdmVBbm5vdW5jZXIuYW5ub3VuY2UobGl2ZUFubm91bmNlclNvdXJjZVswXT8ubGFiZWwpO1xuXG4gICAgICAgICAgICBsZXQgdmlzaWJsZVJhbmdlU3RhcnQgPSAwO1xuICAgICAgICAgICAgbGV0IHZpc2libGVSYW5nZUVuZCA9IHRoaXMudmlzaWJsZU9wdGlvbnMgLSAxO1xuICAgICAgICAgICAgdGhpcy5rZXlib2FyZE9wdGlvblNlbGVjdG9ySGFuZGxlclN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChlOiBLZXlib2FyZEV2ZW50KSA9PiBlLmNvZGUgPT09ICdBcnJvd0Rvd24nIHx8IGUuY29kZSA9PT0gJ0Fycm93VXAnIHx8IGUuY29kZSA9PT0gJ0VudGVyJyB8fCBlLmNvZGUgPT09ICdUYWInKSxcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnQXJyb3dEb3duJyAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggPCB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpdmVBbm5vdW5jZXJTb3VyY2UgPSB0aGlzLmdyb3VwQnkgPyBPYmplY3QudmFsdWVzKHRoaXMuZ3JvdXBlZE9wdGlvbnMudmFsdWUpLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAub3B0aW9ucykgOiB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpdmVBbm5vdW5jZXIuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpdmVBbm5vdW5jZXIuYW5ub3VuY2UobGl2ZUFubm91bmNlclNvdXJjZVt0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXhdLmxhYmVsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmNvZGUgPT09ICdBcnJvd1VwJyAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4LS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXZlQW5ub3VuY2VyU291cmNlID0gdGhpcy5ncm91cEJ5ID8gT2JqZWN0LnZhbHVlcyh0aGlzLmdyb3VwZWRPcHRpb25zLnZhbHVlKS5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLm9wdGlvbnMpIDogdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXZlQW5ub3VuY2VyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXZlQW5ub3VuY2VyLmFubm91bmNlKGxpdmVBbm5vdW5jZXJTb3VyY2VbdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4XS5sYWJlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNJbmRleCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCAtIHRoaXMudmlydHVhbFNjcm9sbGluZz8uZ2V0UmVuZGVyZWRSYW5nZSgpLnN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnQXJyb3dEb3duJyAmJiBjSW5kZXggPiB2aXNpYmxlUmFuZ2VFbmQgLSB2aXNpYmxlUmFuZ2VTdGFydCAtIHZpc2libGVSYW5nZUVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYk9wdGlvbnNHcm91cCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmJPcHRpb25zID0gdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncm91cEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZ3JvdXBlZE9wdGlvbnMudmFsdWUpLmZvckVhY2goZ3JvdXBlZE9wdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncm91cGVkT3B0aW9ucy52YWx1ZVtncm91cGVkT3B0aW9uXS5vcHRpb25zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggPiB0aGlzLmdyb3VwZWRPcHRpb25zLnZhbHVlW2dyb3VwZWRPcHRpb25dLmFuY2VzdG9yTGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iT3B0aW9uc0dyb3VwICsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCArIG5iT3B0aW9uc0dyb3VwKSA+IHZpc2libGVSYW5nZUVuZCAmJiB2aXNpYmxlUmFuZ2VFbmQgPD0gKG5iT3B0aW9ucyArIG5iT3B0aW9uc0dyb3VwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxpbmcuc2Nyb2xsVG9JbmRleCgodGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4ICsgbmJPcHRpb25zR3JvdXApIC0gdmlzaWJsZVJhbmdlRW5kICsgdmlzaWJsZVJhbmdlU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlUmFuZ2VTdGFydCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlUmFuZ2VFbmQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnQXJyb3dVcCcgJiYgY0luZGV4IDwgdmlzaWJsZVJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4IDwgdmlzaWJsZVJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsaW5nLnNjcm9sbFRvSW5kZXgodGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJhbmdlU3RhcnQtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJhbmdlRW5kLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc09wdGlvbnNSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IFtdLmNvbmNhdCguLi5PYmplY3QudmFsdWVzKHRoaXMuZ3JvdXBlZE9wdGlvbnMudmFsdWUpLm1hcChncm91cCA9PiBncm91cC5vcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uU2VsZWN0ZWQob3B0aW9uc1t0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25PcHRpb25TZWxlY3RlZCh0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWVbdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGFzQ2hpcHMgJiYgdGhpcy5pc0ZyZWVWYWx1ZUFsbG93ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGQodGhpcy5hdXRvY29tcGxldGVDb250cm9sLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnVGFiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FkZE9uQmx1ciAgJiYgdGhpcy5oYXNDaGlwcyAmJiB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWU/LnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZCh0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWUudHJpbSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0ZvcmNlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5zZXRWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbnMoJycsIHRoaXMuaXNJdGVtc1NvcnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuYWRkT25CbHVyQ2xpY2tIYW5kbGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0FkZE9uQmx1ciApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZE9uQmx1ckNsaWNrSGFuZGxlclN1YnNjcmlwdGlvbiA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucygnZXVpLWF1dG9jb21wbGV0ZS1vcHRpb24nKSAmJiB0aGlzLmhhc0NoaXBzICYmIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC52YWx1ZT8udHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkKHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC52YWx1ZS50cmltKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaXNGb3JjZVNlbGVjdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNGb3JjZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGb3JjZVNlbGVjdGlvblN1YnNjcmlwdGlvbiA9IGZyb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucygnZXVpLWF1dG9jb21wbGV0ZS1vcHRpb24nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wuc2V0VmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaXNPcGVuJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5wYW5lbE9wZW4uZW1pdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlUGFuZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCA9IDA7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNPcGVuJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRPcHRpb25TZWxlY3RvckhhbmRsZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLndpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnBhbmVsQ2xvc2UuZW1pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk9wdGlvblNlbGVjdGVkKGU6IEV1aUF1dG9Db21wbGV0ZUl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFlLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0NoaXBzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQucHVzaCh7IC4uLmUsIGV1aUludGVybmFsSWQ6IHV1aWQudjQoKSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaXBzID0gdGhpcy5tYXBUb0NoaXAodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbnMoJycsIHRoaXMuaXNJdGVtc1NvcnRlZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkID0gW2VdO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IGUubGFiZWw7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnNldFZhbHVlKGUubGFiZWwpO1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgdGhpcy5hZGRPbkJsdXJDbGlja0hhbmRsZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuaXNGb3JjZVNlbGVjdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCk7XG4gICAgICAgICAgICB0aGlzLml0ZW1BZGQuZW1pdChlKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdmFsdWUgfHwgKCF0aGlzLmlzRnJlZVZhbHVlQWxsb3dlZCAmJiAhdGhpcy5hdXRvY29tcGxldGVEYXRhLmZpbmQoYSA9PiBhLmxhYmVsID09PSB2YWx1ZS50cmltKCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIGlmICghdGhpcy5pc0R1cGxpY2F0ZVZhbHVlQWxsb3dlZCAmJiB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZC5zb21lKHMgPT4gcy5sYWJlbC50cmltKCkgPT09IHZhbHVlLnRyaW0oKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5hdXRvY29tcGxldGVEYXRhLmZpbmQoYSA9PiBhLmxhYmVsID09PSB2YWx1ZS50cmltKCkpIHx8IHsgbGFiZWw6IHZhbHVlLnRyaW0oKSwgZXVpSW50ZXJuYWxJZDogdXVpZC52NCgpIH07XG4gICAgICAgIFxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZC5wdXNoKGl0ZW0pO1xuICAgICAgICB0aGlzLmNoaXBzID0gdGhpcy5tYXBUb0NoaXAodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcblxuICAgICAgICB0aGlzLmFkZE9uQmx1ckNsaWNrSGFuZGxlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICBcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuaXRlbUFkZC5lbWl0KGl0ZW0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcHRpb25zVHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IEV1aUF1dG9Db21wbGV0ZUl0ZW0pOiBzdHJpbmcgfCBudW1iZXIge1xuICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogRXVpQXV0b0NvbXBsZXRlSXRlbSB8IEV1aUF1dG9Db21wbGV0ZUl0ZW1bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hpcHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkID0gdmFsdWUgPyAoWy4uLnZhbHVlIGFzIEV1aUF1dG9Db21wbGV0ZUl0ZW1bXV0pIDogW107XG4gICAgICAgICAgICB0aGlzLmNoaXBzID0gdGhpcy5tYXBUb0NoaXAodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnBhdGNoVmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnBhdGNoVmFsdWUodmFsdWUgPyAodmFsdWUgYXMgRXVpQXV0b0NvbXBsZXRlSXRlbSkubGFiZWwgOiBudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gdmFsdWUgPyAodmFsdWUgYXMgRXVpQXV0b0NvbXBsZXRlSXRlbSkubGFiZWwgOiBudWxsO1xuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKGlucHV0VmFsdWUsIHRoaXMuaXNJdGVtc1NvcnRlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIGlzRGlzYWJsZWQgPyB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wuZGlzYWJsZSgpIDogdGhpcy5hdXRvY29tcGxldGVDb250cm9sLmVuYWJsZSgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXIuZW1pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmtleWJvYXJkU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gXG4gICAgICAgICAgICAgICAgICAgIC9eW2EtekEtWjAtOV0kLy50ZXN0KGV2ZW50LmtleSkgfHxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5ID09PSAnU3BhY2UnIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpcHNQb3NpdGlvbiA9PT0gJ2luc2lkZScgJiYgZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiAoIXRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC52YWx1ZSB8fCB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWUubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5jaGlwcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoaXBSZW1vdmUoeyBjaGlwczogWy4uLnRoaXMuY2hpcHNdLCByZW1vdmVkIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVTaXplKHsgd2lkdGg6IHRoaXMuaW5wdXRDb250YWluZXJSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cy5lbWl0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmlucHV0Qmx1ci5lbWl0KCk7XG4gICAgICAgIHRoaXMub25Ub3VjaCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoaXBSZW1vdmUoZTogeyBjaGlwczogRXVpQ2hpcFtdOyByZW1vdmVkOiBFdWlDaGlwIHwgeyBjaGlwOiBFdWlDaGlwOyBldmVudDogRXZlbnQgfSB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gZSBhcyB7IGNoaXBzOiBFdWlDaGlwW107IHJlbW92ZWQ6IEV1aUNoaXAgfTtcbiAgICAgICAgY29uc3QgaXRlbVJlbW92ZWQgPSB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZC5maW5kKGkgPT4gaS5pZCA9PT0gZXZlbnQucmVtb3ZlZC5pZCk7XG5cbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQgPSB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZFxuICAgICAgICAgICAgLmZpbHRlcihpID0+IGV2ZW50LmNoaXBzLmZpbmQoYyA9PiBjLmlkID09PSBpLmlkKSlcbiAgICAgICAgICAgIC5maWx0ZXIoaSA9PiBldmVudC5jaGlwcy5maW5kKGMgPT4gYy5ldWlJbnRlcm5hbElkID09PSBpLmV1aUludGVybmFsSWQpKTtcbiAgICAgICAgdGhpcy5jaGlwcyA9IHRoaXMubWFwVG9DaGlwKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcblxuICAgICAgICB0aGlzLnNldE9wdGlvbnMoJycsIHRoaXMuaXNJdGVtc1NvcnRlZCk7XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZC5sZW5ndGggPiAwID8gdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQgOiBudWxsKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuaXRlbVJlbW92ZS5lbWl0KGl0ZW1SZW1vdmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGlwRHJvcHBlZChlOiBFdWlDaGlwRHJhZ0Ryb3ApOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQgPSBlLmNoaXBzLm1hcChjID0+IHNlbGVjdGVkLmZpbmQoKGEpID0+IGEuaWQgPT09IGMuaWQpKTtcbiAgICAgICAgdGhpcy5jaGlwcyA9IHRoaXMubWFwVG9DaGlwKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLm5leHQodGhpcy5maWx0ZXJPcHRpb25zKCcnKSk7XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZC5sZW5ndGggPiAwID8gdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQgOiBudWxsKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCk7XG5cbiAgICAgICAgdGhpcy5jaGlwRHJvcC5lbWl0KGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoaXBEcmFnU3RhcnRlZChlOiBFdWlDaGlwRHJhZ0Ryb3ApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGlwRHJhZ1N0YXJ0LmVtaXQoZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hpcERyYWdSZWxlYXNlZChlOiBFdWlDaGlwRHJhZ0Ryb3ApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGlwRHJhZ1JlbGVhc2UuZW1pdChlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEl0ZW1TaXplKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG9wdGlvbkhlaWdodCA9IHRoaXMub3ZlcmxheVJlZj8uaG9zdEVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJy5ldWktYXV0b2NvbXBsZXRlX19wYW5lbCcpPy5xdWVyeVNlbGVjdG9yQWxsKCcuZXVpLWF1dG9jb21wbGV0ZS1vcHRpb24nKVswXT8uY2xpZW50SGVpZ2h0ICsgMTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbkhlaWdodCB8fCA0ODtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE9wdGlvbnModmFsdWU6IHN0cmluZywgaXNJdGVtc1NvcnRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMubmV4dChpc0l0ZW1zU29ydGVkID8gKHRoaXMub3JkZXJBcnJheSh0aGlzLmZpbHRlck9wdGlvbnModmFsdWUpLCB0aGlzLml0ZW1zU29ydE9yZGVyKSkgOiB0aGlzLmZpbHRlck9wdGlvbnModmFsdWUpKTtcblxuICAgICAgICBpZiAodGhpcy5ncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCB7IGdyb3VwZWRPcHRpb25zLCBkaXN0aW5jdE9wdGlvbkdyb3VwcyB9ID0gdGhpcy5ncm91cGluZ0hhbmRsZXIodGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlLCB0aGlzLmdyb3VwQnkpO1xuXG4gICAgICAgICAgICB0aGlzLmdyb3VwZWRPcHRpb25zLm5leHQoZ3JvdXBlZE9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5kaXN0aW5jdE9wdGlvbkdyb3VwcyA9IGRpc3RpbmN0T3B0aW9uR3JvdXBzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQb3NpdGlvblN0cmF0ZWd5KCk6IFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5XG4gICAgICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5pbnB1dENvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50IGFzIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbilcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKHRoaXMucHJlZmVycmVkUG9zaXRvbnMpXG4gICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24odHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTY3JvbGxTdHJhdGVneSgpOiBSZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3kge1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7IHNjcm9sbFRocm90dGxlOiAxMCB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbHRlck9wdGlvbnMoaW5wdXRWYWx1ZTogc3RyaW5nKTogRXVpQXV0b0NvbXBsZXRlSXRlbVtdIHtcbiAgICAgICAgbGV0IGRhdGE6IEV1aUF1dG9Db21wbGV0ZUl0ZW1bXSA9IFtdO1xuICAgICAgICBpZiAoaW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuYXV0b2NvbXBsZXRlRGF0YS5maWx0ZXIoKGF1dG9jb21wbGV0ZUl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hpbmcgPT09ICdjb250YWlucycgJiZcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlSXRlbS5sYWJlbC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoaW5wdXRWYWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpICE9PSAtMVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXV0b2NvbXBsZXRlSXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoaW5nID09PSAnc3RhcnRXaXRoJyAmJlxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVJdGVtLmxhYmVsLnRvTG93ZXJDYXNlKCkuc3Vic3RyKDAsIGlucHV0VmFsdWUudG9TdHJpbmcoKS5sZW5ndGgpID09PSBpbnB1dFZhbHVlLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF1dG9jb21wbGV0ZUl0ZW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5hdXRvY29tcGxldGVEYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hpcHMpIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcihkID0+ICF0aGlzLmlzRHVwbGljYXRlVmFsdWVBbGxvd2VkID8gIXRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkLnNvbWUoc2VsZWN0ZWRJdGVtID0+IGQuaWQgPT09IHNlbGVjdGVkSXRlbS5pZCkgOiB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzSXRlbXNTb3J0ZWQpIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLm9yZGVyQXJyYXkoZGF0YSwgdGhpcy5pdGVtc1NvcnRPcmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcFRvQ2hpcChpdGVtczogRXVpQXV0b0NvbXBsZXRlSXRlbVtdKTogRXVpQ2hpcFtdIHtcbiAgICAgICAgY29uc3QgY2hpcHMgPSBpdGVtcy5tYXAoKHNlbGVjdGVkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV1aUNoaXAoe1xuICAgICAgICAgICAgICAgIGlkOiBzZWxlY3RlZC5pZCxcbiAgICAgICAgICAgICAgICBldWlJbnRlcm5hbElkOiBzZWxlY3RlZC5ldWlJbnRlcm5hbElkLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBzZWxlY3RlZC5sYWJlbCxcbiAgICAgICAgICAgICAgICB0eXBlQ2xhc3M6IHNlbGVjdGVkLnR5cGVDbGFzcyxcbiAgICAgICAgICAgICAgICBpc091dGxpbmU6IHNlbGVjdGVkLmlzT3V0bGluZSxcbiAgICAgICAgICAgICAgICBpc1JvdW5kZWQ6IHNlbGVjdGVkLmlzUm91bmRlZCxcbiAgICAgICAgICAgICAgICBzaXplQ2xhc3M6IHNlbGVjdGVkLnNpemVDbGFzcyxcbiAgICAgICAgICAgICAgICBpc1JlbW92YWJsZTogc2VsZWN0ZWQuaXNSZW1vdmFibGUsXG4gICAgICAgICAgICAgICAgdG9vbHRpcE1lc3NhZ2U6IHNlbGVjdGVkLnRvb2x0aXA/LnRvb2x0aXBNZXNzYWdlLFxuICAgICAgICAgICAgICAgIHRvb2x0aXA6IG5ldyBFdWlDaGlwVG9vbHRpcChzZWxlY3RlZC50b29sdGlwKSxcbiAgICAgICAgICAgICAgICBpY29uQ2xhc3M6IHNlbGVjdGVkLmljb25DbGFzcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5pc0NoaXBzU29ydGVkICYmIGNoaXBzLmxlbmd0aCA+IDAgPyAodGhpcy5vcmRlckFycmF5KGNoaXBzLCB0aGlzLmNoaXBzU29ydE9yZGVyKSBhcyBFdWlDaGlwW10pIDogY2hpcHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcmRlckFycmF5PFQgZXh0ZW5kcyB7IGxhYmVsOiBzdHJpbmc7IH0+KHRhYjogVFtdLCBzb3J0T3JkZXI6ICdBU0MnIHwgJ0RFU0MnKTogVFtdIHtcbiAgICAgICAgdGFiLnNvcnQoKGE6IFQsIGI6IFQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFPYmogPSBhLmxhYmVsLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCBiT2JqID0gYi5sYWJlbC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoc29ydE9yZGVyID09PSAnQVNDJykge1xuICAgICAgICAgICAgICAgIGlmIChhT2JqIDwgYk9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhT2JqID4gYk9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChhT2JqID4gYk9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhT2JqIDwgYk9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0YWI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBncm91cGluZ0hhbmRsZXIob3B0aW9uczogRXVpQXV0b0NvbXBsZXRlSXRlbVtdLCBncm91cEJ5OiBzdHJpbmcpOiBcbiAgICB7IGdyb3VwZWRPcHRpb25zOiB7IFtpZDogc3RyaW5nXTogeyBvcHRpb25zOiBFdWlBdXRvQ29tcGxldGVJdGVtW10sIGFuY2VzdG9yTGVuZ3RoOiBudW1iZXIgfSB9LCBkaXN0aW5jdE9wdGlvbkdyb3Vwczogc3RyaW5nW10gfSB7XG4gICAgICAgIGNvbnN0IGRpc3RpbmN0R3JvdXBzOiBzdHJpbmdbXSA9IHRoaXMuYXV0b2NvbXBsZXRlRGF0YS5tYXAoaXRlbSA9PiBncm91cEJ5LnNwbGl0KCcuJykucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAocHJldiA/IHByZXZbY3Vycl0gOiBudWxsKSwgaXRlbSB8fCBzZWxmKSk7XG4gICAgICAgIGNvbnN0IGRpc3RpbmN0T3B0aW9uR3JvdXBzOiBzdHJpbmdbXSA9IFsuLi5uZXcgU2V0KGRpc3RpbmN0R3JvdXBzKV0uc29ydCgoYTogc3RyaW5nLCBiOiBzdHJpbmcpID0+IChhID4gYiA/IDEgOiAtMSkpO1xuICAgICAgICBjb25zdCBncm91cGVkT3B0aW9uczogeyBbaWQ6IHN0cmluZ106IHsgb3B0aW9uczogRXVpQXV0b0NvbXBsZXRlSXRlbVtdLCBhbmNlc3Rvckxlbmd0aDogbnVtYmVyIH0gfSA9IHt9O1xuICAgIFxuICAgICAgICBsZXQgYW5jZXN0b3JMZW5ndGggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGRpc3RpbmN0T3B0aW9uR3JvdXBzKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBncm91cEJ5LnNwbGl0KCcuJykucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAocHJldiA/IHByZXZbY3Vycl0gOiBudWxsKSwgb3B0aW9uIHx8IHNlbGYpID09PSBncm91cCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0l0ZW1zU29ydGVkKSB7XG4gICAgICAgICAgICAgICAgbyA9IHRoaXMub3JkZXJBcnJheShvLCB0aGlzLml0ZW1zU29ydE9yZGVyKSBhcyBFdWlBdXRvQ29tcGxldGVJdGVtW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdyb3VwZWRPcHRpb25zW2dyb3VwXSA9IHsgb3B0aW9uczogbywgYW5jZXN0b3JMZW5ndGggfTtcbiAgICAgICAgICAgIGFuY2VzdG9yTGVuZ3RoICs9IG8ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIHJldHVybiB7IGdyb3VwZWRPcHRpb25zLCBkaXN0aW5jdE9wdGlvbkdyb3VwcyB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWaXNpYmxlKG9yaWdpbjogSFRNTEVsZW1lbnQsIHNjcm9sbGFibGVQYXJlbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG9yaWdpblkgPSBvcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZVBhcmVudFkgPSBNYXRoLmFicyhzY3JvbGxhYmxlUGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnkpO1xuICAgICAgICBjb25zdCBzY3JvbGxhYmxlUGFyZW50SGVpZ2h0ID0gc2Nyb2xsYWJsZVBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgLSA1NTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKG9yaWdpblkgPiAwICYmIG9yaWdpblkgPCBzY3JvbGxhYmxlUGFyZW50SGVpZ2h0KSB8fFxuICAgICAgICAgICAgKG9yaWdpblkgLSBzY3JvbGxhYmxlUGFyZW50WSA+IDAgJiYgb3JpZ2luWSA8IHNjcm9sbGFibGVQYXJlbnRZICsgc2Nyb2xsYWJsZVBhcmVudEhlaWdodClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlID0gPFQ+KGNoYW5nZT86IFQpOiB2b2lkID0+IHtcbiAgICAgICAgLyoqIGVtcHR5ICovXG4gICAgfTtcblxuICAgIHByaXZhdGUgb25Ub3VjaCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgLyoqIGVtcHR5ICovXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGBhcmlhLXJlcXVpcmVkYCBhdHRyaWJ1dGUgb24gdGhlIGlucHV0IGVsZW1lbnQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUlucHV0QXJpYVJlcXVpcmVkQXR0cmlidXRlKGNvbnRyb2w6IE5nQ29udHJvbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhc0FyaWFSZXF1aXJlZEF0dHJpYnV0ZSA9IGNvbnRyb2w/LmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZXVpLWF1dG9jb21wbGV0ZV9fd3JhcHBlclwiPlxuICAgIEBpZiAoY2hpcHNQb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRyb2xcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGlmIChoYXNDaGlwcykge1xuICAgICAgICA8ZXVpLWNoaXAtbGlzdFxuICAgICAgICAgICAgW2NoaXBzXT1cImNoaXBzXCJcbiAgICAgICAgICAgIFtpc0NoaXBzUmVtb3ZhYmxlXT1cImlzQ2hpcHNSZW1vdmFibGUgJiYgIWlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgW21heFZpc2libGVDaGlwc0NvdW50XT1cIm1heFZpc2libGVDaGlwc0NvdW50XCJcbiAgICAgICAgICAgIFtpc01heFZpc2libGVDaGlwc09wZW5lZF09XCJpc01heFZpc2libGVDaGlwc09wZW5lZFwiXG4gICAgICAgICAgICBbY2hpcHNMYWJlbFRydW5jYXRlQ291bnRdPVwiY2hpcHNMYWJlbFRydW5jYXRlQ291bnRcIlxuICAgICAgICAgICAgW3RvZ2dsZUxpbmtNb3JlTGFiZWxdPVwidG9nZ2xlTGlua01vcmVMYWJlbFwiXG4gICAgICAgICAgICBbdG9nZ2xlTGlua0xlc3NMYWJlbF09XCJ0b2dnbGVMaW5rTGVzc0xhYmVsXCJcbiAgICAgICAgICAgIFtpc0NoaXBzRHJhZ0FuZERyb3BdPVwiaXNDaGlwc0RyYWdBbmREcm9wXCJcbiAgICAgICAgICAgIFtkcmFnQW5kRHJvcFNvdXJjZU5hbWVdPVwiZHJhZ0FuZERyb3BTb3VyY2VOYW1lXCJcbiAgICAgICAgICAgIFtkcmFnQW5kRHJvcENvbm5lY3RlZFRvXT1cImRyYWdBbmREcm9wQ29ubmVjdGVkVG9cIlxuICAgICAgICAgICAgKGNoaXBEcm9wKT1cIm9uQ2hpcERyb3BwZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2hpcERyYWdTdGFydCk9XCJvbkNoaXBEcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjaGlwRHJhZ1JlbGVhc2UpPVwib25DaGlwRHJhZ1JlbGVhc2VkKCRldmVudClcIlxuICAgICAgICAgICAgKGNoaXBSZW1vdmUpPVwib25DaGlwUmVtb3ZlKCRldmVudClcIj5cbiAgICAgICAgICAgIDxldWlDaGlwTGlzdEFwcGVuZENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImNoaXBzUG9zaXRpb24gPT09ICdpbnNpZGUnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZXVpQ2hpcExpc3RBcHBlbmRDb250ZW50PlxuICAgICAgICA8L2V1aS1jaGlwLWxpc3Q+XG4gICAgfVxuICAgIEBpZiAoY2hpcHNQb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRyb2xcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNjb250cm9sPlxuICAgIDxkaXYgKm5nSWY9XCIhaGFzQ2hpcHMgfHwgKGhhc0NoaXBzICYmICFpc1JlYWRvbmx5KVwiIGNsYXNzPVwiZXVpLWF1dG9jb21wbGV0ZV9faW5wdXQtY29udGFpbmVyXCIgI2lucHV0Q29udGFpbmVyUmVmPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgZXVpSW5wdXRUZXh0XG4gICAgICAgICAgICBbZXVpQ2xlYXJhYmxlXT1cIiFpc1JlYWRvbmx5ICYmICFpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtldWlMb2FkaW5nXT1cImlzTG9hZGluZ1wiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiYXV0b2NvbXBsZXRlQ29udHJvbFwiXG4gICAgICAgICAgICBjbGFzcz1cImV1aS1hdXRvY29tcGxldGVfX2lucHV0IHt7IGNsYXNzTGlzdCB9fVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIH19XCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgIChjbGVhcik9XCJvbkNsZWFyKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5QYW5lbCgpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJpc09wZW4gPyAnZXVpLWF1dG9jb21wbGV0ZV9fcGFuZWwnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWU/Lmxlbmd0aCA+IDAgPyBhdXRvY29tcGxldGVDb250cm9sLnZhbHVlIDogJ0lucHV0IGZpZWxkIHdpdGhvdXQgdmFsdWUnXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwiaGFzQXJpYVJlcXVpcmVkQXR0cmlidXRlID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgICBhcmlhLWF1dG9jb21wbGV0ZT1cImJvdGhcIlxuICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIiAvPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVBvcnRhbENvbnRlbnQ+XG4gICAgPGRpdlxuICAgICAgICBpZD1cImV1aS1hdXRvY29tcGxldGVfX3BhbmVsXCJcbiAgICAgICAgY2xhc3M9XCJldWktYXV0b2NvbXBsZXRlX19wYW5lbFwiXG4gICAgICAgIFtAcGFuZWxBbmltYXRpb25dPVwiaXNPcGVuID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJBdXRvY29tcGxldGUgcGFuZWxcIj5cbiAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICAgICAgI3ZpcnR1YWxTY3JvbGxpbmdcbiAgICAgICAgICAgIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZVwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgbWluQnVmZmVyUHg9XCI1MDBcIlxuICAgICAgICAgICAgbWF4QnVmZmVyUHg9XCI3NTBcIlxuICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwiY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0ICsgJ3B4J1wiPlxuICAgICAgICAgICAgQGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICAgICAgQGZvciAoZGlzdGluY3RPcHRpb25Hcm91cCBvZiBkaXN0aW5jdE9wdGlvbkdyb3VwczsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrIGRpc3RpbmN0T3B0aW9uR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoKGdyb3VwZWRPcHRpb25zIHwgYXN5bmMpW2Rpc3RpbmN0T3B0aW9uR3JvdXBdLm9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxldWktYXV0b2NvbXBsZXRlLW9wdGlvbi1ncm91cCBbbGFiZWxdPVwiZGlzdGluY3RPcHRpb25Hcm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLWF1dG9jb21wbGV0ZS1vcHRpb24tZ3JvdXBfX2xhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGF1dG9jb21wbGV0ZU9wdEdyb3VwVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYXV0b2NvbXBsZXRlT3B0R3JvdXBUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBsYWJlbDogZGlzdGluY3RPcHRpb25Hcm91cCB9IH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGlzdGluY3RPcHRpb25Hcm91cCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1hdXRvY29tcGxldGUtb3B0aW9uLWdyb3VwX19vcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChhdXRvY29tcGxldGVPcHRpb24gb2YgKGdyb3VwZWRPcHRpb25zIHwgYXN5bmMpW2Rpc3RpbmN0T3B0aW9uR3JvdXBdLm9wdGlvbnM7IGxldCBqID0gJGluZGV4OyB0cmFjayBhdXRvY29tcGxldGVPcHRpb24uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWF1dG9jb21wbGV0ZS1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNHcm91cEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzQWN0aXZlXT1cInNlbGVjdGVkT3B0aW9uSW5kZXggPT09IChncm91cGVkT3B0aW9ucyB8IGFzeW5jKVtkaXN0aW5jdE9wdGlvbkdyb3VwXS5hbmNlc3Rvckxlbmd0aCArIGpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCJhdXRvY29tcGxldGVPcHRpb24uaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJhdXRvY29tcGxldGVPcHRpb24udHlwZUNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uU2VsZWN0ZWQoYXV0b2NvbXBsZXRlT3B0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGF1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBhdXRvY29tcGxldGVPcHRpb24gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGF1dG9jb21wbGV0ZU9wdGlvbi5pY29uQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7IGF1dG9jb21wbGV0ZU9wdGlvbi5pY29uQ2xhc3MgfX1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhdXRvY29tcGxldGVPcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXVpLWF1dG9jb21wbGV0ZS1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXVpLWF1dG9jb21wbGV0ZS1vcHRpb24tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGV1aS1hdXRvY29tcGxldGUtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IGF1dG9jb21wbGV0ZU9wdGlvbiBvZiBhdXRvY29tcGxldGVPcHRpb25zIHwgYXN5bmM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IG9wdGlvbnNUcmFja0J5Rm5cIlxuICAgICAgICAgICAgICAgICAgICBbaXNBY3RpdmVdPVwic2VsZWN0ZWRPcHRpb25JbmRleCA9PT0gaVwiXG4gICAgICAgICAgICAgICAgICAgIFtpc0Rpc2FibGVkXT1cImF1dG9jb21wbGV0ZU9wdGlvbi5pc0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJhdXRvY29tcGxldGVPcHRpb24uaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImF1dG9jb21wbGV0ZU9wdGlvbi50eXBlQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25PcHRpb25TZWxlY3RlZChhdXRvY29tcGxldGVPcHRpb24pXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImF1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGF1dG9jb21wbGV0ZU9wdGlvbiB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYXV0b2NvbXBsZXRlT3B0aW9uLmljb25DbGFzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwie3sgYXV0b2NvbXBsZXRlT3B0aW9uLmljb25DbGFzcyB9fVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGF1dG9jb21wbGV0ZU9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9ldWktYXV0b2NvbXBsZXRlLW9wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9kaXY+ICBcbjwvbmctdGVtcGxhdGU+XG4iXX0=
|