@fundamental-ngx/core 0.57.5 → 0.57.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-datetime-picker.mjs","sources":["../tmp-esm2022/datetime-picker/tokens.js","../tmp-esm2022/datetime-picker/datetime-picker-mobile/datetime-picker-mobile.component.js","../tmp-esm2022/datetime-picker/errors.js","../tmp-esm2022/datetime-picker/datetime-picker.component.js","../tmp-esm2022/datetime-picker/datetime-picker.module.js","../tmp-esm2022/datetime-picker/fundamental-ngx-core-datetime-picker.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport const FD_DATETIME_PICKER_COMPONENT = new InjectionToken('FdDateTimePickerComponent');\nexport const FD_DATETIME_PICKER_MOBILE_CONFIG = new InjectionToken('FdDateTimePickerMobileConfig');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGV0aW1lLXBpY2tlci90b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsMkJBQTJCLENBQUMsQ0FBQztBQUNqSCxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLGNBQWMsQ0FBbUIsOEJBQThCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7IERhdGVUaW1lUGlja2VyIH0gZnJvbSAnLi9kYXRldGltZS1waWNrZXIubW9kZWwnO1xuXG5leHBvcnQgY29uc3QgRkRfREFURVRJTUVfUElDS0VSX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEYXRlVGltZVBpY2tlcjxhbnk+PignRmREYXRlVGltZVBpY2tlckNvbXBvbmVudCcpO1xuZXhwb3J0IGNvbnN0IEZEX0RBVEVUSU1FX1BJQ0tFUl9NT0JJTEVfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPE1vYmlsZU1vZGVDb25maWc+KCdGZERhdGVUaW1lUGlja2VyTW9iaWxlQ29uZmlnJyk7XG4iXX0=","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { DialogBodyComponent, DialogCloseButtonComponent, DialogComponent, DialogFooterComponent, DialogHeaderComponent } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FD_DATETIME_PICKER_COMPONENT, FD_DATETIME_PICKER_MOBILE_CONFIG } from '../tokens';\nimport * as i0 from \"@angular/core\";\nexport class DatetimePickerMobileComponent extends MobileModeBase {\n /** @hidden */\n constructor(dateTimePickerConfig, datePickerComponent) {\n super(datePickerComponent, MobileModeControl.DATETIME_PICKER);\n this.dateTimePickerConfig = dateTimePickerConfig;\n this._component.isOpenChange.subscribe((isOpen) => {\n this._toggleDialog(isOpen);\n });\n }\n /** @hidden */\n handleApprove() {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n /** @hidden */\n handleDismiss() {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n /** @hidden */\n _toggleDialog(open) {\n if (open) {\n this._selectedBackup = this._component.date;\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n }\n /** @hidden */\n _open() {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n backdropClickCloseable: false,\n disablePaddings: true,\n ...this.dialogConfig,\n container: this._elementRef.nativeElement\n });\n this._selectedBackup = this._component.date;\n const refSub = this.dialogRef.afterClosed.pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerMobileComponent, deps: [{ token: FD_DATETIME_PICKER_MOBILE_CONFIG }, { token: FD_DATETIME_PICKER_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: DatetimePickerMobileComponent, isStandalone: true, selector: \"fd-datetime-picker-mobile\", viewQueries: [{ propertyName: \"dialogTemplate\", first: true, predicate: [\"dialogTemplate\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"dateTimePickerConfig.pickerTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\", dependencies: [{ kind: \"component\", type: TitleComponent, selector: \"[fd-title], [fdTitle]\", inputs: [\"headerSize\", \"wrap\"], exportAs: [\"fd-title\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: DialogComponent, selector: \"fd-dialog\", inputs: [\"class\", \"dialogRef\", \"dialogConfig\"] }, { kind: \"component\", type: DialogBodyComponent, selector: \"fd-dialog-body\", inputs: [\"disablePaddings\"] }, { kind: \"component\", type: DialogFooterComponent, selector: \"fd-dialog-footer\" }, { kind: \"component\", type: DialogHeaderComponent, selector: \"fd-dialog-header\" }, { kind: \"component\", type: DialogCloseButtonComponent, selector: \"[fd-dialog-close-button]\", inputs: [\"mobile\", \"title\", \"ariaLabel\"] }, { kind: \"component\", type: ButtonBarComponent, selector: \"fd-button-bar\", inputs: [\"fullWidth\", \"fdType\", \"title\", \"ariaLabelledby\", \"id\"] }, { kind: \"directive\", type: InitialFocusDirective, selector: \"[fdkInitialFocus]\", inputs: [\"fdkInitialFocus\", \"enabled\", \"focusLastElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerMobileComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-datetime-picker-mobile', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n TitleComponent,\n NgTemplateOutlet,\n DialogComponent,\n DialogBodyComponent,\n DialogFooterComponent,\n DialogHeaderComponent,\n DialogCloseButtonComponent,\n ButtonBarComponent,\n InitialFocusDirective\n ], template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"dateTimePickerConfig.pickerTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\" }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [FD_DATETIME_PICKER_MOBILE_CONFIG]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [FD_DATETIME_PICKER_COMPONENT]\n }] }], propDecorators: { dialogTemplate: [{\n type: ViewChild,\n args: ['dialogTemplate']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZXRpbWUtcGlja2VyL2RhdGV0aW1lLXBpY2tlci1tb2JpbGUvZGF0ZXRpbWUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZXRpbWUtcGlja2VyL2RhdGV0aW1lLXBpY2tlci1tb2JpbGUvZGF0ZXRpbWUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBWSxNQUFNLDRCQUE0QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLGVBQWUsRUFDZixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3hCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBbUIzRixNQUFNLE9BQU8sNkJBQWlDLFNBQVEsY0FBaUM7SUFPbkYsY0FBYztJQUNkLFlBRVcs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QTRCO3lDQVRYLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBJbml0aWFsRm9jdXNEaXJlY3RpdmUsIE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uQmFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQge1xuICAgIERpYWxvZ0JvZHlDb21wb25lbnQsXG4gICAgRGlhbG9nQ2xvc2VCdXR0b25Db21wb25lbnQsXG4gICAgRGlhbG9nQ29tcG9uZW50LFxuICAgIERpYWxvZ0Zvb3RlckNvbXBvbmVudCxcbiAgICBEaWFsb2dIZWFkZXJDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RpYWxvZyc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQmFzZSwgTW9iaWxlTW9kZUNvbnRyb2wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHsgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICcuLi9kYXRldGltZS1waWNrZXIubW9kZWwnO1xuaW1wb3J0IHsgRkRfREFURVRJTUVfUElDS0VSX0NPTVBPTkVOVCwgRkRfREFURVRJTUVfUElDS0VSX01PQklMRV9DT05GSUcgfSBmcm9tICcuLi90b2tlbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWRhdGV0aW1lLXBpY2tlci1tb2JpbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRldGltZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgVGl0bGVDb21wb25lbnQsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0Nsb3NlQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBCdXR0b25CYXJDb21wb25lbnQsXG4gICAgICAgIEluaXRpYWxGb2N1c0RpcmVjdGl2ZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXRpbWVQaWNrZXJNb2JpbGVDb21wb25lbnQ8RD4gZXh0ZW5kcyBNb2JpbGVNb2RlQmFzZTxEYXRlVGltZVBpY2tlcjxEPj4ge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZGlhbG9nVGVtcGxhdGUnKSBkaWFsb2dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRCYWNrdXA6IE51bGxhYmxlPEQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChGRF9EQVRFVElNRV9QSUNLRVJfTU9CSUxFX0NPTkZJRylcbiAgICAgICAgcHVibGljIGRhdGVUaW1lUGlja2VyQ29uZmlnOiB7IHBpY2tlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IH0sXG4gICAgICAgIEBJbmplY3QoRkRfREFURVRJTUVfUElDS0VSX0NPTVBPTkVOVCkgZGF0ZVBpY2tlckNvbXBvbmVudDogRGF0ZVRpbWVQaWNrZXI8RD5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoZGF0ZVBpY2tlckNvbXBvbmVudCwgTW9iaWxlTW9kZUNvbnRyb2wuREFURVRJTUVfUElDS0VSKTtcblxuICAgICAgICB0aGlzLl9jb21wb25lbnQuaXNPcGVuQ2hhbmdlLnN1YnNjcmliZSgoaXNPcGVuKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVEaWFsb2coaXNPcGVuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuZGlhbG9nQXBwcm92ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlRGlzbWlzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGlzbWlzcygpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuZGlhbG9nRGlzbWlzcyh0aGlzLl9zZWxlY3RlZEJhY2t1cCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b2dnbGVEaWFsb2cob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAob3Blbikge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRCYWNrdXAgPSB0aGlzLl9jb21wb25lbnQuZGF0ZSE7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RpYWxvZ1NlcnZpY2UuaGFzT3BlbkRpYWxvZ3MoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5kaWFsb2dUZW1wbGF0ZSwge1xuICAgICAgICAgICAgbW9iaWxlOiB0cnVlLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGlja0Nsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlUGFkZGluZ3M6IHRydWUsXG4gICAgICAgICAgICAuLi50aGlzLmRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQmFja3VwID0gdGhpcy5fY29tcG9uZW50LmRhdGU7XG5cbiAgICAgICAgY29uc3QgcmVmU3ViID0gdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBlcnJvcjogKHR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0Rpc21pc3ModGhpcy5fc2VsZWN0ZWRCYWNrdXApO1xuICAgICAgICAgICAgICAgICAgICByZWZTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbZmREaWFsb2dUZW1wbGF0ZV0gbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCIgI2RpYWxvZ1RlbXBsYXRlPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlcj5cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQ29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGgxIGZkLXRpdGxlPnt7IG1vYmlsZUNvbmZpZy50aXRsZSB9fTwvaDE+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5oYXNDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIDxidXR0b24gdGl0bGU9XCJDbG9zZVwiIGZkLWRpYWxvZy1jbG9zZS1idXR0b24gW21vYmlsZV09XCJ0cnVlXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgIDxmZC1kaWFsb2ctYm9keT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkYXRlVGltZVBpY2tlckNvbmZpZy5waWNrZXJUZW1wbGF0ZSB8fCBudWxsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cbiAgICAgICAgPGZkLWRpYWxvZy1mb290ZXI+XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5hcHByb3ZlQnV0dG9uVGV4dCkge1xuICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyIGZkVHlwZT1cImVtcGhhc2l6ZWRcIiBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0IVwiIChjbGljayk9XCJoYW5kbGVBcHByb3ZlKClcIj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5jYW5jZWxCdXR0b25UZXh0KSB7XG4gICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXIgZmRrSW5pdGlhbEZvY3VzIFtsYWJlbF09XCJtb2JpbGVDb25maWcuY2FuY2VsQnV0dG9uVGV4dCFcIiAoY2xpY2spPVwiaGFuZGxlRGlzbWlzcygpXCI+XG4gICAgICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLWRpYWxvZy1mb290ZXI+XG4gICAgPC9mZC1kaWFsb2c+XG48L25nLXRlbXBsYXRlPlxuIl19","/** Creates an error to be thrown when attempting to use an invalid date implementation. */\nexport function createMissingDateImplementationError(provider) {\n return Error(`FdDatetimePicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGV0aW1lLXBpY2tlci9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkZBQTJGO0FBQzNGLE1BQU0sVUFBVSxvQ0FBb0MsQ0FBQyxRQUFnQjtJQUNqRSxPQUFPLEtBQUssQ0FDUiwyQ0FBMkMsUUFBUSx5Q0FBeUM7UUFDeEYsbUVBQW1FO1FBQ25FLHdCQUF3QixDQUMvQixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDcmVhdGVzIGFuIGVycm9yIHRvIGJlIHRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gdXNlIGFuIGludmFsaWQgZGF0ZSBpbXBsZW1lbnRhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IocHJvdmlkZXI6IHN0cmluZyk6IEVycm9yIHtcbiAgICByZXR1cm4gRXJyb3IoXG4gICAgICAgIGBGZERhdGV0aW1lUGlja2VyOiBObyBwcm92aWRlciBmb3VuZCBmb3IgJHtwcm92aWRlcn0uIFlvdSBtdXN0IGltcG9ydCBvbmUgb2YgdGhlIGZvbGxvd2luZyBgICtcbiAgICAgICAgICAgIGBtb2R1bGVzIGF0IHlvdXIgYXBwbGljYXRpb24gcm9vdDogRmREYXRldGltZU1vZHVsZSwgb3IgcHJvdmlkZSBhIGAgK1xuICAgICAgICAgICAgYGN1c3RvbSBpbXBsZW1lbnRhdGlvbi5gXG4gICAgKTtcbn1cbiJdfQ==","import { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, inject, Inject, Injector, Input, Optional, Output, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { CalendarComponent, FdCalendarViewEnum } from '@fundamental-ngx/core/calendar';\nimport { convertToDesiredFormat, DATE_TIME_FORMATS, DatetimeAdapter, TranslateDayPeriodPipe } from '@fundamental-ngx/core/datetime';\nimport { FormMessageComponent, PopoverFormMessageService, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { PopoverBodyComponent, PopoverBodyFooterDirective, PopoverComponent, PopoverControlComponent, PopoverService } from '@fundamental-ngx/core/popover';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { DynamicComponentService, FocusTrapService } from '@fundamental-ngx/cdk/utils';\nimport { BarComponent, BarElementDirective, BarRightDirective } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { SegmentedButtonComponent } from '@fundamental-ngx/core/segmented-button';\nimport { TimeComponent } from '@fundamental-ngx/core/time';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { DatetimePickerMobileComponent } from './datetime-picker-mobile/datetime-picker-mobile.component';\nimport { createMissingDateImplementationError } from './errors';\nimport { FD_DATETIME_PICKER_COMPONENT, FD_DATETIME_PICKER_MOBILE_CONFIG } from './tokens';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/core/datetime\";\nimport * as i2 from \"@fundamental-ngx/core/form\";\nimport * as i3 from \"@angular/forms\";\n/**\n * The datetime picker component is an opinionated composition of the fd-popover,\n * fd-calendar and fd-time components to accomplish the UI pattern for picking a date and time.\n * Supports Angular Forms.\n * ```html\n * <fd-date-time-picker [(ngModel)]=\"dateTime\"></fd-date-time-picker>\n * ```\n */\nexport class DatetimePickerComponent {\n /** Text displayed in message */\n set message(message) {\n this._message = message;\n }\n /** The trigger events that will open/close the message box.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp). */\n set messageTriggers(triggers) {\n this._messageTriggers = triggers;\n }\n /**\n * The state of the form control - applies css classes.\n * Also this is applied to message.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n set state(state) {\n this._state = state;\n }\n get state() {\n if (this.useValidation && this.isInvalidDateInput) {\n return 'error';\n }\n return this._state;\n }\n /** Indicates when datetime input is in invalid state. */\n get isInvalidDateInput() {\n return this._isInvalidDateInput && this._touched;\n }\n /** @hidden Reference to the inner calendar component. */\n set _calendarCmp(calendar) {\n setTimeout(() => {\n calendar?.setCurrentlyDisplayed(this._calendarPendingDate);\n calendar?.initialFocus();\n });\n this._calendarComponent = calendar;\n }\n /** @hidden */\n constructor(_elRef, _changeDetRef, \n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n _dateTimeAdapter, _dateTimeFormats, _popoverFormMessage) {\n this._elRef = _elRef;\n this._changeDetRef = _changeDetRef;\n this._dateTimeAdapter = _dateTimeAdapter;\n this._dateTimeFormats = _dateTimeFormats;\n this._popoverFormMessage = _popoverFormMessage;\n /** Placeholder for the inner input element. */\n this.placeholder = '';\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n this.placement = 'bottom-start';\n /** If it is mandatory field */\n this.required = false;\n /** Whether to perform visual validation on the picker input. */\n this.useValidation = true;\n /** Whether the popover is open. Two-way binding is supported. */\n this.isOpen = false;\n /** The disableFunction for the calendar. */\n this.startingDayOfWeek = 1;\n /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n this.activeView = FdCalendarViewEnum.Day;\n /** Whether a null input is considered valid. */\n this.allowNull = true;\n /**\n * @Input when set to true time component will use 2 digits for each number.\n * For example 9 will become 09\n * but 12 will be kept as 12.\n * Only uses by time component and does not change input format\n */\n this.keepTwoDigitsTime = false;\n /**\n * @deprecated Popover is toggled with f4 key\n */\n this.buttonFocusable = false;\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with FdDate object as a parameter. ex:\n * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n this.specialDaysRules = [];\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n this.yearGrid = {\n rows: 4,\n cols: 5\n };\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n this.aggregatedYearGrid = {\n rows: 4,\n cols: 3\n };\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n this.markWeekends = true;\n /** @Input Whether to show spinner buttons */\n this.spinnerButtons = true;\n /**\n * Whether user wants to show week numbers next to days\n */\n this.showWeekNumbers = true;\n /** Whether or not to show the datetime picker footer with OK/cancel buttons. */\n this.showFooter = true;\n /**\n * Whether to recalculate value from the input as user types or on blur.\n * By default, updates the value as user types.\n * @default false\n */\n this.processInputOnBlur = false;\n /**\n * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n */\n this.preventScrollOnFocus = false;\n /** Whether to render datetime picker in mobile mode. */\n this.mobile = false;\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n this.mobileLandscape = false;\n /** Whether calendar is used inside mobile in portrait mode */\n this.mobilePortrait = false;\n /** To set input width 100% */\n this.isFullWidth = false;\n /** Event emitted when the state of the isOpen property changes. */\n this.isOpenChange = new EventEmitter();\n /** Event thrown every time calendar active view is changed */\n this.activeViewChange = new EventEmitter();\n /** Event emitted when the date changes. This can be a time or day change. */\n this.dateChange = new EventEmitter();\n /** Event emitted when the day changes from the calendar. */\n this.calendarChange = new EventEmitter();\n /** Event emitted when the time changes from the time component. */\n this.timeChange = new EventEmitter();\n /** Event emitted when popover closes. */\n this.onClose = new EventEmitter();\n /** Event emitted when datepicker changes it's \"touched\" state. */\n this.touched = new EventEmitter();\n /** @hidden */\n this._message = null;\n /** @hidden */\n this._messageTriggers = ['focusin', 'focusout'];\n /**\n * @hidden\n * Date of the input field. Internal use.\n * For programmatic selection, use two-way binding on the date input.\n */\n this._inputFieldDate = null;\n /** @hidden */\n this._isInvalidDateInput = false;\n /** @hidden whether to display date or time in mobile mode */\n this._displayType = 'date';\n /** @hidden */\n this._showPopoverContents = false;\n /** @hidden */\n this._state = 'default';\n /** @hidden */\n this._injector = inject(Injector);\n /** @hidden */\n this._dynamicComponentService = inject(DynamicComponentService);\n /** @hidden */\n this._focusTrapService = inject(FocusTrapService, {\n optional: true\n });\n /** @hidden */\n this._subscriptions = new Subscription();\n /** @hidden */\n this._touched = false;\n /**\n * Function used to disable certain dates in the calendar.\n * @param fdDate FdDate\n */\n this.disableFunction = () => false;\n /** @hidden */\n this.onChange = () => { };\n /** @hidden */\n this.onTouched = () => { };\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n // default model value\n this.date = _dateTimeAdapter.now();\n }\n /** @hidden */\n ngOnChanges(changes) {\n if (changes.date) {\n this._setTempDateTime();\n }\n if (['displayHours', 'displayMinutes', 'displaySeconds', 'meridian'].some((input) => input in changes)) {\n this._calculateTimeOptions();\n }\n if ('isOpen' in changes) {\n this._showPopoverContents = this.isOpen;\n this._changeDetRef.detectChanges();\n }\n }\n /** @hidden */\n ngOnInit() {\n if (this.date) {\n this._setTempDateTime();\n }\n this._calculateTimeOptions();\n this._subscriptions.add(this._dateTimeAdapter.localeChanges.pipe(filter(() => this._inputFieldDate !== '')).subscribe(() => {\n this._setInput(this.date);\n this._calculateTimeOptions();\n this._changeDetRef.detectChanges();\n }));\n }\n /** @hidden */\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n this._mobileComponentRef?.destroy();\n }\n /** @hidden */\n ngAfterViewInit() {\n this._InitialiseVariablesInMessageService();\n if (this.mobile) {\n this._setUpMobileMode();\n }\n // update bindings after rendering\n // is needed to preperly reflect error state\n setTimeout(() => {\n this._changeDetRef.markForCheck();\n });\n }\n /**\n * @hidden\n * Function that implements Validator Interface, adds validation support for forms\n */\n validate() {\n return this.isCurrentModelValid() && !this._isInvalidDateInput\n ? null\n : {\n dateValidation: {\n valid: false\n }\n };\n }\n /** Toggles the popover. */\n togglePopover() {\n if (this.isOpen) {\n this.closePopover();\n }\n else {\n this.openPopover();\n }\n }\n /**\n * Method that handles calendar active view change and throws event.\n */\n handleCalendarActiveViewChange(activeView) {\n this.activeViewChange.emit(activeView);\n }\n /** Method that handles blur events on datetime picker input */\n handleOnTouched(event) {\n this._touched = true;\n this.onTouched();\n this.touched.next();\n if (event) {\n this.handleInputChange(event.target.value, false);\n }\n }\n /** Opens the popover. */\n openPopover() {\n if (!this.isOpen && !this.disabled) {\n this._focusTrapService?.pauseCurrentFocusTrap();\n this._showPopoverContents = true;\n this._changeDetRef.detectChanges();\n this.isOpen = true;\n this._onOpenStateChanged(this.isOpen);\n }\n }\n /** Closes the popover and refresh model */\n closePopover() {\n if (!this.isOpen) {\n return;\n }\n this.onClose.emit();\n this.isOpen = false;\n this._changeDetRef.detectChanges();\n this._onOpenStateChanged(this.isOpen);\n this._focusTrapService?.unpauseCurrentFocusTrap();\n this.handleOnTouched();\n this._showPopoverContents = false;\n }\n /** @hidden */\n setInvalidDateInputHandler(isInvalid) {\n this._isInvalidDateInput = isInvalid;\n }\n /** @hidden */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /** @hidden */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /** @hidden */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetRef.detectChanges();\n }\n /**\n * @hidden\n * Function that provides support for ControlValueAccessor that allows to use [(ngModel)] or forms\n */\n writeValue(selected) {\n this.date = this._parseDate(selected);\n this._isInvalidDateInput = !this._isModelValid(this.date);\n if (this.isCurrentModelValid()) {\n this._setTempDateTime();\n this._refreshCurrentlyDisplayedCalendarDate(this.date);\n }\n this._setInput(this.date);\n }\n /**\n * @hidden\n * Method that is triggered by events from calendar component, when there is selected date changed.\n * If invalid time model is detected, it takes time model data from TimeComponent.\n */\n handleDateChange(date) {\n this._tempDate = date;\n if (!this.showFooter) {\n this.submit();\n }\n }\n /**\n * @hidden\n * Method that is triggered by events from time component, when there is selected time changed\n */\n handleTimeChange(time) {\n this._tempTime = time;\n if (!this.showFooter) {\n this.submit();\n }\n }\n /**\n * @hidden\n * Method that is triggered when 'OK' button is pressed.\n */\n submit() {\n // Initialize date and time values, defaulting to the current date if invalid\n let currentDate = this._tempDate;\n let currentTime = this._tempTime;\n // Initialize date and time values, defaulting to the current date if invalid\n if (!this._tempDate || !this._dateTimeAdapter.isValid(this._tempDate)) {\n currentDate = this._dateTimeAdapter.today();\n }\n if (!this._tempTime || !this._dateTimeAdapter.isValid(this._tempTime)) {\n currentTime = this._dateTimeAdapter.today();\n }\n try {\n this.date = this._dateTimeAdapter.setTime(currentDate, this._dateTimeAdapter.getHours(currentTime), this._dateTimeAdapter.getMinutes(currentTime), this._dateTimeAdapter.getSeconds(currentTime));\n }\n catch {\n this.date = null;\n }\n this._isInvalidDateInput = !this.isCurrentModelValid();\n this._setInput(this.date);\n this.onChange(this.date);\n if (this.showFooter) {\n this.closePopover();\n }\n }\n /**\n * @hidden\n * Function that is called when 'Cancel' button is pressed.\n */\n cancel() {\n this._tempDate = this.date;\n this._tempTime = this.date;\n this.closePopover();\n }\n /**\n * @hidden\n * Looks like no one uses it. Should be removed?\n */\n focusArrowLeft() {\n if (this._elRef.nativeElement.querySelector('#' + this._calendarComponent.id + '-left-arrow')) {\n this._elRef.nativeElement.querySelector('#' + this._calendarComponent.id + '-left-arrow').focus();\n }\n }\n /**\n * @hidden\n * Method, which is responsible for transforming string to datetime, depending on type or\n * validation the results are different. It also changes to state of _isInvalidDateInput.\n */\n handleInputChange(inputStr, isTypeEvent) {\n if ((isTypeEvent && this.processInputOnBlur) || (!isTypeEvent && !this.processInputOnBlur)) {\n // if processInputOnBlur === true, ignore type event\n // if processInputOnBlur === false, ignore blur/enter event\n return;\n }\n this._inputFieldDate = inputStr ?? '';\n if (!inputStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.date = null;\n this.onChange(null);\n return;\n }\n inputStr = convertToDesiredFormat(inputStr.toString());\n this.date = this._parseDate(inputStr);\n this._isInvalidDateInput = !this._isModelValid(this.date);\n if (!this._isInvalidDateInput) {\n this._setTempDateTime();\n this._refreshCurrentlyDisplayedCalendarDate(this.date);\n }\n this.onChange(this.date);\n }\n /** @hidden */\n dialogApprove() {\n this.isOpen = false;\n this.submit();\n }\n /** Method used to restore original value for mobile mode. */\n dialogDismiss(value) {\n this.date = value;\n this.isOpen = false;\n this._setInput(this.date);\n this.onChange(this.date);\n }\n /** @hidden */\n _changeMessageVisibility() {\n if (this.isOpen) {\n this._popoverFormMessage.hide();\n }\n else {\n this._popoverFormMessage.show();\n }\n }\n /** @hidden */\n _onOpenStateChanged(isOpen) {\n this.isOpenChange.emit(isOpen);\n this._changeMessageVisibility();\n // focus input control every time popup is closed\n if (!isOpen && this._inputElement) {\n this._inputElement.nativeElement.focus({\n preventScroll: this.preventScrollOnFocus\n });\n }\n if (!isOpen) {\n this._showPopoverContents = false;\n this._changeDetRef.detectChanges();\n }\n }\n /** Method that provides information if model selected date/dates have properly types and are valid */\n isCurrentModelValid() {\n return this._isModelValid(this.date);\n }\n /** Method that provides information if FdDateTime passed as arg has properly types and is valid */\n _isModelValid(date) {\n return (date === null && this.allowNull) || this._dateTimeAdapter.isValid(date);\n }\n /** @hidden */\n _setInput(dateTime) {\n this._inputFieldDate = dateTime ? this._formatDateTime(dateTime) : '';\n this._changeDetRef.detectChanges();\n }\n /** @hidden */\n _refreshCurrentlyDisplayedCalendarDate(date) {\n this._calendarPendingDate = date;\n }\n /**\n * @hidden\n * Format date time entity.\n */\n _formatDateTime(dateTime) {\n const formattedDate = this.customDateTimeFormat\n ? this._dateTimeAdapter.format(dateTime, this.customDateTimeFormat)\n : this._dateTimeAdapter.format(dateTime, this._dateTimeFormats.display.dateTimeInput);\n return formattedDate || '';\n }\n /** @hidden */\n _InitialiseVariablesInMessageService() {\n this._popoverFormMessage.init(this._inputGroupElement);\n this._popoverFormMessage.message = this._formMessageTemplate;\n this._popoverFormMessage.triggers = this._messageTriggers;\n }\n /** @hidden */\n _parseDate(date) {\n return this._dateTimeAdapter.parse(date, this._dateTimeFormats.parse.dateTimeInput);\n }\n /** @hidden */\n _setTempDateTime() {\n this._tempDate = this.date;\n this._tempTime = this.date;\n }\n /** @hidden */\n _calculateTimeOptions() {\n const format = this._dateTimeFormats.display.dateTimeInput;\n // default meridian option based on format option\n this._meridian =\n this.meridian != null ? this.meridian : this._dateTimeAdapter.isTimeFormatIncludesDayPeriod(format);\n // default seconds option based on format option\n this._displaySeconds =\n this.displaySeconds != null\n ? this.displaySeconds\n : this._dateTimeAdapter.isTimeFormatIncludesSeconds(format);\n // default minutes option based on format option\n this._displayMinutes =\n this.displayMinutes != null\n ? this.displayMinutes\n : this._dateTimeAdapter.isTimeFormatIncludesMinutes(format);\n // default hours option based on format option\n this._displayHours =\n this.displayHours != null ? this.displayHours : this._dateTimeAdapter.isTimeFormatIncludesHours(format);\n }\n /** @hidden */\n _setUpMobileMode() {\n const injector = Injector.create({\n providers: [\n { provide: FD_DATETIME_PICKER_COMPONENT, useValue: this },\n {\n provide: FD_DATETIME_PICKER_MOBILE_CONFIG,\n useValue: { pickerTemplate: this._pickerTemplate }\n }\n ],\n parent: this._injector\n });\n this._mobileComponentRef = this._dynamicComponentService.createDynamicComponent({}, (DatetimePickerMobileComponent), {\n container: 'body'\n }, {\n injector\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.DatetimeAdapter, optional: true }, { token: DATE_TIME_FORMATS, optional: true }, { token: i2.PopoverFormMessageService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: DatetimePickerComponent, isStandalone: true, selector: \"fd-datetime-picker\", inputs: { placeholder: \"placeholder\", placement: \"placement\", appendTo: \"appendTo\", disabled: \"disabled\", inputId: \"inputId\", required: \"required\", customDateTimeFormat: \"customDateTimeFormat\", meridian: \"meridian\", displaySeconds: \"displaySeconds\", ariaLabelledBy: \"ariaLabelledBy\", message: \"message\", messageTriggers: \"messageTriggers\", displayMinutes: \"displayMinutes\", displayHours: \"displayHours\", useValidation: \"useValidation\", date: \"date\", isOpen: \"isOpen\", startingDayOfWeek: \"startingDayOfWeek\", activeView: \"activeView\", allowNull: \"allowNull\", keepTwoDigitsTime: \"keepTwoDigitsTime\", state: \"state\", buttonFocusable: \"buttonFocusable\", specialDaysRules: \"specialDaysRules\", yearGrid: \"yearGrid\", aggregatedYearGrid: \"aggregatedYearGrid\", markWeekends: \"markWeekends\", spinnerButtons: \"spinnerButtons\", showWeekNumbers: \"showWeekNumbers\", showFooter: \"showFooter\", processInputOnBlur: [\"processInputOnBlur\", \"processInputOnBlur\", booleanAttribute], preventScrollOnFocus: \"preventScrollOnFocus\", mobile: \"mobile\", mobileConfig: \"mobileConfig\", mobileLandscape: \"mobileLandscape\", mobilePortrait: \"mobilePortrait\", isFullWidth: \"isFullWidth\", disableFunction: \"disableFunction\" }, outputs: { isOpenChange: \"isOpenChange\", activeViewChange: \"activeViewChange\", dateChange: \"dateChange\", calendarChange: \"calendarChange\", timeChange: \"timeChange\", onClose: \"onClose\", touched: \"touched\" }, host: { classAttribute: \"fd-datetime\" }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatetimePickerComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatetimePickerComponent),\n multi: true\n },\n {\n provide: FD_DATETIME_PICKER_COMPONENT,\n useExisting: DatetimePickerComponent\n },\n registerFormItemControl(DatetimePickerComponent),\n PopoverFormMessageService,\n PopoverService,\n DynamicComponentService\n ], viewQueries: [{ propertyName: \"_calendarCmp\", first: true, predicate: CalendarComponent, descendants: true }, { propertyName: \"_inputGroupElement\", first: true, predicate: [\"inputGroupComponent\"], descendants: true, read: ElementRef }, { propertyName: \"_inputElement\", first: true, predicate: InputGroupInputDirective, descendants: true, read: ElementRef }, { propertyName: \"_formMessageTemplate\", first: true, predicate: [\"formMessageTemplate\"], descendants: true }, { propertyName: \"_pickerTemplate\", first: true, predicate: [\"pickerTemplate\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? controlTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n [(isOpen)]=\\\"isOpen\\\"\\n (isOpenChange)=\\\"_onOpenStateChanged($event)\\\"\\n [focusTrapped]=\\\"true\\\"\\n [focusAutoCapture]=\\\"false\\\"\\n [triggers]=\\\"[]\\\"\\n [disabled]=\\\"disabled\\\"\\n [placement]=\\\"placement\\\"\\n [appendTo]=\\\"appendTo\\\"\\n [class.fd-popover-full-width]=\\\"isFullWidth\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body\\n aria-labelledby=\\\"fd-form-message\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-hidden]=\\\"!isOpen\\\"\\n [style.display]=\\\"'block'\\\"\\n >\\n @if (_showPopoverContents) {\\n <ng-template [ngTemplateOutlet]=\\\"pickerTemplate\\\"></ng-template>\\n }\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n #inputGroupComponent\\n [state]=\\\"state\\\"\\n [disabled]=\\\"disabled\\\"\\n [isControl]=\\\"true\\\"\\n [button]=\\\"true\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [class.fd-datetime__mobile-control]=\\\"mobile\\\"\\n glyph=\\\"date-time\\\"\\n [isExpanded]=\\\"isOpen\\\"\\n [glyphAriaLabel]=\\\"'coreDatetimePicker.displayDatetimeToggleLabel' | fdTranslate\\\"\\n [iconTitle]=\\\"'coreDatetimePicker.displayDatetimeToggleLabel' | fdTranslate\\\"\\n (addOnButtonClicked)=\\\"togglePopover()\\\"\\n >\\n <input\\n type=\\\"text\\\"\\n class=\\\"fd-input\\\"\\n fd-input-group-input\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-label]=\\\"'coreDatetimePicker.datetimeInputLabel' | fdTranslate\\\"\\n [attr.id]=\\\"inputId\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"_inputFieldDate | translateDayPeriod\\\"\\n (keydown.f4)=\\\"togglePopover()\\\"\\n (keyup.enter)=\\\"handleInputChange($any($event.target).value, false)\\\"\\n (ngModelChange)=\\\"handleInputChange($event, true)\\\"\\n (blur)=\\\"handleOnTouched($event)\\\"\\n (click)=\\\"mobile && openPopover()\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #formMessageTemplate>\\n @if (_message) {\\n <fd-form-message id=\\\"fd-form-message\\\" [embedded]=\\\"true\\\" [type]=\\\"state\\\">\\n {{ _message }}\\n </fd-form-message>\\n }\\n</ng-template>\\n<ng-template #pickerTemplate>\\n <div class=\\\"fd-datetime__wrapper\\\">\\n <ng-template [ngTemplateOutlet]=\\\"formMessageTemplate\\\"></ng-template>\\n <div\\n class=\\\"fd-datetime__display-type-switcher\\\"\\n [class.fd-datetime__display-type-switcher--desktop]=\\\"!mobile || (mobile && mobileLandscape)\\\"\\n [class.fd-datetime__display-type-switcher--mobile]=\\\"mobile && mobilePortrait\\\"\\n >\\n <fd-segmented-button [(ngModel)]=\\\"_displayType\\\">\\n <button\\n fd-button\\n [label]=\\\"'coreDatetimePicker.displayTypeDateLabel' | fdTranslate\\\"\\n value=\\\"date\\\"\\n ></button>\\n <button\\n fd-button\\n [label]=\\\"'coreDatetimePicker.displayTypeTimeLabel' | fdTranslate\\\"\\n value=\\\"time\\\"\\n ></button>\\n </fd-segmented-button>\\n </div>\\n <ng-content></ng-content>\\n <div class=\\\"fd-datetime__container\\\" [class.fd-datetime__container--mobile-portrait]=\\\"mobile && mobilePortrait\\\">\\n <fd-calendar\\n [ngClass]=\\\"[\\n !mobile && _displayType === 'date' ? 'fd-datetime__active-display-type' : '',\\n mobile && mobilePortrait && _displayType === 'date' ? 'fd-datetime__mobile-display' : ''\\n ]\\\"\\n calType=\\\"single\\\"\\n [activeView]=\\\"activeView\\\"\\n [disableFunction]=\\\"disableFunction || null\\\"\\n [selectedDate]=\\\"_tempDate\\\"\\n [escapeFocusFunction]=\\\"null\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [aggregatedYearGrid]=\\\"aggregatedYearGrid\\\"\\n [yearGrid]=\\\"yearGrid\\\"\\n [startingDayOfWeek]=\\\"startingDayOfWeek\\\"\\n (activeViewChange)=\\\"handleCalendarActiveViewChange($event)\\\"\\n (selectedDateChange)=\\\"handleDateChange($event)\\\"\\n (isValidDateChange)=\\\"setInvalidDateInputHandler($event)\\\"\\n ></fd-calendar>\\n @if (!mobilePortrait) {\\n <div class=\\\"fd-datetime__separator\\\"></div>\\n }\\n @if (isOpen) {\\n <fd-time\\n [ngClass]=\\\"[\\n !mobile && _displayType === 'time' ? 'fd-datetime__active-display-type' : '',\\n mobile && mobilePortrait && _displayType === 'time' ? 'fd-datetime__mobile-display' : ''\\n ]\\\"\\n [disabled]=\\\"disabled\\\"\\n [elementsAtOnce]=\\\"5\\\"\\n [keepTwoDigits]=\\\"keepTwoDigitsTime\\\"\\n [ngModel]=\\\"_tempTime\\\"\\n [spinnerButtons]=\\\"spinnerButtons\\\"\\n [meridian]=\\\"_meridian\\\"\\n [displaySeconds]=\\\"_displaySeconds\\\"\\n [displayMinutes]=\\\"_displayMinutes\\\"\\n [displayHours]=\\\"_displayHours\\\"\\n (ngModelChange)=\\\"handleTimeChange($event)\\\"\\n ></fd-time>\\n }\\n </div>\\n @if (!mobile && showFooter) {\\n <div fd-popover-body-footer>\\n <div class=\\\"fd-datetime__bar\\\" fd-bar barDesign=\\\"footer\\\">\\n <div fd-bar-right>\\n <fd-bar-element>\\n <button\\n fd-button\\n fdType=\\\"emphasized\\\"\\n [disabled]=\\\"!_tempDate\\\"\\n [label]=\\\"'coreDatetimePicker.datetimeOkLabel' | fdTranslate\\\"\\n [ariaLabel]=\\\"'coreDatetimePicker.datetimeOkLabel' | fdTranslate\\\"\\n (click)=\\\"submit()\\\"\\n ></button>\\n </fd-bar-element>\\n <fd-bar-element>\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [label]=\\\"'coreDatetimePicker.datetimeCancelLabel' | fdTranslate\\\"\\n [ariaLabel]=\\\"'coreDatetimePicker.datetimeCancelLabel' | fdTranslate\\\"\\n (click)=\\\"cancel()\\\"\\n ></button>\\n </fd-bar-element>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n</ng-template>\\n\", styles: [\".fd-datetime{display:block}.fd-datetime__bar{overflow:hidden}.fd-datetime__wrapper{max-height:80vh;max-width:80vw}.fd-datetime__mobile-control{display:inline-block;max-width:100%}.fd-datetime__container{display:flex;align-items:center;justify-content:center;margin:0 1rem}.fd-datetime__container--mobile-portrait>*:not(.fd-datetime__mobile-display){display:none!important}.fd-datetime__separator{background-color:#d3d3d3;width:.0625rem;margin:2.625rem 1.75rem;align-self:stretch}.fd-datetime fd-time{width:auto}.fd-datetime__display-type-switcher{margin-top:1rem;display:none;width:100%;justify-content:center}.fd-datetime__display-type-switcher--mobile{display:flex}.fd-popover-full-width{width:100%}@media (max-width: 60rem){.fd-datetime__display-type-switcher{display:flex}.fd-datetime__wrapper{min-width:min(20rem,90vw)}.fd-datetime__container>*:not(.fd-datetime__active-display-type){display:none}}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: PopoverControlComponent, selector: \"fd-popover-control, [fdPopoverControl]\" }, { kind: \"component\", type: PopoverBodyComponent, selector: \"fd-popover-body\", inputs: [\"minWidth\", \"maxWidth\", \"minHeight\", \"maxHeight\"] }, { kind: \"directive\", type: PopoverBodyFooterDirective, selector: \"[fdPopoverBodyFooter], [fd-popover-body-footer]\" }, { kind: \"component\", type: PopoverComponent, selector: \"fd-popover\", inputs: [\"title\", \"trigger\", \"fixedPosition\", \"id\", \"mobile\", \"mobileConfig\", \"preventSpaceKeyScroll\"] }, { kind: \"component\", type: InputGroupComponent, selector: \"fd-input-group\", inputs: [\"placement\", \"required\", \"inline\", \"addOnText\", \"buttonFocusable\", \"type\", \"glyph\", \"glyphFont\", \"button\", \"isControl\", \"showFocus\", \"isExpanded\", \"glyphAriaLabel\", \"addonButtonAriaHidden\", \"iconTitle\", \"ariaLabelledBy\", \"ariaLabel\"], outputs: [\"addOnButtonClicked\", \"search\"] }, { kind: \"directive\", type: InputGroupInputDirective, selector: \"[fdInputGroupInput], [fd-input-group-input]\", inputs: [\"class\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i3.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i3.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i3.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: FormMessageComponent, selector: \"fd-form-message\", inputs: [\"type\", \"static\", \"embedded\", \"class\"] }, { kind: \"component\", type: SegmentedButtonComponent, selector: \"fd-segmented-button\", inputs: [\"toggle\", \"vertical\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { kind: \"component\", type: CalendarComponent, selector: \"fd-calendar\", inputs: [\"selectedDate\", \"selectedMultipleDates\", \"selectedRangeDate\", \"selectedMultipleDateRanges\", \"markWeekends\", \"showWeekNumbers\", \"allowMultipleSelection\", \"mobileLandscape\", \"mobilePortrait\", \"activeView\", \"startingDayOfWeek\", \"calType\", \"id\", \"specialDaysRules\", \"yearGrid\", \"aggregatedYearGrid\", \"rangeHoverEffect\", \"dateRangeFormat\", \"previousButtonDisableFunction\", \"nextButtonDisableFunction\", \"associatedLegendId\", \"escapeFocusFunction\", \"disableFunction\", \"disableRangeStartFunction\", \"disableRangeEndFunction\"], outputs: [\"activeViewChange\", \"selectedDateChange\", \"selectedMultipleDatesChange\", \"selectedRangeDateChange\", \"selectedMultipleDateRangesChange\", \"isValidDateChange\", \"closeCalendar\", \"closeClicked\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: TimeComponent, selector: \"fd-time\", inputs: [\"meridian\", \"validate\", \"keepTwoDigits\", \"disabled\", \"displaySeconds\", \"displayMinutes\", \"displayHours\", \"tablet\", \"elementsAtOnce\", \"time\", \"spinnerButtons\"] }, { kind: \"component\", type: BarComponent, selector: \"[fd-bar]\", inputs: [\"class\", \"barDesign\", \"inPage\", \"inHomePage\", \"clear\", \"size\", \"role\"] }, { kind: \"directive\", type: BarRightDirective, selector: \"[fd-bar-right]\" }, { kind: \"directive\", type: BarElementDirective, selector: \"fd-bar-element\", inputs: [\"fullWidth\"] }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }, { kind: \"pipe\", type: TranslateDayPeriodPipe, name: \"translateDayPeriod\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-datetime-picker', providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatetimePickerComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatetimePickerComponent),\n multi: true\n },\n {\n provide: FD_DATETIME_PICKER_COMPONENT,\n useExisting: DatetimePickerComponent\n },\n registerFormItemControl(DatetimePickerComponent),\n PopoverFormMessageService,\n PopoverService,\n DynamicComponentService\n ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {\n class: 'fd-datetime'\n }, imports: [\n NgTemplateOutlet,\n PopoverControlComponent,\n PopoverBodyComponent,\n PopoverBodyFooterDirective,\n PopoverComponent,\n InputGroupComponent,\n InputGroupInputDirective,\n FormsModule,\n FormMessageComponent,\n SegmentedButtonComponent,\n ButtonComponent,\n CalendarComponent,\n NgClass,\n TimeComponent,\n BarComponent,\n BarRightDirective,\n BarElementDirective,\n FdTranslatePipe,\n TranslateDayPeriodPipe\n ], template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? controlTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n [(isOpen)]=\\\"isOpen\\\"\\n (isOpenChange)=\\\"_onOpenStateChanged($event)\\\"\\n [focusTrapped]=\\\"true\\\"\\n [focusAutoCapture]=\\\"false\\\"\\n [triggers]=\\\"[]\\\"\\n [disabled]=\\\"disabled\\\"\\n [placement]=\\\"placement\\\"\\n [appendTo]=\\\"appendTo\\\"\\n [class.fd-popover-full-width]=\\\"isFullWidth\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body\\n aria-labelledby=\\\"fd-form-message\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-hidden]=\\\"!isOpen\\\"\\n [style.display]=\\\"'block'\\\"\\n >\\n @if (_showPopoverContents) {\\n <ng-template [ngTemplateOutlet]=\\\"pickerTemplate\\\"></ng-template>\\n }\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n #inputGroupComponent\\n [state]=\\\"state\\\"\\n [disabled]=\\\"disabled\\\"\\n [isControl]=\\\"true\\\"\\n [button]=\\\"true\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [class.fd-datetime__mobile-control]=\\\"mobile\\\"\\n glyph=\\\"date-time\\\"\\n [isExpanded]=\\\"isOpen\\\"\\n [glyphAriaLabel]=\\\"'coreDatetimePicker.displayDatetimeToggleLabel' | fdTranslate\\\"\\n [iconTitle]=\\\"'coreDatetimePicker.displayDatetimeToggleLabel' | fdTranslate\\\"\\n (addOnButtonClicked)=\\\"togglePopover()\\\"\\n >\\n <input\\n type=\\\"text\\\"\\n class=\\\"fd-input\\\"\\n fd-input-group-input\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-label]=\\\"'coreDatetimePicker.datetimeInputLabel' | fdTranslate\\\"\\n [attr.id]=\\\"inputId\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"_inputFieldDate | translateDayPeriod\\\"\\n (keydown.f4)=\\\"togglePopover()\\\"\\n (keyup.enter)=\\\"handleInputChange($any($event.target).value, false)\\\"\\n (ngModelChange)=\\\"handleInputChange($event, true)\\\"\\n (blur)=\\\"handleOnTouched($event)\\\"\\n (click)=\\\"mobile && openPopover()\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #formMessageTemplate>\\n @if (_message) {\\n <fd-form-message id=\\\"fd-form-message\\\" [embedded]=\\\"true\\\" [type]=\\\"state\\\">\\n {{ _message }}\\n </fd-form-message>\\n }\\n</ng-template>\\n<ng-template #pickerTemplate>\\n <div class=\\\"fd-datetime__wrapper\\\">\\n <ng-template [ngTemplateOutlet]=\\\"formMessageTemplate\\\"></ng-template>\\n <div\\n class=\\\"fd-datetime__display-type-switcher\\\"\\n [class.fd-datetime__display-type-switcher--desktop]=\\\"!mobile || (mobile && mobileLandscape)\\\"\\n [class.fd-datetime__display-type-switcher--mobile]=\\\"mobile && mobilePortrait\\\"\\n >\\n <fd-segmented-button [(ngModel)]=\\\"_displayType\\\">\\n <button\\n fd-button\\n [label]=\\\"'coreDatetimePicker.displayTypeDateLabel' | fdTranslate\\\"\\n value=\\\"date\\\"\\n ></button>\\n <button\\n fd-button\\n [label]=\\\"'coreDatetimePicker.displayTypeTimeLabel' | fdTranslate\\\"\\n value=\\\"time\\\"\\n ></button>\\n </fd-segmented-button>\\n </div>\\n <ng-content></ng-content>\\n <div class=\\\"fd-datetime__container\\\" [class.fd-datetime__container--mobile-portrait]=\\\"mobile && mobilePortrait\\\">\\n <fd-calendar\\n [ngClass]=\\\"[\\n !mobile && _displayType === 'date' ? 'fd-datetime__active-display-type' : '',\\n mobile && mobilePortrait && _displayType === 'date' ? 'fd-datetime__mobile-display' : ''\\n ]\\\"\\n calType=\\\"single\\\"\\n [activeView]=\\\"activeView\\\"\\n [disableFunction]=\\\"disableFunction || null\\\"\\n [selectedDate]=\\\"_tempDate\\\"\\n [escapeFocusFunction]=\\\"null\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [aggregatedYearGrid]=\\\"aggregatedYearGrid\\\"\\n [yearGrid]=\\\"yearGrid\\\"\\n [startingDayOfWeek]=\\\"startingDayOfWeek\\\"\\n (activeViewChange)=\\\"handleCalendarActiveViewChange($event)\\\"\\n (selectedDateChange)=\\\"handleDateChange($event)\\\"\\n (isValidDateChange)=\\\"setInvalidDateInputHandler($event)\\\"\\n ></fd-calendar>\\n @if (!mobilePortrait) {\\n <div class=\\\"fd-datetime__separator\\\"></div>\\n }\\n @if (isOpen) {\\n <fd-time\\n [ngClass]=\\\"[\\n !mobile && _displayType === 'time' ? 'fd-datetime__active-display-type' : '',\\n mobile && mobilePortrait && _displayType === 'time' ? 'fd-datetime__mobile-display' : ''\\n ]\\\"\\n [disabled]=\\\"disabled\\\"\\n [elementsAtOnce]=\\\"5\\\"\\n [keepTwoDigits]=\\\"keepTwoDigitsTime\\\"\\n [ngModel]=\\\"_tempTime\\\"\\n [spinnerButtons]=\\\"spinnerButtons\\\"\\n [meridian]=\\\"_meridian\\\"\\n [displaySeconds]=\\\"_displaySeconds\\\"\\n [displayMinutes]=\\\"_displayMinutes\\\"\\n [displayHours]=\\\"_displayHours\\\"\\n (ngModelChange)=\\\"handleTimeChange($event)\\\"\\n ></fd-time>\\n }\\n </div>\\n @if (!mobile && showFooter) {\\n <div fd-popover-body-footer>\\n <div class=\\\"fd-datetime__bar\\\" fd-bar barDesign=\\\"footer\\\">\\n <div fd-bar-right>\\n <fd-bar-element>\\n <button\\n fd-button\\n fdType=\\\"emphasized\\\"\\n [disabled]=\\\"!_tempDate\\\"\\n [label]=\\\"'coreDatetimePicker.datetimeOkLabel' | fdTranslate\\\"\\n [ariaLabel]=\\\"'coreDatetimePicker.datetimeOkLabel' | fdTranslate\\\"\\n (click)=\\\"submit()\\\"\\n ></button>\\n </fd-bar-element>\\n <fd-bar-element>\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [label]=\\\"'coreDatetimePicker.datetimeCancelLabel' | fdTranslate\\\"\\n [ariaLabel]=\\\"'coreDatetimePicker.datetimeCancelLabel' | fdTranslate\\\"\\n (click)=\\\"cancel()\\\"\\n ></button>\\n </fd-bar-element>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n</ng-template>\\n\", styles: [\".fd-datetime{display:block}.fd-datetime__bar{overflow:hidden}.fd-datetime__wrapper{max-height:80vh;max-width:80vw}.fd-datetime__mobile-control{display:inline-block;max-width:100%}.fd-datetime__container{display:flex;align-items:center;justify-content:center;margin:0 1rem}.fd-datetime__container--mobile-portrait>*:not(.fd-datetime__mobile-display){display:none!important}.fd-datetime__separator{background-color:#d3d3d3;width:.0625rem;margin:2.625rem 1.75rem;align-self:stretch}.fd-datetime fd-time{width:auto}.fd-datetime__display-type-switcher{margin-top:1rem;display:none;width:100%;justify-content:center}.fd-datetime__display-type-switcher--mobile{display:flex}.fd-popover-full-width{width:100%}@media (max-width: 60rem){.fd-datetime__display-type-switcher{display:flex}.fd-datetime__wrapper{min-width:min(20rem,90vw)}.fd-datetime__container>*:not(.fd-datetime__active-display-type){display:none}}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.DatetimeAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }, { type: i2.PopoverFormMessageService }], propDecorators: { placeholder: [{\n type: Input\n }], placement: [{\n type: Input\n }], appendTo: [{\n type: Input\n }], disabled: [{\n type: Input\n }], inputId: [{\n type: Input\n }], required: [{\n type: Input\n }], customDateTimeFormat: [{\n type: Input\n }], meridian: [{\n type: Input\n }], displaySeconds: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], message: [{\n type: Input\n }], messageTriggers: [{\n type: Input\n }], displayMinutes: [{\n type: Input\n }], displayHours: [{\n type: Input\n }], useValidation: [{\n type: Input\n }], date: [{\n type: Input\n }], isOpen: [{\n type: Input\n }], startingDayOfWeek: [{\n type: Input\n }], activeView: [{\n type: Input\n }], allowNull: [{\n type: Input\n }], keepTwoDigitsTime: [{\n type: Input\n }], state: [{\n type: Input\n }], buttonFocusable: [{\n type: Input\n }], specialDaysRules: [{\n type: Input\n }], yearGrid: [{\n type: Input\n }], aggregatedYearGrid: [{\n type: Input\n }], markWeekends: [{\n type: Input\n }], spinnerButtons: [{\n type: Input\n }], showWeekNumbers: [{\n type: Input\n }], showFooter: [{\n type: Input\n }], processInputOnBlur: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], preventScrollOnFocus: [{\n type: Input\n }], mobile: [{\n type: Input\n }], mobileConfig: [{\n type: Input\n }], mobileLandscape: [{\n type: Input\n }], mobilePortrait: [{\n type: Input\n }], isFullWidth: [{\n type: Input\n }], isOpenChange: [{\n type: Output\n }], activeViewChange: [{\n type: Output\n }], dateChange: [{\n type: Output\n }], calendarChange: [{\n type: Output\n }], timeChange: [{\n type: Output\n }], onClose: [{\n type: Output\n }], touched: [{\n type: Output\n }], _calendarCmp: [{\n type: ViewChild,\n args: [CalendarComponent, { static: false }]\n }], _inputGroupElement: [{\n type: ViewChild,\n args: ['inputGroupComponent', {\n read: ElementRef\n }]\n }], _inputElement: [{\n type: ViewChild,\n args: [InputGroupInputDirective, {\n read: ElementRef\n }]\n }], _formMessageTemplate: [{\n type: ViewChild,\n args: ['formMessageTemplate']\n }], _pickerTemplate: [{\n type: ViewChild,\n args: ['pickerTemplate']\n }], disableFunction: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRldGltZS1waWNrZXIvZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRldGltZS1waWNrZXIvZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsT0FBTyxFQUNILGlCQUFpQixFQUlqQixrQkFBa0IsRUFDckIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQixlQUFlLEVBRWYsc0JBQXNCLEVBQ3pCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUVILG9CQUFvQixFQUNwQix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQzFCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEcsT0FBTyxFQUNILG9CQUFvQixFQUNwQiww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O3NCQURmLEtBQUs7Z0JBUU4sUUFBUTtzQkFEUCxLQUFLO2dCQVdOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFVTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQU9OLGVBQWU7c0JBRGQsS0FBSztnQkFLTixVQUFVO3NCQURULEtBQUs7Z0JBU04sa0JBQWtCO3NCQURqQixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU90QyxvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxNQUFNO2dCQUtTLGdCQUFnQjtzQkFEL0IsTUFBTTtnQkFLRSxVQUFVO3NCQURsQixNQUFNO2dCQUtFLGNBQWM7c0JBRHRCLE1BQU07Z0JBS0UsVUFBVTtzQkFEbEIsTUFBTTtnQkFNRSxPQUFPO3NCQUZmLE1BQU07Z0JBTUUsT0FBTztzQkFEZixNQUFNO2dCQVVLLFlBQVk7c0JBRHZCLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQWEvQyxrQkFBa0I7c0JBSGpCLFNBQVM7dUJBQUMscUJBQXFCLEVBQUU7d0JBQzlCLElBQUksRUFBRSxVQUFVO3FCQUNuQjtnQkFPRCxhQUFhO3NCQUhaLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUU7d0JBQ2pDLElBQUksRUFBRSxVQUFVO3FCQUNuQjtnQkFLZ0Isb0JBQW9CO3NCQURwQyxTQUFTO3VCQUFDLHFCQUFxQjtnQkFLZixlQUFlO3NCQUQvQixTQUFTO3VCQUFDLGdCQUFnQjtnQkFpRzNCLGVBQWU7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBDYWxlbmRhckNvbXBvbmVudCxcbiAgICBDYWxlbmRhclllYXJHcmlkLFxuICAgIERheXNPZldlZWssXG4gICAgRmRDYWxlbmRhclZpZXcsXG4gICAgRmRDYWxlbmRhclZpZXdFbnVtXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jYWxlbmRhcic7XG5pbXBvcnQge1xuICAgIGNvbnZlcnRUb0Rlc2lyZWRGb3JtYXQsXG4gICAgREFURV9USU1FX0ZPUk1BVFMsXG4gICAgRGF0ZXRpbWVBZGFwdGVyLFxuICAgIERhdGVUaW1lRm9ybWF0cyxcbiAgICBUcmFuc2xhdGVEYXlQZXJpb2RQaXBlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5pbXBvcnQge1xuICAgIEZvcm1JdGVtQ29udHJvbCxcbiAgICBGb3JtTWVzc2FnZUNvbXBvbmVudCxcbiAgICBQb3BvdmVyRm9ybU1lc3NhZ2VTZXJ2aWNlLFxuICAgIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7IElucHV0R3JvdXBDb21wb25lbnQsIElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbnB1dC1ncm91cCc7XG5pbXBvcnQge1xuICAgIFBvcG92ZXJCb2R5Q29tcG9uZW50LFxuICAgIFBvcG92ZXJCb2R5Rm9vdGVyRGlyZWN0aXZlLFxuICAgIFBvcG92ZXJDb21wb25lbnQsXG4gICAgUG9wb3ZlckNvbnRyb2xDb21wb25lbnQsXG4gICAgUG9wb3ZlclNlcnZpY2Vcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BvcG92ZXInO1xuaW1wb3J0IHsgUGxhY2VtZW50LCBTcGVjaWFsRGF5UnVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSwgRm9jdXNUcmFwU2VydmljZSwgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCYXJDb21wb25lbnQsIEJhckVsZW1lbnREaXJlY3RpdmUsIEJhclJpZ2h0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgU2VnbWVudGVkQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NlZ21lbnRlZC1idXR0b24nO1xuaW1wb3J0IHsgVGltZUNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90aW1lJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBEYXRldGltZVBpY2tlck1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZXRpbWUtcGlja2VyLW1vYmlsZS9kYXRldGltZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlVGltZVBpY2tlciB9IGZyb20gJy4vZGF0ZXRpbWUtcGlja2VyLm1vZGVsJztcbmltcG9ydCB7IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IEZEX0RBVEVUSU1FX1BJQ0tFUl9DT01QT05FTlQsIEZEX0RBVEVUSU1FX1BJQ0tFUl9NT0JJTEVfQ09ORklHIH0gZnJvbSAnLi90b2tlbnMnO1xuXG4vKipcbiAqIFRoZSBkYXRldGltZSBwaWNrZXIgY29tcG9uZW50IGlzIGFuIG9waW5pb25hdGVkIGNvbXBvc2l0aW9uIG9mIHRoZSBmZC1wb3BvdmVyLFxuICogZmQtY2FsZW5kYXIgYW5kIGZkLXRpbWUgY29tcG9uZW50cyB0byBhY2NvbXBsaXNoIHRoZSBVSSBwYXR0ZXJuIGZvciBwaWNraW5nIGEgZGF0ZSBhbmQgdGltZS5cbiAqIFN1cHBvcnRzIEFuZ3VsYXIgRm9ybXMuXG4gKiBgYGBodG1sXG4gKiA8ZmQtZGF0ZS10aW1lLXBpY2tlciBbKG5nTW9kZWwpXT1cImRhdGVUaW1lXCI+PC9mZC1kYXRlLXRpbWUtcGlja2VyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtZGF0ZXRpbWUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRldGltZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfREFURVRJTUVfUElDS0VSX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBEYXRldGltZVBpY2tlckNvbXBvbmVudFxuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlckZvcm1JdGVtQ29udHJvbChEYXRldGltZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgIFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIFBvcG92ZXJTZXJ2aWNlLFxuICAgICAgICBEeW5hbWljQ29tcG9uZW50U2VydmljZVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtZGF0ZXRpbWUnXG4gICAgfSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIFBvcG92ZXJDb250cm9sQ29tcG9uZW50LFxuICAgICAgICBQb3BvdmVyQm9keUNvbXBvbmVudCxcbiAgICAgICAgUG9wb3ZlckJvZHlGb290ZXJEaXJlY3RpdmUsXG4gICAgICAgIFBvcG92ZXJDb21wb25lbnQsXG4gICAgICAgIElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgICAgIElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIEZvcm1NZXNzYWdlQ29tcG9uZW50LFxuICAgICAgICBTZWdtZW50ZWRCdXR0b25Db21wb25lbnQsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIFRpbWVDb21wb25lbnQsXG4gICAgICAgIEJhckNvbXBvbmVudCxcbiAgICAgICAgQmFyUmlnaHREaXJlY3RpdmUsXG4gICAgICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgVHJhbnNsYXRlRGF5UGVyaW9kUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQ8RD5cbiAgICBpbXBsZW1lbnRzXG4gICAgICAgIERhdGVUaW1lUGlja2VyPEQ+LFxuICAgICAgICBPbkluaXQsXG4gICAgICAgIE9uRGVzdHJveSxcbiAgICAgICAgT25DaGFuZ2VzLFxuICAgICAgICBBZnRlclZpZXdJbml0LFxuICAgICAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICAgICAgVmFsaWRhdG9yLFxuICAgICAgICBGb3JtSXRlbUNvbnRyb2xcbntcbiAgICAvKiogUGxhY2Vob2xkZXIgZm9yIHRoZSBpbm5lciBpbnB1dCBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXIgPSAnJztcblxuICAgIC8qKlxuICAgICAqICBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BvdmVyLiBJdCBjYW4gYmUgb25lIG9mOiB0b3AsIHRvcC1zdGFydCwgdG9wLWVuZCwgYm90dG9tLFxuICAgICAqICBib3R0b20tc3RhcnQsIGJvdHRvbS1lbmQsIHJpZ2h0LCByaWdodC1zdGFydCwgcmlnaHQtZW5kLCBsZWZ0LCBsZWZ0LXN0YXJ0LCBsZWZ0LWVuZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgICAvKiogVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGFwcGVuZGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG86IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogSWQgYXR0cmlidXRlIGZvciBpbnB1dCBlbGVtZW50IGluc2lkZSBEYXRlVGltZVBpY2tlciBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0SWQ6IHN0cmluZztcblxuICAgIC8qKiBJZiBpdCBpcyBtYW5kYXRvcnkgZmllbGQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogRGVmaW5lIGEgY3VzdG9tIGRhdGV0aW1lIGZvcm1hdC4gQ2FuIGJlIGEgc3RyaW5nIGZvciBEYXlqc0RhdGV0aW1lQWRhcHRlciBvciBvYmplY3QgZm9yIEZkRGF0ZXRpbWVBZGFwdGVyICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VzdG9tRGF0ZVRpbWVGb3JtYXQ6IHVua25vd247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0aW1lIGNvbXBvbmVudCBzaG91bGQgYmUgbWVyaWRpYW4gKGFtL3BtKS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIG1lcmlkaWFuOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdGltZSBjb21wb25lbnQgc2hvd3Mgc2Vjb25kcy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlTZWNvbmRzOiBib29sZWFuO1xuXG4gICAgLyoqIGFyaWEtbGFiZWxsZWRieSBmb3IgZWxlbWVudCBkZXNjcmliaW5nIGRhdGUtcGlja2VyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogVGV4dCBkaXNwbGF5ZWQgaW4gbWVzc2FnZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKiBUaGUgdHJpZ2dlciBldmVudHMgdGhhdCB3aWxsIG9wZW4vY2xvc2UgdGhlIG1lc3NhZ2UgYm94LlxuICAgICAqICBBY2NlcHRzIGFueSBbSFRNTCBET00gRXZlbnRzXShodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL2RvbV9vYmpfZXZlbnQuYXNwKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtZXNzYWdlVHJpZ2dlcnModHJpZ2dlcnM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VUcmlnZ2VycyA9IHRyaWdnZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRpbWUgY29tcG9uZW50IHNob3dzIG1pbnV0ZXMuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2NhbGUgZm9ybWF0IG9wdGlvblxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5TWludXRlczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRpbWUgY29tcG9uZW50IHNob3dzIGhvdXJzLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgbG9jYWxlIGZvcm1hdCBvcHRpb25cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUhvdXJzOiBib29sZWFuO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gcGVyZm9ybSB2aXN1YWwgdmFsaWRhdGlvbiBvbiB0aGUgcGlja2VyIGlucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdXNlVmFsaWRhdGlvbiA9IHRydWU7XG5cbiAgICAvKiogQ3VycmVudCBzZWxlY3RlZCBkYXRlLiBUd28td2F5IGJpbmRpbmcgaXMgc3VwcG9ydGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBpcyBvcGVuLiBUd28td2F5IGJpbmRpbmcgaXMgc3VwcG9ydGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICAvKiogVGhlIGRpc2FibGVGdW5jdGlvbiBmb3IgdGhlIGNhbGVuZGFyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRpbmdEYXlPZldlZWs6IERheXNPZldlZWsgPSAxO1xuXG4gICAgLyoqIEFjdHVhbGx5IHNob3duIGFjdGl2ZSB2aWV3IG9uZSBvZiAnZGF5JyB8ICdtb250aCcgfCAneWVhcicgaW4gY2FsZW5kYXIgY29tcG9uZW50Ki9cbiAgICBASW5wdXQoKVxuICAgIGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3ID0gRmRDYWxlbmRhclZpZXdFbnVtLkRheTtcblxuICAgIC8qKiBXaGV0aGVyIGEgbnVsbCBpbnB1dCBpcyBjb25zaWRlcmVkIHZhbGlkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dOdWxsID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBJbnB1dCB3aGVuIHNldCB0byB0cnVlIHRpbWUgY29tcG9uZW50IHdpbGwgdXNlIDIgZGlnaXRzIGZvciBlYWNoIG51bWJlci5cbiAgICAgKiBGb3IgZXhhbXBsZSA5IHdpbGwgYmVjb21lIDA5XG4gICAgICogYnV0IDEyIHdpbGwgYmUga2VwdCBhcyAxMi5cbiAgICAgKiBPbmx5IHVzZXMgYnkgdGltZSBjb21wb25lbnQgYW5kIGRvZXMgbm90IGNoYW5nZSBpbnB1dCBmb3JtYXRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGtlZXBUd29EaWdpdHNUaW1lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHN0YXRlIG9mIHRoZSBmb3JtIGNvbnRyb2wgLSBhcHBsaWVzIGNzcyBjbGFzc2VzLlxuICAgICAqICBBbHNvIHRoaXMgaXMgYXBwbGllZCB0byBtZXNzYWdlLlxuICAgICAqICBDYW4gYmUgYHN1Y2Nlc3NgLCBgZXJyb3JgLCBgd2FybmluZ2AsIGBpbmZvcm1hdGlvbmAgb3IgYmxhbmsgZm9yIGRlZmF1bHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc3RhdGUoc3RhdGU6IEZvcm1TdGF0ZXMpIHtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG5cbiAgICBnZXQgc3RhdGUoKTogRm9ybVN0YXRlcyB7XG4gICAgICAgIGlmICh0aGlzLnVzZVZhbGlkYXRpb24gJiYgdGhpcy5pc0ludmFsaWREYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBQb3BvdmVyIGlzIHRvZ2dsZWQgd2l0aCBmNCBrZXlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lhbCBkYXlzIG1hcmssIGl0IGNhbiBiZSB1c2VkIGJ5IHBhc3NpbmcgYXJyYXkgb2Ygb2JqZWN0IHdpdGhcbiAgICAgKiBTcGVjaWFsIGRheSBudW1iZXIsIGxpc3QgMS0yMCBbY2xhc3M6YGZkLWNhbGVuZGFyX19pdGVtLS1sZWdlbmQte3tudW1iZXJ9fWBdIGlzIGF2YWlsYWJsZSB0aGVyZTpcbiAgICAgKiBodHRwczovL3NhcC5naXRodWIuaW8vZnVuZGFtZW50YWwtc3R5bGVzL2NvbXBvbmVudHMvY2FsZW5kYXIuaHRtbCBjYWxlbmRhciBzcGVjaWFsIGRheXMgc2VjdGlvblxuICAgICAqIFJ1bGUgYWNjZXB0cyBtZXRob2Qgd2l0aCBGZERhdGUgb2JqZWN0IGFzIGEgcGFyYW1ldGVyLiBleDpcbiAgICAgKiBgcnVsZTogKGZkRGF0ZTogRmREYXRlKSA9PiBmZERhdGUuZ2V0RGF5KCkgPT09IDFgLCB3aGljaCB3aWxsIG1hcmsgYWxsIHN1bmRheXMgYXMgc3BlY2lhbCBkYXkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzcGVjaWFsRGF5c1J1bGVzOiBTcGVjaWFsRGF5UnVsZTxEPltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIHllYXIgZ3JpZCxcbiAgICAgKiBSb3csIENvbHVtbnMgYW5kIG1ldGhvZCB0byBkaXNwbGF5IHllYXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB5ZWFyR3JpZDogQ2FsZW5kYXJZZWFyR3JpZCA9IHtcbiAgICAgICAgcm93czogNCxcbiAgICAgICAgY29sczogNVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIGFnZ3JlZ2F0ZWQgeWVhciBncmlkLFxuICAgICAqIFJvdywgQ29sdW1ucyBhbmQgbWV0aG9kIHRvIGRpc3BsYXkgeWVhciBjYW4gYmUgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFnZ3JlZ2F0ZWRZZWFyR3JpZDogQ2FsZW5kYXJZZWFyR3JpZCA9IHtcbiAgICAgICAgcm93czogNCxcbiAgICAgICAgY29sczogM1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gbWFyayBzdW5kYXkvc2F0dXJkYXkgd2l0aCBgZmQtY2FsZW5kYXJfX2l0ZW0tLXdlZWtlbmRgIGNsYXNzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBtYXJrV2Vla2VuZHMgPSB0cnVlO1xuXG4gICAgLyoqIEBJbnB1dCBXaGV0aGVyIHRvIHNob3cgc3Bpbm5lciBidXR0b25zICovXG4gICAgQElucHV0KClcbiAgICBzcGlubmVyQnV0dG9ucyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gc2hvdyB3ZWVrIG51bWJlcnMgbmV4dCB0byBkYXlzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93V2Vla051bWJlcnMgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgb3Igbm90IHRvIHNob3cgdGhlIGRhdGV0aW1lIHBpY2tlciBmb290ZXIgd2l0aCBPSy9jYW5jZWwgYnV0dG9ucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dGb290ZXIgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byByZWNhbGN1bGF0ZSB2YWx1ZSBmcm9tIHRoZSBpbnB1dCBhcyB1c2VyIHR5cGVzIG9yIG9uIGJsdXIuXG4gICAgICogQnkgZGVmYXVsdCwgdXBkYXRlcyB0aGUgdmFsdWUgYXMgdXNlciB0eXBlcy5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHByb2Nlc3NJbnB1dE9uQmx1ciA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBwcmV2ZW50IHBhZ2Ugc2Nyb2xsaW5nIHdoZW4gZm9jdXNpbmcgZGF0ZSBwaWNrZXIgaW5wdXQgZmllbGQgYWZ0ZXIgY2FsZW5kYXIgaGFzIGJlZW4gY2xvc2VkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJldmVudFNjcm9sbE9uRm9jdXMgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHJlbmRlciBkYXRldGltZSBwaWNrZXIgaW4gbW9iaWxlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGUgPSBmYWxzZTtcblxuICAgIC8qKiBNb2JpbGUgbW9kZSBjb25maWd1cmF0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlQ29uZmlnOiBNb2JpbGVNb2RlQ29uZmlnO1xuXG4gICAgLyoqIFdoZXRoZXIgY2FsZW5kYXIgaXMgdXNlZCBpbnNpZGUgbW9iaWxlIGluIGxhbmRzY2FwZSBtb2RlLCBpdCBhbHNvIGFkZHMgY2xvc2UgYnV0dG9uIG9uIHJpZ2h0IHNpZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUxhbmRzY2FwZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgY2FsZW5kYXIgaXMgdXNlZCBpbnNpZGUgbW9iaWxlIGluIHBvcnRyYWl0IG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZVBvcnRyYWl0ID0gZmFsc2U7XG5cbiAgICAvKiogVG8gc2V0IGlucHV0IHdpZHRoIDEwMCUgKi9cbiAgICBASW5wdXQoKSBpc0Z1bGxXaWR0aCA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc3RhdGUgb2YgdGhlIGlzT3BlbiBwcm9wZXJ0eSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGlzT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBjYWxlbmRhciBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZVZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGZENhbGVuZGFyVmlldz4gPSBuZXcgRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZGF0ZSBjaGFuZ2VzLiBUaGlzIGNhbiBiZSBhIHRpbWUgb3IgZGF5IGNoYW5nZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBkYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBkYXkgY2hhbmdlcyBmcm9tIHRoZSBjYWxlbmRhci4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjYWxlbmRhckNoYW5nZTogRXZlbnRFbWl0dGVyPEQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdGltZSBjaGFuZ2VzIGZyb20gdGhlIHRpbWUgY29tcG9uZW50LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHRpbWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEPiA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gcG9wb3ZlciBjbG9zZXMuICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgcmVhZG9ubHkgb25DbG9zZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkYXRlcGlja2VyIGNoYW5nZXMgaXQncyBcInRvdWNoZWRcIiBzdGF0ZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB0b3VjaGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogSW5kaWNhdGVzIHdoZW4gZGF0ZXRpbWUgaW5wdXQgaXMgaW4gaW52YWxpZCBzdGF0ZS4gKi9cbiAgICBnZXQgaXNJbnZhbGlkRGF0ZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ICYmIHRoaXMuX3RvdWNoZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmVmZXJlbmNlIHRvIHRoZSBpbm5lciBjYWxlbmRhciBjb21wb25lbnQuICovXG4gICAgQFZpZXdDaGlsZChDYWxlbmRhckNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHJpdmF0ZSBzZXQgX2NhbGVuZGFyQ21wKGNhbGVuZGFyOiBDYWxlbmRhckNvbXBvbmVudDxEPikge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNhbGVuZGFyPy5zZXRDdXJyZW50bHlEaXNwbGF5ZWQodGhpcy5fY2FsZW5kYXJQZW5kaW5nRGF0ZSk7XG4gICAgICAgICAgICBjYWxlbmRhcj8uaW5pdGlhbEZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9jYWxlbmRhckNvbXBvbmVudCA9IGNhbGVuZGFyO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cENvbXBvbmVudCcsIHtcbiAgICAgICAgcmVhZDogRWxlbWVudFJlZlxuICAgIH0pXG4gICAgX2lucHV0R3JvdXBFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSwge1xuICAgICAgICByZWFkOiBFbGVtZW50UmVmXG4gICAgfSlcbiAgICBfaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdmb3JtTWVzc2FnZVRlbXBsYXRlJylcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtTWVzc2FnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdwaWNrZXJUZW1wbGF0ZScpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcGlja2VyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYWxlbmRhckNvbXBvbmVudDogQ2FsZW5kYXJDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2VUcmlnZ2Vyczogc3RyaW5nW10gPSBbJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBEYXRlIG9mIHRoZSBpbnB1dCBmaWVsZC4gSW50ZXJuYWwgdXNlLlxuICAgICAqIEZvciBwcm9ncmFtbWF0aWMgc2VsZWN0aW9uLCB1c2UgdHdvLXdheSBiaW5kaW5nIG9uIHRoZSBkYXRlIGlucHV0LlxuICAgICAqL1xuICAgIF9pbnB1dEZpZWxkRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc0ludmFsaWREYXRlSW5wdXQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuIFRoZSB0ZW1wb3JhcnkgVGltZSBvYmplY3QgZm9yIHVzZSBiZWZvcmUgJ09LJyBpcyBwcmVzc2VkLiBJbnRlcm5hbCB1c2UuICovXG4gICAgX3RlbXBUaW1lOiBOdWxsYWJsZTxEPjtcblxuICAgIC8qKiBAaGlkZGVuIFRoZSB0ZW1wb3JhcnkgQ2FsZW5kYXJEYXkgb2JqZWN0IGZvciB1c2UgYmVmb3JlICdPSycgaXMgcHJlc3NlZC4gSW50ZXJuYWwgdXNlLiAqL1xuICAgIF90ZW1wRGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXJpZGlhbjogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXlTZWNvbmRzOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlzcGxheU1pbnV0ZXM6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5SG91cnM6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiB3aGV0aGVyIHRvIGRpc3BsYXkgZGF0ZSBvciB0aW1lIGluIG1vYmlsZSBtb2RlICovXG4gICAgX2Rpc3BsYXlUeXBlOiAnZGF0ZScgfCAndGltZScgPSAnZGF0ZSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93UG9wb3ZlckNvbnRlbnRzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0YXRlOiBGb3JtU3RhdGVzID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxlbmRhclBlbmRpbmdEYXRlOiBOdWxsYWJsZTxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9keW5hbWljQ29tcG9uZW50U2VydmljZSA9IGluamVjdChEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZvY3VzVHJhcFNlcnZpY2UgPSBpbmplY3QoRm9jdXNUcmFwU2VydmljZSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tb2JpbGVDb21wb25lbnRSZWY6IE51bGxhYmxlPENvbXBvbmVudFJlZjxEYXRldGltZVBpY2tlck1vYmlsZUNvbXBvbmVudDxEPj4+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b3VjaGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0UmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgLy8gVXNlIEBPcHRpb25hbCB0byBhdm9pZCBhbmd1bGFyIGluamVjdGlvbiBlcnJvciBtZXNzYWdlIGFuZCB0aHJvdyBvdXIgb3duIHdoaWNoIGlzIG1vcmUgcHJlY2lzZSBvbmVcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzLFxuICAgICAgICBwcml2YXRlIF9wb3BvdmVyRm9ybU1lc3NhZ2U6IFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlVGltZUFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvcignRGF0ZVRpbWVBZGFwdGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlVGltZUZvcm1hdHMpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvcignREFURV9USU1FX0ZPUk1BVFMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlZmF1bHQgbW9kZWwgdmFsdWVcbiAgICAgICAgdGhpcy5kYXRlID0gX2RhdGVUaW1lQWRhcHRlci5ub3coKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICogQHBhcmFtIGZkRGF0ZSBGZERhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVGdW5jdGlvbjogKHZhbHVlOiBEKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IEQgfCBudWxsKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFRlbXBEYXRlVGltZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFsnZGlzcGxheUhvdXJzJywgJ2Rpc3BsYXlNaW51dGVzJywgJ2Rpc3BsYXlTZWNvbmRzJywgJ21lcmlkaWFuJ10uc29tZSgoaW5wdXQpID0+IGlucHV0IGluIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVUaW1lT3B0aW9ucygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdpc09wZW4nIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyQ29udGVudHMgPSB0aGlzLmlzT3BlbjtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUZW1wRGF0ZVRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVRpbWVPcHRpb25zKCk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5waXBlKGZpbHRlcigoKSA9PiB0aGlzLl9pbnB1dEZpZWxkRGF0ZSAhPT0gJycpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldElucHV0KHRoaXMuZGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlVGltZU9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX21vYmlsZUNvbXBvbmVudFJlZj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9Jbml0aWFsaXNlVmFyaWFibGVzSW5NZXNzYWdlU2VydmljZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VXBNb2JpbGVNb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgYmluZGluZ3MgYWZ0ZXIgcmVuZGVyaW5nXG4gICAgICAgIC8vIGlzIG5lZWRlZCB0byBwcmVwZXJseSByZWZsZWN0IGVycm9yIHN0YXRlXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIFZhbGlkYXRvciBJbnRlcmZhY2UsIGFkZHMgdmFsaWRhdGlvbiBzdXBwb3J0IGZvciBmb3Jtc1xuICAgICAqL1xuICAgIHZhbGlkYXRlKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDdXJyZW50TW9kZWxWYWxpZCgpICYmICF0aGlzLl9pc0ludmFsaWREYXRlSW5wdXRcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBkYXRlVmFsaWRhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBUb2dnbGVzIHRoZSBwb3BvdmVyLiAqL1xuICAgIHRvZ2dsZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlblBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IGhhbmRsZXMgY2FsZW5kYXIgYWN0aXZlIHZpZXcgY2hhbmdlIGFuZCB0aHJvd3MgZXZlbnQuXG4gICAgICovXG4gICAgaGFuZGxlQ2FsZW5kYXJBY3RpdmVWaWV3Q2hhbmdlKGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0NoYW5nZS5lbWl0KGFjdGl2ZVZpZXcpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBoYW5kbGVzIGJsdXIgZXZlbnRzIG9uIGRhdGV0aW1lIHBpY2tlciBpbnB1dCAqL1xuICAgIGhhbmRsZU9uVG91Y2hlZChldmVudD86IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdG91Y2hlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMudG91Y2hlZC5uZXh0KCk7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZSgoPEhUTUxJbnB1dEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS52YWx1ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE9wZW5zIHRoZSBwb3BvdmVyLiAqL1xuICAgIG9wZW5Qb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlPy5wYXVzZUN1cnJlbnRGb2N1c1RyYXAoKTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyQ29udGVudHMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX29uT3BlblN0YXRlQ2hhbmdlZCh0aGlzLmlzT3Blbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIHRoZSBwb3BvdmVyIGFuZCByZWZyZXNoIG1vZGVsICovXG4gICAgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNsb3NlLmVtaXQoKTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fb25PcGVuU3RhdGVDaGFuZ2VkKHRoaXMuaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fZm9jdXNUcmFwU2VydmljZT8udW5wYXVzZUN1cnJlbnRGb2N1c1RyYXAoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXJDb250ZW50cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0SW52YWxpZERhdGVJbnB1dEhhbmRsZXIoaXNJbnZhbGlkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9IGlzSW52YWxpZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChzZWxlY3RlZDogYW55KSA9PiB7IHZvaWQgfSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3IgdGhhdCBhbGxvd3MgdG8gdXNlIFsobmdNb2RlbCldIG9yIGZvcm1zXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZShzZWxlY3RlZDogTnVsbGFibGU8RD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5fcGFyc2VEYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzTW9kZWxWYWxpZCh0aGlzLmRhdGUpO1xuICAgICAgICBpZiAodGhpcy5pc0N1cnJlbnRNb2RlbFZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFRlbXBEYXRlVGltZSgpO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZSh0aGlzLmRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldElucHV0KHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCBieSBldmVudHMgZnJvbSBjYWxlbmRhciBjb21wb25lbnQsIHdoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgZGF0ZSBjaGFuZ2VkLlxuICAgICAqIElmIGludmFsaWQgdGltZSBtb2RlbCBpcyBkZXRlY3RlZCwgaXQgdGFrZXMgdGltZSBtb2RlbCBkYXRhIGZyb20gVGltZUNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBoYW5kbGVEYXRlQ2hhbmdlKGRhdGU6IEQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGVtcERhdGUgPSBkYXRlO1xuICAgICAgICBpZiAoIXRoaXMuc2hvd0Zvb3Rlcikge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gdGltZSBjb21wb25lbnQsIHdoZW4gdGhlcmUgaXMgc2VsZWN0ZWQgdGltZSBjaGFuZ2VkXG4gICAgICovXG4gICAgaGFuZGxlVGltZUNoYW5nZSh0aW1lOiBEKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RlbXBUaW1lID0gdGltZTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dGb290ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gJ09LJyBidXR0b24gaXMgcHJlc3NlZC5cbiAgICAgKi9cbiAgICBzdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIEluaXRpYWxpemUgZGF0ZSBhbmQgdGltZSB2YWx1ZXMsIGRlZmF1bHRpbmcgdG8gdGhlIGN1cnJlbnQgZGF0ZSBpZiBpbnZhbGlkXG4gICAgICAgIGxldCBjdXJyZW50RGF0ZSA9IHRoaXMuX3RlbXBEYXRlITtcbiAgICAgICAgbGV0IGN1cnJlbnRUaW1lID0gdGhpcy5fdGVtcFRpbWUhO1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgZGF0ZSBhbmQgdGltZSB2YWx1ZXMsIGRlZmF1bHRpbmcgdG8gdGhlIGN1cnJlbnQgZGF0ZSBpZiBpbnZhbGlkXG4gICAgICAgIGlmICghdGhpcy5fdGVtcERhdGUgfHwgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuX3RlbXBEYXRlKSkge1xuICAgICAgICAgICAgY3VycmVudERhdGUgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIudG9kYXkoKSE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl90ZW1wVGltZSB8fCAhdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5fdGVtcFRpbWUpKSB7XG4gICAgICAgICAgICBjdXJyZW50VGltZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpITtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRhdGUgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuc2V0VGltZShcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0SG91cnMoY3VycmVudFRpbWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNaW51dGVzKGN1cnJlbnRUaW1lKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0U2Vjb25kcyhjdXJyZW50VGltZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgdGhpcy5kYXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5pc0N1cnJlbnRNb2RlbFZhbGlkKCk7XG5cbiAgICAgICAgdGhpcy5fc2V0SW5wdXQodGhpcy5kYXRlKTtcblxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZGF0ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0Zvb3Rlcikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuICdDYW5jZWwnIGJ1dHRvbiBpcyBwcmVzc2VkLlxuICAgICAqL1xuICAgIGNhbmNlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGVtcERhdGUgPSB0aGlzLmRhdGU7XG4gICAgICAgIHRoaXMuX3RlbXBUaW1lID0gdGhpcy5kYXRlO1xuICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMb29rcyBsaWtlIG5vIG9uZSB1c2VzIGl0LiBTaG91bGQgYmUgcmVtb3ZlZD9cbiAgICAgKi9cbiAgICBmb2N1c0Fycm93TGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignIycgKyB0aGlzLl9jYWxlbmRhckNvbXBvbmVudC5pZCArICctbGVmdC1hcnJvdycpKSB7XG4gICAgICAgICAgICB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyMnICsgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuaWQgKyAnLWxlZnQtYXJyb3cnKS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHRyYW5zZm9ybWluZyBzdHJpbmcgdG8gZGF0ZXRpbWUsIGRlcGVuZGluZyBvbiB0eXBlIG9yXG4gICAgICogdmFsaWRhdGlvbiB0aGUgcmVzdWx0cyBhcmUgZGlmZmVyZW50LiBJdCBhbHNvIGNoYW5nZXMgdG8gc3RhdGUgb2YgX2lzSW52YWxpZERhdGVJbnB1dC5cbiAgICAgKi9cbiAgICBoYW5kbGVJbnB1dENoYW5nZShpbnB1dFN0cjogc3RyaW5nLCBpc1R5cGVFdmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoKGlzVHlwZUV2ZW50ICYmIHRoaXMucHJvY2Vzc0lucHV0T25CbHVyKSB8fCAoIWlzVHlwZUV2ZW50ICYmICF0aGlzLnByb2Nlc3NJbnB1dE9uQmx1cikpIHtcbiAgICAgICAgICAgIC8vIGlmIHByb2Nlc3NJbnB1dE9uQmx1ciA9PT0gdHJ1ZSwgaWdub3JlIHR5cGUgZXZlbnRcbiAgICAgICAgICAgIC8vIGlmIHByb2Nlc3NJbnB1dE9uQmx1ciA9PT0gZmFsc2UsIGlnbm9yZSBibHVyL2VudGVyIGV2ZW50XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSBpbnB1dFN0ciA/PyAnJztcbiAgICAgICAgaWYgKCFpbnB1dFN0cikge1xuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuYWxsb3dOdWxsO1xuICAgICAgICAgICAgdGhpcy5kYXRlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dFN0ciA9IGNvbnZlcnRUb0Rlc2lyZWRGb3JtYXQoaW5wdXRTdHIudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5fcGFyc2VEYXRlKGlucHV0U3RyKTtcbiAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzTW9kZWxWYWxpZCh0aGlzLmRhdGUpO1xuXG4gICAgICAgIGlmICghdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUZW1wRGF0ZVRpbWUoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5kYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdXNlZCB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlIGZvciBtb2JpbGUgbW9kZS4gKi9cbiAgICBkaWFsb2dEaXNtaXNzKHZhbHVlOiBEKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZXRJbnB1dCh0aGlzLmRhdGUpO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5kYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UuaGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLnNob3coKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uT3BlblN0YXRlQ2hhbmdlZChpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdChpc09wZW4pO1xuICAgICAgICB0aGlzLl9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpO1xuICAgICAgICAvLyBmb2N1cyBpbnB1dCBjb250cm9sIGV2ZXJ5IHRpbWUgcG9wdXAgaXMgY2xvc2VkXG4gICAgICAgIGlmICghaXNPcGVuICYmIHRoaXMuX2lucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoe1xuICAgICAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6IHRoaXMucHJldmVudFNjcm9sbE9uRm9jdXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckNvbnRlbnRzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGlmIG1vZGVsIHNlbGVjdGVkIGRhdGUvZGF0ZXMgaGF2ZSBwcm9wZXJseSB0eXBlcyBhbmQgYXJlIHZhbGlkICovXG4gICAgaXNDdXJyZW50TW9kZWxWYWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTW9kZWxWYWxpZCh0aGlzLmRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBpZiBGZERhdGVUaW1lIHBhc3NlZCBhcyBhcmcgaGFzIHByb3Blcmx5IHR5cGVzIGFuZCBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzTW9kZWxWYWxpZChkYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKGRhdGUgPT09IG51bGwgJiYgdGhpcy5hbGxvd051bGwpIHx8IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0SW5wdXQoZGF0ZVRpbWU6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gZGF0ZVRpbWUgPyB0aGlzLl9mb3JtYXREYXRlVGltZShkYXRlVGltZSkgOiAnJztcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZTogTnVsbGFibGU8RD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJQZW5kaW5nRGF0ZSA9IGRhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZvcm1hdCBkYXRlIHRpbWUgZW50aXR5LlxuICAgICAqL1xuICAgIHByaXZhdGUgX2Zvcm1hdERhdGVUaW1lKGRhdGVUaW1lOiBEKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZTogc3RyaW5nID0gdGhpcy5jdXN0b21EYXRlVGltZUZvcm1hdFxuICAgICAgICAgICAgPyB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KGRhdGVUaW1lLCB0aGlzLmN1c3RvbURhdGVUaW1lRm9ybWF0KVxuICAgICAgICAgICAgOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KGRhdGVUaW1lLCB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS5kYXRlVGltZUlucHV0KTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZERhdGUgfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9Jbml0aWFsaXNlVmFyaWFibGVzSW5NZXNzYWdlU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLmluaXQodGhpcy5faW5wdXRHcm91cEVsZW1lbnQpO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZSA9IHRoaXMuX2Zvcm1NZXNzYWdlVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS50cmlnZ2VycyA9IHRoaXMuX21lc3NhZ2VUcmlnZ2VycztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BhcnNlRGF0ZShkYXRlOiB1bmtub3duKTogRCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnBhcnNlKGRhdGUsIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5wYXJzZS5kYXRlVGltZUlucHV0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFRlbXBEYXRlVGltZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGVtcERhdGUgPSB0aGlzLmRhdGU7XG4gICAgICAgIHRoaXMuX3RlbXBUaW1lID0gdGhpcy5kYXRlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVGltZU9wdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5LmRhdGVUaW1lSW5wdXQ7XG5cbiAgICAgICAgLy8gZGVmYXVsdCBtZXJpZGlhbiBvcHRpb24gYmFzZWQgb24gZm9ybWF0IG9wdGlvblxuICAgICAgICB0aGlzLl9tZXJpZGlhbiA9XG4gICAgICAgICAgICB0aGlzLm1lcmlkaWFuICE9IG51bGwgPyB0aGlzLm1lcmlkaWFuIDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVGltZUZvcm1hdEluY2x1ZGVzRGF5UGVyaW9kKGZvcm1hdCk7XG5cbiAgICAgICAgLy8gZGVmYXVsdCBzZWNvbmRzIG9wdGlvbiBiYXNlZCBvbiBmb3JtYXQgb3B0aW9uXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlTZWNvbmRzID1cbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVNlY29uZHMgIT0gbnVsbFxuICAgICAgICAgICAgICAgID8gdGhpcy5kaXNwbGF5U2Vjb25kc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVGltZUZvcm1hdEluY2x1ZGVzU2Vjb25kcyhmb3JtYXQpO1xuXG4gICAgICAgIC8vIGRlZmF1bHQgbWludXRlcyBvcHRpb24gYmFzZWQgb24gZm9ybWF0IG9wdGlvblxuICAgICAgICB0aGlzLl9kaXNwbGF5TWludXRlcyA9XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlNaW51dGVzICE9IG51bGxcbiAgICAgICAgICAgICAgICA/IHRoaXMuZGlzcGxheU1pbnV0ZXNcbiAgICAgICAgICAgICAgICA6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1RpbWVGb3JtYXRJbmNsdWRlc01pbnV0ZXMoZm9ybWF0KTtcblxuICAgICAgICAvLyBkZWZhdWx0IGhvdXJzIG9wdGlvbiBiYXNlZCBvbiBmb3JtYXQgb3B0aW9uXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlIb3VycyA9XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlIb3VycyAhPSBudWxsID8gdGhpcy5kaXNwbGF5SG91cnMgOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNUaW1lRm9ybWF0SW5jbHVkZXNIb3Vycyhmb3JtYXQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0VXBNb2JpbGVNb2RlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEZEX0RBVEVUSU1FX1BJQ0tFUl9DT01QT05FTlQsIHVzZVZhbHVlOiB0aGlzIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGRF9EQVRFVElNRV9QSUNLRVJfTU9CSUxFX0NPTkZJRyxcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IHsgcGlja2VyVGVtcGxhdGU6IHRoaXMuX3BpY2tlclRlbXBsYXRlIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLl9pbmplY3RvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9tb2JpbGVDb21wb25lbnRSZWYgPSB0aGlzLl9keW5hbWljQ29tcG9uZW50U2VydmljZS5jcmVhdGVEeW5hbWljQ29tcG9uZW50KFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBEYXRldGltZVBpY2tlck1vYmlsZUNvbXBvbmVudDxEPixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6ICdib2R5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbmplY3RvclxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJtb2JpbGUgPyBjb250cm9sVGVtcGxhdGUgOiBkZXNrdG9wVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZXNrdG9wVGVtcGxhdGU+XG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgWyhpc09wZW4pXT1cImlzT3BlblwiXG4gICAgICAgIChpc09wZW5DaGFuZ2UpPVwiX29uT3BlblN0YXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW2ZvY3VzVHJhcHBlZF09XCJ0cnVlXCJcbiAgICAgICAgW2ZvY3VzQXV0b0NhcHR1cmVdPVwiZmFsc2VcIlxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gICAgICAgIFthcHBlbmRUb109XCJhcHBlbmRUb1wiXG4gICAgICAgIFtjbGFzcy5mZC1wb3BvdmVyLWZ1bGwtd2lkdGhdPVwiaXNGdWxsV2lkdGhcIlxuICAgID5cbiAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgPGZkLXBvcG92ZXItYm9keVxuICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiZmQtZm9ybS1tZXNzYWdlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFpc09wZW5cIlxuICAgICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiJ2Jsb2NrJ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoX3Nob3dQb3BvdmVyQ29udGVudHMpIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwicGlja2VyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICA8L2ZkLXBvcG92ZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XG4gICAgPGZkLWlucHV0LWdyb3VwXG4gICAgICAgICNpbnB1dEdyb3VwQ29tcG9uZW50XG4gICAgICAgIFtzdGF0ZV09XCJzdGF0ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtpc0NvbnRyb2xdPVwidHJ1ZVwiXG4gICAgICAgIFtidXR0b25dPVwidHJ1ZVwiXG4gICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiYnV0dG9uRm9jdXNhYmxlXCJcbiAgICAgICAgW2NsYXNzLmZkLWRhdGV0aW1lX19tb2JpbGUtY29udHJvbF09XCJtb2JpbGVcIlxuICAgICAgICBnbHlwaD1cImRhdGUtdGltZVwiXG4gICAgICAgIFtpc0V4cGFuZGVkXT1cImlzT3BlblwiXG4gICAgICAgIFtnbHlwaEFyaWFMYWJlbF09XCInY29yZURhdGV0aW1lUGlja2VyLmRpc3BsYXlEYXRldGltZVRvZ2dsZUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgW2ljb25UaXRsZV09XCInY29yZURhdGV0aW1lUGlja2VyLmRpc3BsYXlEYXRldGltZVRvZ2dsZUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJ0b2dnbGVQb3BvdmVyKClcIlxuICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0XCJcbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInY29yZURhdGV0aW1lUGlja2VyLmRhdGV0aW1lSW5wdXRMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJpbnB1dElkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJfaW5wdXRGaWVsZERhdGUgfCB0cmFuc2xhdGVEYXlQZXJpb2RcIlxuICAgICAgICAgICAgKGtleWRvd24uZjQpPVwidG9nZ2xlUG9wb3ZlcigpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJoYW5kbGVJbnB1dENoYW5nZSgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCBmYWxzZSlcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgICAgICAoYmx1cik9XCJoYW5kbGVPblRvdWNoZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2xpY2spPVwibW9iaWxlICYmIG9wZW5Qb3BvdmVyKClcIlxuICAgICAgICAvPlxuICAgIDwvZmQtaW5wdXQtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNmb3JtTWVzc2FnZVRlbXBsYXRlPlxuICAgIEBpZiAoX21lc3NhZ2UpIHtcbiAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSBpZD1cImZkLWZvcm0tbWVzc2FnZVwiIFtlbWJlZGRlZF09XCJ0cnVlXCIgW3R5cGVdPVwic3RhdGVcIj5cbiAgICAgICAgICAgIHt7IF9tZXNzYWdlIH19XG4gICAgICAgIDwvZmQtZm9ybS1tZXNzYWdlPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3BpY2tlclRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJmZC1kYXRldGltZV9fd3JhcHBlclwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZm9ybU1lc3NhZ2VUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtZGF0ZXRpbWVfX2Rpc3BsYXktdHlwZS1zd2l0Y2hlclwiXG4gICAgICAgICAgICBbY2xhc3MuZmQtZGF0ZXRpbWVfX2Rpc3BsYXktdHlwZS1zd2l0Y2hlci0tZGVza3RvcF09XCIhbW9iaWxlIHx8IChtb2JpbGUgJiYgbW9iaWxlTGFuZHNjYXBlKVwiXG4gICAgICAgICAgICBbY2xhc3MuZmQtZGF0ZXRpbWVfX2Rpc3BsYXktdHlwZS1zd2l0Y2hlci0tbW9iaWxlXT1cIm1vYmlsZSAmJiBtb2JpbGVQb3J0cmFpdFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxmZC1zZWdtZW50ZWQtYnV0dG9uIFsobmdNb2RlbCldPVwiX2Rpc3BsYXlUeXBlXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlRGF0ZXRpbWVQaWNrZXIuZGlzcGxheVR5cGVEYXRlTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImRhdGVcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvcmVEYXRldGltZVBpY2tlci5kaXNwbGF5VHlwZVRpbWVMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9mZC1zZWdtZW50ZWQtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtZGF0ZXRpbWVfX2NvbnRhaW5lclwiIFtjbGFzcy5mZC1kYXRldGltZV9fY29udGFpbmVyLS1tb2JpbGUtcG9ydHJhaXRdPVwibW9iaWxlICYmIG1vYmlsZVBvcnRyYWl0XCI+XG4gICAgICAgICAgICA8ZmQtY2FsZW5kYXJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAgICAgICAgICFtb2JpbGUgJiYgX2Rpc3BsYXlUeXBlID09PSAnZGF0ZScgPyAnZmQtZGF0ZXRpbWVfX2FjdGl2ZS1kaXNwbGF5LXR5cGUnIDogJycsXG4gICAgICAgICAgICAgICAgICAgIG1vYmlsZSAmJiBtb2JpbGVQb3J0cmFpdCAmJiBfZGlzcGxheVR5cGUgPT09ICdkYXRlJyA/ICdmZC1kYXRldGltZV9fbW9iaWxlLWRpc3BsYXknIDogJydcbiAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICBjYWxUeXBlPVwic2luZ2xlXCJcbiAgICAgICAgICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZUZ1bmN0aW9uXT1cImRpc2FibGVGdW5jdGlvbiB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWREYXRlXT1cIl90ZW1wRGF0ZVwiXG4gICAgICAgICAgICAgICAgW2VzY2FwZUZvY3VzRnVuY3Rpb25dPVwibnVsbFwiXG4gICAgICAgICAgICAgICAgW21hcmtXZWVrZW5kc109XCJtYXJrV2Vla2VuZHNcIlxuICAgICAgICAgICAgICAgIFtzcGVjaWFsRGF5c1J1bGVzXT1cInNwZWNpYWxEYXlzUnVsZXNcIlxuICAgICAgICAgICAgICAgIFtzaG93V2Vla051bWJlcnNdPVwic2hvd1dlZWtOdW1iZXJzXCJcbiAgICAgICAgICAgICAgICBbYWdncmVnYXRlZFllYXJHcmlkXT1cImFnZ3JlZ2F0ZWRZZWFyR3JpZFwiXG4gICAgICAgICAgICAgICAgW3llYXJHcmlkXT1cInllYXJHcmlkXCJcbiAgICAgICAgICAgICAgICBbc3RhcnRpbmdEYXlPZldlZWtdPVwic3RhcnRpbmdEYXlPZldlZWtcIlxuICAgICAgICAgICAgICAgIChhY3RpdmVWaWV3Q2hhbmdlKT1cImhhbmRsZUNhbGVuZGFyQWN0aXZlVmlld0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWREYXRlQ2hhbmdlKT1cImhhbmRsZURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGlzVmFsaWREYXRlQ2hhbmdlKT1cInNldEludmFsaWREYXRlSW5wdXRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgPjwvZmQtY2FsZW5kYXI+XG4gICAgICAgICAgICBAaWYgKCFtb2JpbGVQb3J0cmFpdCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1kYXRldGltZV9fc2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGlzT3Blbikge1xuICAgICAgICAgICAgICAgIDxmZC10aW1lXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICFtb2JpbGUgJiYgX2Rpc3BsYXlUeXBlID09PSAndGltZScgPyAnZmQtZGF0ZXRpbWVfX2FjdGl2ZS1kaXNwbGF5LXR5cGUnIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2JpbGUgJiYgbW9iaWxlUG9ydHJhaXQgJiYgX2Rpc3BsYXlUeXBlID09PSAndGltZScgPyAnZmQtZGF0ZXRpbWVfX21vYmlsZS1kaXNwbGF5JyA6ICcnXG4gICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbZWxlbWVudHNBdE9uY2VdPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgIFtrZWVwVHdvRGlnaXRzXT1cImtlZXBUd29EaWdpdHNUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiX3RlbXBUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3NwaW5uZXJCdXR0b25zXT1cInNwaW5uZXJCdXR0b25zXCJcbiAgICAgICAgICAgICAgICAgICAgW21lcmlkaWFuXT1cIl9tZXJpZGlhblwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5U2Vjb25kc109XCJfZGlzcGxheVNlY29uZHNcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheU1pbnV0ZXNdPVwiX2Rpc3BsYXlNaW51dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlIb3Vyc109XCJfZGlzcGxheUhvdXJzXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlVGltZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+PC9mZC10aW1lPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmICghbW9iaWxlICYmIHNob3dGb290ZXIpIHtcbiAgICAgICAgICAgIDxkaXYgZmQtcG9wb3Zlci1ib2R5LWZvb3Rlcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtZGF0ZXRpbWVfX2JhclwiIGZkLWJhciBiYXJEZXNpZ249XCJmb290ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhX3RlbXBEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlRGF0ZXRpbWVQaWNrZXIuZGF0ZXRpbWVPa0xhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInY29yZURhdGV0aW1lUGlja2VyLmRhdGV0aW1lT2tMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY29yZURhdGV0aW1lUGlja2VyLmRhdGV0aW1lQ2FuY2VsTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidjb3JlRGF0ZXRpbWVQaWNrZXIuZGF0ZXRpbWVDYW5jZWxMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { DatetimePickerMobileComponent } from './datetime-picker-mobile/datetime-picker-mobile.component';\nimport { DatetimePickerComponent } from './datetime-picker.component';\nimport * as i0 from \"@angular/core\";\nexport class DatetimePickerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerModule, imports: [DatetimePickerComponent, DatetimePickerMobileComponent], exports: [DatetimePickerComponent, DatetimePickerMobileComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerModule, imports: [DatetimePickerComponent, DatetimePickerMobileComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [DatetimePickerComponent, DatetimePickerMobileComponent],\n exports: [DatetimePickerComponent, DatetimePickerMobileComponent]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRldGltZS1waWNrZXIvZGF0ZXRpbWUtcGlja2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQU10RSxNQUFNLE9BQU8sb0JBQW9COzhHQUFwQixvQkFBb0I7K0dBQXBCLG9CQUFvQixZQUhuQix1QkFBdUIsRUFBRSw2QkFBNkIsYUFDdEQsdUJBQXVCLEVBQUUsNkJBQTZCOytHQUV2RCxvQkFBb0IsWUFIbkIsdUJBQXVCLEVBQUUsNkJBQTZCOzsyRkFHdkQsb0JBQW9CO2tCQUpoQyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixFQUFFLDZCQUE2QixDQUFDO29CQUNqRSxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSw2QkFBNkIsQ0FBQztpQkFDcEUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZXRpbWVQaWNrZXJNb2JpbGVDb21wb25lbnQgfSBmcm9tICcuL2RhdGV0aW1lLXBpY2tlci1tb2JpbGUvZGF0ZXRpbWUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtEYXRldGltZVBpY2tlckNvbXBvbmVudCwgRGF0ZXRpbWVQaWNrZXJNb2JpbGVDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtEYXRldGltZVBpY2tlckNvbXBvbmVudCwgRGF0ZXRpbWVQaWNrZXJNb2JpbGVDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIERhdGV0aW1lUGlja2VyTW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtZGF0ZXRpbWUtcGlja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGV0aW1lLXBpY2tlci9mdW5kYW1lbnRhbC1uZ3gtY29yZS1kYXRldGltZS1waWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-datetime-picker.mjs","sources":["../tmp-esm2022/datetime-picker/tokens.js","../tmp-esm2022/datetime-picker/datetime-picker-mobile/datetime-picker-mobile.component.js","../tmp-esm2022/datetime-picker/errors.js","../tmp-esm2022/datetime-picker/datetime-picker.component.js","../tmp-esm2022/datetime-picker/datetime-picker.module.js","../tmp-esm2022/datetime-picker/fundamental-ngx-core-datetime-picker.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport const FD_DATETIME_PICKER_COMPONENT = new InjectionToken('FdDateTimePickerComponent');\nexport const FD_DATETIME_PICKER_MOBILE_CONFIG = new InjectionToken('FdDateTimePickerMobileConfig');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGV0aW1lLXBpY2tlci90b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsMkJBQTJCLENBQUMsQ0FBQztBQUNqSCxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLGNBQWMsQ0FBbUIsOEJBQThCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7IERhdGVUaW1lUGlja2VyIH0gZnJvbSAnLi9kYXRldGltZS1waWNrZXIubW9kZWwnO1xuXG5leHBvcnQgY29uc3QgRkRfREFURVRJTUVfUElDS0VSX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEYXRlVGltZVBpY2tlcjxhbnk+PignRmREYXRlVGltZVBpY2tlckNvbXBvbmVudCcpO1xuZXhwb3J0IGNvbnN0IEZEX0RBVEVUSU1FX1BJQ0tFUl9NT0JJTEVfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPE1vYmlsZU1vZGVDb25maWc+KCdGZERhdGVUaW1lUGlja2VyTW9iaWxlQ29uZmlnJyk7XG4iXX0=","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { DialogBodyComponent, DialogCloseButtonComponent, DialogComponent, DialogFooterComponent, DialogHeaderComponent } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FD_DATETIME_PICKER_COMPONENT, FD_DATETIME_PICKER_MOBILE_CONFIG } from '../tokens';\nimport * as i0 from \"@angular/core\";\nexport class DatetimePickerMobileComponent extends MobileModeBase {\n /** @hidden */\n constructor(dateTimePickerConfig, datePickerComponent) {\n super(datePickerComponent, MobileModeControl.DATETIME_PICKER);\n this.dateTimePickerConfig = dateTimePickerConfig;\n this._component.isOpenChange.subscribe((isOpen) => {\n this._toggleDialog(isOpen);\n });\n }\n /** @hidden */\n handleApprove() {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n /** @hidden */\n handleDismiss() {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n /** @hidden */\n _toggleDialog(open) {\n if (open) {\n this._selectedBackup = this._component.date;\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n }\n /** @hidden */\n _open() {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n backdropClickCloseable: false,\n disablePaddings: true,\n ...this.dialogConfig,\n container: this._elementRef.nativeElement\n });\n this._selectedBackup = this._component.date;\n const refSub = this.dialogRef.afterClosed.pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerMobileComponent, deps: [{ token: FD_DATETIME_PICKER_MOBILE_CONFIG }, { token: FD_DATETIME_PICKER_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: DatetimePickerMobileComponent, isStandalone: true, selector: \"fd-datetime-picker-mobile\", viewQueries: [{ propertyName: \"dialogTemplate\", first: true, predicate: [\"dialogTemplate\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"dateTimePickerConfig.pickerTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\", dependencies: [{ kind: \"component\", type: TitleComponent, selector: \"[fd-title], [fdTitle]\", inputs: [\"headerSize\", \"wrap\"], exportAs: [\"fd-title\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: DialogComponent, selector: \"fd-dialog\", inputs: [\"class\", \"dialogRef\", \"dialogConfig\"] }, { kind: \"component\", type: DialogBodyComponent, selector: \"fd-dialog-body\", inputs: [\"disablePaddings\"] }, { kind: \"component\", type: DialogFooterComponent, selector: \"fd-dialog-footer\" }, { kind: \"component\", type: DialogHeaderComponent, selector: \"fd-dialog-header\" }, { kind: \"component\", type: DialogCloseButtonComponent, selector: \"[fd-dialog-close-button]\", inputs: [\"mobile\", \"title\", \"ariaLabel\"] }, { kind: \"component\", type: ButtonBarComponent, selector: \"fd-button-bar\", inputs: [\"fullWidth\", \"fdType\", \"title\", \"ariaLabelledby\", \"id\"] }, { kind: \"directive\", type: InitialFocusDirective, selector: \"[fdkInitialFocus]\", inputs: [\"fdkInitialFocus\", \"enabled\", \"focusLastElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerMobileComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-datetime-picker-mobile', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n TitleComponent,\n NgTemplateOutlet,\n DialogComponent,\n DialogBodyComponent,\n DialogFooterComponent,\n DialogHeaderComponent,\n DialogCloseButtonComponent,\n ButtonBarComponent,\n InitialFocusDirective\n ], template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"dateTimePickerConfig.pickerTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\" }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [FD_DATETIME_PICKER_MOBILE_CONFIG]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [FD_DATETIME_PICKER_COMPONENT]\n }] }], propDecorators: { dialogTemplate: [{\n type: ViewChild,\n args: ['dialogTemplate']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZXRpbWUtcGlja2VyL2RhdGV0aW1lLXBpY2tlci1tb2JpbGUvZGF0ZXRpbWUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZXRpbWUtcGlja2VyL2RhdGV0aW1lLXBpY2tlci1tb2JpbGUvZGF0ZXRpbWUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBWSxNQUFNLDRCQUE0QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLGVBQWUsRUFDZixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3hCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBbUIzRixNQUFNLE9BQU8sNkJBQWlDLFNBQVEsY0FBaUM7SUFPbkYsY0FBYztJQUNkLFlBRVcs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QTRCO3lDQVRYLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBJbml0aWFsRm9jdXNEaXJlY3RpdmUsIE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uQmFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQge1xuICAgIERpYWxvZ0JvZHlDb21wb25lbnQsXG4gICAgRGlhbG9nQ2xvc2VCdXR0b25Db21wb25lbnQsXG4gICAgRGlhbG9nQ29tcG9uZW50LFxuICAgIERpYWxvZ0Zvb3RlckNvbXBvbmVudCxcbiAgICBEaWFsb2dIZWFkZXJDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RpYWxvZyc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQmFzZSwgTW9iaWxlTW9kZUNvbnRyb2wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHsgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICcuLi9kYXRldGltZS1waWNrZXIubW9kZWwnO1xuaW1wb3J0IHsgRkRfREFURVRJTUVfUElDS0VSX0NPTVBPTkVOVCwgRkRfREFURVRJTUVfUElDS0VSX01PQklMRV9DT05GSUcgfSBmcm9tICcuLi90b2tlbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWRhdGV0aW1lLXBpY2tlci1tb2JpbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRldGltZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgVGl0bGVDb21wb25lbnQsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0Nsb3NlQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBCdXR0b25CYXJDb21wb25lbnQsXG4gICAgICAgIEluaXRpYWxGb2N1c0RpcmVjdGl2ZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXRpbWVQaWNrZXJNb2JpbGVDb21wb25lbnQ8RD4gZXh0ZW5kcyBNb2JpbGVNb2RlQmFzZTxEYXRlVGltZVBpY2tlcjxEPj4ge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZGlhbG9nVGVtcGxhdGUnKSBkaWFsb2dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRCYWNrdXA6IE51bGxhYmxlPEQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChGRF9EQVRFVElNRV9QSUNLRVJfTU9CSUxFX0NPTkZJRylcbiAgICAgICAgcHVibGljIGRhdGVUaW1lUGlja2VyQ29uZmlnOiB7IHBpY2tlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IH0sXG4gICAgICAgIEBJbmplY3QoRkRfREFURVRJTUVfUElDS0VSX0NPTVBPTkVOVCkgZGF0ZVBpY2tlckNvbXBvbmVudDogRGF0ZVRpbWVQaWNrZXI8RD5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoZGF0ZVBpY2tlckNvbXBvbmVudCwgTW9iaWxlTW9kZUNvbnRyb2wuREFURVRJTUVfUElDS0VSKTtcblxuICAgICAgICB0aGlzLl9jb21wb25lbnQuaXNPcGVuQ2hhbmdlLnN1YnNjcmliZSgoaXNPcGVuKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVEaWFsb2coaXNPcGVuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuZGlhbG9nQXBwcm92ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlRGlzbWlzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGlzbWlzcygpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuZGlhbG9nRGlzbWlzcyh0aGlzLl9zZWxlY3RlZEJhY2t1cCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b2dnbGVEaWFsb2cob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAob3Blbikge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRCYWNrdXAgPSB0aGlzLl9jb21wb25lbnQuZGF0ZSE7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RpYWxvZ1NlcnZpY2UuaGFzT3BlbkRpYWxvZ3MoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5kaWFsb2dUZW1wbGF0ZSwge1xuICAgICAgICAgICAgbW9iaWxlOiB0cnVlLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGlja0Nsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlUGFkZGluZ3M6IHRydWUsXG4gICAgICAgICAgICAuLi50aGlzLmRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQmFja3VwID0gdGhpcy5fY29tcG9uZW50LmRhdGU7XG5cbiAgICAgICAgY29uc3QgcmVmU3ViID0gdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBlcnJvcjogKHR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0Rpc21pc3ModGhpcy5fc2VsZWN0ZWRCYWNrdXApO1xuICAgICAgICAgICAgICAgICAgICByZWZTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbZmREaWFsb2dUZW1wbGF0ZV0gbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCIgI2RpYWxvZ1RlbXBsYXRlPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlcj5cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQ29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGgxIGZkLXRpdGxlPnt7IG1vYmlsZUNvbmZpZy50aXRsZSB9fTwvaDE+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5oYXNDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIDxidXR0b24gdGl0bGU9XCJDbG9zZVwiIGZkLWRpYWxvZy1jbG9zZS1idXR0b24gW21vYmlsZV09XCJ0cnVlXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgIDxmZC1kaWFsb2ctYm9keT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkYXRlVGltZVBpY2tlckNvbmZpZy5waWNrZXJUZW1wbGF0ZSB8fCBudWxsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cbiAgICAgICAgPGZkLWRpYWxvZy1mb290ZXI+XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5hcHByb3ZlQnV0dG9uVGV4dCkge1xuICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyIGZkVHlwZT1cImVtcGhhc2l6ZWRcIiBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0IVwiIChjbGljayk9XCJoYW5kbGVBcHByb3ZlKClcIj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5jYW5jZWxCdXR0b25UZXh0KSB7XG4gICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXIgZmRrSW5pdGlhbEZvY3VzIFtsYWJlbF09XCJtb2JpbGVDb25maWcuY2FuY2VsQnV0dG9uVGV4dCFcIiAoY2xpY2spPVwiaGFuZGxlRGlzbWlzcygpXCI+XG4gICAgICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLWRpYWxvZy1mb290ZXI+XG4gICAgPC9mZC1kaWFsb2c+XG48L25nLXRlbXBsYXRlPlxuIl19","/** Creates an error to be thrown when attempting to use an invalid date implementation. */\nexport function createMissingDateImplementationError(provider) {\n return Error(`FdDatetimePicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGV0aW1lLXBpY2tlci9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkZBQTJGO0FBQzNGLE1BQU0sVUFBVSxvQ0FBb0MsQ0FBQyxRQUFnQjtJQUNqRSxPQUFPLEtBQUssQ0FDUiwyQ0FBMkMsUUFBUSx5Q0FBeUM7UUFDeEYsbUVBQW1FO1FBQ25FLHdCQUF3QixDQUMvQixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDcmVhdGVzIGFuIGVycm9yIHRvIGJlIHRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gdXNlIGFuIGludmFsaWQgZGF0ZSBpbXBsZW1lbnRhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IocHJvdmlkZXI6IHN0cmluZyk6IEVycm9yIHtcbiAgICByZXR1cm4gRXJyb3IoXG4gICAgICAgIGBGZERhdGV0aW1lUGlja2VyOiBObyBwcm92aWRlciBmb3VuZCBmb3IgJHtwcm92aWRlcn0uIFlvdSBtdXN0IGltcG9ydCBvbmUgb2YgdGhlIGZvbGxvd2luZyBgICtcbiAgICAgICAgICAgIGBtb2R1bGVzIGF0IHlvdXIgYXBwbGljYXRpb24gcm9vdDogRmREYXRldGltZU1vZHVsZSwgb3IgcHJvdmlkZSBhIGAgK1xuICAgICAgICAgICAgYGN1c3RvbSBpbXBsZW1lbnRhdGlvbi5gXG4gICAgKTtcbn1cbiJdfQ==","import { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, inject, Inject, Injector, Input, Optional, Output, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { CalendarComponent, FdCalendarViewEnum } from '@fundamental-ngx/core/calendar';\nimport { convertToDesiredFormat, DATE_TIME_FORMATS, DatetimeAdapter, TranslateDayPeriodPipe } from '@fundamental-ngx/core/datetime';\nimport { FormMessageComponent, PopoverFormMessageService, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { PopoverBodyComponent, PopoverBodyFooterDirective, PopoverComponent, PopoverControlComponent, PopoverService } from '@fundamental-ngx/core/popover';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { DynamicComponentService, FocusTrapService } from '@fundamental-ngx/cdk/utils';\nimport { BarComponent, BarElementDirective, BarRightDirective } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { SegmentedButtonComponent } from '@fundamental-ngx/core/segmented-button';\nimport { TimeComponent } from '@fundamental-ngx/core/time';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { DatetimePickerMobileComponent } from './datetime-picker-mobile/datetime-picker-mobile.component';\nimport { createMissingDateImplementationError } from './errors';\nimport { FD_DATETIME_PICKER_COMPONENT, FD_DATETIME_PICKER_MOBILE_CONFIG } from './tokens';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/core/datetime\";\nimport * as i2 from \"@fundamental-ngx/core/form\";\nimport * as i3 from \"@angular/forms\";\n/**\n * The datetime picker component is an opinionated composition of the fd-popover,\n * fd-calendar and fd-time components to accomplish the UI pattern for picking a date and time.\n * Supports Angular Forms.\n * ```html\n * <fd-date-time-picker [(ngModel)]=\"dateTime\"></fd-date-time-picker>\n * ```\n */\nexport class DatetimePickerComponent {\n /** Text displayed in message */\n set message(message) {\n this._message = message;\n }\n /** The trigger events that will open/close the message box.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp). */\n set messageTriggers(triggers) {\n this._messageTriggers = triggers;\n }\n /**\n * The state of the form control - applies css classes.\n * Also this is applied to message.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n set state(state) {\n this._state = state;\n }\n get state() {\n if (this.useValidation && this.isInvalidDateInput) {\n return 'error';\n }\n return this._state;\n }\n /** Indicates when datetime input is in invalid state. */\n get isInvalidDateInput() {\n return this._isInvalidDateInput && this._touched;\n }\n /** @hidden Reference to the inner calendar component. */\n set _calendarCmp(calendar) {\n setTimeout(() => {\n calendar?.setCurrentlyDisplayed(this._calendarPendingDate);\n calendar?.initialFocus();\n });\n this._calendarComponent = calendar;\n }\n /** @hidden */\n constructor(_elRef, _changeDetRef, \n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n _dateTimeAdapter, _dateTimeFormats, _popoverFormMessage) {\n this._elRef = _elRef;\n this._changeDetRef = _changeDetRef;\n this._dateTimeAdapter = _dateTimeAdapter;\n this._dateTimeFormats = _dateTimeFormats;\n this._popoverFormMessage = _popoverFormMessage;\n /** Placeholder for the inner input element. */\n this.placeholder = '';\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n this.placement = 'bottom-start';\n /** If it is mandatory field */\n this.required = false;\n /** Whether to perform visual validation on the picker input. */\n this.useValidation = true;\n /** Whether the popover is open. Two-way binding is supported. */\n this.isOpen = false;\n /** The disableFunction for the calendar. */\n this.startingDayOfWeek = 1;\n /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n this.activeView = FdCalendarViewEnum.Day;\n /** Whether a null input is considered valid. */\n this.allowNull = true;\n /**\n * @Input when set to true time component will use 2 digits for each number.\n * For example 9 will become 09\n * but 12 will be kept as 12.\n * Only uses by time component and does not change input format\n */\n this.keepTwoDigitsTime = false;\n /**\n * @deprecated Popover is toggled with f4 key\n */\n this.buttonFocusable = false;\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with FdDate object as a parameter. ex:\n * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n this.specialDaysRules = [];\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n this.yearGrid = {\n rows: 4,\n cols: 5\n };\n /** Whether to stop event propagation for collapsed time items */\n this.timeItemStopPropagationSourcing = false;\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n this.aggregatedYearGrid = {\n rows: 4,\n cols: 3\n };\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n this.markWeekends = true;\n /** @Input Whether to show spinner buttons */\n this.spinnerButtons = true;\n /**\n * Whether user wants to show week numbers next to days\n */\n this.showWeekNumbers = true;\n /** Whether or not to show the datetime picker footer with OK/cancel buttons. */\n this.showFooter = true;\n /**\n * Whether to recalculate value from the input as user types or on blur.\n * By default, updates the value as user types.\n * @default false\n */\n this.processInputOnBlur = false;\n /**\n * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n */\n this.preventScrollOnFocus = false;\n /** Whether to render datetime picker in mobile mode. */\n this.mobile = false;\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n this.mobileLandscape = false;\n /** Whether calendar is used inside mobile in portrait mode */\n this.mobilePortrait = false;\n /** To set input width 100% */\n this.isFullWidth = false;\n /** Event emitted when the state of the isOpen property changes. */\n this.isOpenChange = new EventEmitter();\n /** Event thrown every time calendar active view is changed */\n this.activeViewChange = new EventEmitter();\n /** Event emitted when the date changes. This can be a time or day change. */\n this.dateChange = new EventEmitter();\n /** Event emitted when the day changes from the calendar. */\n this.calendarChange = new EventEmitter();\n /** Event emitted when the time changes from the time component. */\n this.timeChange = new EventEmitter();\n /** Event emitted when popover closes. */\n this.onClose = new EventEmitter();\n /** Event emitted when datepicker changes it's \"touched\" state. */\n this.touched = new EventEmitter();\n /** @hidden */\n this._message = null;\n /** @hidden */\n this._messageTriggers = ['focusin', 'focusout'];\n /**\n * @hidden\n * Date of the input field. Internal use.\n * For programmatic selection, use two-way binding on the date input.\n */\n this._inputFieldDate = null;\n /** @hidden */\n this._isInvalidDateInput = false;\n /** @hidden whether to display date or time in mobile mode */\n this._displayType = 'date';\n /** @hidden */\n this._showPopoverContents = false;\n /** @hidden */\n this._state = 'default';\n /** @hidden */\n this._injector = inject(Injector);\n /** @hidden */\n this._dynamicComponentService = inject(DynamicComponentService);\n /** @hidden */\n this._focusTrapService = inject(FocusTrapService, {\n optional: true\n });\n /** @hidden */\n this._subscriptions = new Subscription();\n /** @hidden */\n this._touched = false;\n /**\n * Function used to disable certain dates in the calendar.\n * @param fdDate FdDate\n */\n this.disableFunction = () => false;\n /** @hidden */\n this.onChange = () => { };\n /** @hidden */\n this.onTouched = () => { };\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n // default model value\n this.date = _dateTimeAdapter.now();\n }\n /** @hidden */\n ngOnChanges(changes) {\n if (changes.date) {\n this._setTempDateTime();\n }\n if (['displayHours', 'displayMinutes', 'displaySeconds', 'meridian'].some((input) => input in changes)) {\n this._calculateTimeOptions();\n }\n if ('isOpen' in changes) {\n this._showPopoverContents = this.isOpen;\n this._changeDetRef.detectChanges();\n }\n }\n /** @hidden */\n ngOnInit() {\n if (this.date) {\n this._setTempDateTime();\n }\n this._calculateTimeOptions();\n this._subscriptions.add(this._dateTimeAdapter.localeChanges.pipe(filter(() => this._inputFieldDate !== '')).subscribe(() => {\n this._setInput(this.date);\n this._calculateTimeOptions();\n this._changeDetRef.detectChanges();\n }));\n }\n /** @hidden */\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n this._mobileComponentRef?.destroy();\n }\n /** @hidden */\n ngAfterViewInit() {\n this._InitialiseVariablesInMessageService();\n if (this.mobile) {\n this._setUpMobileMode();\n }\n // update bindings after rendering\n // is needed to preperly reflect error state\n setTimeout(() => {\n this._changeDetRef.markForCheck();\n });\n }\n /**\n * @hidden\n * Function that implements Validator Interface, adds validation support for forms\n */\n validate() {\n return this.isCurrentModelValid() && !this._isInvalidDateInput\n ? null\n : {\n dateValidation: {\n valid: false\n }\n };\n }\n /** Toggles the popover. */\n togglePopover() {\n if (this.isOpen) {\n this.closePopover();\n }\n else {\n this.openPopover();\n }\n }\n /**\n * Method that handles calendar active view change and throws event.\n */\n handleCalendarActiveViewChange(activeView) {\n this.activeViewChange.emit(activeView);\n }\n /** Method that handles blur events on datetime picker input */\n handleOnTouched(event) {\n this._touched = true;\n this.onTouched();\n this.touched.next();\n if (event) {\n this.handleInputChange(event.target.value, false);\n }\n }\n /** Opens the popover. */\n openPopover() {\n if (!this.isOpen && !this.disabled) {\n this._focusTrapService?.pauseCurrentFocusTrap();\n this._showPopoverContents = true;\n this._changeDetRef.detectChanges();\n this.isOpen = true;\n this._onOpenStateChanged(this.isOpen);\n }\n }\n /** Closes the popover and refresh model */\n closePopover() {\n if (!this.isOpen) {\n return;\n }\n this.onClose.emit();\n this.isOpen = false;\n this._changeDetRef.detectChanges();\n this._onOpenStateChanged(this.isOpen);\n this._focusTrapService?.unpauseCurrentFocusTrap();\n this.handleOnTouched();\n this._showPopoverContents = false;\n }\n /** @hidden */\n setInvalidDateInputHandler(isInvalid) {\n this._isInvalidDateInput = isInvalid;\n }\n /** @hidden */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /** @hidden */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /** @hidden */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetRef.detectChanges();\n }\n /**\n * @hidden\n * Function that provides support for ControlValueAccessor that allows to use [(ngModel)] or forms\n */\n writeValue(selected) {\n this.date = this._parseDate(selected);\n this._isInvalidDateInput = !this._isModelValid(this.date);\n if (this.isCurrentModelValid()) {\n this._setTempDateTime();\n this._refreshCurrentlyDisplayedCalendarDate(this.date);\n }\n this._setInput(this.date);\n }\n /**\n * @hidden\n * Method that is triggered by events from calendar component, when there is selected date changed.\n * If invalid time model is detected, it takes time model data from TimeComponent.\n */\n handleDateChange(date) {\n this._tempDate = date;\n if (!this.showFooter) {\n this.submit();\n }\n }\n /**\n * @hidden\n * Method that is triggered by events from time component, when there is selected time changed\n */\n handleTimeChange(time) {\n this._tempTime = time;\n if (!this.showFooter) {\n this.submit();\n }\n }\n /**\n * @hidden\n * Method that is triggered when 'OK' button is pressed.\n */\n submit() {\n // Initialize date and time values, defaulting to the current date if invalid\n let currentDate = this._tempDate;\n let currentTime = this._tempTime;\n // Initialize date and time values, defaulting to the current date if invalid\n if (!this._tempDate || !this._dateTimeAdapter.isValid(this._tempDate)) {\n currentDate = this._dateTimeAdapter.today();\n }\n if (!this._tempTime || !this._dateTimeAdapter.isValid(this._tempTime)) {\n currentTime = this._dateTimeAdapter.today();\n }\n try {\n this.date = this._dateTimeAdapter.setTime(currentDate, this._dateTimeAdapter.getHours(currentTime), this._dateTimeAdapter.getMinutes(currentTime), this._dateTimeAdapter.getSeconds(currentTime));\n }\n catch {\n this.date = null;\n }\n this._isInvalidDateInput = !this.isCurrentModelValid();\n this._setInput(this.date);\n this.onChange(this.date);\n if (this.showFooter) {\n this.closePopover();\n }\n }\n /**\n * @hidden\n * Function that is called when 'Cancel' button is pressed.\n */\n cancel() {\n this._tempDate = this.date;\n this._tempTime = this.date;\n this.closePopover();\n }\n /**\n * @hidden\n * Looks like no one uses it. Should be removed?\n */\n focusArrowLeft() {\n if (this._elRef.nativeElement.querySelector('#' + this._calendarComponent.id + '-left-arrow')) {\n this._elRef.nativeElement.querySelector('#' + this._calendarComponent.id + '-left-arrow').focus();\n }\n }\n /**\n * @hidden\n * Method, which is responsible for transforming string to datetime, depending on type or\n * validation the results are different. It also changes to state of _isInvalidDateInput.\n */\n handleInputChange(inputStr, isTypeEvent) {\n if ((isTypeEvent && this.processInputOnBlur) || (!isTypeEvent && !this.processInputOnBlur)) {\n // if processInputOnBlur === true, ignore type event\n // if processInputOnBlur === false, ignore blur/enter event\n return;\n }\n this._inputFieldDate = inputStr ?? '';\n if (!inputStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.date = null;\n this.onChange(null);\n return;\n }\n inputStr = convertToDesiredFormat(inputStr.toString());\n this.date = this._parseDate(inputStr);\n this._isInvalidDateInput = !this._isModelValid(this.date);\n if (!this._isInvalidDateInput) {\n this._setTempDateTime();\n this._refreshCurrentlyDisplayedCalendarDate(this.date);\n }\n this.onChange(this.date);\n }\n /** @hidden */\n dialogApprove() {\n this.isOpen = false;\n this.submit();\n }\n /** Method used to restore original value for mobile mode. */\n dialogDismiss(value) {\n this.date = value;\n this.isOpen = false;\n this._setInput(this.date);\n this.onChange(this.date);\n }\n /** @hidden */\n _changeMessageVisibility() {\n if (this.isOpen) {\n this._popoverFormMessage.hide();\n }\n else {\n this._popoverFormMessage.show();\n }\n }\n /** @hidden */\n _onOpenStateChanged(isOpen) {\n this.isOpenChange.emit(isOpen);\n this._changeMessageVisibility();\n // focus input control every time popup is closed\n if (!isOpen && this._inputElement) {\n this._inputElement.nativeElement.focus({\n preventScroll: this.preventScrollOnFocus\n });\n }\n if (!isOpen) {\n this._showPopoverContents = false;\n this._changeDetRef.detectChanges();\n }\n }\n /** Method that provides information if model selected date/dates have properly types and are valid */\n isCurrentModelValid() {\n return this._isModelValid(this.date);\n }\n /** Method that provides information if FdDateTime passed as arg has properly types and is valid */\n _isModelValid(date) {\n return (date === null && this.allowNull) || this._dateTimeAdapter.isValid(date);\n }\n /** @hidden */\n _setInput(dateTime) {\n this._inputFieldDate = dateTime ? this._formatDateTime(dateTime) : '';\n this._changeDetRef.detectChanges();\n }\n /** @hidden */\n _refreshCurrentlyDisplayedCalendarDate(date) {\n this._calendarPendingDate = date;\n }\n /**\n * @hidden\n * Format date time entity.\n */\n _formatDateTime(dateTime) {\n const formattedDate = this.customDateTimeFormat\n ? this._dateTimeAdapter.format(dateTime, this.customDateTimeFormat)\n : this._dateTimeAdapter.format(dateTime, this._dateTimeFormats.display.dateTimeInput);\n return formattedDate || '';\n }\n /** @hidden */\n _InitialiseVariablesInMessageService() {\n this._popoverFormMessage.init(this._inputGroupElement);\n this._popoverFormMessage.message = this._formMessageTemplate;\n this._popoverFormMessage.triggers = this._messageTriggers;\n }\n /** @hidden */\n _parseDate(date) {\n return this._dateTimeAdapter.parse(date, this._dateTimeFormats.parse.dateTimeInput);\n }\n /** @hidden */\n _setTempDateTime() {\n this._tempDate = this.date;\n this._tempTime = this.date;\n }\n /** @hidden */\n _calculateTimeOptions() {\n const format = this._dateTimeFormats.display.dateTimeInput;\n // default meridian option based on format option\n this._meridian =\n this.meridian != null ? this.meridian : this._dateTimeAdapter.isTimeFormatIncludesDayPeriod(format);\n // default seconds option based on format option\n this._displaySeconds =\n this.displaySeconds != null\n ? this.displaySeconds\n : this._dateTimeAdapter.isTimeFormatIncludesSeconds(format);\n // default minutes option based on format option\n this._displayMinutes =\n this.displayMinutes != null\n ? this.displayMinutes\n : this._dateTimeAdapter.isTimeFormatIncludesMinutes(format);\n // default hours option based on format option\n this._displayHours =\n this.displayHours != null ? this.displayHours : this._dateTimeAdapter.isTimeFormatIncludesHours(format);\n }\n /** @hidden */\n _setUpMobileMode() {\n const injector = Injector.create({\n providers: [\n { provide: FD_DATETIME_PICKER_COMPONENT, useValue: this },\n {\n provide: FD_DATETIME_PICKER_MOBILE_CONFIG,\n useValue: { pickerTemplate: this._pickerTemplate }\n }\n ],\n parent: this._injector\n });\n this._mobileComponentRef = this._dynamicComponentService.createDynamicComponent({}, (DatetimePickerMobileComponent), {\n container: 'body'\n }, {\n injector\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.DatetimeAdapter, optional: true }, { token: DATE_TIME_FORMATS, optional: true }, { token: i2.PopoverFormMessageService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: DatetimePickerComponent, isStandalone: true, selector: \"fd-datetime-picker\", inputs: { placeholder: \"placeholder\", placement: \"placement\", appendTo: \"appendTo\", disabled: \"disabled\", inputId: \"inputId\", required: \"required\", customDateTimeFormat: \"customDateTimeFormat\", meridian: \"meridian\", displaySeconds: \"displaySeconds\", ariaLabelledBy: \"ariaLabelledBy\", message: \"message\", messageTriggers: \"messageTriggers\", displayMinutes: \"displayMinutes\", displayHours: \"displayHours\", useValidation: \"useValidation\", date: \"date\", isOpen: \"isOpen\", startingDayOfWeek: \"startingDayOfWeek\", activeView: \"activeView\", allowNull: \"allowNull\", keepTwoDigitsTime: \"keepTwoDigitsTime\", state: \"state\", buttonFocusable: \"buttonFocusable\", specialDaysRules: \"specialDaysRules\", yearGrid: \"yearGrid\", timeItemStopPropagationSourcing: \"timeItemStopPropagationSourcing\", aggregatedYearGrid: \"aggregatedYearGrid\", markWeekends: \"markWeekends\", spinnerButtons: \"spinnerButtons\", showWeekNumbers: \"showWeekNumbers\", showFooter: \"showFooter\", processInputOnBlur: [\"processInputOnBlur\", \"processInputOnBlur\", booleanAttribute], preventScrollOnFocus: \"preventScrollOnFocus\", mobile: \"mobile\", mobileConfig: \"mobileConfig\", mobileLandscape: \"mobileLandscape\", mobilePortrait: \"mobilePortrait\", isFullWidth: \"isFullWidth\", disableFunction: \"disableFunction\" }, outputs: { isOpenChange: \"isOpenChange\", activeViewChange: \"activeViewChange\", dateChange: \"dateChange\", calendarChange: \"calendarChange\", timeChange: \"timeChange\", onClose: \"onClose\", touched: \"touched\" }, host: { classAttribute: \"fd-datetime\" }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatetimePickerComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatetimePickerComponent),\n multi: true\n },\n {\n provide: FD_DATETIME_PICKER_COMPONENT,\n useExisting: DatetimePickerComponent\n },\n registerFormItemControl(DatetimePickerComponent),\n PopoverFormMessageService,\n PopoverService,\n DynamicComponentService\n ], viewQueries: [{ propertyName: \"_calendarCmp\", first: true, predicate: CalendarComponent, descendants: true }, { propertyName: \"_inputGroupElement\", first: true, predicate: [\"inputGroupComponent\"], descendants: true, read: ElementRef }, { propertyName: \"_inputElement\", first: true, predicate: InputGroupInputDirective, descendants: true, read: ElementRef }, { propertyName: \"_formMessageTemplate\", first: true, predicate: [\"formMessageTemplate\"], descendants: true }, { propertyName: \"_pickerTemplate\", first: true, predicate: [\"pickerTemplate\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? controlTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n [(isOpen)]=\\\"isOpen\\\"\\n (isOpenChange)=\\\"_onOpenStateChanged($event)\\\"\\n [focusTrapped]=\\\"true\\\"\\n [focusAutoCapture]=\\\"false\\\"\\n [triggers]=\\\"[]\\\"\\n [disabled]=\\\"disabled\\\"\\n [placement]=\\\"placement\\\"\\n [appendTo]=\\\"appendTo\\\"\\n [class.fd-popover-full-width]=\\\"isFullWidth\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body\\n aria-labelledby=\\\"fd-form-message\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-hidden]=\\\"!isOpen\\\"\\n [style.display]=\\\"'block'\\\"\\n >\\n @if (_showPopoverContents) {\\n <ng-template [ngTemplateOutlet]=\\\"pickerTemplate\\\"></ng-template>\\n }\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n #inputGroupComponent\\n [state]=\\\"state\\\"\\n [disabled]=\\\"disabled\\\"\\n [isControl]=\\\"true\\\"\\n [button]=\\\"true\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [class.fd-datetime__mobile-control]=\\\"mobile\\\"\\n glyph=\\\"date-time\\\"\\n [isExpanded]=\\\"isOpen\\\"\\n [glyphAriaLabel]=\\\"'coreDatetimePicker.displayDatetimeToggleLabel' | fdTranslate\\\"\\n [iconTitle]=\\\"'coreDatetimePicker.displayDatetimeToggleLabel' | fdTranslate\\\"\\n (addOnButtonClicked)=\\\"togglePopover()\\\"\\n >\\n <input\\n type=\\\"text\\\"\\n class=\\\"fd-input\\\"\\n fd-input-group-input\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-label]=\\\"'coreDatetimePicker.datetimeInputLabel' | fdTranslate\\\"\\n [attr.id]=\\\"inputId\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"_inputFieldDate | translateDayPeriod\\\"\\n (keydown.f4)=\\\"togglePopover()\\\"\\n (keyup.enter)=\\\"handleInputChange($any($event.target).value, false)\\\"\\n (ngModelChange)=\\\"handleInputChange($event, true)\\\"\\n (blur)=\\\"handleOnTouched($event)\\\"\\n (click)=\\\"mobile && openPopover()\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #formMessageTemplate>\\n @if (_message) {\\n <fd-form-message id=\\\"fd-form-message\\\" [embedded]=\\\"true\\\" [type]=\\\"state\\\">\\n {{ _message }}\\n </fd-form-message>\\n }\\n</ng-template>\\n<ng-template #pickerTemplate>\\n <div class=\\\"fd-datetime__wrapper\\\">\\n <ng-template [ngTemplateOutlet]=\\\"formMessageTemplate\\\"></ng-template>\\n <div\\n class=\\\"fd-datetime__display-type-switcher\\\"\\n [class.fd-datetime__display-type-switcher--desktop]=\\\"!mobile || (mobile && mobileLandscape)\\\"\\n [class.fd-datetime__display-type-switcher--mobile]=\\\"mobile && mobilePortrait\\\"\\n >\\n <fd-segmented-button [(ngModel)]=\\\"_displayType\\\">\\n <button\\n fd-button\\n [label]=\\\"'coreDatetimePicker.displayTypeDateLabel' | fdTranslate\\\"\\n value=\\\"date\\\"\\n ></button>\\n <button\\n fd-button\\n [label]=\\\"'coreDatetimePicker.displayTypeTimeLabel' | fdTranslate\\\"\\n value=\\\"time\\\"\\n ></button>\\n </fd-segmented-button>\\n </div>\\n <ng-content></ng-content>\\n <div class=\\\"fd-datetime__container\\\" [class.fd-datetime__container--mobile-portrait]=\\\"mobile && mobilePortrait\\\">\\n <fd-calendar\\n [ngClass]=\\\"[\\n !mobile && _displayType === 'date' ? 'fd-datetime__active-display-type' : '',\\n mobile && mobilePortrait && _displayType === 'date' ? 'fd-datetime__mobile-display' : ''\\n ]\\\"\\n calType=\\\"single\\\"\\n [activeView]=\\\"activeView\\\"\\n [disableFunction]=\\\"disableFunction || null\\\"\\n [selectedDate]=\\\"_tempDate\\\"\\n [escapeFocusFunction]=\\\"null\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [aggregatedYearGrid]=\\\"aggregatedYearGrid\\\"\\n [yearGrid]=\\\"yearGrid\\\"\\n [startingDayOfWeek]=\\\"startingDayOfWeek\\\"\\n (activeViewChange)=\\\"handleCalendarActiveViewChange($event)\\\"\\n (selectedDateChange)=\\\"handleDateChange($event)\\\"\\n (isValidDateChange)=\\\"setInvalidDateInputHandler($event)\\\"\\n ></fd-calendar>\\n @if (!mobilePortrait) {\\n <div class=\\\"fd-datetime__separator\\\"></div>\\n }\\n @if (isOpen) {\\n <fd-time\\n [ngClass]=\\\"[\\n !mobile && _displayType === 'time' ? 'fd-datetime__active-display-type' : '',\\n mobile && mobilePortrait && _displayType === 'time' ? 'fd-datetime__mobile-display' : ''\\n ]\\\"\\n [disabled]=\\\"disabled\\\"\\n [elementsAtOnce]=\\\"5\\\"\\n [keepTwoDigits]=\\\"keepTwoDigitsTime\\\"\\n [ngModel]=\\\"_tempTime\\\"\\n [spinnerButtons]=\\\"spinnerButtons\\\"\\n [meridian]=\\\"_meridian\\\"\\n [displaySeconds]=\\\"_displaySeconds\\\"\\n [displayMinutes]=\\\"_displayMinutes\\\"\\n [displayHours]=\\\"_displayHours\\\"\\n [timeItemStopPropagationSourcing]=\\\"timeItemStopPropagationSourcing\\\"\\n (ngModelChange)=\\\"handleTimeChange($event)\\\"\\n ></fd-time>\\n }\\n </div>\\n @if (!mobile && showFooter) {\\n <div fd-popover-body-footer>\\n <div class=\\\"fd-datetime__bar\\\" fd-bar barDesign=\\\"footer\\\">\\n <div fd-bar-right>\\n <fd-bar-element>\\n <button\\n fd-button\\n fdType=\\\"emphasized\\\"\\n [disabled]=\\\"!_tempDate\\\"\\n [label]=\\\"'coreDatetimePicker.datetimeOkLabel' | fdTranslate\\\"\\n [ariaLabel]=\\\"'coreDatetimePicker.datetimeOkLabel' | fdTranslate\\\"\\n (click)=\\\"submit()\\\"\\n ></button>\\n </fd-bar-element>\\n <fd-bar-element>\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [label]=\\\"'coreDatetimePicker.datetimeCancelLabel' | fdTranslate\\\"\\n [ariaLabel]=\\\"'coreDatetimePicker.datetimeCancelLabel' | fdTranslate\\\"\\n (click)=\\\"cancel()\\\"\\n ></button>\\n </fd-bar-element>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n</ng-template>\\n\", styles: [\".fd-datetime{display:block}.fd-datetime__bar{overflow:hidden}.fd-datetime__wrapper{max-height:80vh;max-width:80vw}.fd-datetime__mobile-control{display:inline-block;max-width:100%}.fd-datetime__container{display:flex;align-items:center;justify-content:center;margin:0 1rem}.fd-datetime__container--mobile-portrait>*:not(.fd-datetime__mobile-display){display:none!important}.fd-datetime__separator{background-color:#d3d3d3;width:.0625rem;margin:2.625rem 1.75rem;align-self:stretch}.fd-datetime fd-time{width:auto}.fd-datetime__display-type-switcher{margin-top:1rem;display:none;width:100%;justify-content:center}.fd-datetime__display-type-switcher--mobile{display:flex}.fd-popover-full-width{width:100%}@media (max-width: 60rem){.fd-datetime__display-type-switcher{display:flex}.fd-datetime__wrapper{min-width:min(20rem,90vw)}.fd-datetime__container>*:not(.fd-datetime__active-display-type){display:none}}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: PopoverControlComponent, selector: \"fd-popover-control, [fdPopoverControl]\" }, { kind: \"component\", type: PopoverBodyComponent, selector: \"fd-popover-body\", inputs: [\"minWidth\", \"maxWidth\", \"minHeight\", \"maxHeight\"] }, { kind: \"directive\", type: PopoverBodyFooterDirective, selector: \"[fdPopoverBodyFooter], [fd-popover-body-footer]\" }, { kind: \"component\", type: PopoverComponent, selector: \"fd-popover\", inputs: [\"title\", \"trigger\", \"fixedPosition\", \"id\", \"mobile\", \"mobileConfig\", \"preventSpaceKeyScroll\"] }, { kind: \"component\", type: InputGroupComponent, selector: \"fd-input-group\", inputs: [\"placement\", \"required\", \"inline\", \"addOnText\", \"buttonFocusable\", \"type\", \"glyph\", \"glyphFont\", \"button\", \"isControl\", \"showFocus\", \"isExpanded\", \"glyphAriaLabel\", \"addonButtonAriaHidden\", \"iconTitle\", \"ariaLabelledBy\", \"ariaLabel\"], outputs: [\"addOnButtonClicked\", \"search\"] }, { kind: \"directive\", type: InputGroupInputDirective, selector: \"[fdInputGroupInput], [fd-input-group-input]\", inputs: [\"class\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i3.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i3.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i3.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: FormMessageComponent, selector: \"fd-form-message\", inputs: [\"type\", \"static\", \"embedded\", \"class\"] }, { kind: \"component\", type: SegmentedButtonComponent, selector: \"fd-segmented-button\", inputs: [\"toggle\", \"vertical\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { kind: \"component\", type: CalendarComponent, selector: \"fd-calendar\", inputs: [\"selectedDate\", \"selectedMultipleDates\", \"selectedRangeDate\", \"selectedMultipleDateRanges\", \"markWeekends\", \"showWeekNumbers\", \"allowMultipleSelection\", \"mobileLandscape\", \"mobilePortrait\", \"activeView\", \"startingDayOfWeek\", \"calType\", \"id\", \"specialDaysRules\", \"yearGrid\", \"aggregatedYearGrid\", \"rangeHoverEffect\", \"dateRangeFormat\", \"previousButtonDisableFunction\", \"nextButtonDisableFunction\", \"associatedLegendId\", \"escapeFocusFunction\", \"disableFunction\", \"disableRangeStartFunction\", \"disableRangeEndFunction\"], outputs: [\"activeViewChange\", \"selectedDateChange\", \"selectedMultipleDatesChange\", \"selectedRangeDateChange\", \"selectedMultipleDateRangesChange\", \"isValidDateChange\", \"closeCalendar\", \"closeClicked\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: TimeComponent, selector: \"fd-time\", inputs: [\"meridian\", \"validate\", \"keepTwoDigits\", \"disabled\", \"displaySeconds\", \"displayMinutes\", \"displayHours\", \"tablet\", \"elementsAtOnce\", \"time\", \"spinnerButtons\", \"timeItemStopPropagationSourcing\"] }, { kind: \"component\", type: BarComponent, selector: \"[fd-bar]\", inputs: [\"class\", \"barDesign\", \"inPage\", \"inHomePage\", \"clear\", \"size\", \"role\"] }, { kind: \"directive\", type: BarRightDirective, selector: \"[fd-bar-right]\" }, { kind: \"directive\", type: BarElementDirective, selector: \"fd-bar-element\", inputs: [\"fullWidth\"] }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }, { kind: \"pipe\", type: TranslateDayPeriodPipe, name: \"translateDayPeriod\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-datetime-picker', providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatetimePickerComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatetimePickerComponent),\n multi: true\n },\n {\n provide: FD_DATETIME_PICKER_COMPONENT,\n useExisting: DatetimePickerComponent\n },\n registerFormItemControl(DatetimePickerComponent),\n PopoverFormMessageService,\n PopoverService,\n DynamicComponentService\n ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {\n class: 'fd-datetime'\n }, imports: [\n NgTemplateOutlet,\n PopoverControlComponent,\n PopoverBodyComponent,\n PopoverBodyFooterDirective,\n PopoverComponent,\n InputGroupComponent,\n InputGroupInputDirective,\n FormsModule,\n FormMessageComponent,\n SegmentedButtonComponent,\n ButtonComponent,\n CalendarComponent,\n NgClass,\n TimeComponent,\n BarComponent,\n BarRightDirective,\n BarElementDirective,\n FdTranslatePipe,\n TranslateDayPeriodPipe\n ], template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? controlTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n [(isOpen)]=\\\"isOpen\\\"\\n (isOpenChange)=\\\"_onOpenStateChanged($event)\\\"\\n [focusTrapped]=\\\"true\\\"\\n [focusAutoCapture]=\\\"false\\\"\\n [triggers]=\\\"[]\\\"\\n [disabled]=\\\"disabled\\\"\\n [placement]=\\\"placement\\\"\\n [appendTo]=\\\"appendTo\\\"\\n [class.fd-popover-full-width]=\\\"isFullWidth\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body\\n aria-labelledby=\\\"fd-form-message\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-hidden]=\\\"!isOpen\\\"\\n [style.display]=\\\"'block'\\\"\\n >\\n @if (_showPopoverContents) {\\n <ng-template [ngTemplateOutlet]=\\\"pickerTemplate\\\"></ng-template>\\n }\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n #inputGroupComponent\\n [state]=\\\"state\\\"\\n [disabled]=\\\"disabled\\\"\\n [isControl]=\\\"true\\\"\\n [button]=\\\"true\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [class.fd-datetime__mobile-control]=\\\"mobile\\\"\\n glyph=\\\"date-time\\\"\\n [isExpanded]=\\\"isOpen\\\"\\n [glyphAriaLabel]=\\\"'coreDatetimePicker.displayDatetimeToggleLabel' | fdTranslate\\\"\\n [iconTitle]=\\\"'coreDatetimePicker.displayDatetimeToggleLabel' | fdTranslate\\\"\\n (addOnButtonClicked)=\\\"togglePopover()\\\"\\n >\\n <input\\n type=\\\"text\\\"\\n class=\\\"fd-input\\\"\\n fd-input-group-input\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-label]=\\\"'coreDatetimePicker.datetimeInputLabel' | fdTranslate\\\"\\n [attr.id]=\\\"inputId\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [disabled]=\\\"disabled\\\"\\n [ngModel]=\\\"_inputFieldDate | translateDayPeriod\\\"\\n (keydown.f4)=\\\"togglePopover()\\\"\\n (keyup.enter)=\\\"handleInputChange($any($event.target).value, false)\\\"\\n (ngModelChange)=\\\"handleInputChange($event, true)\\\"\\n (blur)=\\\"handleOnTouched($event)\\\"\\n (click)=\\\"mobile && openPopover()\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #formMessageTemplate>\\n @if (_message) {\\n <fd-form-message id=\\\"fd-form-message\\\" [embedded]=\\\"true\\\" [type]=\\\"state\\\">\\n {{ _message }}\\n </fd-form-message>\\n }\\n</ng-template>\\n<ng-template #pickerTemplate>\\n <div class=\\\"fd-datetime__wrapper\\\">\\n <ng-template [ngTemplateOutlet]=\\\"formMessageTemplate\\\"></ng-template>\\n <div\\n class=\\\"fd-datetime__display-type-switcher\\\"\\n [class.fd-datetime__display-type-switcher--desktop]=\\\"!mobile || (mobile && mobileLandscape)\\\"\\n [class.fd-datetime__display-type-switcher--mobile]=\\\"mobile && mobilePortrait\\\"\\n >\\n <fd-segmented-button [(ngModel)]=\\\"_displayType\\\">\\n <button\\n fd-button\\n [label]=\\\"'coreDatetimePicker.displayTypeDateLabel' | fdTranslate\\\"\\n value=\\\"date\\\"\\n ></button>\\n <button\\n fd-button\\n [label]=\\\"'coreDatetimePicker.displayTypeTimeLabel' | fdTranslate\\\"\\n value=\\\"time\\\"\\n ></button>\\n </fd-segmented-button>\\n </div>\\n <ng-content></ng-content>\\n <div class=\\\"fd-datetime__container\\\" [class.fd-datetime__container--mobile-portrait]=\\\"mobile && mobilePortrait\\\">\\n <fd-calendar\\n [ngClass]=\\\"[\\n !mobile && _displayType === 'date' ? 'fd-datetime__active-display-type' : '',\\n mobile && mobilePortrait && _displayType === 'date' ? 'fd-datetime__mobile-display' : ''\\n ]\\\"\\n calType=\\\"single\\\"\\n [activeView]=\\\"activeView\\\"\\n [disableFunction]=\\\"disableFunction || null\\\"\\n [selectedDate]=\\\"_tempDate\\\"\\n [escapeFocusFunction]=\\\"null\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [aggregatedYearGrid]=\\\"aggregatedYearGrid\\\"\\n [yearGrid]=\\\"yearGrid\\\"\\n [startingDayOfWeek]=\\\"startingDayOfWeek\\\"\\n (activeViewChange)=\\\"handleCalendarActiveViewChange($event)\\\"\\n (selectedDateChange)=\\\"handleDateChange($event)\\\"\\n (isValidDateChange)=\\\"setInvalidDateInputHandler($event)\\\"\\n ></fd-calendar>\\n @if (!mobilePortrait) {\\n <div class=\\\"fd-datetime__separator\\\"></div>\\n }\\n @if (isOpen) {\\n <fd-time\\n [ngClass]=\\\"[\\n !mobile && _displayType === 'time' ? 'fd-datetime__active-display-type' : '',\\n mobile && mobilePortrait && _displayType === 'time' ? 'fd-datetime__mobile-display' : ''\\n ]\\\"\\n [disabled]=\\\"disabled\\\"\\n [elementsAtOnce]=\\\"5\\\"\\n [keepTwoDigits]=\\\"keepTwoDigitsTime\\\"\\n [ngModel]=\\\"_tempTime\\\"\\n [spinnerButtons]=\\\"spinnerButtons\\\"\\n [meridian]=\\\"_meridian\\\"\\n [displaySeconds]=\\\"_displaySeconds\\\"\\n [displayMinutes]=\\\"_displayMinutes\\\"\\n [displayHours]=\\\"_displayHours\\\"\\n [timeItemStopPropagationSourcing]=\\\"timeItemStopPropagationSourcing\\\"\\n (ngModelChange)=\\\"handleTimeChange($event)\\\"\\n ></fd-time>\\n }\\n </div>\\n @if (!mobile && showFooter) {\\n <div fd-popover-body-footer>\\n <div class=\\\"fd-datetime__bar\\\" fd-bar barDesign=\\\"footer\\\">\\n <div fd-bar-right>\\n <fd-bar-element>\\n <button\\n fd-button\\n fdType=\\\"emphasized\\\"\\n [disabled]=\\\"!_tempDate\\\"\\n [label]=\\\"'coreDatetimePicker.datetimeOkLabel' | fdTranslate\\\"\\n [ariaLabel]=\\\"'coreDatetimePicker.datetimeOkLabel' | fdTranslate\\\"\\n (click)=\\\"submit()\\\"\\n ></button>\\n </fd-bar-element>\\n <fd-bar-element>\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [label]=\\\"'coreDatetimePicker.datetimeCancelLabel' | fdTranslate\\\"\\n [ariaLabel]=\\\"'coreDatetimePicker.datetimeCancelLabel' | fdTranslate\\\"\\n (click)=\\\"cancel()\\\"\\n ></button>\\n </fd-bar-element>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n</ng-template>\\n\", styles: [\".fd-datetime{display:block}.fd-datetime__bar{overflow:hidden}.fd-datetime__wrapper{max-height:80vh;max-width:80vw}.fd-datetime__mobile-control{display:inline-block;max-width:100%}.fd-datetime__container{display:flex;align-items:center;justify-content:center;margin:0 1rem}.fd-datetime__container--mobile-portrait>*:not(.fd-datetime__mobile-display){display:none!important}.fd-datetime__separator{background-color:#d3d3d3;width:.0625rem;margin:2.625rem 1.75rem;align-self:stretch}.fd-datetime fd-time{width:auto}.fd-datetime__display-type-switcher{margin-top:1rem;display:none;width:100%;justify-content:center}.fd-datetime__display-type-switcher--mobile{display:flex}.fd-popover-full-width{width:100%}@media (max-width: 60rem){.fd-datetime__display-type-switcher{display:flex}.fd-datetime__wrapper{min-width:min(20rem,90vw)}.fd-datetime__container>*:not(.fd-datetime__active-display-type){display:none}}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.DatetimeAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }, { type: i2.PopoverFormMessageService }], propDecorators: { placeholder: [{\n type: Input\n }], placement: [{\n type: Input\n }], appendTo: [{\n type: Input\n }], disabled: [{\n type: Input\n }], inputId: [{\n type: Input\n }], required: [{\n type: Input\n }], customDateTimeFormat: [{\n type: Input\n }], meridian: [{\n type: Input\n }], displaySeconds: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], message: [{\n type: Input\n }], messageTriggers: [{\n type: Input\n }], displayMinutes: [{\n type: Input\n }], displayHours: [{\n type: Input\n }], useValidation: [{\n type: Input\n }], date: [{\n type: Input\n }], isOpen: [{\n type: Input\n }], startingDayOfWeek: [{\n type: Input\n }], activeView: [{\n type: Input\n }], allowNull: [{\n type: Input\n }], keepTwoDigitsTime: [{\n type: Input\n }], state: [{\n type: Input\n }], buttonFocusable: [{\n type: Input\n }], specialDaysRules: [{\n type: Input\n }], yearGrid: [{\n type: Input\n }], timeItemStopPropagationSourcing: [{\n type: Input\n }], aggregatedYearGrid: [{\n type: Input\n }], markWeekends: [{\n type: Input\n }], spinnerButtons: [{\n type: Input\n }], showWeekNumbers: [{\n type: Input\n }], showFooter: [{\n type: Input\n }], processInputOnBlur: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], preventScrollOnFocus: [{\n type: Input\n }], mobile: [{\n type: Input\n }], mobileConfig: [{\n type: Input\n }], mobileLandscape: [{\n type: Input\n }], mobilePortrait: [{\n type: Input\n }], isFullWidth: [{\n type: Input\n }], isOpenChange: [{\n type: Output\n }], activeViewChange: [{\n type: Output\n }], dateChange: [{\n type: Output\n }], calendarChange: [{\n type: Output\n }], timeChange: [{\n type: Output\n }], onClose: [{\n type: Output\n }], touched: [{\n type: Output\n }], _calendarCmp: [{\n type: ViewChild,\n args: [CalendarComponent, { static: false }]\n }], _inputGroupElement: [{\n type: ViewChild,\n args: ['inputGroupComponent', {\n read: ElementRef\n }]\n }], _inputElement: [{\n type: ViewChild,\n args: [InputGroupInputDirective, {\n read: ElementRef\n }]\n }], _formMessageTemplate: [{\n type: ViewChild,\n args: ['formMessageTemplate']\n }], _pickerTemplate: [{\n type: ViewChild,\n args: ['pickerTemplate']\n }], disableFunction: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRldGltZS1waWNrZXIvZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRldGltZS1waWNrZXIvZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsT0FBTyxFQUNILGlCQUFpQixFQUlqQixrQkFBa0IsRUFDckIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQixlQUFlLEVBRWYsc0JBQXNCLEVBQ3pCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUVILG9CQUFvQixFQUNwQix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQzFCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEcsT0FBTyxFQUNILG9CQUFvQixFQUNwQiww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dCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBDYWxlbmRhckNvbXBvbmVudCxcbiAgICBDYWxlbmRhclllYXJHcmlkLFxuICAgIERheXNPZldlZWssXG4gICAgRmRDYWxlbmRhclZpZXcsXG4gICAgRmRDYWxlbmRhclZpZXdFbnVtXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jYWxlbmRhcic7XG5pbXBvcnQge1xuICAgIGNvbnZlcnRUb0Rlc2lyZWRGb3JtYXQsXG4gICAgREFURV9USU1FX0ZPUk1BVFMsXG4gICAgRGF0ZXRpbWVBZGFwdGVyLFxuICAgIERhdGVUaW1lRm9ybWF0cyxcbiAgICBUcmFuc2xhdGVEYXlQZXJpb2RQaXBlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5pbXBvcnQge1xuICAgIEZvcm1JdGVtQ29udHJvbCxcbiAgICBGb3JtTWVzc2FnZUNvbXBvbmVudCxcbiAgICBQb3BvdmVyRm9ybU1lc3NhZ2VTZXJ2aWNlLFxuICAgIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7IElucHV0R3JvdXBDb21wb25lbnQsIElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbnB1dC1ncm91cCc7XG5pbXBvcnQge1xuICAgIFBvcG92ZXJCb2R5Q29tcG9uZW50LFxuICAgIFBvcG92ZXJCb2R5Rm9vdGVyRGlyZWN0aXZlLFxuICAgIFBvcG92ZXJDb21wb25lbnQsXG4gICAgUG9wb3ZlckNvbnRyb2xDb21wb25lbnQsXG4gICAgUG9wb3ZlclNlcnZpY2Vcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BvcG92ZXInO1xuaW1wb3J0IHsgUGxhY2VtZW50LCBTcGVjaWFsRGF5UnVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSwgRm9jdXNUcmFwU2VydmljZSwgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCYXJDb21wb25lbnQsIEJhckVsZW1lbnREaXJlY3RpdmUsIEJhclJpZ2h0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgU2VnbWVudGVkQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NlZ21lbnRlZC1idXR0b24nO1xuaW1wb3J0IHsgVGltZUNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90aW1lJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBEYXRldGltZVBpY2tlck1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZXRpbWUtcGlja2VyLW1vYmlsZS9kYXRldGltZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlVGltZVBpY2tlciB9IGZyb20gJy4vZGF0ZXRpbWUtcGlja2VyLm1vZGVsJztcbmltcG9ydCB7IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IEZEX0RBVEVUSU1FX1BJQ0tFUl9DT01QT05FTlQsIEZEX0RBVEVUSU1FX1BJQ0tFUl9NT0JJTEVfQ09ORklHIH0gZnJvbSAnLi90b2tlbnMnO1xuXG4vKipcbiAqIFRoZSBkYXRldGltZSBwaWNrZXIgY29tcG9uZW50IGlzIGFuIG9waW5pb25hdGVkIGNvbXBvc2l0aW9uIG9mIHRoZSBmZC1wb3BvdmVyLFxuICogZmQtY2FsZW5kYXIgYW5kIGZkLXRpbWUgY29tcG9uZW50cyB0byBhY2NvbXBsaXNoIHRoZSBVSSBwYXR0ZXJuIGZvciBwaWNraW5nIGEgZGF0ZSBhbmQgdGltZS5cbiAqIFN1cHBvcnRzIEFuZ3VsYXIgRm9ybXMuXG4gKiBgYGBodG1sXG4gKiA8ZmQtZGF0ZS10aW1lLXBpY2tlciBbKG5nTW9kZWwpXT1cImRhdGVUaW1lXCI+PC9mZC1kYXRlLXRpbWUtcGlja2VyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtZGF0ZXRpbWUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRldGltZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfREFURVRJTUVfUElDS0VSX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBEYXRldGltZVBpY2tlckNvbXBvbmVudFxuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlckZvcm1JdGVtQ29udHJvbChEYXRldGltZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgIFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIFBvcG92ZXJTZXJ2aWNlLFxuICAgICAgICBEeW5hbWljQ29tcG9uZW50U2VydmljZVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtZGF0ZXRpbWUnXG4gICAgfSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIFBvcG92ZXJDb250cm9sQ29tcG9uZW50LFxuICAgICAgICBQb3BvdmVyQm9keUNvbXBvbmVudCxcbiAgICAgICAgUG9wb3ZlckJvZHlGb290ZXJEaXJlY3RpdmUsXG4gICAgICAgIFBvcG92ZXJDb21wb25lbnQsXG4gICAgICAgIElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgICAgIElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIEZvcm1NZXNzYWdlQ29tcG9uZW50LFxuICAgICAgICBTZWdtZW50ZWRCdXR0b25Db21wb25lbnQsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIFRpbWVDb21wb25lbnQsXG4gICAgICAgIEJhckNvbXBvbmVudCxcbiAgICAgICAgQmFyUmlnaHREaXJlY3RpdmUsXG4gICAgICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgVHJhbnNsYXRlRGF5UGVyaW9kUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQ8RD5cbiAgICBpbXBsZW1lbnRzXG4gICAgICAgIERhdGVUaW1lUGlja2VyPEQ+LFxuICAgICAgICBPbkluaXQsXG4gICAgICAgIE9uRGVzdHJveSxcbiAgICAgICAgT25DaGFuZ2VzLFxuICAgICAgICBBZnRlclZpZXdJbml0LFxuICAgICAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICAgICAgVmFsaWRhdG9yLFxuICAgICAgICBGb3JtSXRlbUNvbnRyb2xcbntcbiAgICAvKiogUGxhY2Vob2xkZXIgZm9yIHRoZSBpbm5lciBpbnB1dCBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXIgPSAnJztcblxuICAgIC8qKlxuICAgICAqICBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BvdmVyLiBJdCBjYW4gYmUgb25lIG9mOiB0b3AsIHRvcC1zdGFydCwgdG9wLWVuZCwgYm90dG9tLFxuICAgICAqICBib3R0b20tc3RhcnQsIGJvdHRvbS1lbmQsIHJpZ2h0LCByaWdodC1zdGFydCwgcmlnaHQtZW5kLCBsZWZ0LCBsZWZ0LXN0YXJ0LCBsZWZ0LWVuZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgICAvKiogVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHBvcG92ZXIgc2hvdWxkIGJlIGFwcGVuZGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwZW5kVG86IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogSWQgYXR0cmlidXRlIGZvciBpbnB1dCBlbGVtZW50IGluc2lkZSBEYXRlVGltZVBpY2tlciBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0SWQ6IHN0cmluZztcblxuICAgIC8qKiBJZiBpdCBpcyBtYW5kYXRvcnkgZmllbGQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogRGVmaW5lIGEgY3VzdG9tIGRhdGV0aW1lIGZvcm1hdC4gQ2FuIGJlIGEgc3RyaW5nIGZvciBEYXlqc0RhdGV0aW1lQWRhcHRlciBvciBvYmplY3QgZm9yIEZkRGF0ZXRpbWVBZGFwdGVyICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VzdG9tRGF0ZVRpbWVGb3JtYXQ6IHVua25vd247XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB0aW1lIGNvbXBvbmVudCBzaG91bGQgYmUgbWVyaWRpYW4gKGFtL3BtKS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIG1lcmlkaWFuOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdGltZSBjb21wb25lbnQgc2hvd3Mgc2Vjb25kcy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZSBmb3JtYXQgb3B0aW9uXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlTZWNvbmRzOiBib29sZWFuO1xuXG4gICAgLyoqIGFyaWEtbGFiZWxsZWRieSBmb3IgZWxlbWVudCBkZXNjcmliaW5nIGRhdGUtcGlja2VyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogVGV4dCBkaXNwbGF5ZWQgaW4gbWVzc2FnZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKiBUaGUgdHJpZ2dlciBldmVudHMgdGhhdCB3aWxsIG9wZW4vY2xvc2UgdGhlIG1lc3NhZ2UgYm94LlxuICAgICAqICBBY2NlcHRzIGFueSBbSFRNTCBET00gRXZlbnRzXShodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL2RvbV9vYmpfZXZlbnQuYXNwKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtZXNzYWdlVHJpZ2dlcnModHJpZ2dlcnM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VUcmlnZ2VycyA9IHRyaWdnZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRpbWUgY29tcG9uZW50IHNob3dzIG1pbnV0ZXMuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2NhbGUgZm9ybWF0IG9wdGlvblxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5TWludXRlczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRpbWUgY29tcG9uZW50IHNob3dzIGhvdXJzLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgbG9jYWxlIGZvcm1hdCBvcHRpb25cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUhvdXJzOiBib29sZWFuO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gcGVyZm9ybSB2aXN1YWwgdmFsaWRhdGlvbiBvbiB0aGUgcGlja2VyIGlucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdXNlVmFsaWRhdGlvbiA9IHRydWU7XG5cbiAgICAvKiogQ3VycmVudCBzZWxlY3RlZCBkYXRlLiBUd28td2F5IGJpbmRpbmcgaXMgc3VwcG9ydGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBpcyBvcGVuLiBUd28td2F5IGJpbmRpbmcgaXMgc3VwcG9ydGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICAvKiogVGhlIGRpc2FibGVGdW5jdGlvbiBmb3IgdGhlIGNhbGVuZGFyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRpbmdEYXlPZldlZWs6IERheXNPZldlZWsgPSAxO1xuXG4gICAgLyoqIEFjdHVhbGx5IHNob3duIGFjdGl2ZSB2aWV3IG9uZSBvZiAnZGF5JyB8ICdtb250aCcgfCAneWVhcicgaW4gY2FsZW5kYXIgY29tcG9uZW50Ki9cbiAgICBASW5wdXQoKVxuICAgIGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3ID0gRmRDYWxlbmRhclZpZXdFbnVtLkRheTtcblxuICAgIC8qKiBXaGV0aGVyIGEgbnVsbCBpbnB1dCBpcyBjb25zaWRlcmVkIHZhbGlkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dOdWxsID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBJbnB1dCB3aGVuIHNldCB0byB0cnVlIHRpbWUgY29tcG9uZW50IHdpbGwgdXNlIDIgZGlnaXRzIGZvciBlYWNoIG51bWJlci5cbiAgICAgKiBGb3IgZXhhbXBsZSA5IHdpbGwgYmVjb21lIDA5XG4gICAgICogYnV0IDEyIHdpbGwgYmUga2VwdCBhcyAxMi5cbiAgICAgKiBPbmx5IHVzZXMgYnkgdGltZSBjb21wb25lbnQgYW5kIGRvZXMgbm90IGNoYW5nZSBpbnB1dCBmb3JtYXRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGtlZXBUd29EaWdpdHNUaW1lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHN0YXRlIG9mIHRoZSBmb3JtIGNvbnRyb2wgLSBhcHBsaWVzIGNzcyBjbGFzc2VzLlxuICAgICAqICBBbHNvIHRoaXMgaXMgYXBwbGllZCB0byBtZXNzYWdlLlxuICAgICAqICBDYW4gYmUgYHN1Y2Nlc3NgLCBgZXJyb3JgLCBgd2FybmluZ2AsIGBpbmZvcm1hdGlvbmAgb3IgYmxhbmsgZm9yIGRlZmF1bHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc3RhdGUoc3RhdGU6IEZvcm1TdGF0ZXMpIHtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG5cbiAgICBnZXQgc3RhdGUoKTogRm9ybVN0YXRlcyB7XG4gICAgICAgIGlmICh0aGlzLnVzZVZhbGlkYXRpb24gJiYgdGhpcy5pc0ludmFsaWREYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBQb3BvdmVyIGlzIHRvZ2dsZWQgd2l0aCBmNCBrZXlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lhbCBkYXlzIG1hcmssIGl0IGNhbiBiZSB1c2VkIGJ5IHBhc3NpbmcgYXJyYXkgb2Ygb2JqZWN0IHdpdGhcbiAgICAgKiBTcGVjaWFsIGRheSBudW1iZXIsIGxpc3QgMS0yMCBbY2xhc3M6YGZkLWNhbGVuZGFyX19pdGVtLS1sZWdlbmQte3tudW1iZXJ9fWBdIGlzIGF2YWlsYWJsZSB0aGVyZTpcbiAgICAgKiBodHRwczovL3NhcC5naXRodWIuaW8vZnVuZGFtZW50YWwtc3R5bGVzL2NvbXBvbmVudHMvY2FsZW5kYXIuaHRtbCBjYWxlbmRhciBzcGVjaWFsIGRheXMgc2VjdGlvblxuICAgICAqIFJ1bGUgYWNjZXB0cyBtZXRob2Qgd2l0aCBGZERhdGUgb2JqZWN0IGFzIGEgcGFyYW1ldGVyLiBleDpcbiAgICAgKiBgcnVsZTogKGZkRGF0ZTogRmREYXRlKSA9PiBmZERhdGUuZ2V0RGF5KCkgPT09IDFgLCB3aGljaCB3aWxsIG1hcmsgYWxsIHN1bmRheXMgYXMgc3BlY2lhbCBkYXkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzcGVjaWFsRGF5c1J1bGVzOiBTcGVjaWFsRGF5UnVsZTxEPltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIHllYXIgZ3JpZCxcbiAgICAgKiBSb3csIENvbHVtbnMgYW5kIG1ldGhvZCB0byBkaXNwbGF5IHllYXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB5ZWFyR3JpZDogQ2FsZW5kYXJZZWFyR3JpZCA9IHtcbiAgICAgICAgcm93czogNCxcbiAgICAgICAgY29sczogNVxuICAgIH07XG5cbiAgICAvKiogV2hldGhlciB0byBzdG9wIGV2ZW50IHByb3BhZ2F0aW9uIGZvciBjb2xsYXBzZWQgdGltZSBpdGVtcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGltZUl0ZW1TdG9wUHJvcGFnYXRpb25Tb3VyY2luZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSBhZ2dyZWdhdGVkIHllYXIgZ3JpZCxcbiAgICAgKiBSb3csIENvbHVtbnMgYW5kIG1ldGhvZCB0byBkaXNwbGF5IHllYXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhZ2dyZWdhdGVkWWVhckdyaWQ6IENhbGVuZGFyWWVhckdyaWQgPSB7XG4gICAgICAgIHJvd3M6IDQsXG4gICAgICAgIGNvbHM6IDNcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgc3VuZGF5L3NhdHVyZGF5IHdpdGggYGZkLWNhbGVuZGFyX19pdGVtLS13ZWVrZW5kYCBjbGFzc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWFya1dlZWtlbmRzID0gdHJ1ZTtcblxuICAgIC8qKiBASW5wdXQgV2hldGhlciB0byBzaG93IHNwaW5uZXIgYnV0dG9ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3Bpbm5lckJ1dHRvbnMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIHNob3cgd2VlayBudW1iZXJzIG5leHQgdG8gZGF5c1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1dlZWtOdW1iZXJzID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSBkYXRldGltZSBwaWNrZXIgZm9vdGVyIHdpdGggT0svY2FuY2VsIGJ1dHRvbnMuICovXG4gICAgQElucHV0KClcbiAgICBzaG93Rm9vdGVyID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcmVjYWxjdWxhdGUgdmFsdWUgZnJvbSB0aGUgaW5wdXQgYXMgdXNlciB0eXBlcyBvciBvbiBibHVyLlxuICAgICAqIEJ5IGRlZmF1bHQsIHVwZGF0ZXMgdGhlIHZhbHVlIGFzIHVzZXIgdHlwZXMuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwcm9jZXNzSW5wdXRPbkJsdXIgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcHJldmVudCBwYWdlIHNjcm9sbGluZyB3aGVuIGZvY3VzaW5nIGRhdGUgcGlja2VyIGlucHV0IGZpZWxkIGFmdGVyIGNhbGVuZGFyIGhhcyBiZWVuIGNsb3NlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByZXZlbnRTY3JvbGxPbkZvY3VzID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byByZW5kZXIgZGF0ZXRpbWUgcGlja2VyIGluIG1vYmlsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogTW9iaWxlIG1vZGUgY29uZmlndXJhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZztcblxuICAgIC8qKiBXaGV0aGVyIGNhbGVuZGFyIGlzIHVzZWQgaW5zaWRlIG1vYmlsZSBpbiBsYW5kc2NhcGUgbW9kZSwgaXQgYWxzbyBhZGRzIGNsb3NlIGJ1dHRvbiBvbiByaWdodCBzaWRlICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVMYW5kc2NhcGUgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGNhbGVuZGFyIGlzIHVzZWQgaW5zaWRlIG1vYmlsZSBpbiBwb3J0cmFpdCBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVQb3J0cmFpdCA9IGZhbHNlO1xuXG4gICAgLyoqIFRvIHNldCBpbnB1dCB3aWR0aCAxMDAlICovXG4gICAgQElucHV0KCkgaXNGdWxsV2lkdGggPSBmYWxzZTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBpc09wZW4gcHJvcGVydHkgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBpc09wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgY2FsZW5kYXIgYWN0aXZlIHZpZXcgaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBhY3RpdmVWaWV3Q2hhbmdlOiBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+ID0gbmV3IEV2ZW50RW1pdHRlcjxGZENhbGVuZGFyVmlldz4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGRhdGUgY2hhbmdlcy4gVGhpcyBjYW4gYmUgYSB0aW1lIG9yIGRheSBjaGFuZ2UuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPEQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZGF5IGNoYW5nZXMgZnJvbSB0aGUgY2FsZW5kYXIuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2FsZW5kYXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEPiA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHRpbWUgY2hhbmdlcyBmcm9tIHRoZSB0aW1lIGNvbXBvbmVudC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB0aW1lQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHBvcG92ZXIgY2xvc2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIHJlYWRvbmx5IG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0ZXBpY2tlciBjaGFuZ2VzIGl0J3MgXCJ0b3VjaGVkXCIgc3RhdGUuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgdG91Y2hlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEluZGljYXRlcyB3aGVuIGRhdGV0aW1lIGlucHV0IGlzIGluIGludmFsaWQgc3RhdGUuICovXG4gICAgZ2V0IGlzSW52YWxpZERhdGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCAmJiB0aGlzLl90b3VjaGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJlZmVyZW5jZSB0byB0aGUgaW5uZXIgY2FsZW5kYXIgY29tcG9uZW50LiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHByaXZhdGUgc2V0IF9jYWxlbmRhckNtcChjYWxlbmRhcjogQ2FsZW5kYXJDb21wb25lbnQ8RD4pIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjYWxlbmRhcj8uc2V0Q3VycmVudGx5RGlzcGxheWVkKHRoaXMuX2NhbGVuZGFyUGVuZGluZ0RhdGUpO1xuICAgICAgICAgICAgY2FsZW5kYXI/LmluaXRpYWxGb2N1cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQgPSBjYWxlbmRhcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0R3JvdXBDb21wb25lbnQnLCB7XG4gICAgICAgIHJlYWQ6IEVsZW1lbnRSZWZcbiAgICB9KVxuICAgIF9pbnB1dEdyb3VwRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUsIHtcbiAgICAgICAgcmVhZDogRWxlbWVudFJlZlxuICAgIH0pXG4gICAgX2lucHV0RWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZm9ybU1lc3NhZ2VUZW1wbGF0ZScpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9ybU1lc3NhZ2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgncGlja2VyVGVtcGxhdGUnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3BpY2tlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2FsZW5kYXJDb21wb25lbnQ6IENhbGVuZGFyQ29tcG9uZW50PEQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlVHJpZ2dlcnM6IHN0cmluZ1tdID0gWydmb2N1c2luJywgJ2ZvY3Vzb3V0J107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRGF0ZSBvZiB0aGUgaW5wdXQgZmllbGQuIEludGVybmFsIHVzZS5cbiAgICAgKiBGb3IgcHJvZ3JhbW1hdGljIHNlbGVjdGlvbiwgdXNlIHR3by13YXkgYmluZGluZyBvbiB0aGUgZGF0ZSBpbnB1dC5cbiAgICAgKi9cbiAgICBfaW5wdXRGaWVsZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNJbnZhbGlkRGF0ZUlucHV0ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBUaGUgdGVtcG9yYXJ5IFRpbWUgb2JqZWN0IGZvciB1c2UgYmVmb3JlICdPSycgaXMgcHJlc3NlZC4gSW50ZXJuYWwgdXNlLiAqL1xuICAgIF90ZW1wVGltZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogQGhpZGRlbiBUaGUgdGVtcG9yYXJ5IENhbGVuZGFyRGF5IG9iamVjdCBmb3IgdXNlIGJlZm9yZSAnT0snIGlzIHByZXNzZWQuIEludGVybmFsIHVzZS4gKi9cbiAgICBfdGVtcERhdGU6IE51bGxhYmxlPEQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbWVyaWRpYW46IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5U2Vjb25kczogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXlNaW51dGVzOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlzcGxheUhvdXJzOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gd2hldGhlciB0byBkaXNwbGF5IGRhdGUgb3IgdGltZSBpbiBtb2JpbGUgbW9kZSAqL1xuICAgIF9kaXNwbGF5VHlwZTogJ2RhdGUnIHwgJ3RpbWUnID0gJ2RhdGUnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2hvd1BvcG92ZXJDb250ZW50cyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGF0ZTogRm9ybVN0YXRlcyA9ICdkZWZhdWx0JztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsZW5kYXJQZW5kaW5nRGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZHluYW1pY0NvbXBvbmVudFNlcnZpY2UgPSBpbmplY3QoRHluYW1pY0NvbXBvbmVudFNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb2N1c1RyYXBTZXJ2aWNlID0gaW5qZWN0KEZvY3VzVHJhcFNlcnZpY2UsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbW9iaWxlQ29tcG9uZW50UmVmOiBOdWxsYWJsZTxDb21wb25lbnRSZWY8RGF0ZXRpbWVQaWNrZXJNb2JpbGVDb21wb25lbnQ8RD4+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG91Y2hlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIC8vIFVzZSBAT3B0aW9uYWwgdG8gYXZvaWQgYW5ndWxhciBpbmplY3Rpb24gZXJyb3IgbWVzc2FnZSBhbmQgdGhyb3cgb3VyIG93biB3aGljaCBpcyBtb3JlIHByZWNpc2Ugb25lXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2RhdGVUaW1lQWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERBVEVfVElNRV9GT1JNQVRTKSBwcml2YXRlIF9kYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0cyxcbiAgICAgICAgcHJpdmF0ZSBfcG9wb3ZlckZvcm1NZXNzYWdlOiBQb3BvdmVyRm9ybU1lc3NhZ2VTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RhdGVUaW1lQWRhcHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVGb3JtYXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RBVEVfVElNRV9GT1JNQVRTJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZWZhdWx0IG1vZGVsIHZhbHVlXG4gICAgICAgIHRoaXMuZGF0ZSA9IF9kYXRlVGltZUFkYXB0ZXIubm93KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIGNlcnRhaW4gZGF0ZXMgaW4gdGhlIGNhbGVuZGFyLlxuICAgICAqIEBwYXJhbSBmZERhdGUgRmREYXRlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlRnVuY3Rpb246ICh2YWx1ZTogRCkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKHZhbHVlOiBEIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5kYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUZW1wRGF0ZVRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChbJ2Rpc3BsYXlIb3VycycsICdkaXNwbGF5TWludXRlcycsICdkaXNwbGF5U2Vjb25kcycsICdtZXJpZGlhbiddLnNvbWUoKGlucHV0KSA9PiBpbnB1dCBpbiBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlVGltZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnaXNPcGVuJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckNvbnRlbnRzID0gdGhpcy5pc09wZW47XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VGVtcERhdGVUaW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVUaW1lT3B0aW9ucygpO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXMucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5faW5wdXRGaWVsZERhdGUgIT09ICcnKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRJbnB1dCh0aGlzLmRhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVRpbWVPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9tb2JpbGVDb21wb25lbnRSZWY/LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fSW5pdGlhbGlzZVZhcmlhYmxlc0luTWVzc2FnZVNlcnZpY2UoKTtcblxuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFVwTW9iaWxlTW9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIGJpbmRpbmdzIGFmdGVyIHJlbmRlcmluZ1xuICAgICAgICAvLyBpcyBuZWVkZWQgdG8gcHJlcGVybHkgcmVmbGVjdCBlcnJvciBzdGF0ZVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBWYWxpZGF0b3IgSW50ZXJmYWNlLCBhZGRzIHZhbGlkYXRpb24gc3VwcG9ydCBmb3IgZm9ybXNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZSgpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ3VycmVudE1vZGVsVmFsaWQoKSAmJiAhdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0XG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgZGF0ZVZhbGlkYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgcG9wb3Zlci4gKi9cbiAgICB0b2dnbGVQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5Qb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCBoYW5kbGVzIGNhbGVuZGFyIGFjdGl2ZSB2aWV3IGNoYW5nZSBhbmQgdGhyb3dzIGV2ZW50LlxuICAgICAqL1xuICAgIGhhbmRsZUNhbGVuZGFyQWN0aXZlVmlld0NoYW5nZShhY3RpdmVWaWV3OiBGZENhbGVuZGFyVmlldyk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVZpZXdDaGFuZ2UuZW1pdChhY3RpdmVWaWV3KTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgaGFuZGxlcyBibHVyIGV2ZW50cyBvbiBkYXRldGltZSBwaWNrZXIgaW5wdXQgKi9cbiAgICBoYW5kbGVPblRvdWNoZWQoZXZlbnQ/OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RvdWNoZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLnRvdWNoZWQubmV4dCgpO1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UoKDxIVE1MSW5wdXRFbGVtZW50PmV2ZW50LnRhcmdldCkudmFsdWUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBPcGVucyB0aGUgcG9wb3Zlci4gKi9cbiAgICBvcGVuUG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbiAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNUcmFwU2VydmljZT8ucGF1c2VDdXJyZW50Rm9jdXNUcmFwKCk7XG4gICAgICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckNvbnRlbnRzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9vbk9wZW5TdGF0ZUNoYW5nZWQodGhpcy5pc09wZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENsb3NlcyB0aGUgcG9wb3ZlciBhbmQgcmVmcmVzaCBtb2RlbCAqL1xuICAgIGNsb3NlUG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DbG9zZS5lbWl0KCk7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX29uT3BlblN0YXRlQ2hhbmdlZCh0aGlzLmlzT3Blbik7XG4gICAgICAgIHRoaXMuX2ZvY3VzVHJhcFNlcnZpY2U/LnVucGF1c2VDdXJyZW50Rm9jdXNUcmFwKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlT25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyQ29udGVudHMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldEludmFsaWREYXRlSW5wdXRIYW5kbGVyKGlzSW52YWxpZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSBpc0ludmFsaWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoc2VsZWN0ZWQ6IGFueSkgPT4geyB2b2lkIH0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHRoYXQgYWxsb3dzIHRvIHVzZSBbKG5nTW9kZWwpXSBvciBmb3Jtc1xuICAgICAqL1xuICAgIHdyaXRlVmFsdWUoc2VsZWN0ZWQ6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuX3BhcnNlRGF0ZShzZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLl9pc01vZGVsVmFsaWQodGhpcy5kYXRlKTtcbiAgICAgICAgaWYgKHRoaXMuaXNDdXJyZW50TW9kZWxWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUZW1wRGF0ZVRpbWUoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5kYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXRJbnB1dCh0aGlzLmRhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gY2FsZW5kYXIgY29tcG9uZW50LCB3aGVuIHRoZXJlIGlzIHNlbGVjdGVkIGRhdGUgY2hhbmdlZC5cbiAgICAgKiBJZiBpbnZhbGlkIHRpbWUgbW9kZWwgaXMgZGV0ZWN0ZWQsIGl0IHRha2VzIHRpbWUgbW9kZWwgZGF0YSBmcm9tIFRpbWVDb21wb25lbnQuXG4gICAgICovXG4gICAgaGFuZGxlRGF0ZUNoYW5nZShkYXRlOiBEKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RlbXBEYXRlID0gZGF0ZTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dGb290ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBmcm9tIHRpbWUgY29tcG9uZW50LCB3aGVuIHRoZXJlIGlzIHNlbGVjdGVkIHRpbWUgY2hhbmdlZFxuICAgICAqL1xuICAgIGhhbmRsZVRpbWVDaGFuZ2UodGltZTogRCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90ZW1wVGltZSA9IHRpbWU7XG4gICAgICAgIGlmICghdGhpcy5zaG93Rm9vdGVyKSB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCB3aGVuICdPSycgYnV0dG9uIGlzIHByZXNzZWQuXG4gICAgICovXG4gICAgc3VibWl0KCk6IHZvaWQge1xuICAgICAgICAvLyBJbml0aWFsaXplIGRhdGUgYW5kIHRpbWUgdmFsdWVzLCBkZWZhdWx0aW5nIHRvIHRoZSBjdXJyZW50IGRhdGUgaWYgaW52YWxpZFxuICAgICAgICBsZXQgY3VycmVudERhdGUgPSB0aGlzLl90ZW1wRGF0ZSE7XG4gICAgICAgIGxldCBjdXJyZW50VGltZSA9IHRoaXMuX3RlbXBUaW1lITtcblxuICAgICAgICAvLyBJbml0aWFsaXplIGRhdGUgYW5kIHRpbWUgdmFsdWVzLCBkZWZhdWx0aW5nIHRvIHRoZSBjdXJyZW50IGRhdGUgaWYgaW52YWxpZFxuICAgICAgICBpZiAoIXRoaXMuX3RlbXBEYXRlIHx8ICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLl90ZW1wRGF0ZSkpIHtcbiAgICAgICAgICAgIGN1cnJlbnREYXRlID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCkhO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fdGVtcFRpbWUgfHwgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuX3RlbXBUaW1lKSkge1xuICAgICAgICAgICAgY3VycmVudFRpbWUgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIudG9kYXkoKSE7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kYXRlID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnNldFRpbWUoXG4gICAgICAgICAgICAgICAgY3VycmVudERhdGUsXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldEhvdXJzKGN1cnJlbnRUaW1lKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TWludXRlcyhjdXJyZW50VGltZSksXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFNlY29uZHMoY3VycmVudFRpbWUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNDdXJyZW50TW9kZWxWYWxpZCgpO1xuXG4gICAgICAgIHRoaXMuX3NldElucHV0KHRoaXMuZGF0ZSk7XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmRhdGUpO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dGb290ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiAnQ2FuY2VsJyBidXR0b24gaXMgcHJlc3NlZC5cbiAgICAgKi9cbiAgICBjYW5jZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RlbXBEYXRlID0gdGhpcy5kYXRlO1xuICAgICAgICB0aGlzLl90ZW1wVGltZSA9IHRoaXMuZGF0ZTtcbiAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTG9va3MgbGlrZSBubyBvbmUgdXNlcyBpdC4gU2hvdWxkIGJlIHJlbW92ZWQ/XG4gICAgICovXG4gICAgZm9jdXNBcnJvd0xlZnQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyMnICsgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQuaWQgKyAnLWxlZnQtYXJyb3cnKSkge1xuICAgICAgICAgICAgdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjJyArIHRoaXMuX2NhbGVuZGFyQ29tcG9uZW50LmlkICsgJy1sZWZ0LWFycm93JykuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0cmFuc2Zvcm1pbmcgc3RyaW5nIHRvIGRhdGV0aW1lLCBkZXBlbmRpbmcgb24gdHlwZSBvclxuICAgICAqIHZhbGlkYXRpb24gdGhlIHJlc3VsdHMgYXJlIGRpZmZlcmVudC4gSXQgYWxzbyBjaGFuZ2VzIHRvIHN0YXRlIG9mIF9pc0ludmFsaWREYXRlSW5wdXQuXG4gICAgICovXG4gICAgaGFuZGxlSW5wdXRDaGFuZ2UoaW5wdXRTdHI6IHN0cmluZywgaXNUeXBlRXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKChpc1R5cGVFdmVudCAmJiB0aGlzLnByb2Nlc3NJbnB1dE9uQmx1cikgfHwgKCFpc1R5cGVFdmVudCAmJiAhdGhpcy5wcm9jZXNzSW5wdXRPbkJsdXIpKSB7XG4gICAgICAgICAgICAvLyBpZiBwcm9jZXNzSW5wdXRPbkJsdXIgPT09IHRydWUsIGlnbm9yZSB0eXBlIGV2ZW50XG4gICAgICAgICAgICAvLyBpZiBwcm9jZXNzSW5wdXRPbkJsdXIgPT09IGZhbHNlLCBpZ25vcmUgYmx1ci9lbnRlciBldmVudFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gaW5wdXRTdHIgPz8gJyc7XG4gICAgICAgIGlmICghaW5wdXRTdHIpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmFsbG93TnVsbDtcbiAgICAgICAgICAgIHRoaXMuZGF0ZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXRTdHIgPSBjb252ZXJ0VG9EZXNpcmVkRm9ybWF0KGlucHV0U3RyLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuX3BhcnNlRGF0ZShpbnB1dFN0cik7XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLl9pc01vZGVsVmFsaWQodGhpcy5kYXRlKTtcblxuICAgICAgICBpZiAoIXRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VGVtcERhdGVUaW1lKCk7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZGlhbG9nQXBwcm92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHVzZWQgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZSBmb3IgbW9iaWxlIG1vZGUuICovXG4gICAgZGlhbG9nRGlzbWlzcyh2YWx1ZTogRCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc2V0SW5wdXQodGhpcy5kYXRlKTtcblxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLmhpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5zaG93KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbk9wZW5TdGF0ZUNoYW5nZWQoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQoaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICAgICAgLy8gZm9jdXMgaW5wdXQgY29udHJvbCBldmVyeSB0aW1lIHBvcHVwIGlzIGNsb3NlZFxuICAgICAgICBpZiAoIWlzT3BlbiAmJiB0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKHtcbiAgICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0aGlzLnByZXZlbnRTY3JvbGxPbkZvY3VzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXJDb250ZW50cyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBpZiBtb2RlbCBzZWxlY3RlZCBkYXRlL2RhdGVzIGhhdmUgcHJvcGVybHkgdHlwZXMgYW5kIGFyZSB2YWxpZCAqL1xuICAgIGlzQ3VycmVudE1vZGVsVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc01vZGVsVmFsaWQodGhpcy5kYXRlKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gaWYgRmREYXRlVGltZSBwYXNzZWQgYXMgYXJnIGhhcyBwcm9wZXJseSB0eXBlcyBhbmQgaXMgdmFsaWQgKi9cbiAgICBwcml2YXRlIF9pc01vZGVsVmFsaWQoZGF0ZTogTnVsbGFibGU8RD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChkYXRlID09PSBudWxsICYmIHRoaXMuYWxsb3dOdWxsKSB8fCB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChkYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldElucHV0KGRhdGVUaW1lOiBOdWxsYWJsZTxEPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IGRhdGVUaW1lID8gdGhpcy5fZm9ybWF0RGF0ZVRpbWUoZGF0ZVRpbWUpIDogJyc7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKGRhdGU6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyUGVuZGluZ0RhdGUgPSBkYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGb3JtYXQgZGF0ZSB0aW1lIGVudGl0eS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtYXREYXRlVGltZShkYXRlVGltZTogRCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGU6IHN0cmluZyA9IHRoaXMuY3VzdG9tRGF0ZVRpbWVGb3JtYXRcbiAgICAgICAgICAgID8gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChkYXRlVGltZSwgdGhpcy5jdXN0b21EYXRlVGltZUZvcm1hdClcbiAgICAgICAgICAgIDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChkYXRlVGltZSwgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkuZGF0ZVRpbWVJbnB1dCk7XG4gICAgICAgIHJldHVybiBmb3JtYXR0ZWREYXRlIHx8ICcnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfSW5pdGlhbGlzZVZhcmlhYmxlc0luTWVzc2FnZVNlcnZpY2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5pbml0KHRoaXMuX2lucHV0R3JvdXBFbGVtZW50KTtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLm1lc3NhZ2UgPSB0aGlzLl9mb3JtTWVzc2FnZVRlbXBsYXRlO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UudHJpZ2dlcnMgPSB0aGlzLl9tZXNzYWdlVHJpZ2dlcnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wYXJzZURhdGUoZGF0ZTogdW5rbm93bik6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5wYXJzZShkYXRlLCB0aGlzLl9kYXRlVGltZUZvcm1hdHMucGFyc2UuZGF0ZVRpbWVJbnB1dCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRUZW1wRGF0ZVRpbWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RlbXBEYXRlID0gdGhpcy5kYXRlO1xuICAgICAgICB0aGlzLl90ZW1wVGltZSA9IHRoaXMuZGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVRpbWVPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS5kYXRlVGltZUlucHV0O1xuXG4gICAgICAgIC8vIGRlZmF1bHQgbWVyaWRpYW4gb3B0aW9uIGJhc2VkIG9uIGZvcm1hdCBvcHRpb25cbiAgICAgICAgdGhpcy5fbWVyaWRpYW4gPVxuICAgICAgICAgICAgdGhpcy5tZXJpZGlhbiAhPSBudWxsID8gdGhpcy5tZXJpZGlhbiA6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1RpbWVGb3JtYXRJbmNsdWRlc0RheVBlcmlvZChmb3JtYXQpO1xuXG4gICAgICAgIC8vIGRlZmF1bHQgc2Vjb25kcyBvcHRpb24gYmFzZWQgb24gZm9ybWF0IG9wdGlvblxuICAgICAgICB0aGlzLl9kaXNwbGF5U2Vjb25kcyA9XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlTZWNvbmRzICE9IG51bGxcbiAgICAgICAgICAgICAgICA/IHRoaXMuZGlzcGxheVNlY29uZHNcbiAgICAgICAgICAgICAgICA6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1RpbWVGb3JtYXRJbmNsdWRlc1NlY29uZHMoZm9ybWF0KTtcblxuICAgICAgICAvLyBkZWZhdWx0IG1pbnV0ZXMgb3B0aW9uIGJhc2VkIG9uIGZvcm1hdCBvcHRpb25cbiAgICAgICAgdGhpcy5fZGlzcGxheU1pbnV0ZXMgPVxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TWludXRlcyAhPSBudWxsXG4gICAgICAgICAgICAgICAgPyB0aGlzLmRpc3BsYXlNaW51dGVzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNUaW1lRm9ybWF0SW5jbHVkZXNNaW51dGVzKGZvcm1hdCk7XG5cbiAgICAgICAgLy8gZGVmYXVsdCBob3VycyBvcHRpb24gYmFzZWQgb24gZm9ybWF0IG9wdGlvblxuICAgICAgICB0aGlzLl9kaXNwbGF5SG91cnMgPVxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5SG91cnMgIT0gbnVsbCA/IHRoaXMuZGlzcGxheUhvdXJzIDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVGltZUZvcm1hdEluY2x1ZGVzSG91cnMoZm9ybWF0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwTW9iaWxlTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBGRF9EQVRFVElNRV9QSUNLRVJfQ09NUE9ORU5ULCB1c2VWYWx1ZTogdGhpcyB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRkRfREFURVRJTUVfUElDS0VSX01PQklMRV9DT05GSUcsXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiB7IHBpY2tlclRlbXBsYXRlOiB0aGlzLl9waWNrZXJUZW1wbGF0ZSB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fbW9iaWxlQ29tcG9uZW50UmVmID0gdGhpcy5fZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY3JlYXRlRHluYW1pY0NvbXBvbmVudChcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgRGF0ZXRpbWVQaWNrZXJNb2JpbGVDb21wb25lbnQ8RD4sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaW5qZWN0b3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibW9iaWxlID8gY29udHJvbFRlbXBsYXRlIDogZGVza3RvcFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVza3RvcFRlbXBsYXRlPlxuICAgIDxmZC1wb3BvdmVyXG4gICAgICAgIFsoaXNPcGVuKV09XCJpc09wZW5cIlxuICAgICAgICAoaXNPcGVuQ2hhbmdlKT1cIl9vbk9wZW5TdGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIFtmb2N1c1RyYXBwZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtmb2N1c0F1dG9DYXB0dXJlXT1cImZhbHNlXCJcbiAgICAgICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlbWVudF09XCJwbGFjZW1lbnRcIlxuICAgICAgICBbYXBwZW5kVG9dPVwiYXBwZW5kVG9cIlxuICAgICAgICBbY2xhc3MuZmQtcG9wb3Zlci1mdWxsLXdpZHRoXT1cImlzRnVsbFdpZHRoXCJcbiAgICA+XG4gICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHlcbiAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImZkLWZvcm0tbWVzc2FnZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzT3BlblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhaXNPcGVuXCJcbiAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIidibG9jaydcIlxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKF9zaG93UG9wb3ZlckNvbnRlbnRzKSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBpY2tlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjY29udHJvbFRlbXBsYXRlPlxuICAgIDxmZC1pbnB1dC1ncm91cFxuICAgICAgICAjaW5wdXRHcm91cENvbXBvbmVudFxuICAgICAgICBbc3RhdGVdPVwic3RhdGVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICBbYnV0dG9uXT1cInRydWVcIlxuICAgICAgICBbYnV0dG9uRm9jdXNhYmxlXT1cImJ1dHRvbkZvY3VzYWJsZVwiXG4gICAgICAgIFtjbGFzcy5mZC1kYXRldGltZV9fbW9iaWxlLWNvbnRyb2xdPVwibW9iaWxlXCJcbiAgICAgICAgZ2x5cGg9XCJkYXRlLXRpbWVcIlxuICAgICAgICBbaXNFeHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICBbZ2x5cGhBcmlhTGFiZWxdPVwiJ2NvcmVEYXRldGltZVBpY2tlci5kaXNwbGF5RGF0ZXRpbWVUb2dnbGVMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIFtpY29uVGl0bGVdPVwiJ2NvcmVEYXRldGltZVBpY2tlci5kaXNwbGF5RGF0ZXRpbWVUb2dnbGVMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIChhZGRPbkJ1dHRvbkNsaWNrZWQpPVwidG9nZ2xlUG9wb3ZlcigpXCJcbiAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dFwiXG4gICAgICAgICAgICBmZC1pbnB1dC1ncm91cC1pbnB1dFxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvcmVEYXRldGltZVBpY2tlci5kYXRldGltZUlucHV0TGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiX2lucHV0RmllbGREYXRlIHwgdHJhbnNsYXRlRGF5UGVyaW9kXCJcbiAgICAgICAgICAgIChrZXlkb3duLmY0KT1cInRvZ2dsZVBvcG92ZXIoKVwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgZmFsc2UpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlT25Ub3VjaGVkKCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1vYmlsZSAmJiBvcGVuUG9wb3ZlcigpXCJcbiAgICAgICAgLz5cbiAgICA8L2ZkLWlucHV0LWdyb3VwPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZm9ybU1lc3NhZ2VUZW1wbGF0ZT5cbiAgICBAaWYgKF9tZXNzYWdlKSB7XG4gICAgICAgIDxmZC1mb3JtLW1lc3NhZ2UgaWQ9XCJmZC1mb3JtLW1lc3NhZ2VcIiBbZW1iZWRkZWRdPVwidHJ1ZVwiIFt0eXBlXT1cInN0YXRlXCI+XG4gICAgICAgICAgICB7eyBfbWVzc2FnZSB9fVxuICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwaWNrZXJUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtZGF0ZXRpbWVfX3dyYXBwZXJcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvcm1NZXNzYWdlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZkLWRhdGV0aW1lX19kaXNwbGF5LXR5cGUtc3dpdGNoZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLWRhdGV0aW1lX19kaXNwbGF5LXR5cGUtc3dpdGNoZXItLWRlc2t0b3BdPVwiIW1vYmlsZSB8fCAobW9iaWxlICYmIG1vYmlsZUxhbmRzY2FwZSlcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLWRhdGV0aW1lX19kaXNwbGF5LXR5cGUtc3dpdGNoZXItLW1vYmlsZV09XCJtb2JpbGUgJiYgbW9iaWxlUG9ydHJhaXRcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZmQtc2VnbWVudGVkLWJ1dHRvbiBbKG5nTW9kZWwpXT1cIl9kaXNwbGF5VHlwZVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY29yZURhdGV0aW1lUGlja2VyLmRpc3BsYXlUeXBlRGF0ZUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlRGF0ZXRpbWVQaWNrZXIuZGlzcGxheVR5cGVUaW1lTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInRpbWVcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZmQtc2VnbWVudGVkLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWRhdGV0aW1lX19jb250YWluZXJcIiBbY2xhc3MuZmQtZGF0ZXRpbWVfX2NvbnRhaW5lci0tbW9iaWxlLXBvcnRyYWl0XT1cIm1vYmlsZSAmJiBtb2JpbGVQb3J0cmFpdFwiPlxuICAgICAgICAgICAgPGZkLWNhbGVuZGFyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiW1xuICAgICAgICAgICAgICAgICAgICAhbW9iaWxlICYmIF9kaXNwbGF5VHlwZSA9PT0gJ2RhdGUnID8gJ2ZkLWRhdGV0aW1lX19hY3RpdmUtZGlzcGxheS10eXBlJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBtb2JpbGUgJiYgbW9iaWxlUG9ydHJhaXQgJiYgX2Rpc3BsYXlUeXBlID09PSAnZGF0ZScgPyAnZmQtZGF0ZXRpbWVfX21vYmlsZS1kaXNwbGF5JyA6ICcnXG4gICAgICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICAgICAgY2FsVHlwZT1cInNpbmdsZVwiXG4gICAgICAgICAgICAgICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVGdW5jdGlvbl09XCJkaXNhYmxlRnVuY3Rpb24gfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJfdGVtcERhdGVcIlxuICAgICAgICAgICAgICAgIFtlc2NhcGVGb2N1c0Z1bmN0aW9uXT1cIm51bGxcIlxuICAgICAgICAgICAgICAgIFttYXJrV2Vla2VuZHNdPVwibWFya1dlZWtlbmRzXCJcbiAgICAgICAgICAgICAgICBbc3BlY2lhbERheXNSdWxlc109XCJzcGVjaWFsRGF5c1J1bGVzXCJcbiAgICAgICAgICAgICAgICBbc2hvd1dlZWtOdW1iZXJzXT1cInNob3dXZWVrTnVtYmVyc1wiXG4gICAgICAgICAgICAgICAgW2FnZ3JlZ2F0ZWRZZWFyR3JpZF09XCJhZ2dyZWdhdGVkWWVhckdyaWRcIlxuICAgICAgICAgICAgICAgIFt5ZWFyR3JpZF09XCJ5ZWFyR3JpZFwiXG4gICAgICAgICAgICAgICAgW3N0YXJ0aW5nRGF5T2ZXZWVrXT1cInN0YXJ0aW5nRGF5T2ZXZWVrXCJcbiAgICAgICAgICAgICAgICAoYWN0aXZlVmlld0NoYW5nZSk9XCJoYW5kbGVDYWxlbmRhckFjdGl2ZVZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkRGF0ZUNoYW5nZSk9XCJoYW5kbGVEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChpc1ZhbGlkRGF0ZUNoYW5nZSk9XCJzZXRJbnZhbGlkRGF0ZUlucHV0SGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2ZkLWNhbGVuZGFyPlxuICAgICAgICAgICAgQGlmICghbW9iaWxlUG9ydHJhaXQpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtZGF0ZXRpbWVfX3NlcGFyYXRvclwiPjwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChpc09wZW4pIHtcbiAgICAgICAgICAgICAgICA8ZmQtdGltZVxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAhbW9iaWxlICYmIF9kaXNwbGF5VHlwZSA9PT0gJ3RpbWUnID8gJ2ZkLWRhdGV0aW1lX19hY3RpdmUtZGlzcGxheS10eXBlJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlICYmIG1vYmlsZVBvcnRyYWl0ICYmIF9kaXNwbGF5VHlwZSA9PT0gJ3RpbWUnID8gJ2ZkLWRhdGV0aW1lX19tb2JpbGUtZGlzcGxheScgOiAnJ1xuICAgICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRzQXRPbmNlXT1cIjVcIlxuICAgICAgICAgICAgICAgICAgICBba2VlcFR3b0RpZ2l0c109XCJrZWVwVHdvRGlnaXRzVGltZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIl90ZW1wVGltZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzcGlubmVyQnV0dG9uc109XCJzcGlubmVyQnV0dG9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFttZXJpZGlhbl09XCJfbWVyaWRpYW5cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVNlY29uZHNdPVwiX2Rpc3BsYXlTZWNvbmRzXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlNaW51dGVzXT1cIl9kaXNwbGF5TWludXRlc1wiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5SG91cnNdPVwiX2Rpc3BsYXlIb3Vyc1wiXG4gICAgICAgICAgICAgICAgICAgIFt0aW1lSXRlbVN0b3BQcm9wYWdhdGlvblNvdXJjaW5nXT1cInRpbWVJdGVtU3RvcFByb3BhZ2F0aW9uU291cmNpbmdcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVUaW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgID48L2ZkLXRpbWU+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKCFtb2JpbGUgJiYgc2hvd0Zvb3Rlcikge1xuICAgICAgICAgICAgPGRpdiBmZC1wb3BvdmVyLWJvZHktZm9vdGVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1kYXRldGltZV9fYmFyXCIgZmQtYmFyIGJhckRlc2lnbj1cImZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1yaWdodD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFfdGVtcERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvcmVEYXRldGltZVBpY2tlci5kYXRldGltZU9rTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidjb3JlRGF0ZXRpbWVQaWNrZXIuZGF0ZXRpbWVPa0xhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb3JlRGF0ZXRpbWVQaWNrZXIuZGF0ZXRpbWVDYW5jZWxMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ2NvcmVEYXRldGltZVBpY2tlci5kYXRldGltZUNhbmNlbExhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19","import { NgModule } from '@angular/core';\nimport { DatetimePickerMobileComponent } from './datetime-picker-mobile/datetime-picker-mobile.component';\nimport { DatetimePickerComponent } from './datetime-picker.component';\nimport * as i0 from \"@angular/core\";\nexport class DatetimePickerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerModule, imports: [DatetimePickerComponent, DatetimePickerMobileComponent], exports: [DatetimePickerComponent, DatetimePickerMobileComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerModule, imports: [DatetimePickerComponent, DatetimePickerMobileComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatetimePickerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [DatetimePickerComponent, DatetimePickerMobileComponent],\n exports: [DatetimePickerComponent, DatetimePickerMobileComponent]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRldGltZS1waWNrZXIvZGF0ZXRpbWUtcGlja2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQU10RSxNQUFNLE9BQU8sb0JBQW9COzhHQUFwQixvQkFBb0I7K0dBQXBCLG9CQUFvQixZQUhuQix1QkFBdUIsRUFBRSw2QkFBNkIsYUFDdEQsdUJBQXVCLEVBQUUsNkJBQTZCOytHQUV2RCxvQkFBb0IsWUFIbkIsdUJBQXVCLEVBQUUsNkJBQTZCOzsyRkFHdkQsb0JBQW9CO2tCQUpoQyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixFQUFFLDZCQUE2QixDQUFDO29CQUNqRSxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSw2QkFBNkIsQ0FBQztpQkFDcEUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZXRpbWVQaWNrZXJNb2JpbGVDb21wb25lbnQgfSBmcm9tICcuL2RhdGV0aW1lLXBpY2tlci1tb2JpbGUvZGF0ZXRpbWUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtEYXRldGltZVBpY2tlckNvbXBvbmVudCwgRGF0ZXRpbWVQaWNrZXJNb2JpbGVDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtEYXRldGltZVBpY2tlckNvbXBvbmVudCwgRGF0ZXRpbWVQaWNrZXJNb2JpbGVDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIERhdGV0aW1lUGlja2VyTW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtZGF0ZXRpbWUtcGlja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGV0aW1lLXBpY2tlci9mdW5kYW1lbnRhbC1uZ3gtY29yZS1kYXRldGltZS1waWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}