@theseam/ui-common 0.4.1 → 0.4.3
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/esm2020/datatable/datatable-action-menu/datatable-action-menu.component.mjs +1 -1
- package/esm2020/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.mjs +1 -1
- package/esm2020/datatable/datatable-export-button/datatable-export-button.component.mjs +1 -1
- package/esm2020/datatable-dynamic/datatable-dynamic-action-menu/datatable-dynamic-action-menu.component.mjs +1 -1
- package/esm2020/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.mjs +1 -1
- package/esm2020/framework/top-bar/top-bar.component.mjs +1 -1
- package/esm2020/google-maps/google-maps/google-maps.component.mjs +32 -8
- package/esm2020/google-maps/google-maps-feature-helpers.mjs +13 -1
- package/esm2020/google-maps/google-maps.module.mjs +4 -2
- package/esm2020/google-maps/google-maps.service.mjs +96 -25
- package/esm2020/google-maps/public-api.mjs +2 -1
- package/esm2020/menu/menu-item.component.mjs +43 -15
- package/esm2020/menu/menu-toggle.directive.mjs +202 -43
- package/esm2020/menu/menu.component.mjs +37 -14
- package/esm2020/utils/geo-json/close-polygons.mjs +38 -0
- package/esm2020/utils/public-api.mjs +2 -1
- package/esm2020/widget/widget/widget.component.mjs +54 -33
- package/fesm2015/theseam-ui-common-datatable-dynamic.mjs +1 -1
- package/fesm2015/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-datatable.mjs +3 -3
- package/fesm2015/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-framework.mjs +2 -2
- package/fesm2015/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-google-maps.mjs +138 -28
- package/fesm2015/theseam-ui-common-google-maps.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-menu.mjs +442 -228
- package/fesm2015/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-utils.mjs +39 -1
- package/fesm2015/theseam-ui-common-utils.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-widget.mjs +53 -32
- package/fesm2015/theseam-ui-common-widget.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-datatable-dynamic.mjs +1 -1
- package/fesm2020/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-datatable.mjs +3 -3
- package/fesm2020/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-framework.mjs +2 -2
- package/fesm2020/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-google-maps.mjs +141 -32
- package/fesm2020/theseam-ui-common-google-maps.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-menu.mjs +432 -225
- package/fesm2020/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-utils.mjs +39 -1
- package/fesm2020/theseam-ui-common-utils.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-widget.mjs +53 -32
- package/fesm2020/theseam-ui-common-widget.mjs.map +1 -1
- package/google-maps/google-maps/google-maps.component.d.ts +8 -1
- package/google-maps/google-maps-feature-helpers.d.ts +3 -0
- package/google-maps/google-maps.module.d.ts +1 -1
- package/google-maps/google-maps.service.d.ts +7 -0
- package/google-maps/public-api.d.ts +1 -0
- package/menu/menu-item.component.d.ts +20 -9
- package/menu/menu-toggle.directive.d.ts +34 -11
- package/menu/menu.component.d.ts +16 -2
- package/package.json +1 -1
- package/utils/geo-json/close-polygons.d.ts +9 -0
- package/utils/public-api.d.ts +1 -0
- package/widget/widget/widget.component.d.ts +10 -11
- package/widget/widget/widget.component.scss +12 -1
|
@@ -89,7 +89,7 @@ export class DatatableActionMenuComponent {
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
DatatableActionMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatatableActionMenuComponent, deps: [{ token: i1.SeamConfirmDialogService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
92
|
-
DatatableActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DatatableActionMenuComponent, selector: "seam-datatable-action-menu", queries: [{ propertyName: "items", predicate: DatatableActionMenuItemComponent }], ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i4.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i4.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i5.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }] });
|
|
92
|
+
DatatableActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DatatableActionMenuComponent, selector: "seam-datatable-action-menu", queries: [{ propertyName: "items", predicate: DatatableActionMenuItemComponent }], ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i4.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i4.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i5.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }] });
|
|
93
93
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatatableActionMenuComponent, decorators: [{
|
|
94
94
|
type: Component,
|
|
95
95
|
args: [{ selector: 'seam-datatable-action-menu', template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"] }]
|
|
@@ -43,7 +43,7 @@ export class DatatableColumnPreferencesButtonComponent {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
DatatableColumnPreferencesButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatatableColumnPreferencesButtonComponent, deps: [{ token: i1.ColumnsAlterationsManagerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
46
|
-
DatatableColumnPreferencesButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DatatableColumnPreferencesButtonComponent, selector: "seam-datatable-column-preferences-button", ngImport: i0, template: "<ng-template #colPrefsTpl>\n <seam-datatable-column-preferences></seam-datatable-column-preferences>\n</ng-template>\n\n<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [seamPopover]=\"colPrefsTpl\">\n Show/Hide Columns\n </button>\n\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"_resetColumns($event)\">\n Reset Columns\n </button>\n</seam-menu>\n\n<button type=\"button\" class=\"btn btn-lightgray btn-sm\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Column Preferences\">\n <seam-icon [icon]=\"icon\"></seam-icon>\n <span class=\"sr-only\">Column Preferences</span>\n</button>\n\n", styles: [""], dependencies: [{ kind: "component", type: i2.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i2.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i2.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i3.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "directive", type: i4.TheSeamPopoverDirective, selector: "[seamPopover]", inputs: ["seamPopover", "seamPopoverBaseWidth", "seamPopoverDisabled"], exportAs: ["seamPopover"] }, { kind: "component", type: i5.DatatableColumnPreferencesComponent, selector: "seam-datatable-column-preferences" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
46
|
+
DatatableColumnPreferencesButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DatatableColumnPreferencesButtonComponent, selector: "seam-datatable-column-preferences-button", ngImport: i0, template: "<ng-template #colPrefsTpl>\n <seam-datatable-column-preferences></seam-datatable-column-preferences>\n</ng-template>\n\n<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [seamPopover]=\"colPrefsTpl\">\n Show/Hide Columns\n </button>\n\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"_resetColumns($event)\">\n Reset Columns\n </button>\n</seam-menu>\n\n<button type=\"button\" class=\"btn btn-lightgray btn-sm\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Column Preferences\">\n <seam-icon [icon]=\"icon\"></seam-icon>\n <span class=\"sr-only\">Column Preferences</span>\n</button>\n\n", styles: [""], dependencies: [{ kind: "component", type: i2.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i2.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i2.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i3.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "directive", type: i4.TheSeamPopoverDirective, selector: "[seamPopover]", inputs: ["seamPopover", "seamPopoverBaseWidth", "seamPopoverDisabled"], exportAs: ["seamPopover"] }, { kind: "component", type: i5.DatatableColumnPreferencesComponent, selector: "seam-datatable-column-preferences" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
47
47
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatatableColumnPreferencesButtonComponent, decorators: [{
|
|
48
48
|
type: Component,
|
|
49
49
|
args: [{ selector: 'seam-datatable-column-preferences-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #colPrefsTpl>\n <seam-datatable-column-preferences></seam-datatable-column-preferences>\n</ng-template>\n\n<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [seamPopover]=\"colPrefsTpl\">\n Show/Hide Columns\n </button>\n\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"_resetColumns($event)\">\n Reset Columns\n </button>\n</seam-menu>\n\n<button type=\"button\" class=\"btn btn-lightgray btn-sm\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Column Preferences\">\n <seam-icon [icon]=\"icon\"></seam-icon>\n <span class=\"sr-only\">Column Preferences</span>\n</button>\n\n" }]
|
|
@@ -88,7 +88,7 @@ export class DatatableExportButtonComponent {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
DatatableExportButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatatableExportButtonComponent, deps: [{ token: THESEAM_DATATABLE }, { token: i1.ToastrService }, { token: i2.TheSeamLoadingOverlayService }, { token: i3.DynamicValueHelperService }, { token: THESEAM_DYNAMIC_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
91
|
-
DatatableExportButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DatatableExportButtonComponent, selector: "seam-datatable-export-button", inputs: { exporters: "exporters" }, ngImport: i0, template: "<seam-menu #menu>\n <button *ngFor=\"let exp of exporters\"\n seamMenuItem\n [icon]=\"exp?.icon\"\n (click)=\"_onExporterClicked(exp)\">\n {{ exp.label }}\n </button>\n</seam-menu>\n<button\n [seamMenuToggle]=\"menu\"\n seamButton\n theme=\"lightgray\"\n size=\"sm\"\n class=\"dropdown-toggle\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Export\"\n [disabled]=\"disabled\"\n >\n <seam-icon [icon]=\"icon\" class=\"mr-2\"></seam-icon>\n</button>\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i5.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i5.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i6.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "component", type: i7.ButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
91
|
+
DatatableExportButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DatatableExportButtonComponent, selector: "seam-datatable-export-button", inputs: { exporters: "exporters" }, ngImport: i0, template: "<seam-menu #menu>\n <button *ngFor=\"let exp of exporters\"\n seamMenuItem\n [icon]=\"exp?.icon\"\n (click)=\"_onExporterClicked(exp)\">\n {{ exp.label }}\n </button>\n</seam-menu>\n<button\n [seamMenuToggle]=\"menu\"\n seamButton\n theme=\"lightgray\"\n size=\"sm\"\n class=\"dropdown-toggle\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Export\"\n [disabled]=\"disabled\"\n >\n <seam-icon [icon]=\"icon\" class=\"mr-2\"></seam-icon>\n</button>\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i5.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i5.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i6.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "component", type: i7.ButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
92
92
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatatableExportButtonComponent, decorators: [{
|
|
93
93
|
type: Component,
|
|
94
94
|
args: [{ selector: 'seam-datatable-export-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<seam-menu #menu>\n <button *ngFor=\"let exp of exporters\"\n seamMenuItem\n [icon]=\"exp?.icon\"\n (click)=\"_onExporterClicked(exp)\">\n {{ exp.label }}\n </button>\n</seam-menu>\n<button\n [seamMenuToggle]=\"menu\"\n seamButton\n theme=\"lightgray\"\n size=\"sm\"\n class=\"dropdown-toggle\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Export\"\n [disabled]=\"disabled\"\n >\n <seam-icon [icon]=\"icon\" class=\"mr-2\"></seam-icon>\n</button>\n", styles: [":host{display:inline-block}\n"] }]
|
|
@@ -106,7 +106,7 @@ export class DatatableDynamicActionMenuComponent {
|
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
DatatableDynamicActionMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatatableDynamicActionMenuComponent, deps: [{ token: i1.DynamicValueHelperService }, { token: i2.DynamicDatatableRowActionsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
109
|
-
DatatableDynamicActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DatatableDynamicActionMenuComponent, selector: "seam-datatable-dynamic-action-menu", inputs: { row: "row", actionDefs: "actionDefs" }, ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let record of _menuRecords$ | async\">\n\n <a *ngIf=\"record.elementType === 'a'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</a>\n\n <button *ngIf=\"record.elementType === 'button'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</button>\n\n </ng-container>\n\n <!-- <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"item.fragment\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n [state]=\"item.state\"\n [routerLink]=\"item.routerLink\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container> -->\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"$any(_actionMenuPositions)\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "component", type: i5.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i5.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i5.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "directive", type: i6.DatatableDynamicActionMenuItemDirective, selector: "[seamDatatableDynamicActionMenuItem]", inputs: ["seamDatatableDynamicActionMenuItem"], exportAs: ["seamDatatableDynamicActionMenuItem"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
109
|
+
DatatableDynamicActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DatatableDynamicActionMenuComponent, selector: "seam-datatable-dynamic-action-menu", inputs: { row: "row", actionDefs: "actionDefs" }, ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let record of _menuRecords$ | async\">\n\n <a *ngIf=\"record.elementType === 'a'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</a>\n\n <button *ngIf=\"record.elementType === 'button'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</button>\n\n </ng-container>\n\n <!-- <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"item.fragment\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n [state]=\"item.state\"\n [routerLink]=\"item.routerLink\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container> -->\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"$any(_actionMenuPositions)\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "component", type: i5.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i5.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i5.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "directive", type: i6.DatatableDynamicActionMenuItemDirective, selector: "[seamDatatableDynamicActionMenuItem]", inputs: ["seamDatatableDynamicActionMenuItem"], exportAs: ["seamDatatableDynamicActionMenuItem"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
110
110
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatatableDynamicActionMenuComponent, decorators: [{
|
|
111
111
|
type: Component,
|
|
112
112
|
args: [{ selector: 'seam-datatable-dynamic-action-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let record of _menuRecords$ | async\">\n\n <a *ngIf=\"record.elementType === 'a'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</a>\n\n <button *ngIf=\"record.elementType === 'button'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</button>\n\n </ng-container>\n\n <!-- <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"item.fragment\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n [state]=\"item.state\"\n [routerLink]=\"item.routerLink\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container> -->\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"$any(_actionMenuPositions)\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"] }]
|
|
@@ -130,7 +130,7 @@ export class TheSeamSchemaFormSubmitSplitComponent {
|
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
TheSeamSchemaFormSubmitSplitComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TheSeamSchemaFormSubmitSplitComponent, deps: [{ token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component });
|
|
133
|
-
TheSeamSchemaFormSubmitSplitComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TheSeamSchemaFormSubmitSplitComponent, selector: "seam-schema-form-submit-split", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: "<div\n [class]=\"options?.htmlClass || ''\">\n <div [class.btn-group]=\"_dropdownObj\">\n <button seamButton theme=\"primary\" type=\"submit\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [class]=\"'btn btn-primary ' + (options?.fieldHtmlClass || '')\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [value]=\"controlValue\"\n (click)=\"updateValue($event)\">\n {{ _buttonLabel }}\n <span *ngIf=\"_selectedItem\">\n [{{ _selectedItem.name }}]\n </span>\n </button>\n <ng-container *ngIf=\"_dropdownObj\">\n <button\n [seamMenuToggle]=\"menu\" seamButton theme=\"primary\"\n class=\"dropdown-toggle dropdown-toggle-split\"\n [disabled]=\"_dropdownDisabled\">\n <span class=\"sr-only\">Toggle Dropdown</span>\n </button>\n <seam-menu #menu>\n <ng-container *ngFor=\"let item of _selectList\">\n <button seamMenuItem\n [class.active]=\"item.checked\"\n (click)=\"_setDropdownValue(item.value)\">\n {{ item.name }}\n </button>\n </ng-container>\n </seam-menu>\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i3.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i3.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }] });
|
|
133
|
+
TheSeamSchemaFormSubmitSplitComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TheSeamSchemaFormSubmitSplitComponent, selector: "seam-schema-form-submit-split", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: "<div\n [class]=\"options?.htmlClass || ''\">\n <div [class.btn-group]=\"_dropdownObj\">\n <button seamButton theme=\"primary\" type=\"submit\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [class]=\"'btn btn-primary ' + (options?.fieldHtmlClass || '')\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [value]=\"controlValue\"\n (click)=\"updateValue($event)\">\n {{ _buttonLabel }}\n <span *ngIf=\"_selectedItem\">\n [{{ _selectedItem.name }}]\n </span>\n </button>\n <ng-container *ngIf=\"_dropdownObj\">\n <button\n [seamMenuToggle]=\"menu\" seamButton theme=\"primary\"\n class=\"dropdown-toggle dropdown-toggle-split\"\n [disabled]=\"_dropdownDisabled\">\n <span class=\"sr-only\">Toggle Dropdown</span>\n </button>\n <seam-menu #menu>\n <ng-container *ngFor=\"let item of _selectList\">\n <button seamMenuItem\n [class.active]=\"item.checked\"\n (click)=\"_setDropdownValue(item.value)\">\n {{ item.name }}\n </button>\n </ng-container>\n </seam-menu>\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i3.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i3.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }] });
|
|
134
134
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TheSeamSchemaFormSubmitSplitComponent, decorators: [{
|
|
135
135
|
type: Component,
|
|
136
136
|
args: [{ selector: 'seam-schema-form-submit-split', template: "<div\n [class]=\"options?.htmlClass || ''\">\n <div [class.btn-group]=\"_dropdownObj\">\n <button seamButton theme=\"primary\" type=\"submit\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [class]=\"'btn btn-primary ' + (options?.fieldHtmlClass || '')\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [value]=\"controlValue\"\n (click)=\"updateValue($event)\">\n {{ _buttonLabel }}\n <span *ngIf=\"_selectedItem\">\n [{{ _selectedItem.name }}]\n </span>\n </button>\n <ng-container *ngIf=\"_dropdownObj\">\n <button\n [seamMenuToggle]=\"menu\" seamButton theme=\"primary\"\n class=\"dropdown-toggle dropdown-toggle-split\"\n [disabled]=\"_dropdownDisabled\">\n <span class=\"sr-only\">Toggle Dropdown</span>\n </button>\n <seam-menu #menu>\n <ng-container *ngFor=\"let item of _selectList\">\n <button seamMenuItem\n [class.active]=\"item.checked\"\n (click)=\"_setDropdownValue(item.value)\">\n {{ item.name }}\n </button>\n </ng-container>\n </seam-menu>\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"] }]
|
|
@@ -59,7 +59,7 @@ export class TheSeamTopBarComponent {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
TheSeamTopBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TheSeamTopBarComponent, deps: [{ token: i1.TheSeamLayoutService }], target: i0.ɵɵFactoryTarget.Component });
|
|
62
|
-
TheSeamTopBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TheSeamTopBarComponent, selector: "seam-top-bar", inputs: { logo: "logo", logoSm: "logoSm", logoHref: "logoHref", logoHrefTarget: "logoHrefTarget", logoRoute: "logoRoute", hasTitle: "hasTitle", titleText: "titleText", subTitleText: "subTitleText", profileIcon: "profileIcon" }, queries: [{ propertyName: "_topBarMenu", first: true, predicate: TopBarMenuDirective, descendants: true, static: true }, { propertyName: "_topBarMenuBtnDetailTpl", first: true, predicate: TopBarMenuBtnDetailDirective, descendants: true }, { propertyName: "_topBarItems", predicate: TopBarItemDirective }], exportAs: ["seamTopBar"], ngImport: i0, template: "<!-- Nav Toggle -->\n<div class=\"d-flex flex-column justify-content-center pr-2\" *ngIf=\"isMobile$ | async\">\n <button seamBaseLayoutNavToggle seamIconBtn [icon]=\"faBars\" iconType=\"borderless-styled-square\"></button>\n</div>\n\n<!-- Logo -->\n<div class=\"top-bar--logo d-flex flex-column justify-content-center\" *ngIf=\"logoHref; else useLogoRoute\"\n [class.top-bar--logo-mobile]=\"isMobile$ | async\">\n <a [href]=\"logoHref\" [target]=\"logoHrefTarget\">\n <div>\n <img *ngIf=\"logo\" [src]=\"logo\" [src.lt-md]=\"hasTitle ? logoSm : logo\" alt=\"Logo\">\n </div>\n </a>\n</div>\n\n<ng-template #useLogoRoute>\n <div class=\"top-bar--logo d-flex flex-column justify-content-center\" [routerLink]=\"logoRoute\"\n [class.top-bar--logo-mobile]=\"isMobile$ | async\">\n <div>\n <img *ngIf=\"logo\" [src]=\"logo\" [src.lt-md]=\"hasTitle ? logoSm : logo\" alt=\"Logo\">\n </div>\n </div>\n</ng-template>\n\n<!-- Title -->\n<div class=\"d-flex flex-column flex-grow-1\">\n <seam-top-bar-title *ngIf=\"hasTitle\"\n [titleText]=\"titleText\"\n [subTitleText]=\"subTitleText\"\n [class.ml-2]=\"isMobile$ | async\">\n </seam-top-bar-title>\n</div>\n\n<!-- Items -->\n<div class=\"top-bar-icon-container mr-2\">\n <ng-container *ngFor=\"let item of _items$ | async\">\n <ng-template [ngTemplateOutlet]=\"item.template\"></ng-template>\n </ng-container>\n</div>\n\n<!-- Menu -->\n<button seamTopBarMenuButton\n [seamMenuToggle]=\"_topBarMenu?.menu\"\n [detailTpl]=\"_topBarMenuBtnDetailTpl?.template\"\n [compact]=\"isMobile$ | async\"\n [profileIcon]=\"profileIcon\">\n</button>\n", styles: ["seam-top-bar{display:flex;flex:1 1 100%;flex-direction:row;background:white;margin:0;padding:8px;border-radius:0;box-shadow:none}.top-bar--logo{flex:0 0 auto;overflow:hidden;cursor:pointer}.top-bar--logo img{height:auto;max-height:60px;width:auto;max-width:200px}.top-bar--logo.top-bar--logo-mobile img{height:auto;max-height:40px;width:auto;max-width:150px}.top-bar-icon-container{margin:auto 0}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultImgSrcDirective, selector: " img[src.xs], img[src.sm], img[src.md], img[src.lg], img[src.xl], img[src.lt-sm], img[src.lt-md], img[src.lt-lg], img[src.lt-xl], img[src.gt-xs], img[src.gt-sm], img[src.gt-md], img[src.gt-lg]", inputs: ["src.xs", "src.sm", "src.md", "src.lg", "src.xl", "src.lt-sm", "src.lt-md", "src.lt-lg", "src.lt-xl", "src.gt-xs", "src.gt-sm", "src.gt-md", "src.gt-lg"] }, { kind: "component", type: i4.IconBtnComponent, selector: "button[seamIconBtn]", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "iconType", "btnTheme", "badgeTheme", "badgeText", "btnSize", "type", "role"] }, { kind: "directive", type: i5.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], exportAs: ["seamMenuToggle"] }, { kind: "directive", type: i6.BaseLayoutNavToggleDirective, selector: "button[seamBaseLayoutNavToggle]", inputs: ["type", "aria-label"], exportAs: ["seamBaseLayoutNavToggle"] }, { kind: "directive", type: i7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i8.TopBarTitleComponent, selector: "seam-top-bar-title", inputs: ["titleText", "subTitleText"] }, { kind: "component", type: i9.TopBarMenuButtonComponent, selector: "button[seamTopBarMenuButton]", inputs: ["disabled", "detailTpl", "compact", "profileIcon"], exportAs: ["seamButton"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
62
|
+
TheSeamTopBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TheSeamTopBarComponent, selector: "seam-top-bar", inputs: { logo: "logo", logoSm: "logoSm", logoHref: "logoHref", logoHrefTarget: "logoHrefTarget", logoRoute: "logoRoute", hasTitle: "hasTitle", titleText: "titleText", subTitleText: "subTitleText", profileIcon: "profileIcon" }, queries: [{ propertyName: "_topBarMenu", first: true, predicate: TopBarMenuDirective, descendants: true, static: true }, { propertyName: "_topBarMenuBtnDetailTpl", first: true, predicate: TopBarMenuBtnDetailDirective, descendants: true }, { propertyName: "_topBarItems", predicate: TopBarItemDirective }], exportAs: ["seamTopBar"], ngImport: i0, template: "<!-- Nav Toggle -->\n<div class=\"d-flex flex-column justify-content-center pr-2\" *ngIf=\"isMobile$ | async\">\n <button seamBaseLayoutNavToggle seamIconBtn [icon]=\"faBars\" iconType=\"borderless-styled-square\"></button>\n</div>\n\n<!-- Logo -->\n<div class=\"top-bar--logo d-flex flex-column justify-content-center\" *ngIf=\"logoHref; else useLogoRoute\"\n [class.top-bar--logo-mobile]=\"isMobile$ | async\">\n <a [href]=\"logoHref\" [target]=\"logoHrefTarget\">\n <div>\n <img *ngIf=\"logo\" [src]=\"logo\" [src.lt-md]=\"hasTitle ? logoSm : logo\" alt=\"Logo\">\n </div>\n </a>\n</div>\n\n<ng-template #useLogoRoute>\n <div class=\"top-bar--logo d-flex flex-column justify-content-center\" [routerLink]=\"logoRoute\"\n [class.top-bar--logo-mobile]=\"isMobile$ | async\">\n <div>\n <img *ngIf=\"logo\" [src]=\"logo\" [src.lt-md]=\"hasTitle ? logoSm : logo\" alt=\"Logo\">\n </div>\n </div>\n</ng-template>\n\n<!-- Title -->\n<div class=\"d-flex flex-column flex-grow-1\">\n <seam-top-bar-title *ngIf=\"hasTitle\"\n [titleText]=\"titleText\"\n [subTitleText]=\"subTitleText\"\n [class.ml-2]=\"isMobile$ | async\">\n </seam-top-bar-title>\n</div>\n\n<!-- Items -->\n<div class=\"top-bar-icon-container mr-2\">\n <ng-container *ngFor=\"let item of _items$ | async\">\n <ng-template [ngTemplateOutlet]=\"item.template\"></ng-template>\n </ng-container>\n</div>\n\n<!-- Menu -->\n<button seamTopBarMenuButton\n [seamMenuToggle]=\"_topBarMenu?.menu\"\n [detailTpl]=\"_topBarMenuBtnDetailTpl?.template\"\n [compact]=\"isMobile$ | async\"\n [profileIcon]=\"profileIcon\">\n</button>\n", styles: ["seam-top-bar{display:flex;flex:1 1 100%;flex-direction:row;background:white;margin:0;padding:8px;border-radius:0;box-shadow:none}.top-bar--logo{flex:0 0 auto;overflow:hidden;cursor:pointer}.top-bar--logo img{height:auto;max-height:60px;width:auto;max-width:200px}.top-bar--logo.top-bar--logo-mobile img{height:auto;max-height:40px;width:auto;max-width:150px}.top-bar-icon-container{margin:auto 0}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultImgSrcDirective, selector: " img[src.xs], img[src.sm], img[src.md], img[src.lg], img[src.xl], img[src.lt-sm], img[src.lt-md], img[src.lt-lg], img[src.lt-xl], img[src.gt-xs], img[src.gt-sm], img[src.gt-md], img[src.gt-lg]", inputs: ["src.xs", "src.sm", "src.md", "src.lg", "src.xl", "src.lt-sm", "src.lt-md", "src.lt-lg", "src.lt-xl", "src.gt-xs", "src.gt-sm", "src.gt-md", "src.gt-lg"] }, { kind: "component", type: i4.IconBtnComponent, selector: "button[seamIconBtn]", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "iconType", "btnTheme", "badgeTheme", "badgeText", "btnSize", "type", "role"] }, { kind: "directive", type: i5.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "directive", type: i6.BaseLayoutNavToggleDirective, selector: "button[seamBaseLayoutNavToggle]", inputs: ["type", "aria-label"], exportAs: ["seamBaseLayoutNavToggle"] }, { kind: "directive", type: i7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i8.TopBarTitleComponent, selector: "seam-top-bar-title", inputs: ["titleText", "subTitleText"] }, { kind: "component", type: i9.TopBarMenuButtonComponent, selector: "button[seamTopBarMenuButton]", inputs: ["disabled", "detailTpl", "compact", "profileIcon"], exportAs: ["seamButton"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
63
63
|
__decorate([
|
|
64
64
|
InputBoolean()
|
|
65
65
|
], TheSeamTopBarComponent.prototype, "hasTitle", void 0);
|
|
@@ -78,6 +78,7 @@ export class TheSeamGoogleMapsComponent extends _TheSeamGoogleMapsMixinBase {
|
|
|
78
78
|
this.mapTypeControlEnabled = true;
|
|
79
79
|
this.streetViewControlEnabled = false;
|
|
80
80
|
this.allowDrawingHoleInPolygon = false;
|
|
81
|
+
this.editingEnabled = true;
|
|
81
82
|
this.zoom = 14;
|
|
82
83
|
this.longitude = -98.570209;
|
|
83
84
|
this.latitude = 37.633814;
|
|
@@ -101,17 +102,32 @@ export class TheSeamGoogleMapsComponent extends _TheSeamGoogleMapsMixinBase {
|
|
|
101
102
|
this._googleMaps.setData(changed.value);
|
|
102
103
|
}
|
|
103
104
|
}), takeUntil(this._ngUnsubscribe)).subscribe();
|
|
105
|
+
this._contextMenuItems$ = this._googleMaps.editingEnabled$.pipe(map(enabled => {
|
|
106
|
+
const items = [];
|
|
107
|
+
if (enabled) {
|
|
108
|
+
items.push({ label: 'Delete', action: () => this._onClickDeleteFeature() });
|
|
109
|
+
}
|
|
110
|
+
return items;
|
|
111
|
+
}), tap(items => {
|
|
112
|
+
if (items.length === 0) {
|
|
113
|
+
this._googleMaps.setFeatureContextMenu(null);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
this._googleMaps.setFeatureContextMenu(this.featureContextMenu);
|
|
117
|
+
}
|
|
118
|
+
}));
|
|
104
119
|
this._googleMaps.setBaseLatLng(this.latitude, this.longitude);
|
|
105
120
|
this._gmApiLoaded = this._googleMapsApiLoader.load().pipe(map(() => true), catchError(() => of(false)));
|
|
106
121
|
}
|
|
107
122
|
ngOnInit() {
|
|
108
|
-
this._googleMaps.setFeatureContextMenu(this.featureContextMenu);
|
|
109
123
|
fromEvent(window, 'keydown').pipe(tap((event) => {
|
|
110
124
|
switch (event.code) {
|
|
111
125
|
case 'Delete':
|
|
112
|
-
this._googleMaps.
|
|
113
|
-
|
|
114
|
-
|
|
126
|
+
if (this._googleMaps.isEditingEnabled()) {
|
|
127
|
+
this._googleMaps.deleteSelection();
|
|
128
|
+
event.preventDefault();
|
|
129
|
+
event.stopPropagation();
|
|
130
|
+
}
|
|
115
131
|
break;
|
|
116
132
|
case 'Escape':
|
|
117
133
|
this._googleMaps.stopDrawing();
|
|
@@ -156,6 +172,9 @@ export class TheSeamGoogleMapsComponent extends _TheSeamGoogleMapsMixinBase {
|
|
|
156
172
|
};
|
|
157
173
|
}
|
|
158
174
|
}
|
|
175
|
+
if (Object.prototype.hasOwnProperty.call(changes, 'editingEnabled')) {
|
|
176
|
+
this._googleMaps.setEditingEnabled(this.editingEnabled);
|
|
177
|
+
}
|
|
159
178
|
}
|
|
160
179
|
writeValue(value) {
|
|
161
180
|
this.value = value;
|
|
@@ -201,7 +220,7 @@ export class TheSeamGoogleMapsComponent extends _TheSeamGoogleMapsMixinBase {
|
|
|
201
220
|
}
|
|
202
221
|
}
|
|
203
222
|
TheSeamGoogleMapsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TheSeamGoogleMapsComponent, deps: [{ token: i0.ElementRef }, { token: i1.FocusMonitor }, { token: i2.GoogleMapsService }, { token: i3.MapValueManagerService }, { token: i4.TheSeamGoogleMapsApiLoader }], target: i0.ɵɵFactoryTarget.Component });
|
|
204
|
-
TheSeamGoogleMapsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TheSeamGoogleMapsComponent, selector: "seam-google-maps", inputs: { disabled: "disabled", value: "value", tabIndex: "tabIndex", fileDropEnabled: "fileDropEnabled", fileUploadControlEnabled: "fileUploadControlEnabled", fullscreenControlEnabled: "fullscreenControlEnabled", reCenterControlEnabled: "reCenterControlEnabled", mapTypeControlEnabled: "mapTypeControlEnabled", streetViewControlEnabled: "streetViewControlEnabled", allowDrawingHoleInPolygon: "allowDrawingHoleInPolygon", fileImportHandler: "fileImportHandler", zoom: "zoom", longitude: "longitude", latitude: "latitude" }, outputs: { mapReady: "mapReady" }, host: { properties: { "attr.disabled": "this._attrDisabled", "attr.tabindex": "this._attrTabIndex" } }, providers: [
|
|
223
|
+
TheSeamGoogleMapsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TheSeamGoogleMapsComponent, selector: "seam-google-maps", inputs: { disabled: "disabled", value: "value", tabIndex: "tabIndex", fileDropEnabled: "fileDropEnabled", fileUploadControlEnabled: "fileUploadControlEnabled", fullscreenControlEnabled: "fullscreenControlEnabled", reCenterControlEnabled: "reCenterControlEnabled", mapTypeControlEnabled: "mapTypeControlEnabled", streetViewControlEnabled: "streetViewControlEnabled", allowDrawingHoleInPolygon: "allowDrawingHoleInPolygon", editingEnabled: "editingEnabled", fileImportHandler: "fileImportHandler", zoom: "zoom", longitude: "longitude", latitude: "latitude" }, outputs: { mapReady: "mapReady" }, host: { properties: { "attr.disabled": "this._attrDisabled", "attr.tabindex": "this._attrTabIndex" } }, providers: [
|
|
205
224
|
MapValueManagerService,
|
|
206
225
|
GoogleMapsService,
|
|
207
226
|
{ provide: MAP_CONTROLS_SERVICE, useClass: GoogleMapsControlsService },
|
|
@@ -211,7 +230,7 @@ TheSeamGoogleMapsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
|
|
|
211
230
|
useExisting: forwardRef(() => TheSeamGoogleMapsComponent),
|
|
212
231
|
multi: true,
|
|
213
232
|
},
|
|
214
|
-
], viewQueries: [{ propertyName: "featureContextMenu", first: true, predicate: ["featureContextMenu"], descendants: true, read: MenuComponent, static: true }], exportAs: ["seamGoogleMaps"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"_gmApiLoaded | async\">\n <google-map\n height=\"100%\"\n width=\"100%\"\n [center]=\"{ lat: latitude, lng: longitude }\"\n [zoom]=\"zoom\"\n [options]=\"_options\"\n (mapInitialized)=\"_onMapReady($any($event))\"\n >\n </google-map>\n</ng-container>\n<seam-menu #featureContextMenu>\n <button seamMenuItem (click)=\"
|
|
233
|
+
], viewQueries: [{ propertyName: "featureContextMenu", first: true, predicate: ["featureContextMenu"], descendants: true, read: MenuComponent, static: true }], exportAs: ["seamGoogleMaps"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"_gmApiLoaded | async\">\n <google-map\n height=\"100%\"\n width=\"100%\"\n [center]=\"{ lat: latitude, lng: longitude }\"\n [zoom]=\"zoom\"\n [options]=\"_options\"\n (mapInitialized)=\"_onMapReady($any($event))\"\n >\n </google-map>\n</ng-container>\n<seam-menu #featureContextMenu>\n <button seamMenuItem *ngFor=\"let item of _contextMenuItems$ | async\" (click)=\"item.action(item)\">{{ item.label }}</button>\n</seam-menu>\n<seam-map-file-drop *ngIf=\"fileDropEnabled\"></seam-map-file-drop>\n\n<seam-map-control *ngIf=\"fileUploadControlEnabled\" [def]=\"_fileUploadControlDef\"></seam-map-control>\n<seam-map-control *ngIf=\"reCenterControlEnabled\" [def]=\"_reCenterControlDef\"></seam-map-control>\n", styles: [":host{display:block;position:relative;height:400px;width:100%}:host.show-focus-border.cdk-focused{outline:0;box-shadow:0 0 0 .2rem #357ebd40}:host.show-focus-border[disabled]{opacity:.65}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "component", type: i6.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i7.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { kind: "component", type: i8.TheSeamMapFileDropComponent, selector: "seam-map-file-drop" }, { kind: "component", type: i9.TheSeamMapsControlComponent, selector: "seam-map-control", inputs: ["def"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
215
234
|
__decorate([
|
|
216
235
|
InputBoolean()
|
|
217
236
|
], TheSeamGoogleMapsComponent.prototype, "fileDropEnabled", void 0);
|
|
@@ -233,6 +252,9 @@ __decorate([
|
|
|
233
252
|
__decorate([
|
|
234
253
|
InputBoolean()
|
|
235
254
|
], TheSeamGoogleMapsComponent.prototype, "allowDrawingHoleInPolygon", void 0);
|
|
255
|
+
__decorate([
|
|
256
|
+
InputBoolean()
|
|
257
|
+
], TheSeamGoogleMapsComponent.prototype, "editingEnabled", void 0);
|
|
236
258
|
__decorate([
|
|
237
259
|
InputNumber()
|
|
238
260
|
], TheSeamGoogleMapsComponent.prototype, "zoom", void 0);
|
|
@@ -256,7 +278,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
256
278
|
useExisting: forwardRef(() => TheSeamGoogleMapsComponent),
|
|
257
279
|
multi: true,
|
|
258
280
|
},
|
|
259
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'seamGoogleMaps', template: "<ng-container *ngIf=\"_gmApiLoaded | async\">\n <google-map\n height=\"100%\"\n width=\"100%\"\n [center]=\"{ lat: latitude, lng: longitude }\"\n [zoom]=\"zoom\"\n [options]=\"_options\"\n (mapInitialized)=\"_onMapReady($any($event))\"\n >\n </google-map>\n</ng-container>\n<seam-menu #featureContextMenu>\n <button seamMenuItem (click)=\"
|
|
281
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'seamGoogleMaps', template: "<ng-container *ngIf=\"_gmApiLoaded | async\">\n <google-map\n height=\"100%\"\n width=\"100%\"\n [center]=\"{ lat: latitude, lng: longitude }\"\n [zoom]=\"zoom\"\n [options]=\"_options\"\n (mapInitialized)=\"_onMapReady($any($event))\"\n >\n </google-map>\n</ng-container>\n<seam-menu #featureContextMenu>\n <button seamMenuItem *ngFor=\"let item of _contextMenuItems$ | async\" (click)=\"item.action(item)\">{{ item.label }}</button>\n</seam-menu>\n<seam-map-file-drop *ngIf=\"fileDropEnabled\"></seam-map-file-drop>\n\n<seam-map-control *ngIf=\"fileUploadControlEnabled\" [def]=\"_fileUploadControlDef\"></seam-map-control>\n<seam-map-control *ngIf=\"reCenterControlEnabled\" [def]=\"_reCenterControlDef\"></seam-map-control>\n", styles: [":host{display:block;position:relative;height:400px;width:100%}:host.show-focus-border.cdk-focused{outline:0;box-shadow:0 0 0 .2rem #357ebd40}:host.show-focus-border[disabled]{opacity:.65}\n"] }]
|
|
260
282
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FocusMonitor }, { type: i2.GoogleMapsService }, { type: i3.MapValueManagerService }, { type: i4.TheSeamGoogleMapsApiLoader }]; }, propDecorators: { value: [{
|
|
261
283
|
type: Input
|
|
262
284
|
}], tabIndex: [{
|
|
@@ -275,6 +297,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
275
297
|
type: Input
|
|
276
298
|
}], allowDrawingHoleInPolygon: [{
|
|
277
299
|
type: Input
|
|
300
|
+
}], editingEnabled: [{
|
|
301
|
+
type: Input
|
|
278
302
|
}], fileImportHandler: [{
|
|
279
303
|
type: Input
|
|
280
304
|
}], _attrDisabled: [{
|
|
@@ -295,4 +319,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
295
319
|
type: ViewChild,
|
|
296
320
|
args: ['featureContextMenu', { static: true, read: MenuComponent }]
|
|
297
321
|
}] } });
|
|
298
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9nb29nbGUtbWFwcy9nb29nbGUtbWFwcy9nb29nbGUtbWFwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxvQkFBb0IsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlHLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDOUUsT0FBTyxFQUE4QixZQUFZLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQzlHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUd2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUMzRSxPQUFPLEVBQ0wsK0NBQStDLEdBQ2hELE1BQU0sc0ZBQXNGLENBQUE7QUFDN0YsT0FBTyxFQUNMLDZDQUE2QyxHQUM5QyxNQUFNLGtGQUFrRixDQUFBO0FBQ3pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzFELE9BQU8sRUFBYyxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQzFFLE9BQU8sRUFBWSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTs7Ozs7Ozs7Ozs7QUFFL0YsTUFBTSw4QkFBOEI7SUFFbEMsWUFBbUIsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7SUFBRyxDQUFDO0NBRS9DO0FBRUQsTUFBTSwyQkFBMkIsR0FFN0IsYUFBYSxDQUFDLDhCQUE4QixDQUFDLENBQUE7QUFFakQ7O0dBRUc7QUFzQkgsTUFBTSxPQUFPLDBCQUEyQixTQUFRLDJCQUEyQjtJQWlDekUsSUFDSSxLQUFLLENBQUMsS0FBZTtRQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQTtJQUNwQyxDQUFDO0lBRUQsSUFDSSxRQUFRLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQzVFLElBQUksUUFBUSxLQUFhLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUM7SUFrQmhELElBQ0ksaUJBQWlCLENBQUMsS0FBZ0Q7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRUQsSUFDSSxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQSxDQUFDLENBQUM7SUFFcEQsSUFDSSxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQW9CeEUsWUFDVyxVQUFzQixFQUNkLGFBQTJCLEVBQzNCLFdBQThCLEVBQzlCLGdCQUF3QyxFQUN4QyxvQkFBZ0Q7UUFFakUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBTlIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNkLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXdCO1FBQ3hDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBNEI7UUFoRmxELG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQTtRQUk1QywwQkFBcUIsR0FBZTtZQUMzQyxTQUFTLEVBQUUsNkNBQTZDO1lBQ3hELElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ3RELFFBQVEsRUFBRSxDQUFDLENBQUMsNkNBQTZDO1NBQzFELENBQUE7UUFFUSx3QkFBbUIsR0FBZTtZQUN6QyxTQUFTLEVBQUUsK0NBQStDO1lBQzFELElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ3RELFFBQVEsRUFBRSxDQUFDLENBQUMsOENBQThDO1NBQzNELENBQUE7UUFFTyxpQkFBWSxHQUFnQixJQUFJLENBQUE7UUFheEM7Ozs7V0FJRztRQUNLLGNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUVHLG9CQUFlLEdBQUcsSUFBSSxDQUFBO1FBRXRCLDZCQUF3QixHQUFHLEtBQUssQ0FBQTtRQUNoQyw2QkFBd0IsR0FBRyxJQUFJLENBQUE7UUFDL0IsMkJBQXNCLEdBQUcsSUFBSSxDQUFBO1FBQzdCLDBCQUFxQixHQUFHLElBQUksQ0FBQTtRQUM1Qiw2QkFBd0IsR0FBRyxLQUFLLENBQUE7UUFFaEMsOEJBQXlCLEdBQUcsS0FBSyxDQUFBO1FBZ0JsQyxTQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ1QsY0FBUyxHQUFHLENBQUMsU0FBUyxDQUFBO1FBQ3RCLGFBQVEsR0FBRyxTQUFTLENBQUE7UUFFbEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUE7UUFJN0MsYUFBUSxHQUFHO1lBQ1QsY0FBYyxFQUFFLElBQUk7WUFDcEIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsaUJBQWlCLEVBQUUsS0FBSztZQUN4QixpQkFBaUIsRUFBRSxJQUFJLENBQUMsd0JBQXdCO1NBQ2pELENBQUE7UUFXQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDckQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUEsQ0FBQyxDQUFDLENBQUMsRUFDN0MsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FDL0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUViLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNyQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7YUFBRTtZQUNsRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO2FBQUU7UUFDMUMsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxhQUFhLEVBQUU7Z0JBQ2hGLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTthQUN4QztRQUNILENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQy9CLENBQUMsU0FBUyxFQUFFLENBQUE7UUFFYixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUU3RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQ3ZELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFDZixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzVCLENBQUE7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFFL0QsU0FBUyxDQUFnQixNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUM5QyxHQUFHLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDM0IsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUNsQixLQUFLLFFBQVE7b0JBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUFDLE1BQUs7Z0JBQ3pHLEtBQUssUUFBUTtvQkFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQUMsTUFBSztnQkFDckcsS0FBSyxhQUFhO29CQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFBQyxNQUFLO2FBQy9HO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FDL0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUNmLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRW5ELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQTtRQUN0QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQTtZQUM3QyxVQUFVLEdBQUcsSUFBSSxDQUFBO1NBQ2xCO1FBQ0QsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUFFO1lBQzlELElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUE7WUFDL0MsVUFBVSxHQUFHLElBQUksQ0FBQTtTQUNsQjtRQUNELElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7U0FDOUQ7UUFFRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsMkJBQTJCLENBQUMsRUFBRTtZQUM5RSxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO1NBQzNFO1FBRUQsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDBCQUEwQixDQUFDLEVBQUU7WUFDN0UsTUFBTSxpQkFBaUIsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDOUYsSUFBSSxpQkFBaUIsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFO2dCQUN6RCxJQUFJLENBQUMsUUFBUSxHQUFHO29CQUNkLEdBQUcsSUFBSSxDQUFDLFFBQVE7b0JBQ2hCLGlCQUFpQjtpQkFDbEIsQ0FBQTthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWU7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7SUFDcEIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFDckIsQ0FBQztJQUVELGdCQUFnQixDQUFFLFVBQW1CO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFBO0lBQzVCLENBQUM7SUFFTSxTQUFTLENBQUMsTUFBa0UsRUFBRSxPQUFzQztRQUN6SCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVNLFVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDdEMsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFBO0lBQ3RFLENBQUM7SUFFRCwwQkFBMEI7SUFDbkIsS0FBSztRQUNWLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBRU8sZUFBZTtRQUNyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBdUI7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3JELDRFQUE0RTtRQUM1RSw4REFBOEQ7UUFDOUQsNEVBQTRFO1FBQzVFLDJFQUEyRTtRQUMzRSwwRUFBMEU7UUFDMUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFBO0lBQ3BDLENBQUM7O3VIQW5PVSwwQkFBMEI7MkdBQTFCLDBCQUEwQixrc0JBZDFCO1FBQ1Qsc0JBQXNCO1FBQ3RCLGlCQUFpQjtRQUNqQixFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUU7UUFDdEU7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLGdEQUFnRDtZQUNoRCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDO1lBQ3pELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRiwrSEFxRnNELGFBQWEscUhDeEp0RSw2ckJBa0JBO0FEd0cyQjtJQUFmLFlBQVksRUFBRTttRUFBdUI7QUFFdEI7SUFBZixZQUFZLEVBQUU7NEVBQWlDO0FBQ2hDO0lBQWYsWUFBWSxFQUFFOzRFQUFnQztBQUMvQjtJQUFmLFlBQVksRUFBRTswRUFBOEI7QUFDN0I7SUFBZixZQUFZLEVBQUU7eUVBQTZCO0FBQzVCO0lBQWYsWUFBWSxFQUFFOzRFQUFpQztBQUVoQztJQUFmLFlBQVksRUFBRTs2RUFBa0M7QUFnQmxDO0lBQWQsV0FBVyxFQUFFO3dEQUFVO0FBQ1Q7SUFBZCxXQUFXLEVBQUU7NkRBQXVCO0FBQ3RCO0lBQWQsV0FBVyxFQUFFOzREQUFxQjsyRkE3RWpDLDBCQUEwQjtrQkFyQnRDLFNBQVM7K0JBQ0Usa0JBQWtCLFVBR3BCO3dCQUNOLFVBQVU7cUJBQ1gsYUFDVTt3QkFDVCxzQkFBc0I7d0JBQ3RCLGlCQUFpQjt3QkFDakIsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFO3dCQUN0RTs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixnREFBZ0Q7NEJBQ2hELFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDJCQUEyQixDQUFDOzRCQUN6RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxZQUNyQyxnQkFBZ0I7ME9Bb0N0QixLQUFLO3NCQURSLEtBQUs7Z0JBU0YsUUFBUTtzQkFEWCxLQUFLO2dCQVVtQixlQUFlO3NCQUF2QyxLQUFLO2dCQUVtQix3QkFBd0I7c0JBQWhELEtBQUs7Z0JBQ21CLHdCQUF3QjtzQkFBaEQsS0FBSztnQkFDbUIsc0JBQXNCO3NCQUE5QyxLQUFLO2dCQUNtQixxQkFBcUI7c0JBQTdDLEtBQUs7Z0JBQ21CLHdCQUF3QjtzQkFBaEQsS0FBSztnQkFFbUIseUJBQXlCO3NCQUFqRCxLQUFLO2dCQUdGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFNRixhQUFhO3NCQURoQixXQUFXO3VCQUFDLGVBQWU7Z0JBSXhCLGFBQWE7c0JBRGhCLFdBQVc7dUJBQUMsZUFBZTtnQkFNSixJQUFJO3NCQUEzQixLQUFLO2dCQUNrQixTQUFTO3NCQUFoQyxLQUFLO2dCQUNrQixRQUFRO3NCQUEvQixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBRXdFLGtCQUFrQjtzQkFBaEcsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzTW9uaXRvciwgRm9jdXNPcmlnaW4gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSdcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBmYUNyb3NzaGFpcnMsIGZhRmlsZUltcG9ydCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucydcbmltcG9ydCB7IENhbkRpc2FibGUsIENhbkRpc2FibGVDdG9yLCBJbnB1dEJvb2xlYW4sIElucHV0TnVtYmVyLCBtaXhpbkRpc2FibGVkIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2NvcmUnXG5pbXBvcnQgeyBNZW51Q29tcG9uZW50IH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL21lbnUnXG5cbmltcG9ydCB7IFRoZVNlYW1Hb29nbGVNYXBzQXBpTG9hZGVyIH0gZnJvbSAnLi4vZ29vZ2xlLW1hcHMtYXBpLWxvYWRlci9nb29nbGUtbWFwcy1hcGktbG9hZGVyJ1xuaW1wb3J0IHsgR29vZ2xlTWFwc0NvbnRyb2xzU2VydmljZSB9IGZyb20gJy4uL2dvb2dsZS1tYXBzLWNvbnRyb2xzLnNlcnZpY2UnXG5pbXBvcnQge1xuICBUaGVTZWFtR29vZ2xlTWFwc1JlY2VudGVyQnV0dG9uQ29udHJvbENvbXBvbmVudCxcbn0gZnJvbSAnLi4vZ29vZ2xlLW1hcHMtcmVjZW50ZXItYnV0dG9uLWNvbnRyb2wvZ29vZ2xlLW1hcHMtcmVjZW50ZXItYnV0dG9uLWNvbnRyb2wuY29tcG9uZW50J1xuaW1wb3J0IHtcbiAgVGhlU2VhbUdvb2dsZU1hcHNVcGxvYWRCdXR0b25Db250cm9sQ29tcG9uZW50LFxufSBmcm9tICcuLi9nb29nbGUtbWFwcy11cGxvYWQtYnV0dG9uLWNvbnRyb2wvZ29vZ2xlLW1hcHMtdXBsb2FkLWJ1dHRvbi1jb250cm9sLmNvbXBvbmVudCdcbmltcG9ydCB7IEdvb2dsZU1hcHNTZXJ2aWNlIH0gZnJvbSAnLi4vZ29vZ2xlLW1hcHMuc2VydmljZSdcbmltcG9ydCB7IE1hcENvbnRyb2wsIE1BUF9DT05UUk9MU19TRVJWSUNFIH0gZnJvbSAnLi4vbWFwLWNvbnRyb2xzLXNlcnZpY2UnXG5pbXBvcnQgeyBNYXBWYWx1ZSwgTWFwVmFsdWVNYW5hZ2VyU2VydmljZSwgTWFwVmFsdWVTb3VyY2UgfSBmcm9tICcuLi9tYXAtdmFsdWUtbWFuYWdlci5zZXJ2aWNlJ1xuXG5jbGFzcyBUaGVTZWFtR29vZ2xlTWFwc0NvbXBvbmVudEJhc2Uge1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxufVxuXG5jb25zdCBfVGhlU2VhbUdvb2dsZU1hcHNNaXhpbkJhc2U6IENhbkRpc2FibGVDdG9yICZcbiAgdHlwZW9mIFRoZVNlYW1Hb29nbGVNYXBzQ29tcG9uZW50QmFzZSA9XG4gICAgbWl4aW5EaXNhYmxlZChUaGVTZWFtR29vZ2xlTWFwc0NvbXBvbmVudEJhc2UpXG5cbi8qKlxuICogQSB3cmFwcGVyIGZvciBnb29nbGVtYXAuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlYW0tZ29vZ2xlLW1hcHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ29vZ2xlLW1hcHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nb29nbGUtbWFwcy5jb21wb25lbnQuc2NzcyddLFxuICBpbnB1dHM6IFtcbiAgICAnZGlzYWJsZWQnLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBNYXBWYWx1ZU1hbmFnZXJTZXJ2aWNlLFxuICAgIEdvb2dsZU1hcHNTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogTUFQX0NPTlRST0xTX1NFUlZJQ0UsIHVzZUNsYXNzOiBHb29nbGVNYXBzQ29udHJvbHNTZXJ2aWNlIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRoZVNlYW1Hb29nbGVNYXBzQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBleHBvcnRBczogJ3NlYW1Hb29nbGVNYXBzJyxcbn0pXG5leHBvcnQgY2xhc3MgVGhlU2VhbUdvb2dsZU1hcHNDb21wb25lbnQgZXh0ZW5kcyBfVGhlU2VhbUdvb2dsZU1hcHNNaXhpbkJhc2VcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBDYW5EaXNhYmxlLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVkOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3pvb206IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9sb25naXR1ZGU6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9sYXRpdHVkZTogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2ZpbGVEcm9wRW5hYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9maWxlVXBsb2FkQ29udHJvbEVuYWJsZWQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZnVsbHNjcmVlbkNvbnRyb2xFbmFibGVkOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3JlQ2VudGVyQ29udHJvbEVuYWJsZWQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbWFwVHlwZUNvbnRyb2xFbmFibGVkOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N0cmVldFZpZXdDb250cm9sRW5hYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9hbGxvd0RyYXdpbmdIb2xlSW5Qb2x5Z29uOiBCb29sZWFuSW5wdXRcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuXG4gIHJlYWRvbmx5IF9nbUFwaUxvYWRlZDogT2JzZXJ2YWJsZTxib29sZWFuPlxuXG4gIHJlYWRvbmx5IF9maWxlVXBsb2FkQ29udHJvbERlZjogTWFwQ29udHJvbCA9IHtcbiAgICBjb21wb25lbnQ6IFRoZVNlYW1Hb29nbGVNYXBzVXBsb2FkQnV0dG9uQ29udHJvbENvbXBvbmVudCxcbiAgICBkYXRhOiB7IGxhYmVsOiAnSW1wb3J0IEdlbyBGaWxlJywgaWNvbjogZmFGaWxlSW1wb3J0IH0sXG4gICAgcG9zaXRpb246IDYgLyogZ29vZ2xlLm1hcHMuQ29udHJvbFBvc2l0aW9uLkxFRlRfQk9UVE9NICovLFxuICB9XG5cbiAgcmVhZG9ubHkgX3JlQ2VudGVyQ29udHJvbERlZjogTWFwQ29udHJvbCA9IHtcbiAgICBjb21wb25lbnQ6IFRoZVNlYW1Hb29nbGVNYXBzUmVjZW50ZXJCdXR0b25Db250cm9sQ29tcG9uZW50LFxuICAgIGRhdGE6IHsgbGFiZWw6ICdDZW50ZXIgb24gRmllbGQnLCBpY29uOiBmYUNyb3NzaGFpcnMgfSxcbiAgICBwb3NpdGlvbjogOSAvKiBnb29nbGUubWFwcy5Db250cm9sUG9zaXRpb24uUklHSFRfQk9UVE9NICovLFxuICB9XG5cbiAgcHJpdmF0ZSBfZm9jdXNPcmlnaW46IEZvY3VzT3JpZ2luID0gbnVsbFxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2YWx1ZTogTWFwVmFsdWUpIHtcbiAgICB0aGlzLl9tYXBWYWx1ZU1hbmFnZXIuc2V0VmFsdWUodmFsdWUsIE1hcFZhbHVlU291cmNlLklucHV0KVxuICB9XG4gIGdldCB2YWx1ZSgpOiBNYXBWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcFZhbHVlTWFuYWdlci52YWx1ZVxuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHRhYkluZGV4KHZhbHVlOiBudW1iZXIpIHsgdGhpcy5fdGFiSW5kZXggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSkgfVxuICBnZXQgdGFiSW5kZXgoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX3RhYkluZGV4IH1cbiAgLyoqXG4gICAqIFNldCB0aGUgdGFiIGluZGV4IHRvIGAtMWAgdG8gYWxsb3cgdGhlIHJvb3QgZWxlbWVudCBvZiB0aGVcbiAgICogY29tcG9uZW50IHRvIHJlY2VpdmUgYGZvY3VzYCBldmVudCBmcm9tIGphdmFzY3JpcHQsIGJ1dCBub3QgZ2V0IGZvY3VzZWQgYnlcbiAgICoga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgX3RhYkluZGV4ID0gLTFcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZmlsZURyb3BFbmFibGVkID0gdHJ1ZVxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBmaWxlVXBsb2FkQ29udHJvbEVuYWJsZWQgPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZnVsbHNjcmVlbkNvbnRyb2xFbmFibGVkID0gdHJ1ZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgcmVDZW50ZXJDb250cm9sRW5hYmxlZCA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIG1hcFR5cGVDb250cm9sRW5hYmxlZCA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHN0cmVldFZpZXdDb250cm9sRW5hYmxlZCA9IGZhbHNlXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGFsbG93RHJhd2luZ0hvbGVJblBvbHlnb24gPSBmYWxzZVxuXG4gIEBJbnB1dCgpXG4gIHNldCBmaWxlSW1wb3J0SGFuZGxlcih2YWx1ZTogKChmaWxlOiBGaWxlKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICB0aGlzLl9nb29nbGVNYXBzLnNldEZpbGVJbnB1dEhhbmRsZXIodmFsdWUpXG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxuICBnZXQgX2F0dHJEaXNhYmxlZCgpIHsgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgbnVsbCB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgZ2V0IF9hdHRyVGFiSW5kZXgoKSB7IHJldHVybiB0aGlzLmRpc2FibGVkID8gLTEgOiAodGhpcy50YWJJbmRleCB8fCAwKSB9XG5cbiAgb25DaGFuZ2U6IGFueVxuICBvblRvdWNoZWQ6IGFueVxuXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIHpvb20gPSAxNFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBsb25naXR1ZGUgPSAtOTguNTcwMjA5XG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIGxhdGl0dWRlID0gMzcuNjMzODE0XG5cbiAgQE91dHB1dCgpIG1hcFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXG5cbiAgQFZpZXdDaGlsZCgnZmVhdHVyZUNvbnRleHRNZW51JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IE1lbnVDb21wb25lbnQgfSkgcHVibGljIGZlYXR1cmVDb250ZXh0TWVudSE6IE1lbnVDb21wb25lbnRcblxuICBfb3B0aW9ucyA9IHtcbiAgICBtYXBUeXBlQ29udHJvbDogdHJ1ZSxcbiAgICBtYXBUeXBlSWQ6ICdoeWJyaWQnLFxuICAgIHN0cmVldFZpZXdDb250cm9sOiBmYWxzZSxcbiAgICBmdWxsc2NyZWVuQ29udHJvbDogdGhpcy5mdWxsc2NyZWVuQ29udHJvbEVuYWJsZWQsXG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2dvb2dsZU1hcHM6IEdvb2dsZU1hcHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21hcFZhbHVlTWFuYWdlcjogTWFwVmFsdWVNYW5hZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9nb29nbGVNYXBzQXBpTG9hZGVyOiBUaGVTZWFtR29vZ2xlTWFwc0FwaUxvYWRlcixcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZilcblxuICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsIHRydWUpLnBpcGUoXG4gICAgICB0YXAob3JpZ2luID0+IHsgdGhpcy5fZm9jdXNPcmlnaW4gPSBvcmlnaW4gfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSksXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgdGhpcy5fbWFwVmFsdWVNYW5hZ2VyLnZhbHVlQ2hhbmdlZC5waXBlKFxuICAgICAgdGFwKGNoYW5nZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7IHRoaXMub25DaGFuZ2UoY2hhbmdlLnZhbHVlKSB9XG4gICAgICAgIGlmICh0aGlzLm9uVG91Y2hlZCkgeyB0aGlzLm9uVG91Y2hlZCgpIH1cbiAgICAgIH0pLFxuICAgICAgdGFwKGNoYW5nZWQgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZ29vZ2xlTWFwcy5tYXBSZWFkeSAmJiBjaGFuZ2VkLnNvdXJjZSAhPT0gTWFwVmFsdWVTb3VyY2UuRmVhdHVyZUNoYW5nZSkge1xuICAgICAgICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0RGF0YShjaGFuZ2VkLnZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKSxcbiAgICApLnN1YnNjcmliZSgpXG5cbiAgICB0aGlzLl9nb29nbGVNYXBzLnNldEJhc2VMYXRMbmcodGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGUpXG5cbiAgICB0aGlzLl9nbUFwaUxvYWRlZCA9IHRoaXMuX2dvb2dsZU1hcHNBcGlMb2FkZXIubG9hZCgpLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gdHJ1ZSksXG4gICAgICBjYXRjaEVycm9yKCgpID0+IG9mKGZhbHNlKSksXG4gICAgKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXRGZWF0dXJlQ29udGV4dE1lbnUodGhpcy5mZWF0dXJlQ29udGV4dE1lbnUpXG5cbiAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4od2luZG93LCAna2V5ZG93bicpLnBpcGUoXG4gICAgICB0YXAoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgICAgIGNhc2UgJ0RlbGV0ZSc6IHRoaXMuX2dvb2dsZU1hcHMuZGVsZXRlU2VsZWN0aW9uKCk7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBicmVha1xuICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6IHRoaXMuX2dvb2dsZU1hcHMuc3RvcERyYXdpbmcoKTsgZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGJyZWFrXG4gICAgICAgICAgY2FzZSAnQ29udGV4dE1lbnUnOiB0aGlzLl9nb29nbGVNYXBzLm9wZW5Db250ZXh0TWVudSgpOyBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSksXG4gICAgKS5zdWJzY3JpYmUoKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpXG5cbiAgICB0aGlzLl9uZ1Vuc3Vic2NyaWJlLm5leHQoKVxuICAgIHRoaXMuX25nVW5zdWJzY3JpYmUuY29tcGxldGUoKVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGxldCB1cGRhdGVCYXNlID0gZmFsc2VcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdsYXRpdHVkZScpKSB7XG4gICAgICB0aGlzLmxhdGl0dWRlID0gY2hhbmdlcy5sYXRpdHVkZS5jdXJyZW50VmFsdWVcbiAgICAgIHVwZGF0ZUJhc2UgPSB0cnVlXG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2xvbmdpdHVkZScpKSB7XG4gICAgICB0aGlzLmxvbmdpdHVkZSA9IGNoYW5nZXMubG9uZ2l0dWRlLmN1cnJlbnRWYWx1ZVxuICAgICAgdXBkYXRlQmFzZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHVwZGF0ZUJhc2UpIHtcbiAgICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0QmFzZUxhdExuZyh0aGlzLmxhdGl0dWRlLCB0aGlzLmxvbmdpdHVkZSlcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdhbGxvd0RyYXdpbmdIb2xlSW5Qb2x5Z29uJykpIHtcbiAgICAgIHRoaXMuX2dvb2dsZU1hcHMuYWxsb3dEcmF3aW5nSG9sZUluUG9seWdvbih0aGlzLmFsbG93RHJhd2luZ0hvbGVJblBvbHlnb24pXG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZnVsbHNjcmVlbkNvbnRyb2xFbmFibGVkJykpIHtcbiAgICAgIGNvbnN0IGZ1bGxzY3JlZW5Db250cm9sID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGNoYW5nZXMuZnVsbHNjcmVlbkNvbnRyb2xFbmFibGVkLmN1cnJlbnRWYWx1ZSlcbiAgICAgIGlmIChmdWxsc2NyZWVuQ29udHJvbCAhPT0gdGhpcy5fb3B0aW9ucy5mdWxsc2NyZWVuQ29udHJvbCkge1xuICAgICAgICB0aGlzLl9vcHRpb25zID0ge1xuICAgICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgICAgZnVsbHNjcmVlbkNvbnRyb2wsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBNYXBWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuXG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmblxuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkXG4gIH1cblxuICBwdWJsaWMgZml0Qm91bmRzKGJvdW5kczogZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzIHwgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzTGl0ZXJhbCwgcGFkZGluZz86IG51bWJlciB8IGdvb2dsZS5tYXBzLlBhZGRpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9nb29nbGVNYXBzLmZpdEJvdW5kcyhib3VuZHMsIHBhZGRpbmcpXG4gIH1cblxuICBwdWJsaWMgZ2V0R2VvSnNvbigpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXBzLmdldEdlb0pzb24oKVxuICB9XG5cbiAgcHVibGljIGhhc0ZvY3VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb2N1c09yaWdpbiAhPT0gbnVsbCAmJiB0aGlzLl9mb2N1c09yaWdpbiAhPT0gdW5kZWZpbmVkXG4gIH1cblxuICAvKiogRm9jdXNlcyB0aGUgYnV0dG9uLiAqL1xuICBwdWJsaWMgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5mb2N1cygpXG4gIH1cblxuICBwcml2YXRlIF9nZXRIb3N0RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gIH1cblxuICBfb25NYXBSZWFkeSh0aGVNYXA6IGdvb2dsZS5tYXBzLk1hcCkge1xuICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0TWFwKHRoZU1hcClcbiAgICB0aGlzLl9nb29nbGVNYXBzLnNldERhdGEodGhpcy5fbWFwVmFsdWVNYW5hZ2VyLnZhbHVlKVxuICAgIC8vIE5PVEU6IEFnbU1hcCBoYXMgYSByYWNlIGNvbmRpdGlvbiBwcm9ibGVtIHRoYXQgY2F1c2VzIHRoZSBpbnB1dCBsYXRpdHVkZSxcbiAgICAvLyBsb25naXR1ZGUsIGFuZCB6b29tIHRvIGdldCBpZ25vcmVkLCBiZWZvcmUgZ29vZ2xlbWFwcyBlbWl0c1xuICAgIC8vICdjZW50ZXJfY2hhbmdlZCcuIFRoaXMgc2hvdWxkIGF2b2lkIHRoZSBpc3N1ZSwgdW50aWwgd2Ugc3RvcCB1c2luZyBBZ21NYXBcbiAgICAvLyBvciB1cGdyYWRlIHRvIGEgbW9yZSByZWNlbnQgdmVyc2lvbiB0aGF0IG1heSBub3QgaGF2ZSB0aGUgaXNzdWUgYW55bW9yZS5cbiAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGUgc3dpdGNoIHRvICdAYW5ndWxhci9nb29nbGUtbWFwcycgZml4ZWQgdGhpcyBwcm9ibGVtLlxuICAgIHRoaXMuX2dvb2dsZU1hcHMucmVDZW50ZXJPbkZlYXR1cmVzKClcbiAgICB0aGlzLl9nb29nbGVNYXBzLmdvb2dsZU1hcD8uc2V0Wm9vbSh0aGlzLnpvb20pXG4gIH1cblxuICBfb25DbGlja0RlbGV0ZUZlYXR1cmUoKSB7XG4gICAgdGhpcy5fZ29vZ2xlTWFwcy5kZWxldGVTZWxlY3Rpb24oKVxuICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJfZ21BcGlMb2FkZWQgfCBhc3luY1wiPlxuICA8Z29vZ2xlLW1hcFxuICAgIGhlaWdodD1cIjEwMCVcIlxuICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgW2NlbnRlcl09XCJ7IGxhdDogbGF0aXR1ZGUsIGxuZzogbG9uZ2l0dWRlIH1cIlxuICAgIFt6b29tXT1cInpvb21cIlxuICAgIFtvcHRpb25zXT1cIl9vcHRpb25zXCJcbiAgICAobWFwSW5pdGlhbGl6ZWQpPVwiX29uTWFwUmVhZHkoJGFueSgkZXZlbnQpKVwiXG4gICAgPlxuICA8L2dvb2dsZS1tYXA+XG48L25nLWNvbnRhaW5lcj5cbjxzZWFtLW1lbnUgI2ZlYXR1cmVDb250ZXh0TWVudT5cbiAgPGJ1dHRvbiBzZWFtTWVudUl0ZW0gKGNsaWNrKT1cIl9vbkNsaWNrRGVsZXRlRmVhdHVyZSgpXCI+RGVsZXRlPC9idXR0b24+XG48L3NlYW0tbWVudT5cbjxzZWFtLW1hcC1maWxlLWRyb3AgKm5nSWY9XCJmaWxlRHJvcEVuYWJsZWRcIj48L3NlYW0tbWFwLWZpbGUtZHJvcD5cblxuPHNlYW0tbWFwLWNvbnRyb2wgKm5nSWY9XCJmaWxlVXBsb2FkQ29udHJvbEVuYWJsZWRcIiBbZGVmXT1cIl9maWxlVXBsb2FkQ29udHJvbERlZlwiPjwvc2VhbS1tYXAtY29udHJvbD5cbjxzZWFtLW1hcC1jb250cm9sICpuZ0lmPVwicmVDZW50ZXJDb250cm9sRW5hYmxlZFwiIFtkZWZdPVwiX3JlQ2VudGVyQ29udHJvbERlZlwiPjwvc2VhbS1tYXAtY29udHJvbD5cbiJdfQ==
|
|
322
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9nb29nbGUtbWFwcy9nb29nbGUtbWFwcy9nb29nbGUtbWFwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxvQkFBb0IsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlHLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDOUUsT0FBTyxFQUE4QixZQUFZLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQzlHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUd2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUMzRSxPQUFPLEVBQ0wsK0NBQStDLEdBQ2hELE1BQU0sc0ZBQXNGLENBQUE7QUFDN0YsT0FBTyxFQUNMLDZDQUE2QyxHQUM5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TixVQUFVO3FCQUNYLGFBQ1U7d0JBQ1Qsc0JBQXNCO3dCQUN0QixpQkFBaUI7d0JBQ2pCLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSx5QkFBeUIsRUFBRTt3QkFDdEU7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsZ0RBQWdEOzRCQUNoRCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwyQkFBMkIsQ0FBQzs0QkFDekQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0sWUFDckMsZ0JBQWdCOzBPQXFDdEIsS0FBSztzQkFEUixLQUFLO2dCQVNGLFFBQVE7c0JBRFgsS0FBSztnQkFVbUIsZUFBZTtzQkFBdkMsS0FBSztnQkFFbUIsd0JBQXdCO3NCQUFoRCxLQUFLO2dCQUNtQix3QkFBd0I7c0JBQWhELEtBQUs7Z0JBQ21CLHNCQUFzQjtzQkFBOUMsS0FBSztnQkFDbUIscUJBQXFCO3NCQUE3QyxLQUFLO2dCQUNtQix3QkFBd0I7c0JBQWhELEtBQUs7Z0JBRW1CLHlCQUF5QjtzQkFBakQsS0FBSztnQkFFbUIsY0FBYztzQkFBdEMsS0FBSztnQkFHRixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBTUYsYUFBYTtzQkFEaEIsV0FBVzt1QkFBQyxlQUFlO2dCQUl4QixhQUFhO3NCQURoQixXQUFXO3VCQUFDLGVBQWU7Z0JBTUosSUFBSTtzQkFBM0IsS0FBSztnQkFDa0IsU0FBUztzQkFBaEMsS0FBSztnQkFDa0IsUUFBUTtzQkFBL0IsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUV3RSxrQkFBa0I7c0JBQWhHLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IsIEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgZmFDcm9zc2hhaXJzLCBmYUZpbGVJbXBvcnQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnXG5pbXBvcnQgeyBDYW5EaXNhYmxlLCBDYW5EaXNhYmxlQ3RvciwgSW5wdXRCb29sZWFuLCBJbnB1dE51bWJlciwgbWl4aW5EaXNhYmxlZCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9jb3JlJ1xuaW1wb3J0IHsgTWVudUNvbXBvbmVudCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9tZW51J1xuXG5pbXBvcnQgeyBUaGVTZWFtR29vZ2xlTWFwc0FwaUxvYWRlciB9IGZyb20gJy4uL2dvb2dsZS1tYXBzLWFwaS1sb2FkZXIvZ29vZ2xlLW1hcHMtYXBpLWxvYWRlcidcbmltcG9ydCB7IEdvb2dsZU1hcHNDb250cm9sc1NlcnZpY2UgfSBmcm9tICcuLi9nb29nbGUtbWFwcy1jb250cm9scy5zZXJ2aWNlJ1xuaW1wb3J0IHtcbiAgVGhlU2VhbUdvb2dsZU1hcHNSZWNlbnRlckJ1dHRvbkNvbnRyb2xDb21wb25lbnQsXG59IGZyb20gJy4uL2dvb2dsZS1tYXBzLXJlY2VudGVyLWJ1dHRvbi1jb250cm9sL2dvb2dsZS1tYXBzLXJlY2VudGVyLWJ1dHRvbi1jb250cm9sLmNvbXBvbmVudCdcbmltcG9ydCB7XG4gIFRoZVNlYW1Hb29nbGVNYXBzVXBsb2FkQnV0dG9uQ29udHJvbENvbXBvbmVudCxcbn0gZnJvbSAnLi4vZ29vZ2xlLW1hcHMtdXBsb2FkLWJ1dHRvbi1jb250cm9sL2dvb2dsZS1tYXBzLXVwbG9hZC1idXR0b24tY29udHJvbC5jb21wb25lbnQnXG5pbXBvcnQgeyBHb29nbGVNYXBzU2VydmljZSB9IGZyb20gJy4uL2dvb2dsZS1tYXBzLnNlcnZpY2UnXG5pbXBvcnQgeyBNYXBDb250cm9sLCBNQVBfQ09OVFJPTFNfU0VSVklDRSB9IGZyb20gJy4uL21hcC1jb250cm9scy1zZXJ2aWNlJ1xuaW1wb3J0IHsgTWFwVmFsdWUsIE1hcFZhbHVlTWFuYWdlclNlcnZpY2UsIE1hcFZhbHVlU291cmNlIH0gZnJvbSAnLi4vbWFwLXZhbHVlLW1hbmFnZXIuc2VydmljZSdcblxuaW50ZXJmYWNlIFRoZVNlYW1NYXBDb250ZXh0TWVudUl0ZW0ge1xuICBsYWJlbDogc3RyaW5nXG4gIGFjdGlvbjogKGl0ZW06IFRoZVNlYW1NYXBDb250ZXh0TWVudUl0ZW0pID0+IHZvaWRcbn1cblxuY2xhc3MgVGhlU2VhbUdvb2dsZU1hcHNDb21wb25lbnRCYXNlIHtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbn1cblxuY29uc3QgX1RoZVNlYW1Hb29nbGVNYXBzTWl4aW5CYXNlOiBDYW5EaXNhYmxlQ3RvciAmXG4gIHR5cGVvZiBUaGVTZWFtR29vZ2xlTWFwc0NvbXBvbmVudEJhc2UgPVxuICAgIG1peGluRGlzYWJsZWQoVGhlU2VhbUdvb2dsZU1hcHNDb21wb25lbnRCYXNlKVxuXG4vKipcbiAqIEEgd3JhcHBlciBmb3IgZ29vZ2xlbWFwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLWdvb2dsZS1tYXBzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dvb2dsZS1tYXBzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ29vZ2xlLW1hcHMuY29tcG9uZW50LnNjc3MnXSxcbiAgaW5wdXRzOiBbXG4gICAgJ2Rpc2FibGVkJyxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgTWFwVmFsdWVNYW5hZ2VyU2VydmljZSxcbiAgICBHb29nbGVNYXBzU2VydmljZSxcbiAgICB7IHByb3ZpZGU6IE1BUF9DT05UUk9MU19TRVJWSUNFLCB1c2VDbGFzczogR29vZ2xlTWFwc0NvbnRyb2xzU2VydmljZSB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaGVTZWFtR29vZ2xlTWFwc0NvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZXhwb3J0QXM6ICdzZWFtR29vZ2xlTWFwcycsXG59KVxuZXhwb3J0IGNsYXNzIFRoZVNlYW1Hb29nbGVNYXBzQ29tcG9uZW50IGV4dGVuZHMgX1RoZVNlYW1Hb29nbGVNYXBzTWl4aW5CYXNlXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQ2FuRGlzYWJsZSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV96b29tOiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbG9uZ2l0dWRlOiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbGF0aXR1ZGU6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9maWxlRHJvcEVuYWJsZWQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZmlsZVVwbG9hZENvbnRyb2xFbmFibGVkOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Z1bGxzY3JlZW5Db250cm9sRW5hYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZUNlbnRlckNvbnRyb2xFbmFibGVkOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX21hcFR5cGVDb250cm9sRW5hYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zdHJlZXRWaWV3Q29udHJvbEVuYWJsZWQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfYWxsb3dEcmF3aW5nSG9sZUluUG9seWdvbjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9lZGl0aW5nRW5hYmxlZDogQm9vbGVhbklucHV0XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICByZWFkb25seSBfZ21BcGlMb2FkZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj5cblxuICByZWFkb25seSBfZmlsZVVwbG9hZENvbnRyb2xEZWY6IE1hcENvbnRyb2wgPSB7XG4gICAgY29tcG9uZW50OiBUaGVTZWFtR29vZ2xlTWFwc1VwbG9hZEJ1dHRvbkNvbnRyb2xDb21wb25lbnQsXG4gICAgZGF0YTogeyBsYWJlbDogJ0ltcG9ydCBHZW8gRmlsZScsIGljb246IGZhRmlsZUltcG9ydCB9LFxuICAgIHBvc2l0aW9uOiA2IC8qIGdvb2dsZS5tYXBzLkNvbnRyb2xQb3NpdGlvbi5MRUZUX0JPVFRPTSAqLyxcbiAgfVxuXG4gIHJlYWRvbmx5IF9yZUNlbnRlckNvbnRyb2xEZWY6IE1hcENvbnRyb2wgPSB7XG4gICAgY29tcG9uZW50OiBUaGVTZWFtR29vZ2xlTWFwc1JlY2VudGVyQnV0dG9uQ29udHJvbENvbXBvbmVudCxcbiAgICBkYXRhOiB7IGxhYmVsOiAnQ2VudGVyIG9uIEZpZWxkJywgaWNvbjogZmFDcm9zc2hhaXJzIH0sXG4gICAgcG9zaXRpb246IDkgLyogZ29vZ2xlLm1hcHMuQ29udHJvbFBvc2l0aW9uLlJJR0hUX0JPVFRPTSAqLyxcbiAgfVxuXG4gIHByaXZhdGUgX2ZvY3VzT3JpZ2luOiBGb2N1c09yaWdpbiA9IG51bGxcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IE1hcFZhbHVlKSB7XG4gICAgdGhpcy5fbWFwVmFsdWVNYW5hZ2VyLnNldFZhbHVlKHZhbHVlLCBNYXBWYWx1ZVNvdXJjZS5JbnB1dClcbiAgfVxuICBnZXQgdmFsdWUoKTogTWFwVmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9tYXBWYWx1ZU1hbmFnZXIudmFsdWVcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7IHRoaXMuX3RhYkluZGV4ID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpIH1cbiAgZ2V0IHRhYkluZGV4KCk6IG51bWJlciB7IHJldHVybiB0aGlzLl90YWJJbmRleCB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIHRhYiBpbmRleCB0byBgLTFgIHRvIGFsbG93IHRoZSByb290IGVsZW1lbnQgb2YgdGhlXG4gICAqIGNvbXBvbmVudCB0byByZWNlaXZlIGBmb2N1c2AgZXZlbnQgZnJvbSBqYXZhc2NyaXB0LCBidXQgbm90IGdldCBmb2N1c2VkIGJ5XG4gICAqIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gICAqL1xuICBwcml2YXRlIF90YWJJbmRleCA9IC0xXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGZpbGVEcm9wRW5hYmxlZCA9IHRydWVcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZmlsZVVwbG9hZENvbnRyb2xFbmFibGVkID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGZ1bGxzY3JlZW5Db250cm9sRW5hYmxlZCA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHJlQ2VudGVyQ29udHJvbEVuYWJsZWQgPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBtYXBUeXBlQ29udHJvbEVuYWJsZWQgPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzdHJlZXRWaWV3Q29udHJvbEVuYWJsZWQgPSBmYWxzZVxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBhbGxvd0RyYXdpbmdIb2xlSW5Qb2x5Z29uID0gZmFsc2VcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZWRpdGluZ0VuYWJsZWQgPSB0cnVlXG5cbiAgQElucHV0KClcbiAgc2V0IGZpbGVJbXBvcnRIYW5kbGVyKHZhbHVlOiAoKGZpbGU6IEZpbGUpID0+IHZvaWQpIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0RmlsZUlucHV0SGFuZGxlcih2YWx1ZSlcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXNhYmxlZCcpXG4gIGdldCBfYXR0ckRpc2FibGVkKCkgeyByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCBudWxsIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBnZXQgX2F0dHJUYWJJbmRleCgpIHsgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6ICh0aGlzLnRhYkluZGV4IHx8IDApIH1cblxuICBvbkNoYW5nZTogYW55XG4gIG9uVG91Y2hlZDogYW55XG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgem9vbSA9IDE0XG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIGxvbmdpdHVkZSA9IC05OC41NzAyMDlcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgbGF0aXR1ZGUgPSAzNy42MzM4MTRcblxuICBAT3V0cHV0KCkgbWFwUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KClcblxuICBAVmlld0NoaWxkKCdmZWF0dXJlQ29udGV4dE1lbnUnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogTWVudUNvbXBvbmVudCB9KSBwdWJsaWMgZmVhdHVyZUNvbnRleHRNZW51ITogTWVudUNvbXBvbmVudFxuXG4gIF9vcHRpb25zID0ge1xuICAgIG1hcFR5cGVDb250cm9sOiB0cnVlLFxuICAgIG1hcFR5cGVJZDogJ2h5YnJpZCcsXG4gICAgc3RyZWV0Vmlld0NvbnRyb2w6IGZhbHNlLFxuICAgIGZ1bGxzY3JlZW5Db250cm9sOiB0aGlzLmZ1bGxzY3JlZW5Db250cm9sRW5hYmxlZCxcbiAgfVxuXG4gIHJlYWRvbmx5IF9jb250ZXh0TWVudUl0ZW1zJDogT2JzZXJ2YWJsZTxUaGVTZWFtTWFwQ29udGV4dE1lbnVJdGVtW10+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9nb29nbGVNYXBzOiBHb29nbGVNYXBzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tYXBWYWx1ZU1hbmFnZXI6IE1hcFZhbHVlTWFuYWdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZ29vZ2xlTWFwc0FwaUxvYWRlcjogVGhlU2VhbUdvb2dsZU1hcHNBcGlMb2FkZXIsXG4gICkge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYpXG5cbiAgICB0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCB0cnVlKS5waXBlKFxuICAgICAgdGFwKG9yaWdpbiA9PiB7IHRoaXMuX2ZvY3VzT3JpZ2luID0gb3JpZ2luIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpLFxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIHRoaXMuX21hcFZhbHVlTWFuYWdlci52YWx1ZUNoYW5nZWQucGlwZShcbiAgICAgIHRhcChjaGFuZ2UgPT4ge1xuICAgICAgICBpZiAodGhpcy5vbkNoYW5nZSkgeyB0aGlzLm9uQ2hhbmdlKGNoYW5nZS52YWx1ZSkgfVxuICAgICAgICBpZiAodGhpcy5vblRvdWNoZWQpIHsgdGhpcy5vblRvdWNoZWQoKSB9XG4gICAgICB9KSxcbiAgICAgIHRhcChjaGFuZ2VkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2dvb2dsZU1hcHMubWFwUmVhZHkgJiYgY2hhbmdlZC5zb3VyY2UgIT09IE1hcFZhbHVlU291cmNlLkZlYXR1cmVDaGFuZ2UpIHtcbiAgICAgICAgICB0aGlzLl9nb29nbGVNYXBzLnNldERhdGEoY2hhbmdlZC52YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSksXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgdGhpcy5fY29udGV4dE1lbnVJdGVtcyQgPSB0aGlzLl9nb29nbGVNYXBzLmVkaXRpbmdFbmFibGVkJC5waXBlKFxuICAgICAgbWFwKGVuYWJsZWQgPT4ge1xuICAgICAgICBjb25zdCBpdGVtczogVGhlU2VhbU1hcENvbnRleHRNZW51SXRlbVtdID0gW11cbiAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKHsgbGFiZWw6ICdEZWxldGUnLCBhY3Rpb246ICgpID0+IHRoaXMuX29uQ2xpY2tEZWxldGVGZWF0dXJlKCkgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXNcbiAgICAgIH0pLFxuICAgICAgdGFwKGl0ZW1zID0+IHtcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0RmVhdHVyZUNvbnRleHRNZW51KG51bGwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXRGZWF0dXJlQ29udGV4dE1lbnUodGhpcy5mZWF0dXJlQ29udGV4dE1lbnUpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKVxuXG4gICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXRCYXNlTGF0TG5nKHRoaXMubGF0aXR1ZGUsIHRoaXMubG9uZ2l0dWRlKVxuXG4gICAgdGhpcy5fZ21BcGlMb2FkZWQgPSB0aGlzLl9nb29nbGVNYXBzQXBpTG9hZGVyLmxvYWQoKS5waXBlKFxuICAgICAgbWFwKCgpID0+IHRydWUpLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihmYWxzZSkpLFxuICAgIClcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pih3aW5kb3csICdrZXlkb3duJykucGlwZShcbiAgICAgIHRhcCgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XG4gICAgICAgICAgY2FzZSAnRGVsZXRlJzpcbiAgICAgICAgICAgIGlmICh0aGlzLl9nb29nbGVNYXBzLmlzRWRpdGluZ0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICB0aGlzLl9nb29nbGVNYXBzLmRlbGV0ZVNlbGVjdGlvbigpXG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnRXNjYXBlJzogdGhpcy5fZ29vZ2xlTWFwcy5zdG9wRHJhd2luZygpOyBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYnJlYWtcbiAgICAgICAgICBjYXNlICdDb250ZXh0TWVudSc6IHRoaXMuX2dvb2dsZU1hcHMub3BlbkNvbnRleHRNZW51KCk7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBicmVha1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKSxcbiAgICApLnN1YnNjcmliZSgpXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZilcblxuICAgIHRoaXMuX25nVW5zdWJzY3JpYmUubmV4dCgpXG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpXG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgbGV0IHVwZGF0ZUJhc2UgPSBmYWxzZVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2xhdGl0dWRlJykpIHtcbiAgICAgIHRoaXMubGF0aXR1ZGUgPSBjaGFuZ2VzLmxhdGl0dWRlLmN1cnJlbnRWYWx1ZVxuICAgICAgdXBkYXRlQmFzZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnbG9uZ2l0dWRlJykpIHtcbiAgICAgIHRoaXMubG9uZ2l0dWRlID0gY2hhbmdlcy5sb25naXR1ZGUuY3VycmVudFZhbHVlXG4gICAgICB1cGRhdGVCYXNlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodXBkYXRlQmFzZSkge1xuICAgICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXRCYXNlTGF0TG5nKHRoaXMubGF0aXR1ZGUsIHRoaXMubG9uZ2l0dWRlKVxuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2FsbG93RHJhd2luZ0hvbGVJblBvbHlnb24nKSkge1xuICAgICAgdGhpcy5fZ29vZ2xlTWFwcy5hbGxvd0RyYXdpbmdIb2xlSW5Qb2x5Z29uKHRoaXMuYWxsb3dEcmF3aW5nSG9sZUluUG9seWdvbilcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdmdWxsc2NyZWVuQ29udHJvbEVuYWJsZWQnKSkge1xuICAgICAgY29uc3QgZnVsbHNjcmVlbkNvbnRyb2wgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkoY2hhbmdlcy5mdWxsc2NyZWVuQ29udHJvbEVuYWJsZWQuY3VycmVudFZhbHVlKVxuICAgICAgaWYgKGZ1bGxzY3JlZW5Db250cm9sICE9PSB0aGlzLl9vcHRpb25zLmZ1bGxzY3JlZW5Db250cm9sKSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSB7XG4gICAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgICBmdWxsc2NyZWVuQ29udHJvbCxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2VkaXRpbmdFbmFibGVkJykpIHtcbiAgICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0RWRpdGluZ0VuYWJsZWQodGhpcy5lZGl0aW5nRW5hYmxlZClcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBNYXBWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuXG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmblxuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkXG4gIH1cblxuICBwdWJsaWMgZml0Qm91bmRzKGJvdW5kczogZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzIHwgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzTGl0ZXJhbCwgcGFkZGluZz86IG51bWJlciB8IGdvb2dsZS5tYXBzLlBhZGRpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9nb29nbGVNYXBzLmZpdEJvdW5kcyhib3VuZHMsIHBhZGRpbmcpXG4gIH1cblxuICBwdWJsaWMgZ2V0R2VvSnNvbigpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXBzLmdldEdlb0pzb24oKVxuICB9XG5cbiAgcHVibGljIGhhc0ZvY3VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb2N1c09yaWdpbiAhPT0gbnVsbCAmJiB0aGlzLl9mb2N1c09yaWdpbiAhPT0gdW5kZWZpbmVkXG4gIH1cblxuICAvKiogRm9jdXNlcyB0aGUgYnV0dG9uLiAqL1xuICBwdWJsaWMgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5mb2N1cygpXG4gIH1cblxuICBwcml2YXRlIF9nZXRIb3N0RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gIH1cblxuICBfb25NYXBSZWFkeSh0aGVNYXA6IGdvb2dsZS5tYXBzLk1hcCkge1xuICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0TWFwKHRoZU1hcClcbiAgICB0aGlzLl9nb29nbGVNYXBzLnNldERhdGEodGhpcy5fbWFwVmFsdWVNYW5hZ2VyLnZhbHVlKVxuICAgIC8vIE5PVEU6IEFnbU1hcCBoYXMgYSByYWNlIGNvbmRpdGlvbiBwcm9ibGVtIHRoYXQgY2F1c2VzIHRoZSBpbnB1dCBsYXRpdHVkZSxcbiAgICAvLyBsb25naXR1ZGUsIGFuZCB6b29tIHRvIGdldCBpZ25vcmVkLCBiZWZvcmUgZ29vZ2xlbWFwcyBlbWl0c1xuICAgIC8vICdjZW50ZXJfY2hhbmdlZCcuIFRoaXMgc2hvdWxkIGF2b2lkIHRoZSBpc3N1ZSwgdW50aWwgd2Ugc3RvcCB1c2luZyBBZ21NYXBcbiAgICAvLyBvciB1cGdyYWRlIHRvIGEgbW9yZSByZWNlbnQgdmVyc2lvbiB0aGF0IG1heSBub3QgaGF2ZSB0aGUgaXNzdWUgYW55bW9yZS5cbiAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGUgc3dpdGNoIHRvICdAYW5ndWxhci9nb29nbGUtbWFwcycgZml4ZWQgdGhpcyBwcm9ibGVtLlxuICAgIHRoaXMuX2dvb2dsZU1hcHMucmVDZW50ZXJPbkZlYXR1cmVzKClcbiAgICB0aGlzLl9nb29nbGVNYXBzLmdvb2dsZU1hcD8uc2V0Wm9vbSh0aGlzLnpvb20pXG4gIH1cblxuICBfb25DbGlja0RlbGV0ZUZlYXR1cmUoKSB7XG4gICAgdGhpcy5fZ29vZ2xlTWFwcy5kZWxldGVTZWxlY3Rpb24oKVxuICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJfZ21BcGlMb2FkZWQgfCBhc3luY1wiPlxuICA8Z29vZ2xlLW1hcFxuICAgIGhlaWdodD1cIjEwMCVcIlxuICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgW2NlbnRlcl09XCJ7IGxhdDogbGF0aXR1ZGUsIGxuZzogbG9uZ2l0dWRlIH1cIlxuICAgIFt6b29tXT1cInpvb21cIlxuICAgIFtvcHRpb25zXT1cIl9vcHRpb25zXCJcbiAgICAobWFwSW5pdGlhbGl6ZWQpPVwiX29uTWFwUmVhZHkoJGFueSgkZXZlbnQpKVwiXG4gICAgPlxuICA8L2dvb2dsZS1tYXA+XG48L25nLWNvbnRhaW5lcj5cbjxzZWFtLW1lbnUgI2ZlYXR1cmVDb250ZXh0TWVudT5cbiAgPGJ1dHRvbiBzZWFtTWVudUl0ZW0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgX2NvbnRleHRNZW51SXRlbXMkIHwgYXN5bmNcIiAoY2xpY2spPVwiaXRlbS5hY3Rpb24oaXRlbSlcIj57eyBpdGVtLmxhYmVsIH19PC9idXR0b24+XG48L3NlYW0tbWVudT5cbjxzZWFtLW1hcC1maWxlLWRyb3AgKm5nSWY9XCJmaWxlRHJvcEVuYWJsZWRcIj48L3NlYW0tbWFwLWZpbGUtZHJvcD5cblxuPHNlYW0tbWFwLWNvbnRyb2wgKm5nSWY9XCJmaWxlVXBsb2FkQ29udHJvbEVuYWJsZWRcIiBbZGVmXT1cIl9maWxlVXBsb2FkQ29udHJvbERlZlwiPjwvc2VhbS1tYXAtY29udHJvbD5cbjxzZWFtLW1hcC1jb250cm9sICpuZ0lmPVwicmVDZW50ZXJDb250cm9sRW5hYmxlZFwiIFtkZWZdPVwiX3JlQ2VudGVyQ29udHJvbERlZlwiPjwvc2VhbS1tYXAtY29udHJvbD5cbiJdfQ==
|
|
@@ -18,6 +18,18 @@ export function isFeatureSelected(feature) {
|
|
|
18
18
|
export function setFeatureSelected(feature, isSelected) {
|
|
19
19
|
feature.setProperty(AppFeaturePropertyName.IsSelected, isSelected);
|
|
20
20
|
}
|
|
21
|
+
const EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_PROPERTY_NAME = 'styleOptions';
|
|
22
|
+
const EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_HOVERED_PROPERTY_NAME = 'styleOptionsHovered';
|
|
23
|
+
const EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_SELECTED_PROPERTY_NAME = 'styleOptionsSelected';
|
|
24
|
+
export function getStyleOptionsDefinedByFeature(feature) {
|
|
25
|
+
return feature.getProperty(EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_PROPERTY_NAME) || undefined;
|
|
26
|
+
}
|
|
27
|
+
export function getHoveredStyleOptionsDefinedByFeature(feature) {
|
|
28
|
+
return feature.getProperty(EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_HOVERED_PROPERTY_NAME) || undefined;
|
|
29
|
+
}
|
|
30
|
+
export function getSelectedStyleOptionsDefinedByFeature(feature) {
|
|
31
|
+
return feature.getProperty(EXTERNAL_FEATURE_DEFINED_STYLE_OPTIONS_SELECTED_PROPERTY_NAME) || undefined;
|
|
32
|
+
}
|
|
21
33
|
// TODO: Check performance of cloning a google.maps.Data instance, so the
|
|
22
34
|
// properties can be removed with the google maps api, instead of on the
|
|
23
35
|
// resulting json.
|
|
@@ -208,4 +220,4 @@ export function createFeatureChangeObservable(data, ngZone) {
|
|
|
208
220
|
};
|
|
209
221
|
});
|
|
210
222
|
}
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMtZmVhdHVyZS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzLWZlYXR1cmUtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRWpDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQzdELE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sRUFDTCxZQUFZLElBQUksa0JBQWtCLEVBQ2xDLE9BQU8sSUFBSSxhQUFhLEdBQ3pCLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE1BQU0sQ0FBTixJQUFZLHNCQUVYO0FBRkQsV0FBWSxzQkFBc0I7SUFDaEMsMERBQWdDLENBQUE7QUFDbEMsQ0FBQyxFQUZXLHNCQUFzQixLQUF0QixzQkFBc0IsUUFFakM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsWUFBb0I7SUFDdkQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDO1NBQ3pDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUN0RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE9BQWlDO0lBQ2pFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDekUsT0FBTyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtBQUMxQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQWlDLEVBQUUsVUFBbUI7SUFDdkYsT0FBTyxDQUFDLFdBQVcs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QUFBO2lCQUNqRDtZQUNILENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sR0FBRyxFQUFFO1lBQ1YsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNyRCxDQUFDLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nXG5pbXBvcnQgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnXG5cbmltcG9ydCB7IG5vdE51bGxPclVuZGVmaW5lZCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi91dGlscydcbmltcG9ydCBib29sZWFuQ29udGFpbnMgZnJvbSAnQHR1cmYvYm9vbGVhbi1jb250YWlucydcbmltcG9ydCB7XG4gIG11bHRpUG9seWdvbiBhcyB0dXJmanNNdWx0aVBvbHlnb24sXG4gIHBvbHlnb24gYXMgdHVyZmpzUG9seWdvbixcbn0gZnJvbSAnQHR1cmYvaGVscGVycydcblxuZXhwb3J0IGVudW0gQXBwRmVhdHVyZVByb3BlcnR5TmFtZSB7XG4gIElzU2VsZWN0ZWQgPSBgX19hcHBfX2lzU2VsZWN0ZWRgXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FwcEZlYXR1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHByb3BlcnR5TmFtZSBpcyBBcHBGZWF0dXJlUHJvcGVydHlOYW1lIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoQXBwRmVhdHVyZVByb3BlcnR5TmFtZSlcbiAgICAuZmluZEluZGV4KHZhbHVlID0+IHZhbHVlID09PSBwcm9wZXJ0eU5hbWUpICE9PSAtMVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGZWF0dXJlU2VsZWN0ZWQoZmVhdHVyZTogZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlKTogYm9vbGVhbiB7XG4gIGNvbnN0IGlzU2VsZWN0ZWQgPSBmZWF0dXJlLmdldFByb3BlcnR5KEFwcEZlYXR1cmVQcm9wZXJ0eU5hbWUuSXNTZWxlY3RlZClcbiAgcmV0dXJuIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShpc1NlbGVjdGVkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZVNlbGVjdGVkKGZlYXR1cmU6IGdvb2dsZS5tYXBzLkRhdGEuRmVhdHVyZSwgaXNTZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICBmZWF0dXJlLnNldFByb3BlcnR5KEFwcEZlYXR1cmVQcm9wZXJ0eU5hbWUuSXNTZWxlY3RlZCwgaXNTZWxlY3RlZClcbn1cblxuLy8gVE9ETzogQ2hlY2sgcGVyZm9ybWFuY2Ugb2YgY2xvbmluZyBhIGdvb2dsZS5tYXBzLkRhdGEgaW5zdGFuY2UsIHNvIHRoZVxuLy8gcHJvcGVydGllcyBjYW4gYmUgcmVtb3ZlZCB3aXRoIHRoZSBnb29nbGUgbWFwcyBhcGksIGluc3RlYWQgb2Ygb24gdGhlXG4vLyByZXN1bHRpbmcganNvbi5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEFwcEZlYXR1cmVQcm9wZXJ0aWVzRnJvbUpzb24oanNvbjogYW55KSB7XG4gIGlmIChub3ROdWxsT3JVbmRlZmluZWQoanNvbikgJiYgQXJyYXkuaXNBcnJheShqc29uPy5mZWF0dXJlcykpIHtcbiAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YganNvbi5mZWF0dXJlcykge1xuICAgICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZChmZWF0dXJlPy5wcm9wZXJ0aWVzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoZmVhdHVyZS5wcm9wZXJ0aWVzKSkge1xuICAgICAgICAgIGlmIChpc0FwcEZlYXR1cmVQcm9wZXJ0eShrKSkge1xuICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2tdID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBkZWxldGUgZmVhdHVyZS5wcm9wZXJ0aWVzW2tdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2VhcmNoZXMgZm9yIGEgRmVhdHVyZSBpbiBEYXRhIHRoYXQgY29udGFpbnMgdGhlIHByb3ZpZGVkIEZlYXR1cmUgYW5kIGNhbiB1c2VcbiAqIGl0IGFzIGEgY3V0b3V0IGFyZWEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3NzaWJsZUV4dGVyaW9yRmVhdHVyZShcbiAgZGF0YTogZ29vZ2xlLm1hcHMuRGF0YSxcbiAgZmVhdHVyZTogZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlXG4pOiBnb29nbGUubWFwcy5EYXRhLkZlYXR1cmUgfCB1bmRlZmluZWQge1xuICBsZXQgZXh0ZXJpb3JQb2x5Z29uRmVhdHVyZTogZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlIHwgdW5kZWZpbmVkXG4gIGRhdGEuZm9yRWFjaChmID0+IHtcbiAgICBpZiAoZiA9PT0gZmVhdHVyZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZ2VvbWV0cnkgPSBmLmdldEdlb21ldHJ5KClcbiAgICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKGBHZW9tZXRyeSBub3QgZm91bmQuYClcbiAgICB9XG4gICAgaWYgKGdlb21ldHJ5LmdldFR5cGUoKSA9PT0gJ1BvbHlnb24nICYmIGZlYXR1cmVDb250YWlucyhmLCBmZWF0dXJlKSkge1xuICAgICAgZXh0ZXJpb3JQb2x5Z29uRmVhdHVyZSA9IGZcbiAgICB9XG4gIH0pXG4gIHJldHVybiBleHRlcmlvclBvbHlnb25GZWF0dXJlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRJbm5lckZlYXR1cmVDdXRvdXRUb0V4dGVyaW9yRmVhdHVyZShcbiAgZXh0ZXJpb3JGZWF0dXJlOiBnb29nbGUubWFwcy5EYXRhLkZlYXR1cmUsXG4gIGlubmVyRmVhdHVyZTogZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlXG4pOiB2b2lkIHtcbiAgY29uc3QgZXh0ZXJpb3JHZW9tZXRyeSA9IGV4dGVyaW9yRmVhdHVyZS5nZXRHZW9tZXRyeSgpXG4gIGlmIChleHRlcmlvckdlb21ldHJ5ID09PSBudWxsKSB7XG4gICAgdGhyb3cgRXJyb3IoYEdlb21ldHJ5IG5vdCBmb3VuZC5gKVxuICB9XG4gIGNvbnN0IGlubmVyR2VvbWV0cnkgPSBpbm5lckZlYXR1cmUuZ2V0R2VvbWV0cnkoKVxuICBpZiAoaW5uZXJHZW9tZXRyeSA9PT0gbnVsbCkge1xuICAgIHRocm93IEVycm9yKGBHZW9tZXRyeSBub3QgZm91bmQuYClcbiAgfVxuICAvLyBOT1RFOiBPdGhlciBnZW9tZXRyaWVzIG1heSBzdXBwb3J0IGN1dG91dHMsIGJ1dCBvdXIgbWFwIHNoYXBlcyBlZGl0b3Igb25seVxuICAvLyBzdXBwb3J0cyBwb2x5Z29ucyBjdXJyZW50bHksIHNvIHdlIHdpbGwgbmVlZCB0byBoYW5kbGUgb3RoZXIgZ2VvbWV0cnkgdHlwZXNcbiAgLy8gaGVyZSBpZiB3ZSBzdGFydCBhbGxvd2luZyB1c2VycyB0byBkcmF3IHNoYXBlcyBvdGhlciB0aGFuIHBvbHlnb24uXG4gIGlmIChleHRlcmlvckdlb21ldHJ5LmdldFR5cGUoKSAhPT0gJ1BvbHlnb24nIHx8IGlubmVyR2VvbWV0cnkuZ2V0VHlwZSgpICE9PSAnUG9seWdvbicpIHtcbiAgICB0aHJvdyBFcnJvcihgSW5uZXIgY3V0b3V0IGlzIG9ubHkgc3VwcG9ydGVkIGJ5IFBvbHlnb24gZ2Vtb2V0cnkuYClcbiAgfVxuXG4gIGNvbnN0IGZlYXR1cmVQb2x5Z29uID0gaW5uZXJHZW9tZXRyeSBhcyBnb29nbGUubWFwcy5EYXRhLlBvbHlnb25cbiAgY29uc3QgZXh0ZXJpb3JQb2x5Z29uID0gZXh0ZXJpb3JHZW9tZXRyeSBhcyBnb29nbGUubWFwcy5EYXRhLlBvbHlnb25cbiAgZXh0ZXJpb3JGZWF0dXJlLnNldEdlb21ldHJ5KG5ldyBnb29nbGUubWFwcy5EYXRhLlBvbHlnb24oW1xuICAgIC4uLmV4dGVyaW9yUG9seWdvbi5nZXRBcnJheSgpLFxuICAgIGZlYXR1cmVQb2x5Z29uLmdldEF0KDApLmdldEFycmF5KCkucmV2ZXJzZSgpXG4gIF0pKVxufVxuXG4vKipcbiAqIEdvb2dsZSBtYXBzIHBhdGhzIGRvbid0IGFsd2F5cyBzdGFydCBhbmQgc3RvcCBhdCB0aGUgZXhhY3Qgc2FtZSBwb3NpdGlvbiwgc29cbiAqIHRoaXMgd2lsbCBmaXggdGhhdCBmb3IgdHVyZmpzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZml4UGF0aERpZmZlcmVudFN0YXJ0aW5nQW5kRW5kaW5nUG9pbnQoY29vcmRpbmF0ZXM6IG51bWJlcltdW10pOiB2b2lkIHtcbiAgaWYgKGNvb3JkaW5hdGVzLmxlbmd0aCA8PSAxKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBzdGFydCA9IGNvb3JkaW5hdGVzWzBdXG4gIGNvbnN0IGVuZCA9IGNvb3JkaW5hdGVzW2Nvb3JkaW5hdGVzLmxlbmd0aCAtIDFdXG4gIGlmIChzdGFydFswXSA9PT0gZW5kWzBdICYmIHN0YXJ0WzFdID09PSBlbmRbMV0pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvb3JkaW5hdGVzLnB1c2goY29vcmRpbmF0ZXNbMF0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2x5Z29uSGFzVmFsaWRQYXRoc0xlbmd0aHMocG9seWdvbjogZ29vZ2xlLm1hcHMuUG9seWdvbiwgbWluUG9pbnRzSW5WYWxpZFBhdGg6IG51bWJlciA9IDMpOiBib29sZWFuIHtcbiAgY29uc3QgcGF0aHMgPSBwb2x5Z29uLmdldFBhdGhzKCkuZ2V0QXJyYXkoKVxuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICBpZiAocGF0aC5nZXRMZW5ndGgoKSA8IG1pblBvaW50c0luVmFsaWRQYXRoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvbHlnb25Db29yZGluYXRlcyhwb2x5Z29uOiBnb29nbGUubWFwcy5EYXRhLlBvbHlnb24pOiBudW1iZXJbXVtdW10ge1xuICByZXR1cm4gcG9seWdvbi5nZXRBcnJheSgpLm1hcChsaW5SaW5nID0+IHtcbiAgICBjb25zdCBjb29yZHMgPSBsaW5SaW5nLmdldEFycmF5KCkubWFwKHggPT4gWyB4LmxuZygpLCB4LmxhdCgpIF0pXG4gICAgZml4UGF0aERpZmZlcmVudFN0YXJ0aW5nQW5kRW5kaW5nUG9pbnQoY29vcmRzKVxuICAgIHJldHVybiBjb29yZHNcbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpUG9seWdvbkNvb3JkaW5hdGVzKG11bHRpUG9seWdvbjogZ29vZ2xlLm1hcHMuRGF0YS5NdWx0aVBvbHlnb24pOiBudW1iZXJbXVtdW11bXSB7XG4gIHJldHVybiBtdWx0aVBvbHlnb24uZ2V0QXJyYXkoKS5tYXAoeCA9PiBwb2x5Z29uQ29vcmRpbmF0ZXMoeCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1R1cmZKc1BvbHlnb24ocG9seWdvbjogZ29vZ2xlLm1hcHMuRGF0YS5Qb2x5Z29uKSB7XG4gIHJldHVybiB0dXJmanNQb2x5Z29uKHBvbHlnb25Db29yZGluYXRlcyhwb2x5Z29uKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVHVyZkpzTXVsdGlQb2x5Z29uKG11bHRpUG9seWdvbjogZ29vZ2xlLm1hcHMuRGF0YS5NdWx0aVBvbHlnb24pIHtcbiAgcmV0dXJuIHR1cmZqc011bHRpUG9seWdvbihtdWx0aVBvbHlnb25Db29yZGluYXRlcyhtdWx0aVBvbHlnb24pKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9UdXJmSnNGZWF0dXJlKGdvb2dsZUZlYXR1cmU6IGdvb2dsZS5tYXBzLkRhdGEuRmVhdHVyZSkge1xuICBjb25zdCBnZW9tZXRyeSA9IGdvb2dsZUZlYXR1cmUuZ2V0R2VvbWV0cnkoKVxuICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIHtcbiAgICB0aHJvdyBFcnJvcihgR2VvbWV0cnkgbm90IGZvdW5kLmApXG4gIH1cbiAgaWYgKGdlb21ldHJ5LmdldFR5cGUoKSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgcmV0dXJuIHRvVHVyZkpzUG9seWdvbihnZW9tZXRyeSBhcyBnb29nbGUubWFwcy5EYXRhLlBvbHlnb24pXG4gIH0gZWxzZSBpZiAoZ2VvbWV0cnkuZ2V0VHlwZSgpID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgIHJldHVybiB0b1R1cmZKc011bHRpUG9seWdvbihnZW9tZXRyeSBhcyBnb29nbGUubWFwcy5EYXRhLk11bHRpUG9seWdvbilcbiAgfVxuXG4gIHRocm93IEVycm9yKGBVbmV4cGVjdGVkIGdlb21ldHJ5LmApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZWF0dXJlQ29udGFpbnMoZmVhdHVyZUE6IGdvb2dsZS5tYXBzLkRhdGEuRmVhdHVyZSwgZmVhdHVyZUI6IGdvb2dsZS5tYXBzLkRhdGEuRmVhdHVyZSk6IGJvb2xlYW4ge1xuICBjb25zdCBwb2x5Z29uQSA9IHRvVHVyZkpzRmVhdHVyZShmZWF0dXJlQSlcbiAgY29uc3QgcG9seWdvbkIgPSB0b1R1cmZKc0ZlYXR1cmUoZmVhdHVyZUIpXG4gIHJldHVybiBib29sZWFuQ29udGFpbnMocG9seWdvbkEsIHBvbHlnb25CKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGF0YUZlYXR1cmVGcm9tUG9seWdvbihwb2x5Z29uOiBnb29nbGUubWFwcy5Qb2x5Z29uKTogZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlIHtcbiAgY29uc3QgYXJyID0gcG9seWdvbi5nZXRQYXRocygpLmdldEFycmF5KCkubWFwKHggPT4geC5nZXRBcnJheSgpKVxuICByZXR1cm4gbmV3IGdvb2dsZS5tYXBzLkRhdGEuRmVhdHVyZSh7XG4gICAgZ2VvbWV0cnk6IG5ldyBnb29nbGUubWFwcy5EYXRhLlBvbHlnb24oYXJyKVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm91bmRzV2l0aEFsbEZlYXR1cmVzKGRhdGE6IGdvb2dsZS5tYXBzLkRhdGEpOiBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMge1xuICBjb25zdCBib3VuZHMgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKClcblxuICBkYXRhLmZvckVhY2goZmVhdHVyZSA9PiB7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBmZWF0dXJlLmdldEdlb21ldHJ5KClcbiAgICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKGBHZW9tZXRyeSBub3QgZm91bmQuYClcbiAgICB9XG4gICAgZ2VvbWV0cnkuZm9yRWFjaExhdExuZyhsYXRMbmcgPT4ge1xuICAgICAgYm91bmRzLmV4dGVuZChsYXRMbmcpXG4gICAgfSlcbiAgfSlcblxuICByZXR1cm4gYm91bmRzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGZWF0dXJlQm91bmRzKGZlYXR1cmU6IGdvb2dsZS5tYXBzLkRhdGEuRmVhdHVyZSk6IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcyB7XG4gIGNvbnN0IGJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKVxuXG4gIGNvbnN0IGdlb21ldHJ5ID0gZmVhdHVyZS5nZXRHZW9tZXRyeSgpXG4gIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkge1xuICAgIHRocm93IEVycm9yKGBHZW9tZXRyeSBub3QgZm91bmQuYClcbiAgfVxuICBnZW9tZXRyeS5mb3JFYWNoTGF0TG5nKGxhdExuZyA9PiB7XG4gICAgYm91bmRzLmV4dGVuZChsYXRMbmcpXG4gIH0pXG5cbiAgcmV0dXJuIGJvdW5kc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVhdHVyZUNlbnRlcihmZWF0dXJlOiBnb29nbGUubWFwcy5EYXRhLkZlYXR1cmUpOiBnb29nbGUubWFwcy5MYXRMbmcge1xuICByZXR1cm4gZ2V0RmVhdHVyZUJvdW5kcyhmZWF0dXJlKS5nZXRDZW50ZXIoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWxsRmVhdHVyZXMoZGF0YTogZ29vZ2xlLm1hcHMuRGF0YSk6IHZvaWQge1xuICBkYXRhLmZvckVhY2goZiA9PiBkYXRhLnJlbW92ZShmKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZlYXR1cmVzQ291bnQoZGF0YTogZ29vZ2xlLm1hcHMuRGF0YSk6IG51bWJlciB7XG4gIGxldCBjb3VudCA9IDBcbiAgZGF0YS5mb3JFYWNoKCgpID0+IGNvdW50KyspXG4gIHJldHVybiBjb3VudFxufVxuXG4vKipcbiAqIE5PVEU6IE9yaWdpbmFsIGV2ZW50cyBhcmUgbm90IGVtaXR0ZWQsIGJlY2F1c2UgZmlsdGVyaW5nIG1heSBvbWl0IGV2ZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZlYXR1cmVDaGFuZ2VPYnNlcnZhYmxlKGRhdGE6IGdvb2dsZS5tYXBzLkRhdGEsIG5nWm9uZTogTmdab25lKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZTx2b2lkPihzdWJzY3JpYmVyID0+IHtcbiAgICBjb25zdCBsaXN0ZW5lcnM6IGdvb2dsZS5tYXBzLk1hcHNFdmVudExpc3RlbmVyW10gPSBbXVxuXG4gICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGxpc3RlbmVycy5wdXNoKGRhdGEuYWRkTGlzdGVuZXIoJ3NldGdlb21ldHJ5JywgKGV2ZW50OiBnb29nbGUubWFwcy5EYXRhLlNldEdlb21ldHJ5RXZlbnQpID0+IHtcbiAgICAgICAgbmdab25lLnJ1bigoKSA9PiB7IHN1YnNjcmliZXIubmV4dCh1bmRlZmluZWQpIH0pXG4gICAgICB9KSlcblxuICAgICAgbGlzdGVuZXJzLnB1c2goZGF0YS5hZGRMaXN0ZW5lcignYWRkZmVhdHVyZScsIChldmVudDogZ29vZ2xlLm1hcHMuRGF0YS5BZGRGZWF0dXJlRXZlbnQpID0+IHtcbiAgICAgICAgbmdab25lLnJ1bigoKSA9PiB7IHN1YnNjcmliZXIubmV4dCh1bmRlZmluZWQpIH0pXG4gICAgICB9KSlcblxuICAgICAgbGlzdGVuZXJzLnB1c2goZGF0YS5hZGRMaXN0ZW5lcigncmVtb3ZlZmVhdHVyZScsIChldmVudDogZ29vZ2xlLm1hcHMuRGF0YS5SZW1vdmVGZWF0dXJlRXZlbnQpID0+IHtcbiAgICAgICAgbmdab25lLnJ1bigoKSA9PiB7IHN1YnNjcmliZXIubmV4dCh1bmRlZmluZWQpIH0pXG4gICAgICB9KSlcblxuICAgICAgbGlzdGVuZXJzLnB1c2goZGF0YS5hZGRMaXN0ZW5lcignc2V0cHJvcGVydHknLCAoZXZlbnQ6IGdvb2dsZS5tYXBzLkRhdGEuU2V0UHJvcGVydHlFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIWlzQXBwRmVhdHVyZVByb3BlcnR5KGV2ZW50Lm5hbWUpKSB7XG4gICAgICAgICAgbmdab25lLnJ1bigoKSA9PiB7IHN1YnNjcmliZXIubmV4dCh1bmRlZmluZWQpIH0pXG4gICAgICAgIH1cbiAgICAgIH0pKVxuXG4gICAgICBsaXN0ZW5lcnMucHVzaChkYXRhLmFkZExpc3RlbmVyKCdyZW1vdmVwcm9wZXJ0eScsIChldmVudDogZ29vZ2xlLm1hcHMuRGF0YS5SZW1vdmVQcm9wZXJ0eUV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghaXNBcHBGZWF0dXJlUHJvcGVydHkoZXZlbnQubmFtZSkpIHtcbiAgICAgICAgICBuZ1pvbmUucnVuKCgpID0+IHsgc3Vic2NyaWJlci5uZXh0KHVuZGVmaW5lZCkgfSlcbiAgICAgICAgfVxuICAgICAgfSkpXG4gICAgfSlcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaChnb29nbGUubWFwcy5ldmVudC5yZW1vdmVMaXN0ZW5lcilcbiAgICB9XG4gIH0pXG59XG4iXX0=
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMtZmVhdHVyZS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzLWZlYXR1cmUtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRWpDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQzdELE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sRUFDTCxZQUFZLElBQUksa0JBQWtCLEVBQ2xDLE9BQU8sSUFBSSxhQUFhLEdBQ3pCLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE1BQU0sQ0FBTixJQUFZLHNCQUVYO0FBRkQsV0FBWSxzQkFBc0I7SUFDaEMsMERBQWdDLENBQUE7QUFDbEMsQ0FBQyxFQUZXLHNCQUFzQixLQUF0QixzQkFBc0IsUUFFakM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsWUFBb0I7SUFDdkQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDO1NBQ3pDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUN0RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE9BQWlDO0lBQ2pFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDekUsT0FBTyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtBQUMxQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQWlDLEVBQUUsVUFBbUI7SUFDdkYsT0FBTyxDQUFDLFdBQVcs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QUFFO2dCQUMxRixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNyQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtpQkFDakQ7WUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBRUgsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBMkMsRUFBRSxFQUFFO2dCQUNoRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNyQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtpQkFDakQ7WUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUE7UUFFRixPQUFPLEdBQUcsRUFBRTtZQUNWLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDckQsQ0FBQyxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJ1xuXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5pbXBvcnQgYm9vbGVhbkNvbnRhaW5zIGZyb20gJ0B0dXJmL2Jvb2xlYW4tY29udGFpbnMnXG5pbXBvcnQge1xuICBtdWx0aVBvbHlnb24gYXMgdHVyZmpzTXVsdGlQb2x5Z29uLFxuICBwb2x5Z29uIGFzIHR1cmZqc1BvbHlnb24sXG59IGZyb20gJ0B0dXJmL2hlbHBlcnMnXG5cbmV4cG9ydCBlbnVtIEFwcEZlYXR1cmVQcm9wZXJ0eU5hbWUge1xuICBJc1NlbGVjdGVkID0gYF9fYXBwX19pc1NlbGVjdGVkYCxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXBwRmVhdHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZTogc3RyaW5nKTogcHJvcGVydHlOYW1lIGlzIEFwcEZlYXR1cmVQcm9wZXJ0eU5hbWUge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhBcHBGZWF0dXJlUHJvcGVydHlOYW1lKVxuICAgIC5maW5kSW5kZXgodmFsdWUgPT4gdmFsdWUgPT09IHByb3BlcnR5TmFtZSkgIT09IC0xXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZlYXR1cmVTZWxlY3RlZChmZWF0dXJlOiBnb29nbGUubWFwcy5EYXRhLkZlYXR1cmUpOiBib29sZWFuIHtcbiAgY29uc3QgaXNTZWxlY3RlZCA9IGZlYXR1cmUuZ2V0UHJvcGVydHkoQXBwRmVhdHVyZVByb3BlcnR5TmFtZS5Jc1NlbGVjdGVkKVxuICByZXR1cm4gY29lcmNlQm9vbGVhblByb3BlcnR5KGlzU2VsZWN0ZWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGZWF0dXJlU2VsZWN0ZWQoZmVhdHVyZTogZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlLCBpc1NlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gIGZlYXR1cmUuc2V0UHJvcGVydHkoQXBwRmVhdHVyZVByb3BlcnR5TmFtZS5Jc1NlbGVjdGVkLCBpc1NlbGVjdGVkKVxufVxuXG5jb25zdCBFWFRFUk5BTF9GRUFUVVJFX0RFRklORURfU1RZTEVfT1BUSU9OU19QUk9QRVJUWV9OQU1FID0gJ3N0eWxlT3B0aW9ucydcbmNvbnN0IEVYVEVSTkFMX0ZFQVRVUkVfREVGSU5FRF9TVFlMRV9PUFRJT05TX0hPVkVSRURfUFJPUEVSVFlfTkFNRSA9ICdzdHlsZU9wdGlvbnNIb3ZlcmVkJ1xuY29uc3QgRVhURVJOQUxfRkVBVFVSRV9ERUZJTkVEX1NUWUxFX09QVElPTlNfU0VMRUNURURfUFJPUEVSVFlfTkFNRSA9ICdzdHlsZU9wdGlvbnNTZWxlY3RlZCdcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlT3B0aW9uc0RlZmluZWRCeUZlYXR1cmUoZmVhdHVyZTogZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlKTogZ29vZ2xlLm1hcHMuRGF0YS5TdHlsZU9wdGlvbnMgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZmVhdHVyZS5nZXRQcm9wZXJ0eShFWFRFUk5BTF9GRUFUVVJFX0RFRklORURfU1RZTEVfT1BUSU9OU19QUk9QRVJUWV9OQU1FKSBhcyBnb29nbGUubWFwcy5EYXRhLlN0eWxlT3B0aW9ucyB8fCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvdmVyZWRTdHlsZU9wdGlvbnNEZWZpbmVkQnlGZWF0dXJlKGZlYXR1cmU6IGdvb2dsZS5tYXBzLkRhdGEuRmVhdHVyZSk6IGdvb2dsZS5tYXBzLkRhdGEuU3R5bGVPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGZlYXR1cmUuZ2V0UHJvcGVydHkoRVhURVJOQUxfRkVBVFVSRV9ERUZJTkVEX1NUWUxFX09QVElPTlNfSE9WRVJFRF9QUk9QRVJUWV9OQU1FKSBhcyBnb29nbGUubWFwcy5EYXRhLlN0eWxlT3B0aW9ucyB8fCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGVkU3R5bGVPcHRpb25zRGVmaW5lZEJ5RmVhdHVyZShmZWF0dXJlOiBnb29nbGUubWFwcy5EYXRhLkZlYXR1cmUpOiBnb29nbGUubWFwcy5EYXRhLlN0eWxlT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBmZWF0dXJlLmdldFByb3BlcnR5KEVYVEVSTkFMX0ZFQVRVUkVfREVGSU5FRF9TVFlMRV9PUFRJT05TX1NFTEVDVEVEX1BST1BFUlRZX05BTUUpIGFzIGdvb2dsZS5tYXBzLkRhdGEuU3R5bGVPcHRpb25zIHx8IHVuZGVmaW5lZFxufVxuXG4vLyBUT0RPOiBDaGVjayBwZXJmb3JtYW5jZSBvZiBjbG9uaW5nIGEgZ29vZ2xlLm1hcHMuRGF0YSBpbnN0YW5jZSwgc28gdGhlXG4vLyBwcm9wZXJ0aWVzIGNhbiBiZSByZW1vdmVkIHdpdGggdGhlIGdvb2dsZSBtYXBzIGFwaSwgaW5zdGVhZCBvZiBvbiB0aGVcbi8vIHJlc3VsdGluZyBqc29uLlxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQXBwRmVhdHVyZVByb3BlcnRpZXNGcm9tSnNvbihqc29uOiBhbnkpIHtcbiAgaWYgKG5vdE51bGxPclVuZGVmaW5lZChqc29uKSAmJiBBcnJheS5pc0FycmF5KGpzb24/LmZlYXR1cmVzKSkge1xuICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBqc29uLmZlYXR1cmVzKSB7XG4gICAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKGZlYXR1cmU/LnByb3BlcnRpZXMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhmZWF0dXJlLnByb3BlcnRpZXMpKSB7XG4gICAgICAgICAgaWYgKGlzQXBwRmVhdHVyZVByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXNba10gPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGRlbGV0ZSBmZWF0dXJlLnByb3BlcnRpZXNba11cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTZWFyY2hlcyBmb3IgYSBGZWF0dXJlIGluIERhdGEgdGhhdCBjb250YWlucyB0aGUgcHJvdmlkZWQgRmVhdHVyZSBhbmQgY2FuIHVzZVxuICogaXQgYXMgYSBjdXRvdXQgYXJlYS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvc3NpYmxlRXh0ZXJpb3JGZWF0dXJlKFxuICBkYXRhOiBnb29nbGUubWFwcy5EYXRhLFxuICBmZWF0dXJlOiBnb29nbGUubWFwcy5EYXRhLkZlYXR1cmVcbik6IGdvb2dsZS5tYXBzLkRhdGEuRmVhdHVyZSB8IHVuZGVmaW5lZCB7XG4gIGxldCBleHRlcmlvclBvbHlnb25GZWF0dXJlOiBnb29nbGUubWFwcy5EYXRhLkZlYXR1cmUgfCB1bmRlZmluZWRcbiAgZGF0YS5mb3JFYWNoKGYgPT4ge1xuICAgIGlmIChmID09PSBmZWF0dXJlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBnZW9tZXRyeSA9IGYuZ2V0R2VvbWV0cnkoKVxuICAgIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoYEdlb21ldHJ5IG5vdCBmb3VuZC5gKVxuICAgIH1cbiAgICBpZiAoZ2VvbWV0cnkuZ2V0VHlwZSgpID09PSAnUG9seWdvbicgJiYgZmVhdHVyZUNvbnRhaW5zKGYsIGZlYXR1cmUpKSB7XG4gICAgICBleHRlcmlvclBvbHlnb25GZWF0dXJlID0gZlxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGV4dGVyaW9yUG9seWdvbkZlYXR1cmVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZElubmVyRmVhdHVyZUN1dG91dFRvRXh0ZXJpb3JGZWF0dXJlKFxuICBleHRlcmlvckZlYXR1cmU6IGdvb2dsZS5tYXBzLkRhdGEuRmVhdHVyZSxcbiAgaW5uZXJGZWF0dXJlOiBnb29nbGUubWFwcy5EYXRhLkZlYXR1cmVcbik6IHZvaWQge1xuICBjb25zdCBleHRlcmlvckdlb21ldHJ5ID0gZXh0ZXJpb3JGZWF0dXJlLmdldEdlb21ldHJ5KClcbiAgaWYgKGV4dGVyaW9yR2VvbWV0cnkgPT09IG51bGwpIHtcbiAgICB0aHJvdyBFcnJvcihgR2VvbWV0cnkgbm90IGZvdW5kLmApXG4gIH1cbiAgY29uc3QgaW5uZXJHZW9tZXRyeSA9IGlubmVyRmVhdHVyZS5nZXRHZW9tZXRyeSgpXG4gIGlmIChpbm5lckdlb21ldHJ5ID09PSBudWxsKSB7XG4gICAgdGhyb3cgRXJyb3IoYEdlb21ldHJ5IG5vdCBmb3VuZC5gKVxuICB9XG4gIC8vIE5PVEU6IE90aGVyIGdlb21ldHJpZXMgbWF5IHN1cHBvcnQgY3V0b3V0cywgYnV0IG91ciBtYXAgc2hhcGVzIGVkaXRvciBvbmx5XG4gIC8vIHN1cHBvcnRzIHBvbHlnb25zIGN1cnJlbnRseSwgc28gd2Ugd2lsbCBuZWVkIHRvIGhhbmRsZSBvdGhlciBnZW9tZXRyeSB0eXBlc1xuICAvLyBoZXJlIGlmIHdlIHN0YXJ0IGFsbG93aW5nIHVzZXJzIHRvIGRyYXcgc2hhcGVzIG90aGVyIHRoYW4gcG9seWdvbi5cbiAgaWYgKGV4dGVyaW9yR2VvbWV0cnkuZ2V0VHlwZSgpICE9PSAnUG9seWdvbicgfHwgaW5uZXJHZW9tZXRyeS5nZXRUeXBlKCkgIT09ICdQb2x5Z29uJykge1xuICAgIHRocm93IEVycm9yKGBJbm5lciBjdXRvdXQgaXMgb25seSBzdXBwb3J0ZWQgYnkgUG9seWdvbiBnZW1vZXRyeS5gKVxuICB9XG5cbiAgY29uc3QgZmVhdHVyZVBvbHlnb24gPSBpbm5lckdlb21ldHJ5IGFzIGdvb2dsZS5tYXBzLkRhdGEuUG9seWdvblxuICBjb25zdCBleHRlcmlvclBvbHlnb24gPSBleHRlcmlvckdlb21ldHJ5IGFzIGdvb2dsZS5tYXBzLkRhdGEuUG9seWdvblxuICBleHRlcmlvckZlYXR1cmUuc2V0R2VvbWV0cnkobmV3IGdvb2dsZS5tYXBzLkRhdGEuUG9seWdvbihbXG4gICAgLi4uZXh0ZXJpb3JQb2x5Z29uLmdldEFycmF5KCksXG4gICAgZmVhdHVyZVBvbHlnb24uZ2V0QXQoMCkuZ2V0QXJyYXkoKS5yZXZlcnNlKClcbiAgXSkpXG59XG5cbi8qKlxuICogR29vZ2xlIG1hcHMgcGF0aHMgZG9uJ3QgYWx3YXlzIHN0YXJ0IGFuZCBzdG9wIGF0IHRoZSBleGFjdCBzYW1lIHBvc2l0aW9uLCBzb1xuICogdGhpcyB3aWxsIGZpeCB0aGF0IGZvciB0dXJmanMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXhQYXRoRGlmZmVyZW50U3RhcnRpbmdBbmRFbmRpbmdQb2ludChjb29yZGluYXRlczogbnVtYmVyW11bXSk6IHZvaWQge1xuICBpZiAoY29vcmRpbmF0ZXMubGVuZ3RoIDw9IDEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gY29vcmRpbmF0ZXNbMF1cbiAgY29uc3QgZW5kID0gY29vcmRpbmF0ZXNbY29vcmRpbmF0ZXMubGVuZ3RoIC0gMV1cbiAgaWYgKHN0YXJ0WzBdID09PSBlbmRbMF0gJiYgc3RhcnRbMV0gPT09IGVuZFsxXSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29vcmRpbmF0ZXMucHVzaChjb29yZGluYXRlc1swXSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvbHlnb25IYXNWYWxpZFBhdGhzTGVuZ3Rocyhwb2x5Z29uOiBnb29nbGUubWFwcy5Qb2x5Z29uLCBtaW5Qb2ludHNJblZhbGlkUGF0aDogbnVtYmVyID0gMyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYXRocyA9IHBvbHlnb24uZ2V0UGF0aHMoKS5nZXRBcnJheSgpXG4gIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xuICAgIGlmIChwYXRoLmdldExlbmd0aCgpIDwgbWluUG9pbnRzSW5WYWxpZFBhdGgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9seWdvbkNvb3JkaW5hdGVzKHBvbHlnb246IGdvb2dsZS5tYXBzLkRhdGEuUG9seWdvbik6IG51bWJlcltdW11bXSB7XG4gIHJldHVybiBwb2x5Z29uLmdldEFycmF5KCkubWFwKGxpblJpbmcgPT4ge1xuICAgIGNvbnN0IGNvb3JkcyA9IGxpblJpbmcuZ2V0QXJyYXkoKS5tYXAoeCA9PiBbIHgubG5nKCksIHgubGF0KCkgXSlcbiAgICBmaXhQYXRoRGlmZmVyZW50U3RhcnRpbmdBbmRFbmRpbmdQb2ludChjb29yZHMpXG4gICAgcmV0dXJuIGNvb3Jkc1xuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlQb2x5Z29uQ29vcmRpbmF0ZXMobXVsdGlQb2x5Z29uOiBnb29nbGUubWFwcy5EYXRhLk11bHRpUG9seWdvbik6IG51bWJlcltdW11bXVtdIHtcbiAgcmV0dXJuIG11bHRpUG9seWdvbi5nZXRBcnJheSgpLm1hcCh4ID0+IHBvbHlnb25Db29yZGluYXRlcyh4KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVHVyZkpzUG9seWdvbihwb2x5Z29uOiBnb29nbGUubWFwcy5EYXRhLlBvbHlnb24pIHtcbiAgcmV0dXJuIHR1cmZqc1BvbHlnb24ocG9seWdvbkNvb3JkaW5hdGVzKHBvbHlnb24pKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9UdXJmSnNNdWx0aVBvbHlnb24obXVsdGlQb2x5Z29uOiBnb29nbGUubWFwcy5EYXRhLk11bHRpUG9seWdvbikge1xuICByZXR1cm4gdHVyZmpzTXVsdGlQb2x5Z29uKG11bHRpUG9seWdvbkNvb3JkaW5hdGVzKG11bHRpUG9seWdvbikpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1R1cmZKc0ZlYXR1cmUoZ29vZ2xlRmVhdHVyZTogZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlKSB7XG4gIGNvbnN0IGdlb21ldHJ5ID0gZ29vZ2xlRmVhdHVyZS5nZXRHZW9tZXRyeSgpXG4gIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkge1xuICAgIHRocm93IEVycm9yKGBHZW9tZXRyeSBub3QgZm91bmQuYClcbiAgfVxuICBpZiAoZ2VvbWV0cnkuZ2V0VHlwZSgpID09PSAnUG9seWdvbicpIHtcbiAgICByZXR1cm4gdG9UdXJmSnNQb2x5Z29uKGdlb21ldHJ5IGFzIGdvb2dsZS5tYXBzLkRhdGEuUG9seWdvbilcbiAgfSBlbHNlIGlmIChnZW9tZXRyeS5nZXRUeXBlKCkgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgcmV0dXJuIHRvVHVyZkpzTXVsdGlQb2x5Z29uKGdlb21ldHJ5IGFzIGdvb2dsZS5tYXBzLkRhdGEuTXVsdGlQb2x5Z29uKVxuICB9XG5cbiAgdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWQgZ2VvbWV0cnkuYClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZlYXR1cmVDb250YWlucyhmZWF0dXJlQTogZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlLCBmZWF0dXJlQjogZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBvbHlnb25BID0gdG9UdXJmSnNGZWF0dXJlKGZlYXR1cmVBKVxuICBjb25zdCBwb2x5Z29uQiA9IHRvVHVyZkpzRmVhdHVyZShmZWF0dXJlQilcbiAgcmV0dXJuIGJvb2xlYW5Db250YWlucyhwb2x5Z29uQSwgcG9seWdvbkIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEYXRhRmVhdHVyZUZyb21Qb2x5Z29uKHBvbHlnb246IGdvb2dsZS5tYXBzLlBvbHlnb24pOiBnb29nbGUubWFwcy5EYXRhLkZlYXR1cmUge1xuICBjb25zdCBhcnIgPSBwb2x5Z29uLmdldFBhdGhzKCkuZ2V0QXJyYXkoKS5tYXAoeCA9PiB4LmdldEFycmF5KCkpXG4gIHJldHVybiBuZXcgZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlKHtcbiAgICBnZW9tZXRyeTogbmV3IGdvb2dsZS5tYXBzLkRhdGEuUG9seWdvbihhcnIpXG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb3VuZHNXaXRoQWxsRmVhdHVyZXMoZGF0YTogZ29vZ2xlLm1hcHMuRGF0YSk6IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcyB7XG4gIGNvbnN0IGJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKVxuXG4gIGRhdGEuZm9yRWFjaChmZWF0dXJlID0+IHtcbiAgICBjb25zdCBnZW9tZXRyeSA9IGZlYXR1cmUuZ2V0R2VvbWV0cnkoKVxuICAgIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoYEdlb21ldHJ5IG5vdCBmb3VuZC5gKVxuICAgIH1cbiAgICBnZW9tZXRyeS5mb3JFYWNoTGF0TG5nKGxhdExuZyA9PiB7XG4gICAgICBib3VuZHMuZXh0ZW5kKGxhdExuZylcbiAgICB9KVxuICB9KVxuXG4gIHJldHVybiBib3VuZHNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZlYXR1cmVCb3VuZHMoZmVhdHVyZTogZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlKTogZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzIHtcbiAgY29uc3QgYm91bmRzID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcygpXG5cbiAgY29uc3QgZ2VvbWV0cnkgPSBmZWF0dXJlLmdldEdlb21ldHJ5KClcbiAgaWYgKGdlb21ldHJ5ID09PSBudWxsKSB7XG4gICAgdGhyb3cgRXJyb3IoYEdlb21ldHJ5IG5vdCBmb3VuZC5gKVxuICB9XG4gIGdlb21ldHJ5LmZvckVhY2hMYXRMbmcobGF0TG5nID0+IHtcbiAgICBib3VuZHMuZXh0ZW5kKGxhdExuZylcbiAgfSlcblxuICByZXR1cm4gYm91bmRzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGZWF0dXJlQ2VudGVyKGZlYXR1cmU6IGdvb2dsZS5tYXBzLkRhdGEuRmVhdHVyZSk6IGdvb2dsZS5tYXBzLkxhdExuZyB7XG4gIHJldHVybiBnZXRGZWF0dXJlQm91bmRzKGZlYXR1cmUpLmdldENlbnRlcigpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBbGxGZWF0dXJlcyhkYXRhOiBnb29nbGUubWFwcy5EYXRhKTogdm9pZCB7XG4gIGRhdGEuZm9yRWFjaChmID0+IGRhdGEucmVtb3ZlKGYpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVhdHVyZXNDb3VudChkYXRhOiBnb29nbGUubWFwcy5EYXRhKTogbnVtYmVyIHtcbiAgbGV0IGNvdW50ID0gMFxuICBkYXRhLmZvckVhY2goKCkgPT4gY291bnQrKylcbiAgcmV0dXJuIGNvdW50XG59XG5cbi8qKlxuICogTk9URTogT3JpZ2luYWwgZXZlbnRzIGFyZSBub3QgZW1pdHRlZCwgYmVjYXVzZSBmaWx0ZXJpbmcgbWF5IG9taXQgZXZlbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmVhdHVyZUNoYW5nZU9ic2VydmFibGUoZGF0YTogZ29vZ2xlLm1hcHMuRGF0YSwgbmdab25lOiBOZ1pvbmUpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHZvaWQ+KHN1YnNjcmliZXIgPT4ge1xuICAgIGNvbnN0IGxpc3RlbmVyczogZ29vZ2xlLm1hcHMuTWFwc0V2ZW50TGlzdGVuZXJbXSA9IFtdXG5cbiAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgbGlzdGVuZXJzLnB1c2goZGF0YS5hZGRMaXN0ZW5lcignc2V0Z2VvbWV0cnknLCAoZXZlbnQ6IGdvb2dsZS5tYXBzLkRhdGEuU2V0R2VvbWV0cnlFdmVudCkgPT4ge1xuICAgICAgICBuZ1pvbmUucnVuKCgpID0+IHsgc3Vic2NyaWJlci5uZXh0KHVuZGVmaW5lZCkgfSlcbiAgICAgIH0pKVxuXG4gICAgICBsaXN0ZW5lcnMucHVzaChkYXRhLmFkZExpc3RlbmVyKCdhZGRmZWF0dXJlJywgKGV2ZW50OiBnb29nbGUubWFwcy5EYXRhLkFkZEZlYXR1cmVFdmVudCkgPT4ge1xuICAgICAgICBuZ1pvbmUucnVuKCgpID0+IHsgc3Vic2NyaWJlci5uZXh0KHVuZGVmaW5lZCkgfSlcbiAgICAgIH0pKVxuXG4gICAgICBsaXN0ZW5lcnMucHVzaChkYXRhLmFkZExpc3RlbmVyKCdyZW1vdmVmZWF0dXJlJywgKGV2ZW50OiBnb29nbGUubWFwcy5EYXRhLlJlbW92ZUZlYXR1cmVFdmVudCkgPT4ge1xuICAgICAgICBuZ1pvbmUucnVuKCgpID0+IHsgc3Vic2NyaWJlci5uZXh0KHVuZGVmaW5lZCkgfSlcbiAgICAgIH0pKVxuXG4gICAgICBsaXN0ZW5lcnMucHVzaChkYXRhLmFkZExpc3RlbmVyKCdzZXRwcm9wZXJ0eScsIChldmVudDogZ29vZ2xlLm1hcHMuRGF0YS5TZXRQcm9wZXJ0eUV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghaXNBcHBGZWF0dXJlUHJvcGVydHkoZXZlbnQubmFtZSkpIHtcbiAgICAgICAgICBuZ1pvbmUucnVuKCgpID0+IHsgc3Vic2NyaWJlci5uZXh0KHVuZGVmaW5lZCkgfSlcbiAgICAgICAgfVxuICAgICAgfSkpXG5cbiAgICAgIGxpc3RlbmVycy5wdXNoKGRhdGEuYWRkTGlzdGVuZXIoJ3JlbW92ZXByb3BlcnR5JywgKGV2ZW50OiBnb29nbGUubWFwcy5EYXRhLlJlbW92ZVByb3BlcnR5RXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFpc0FwcEZlYXR1cmVQcm9wZXJ0eShldmVudC5uYW1lKSkge1xuICAgICAgICAgIG5nWm9uZS5ydW4oKCkgPT4geyBzdWJzY3JpYmVyLm5leHQodW5kZWZpbmVkKSB9KVxuICAgICAgICB9XG4gICAgICB9KSlcbiAgICB9KVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGxpc3RlbmVycy5mb3JFYWNoKGdvb2dsZS5tYXBzLmV2ZW50LnJlbW92ZUxpc3RlbmVyKVxuICAgIH1cbiAgfSlcbn1cbiJdfQ==
|