@magic-xpa/angular 4.1100.0-dev4110.20 → 4.1100.0-dev4110.203
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/index.mjs +59 -59
- package/{esm2020 → esm2022}/magic-xpa-angular.mjs +1 -1
- package/esm2022/src/controls.metadata.model.mjs +183 -0
- package/{esm2020 → esm2022}/src/interfaces/sub-form-definition.iterface.mjs +1 -1
- package/{esm2020 → esm2022}/src/magic.core.module.mjs +159 -160
- package/{esm2020 → esm2022}/src/services/ISubformMagicService.mjs +1 -1
- package/esm2022/src/services/OverlayWindowService.mjs +244 -0
- package/esm2022/src/services/StylesMapManager.mjs +28 -0
- package/esm2022/src/services/accessor.magic.service.mjs +358 -0
- package/esm2022/src/services/commands-collector.magic.service.mjs +47 -0
- package/esm2022/src/services/component-list.magic.service.mjs +45 -0
- package/{esm2020 → esm2022}/src/services/confirmation.components.magic.provider.mjs +21 -21
- package/esm2022/src/services/engine.magic.service.mjs +80 -0
- package/{esm2020 → esm2022}/src/services/exit.magic.service.mjs +13 -13
- package/esm2022/src/services/magic-color.service.mjs +101 -0
- package/{esm2020 → esm2022}/src/services/magic.lazy.loader.service.mjs +16 -16
- package/{esm2020 → esm2022}/src/services/magic.providers.mjs +24 -24
- package/esm2022/src/services/magic.services.mjs +36 -0
- package/esm2022/src/services/mg-date-adapter.mjs +108 -0
- package/{esm2020 → esm2022}/src/services/overlay.conainer.magic.provider.mjs +14 -14
- package/esm2022/src/services/router-commands.magic.service.mjs +31 -0
- package/esm2022/src/services/subform.magic.service.mjs +194 -0
- package/esm2022/src/services/table.magic.service.mjs +81 -0
- package/esm2022/src/services/task.magics.service.mjs +637 -0
- package/esm2022/src/services/title.magic.service.mjs +19 -0
- package/esm2022/src/ui/GuiInteractiveExecutor.mjs +109 -0
- package/esm2022/src/ui/components/base-magic-alert.component.mjs +24 -0
- package/esm2022/src/ui/components/base-magic-confirm.component.mjs +24 -0
- package/esm2022/src/ui/components/magic-alert.component.mjs +36 -0
- package/esm2022/src/ui/components/magic-confirmation-box.component.mjs +42 -0
- package/esm2022/src/ui/directives/NonMagicControlDirective.mjs +58 -0
- package/esm2022/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.mjs +29 -0
- package/esm2022/src/ui/directives/magic/checkbox.magic.directive.mjs +29 -0
- package/esm2022/src/ui/directives/magic/combobox.magic.directive.mjs +37 -0
- package/esm2022/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.mjs +27 -0
- package/esm2022/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.mjs +85 -0
- package/esm2022/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.mjs +32 -0
- package/esm2022/src/ui/directives/magic/input.noformcontrol.magic.directive.mjs +28 -0
- package/esm2022/src/ui/directives/magic/nocontrol.magic.directive.mjs +193 -0
- package/esm2022/src/ui/directives/magic/row.magic.directive.mjs +62 -0
- package/esm2022/src/ui/directives/magic-focus.directive.mjs +20 -0
- package/esm2022/src/ui/directives/magic.directive.mjs +229 -0
- package/esm2022/src/ui/directives/magicViewContainerRef.directive.mjs +20 -0
- package/esm2022/src/ui/directives/mgformat.magic.directive.mjs +578 -0
- package/esm2022/src/ui/directives/range-validator.magic.directive.mjs +60 -0
- package/{esm2020 → esm2022}/src/ui/magic-confirmationBox.mjs +42 -42
- package/{esm2020 → esm2022}/src/ui/magic-modal/base-magic-overlay-container.mjs +22 -22
- package/esm2022/src/ui/magic-modal/magic-modal-form.mjs +6 -0
- package/{esm2020 → esm2022}/src/ui/magic-modal/magic-modal-interface.mjs +1 -1
- package/esm2022/src/ui/magic-modal/magic-overlay-container-wrapper.mjs +124 -0
- package/esm2022/src/ui/magic-modal/magic-overlay-container.mjs +162 -0
- package/esm2022/src/ui/magic-root.component.mjs +216 -0
- package/esm2022/src/ui/mgerror.magic.component.mjs +125 -0
- package/esm2022/src/ui/pipes/date.magic.pipe.mjs +106 -0
- package/esm2022/src/ui/pipes/time.magic.pipe.mjs +52 -0
- package/esm2022/src/ui/pipes/time24.magic.pipe.mjs +35 -0
- package/esm2022/src/ui/router-container.magic.component.mjs +115 -0
- package/{esm2020 → esm2022}/src/ui/subform.magic.component.mjs +50 -46
- package/esm2022/src/ui/task-base.magic.component.mjs +91 -0
- package/esm2022/src/ui/utils.mjs +54 -0
- package/{fesm2020 → fesm2022}/magic-xpa-angular.mjs +4807 -4443
- package/fesm2022/magic-xpa-angular.mjs.map +1 -0
- package/index.d.ts +58 -58
- package/package.json +7 -13
- package/src/controls.metadata.model.d.ts +62 -62
- package/src/interfaces/sub-form-definition.iterface.d.ts +12 -12
- package/src/magic.core.module.d.ts +41 -41
- package/src/services/ISubformMagicService.d.ts +4 -4
- package/src/services/OverlayWindowService.d.ts +30 -25
- package/src/services/StylesMapManager.d.ts +5 -5
- package/src/services/accessor.magic.service.d.ts +69 -69
- package/src/services/commands-collector.magic.service.d.ts +15 -15
- package/src/services/component-list.magic.service.d.ts +23 -23
- package/src/services/confirmation.components.magic.provider.d.ts +8 -8
- package/src/services/engine.magic.service.d.ts +27 -27
- package/src/services/exit.magic.service.d.ts +6 -6
- package/src/services/magic-color.service.d.ts +19 -19
- package/src/services/magic.lazy.loader.service.d.ts +6 -6
- package/src/services/magic.providers.d.ts +107 -107
- package/src/services/magic.services.d.ts +16 -16
- package/src/services/mg-date-adapter.d.ts +38 -40
- package/src/services/overlay.conainer.magic.provider.d.ts +7 -7
- package/src/services/router-commands.magic.service.d.ts +17 -17
- package/src/services/subform.magic.service.d.ts +43 -43
- package/src/services/table.magic.service.d.ts +30 -30
- package/src/services/task.magics.service.d.ts +100 -100
- package/src/services/title.magic.service.d.ts +9 -9
- package/src/ui/GuiInteractiveExecutor.d.ts +22 -21
- package/src/ui/components/base-magic-alert.component.d.ts +10 -10
- package/src/ui/components/base-magic-confirm.component.d.ts +10 -10
- package/src/ui/components/magic-alert.component.d.ts +6 -6
- package/src/ui/components/magic-confirmation-box.component.d.ts +6 -6
- package/src/ui/directives/NonMagicControlDirective.d.ts +26 -26
- package/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.d.ts +9 -9
- package/src/ui/directives/magic/checkbox.magic.directive.d.ts +9 -9
- package/src/ui/directives/magic/combobox.magic.directive.d.ts +10 -10
- package/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.d.ts +7 -7
- package/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.d.ts +23 -17
- package/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.d.ts +7 -7
- package/src/ui/directives/magic/input.noformcontrol.magic.directive.d.ts +9 -9
- package/src/ui/directives/magic/nocontrol.magic.directive.d.ts +18 -18
- package/src/ui/directives/magic/row.magic.directive.d.ts +17 -17
- package/src/ui/directives/magic-focus.directive.d.ts +9 -9
- package/src/ui/directives/magic.directive.d.ts +44 -44
- package/src/ui/directives/magicViewContainerRef.directive.d.ts +8 -8
- package/src/ui/directives/mgformat.magic.directive.d.ts +38 -31
- package/src/ui/directives/range-validator.magic.directive.d.ts +17 -17
- package/src/ui/magic-confirmationBox.d.ts +6 -6
- package/src/ui/magic-modal/base-magic-overlay-container.d.ts +5 -5
- package/src/ui/magic-modal/magic-modal-form.d.ts +5 -5
- package/src/ui/magic-modal/magic-modal-interface.d.ts +10 -10
- package/src/ui/magic-modal/magic-overlay-container-wrapper.d.ts +30 -31
- package/src/ui/magic-modal/magic-overlay-container.d.ts +24 -25
- package/src/ui/magic-root.component.d.ts +40 -40
- package/src/ui/mgerror.magic.component.d.ts +20 -20
- package/src/ui/pipes/date.magic.pipe.d.ts +17 -17
- package/src/ui/pipes/time.magic.pipe.d.ts +11 -11
- package/src/ui/pipes/time24.magic.pipe.d.ts +10 -10
- package/src/ui/router-container.magic.component.d.ts +29 -30
- package/src/ui/subform.magic.component.d.ts +16 -16
- package/src/ui/task-base.magic.component.d.ts +34 -34
- package/src/ui/utils.d.ts +9 -9
- package/esm2020/src/controls.metadata.model.mjs +0 -180
- package/esm2020/src/services/OverlayWindowService.mjs +0 -208
- package/esm2020/src/services/StylesMapManager.mjs +0 -28
- package/esm2020/src/services/accessor.magic.service.mjs +0 -356
- package/esm2020/src/services/commands-collector.magic.service.mjs +0 -46
- package/esm2020/src/services/component-list.magic.service.mjs +0 -46
- package/esm2020/src/services/engine.magic.service.mjs +0 -82
- package/esm2020/src/services/magic-color.service.mjs +0 -99
- package/esm2020/src/services/magic.services.mjs +0 -31
- package/esm2020/src/services/mg-date-adapter.mjs +0 -109
- package/esm2020/src/services/router-commands.magic.service.mjs +0 -28
- package/esm2020/src/services/subform.magic.service.mjs +0 -184
- package/esm2020/src/services/table.magic.service.mjs +0 -77
- package/esm2020/src/services/task.magics.service.mjs +0 -624
- package/esm2020/src/services/title.magic.service.mjs +0 -18
- package/esm2020/src/ui/GuiInteractiveExecutor.mjs +0 -98
- package/esm2020/src/ui/components/base-magic-alert.component.mjs +0 -23
- package/esm2020/src/ui/components/base-magic-confirm.component.mjs +0 -23
- package/esm2020/src/ui/components/magic-alert.component.mjs +0 -35
- package/esm2020/src/ui/components/magic-confirmation-box.component.mjs +0 -41
- package/esm2020/src/ui/directives/NonMagicControlDirective.mjs +0 -49
- package/esm2020/src/ui/directives/magic/checkbox-noformcontrol.magic.directive.mjs +0 -28
- package/esm2020/src/ui/directives/magic/checkbox.magic.directive.mjs +0 -28
- package/esm2020/src/ui/directives/magic/combobox.magic.directive.mjs +0 -36
- package/esm2020/src/ui/directives/magic/form-controls/control-value-accessors/checkbox.cva.directive.mjs +0 -27
- package/esm2020/src/ui/directives/magic/form-controls/control-value-accessors/date.cva.directive.mjs +0 -52
- package/esm2020/src/ui/directives/magic/form-controls/control-value-accessors/default.cva.directive.mjs +0 -32
- package/esm2020/src/ui/directives/magic/input.noformcontrol.magic.directive.mjs +0 -27
- package/esm2020/src/ui/directives/magic/nocontrol.magic.directive.mjs +0 -193
- package/esm2020/src/ui/directives/magic/row.magic.directive.mjs +0 -58
- package/esm2020/src/ui/directives/magic-focus.directive.mjs +0 -19
- package/esm2020/src/ui/directives/magic.directive.mjs +0 -215
- package/esm2020/src/ui/directives/magicViewContainerRef.directive.mjs +0 -19
- package/esm2020/src/ui/directives/mgformat.magic.directive.mjs +0 -408
- package/esm2020/src/ui/directives/range-validator.magic.directive.mjs +0 -58
- package/esm2020/src/ui/magic-modal/magic-modal-form.mjs +0 -8
- package/esm2020/src/ui/magic-modal/magic-overlay-container-wrapper.mjs +0 -121
- package/esm2020/src/ui/magic-modal/magic-overlay-container.mjs +0 -159
- package/esm2020/src/ui/magic-root.component.mjs +0 -203
- package/esm2020/src/ui/mgerror.magic.component.mjs +0 -119
- package/esm2020/src/ui/pipes/date.magic.pipe.mjs +0 -105
- package/esm2020/src/ui/pipes/time.magic.pipe.mjs +0 -51
- package/esm2020/src/ui/pipes/time24.magic.pipe.mjs +0 -34
- package/esm2020/src/ui/router-container.magic.component.mjs +0 -108
- package/esm2020/src/ui/task-base.magic.component.mjs +0 -86
- package/esm2020/src/ui/utils.mjs +0 -54
- package/fesm2015/magic-xpa-angular.mjs +0 -4832
- package/fesm2015/magic-xpa-angular.mjs.map +0 -1
- package/fesm2020/magic-xpa-angular.mjs.map +0 -1
@@ -1,40 +1,40 @@
|
|
1
|
-
import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';
|
2
|
-
import { GuiCommand } from '@magic-xpa/gui';
|
3
|
-
import { Title } from '@angular/platform-browser';
|
4
|
-
import { EngineMagicService } from '../services/engine.magic.service';
|
5
|
-
import { ComponentListMagicService } from '../services/component-list.magic.service';
|
6
|
-
import { ExitMagicService } from '../services/exit.magic.service';
|
7
|
-
import { OverlayWindowService } from '../services/OverlayWindowService';
|
8
|
-
import { IMagicViewContainerRef } from '../..';
|
9
|
-
import { CommandsCollectorMagicService } from '../services/commands-collector.magic.service';
|
10
|
-
import { HttpClient } from '@angular/common/http';
|
11
|
-
import * as i0 from "@angular/core";
|
12
|
-
export declare class MagicShellComponent implements AfterViewInit, IMagicViewContainerRef {
|
13
|
-
protected engineMagicService: EngineMagicService;
|
14
|
-
protected componentList: ComponentListMagicService;
|
15
|
-
protected changeDetectorRef: ChangeDetectorRef;
|
16
|
-
private titleService;
|
17
|
-
private overlayWindowService;
|
18
|
-
private httpClient;
|
19
|
-
private pendingCommandsCollector;
|
20
|
-
exitMagicService: ExitMagicService;
|
21
|
-
RootComponent: Component;
|
22
|
-
RootComponentParameters: any;
|
23
|
-
overlayWindowsContainerViewRef: ViewContainerRef;
|
24
|
-
rootMagicElementRef: ElementRef;
|
25
|
-
SpinnerTemplate: TemplateRef<any>;
|
26
|
-
showSpinner: boolean;
|
27
|
-
magicEngineTerminated: boolean;
|
28
|
-
constructor(engineMagicService: EngineMagicService, componentList: ComponentListMagicService, changeDetectorRef: ChangeDetectorRef, titleService: Title, overlayWindowService: OverlayWindowService, httpClient: HttpClient, pendingCommandsCollector: CommandsCollectorMagicService, exitMagicService: ExitMagicService);
|
29
|
-
onBeforeUnload(event: any): string;
|
30
|
-
onUnload(event: any): void;
|
31
|
-
ngAfterViewInit(): void;
|
32
|
-
setViewContainerRef(vcRef: ViewContainerRef): void;
|
33
|
-
initialize(): void;
|
34
|
-
setTitle(): void;
|
35
|
-
private setComponent;
|
36
|
-
registerUICommands(): void;
|
37
|
-
executeCommand(command: GuiCommand): void;
|
38
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<MagicShellComponent, [null, null, null, null, null, null, null, { optional: true; }]>;
|
39
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MagicShellComponent, "magic-root", never, { "SpinnerTemplate": "SpinnerTemplate"; }, {}, never, never, false, never>;
|
40
|
-
}
|
1
|
+
import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';
|
2
|
+
import { GuiCommand } from '@magic-xpa/gui';
|
3
|
+
import { Title } from '@angular/platform-browser';
|
4
|
+
import { EngineMagicService } from '../services/engine.magic.service';
|
5
|
+
import { ComponentListMagicService } from '../services/component-list.magic.service';
|
6
|
+
import { ExitMagicService } from '../services/exit.magic.service';
|
7
|
+
import { OverlayWindowService } from '../services/OverlayWindowService';
|
8
|
+
import { IMagicViewContainerRef } from '../..';
|
9
|
+
import { CommandsCollectorMagicService } from '../services/commands-collector.magic.service';
|
10
|
+
import { HttpClient } from '@angular/common/http';
|
11
|
+
import * as i0 from "@angular/core";
|
12
|
+
export declare class MagicShellComponent implements AfterViewInit, IMagicViewContainerRef {
|
13
|
+
protected engineMagicService: EngineMagicService;
|
14
|
+
protected componentList: ComponentListMagicService;
|
15
|
+
protected changeDetectorRef: ChangeDetectorRef;
|
16
|
+
private titleService;
|
17
|
+
private overlayWindowService;
|
18
|
+
private httpClient;
|
19
|
+
private pendingCommandsCollector;
|
20
|
+
exitMagicService: ExitMagicService;
|
21
|
+
RootComponent: Component;
|
22
|
+
RootComponentParameters: any;
|
23
|
+
overlayWindowsContainerViewRef: ViewContainerRef;
|
24
|
+
rootMagicElementRef: ElementRef;
|
25
|
+
SpinnerTemplate: TemplateRef<any>;
|
26
|
+
showSpinner: boolean;
|
27
|
+
magicEngineTerminated: boolean;
|
28
|
+
constructor(engineMagicService: EngineMagicService, componentList: ComponentListMagicService, changeDetectorRef: ChangeDetectorRef, titleService: Title, overlayWindowService: OverlayWindowService, httpClient: HttpClient, pendingCommandsCollector: CommandsCollectorMagicService, exitMagicService: ExitMagicService);
|
29
|
+
onBeforeUnload(event: any): string;
|
30
|
+
onUnload(event: any): void;
|
31
|
+
ngAfterViewInit(): void;
|
32
|
+
setViewContainerRef(vcRef: ViewContainerRef): void;
|
33
|
+
initialize(): void;
|
34
|
+
setTitle(): void;
|
35
|
+
private setComponent;
|
36
|
+
registerUICommands(): void;
|
37
|
+
executeCommand(command: GuiCommand): void;
|
38
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MagicShellComponent, [null, null, null, null, null, null, null, { optional: true; }]>;
|
39
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MagicShellComponent, "magic-root", never, { "SpinnerTemplate": { "alias": "SpinnerTemplate"; "required": false; }; }, {}, never, never, false, never>;
|
40
|
+
}
|
@@ -1,20 +1,20 @@
|
|
1
|
-
import { ChangeDetectorRef, ElementRef } from "@angular/core";
|
2
|
-
import { AccessorMagicService } from "../services/accessor.magic.service";
|
3
|
-
import { TaskMagicService } from "../services/task.magics.service";
|
4
|
-
import * as i0 from "@angular/core";
|
5
|
-
export declare class ErrorMagicComponent {
|
6
|
-
protected _task: TaskMagicService;
|
7
|
-
mgService: AccessorMagicService;
|
8
|
-
protected changeDetectorRef: ChangeDetectorRef;
|
9
|
-
id: string;
|
10
|
-
rowId: string;
|
11
|
-
set magic(val: any);
|
12
|
-
set rowId1(val: any);
|
13
|
-
defaultDisplay: boolean;
|
14
|
-
set CustomContent(innerComponent: ElementRef);
|
15
|
-
constructor(_task: TaskMagicService, mgService: AccessorMagicService, changeDetectorRef: ChangeDetectorRef);
|
16
|
-
isEmpty(element: HTMLElement): boolean;
|
17
|
-
HasErrors(id: string): boolean;
|
18
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ErrorMagicComponent, never>;
|
19
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ErrorMagicComponent, "mgError", never, { "magic": "magic"; "rowId1": "rowId"; }, {}, never, ["*"], false, never>;
|
20
|
-
}
|
1
|
+
import { ChangeDetectorRef, ElementRef } from "@angular/core";
|
2
|
+
import { AccessorMagicService } from "../services/accessor.magic.service";
|
3
|
+
import { TaskMagicService } from "../services/task.magics.service";
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
export declare class ErrorMagicComponent {
|
6
|
+
protected _task: TaskMagicService;
|
7
|
+
mgService: AccessorMagicService;
|
8
|
+
protected changeDetectorRef: ChangeDetectorRef;
|
9
|
+
id: string;
|
10
|
+
rowId: string;
|
11
|
+
set magic(val: any);
|
12
|
+
set rowId1(val: any);
|
13
|
+
defaultDisplay: boolean;
|
14
|
+
set CustomContent(innerComponent: ElementRef);
|
15
|
+
constructor(_task: TaskMagicService, mgService: AccessorMagicService, changeDetectorRef: ChangeDetectorRef);
|
16
|
+
isEmpty(element: HTMLElement): boolean;
|
17
|
+
HasErrors(id: string): boolean;
|
18
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ErrorMagicComponent, never>;
|
19
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ErrorMagicComponent, "mgError", never, { "magic": { "alias": "magic"; "required": false; }; "rowId1": { "alias": "rowId"; "required": false; }; }, {}, never, ["*"], false, never>;
|
20
|
+
}
|
@@ -1,17 +1,17 @@
|
|
1
|
-
import { PipeTransform } from '@angular/core';
|
2
|
-
import { DatePipe } from '@angular/common';
|
3
|
-
import { TaskMagicService } from '../../services/task.magics.service';
|
4
|
-
import * as i0 from "@angular/core";
|
5
|
-
export declare class Constants {
|
6
|
-
static readonly DATE_FMT = "dd/MMM/yyyy";
|
7
|
-
}
|
8
|
-
export declare class DateMagicPipe extends DatePipe implements PipeTransform {
|
9
|
-
protected _task: TaskMagicService;
|
10
|
-
constructor(_task: TaskMagicService);
|
11
|
-
transform(value: any, controlId: string): any;
|
12
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DateMagicPipe, never>;
|
13
|
-
static ɵpipe: i0.ɵɵPipeDeclaration<DateMagicPipe, "magicDate", false>;
|
14
|
-
}
|
15
|
-
export declare class MgDateFormatter {
|
16
|
-
ConvertMgDateFormatToAngular(mgDateMask: string): string;
|
17
|
-
}
|
1
|
+
import { PipeTransform } from '@angular/core';
|
2
|
+
import { DatePipe } from '@angular/common';
|
3
|
+
import { TaskMagicService } from '../../services/task.magics.service';
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
export declare class Constants {
|
6
|
+
static readonly DATE_FMT = "dd/MMM/yyyy";
|
7
|
+
}
|
8
|
+
export declare class DateMagicPipe extends DatePipe implements PipeTransform {
|
9
|
+
protected _task: TaskMagicService;
|
10
|
+
constructor(_task: TaskMagicService);
|
11
|
+
transform(value: any, controlId: string): any;
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DateMagicPipe, never>;
|
13
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<DateMagicPipe, "magicDate", false>;
|
14
|
+
}
|
15
|
+
export declare class MgDateFormatter {
|
16
|
+
ConvertMgDateFormatToAngular(mgDateMask: string): string;
|
17
|
+
}
|
@@ -1,11 +1,11 @@
|
|
1
|
-
import { PipeTransform } from '@angular/core';
|
2
|
-
import { DatePipe } from '@angular/common';
|
3
|
-
import { TaskMagicService } from '../../services/task.magics.service';
|
4
|
-
import * as i0 from "@angular/core";
|
5
|
-
export declare class TimeMagicPipe extends DatePipe implements PipeTransform {
|
6
|
-
protected _task: TaskMagicService;
|
7
|
-
constructor(_task: TaskMagicService);
|
8
|
-
transform(value: any, controlId: string): any;
|
9
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<TimeMagicPipe, never>;
|
10
|
-
static ɵpipe: i0.ɵɵPipeDeclaration<TimeMagicPipe, "magicTime", false>;
|
11
|
-
}
|
1
|
+
import { PipeTransform } from '@angular/core';
|
2
|
+
import { DatePipe } from '@angular/common';
|
3
|
+
import { TaskMagicService } from '../../services/task.magics.service';
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
export declare class TimeMagicPipe extends DatePipe implements PipeTransform {
|
6
|
+
protected _task: TaskMagicService;
|
7
|
+
constructor(_task: TaskMagicService);
|
8
|
+
transform(value: any, controlId: string): any;
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TimeMagicPipe, never>;
|
10
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<TimeMagicPipe, "magicTime", false>;
|
11
|
+
}
|
@@ -1,10 +1,10 @@
|
|
1
|
-
import { PipeTransform } from '@angular/core';
|
2
|
-
import { TaskMagicService } from "../../services/task.magics.service";
|
3
|
-
import * as i0 from "@angular/core";
|
4
|
-
export declare class Time24MagicPipe implements PipeTransform {
|
5
|
-
protected _task: TaskMagicService;
|
6
|
-
constructor(_task: TaskMagicService);
|
7
|
-
transform(value: any, controlId: string): any;
|
8
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<Time24MagicPipe, never>;
|
9
|
-
static ɵpipe: i0.ɵɵPipeDeclaration<Time24MagicPipe, "magicTime24", false>;
|
10
|
-
}
|
1
|
+
import { PipeTransform } from '@angular/core';
|
2
|
+
import { TaskMagicService } from "../../services/task.magics.service";
|
3
|
+
import * as i0 from "@angular/core";
|
4
|
+
export declare class Time24MagicPipe implements PipeTransform {
|
5
|
+
protected _task: TaskMagicService;
|
6
|
+
constructor(_task: TaskMagicService);
|
7
|
+
transform(value: any, controlId: string): any;
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<Time24MagicPipe, never>;
|
9
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<Time24MagicPipe, "magicTime24", false>;
|
10
|
+
}
|
@@ -1,30 +1,29 @@
|
|
1
|
-
import {
|
2
|
-
import { ActivatedRoute, Router } from '@angular/router';
|
3
|
-
import { EngineMagicService } from '../services/engine.magic.service';
|
4
|
-
import { ComponentListMagicService } from '../services/component-list.magic.service';
|
5
|
-
import { CommandsCollectorMagicService } from '../services/commands-collector.magic.service';
|
6
|
-
import { RouterCommandsMagicService } from '../services/router-commands.magic.service';
|
7
|
-
import { TaskMagicService } from '../services/task.magics.service';
|
8
|
-
import * as i0 from "@angular/core";
|
9
|
-
export declare class RouterContainerMagicComponent implements OnInit {
|
10
|
-
private activatedRoute;
|
11
|
-
protected router: Router;
|
12
|
-
protected magic: EngineMagicService;
|
13
|
-
private containerTaskService;
|
14
|
-
private
|
15
|
-
private
|
16
|
-
|
17
|
-
protected
|
18
|
-
|
19
|
-
private
|
20
|
-
private
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
static
|
29
|
-
|
30
|
-
}
|
1
|
+
import { OnInit, ViewContainerRef } from '@angular/core';
|
2
|
+
import { ActivatedRoute, Router } from '@angular/router';
|
3
|
+
import { EngineMagicService } from '../services/engine.magic.service';
|
4
|
+
import { ComponentListMagicService } from '../services/component-list.magic.service';
|
5
|
+
import { CommandsCollectorMagicService } from '../services/commands-collector.magic.service';
|
6
|
+
import { RouterCommandsMagicService } from '../services/router-commands.magic.service';
|
7
|
+
import { TaskMagicService } from '../services/task.magics.service';
|
8
|
+
import * as i0 from "@angular/core";
|
9
|
+
export declare class RouterContainerMagicComponent implements OnInit {
|
10
|
+
private activatedRoute;
|
11
|
+
protected router: Router;
|
12
|
+
protected magic: EngineMagicService;
|
13
|
+
private containerTaskService;
|
14
|
+
private viewContainerRef;
|
15
|
+
private componentList;
|
16
|
+
protected pendingCommandsCollector: CommandsCollectorMagicService;
|
17
|
+
protected routerCommandsMagicService: RouterCommandsMagicService;
|
18
|
+
private componentRef;
|
19
|
+
private parentMgSubformService;
|
20
|
+
private static lastRoute;
|
21
|
+
static get LastRoute(): string;
|
22
|
+
constructor(activatedRoute: ActivatedRoute, router: Router, magic: EngineMagicService, containerTaskService: TaskMagicService, viewContainerRef: ViewContainerRef, componentList: ComponentListMagicService, pendingCommandsCollector: CommandsCollectorMagicService, routerCommandsMagicService: RouterCommandsMagicService);
|
23
|
+
ngOnInit(): void;
|
24
|
+
private insertRouteEvent;
|
25
|
+
initializeComponent(): void;
|
26
|
+
ngOnDestroy(): void;
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RouterContainerMagicComponent, never>;
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RouterContainerMagicComponent, "magic-route-outlet", never, {}, {}, never, never, false, never>;
|
29
|
+
}
|
@@ -1,16 +1,16 @@
|
|
1
|
-
import { Component, ViewContainerRef } from "@angular/core";
|
2
|
-
import { TaskBaseMagicComponent } from "./task-base.magic.component";
|
3
|
-
import { SubformMagicService } from "../services/subform.magic.service";
|
4
|
-
import * as i0 from "@angular/core";
|
5
|
-
export declare class SubformMagicComponent {
|
6
|
-
private vcRef;
|
7
|
-
protected mgSub: SubformMagicService;
|
8
|
-
id: string;
|
9
|
-
set magic(val: any);
|
10
|
-
component: TaskBaseMagicComponent;
|
11
|
-
constructor(vcRef: ViewContainerRef, mgSub: SubformMagicService);
|
12
|
-
get Component(): Component;
|
13
|
-
get Parameters(): any;
|
14
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<SubformMagicComponent, never>;
|
15
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SubformMagicComponent, "magic-subform", never, { "magic": "magic"; }, {}, never, never, false, never>;
|
16
|
-
}
|
1
|
+
import { Component, ViewContainerRef } from "@angular/core";
|
2
|
+
import { TaskBaseMagicComponent } from "./task-base.magic.component";
|
3
|
+
import { SubformMagicService } from "../services/subform.magic.service";
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
export declare class SubformMagicComponent {
|
6
|
+
private vcRef;
|
7
|
+
protected mgSub: SubformMagicService;
|
8
|
+
id: string;
|
9
|
+
set magic(val: any);
|
10
|
+
component: TaskBaseMagicComponent;
|
11
|
+
constructor(vcRef: ViewContainerRef, mgSub: SubformMagicService);
|
12
|
+
get Component(): Component;
|
13
|
+
get Parameters(): any;
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SubformMagicComponent, never>;
|
15
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SubformMagicComponent, "magic-subform", never, { "magic": { "alias": "magic"; "required": false; }; }, {}, never, never, false, never>;
|
16
|
+
}
|
@@ -1,34 +1,34 @@
|
|
1
|
-
import { AfterViewInit, ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core';
|
2
|
-
import { FormGroup } from '@angular/forms';
|
3
|
-
import { MagicProperties } from "@magic-xpa/utils";
|
4
|
-
import { TaskMagicService } from "../services/task.magics.service";
|
5
|
-
import { SubformMagicService } from "../services/subform.magic.service";
|
6
|
-
import { TableMagicService } from "../services/table.magic.service";
|
7
|
-
import { MagicServices } from "../services/magic.services";
|
8
|
-
import { AccessorMagicService } from "../services/accessor.magic.service";
|
9
|
-
import * as i0 from "@angular/core";
|
10
|
-
export declare class TaskBaseMagicComponent implements OnInit, OnDestroy, AfterViewInit {
|
11
|
-
protected ref: ChangeDetectorRef;
|
12
|
-
magicServices: MagicServices;
|
13
|
-
taskIdParam: string;
|
14
|
-
taskDescription: string;
|
15
|
-
magicProperties: typeof MagicProperties;
|
16
|
-
constructor(ref: ChangeDetectorRef, magicServices: MagicServices);
|
17
|
-
get task(): TaskMagicService;
|
18
|
-
get mgSub(): SubformMagicService;
|
19
|
-
get tableService(): TableMagicService;
|
20
|
-
get mg(): AccessorMagicService;
|
21
|
-
get taskId(): string;
|
22
|
-
get screenFormGroup(): FormGroup;
|
23
|
-
ngOnInit(): void;
|
24
|
-
createFormControlsAccessor(formGroup: FormGroup): void;
|
25
|
-
setInputDateFormat(): void;
|
26
|
-
PropertyChanged(propertyName: string, rowId: number, value: any): void;
|
27
|
-
RecordsCountChanged(recordsCount: number): void;
|
28
|
-
mgOnLoad(): void;
|
29
|
-
ngAfterViewInit(): void;
|
30
|
-
ngAfterContentChecked(): void;
|
31
|
-
ngOnDestroy(): void;
|
32
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<TaskBaseMagicComponent, never>;
|
33
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TaskBaseMagicComponent, "task-magic", never, { "taskIdParam": "taskIdParam"; "taskDescription": "taskDescription"; }, {}, never, never, false, never>;
|
34
|
-
}
|
1
|
+
import { AfterViewInit, ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core';
|
2
|
+
import { FormGroup } from '@angular/forms';
|
3
|
+
import { MagicProperties } from "@magic-xpa/utils";
|
4
|
+
import { TaskMagicService } from "../services/task.magics.service";
|
5
|
+
import { SubformMagicService } from "../services/subform.magic.service";
|
6
|
+
import { TableMagicService } from "../services/table.magic.service";
|
7
|
+
import { MagicServices } from "../services/magic.services";
|
8
|
+
import { AccessorMagicService } from "../services/accessor.magic.service";
|
9
|
+
import * as i0 from "@angular/core";
|
10
|
+
export declare class TaskBaseMagicComponent implements OnInit, OnDestroy, AfterViewInit {
|
11
|
+
protected ref: ChangeDetectorRef;
|
12
|
+
magicServices: MagicServices;
|
13
|
+
taskIdParam: string;
|
14
|
+
taskDescription: string;
|
15
|
+
magicProperties: typeof MagicProperties;
|
16
|
+
constructor(ref: ChangeDetectorRef, magicServices: MagicServices);
|
17
|
+
get task(): TaskMagicService;
|
18
|
+
get mgSub(): SubformMagicService;
|
19
|
+
get tableService(): TableMagicService;
|
20
|
+
get mg(): AccessorMagicService;
|
21
|
+
get taskId(): string;
|
22
|
+
get screenFormGroup(): FormGroup;
|
23
|
+
ngOnInit(): void;
|
24
|
+
createFormControlsAccessor(formGroup: FormGroup): void;
|
25
|
+
setInputDateFormat(): void;
|
26
|
+
PropertyChanged(propertyName: string, rowId: number, value: any): void;
|
27
|
+
RecordsCountChanged(recordsCount: number): void;
|
28
|
+
mgOnLoad(): void;
|
29
|
+
ngAfterViewInit(): void;
|
30
|
+
ngAfterContentChecked(): void;
|
31
|
+
ngOnDestroy(): void;
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TaskBaseMagicComponent, never>;
|
33
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TaskBaseMagicComponent, "task-magic", never, { "taskIdParam": { "alias": "taskIdParam"; "required": false; }; "taskDescription": { "alias": "taskDescription"; "required": false; }; }, {}, never, never, false, never>;
|
34
|
+
}
|
package/src/ui/utils.d.ts
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
export declare class utils {
|
2
|
-
static getDistance(control: Element, x: number, y: number): number;
|
3
|
-
static getDimentions(el: any): {
|
4
|
-
x: number;
|
5
|
-
y: number;
|
6
|
-
width: any;
|
7
|
-
height: any;
|
8
|
-
};
|
9
|
-
}
|
1
|
+
export declare class utils {
|
2
|
+
static getDistance(control: Element, x: number, y: number): number;
|
3
|
+
static getDimentions(el: any): {
|
4
|
+
x: number;
|
5
|
+
y: number;
|
6
|
+
width: any;
|
7
|
+
height: any;
|
8
|
+
};
|
9
|
+
}
|
@@ -1,180 +0,0 @@
|
|
1
|
-
import { isNullOrUndefined } from "@magic-xpa/mscorelib";
|
2
|
-
export class ControlMetadata {
|
3
|
-
constructor() {
|
4
|
-
this.properties = new Map();
|
5
|
-
this.classesMap = new Map();
|
6
|
-
this.stylesMap = new Map();
|
7
|
-
this.userProperties = new Map();
|
8
|
-
this.customValidators = new Map();
|
9
|
-
}
|
10
|
-
setClass(key, value) {
|
11
|
-
if (this.classesMap.has(key)) {
|
12
|
-
this.removedClass = this.classesMap.get(key);
|
13
|
-
}
|
14
|
-
this.classesMap.set(key, value);
|
15
|
-
let result = '';
|
16
|
-
for (let value of this.classesMap) {
|
17
|
-
result += value + ' ';
|
18
|
-
}
|
19
|
-
this.classes = result;
|
20
|
-
}
|
21
|
-
setStyle(key, value) {
|
22
|
-
this.stylesMap.set(key, value);
|
23
|
-
}
|
24
|
-
}
|
25
|
-
export class ControlsMetadata {
|
26
|
-
constructor() {
|
27
|
-
this.values = new Map();
|
28
|
-
this.ControlsProperties = new Map();
|
29
|
-
this.isCreated = false;
|
30
|
-
this.isEditing = false;
|
31
|
-
}
|
32
|
-
get Values() {
|
33
|
-
return this.values;
|
34
|
-
}
|
35
|
-
getControlMetadata(controlId) {
|
36
|
-
if (!this.ControlsProperties.has(controlId))
|
37
|
-
this.ControlsProperties.set(controlId, new ControlMetadata());
|
38
|
-
return this.ControlsProperties.get(controlId);
|
39
|
-
}
|
40
|
-
update(obj) {
|
41
|
-
let props = obj.ControlsMetaData;
|
42
|
-
for (let controlName in props) {
|
43
|
-
if (!this.ControlsProperties.has(controlName))
|
44
|
-
this.ControlsProperties.set(controlName, new ControlMetadata());
|
45
|
-
let controlMetaData = this.ControlsProperties.get(controlName);
|
46
|
-
for (let property in obj.ControlsMetaData[controlName].Properties)
|
47
|
-
controlMetaData[property] = obj.ControlsMetaData[controlName].Properties[property];
|
48
|
-
controlMetaData.controlType = obj.ControlsMetaData[controlName].Type;
|
49
|
-
}
|
50
|
-
for (let controlName in obj.ControlsValues) {
|
51
|
-
this.setValue(controlName, obj.ControlsValues[controlName]);
|
52
|
-
}
|
53
|
-
}
|
54
|
-
setValue(controlName, value) {
|
55
|
-
this.values.set(controlName, value);
|
56
|
-
}
|
57
|
-
getProperty(controlId, prop) {
|
58
|
-
if (this.ControlsProperties.has(controlId)) {
|
59
|
-
if (this.ControlsProperties.get(controlId).properties.has(prop)) {
|
60
|
-
return this.ControlsProperties.get(controlId).properties.get(prop);
|
61
|
-
}
|
62
|
-
}
|
63
|
-
return "";
|
64
|
-
}
|
65
|
-
getValue(controlName) {
|
66
|
-
return this.values.get(controlName);
|
67
|
-
}
|
68
|
-
}
|
69
|
-
export class Records {
|
70
|
-
constructor() {
|
71
|
-
this.data = new Map();
|
72
|
-
this.list = [];
|
73
|
-
this.recordsBeforeCurrentView = 0;
|
74
|
-
this.isEmptyDataView = false;
|
75
|
-
this.sizeUpdated = false;
|
76
|
-
}
|
77
|
-
getRow(dvRowId) {
|
78
|
-
return this.list[dvRowId + this.recordsBeforeCurrentView];
|
79
|
-
}
|
80
|
-
markRowAsCreated(guiRowId) {
|
81
|
-
if (guiRowId < this.list.length) {
|
82
|
-
this.addRow(guiRowId);
|
83
|
-
this.data.get(guiRowId).isCreated = true;
|
84
|
-
}
|
85
|
-
}
|
86
|
-
markRowAsNotCreated(guiRowId) {
|
87
|
-
if (guiRowId < this.list.length)
|
88
|
-
this.data.get(guiRowId).isCreated = false;
|
89
|
-
}
|
90
|
-
isRowCreated(guiRowId) {
|
91
|
-
if (guiRowId < this.list.length) {
|
92
|
-
if (!this.data.has(guiRowId) || isNullOrUndefined(this.data.get(guiRowId)))
|
93
|
-
return false;
|
94
|
-
else
|
95
|
-
return this.data.get(guiRowId).isCreated;
|
96
|
-
}
|
97
|
-
return false;
|
98
|
-
}
|
99
|
-
startRowEditing(guiRowId) {
|
100
|
-
if (guiRowId < this.list.length && this.data.has(guiRowId))
|
101
|
-
this.data.get(guiRowId).isEditing = true;
|
102
|
-
}
|
103
|
-
stopRowEditing(guiRowId) {
|
104
|
-
if (guiRowId < this.list.length && this.data.has(guiRowId))
|
105
|
-
this.data.get(guiRowId).isEditing = false;
|
106
|
-
}
|
107
|
-
isRowInRowEditing(guiRowId) {
|
108
|
-
if (+guiRowId < this.list.length) {
|
109
|
-
if (!this.data.has(+guiRowId) || isNullOrUndefined(this.data.get(+guiRowId)))
|
110
|
-
return false;
|
111
|
-
else
|
112
|
-
return this.data.get(+guiRowId).isEditing;
|
113
|
-
}
|
114
|
-
return false;
|
115
|
-
}
|
116
|
-
update(obj) {
|
117
|
-
if (obj.fullRefresh && obj.rows.length != this.list.length) {
|
118
|
-
this.data = new Map();
|
119
|
-
this.list = new Array();
|
120
|
-
}
|
121
|
-
for (let rowId in obj.rows) {
|
122
|
-
if (!this.data.has(+rowId) || this.data.get(+rowId) === null)
|
123
|
-
this.data.set(+rowId, new ControlsMetadata());
|
124
|
-
let controlsData = this.data.get(+rowId);
|
125
|
-
controlsData.update(obj.rows[rowId]);
|
126
|
-
controlsData.rowId = rowId;
|
127
|
-
}
|
128
|
-
for (var [key, value] of this.data) {
|
129
|
-
this.list[key] = value;
|
130
|
-
}
|
131
|
-
}
|
132
|
-
updateSize(len) {
|
133
|
-
if (this.list.length != len) {
|
134
|
-
if (len < this.list.length) {
|
135
|
-
for (let i = len; i < this.list.length; i++) {
|
136
|
-
this.data.delete(i);
|
137
|
-
}
|
138
|
-
}
|
139
|
-
this.list.length = len;
|
140
|
-
this.sizeUpdated = true;
|
141
|
-
}
|
142
|
-
}
|
143
|
-
clearFirstTableRecord(template) {
|
144
|
-
if (this.list.length >= 1) {
|
145
|
-
for (const key in template) {
|
146
|
-
if (template[key] == '1' && this.list[0].ControlsProperties.has(key)) {
|
147
|
-
this.list[0].ControlsProperties.get(key).properties = new Map();
|
148
|
-
}
|
149
|
-
}
|
150
|
-
}
|
151
|
-
}
|
152
|
-
addRow(guiRowId) {
|
153
|
-
if (guiRowId !== 0 || !this.data.has(guiRowId) || isNullOrUndefined(this.data.get(guiRowId))) {
|
154
|
-
this.data.set(guiRowId, new ControlsMetadata());
|
155
|
-
this.data.get(guiRowId).rowId = "" + guiRowId;
|
156
|
-
this.list[guiRowId] = this.data.get(guiRowId);
|
157
|
-
}
|
158
|
-
}
|
159
|
-
createFirst() {
|
160
|
-
this.addRow(0);
|
161
|
-
}
|
162
|
-
fromJson(data) {
|
163
|
-
var obj = JSON.parse(data);
|
164
|
-
this.update(obj);
|
165
|
-
}
|
166
|
-
setGuiTopIndex(topIndex) {
|
167
|
-
this.guiTopIndex = topIndex;
|
168
|
-
}
|
169
|
-
getGuiTopIndex() {
|
170
|
-
return this.guiTopIndex;
|
171
|
-
}
|
172
|
-
}
|
173
|
-
export var HtmlClasses;
|
174
|
-
(function (HtmlClasses) {
|
175
|
-
HtmlClasses["Color"] = "color";
|
176
|
-
HtmlClasses["font"] = "font";
|
177
|
-
HtmlClasses["FocusColor"] = "focuscolor";
|
178
|
-
HtmlClasses["HintColor"] = "hintcolor";
|
179
|
-
})(HtmlClasses || (HtmlClasses = {}));
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbHMubWV0YWRhdGEubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9jb250cm9scy5tZXRhZGF0YS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU16RCxNQUFNLE9BQU8sZUFBZTtJQUE1QjtRQUdFLGVBQVUsR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNqRCxlQUFVLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDOUMsY0FBUyxHQUEwQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBTTdDLG1CQUFjLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFN0MscUJBQWdCLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFzQjdELENBQUM7SUFwQkMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLO1FBRWpCLElBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5QztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFaEIsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFFeEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSztRQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUs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QUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQWdCO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0FFRjtBQUtELE1BQU0sQ0FBTixJQUFZLFdBS1g7QUFMRCxXQUFZLFdBQVc7SUFDckIsOEJBQWUsQ0FBQTtJQUNmLDRCQUFhLENBQUE7SUFDYix3Q0FBdUIsQ0FBQTtJQUN2QixzQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBTFcsV0FBVyxLQUFYLFdBQVcsUUFLdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N0b3JhZ2VBdHRyaWJ1dGV9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7SHRtbFByb3BlcnRpZXMsIEN1c3RvbVZhbGlkYXRvcn0gZnJvbSAgXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5cclxuLyoqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBDb250cm9sTWV0YWRhdGEge1xyXG4gIGNvbnRyb2xUeXBlOiBzdHJpbmc7XHJcbiAgZGF0YVR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGU7XHJcbiAgcHJvcGVydGllczogTWFwPEh0bWxQcm9wZXJ0aWVzLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG4gIGNsYXNzZXNNYXA6IE1hcDxIdG1sQ2xhc3NlcywgYW55PiA9IG5ldyBNYXAoKTtcclxuICBzdHlsZXNNYXA6IE1hcDxIdG1sQ2xhc3NlcywgYW55PiA9IG5ldyBNYXAoKTtcclxuICByZW1vdmVkQ2xhc3M6IHN0cmluZztcclxuICBjbGFzc2VzOiBzdHJpbmcgIDtcclxuICByYW5nZVZhbGlkYXRvcjogYm9vbGVhbjtcclxuXHJcbiAgLy8gdXNlciBwcm9wZXJ0aWVzXHJcbiAgdXNlclByb3BlcnRpZXM6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIGN1c3RvbVZhbGlkYXRvcnM6IE1hcDxzdHJpbmcsIEN1c3RvbVZhbGlkYXRvcj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHNldENsYXNzKGtleSwgdmFsdWUpIHtcclxuICAgIC8vIGZvciBuby1jb250cm9sIC0gaG9sZCB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgdG8gYmUgcmVtb3ZlZCBsYXRlclxyXG4gICAgaWYodGhpcy5jbGFzc2VzTWFwLmhhcyhrZXkpKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlZENsYXNzID0gdGhpcy5jbGFzc2VzTWFwLmdldChrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xhc3Nlc01hcC5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICBsZXQgcmVzdWx0ID0gJyc7XHJcblxyXG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdGhpcy5jbGFzc2VzTWFwKSB7XHJcbiAgICAgIHJlc3VsdCArPSB2YWx1ZSArICcgJztcclxuICAgIH1cclxuICAgIHRoaXMuY2xhc3NlcyA9IHJlc3VsdDtcclxuXHJcbiAgfVxyXG5cclxuICBzZXRTdHlsZShrZXksIHZhbHVlKSB7XHJcbiAgICB0aGlzLnN0eWxlc01hcC5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuLyoqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBDb250cm9sc01ldGFkYXRhIHtcclxuXHJcbiAgLy92YWx1ZXMgb2YgY29udHJvbFxyXG4gIHZhbHVlczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcclxuICAvLyBkaWN0aW9uYXJ5IG9mIGNvbnRyb2xzIHdpdGggdGhlcmUgcHJvcGVydGllc1xyXG4gIENvbnRyb2xzUHJvcGVydGllczogTWFwPHN0cmluZywgQ29udHJvbE1ldGFkYXRhPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcm93SWQ6IHN0cmluZztcclxuICBpc0NyZWF0ZWQgPSBmYWxzZTtcclxuICBpc0VkaXRpbmcgPSBmYWxzZTtcclxuXHJcbiAgZ2V0IFZhbHVlcygpe1xyXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMuQ29udHJvbHNQcm9wZXJ0aWVzLmhhcyhjb250cm9sSWQpKVxyXG4gICAgICB0aGlzLkNvbnRyb2xzUHJvcGVydGllcy5zZXQoY29udHJvbElkLCBuZXcgQ29udHJvbE1ldGFkYXRhKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuQ29udHJvbHNQcm9wZXJ0aWVzLmdldChjb250cm9sSWQpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICB1cGRhdGUob2JqOmFueSkge1xyXG4gICAgLy9zaG91bGQgd2Uga2VlcCB0aGUgdmFsdWVzIGhlcmUgP1xyXG4gICAgLy90aGlzLnZhbHVlcyA9IG9iai5Db250cm9sc1ZhbHVlcztcclxuICAgIGxldCBwcm9wczogeyBbaWQ6IHN0cmluZ106IHsgW2lkOiBzdHJpbmddOiBzdHJpbmc7IH0gfSA9IG9iai5Db250cm9sc01ldGFEYXRhO1xyXG4gICAgZm9yIChsZXQgY29udHJvbE5hbWUgaW4gcHJvcHMpIHtcclxuICAgICAgaWYgKCF0aGlzLkNvbnRyb2xzUHJvcGVydGllcy5oYXMoY29udHJvbE5hbWUpKVxyXG4gICAgICAgIHRoaXMuQ29udHJvbHNQcm9wZXJ0aWVzLnNldChjb250cm9sTmFtZSwgbmV3IENvbnRyb2xNZXRhZGF0YSgpKTtcclxuICAgICAgbGV0IGNvbnRyb2xNZXRhRGF0YTogQ29udHJvbE1ldGFkYXRhID0gdGhpcy5Db250cm9sc1Byb3BlcnRpZXMuZ2V0KGNvbnRyb2xOYW1lKTtcclxuICAgICAgZm9yIChsZXQgcHJvcGVydHkgaW4gb2JqLkNvbnRyb2xzTWV0YURhdGFbY29udHJvbE5hbWVdLlByb3BlcnRpZXMpXHJcbiAgICAgICAgY29udHJvbE1ldGFEYXRhW3Byb3BlcnR5XSA9IG9iai5Db250cm9sc01ldGFEYXRhW2NvbnRyb2xOYW1lXS5Qcm9wZXJ0aWVzW3Byb3BlcnR5XTtcclxuICAgICAgY29udHJvbE1ldGFEYXRhLmNvbnRyb2xUeXBlID0gb2JqLkNvbnRyb2xzTWV0YURhdGFbY29udHJvbE5hbWVdLlR5cGU7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBjb250cm9sTmFtZSBpbiBvYmouQ29udHJvbHNWYWx1ZXMpIHtcclxuICAgICAgdGhpcy5zZXRWYWx1ZShjb250cm9sTmFtZSwgb2JqLkNvbnRyb2xzVmFsdWVzW2NvbnRyb2xOYW1lXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZShjb250cm9sTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCAge1xyXG4gICAgdGhpcy52YWx1ZXMuc2V0KGNvbnRyb2xOYW1lLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wZXJ0eShjb250cm9sSWQ6IHN0cmluZywgcHJvcDogSHRtbFByb3BlcnRpZXMpIHtcclxuICAgIGlmICh0aGlzLkNvbnRyb2xzUHJvcGVydGllcy5oYXMoY29udHJvbElkKSkge1xyXG4gICAgICBpZiAodGhpcy5Db250cm9sc1Byb3BlcnRpZXMuZ2V0KGNvbnRyb2xJZCkucHJvcGVydGllcy5oYXMocHJvcCkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5Db250cm9sc1Byb3BlcnRpZXMuZ2V0KGNvbnRyb2xJZCkucHJvcGVydGllcy5nZXQocHJvcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldFZhbHVlKGNvbnRyb2xOYW1lOiBzdHJpbmcpe1xyXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzLmdldChjb250cm9sTmFtZSk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUmVjb3JkcyB7XHJcbiAgZGF0YTogTWFwPG51bWJlciwgQ29udHJvbHNNZXRhZGF0YT4gPSBuZXcgTWFwKCk7XHJcbiAgbGlzdDogQ29udHJvbHNNZXRhZGF0YVtdID0gW107IC8vdXNlZCBmb3Igc2VxdWVudGlhbCBhY2Nlc3MgaW4gdGFibGVcclxuICBpbmNsdWRlc0ZpcnN0OiBib29sZWFuO1xyXG4gIGluY2x1ZGVzTGFzdDogYm9vbGVhbjtcclxuICBndWlUb3BJbmRleDogbnVtYmVyO1xyXG4gIHJlY29yZHNCZWZvcmVDdXJyZW50VmlldzogbnVtYmVyID0gMDtcclxuICBpc0VtcHR5RGF0YVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaXplVXBkYXRlZDogYm9vbGVhbiA9IGZhbHNlOyAvL3VzZWQgZm9yIGV2YWx1YXRpbmcgdGhlIFJlY29yZHNTaXplQ2hhbmdlLlxyXG5cclxuICBnZXRSb3coZHZSb3dJZDogbnVtYmVyKTogQ29udHJvbHNNZXRhZGF0YSB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0W2R2Um93SWQgKyB0aGlzLnJlY29yZHNCZWZvcmVDdXJyZW50Vmlld107XHJcbiAgfVxyXG5cclxuICBtYXJrUm93QXNDcmVhdGVkKGd1aVJvd0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChndWlSb3dJZCA8IHRoaXMubGlzdC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5hZGRSb3coZ3VpUm93SWQpO1xyXG4gICAgICB0aGlzLmRhdGEuZ2V0KGd1aVJvd0lkKS5pc0NyZWF0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWFya1Jvd0FzTm90Q3JlYXRlZChndWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoZ3VpUm93SWQgPCB0aGlzLmxpc3QubGVuZ3RoKVxyXG4gICAgICB0aGlzLmRhdGEuZ2V0KGd1aVJvd0lkKS5pc0NyZWF0ZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBpc1Jvd0NyZWF0ZWQoZ3VpUm93SWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGd1aVJvd0lkIDwgdGhpcy5saXN0Lmxlbmd0aCkge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YS5oYXMoZ3VpUm93SWQpIHx8IGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZGF0YS5nZXQoZ3VpUm93SWQpKSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmdldChndWlSb3dJZCkuaXNDcmVhdGVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAqIGZvciByb3cgZWRpdGluZ1xyXG4gICogKi9cclxuICBzdGFydFJvd0VkaXRpbmcoZ3VpUm93SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGd1aVJvd0lkIDwgdGhpcy5saXN0Lmxlbmd0aCAmJiB0aGlzLmRhdGEuaGFzKGd1aVJvd0lkKSlcclxuICAgICAgdGhpcy5kYXRhLmdldChndWlSb3dJZCkuaXNFZGl0aW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgKiBzdG9wIHJvdyBlZGl0aW5nIG9uIHJvdyBJZFxyXG4gICogKi9cclxuICBzdG9wUm93RWRpdGluZyhndWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoZ3VpUm93SWQgPCB0aGlzLmxpc3QubGVuZ3RoICYmIHRoaXMuZGF0YS5oYXMoZ3VpUm93SWQpKVxyXG4gICAgICB0aGlzLmRhdGEuZ2V0KGd1aVJvd0lkKS5pc0VkaXRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgKiByZXR1cm4gaWYgcm93IGlzIGluIGVkaXRpbmdcclxuICAqIENhbGxlZCBieSB0aGUgSFRNTCBjb2RlLCBzbyBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcsIG5vdCBhIG51bWViclxyXG4gICogKi9cclxuICBpc1Jvd0luUm93RWRpdGluZyhndWlSb3dJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoK2d1aVJvd0lkIDwgdGhpcy5saXN0Lmxlbmd0aCkge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YS5oYXMoK2d1aVJvd0lkKSB8fCBpc051bGxPclVuZGVmaW5lZCh0aGlzLmRhdGEuZ2V0KCtndWlSb3dJZCkpKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0KCtndWlSb3dJZCkuaXNFZGl0aW5nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKG9iaikge1xyXG5cclxuICAgIGlmIChvYmouZnVsbFJlZnJlc2ggJiYgb2JqLnJvd3MubGVuZ3RoICE9IHRoaXMubGlzdC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5kYXRhID0gbmV3IE1hcCgpO1xyXG4gICAgICB0aGlzLmxpc3QgPSBuZXcgQXJyYXk8Q29udHJvbHNNZXRhZGF0YT4oKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IHJvd0lkIGluIG9iai5yb3dzKSB7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhLmhhcygrcm93SWQpIHx8IHRoaXMuZGF0YS5nZXQoK3Jvd0lkKSA9PT0gbnVsbClcclxuICAgICAgICB0aGlzLmRhdGEuc2V0KCtyb3dJZCwgbmV3IENvbnRyb2xzTWV0YWRhdGEoKSk7XHJcbiAgICAgIGxldCBjb250cm9sc0RhdGE6IENvbnRyb2xzTWV0YWRhdGEgPSB0aGlzLmRhdGEuZ2V0KCtyb3dJZCk7XHJcbiAgICAgIGNvbnRyb2xzRGF0YS51cGRhdGUob2JqLnJvd3Nbcm93SWRdKTtcclxuICAgICAgY29udHJvbHNEYXRhLnJvd0lkID0gcm93SWQ7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBba2V5LCB2YWx1ZV0gb2YgdGhpcy5kYXRhKSB7XHJcbiAgICAgIHRoaXMubGlzdFtrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2l6ZShsZW46IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMubGlzdC5sZW5ndGggIT0gbGVuKSB7XHJcbiAgICAgIGlmIChsZW4gPCB0aGlzLmxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgLy9yZW1vdmUgcm93c1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBsZW47IGkgPCB0aGlzLmxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuZGF0YS5kZWxldGUoaSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxpc3QubGVuZ3RoID0gbGVuO1xyXG4gICAgICB0aGlzLnNpemVVcGRhdGVkID0gdHJ1ZTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogY3JlYXJzIGRhdGEgZm9yIHRoZSBmaXJzdCByZWNvcmRcclxuICAgKiBAcGFyYW0gdGVtcGxhdGVcclxuICAgKi9cclxuICBjbGVhckZpcnN0VGFibGVSZWNvcmQodGVtcGxhdGU6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmc7IH0pIHtcclxuICAgIGlmICh0aGlzLmxpc3QubGVuZ3RoID49IDEpIHtcclxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGVtcGxhdGUpIHtcclxuICAgICAgICBpZiAodGVtcGxhdGVba2V5XSA9PSAnMScgJiYgdGhpcy5saXN0WzBdLkNvbnRyb2xzUHJvcGVydGllcy5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgdGhpcy5saXN0WzBdLkNvbnRyb2xzUHJvcGVydGllcy5nZXQoa2V5KS5wcm9wZXJ0aWVzID0gIG5ldyBNYXAoKSA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRSb3coZ3VpUm93SWQ6IG51bWJlcikge1xyXG4gICAgaWYgKGd1aVJvd0lkICE9PSAwIHx8ICF0aGlzLmRhdGEuaGFzKGd1aVJvd0lkKSB8fCBpc051bGxPclVuZGVmaW5lZCh0aGlzLmRhdGEuZ2V0KGd1aVJvd0lkKSkpIHtcclxuICAgICAgdGhpcy5kYXRhLnNldChndWlSb3dJZCwgbmV3IENvbnRyb2xzTWV0YWRhdGEoKSk7XHJcbiAgICAgIHRoaXMuZGF0YS5nZXQoZ3VpUm93SWQpLnJvd0lkID0gXCJcIitndWlSb3dJZDtcclxuICAgICAgdGhpcy5saXN0W2d1aVJvd0lkXSA9IHRoaXMuZGF0YS5nZXQoZ3VpUm93SWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlRmlyc3QoKSB7XHJcbiAgICB0aGlzLmFkZFJvdygwKTtcclxuICB9XHJcblxyXG4gIGZyb21Kc29uKGRhdGE6IHN0cmluZykge1xyXG4gICAgdmFyIG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICB0aGlzLnVwZGF0ZShvYmopO1xyXG4gIH1cclxuXHJcbiAgc2V0R3VpVG9wSW5kZXgodG9wSW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5ndWlUb3BJbmRleCA9IHRvcEluZGV4O1xyXG4gIH1cclxuXHJcbiAgZ2V0R3VpVG9wSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmd1aVRvcEluZGV4O1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG5leHBvcnQgZW51bSBIdG1sQ2xhc3NlcyB7XHJcbiAgQ29sb3IgPSBcImNvbG9yXCIsXHJcbiAgZm9udCA9IFwiZm9udFwiLFxyXG4gIEZvY3VzQ29sb3I9XCJmb2N1c2NvbG9yXCIsXHJcbiAgSGludENvbG9yPVwiaGludGNvbG9yXCIsXHJcbn1cclxuIl19
|