@bizdoc/core 1.16.27 → 1.16.28

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.
Files changed (42) hide show
  1. package/assets/themes/brown.min.css +8 -8
  2. package/assets/themes/dark.min.css +8 -8
  3. package/assets/themes/deep-purple-light-blue.min.css +8 -8
  4. package/assets/themes/deep-purple-teal.min.css +8 -8
  5. package/assets/themes/default.min.css +8 -8
  6. package/assets/themes/green.min.css +8 -8
  7. package/assets/themes/indigo.min.css +8 -8
  8. package/esm2020/lib/admin/configuration-designer/elements/cube.component.mjs +3 -3
  9. package/esm2020/lib/admin/localized-string.component.mjs +52 -0
  10. package/esm2020/lib/core/controls/signature.input.mjs +149 -0
  11. package/esm2020/lib/core/mailbox.service.mjs +11 -2
  12. package/esm2020/lib/core/models.mjs +1 -1
  13. package/esm2020/lib/core/pipes/localized-string.pipe.mjs +24 -0
  14. package/esm2020/lib/core/slots/pane-ref.mjs +3 -2
  15. package/esm2020/lib/core/translations.mjs +45 -4
  16. package/esm2020/lib/reports/report-ref.mjs +1 -1
  17. package/esm2020/lib/reports/report-viewer.component.mjs +5 -2
  18. package/esm2020/lib/shared.module.mjs +11 -8
  19. package/esm2020/lib/system.module.mjs +8 -11
  20. package/esm2020/public-api.mjs +3 -2
  21. package/fesm2015/bizdoc-core.mjs +346 -323
  22. package/fesm2015/bizdoc-core.mjs.map +1 -1
  23. package/fesm2020/bizdoc-core.mjs +346 -320
  24. package/fesm2020/bizdoc-core.mjs.map +1 -1
  25. package/lib/admin/localized-string.component.d.ts +20 -0
  26. package/lib/core/controls/signature.input.d.ts +53 -0
  27. package/lib/core/mailbox.service.d.ts +2 -1
  28. package/lib/core/models.d.ts +7 -0
  29. package/lib/core/pipes/localized-string.pipe.d.ts +11 -0
  30. package/lib/core/slots/pane-ref.d.ts +10 -9
  31. package/lib/core/translations.d.ts +41 -0
  32. package/lib/reports/report-ref.d.ts +2 -0
  33. package/lib/shared.module.d.ts +137 -136
  34. package/lib/system.module.d.ts +31 -32
  35. package/package.json +11 -9
  36. package/public-api.d.ts +3 -2
  37. package/esm2020/lib/admin/configuration-designer/elements/survey-form.component.mjs +0 -44
  38. package/esm2020/lib/admin/form/survey/survey.component.mjs +0 -180
  39. package/esm2020/lib/compose/survey/survey.component.mjs +0 -73
  40. package/lib/admin/configuration-designer/elements/survey-form.component.d.ts +0 -18
  41. package/lib/admin/form/survey/survey.component.d.ts +0 -123
  42. package/lib/compose/survey/survey.component.d.ts +0 -17
@@ -36,40 +36,39 @@ import * as i33 from "./admin/configuration-designer/elements/parallel-view.comp
36
36
  import * as i34 from "./admin/configuration-designer/elements/sum-view.component";
37
37
  import * as i35 from "./admin/configuration-designer/elements/matrix-view.component";
38
38
  import * as i36 from "./admin/configuration-designer/elements/analysis-view.component";
39
- import * as i37 from "./admin/configuration-designer/elements/survey-form.component";
40
- import * as i38 from "./admin/form/survey/survey.component";
41
- import * as i39 from "./admin/configuration-designer/designer.component";
42
- import * as i40 from "./admin/form/designer/designer.component";
43
- import * as i41 from "./admin/permissions/permissions.component";
44
- import * as i42 from "./admin/indices/manage-cube-index.component";
45
- import * as i43 from "./admin/profiler/outofoffice.component";
46
- import * as i44 from "./admin/utility-wrapper.component";
47
- import * as i45 from "./admin/utility.pane.component";
48
- import * as i46 from "./admin/core/search.input";
49
- import * as i47 from "./admin/core/color-picker.input";
50
- import * as i48 from "./admin/document-trace/reassign.dialog";
51
- import * as i49 from "./admin/diff/configuration-diff.component";
52
- import * as i50 from "./admin/document-trace/document-trace.component";
53
- import * as i51 from "./admin/document-trace/trace-element.component";
54
- import * as i52 from "./admin/profiler/profiler.component";
55
- import * as i53 from "./admin/positions/positions.component";
56
- import * as i54 from "./admin/positions/positions-popup.component";
57
- import * as i55 from "./admin/form/workflow/workflow.component";
58
- import * as i56 from "./admin/form/workflow/node.component";
59
- import * as i57 from "./admin/form/workflow/role-node.component";
60
- import * as i58 from "./admin/patterns/patterns.component";
61
- import * as i59 from "@angular/common";
62
- import * as i60 from "@angular/common/http";
63
- import * as i61 from "@angular/forms";
64
- import * as i62 from "@angular/flex-layout";
65
- import * as i63 from "@angular/router";
66
- import * as i64 from "@angular/cdk/scrolling";
67
- import * as i65 from "./modules/diagram.module";
68
- import * as i66 from "./modules/chart.module";
69
- import * as i67 from "./shared.module";
39
+ import * as i37 from "./admin/configuration-designer/designer.component";
40
+ import * as i38 from "./admin/form/designer/designer.component";
41
+ import * as i39 from "./admin/permissions/permissions.component";
42
+ import * as i40 from "./admin/indices/manage-cube-index.component";
43
+ import * as i41 from "./admin/profiler/outofoffice.component";
44
+ import * as i42 from "./admin/utility-wrapper.component";
45
+ import * as i43 from "./admin/utility.pane.component";
46
+ import * as i44 from "./admin/core/search.input";
47
+ import * as i45 from "./admin/core/color-picker.input";
48
+ import * as i46 from "./admin/document-trace/reassign.dialog";
49
+ import * as i47 from "./admin/diff/configuration-diff.component";
50
+ import * as i48 from "./admin/document-trace/document-trace.component";
51
+ import * as i49 from "./admin/document-trace/trace-element.component";
52
+ import * as i50 from "./admin/profiler/profiler.component";
53
+ import * as i51 from "./admin/positions/positions.component";
54
+ import * as i52 from "./admin/positions/positions-popup.component";
55
+ import * as i53 from "./admin/form/workflow/workflow.component";
56
+ import * as i54 from "./admin/form/workflow/node.component";
57
+ import * as i55 from "./admin/form/workflow/role-node.component";
58
+ import * as i56 from "./admin/patterns/patterns.component";
59
+ import * as i57 from "./admin/localized-string.component";
60
+ import * as i58 from "@angular/common";
61
+ import * as i59 from "@angular/common/http";
62
+ import * as i60 from "@angular/forms";
63
+ import * as i61 from "@angular/flex-layout";
64
+ import * as i62 from "@angular/router";
65
+ import * as i63 from "@angular/cdk/scrolling";
66
+ import * as i64 from "./modules/diagram.module";
67
+ import * as i65 from "./modules/chart.module";
68
+ import * as i66 from "./shared.module";
70
69
  export declare class SystemModule {
71
70
  static forChild(): ModuleWithProviders<SystemModule>;
72
71
  static ɵfac: i0.ɵɵFactoryDeclaration<SystemModule, never>;
73
- static ɵmod: i0.ɵɵNgModuleDeclaration<SystemModule, [typeof i1.DesignerPrivilegesComponent, typeof i2.AddContentDirective, typeof i3.IconPickerComponent, typeof i2.EditContentDirective, typeof i2.WidgetContentDirective, typeof i4.PolicyDesignComponent, typeof i5.StateDesignComponent, typeof i6.RoleDesignComponent, typeof i7.GuideDesignComponent, typeof i8.RuleDesignComponent, typeof i9.ReportDesignerComponent, typeof i10.FolderDesignComponent, typeof i11.UtilityDesignComponent, typeof i12.FormDesignComponent, typeof i13.WidgetDesignComponent, typeof i14.CubeDesignComponent, typeof i15.ActionDesignerComponent, typeof i9.ReportDesignerComponent, typeof i16.ViewDesignComponent, typeof i17.TypeDesignComponent, typeof i18.DesignerCubeFilterComponent, typeof i19.CubeIndexDesignComponent, typeof i20.ConfigurationDatasourceDesignComponent, typeof i21.ReturnToRoleActionDesignComponent, typeof i22.PivotViewDesignComponent, typeof i23.CubeViewDesignComponent, typeof i24.BoxFormDesignComponent, typeof i25.AnomalyRuleDesignComponent, typeof i26.UsageReportDesignComponent, typeof i27.DocumentsWidgetDesignComponent, typeof i28.PerformanceWidgetDesignComponent, typeof i29.DocumentsReportDesignComponent, typeof i30.TasksReportDesignComponent, typeof i31.ExploreViewDesignComponent, typeof i32.AnalysisWidgetDesignComponent, typeof i33.ParallelViewDesignComponent, typeof i34.SumViewDesignComponent, typeof i35.MatrixViewDesignComponent, typeof i36.ChartViewDesignComponent, typeof i37.SurveyFormDesignComponent, typeof i38.SurveyDesignerComponent, typeof i39.ConfigurationDesignerComponent, typeof i40.FormDesignerComponent, typeof i2.DesignerItemComponent, typeof i41.PermissionsUtility, typeof i42.ManageCubeIndexUtility, typeof i43.ProfileSettingsDialog, typeof i44.UtilityWrapperComponent, typeof i45.UtilityPaneComponent, typeof i46.SearchInput, typeof i47.ColorPicker, typeof i48.ReassignDialog, typeof i49.SystemDiffComponent, typeof i50.DocumentTraceComponent, typeof i51.TraceElementComponent, typeof i52.ProfilerComponent, typeof i53.PositionsComponent, typeof i54.PositionsPopup, typeof i55.WorkflowComponent, typeof i56.WorkflowNodeComponent, typeof i57.RoleNodeComponent, typeof i58.PatternsComponent], [typeof i59.CommonModule, typeof i60.HttpClientModule, typeof i61.ReactiveFormsModule, typeof i62.FlexLayoutModule, typeof i63.RouterModule, typeof i64.ScrollingModule, typeof i65.SyncfusionDiagramModule, typeof i66.SyncfusionChartModule, typeof i67.SharedModule], [typeof i41.PermissionsUtility, typeof i42.ManageCubeIndexUtility, typeof i44.UtilityWrapperComponent, typeof i45.UtilityPaneComponent, typeof i49.SystemDiffComponent, typeof i50.DocumentTraceComponent, typeof i52.ProfilerComponent, typeof i53.PositionsComponent, typeof i55.WorkflowComponent, typeof i57.RoleNodeComponent, typeof i58.PatternsComponent]>;
72
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SystemModule, [typeof i1.DesignerPrivilegesComponent, typeof i2.AddContentDirective, typeof i3.IconPickerComponent, typeof i2.EditContentDirective, typeof i2.WidgetContentDirective, typeof i4.PolicyDesignComponent, typeof i5.StateDesignComponent, typeof i6.RoleDesignComponent, typeof i7.GuideDesignComponent, typeof i8.RuleDesignComponent, typeof i9.ReportDesignerComponent, typeof i10.FolderDesignComponent, typeof i11.UtilityDesignComponent, typeof i12.FormDesignComponent, typeof i13.WidgetDesignComponent, typeof i14.CubeDesignComponent, typeof i15.ActionDesignerComponent, typeof i9.ReportDesignerComponent, typeof i16.ViewDesignComponent, typeof i17.TypeDesignComponent, typeof i18.DesignerCubeFilterComponent, typeof i19.CubeIndexDesignComponent, typeof i20.ConfigurationDatasourceDesignComponent, typeof i21.ReturnToRoleActionDesignComponent, typeof i22.PivotViewDesignComponent, typeof i23.CubeViewDesignComponent, typeof i24.BoxFormDesignComponent, typeof i25.AnomalyRuleDesignComponent, typeof i26.UsageReportDesignComponent, typeof i27.DocumentsWidgetDesignComponent, typeof i28.PerformanceWidgetDesignComponent, typeof i29.DocumentsReportDesignComponent, typeof i30.TasksReportDesignComponent, typeof i31.ExploreViewDesignComponent, typeof i32.AnalysisWidgetDesignComponent, typeof i33.ParallelViewDesignComponent, typeof i34.SumViewDesignComponent, typeof i35.MatrixViewDesignComponent, typeof i36.ChartViewDesignComponent, typeof i37.ConfigurationDesignerComponent, typeof i38.FormDesignerComponent, typeof i2.DesignerItemComponent, typeof i39.PermissionsUtility, typeof i40.ManageCubeIndexUtility, typeof i41.ProfileSettingsDialog, typeof i42.UtilityWrapperComponent, typeof i43.UtilityPaneComponent, typeof i44.SearchInput, typeof i45.ColorPicker, typeof i46.ReassignDialog, typeof i47.SystemDiffComponent, typeof i48.DocumentTraceComponent, typeof i49.TraceElementComponent, typeof i50.ProfilerComponent, typeof i51.PositionsComponent, typeof i52.PositionsPopup, typeof i53.WorkflowComponent, typeof i54.WorkflowNodeComponent, typeof i55.RoleNodeComponent, typeof i56.PatternsComponent, typeof i57.LocalizedStringComponent], [typeof i58.CommonModule, typeof i59.HttpClientModule, typeof i60.ReactiveFormsModule, typeof i61.FlexLayoutModule, typeof i62.RouterModule, typeof i63.ScrollingModule, typeof i64.SyncfusionDiagramModule, typeof i65.SyncfusionChartModule, typeof i66.SharedModule], [typeof i39.PermissionsUtility, typeof i40.ManageCubeIndexUtility, typeof i42.UtilityWrapperComponent, typeof i43.UtilityPaneComponent, typeof i47.SystemDiffComponent, typeof i48.DocumentTraceComponent, typeof i50.ProfilerComponent, typeof i51.PositionsComponent, typeof i53.WorkflowComponent, typeof i55.RoleNodeComponent, typeof i56.PatternsComponent]>;
74
73
  static ɵinj: i0.ɵɵInjectorDeclaration<SystemModule>;
75
74
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bizdoc/core",
3
- "version": "1.16.27",
3
+ "version": "1.16.28",
4
4
  "author": "Moding Ltd.",
5
5
  "homepage": "https://github.com/moding-il/bizdoc.core",
6
6
  "license": "https://github.com/moding-il/bizdoc.core/blob/master/License.md",
@@ -9,25 +9,27 @@
9
9
  "private": true
10
10
  },
11
11
  "dependencies": {
12
+ "ajv": "^8.11.0",
12
13
  "@ctrl/ngx-emoji-mart": "^7.0.0",
13
14
  "@microsoft/signalr": "^6.0.8",
14
- "@syncfusion/ej2": "^20.2.45",
15
- "@syncfusion/ej2-angular-charts": "^20.2.45",
15
+ "@syncfusion/ej2": "^20.2.48",
16
+ "@syncfusion/ej2-angular-charts": "^20.2.48",
16
17
  "@syncfusion/ej2-angular-circulargauge": "^20.2.45",
17
18
  "@syncfusion/ej2-angular-diagrams": "^20.2.45",
18
- "@syncfusion/ej2-angular-gantt": "^20.2.45",
19
- "@syncfusion/ej2-angular-grids": "^20.2.45",
19
+ "@syncfusion/ej2-angular-gantt": "^20.2.46",
20
+ "@syncfusion/ej2-angular-grids": "^20.2.48",
20
21
  "@syncfusion/ej2-angular-kanban": "^20.2.45",
21
22
  "@syncfusion/ej2-angular-pivotview": "^20.2.45",
22
- "@syncfusion/ej2-angular-richtexteditor": "^20.2.45",
23
+ "@syncfusion/ej2-angular-richtexteditor": "^20.2.46",
23
24
  "@syncfusion/ej2-angular-schedule": "^20.2.45",
24
- "@syncfusion/ej2-angular-spreadsheet": "^20.2.45",
25
- "@syncfusion/ej2-base": "^20.2.45",
25
+ "@syncfusion/ej2-angular-spreadsheet": "^20.2.48",
26
+ "@syncfusion/ej2-angular-inputs": "^20.2.48",
27
+ "@syncfusion/ej2-base": "^20.2.48",
26
28
  "@teamhive/lottie-player": "^1.0.0",
27
29
  "brace": "^0.11.1",
28
30
  "cookie": "^0.5.0",
29
31
  "dayjs": "^1.11.5",
30
- "firebase": "^9.9.3",
32
+ "firebase": "^9.9.4",
31
33
  "hammerjs": "~2",
32
34
  "lottie-web": "^5.9.6",
33
35
  "ngx-cookie-service": "14",
package/public-api.d.ts CHANGED
@@ -9,7 +9,8 @@ export { isMobile, isArray, isBoolean, isDate, isObject, isString, isFunction, i
9
9
  export { BizDoc, ComponentType } from './lib/core/decorators';
10
10
  export * from './lib/core/configuration';
11
11
  export { BizDocApp, BrokenPage } from './lib/app.component';
12
- export { ChartType, Folder, Form, LatLng, Dimentions, Guide, GuideStep, Gender, CubeAxis, AxisValue, RecipientModel, Action, State, HeaderModel, LogType, Role, Comment, Attachment, DocumentModel, DRAFT, INBOX, ScheduledEvent, CubeEntry, Log, Recipient, Cube, Widget, Report, CubeIndex, AxesMap, CubeView, Notification, FieldKind, UserInfo } from './lib/core/models';
12
+ export { LocalizedStringPipe } from './lib/core/pipes/localized-string.pipe';
13
+ export { ChartType, Type, Folder, Form, LatLng, Dimentions, Guide, GuideStep, Gender, CubeAxis, AxisValue, RecipientModel, Action, State, HeaderModel, LogType, Role, Comment, Attachment, DocumentModel, DRAFT, INBOX, ScheduledEvent, CubeEntry, Log, Recipient, Cube, Widget, Report, CubeIndex, AxesMap, CubeView, Notification, FieldKind, LocalizedString, UserInfo } from './lib/core/models';
13
14
  export { AxisClickEvent, AxisPlace, AxisType } from './lib/cube/declarations';
14
15
  export { UtilityRef } from "./lib/admin/utility-ref";
15
16
  export { ReportRef, ExportEventArgs } from "./lib/reports/report-ref";
@@ -56,7 +57,7 @@ export { ActionPipe } from './lib/core/pipes/action.pipe';
56
57
  export { StatePipe } from './lib/core/pipes/state.pipe';
57
58
  export { UserNamePipe } from './lib/core/pipes/user-name.pipe';
58
59
  export { DateRangePipe, AgoPipe } from './lib/core/pipes/daterange.pipe';
59
- export { PaneRef, PaneOptions, QueryParamNavigation, ParamNavigation, NavigationStart, NavigationEnd, NavigationFocus, NavigationResize, NavigationMode, NavigationExpand, NavigationClose, CollapseNavigation, BackNavigation } from './lib/core/slots/pane-ref';
60
+ export { PaneRef, PaneOptions, NavigationBase, NavigationPaneBase, QueryParamNavigation, ParamNavigation, NavigationStart, NavigationEnd, NavigationFocus, NavigationResize, NavigationMode, NavigationExpand, NavigationClose, CollapseNavigation, BackNavigation } from './lib/core/slots/pane-ref';
60
61
  export { PanesRouter } from './lib/core/slots/router.service';
61
62
  export { SlotRouterDirective } from './lib/core/slots/router.directive';
62
63
  export { Popup } from './lib/core/popup/popup.service';
@@ -1,44 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component, Inject } from "@angular/core";
3
- import { BizDoc } from "../../../core/decorators";
4
- import { DesignerRef } from "../declarations";
5
- import { DesignerElementComponentBase } from "../designer.base";
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/forms";
8
- import * as i2 from "../../../core/slots/router.service";
9
- import * as i3 from "@angular/common";
10
- import * as i4 from "@angular/material/button";
11
- import * as i5 from "@angular/material/icon";
12
- import * as i6 from "../../../core/popup/tooltip.directive";
13
- import * as i7 from "../../../core/pipes/translate.pipe";
14
- import * as i8 from "../declarations";
15
- let SurveyFormDesignComponent = class SurveyFormDesignComponent extends DesignerElementComponentBase {
16
- constructor(fb, element, ref, _router) {
17
- super(fb, element, ref);
18
- this._router = _router;
19
- this.form = this._fb.group({
20
- questions: []
21
- });
22
- }
23
- ngOnInit() {
24
- if (!this.model.icon)
25
- this.model.icon = 'list_alt';
26
- }
27
- design() {
28
- this._router.navigate(['admin/tools/survey-designer'], { queryParams: { formId: this.model.name } });
29
- }
30
- };
31
- SurveyFormDesignComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SurveyFormDesignComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ElementRef }, { token: DesignerRef }, { token: i2.PanesRouter }], target: i0.ɵɵFactoryTarget.Component });
32
- SurveyFormDesignComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: SurveyFormDesignComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"mode === 'widget'\">\r\n <div class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"design()\" [bizdocTooltip]=\"'Designer'|translate\" [disabled]=\"model.draft\"><mat-icon>list_alt</mat-icon></button>\r\n </div>\r\n</ng-container>\r\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
33
- SurveyFormDesignComponent = __decorate([
34
- BizDoc({ selector: 'survey-designer' })
35
- ], SurveyFormDesignComponent);
36
- export { SurveyFormDesignComponent };
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SurveyFormDesignComponent, decorators: [{
38
- type: Component,
39
- args: [{ template: "<ng-container *ngIf=\"mode === 'widget'\">\r\n <div class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"design()\" [bizdocTooltip]=\"'Designer'|translate\" [disabled]=\"model.draft\"><mat-icon>list_alt</mat-icon></button>\r\n </div>\r\n</ng-container>\r\n" }]
40
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ElementRef }, { type: i8.DesignerRef, decorators: [{
41
- type: Inject,
42
- args: [DesignerRef]
43
- }] }, { type: i2.PanesRouter }]; } });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9jb25maWd1cmF0aW9uLWRlc2lnbmVyL2VsZW1lbnRzL3N1cnZleS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vY29uZmlndXJhdGlvbi1kZXNpZ25lci9lbGVtZW50cy9zdXJ2ZXktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7OztBQUl6RCxJQUFNLHlCQUF5QixHQUEvQixNQUFNLHlCQUEwQixTQUFRLDRCQUE0QztJQUl6RixZQUFZLEVBQWUsRUFDekIsT0FBd0IsRUFDSCxHQUFnQixFQUM3QixPQUFvQjtRQUM1QixLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQURoQixZQUFPLEdBQVAsT0FBTyxDQUFhO1FBTnJCLFNBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUM3QixTQUFTLEVBQUUsRUFBRTtTQUNkLENBQUMsQ0FBQztJQU1ILENBQUM7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsNkJBQTZCLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RyxDQUFDOztzSEFmVSx5QkFBeUIsdUVBTTFCLFdBQVc7MEdBTlYseUJBQXlCLDJFQ1Z0Qyw4U0FNQTtBRElhLHlCQUF5QjtJQURuQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztHQUM3Qix5QkFBeUIsQ0FnQnJDO1NBaEJZLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQUZyQyxTQUFTOzs7MEJBUUwsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEJpekRvYyB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2RlY29yYXRvcnNcIjtcclxuaW1wb3J0IHsgUGFuZXNSb3V0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zbG90cy9yb3V0ZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlNZXRhZGF0YSB9IGZyb20gXCIuLi8uLi9mb3JtL3N1cnZleS9zdXJ2ZXkuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERlc2lnbmVyUmVmIH0gZnJvbSBcIi4uL2RlY2xhcmF0aW9uc1wiO1xyXG5pbXBvcnQgeyBEZXNpZ25lckVsZW1lbnRDb21wb25lbnRCYXNlIH0gZnJvbSBcIi4uL2Rlc2lnbmVyLmJhc2VcIjtcclxuXHJcbkBDb21wb25lbnQoeyB0ZW1wbGF0ZVVybDogJ3N1cnZleS1mb3JtLmNvbXBvbmVudC5odG1sJyB9KVxyXG4gIEBCaXpEb2MoeyBzZWxlY3RvcjogJ3N1cnZleS1kZXNpZ25lcicgfSlcclxuZXhwb3J0IGNsYXNzIFN1cnZleUZvcm1EZXNpZ25Db21wb25lbnQgZXh0ZW5kcyBEZXNpZ25lckVsZW1lbnRDb21wb25lbnRCYXNlPFN1cnZleU1ldGFkYXRhPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIHF1ZXN0aW9uczogW11cclxuICB9KTtcclxuICBjb25zdHJ1Y3RvcihmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBlbGVtZW50OiBFbGVtZW50UmVmPGFueT4sXHJcbiAgICBASW5qZWN0KERlc2lnbmVyUmVmKSByZWY6IERlc2lnbmVyUmVmLFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBQYW5lc1JvdXRlcikge1xyXG4gICAgc3VwZXIoZmIsIGVsZW1lbnQsIHJlZik7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsLmljb24pIHRoaXMubW9kZWwuaWNvbiA9ICdsaXN0X2FsdCc7XHJcbiAgfVxyXG4gIGRlc2lnbigpIHtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ2FkbWluL3Rvb2xzL3N1cnZleS1kZXNpZ25lciddLCB7IHF1ZXJ5UGFyYW1zOiB7IGZvcm1JZDogdGhpcy5tb2RlbC5uYW1lIH0gfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAnd2lkZ2V0J1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJkZXNpZ24oKVwiIFtiaXpkb2NUb29sdGlwXT1cIidEZXNpZ25lcid8dHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cIm1vZGVsLmRyYWZ0XCI+PG1hdC1pY29uPmxpc3RfYWx0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
@@ -1,180 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component, HostListener } from "@angular/core";
3
- import { Validators } from "@angular/forms";
4
- import { BizDoc } from "../../../core/decorators";
5
- import { cleanup } from "../../../core/functions";
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/forms";
8
- import * as i2 from "../../../core/slots/pane-ref";
9
- import * as i3 from "../../../core/prompt.service";
10
- import * as i4 from "../../../core/session.service";
11
- import * as i5 from "../../utility-ref";
12
- import * as i6 from "@angular/common";
13
- import * as i7 from "@angular/cdk/drag-drop";
14
- import * as i8 from "@angular/material/toolbar";
15
- import * as i9 from "@angular/material/core";
16
- import * as i10 from "@angular/material/form-field";
17
- import * as i11 from "@angular/material/select";
18
- import * as i12 from "@angular/material/button";
19
- import * as i13 from "@angular/material/checkbox";
20
- import * as i14 from "@angular/cdk/text-field";
21
- import * as i15 from "@angular/material/input";
22
- import * as i16 from "@angular/material/icon";
23
- import * as i17 from "@angular/material/menu";
24
- import * as i18 from "../../../core/popup/tooltip.directive";
25
- import * as i19 from "../../core/ace.input";
26
- import * as i20 from "../../../core/pipes/translate.pipe";
27
- const NAME = /^[A-Za-z]+\w*$/;
28
- /** */
29
- let SurveyDesignerComponent = class SurveyDesignerComponent {
30
- constructor(_fb, _pane, _cd, _ps, _session, _el, _ref) {
31
- this._fb = _fb;
32
- this._pane = _pane;
33
- this._cd = _cd;
34
- this._ps = _ps;
35
- this._session = _session;
36
- this._el = _el;
37
- this._ref = _ref;
38
- this.loading = true;
39
- this.tools = true;
40
- this.saving = false;
41
- this.history = [];
42
- this.historyIndex = -1;
43
- this.questions = this._fb.array([]);
44
- this.form = this._fb.group({
45
- questions: this.questions
46
- });
47
- this.settings = false;
48
- this.datatypes = this._session.profile.types;
49
- this.cubes = this._session.profile.cubes;
50
- }
51
- ngOnInit() {
52
- this._pane.queryParamsChange.subscribe(p => {
53
- const { formId } = p;
54
- formId && this._open(formId);
55
- });
56
- this.form.valueChanges.pipe().
57
- subscribe(v => {
58
- //this._notifyChange();
59
- });
60
- }
61
- _open(formId) {
62
- this._ref.populate(formId).subscribe(r => {
63
- this._formId = formId;
64
- this._assign(r);
65
- this.loading = false;
66
- });
67
- }
68
- _assign(model) {
69
- this.model = model || { questions: [] };
70
- this.questions.clear({ emitEvent: false });
71
- this.form.patchValue(this.model, { emitEvent: false });
72
- model.questions?.forEach(q => this.questions.push(this._questionform(q), { emitEvent: false }));
73
- }
74
- _questionform(model) {
75
- const name = this._fb.control(model.name, [Validators.required, Validators.pattern(NAME)]), label = this._fb.control(model.label, Validators.required);
76
- return this._fb.group({
77
- name,
78
- label,
79
- description: model.description,
80
- type: model.type,
81
- defaultValue: model.defaultValue,
82
- dataType: model.dataType,
83
- placeholder: model.placeholder,
84
- pattern: model.pattern,
85
- kind: model.kind,
86
- minLength: model.minLength,
87
- maxLength: model.maxLength,
88
- min: model.min,
89
- max: model.max,
90
- required: model.required,
91
- options: this._fb.array(model.options ? [] : [])
92
- });
93
- }
94
- add(type, evt) {
95
- let n = 0, name, label;
96
- do {
97
- n++;
98
- name = 'question' + '_' + n;
99
- label = 'Question' + ' ' + n;
100
- } while (this.questions.controls.
101
- find(c => c.get('name').value === name || c.get('label').value === label));
102
- this._notifyChange();
103
- this.questions.push(this._questionform({
104
- type,
105
- name,
106
- label,
107
- }));
108
- this._cd.detectChanges();
109
- setTimeout(() => this._el.nativeElement.querySelector('.designer-field:last-child input')?.focus());
110
- }
111
- remove(question) {
112
- this._notifyChange();
113
- this.questions.controls.remove(question);
114
- }
115
- _notifyChange() {
116
- this.history.push(JSON.stringify(this.form.value));
117
- this.historyIndex = this.history.length - 1;
118
- this.form.markAsDirty();
119
- }
120
- undo() {
121
- this._restore();
122
- this.historyIndex--;
123
- }
124
- redo() {
125
- this._restore();
126
- this.historyIndex++;
127
- }
128
- _restore() {
129
- this._assign(JSON.parse(this.history[this.historyIndex]));
130
- }
131
- /**
132
- * Ctrl-s save; Ctrl-z undo
133
- * @param event
134
- */
135
- handleKeyboardEvent(event) {
136
- if (event.ctrlKey) {
137
- if (event.which === 83 || event.which === 115) {
138
- this.form.dirty && this.save();
139
- event.preventDefault();
140
- event.stopPropagation();
141
- }
142
- }
143
- }
144
- drop(event, collection) {
145
- this._notifyChange();
146
- const element = collection.at(event.previousIndex);
147
- collection.removeAt(event.previousIndex);
148
- collection.insert(event.currentIndex, element);
149
- //moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
150
- }
151
- save() {
152
- this.saving = true;
153
- Object.assign(this.model, this.form.value);
154
- this._ref.execute({ metadata: cleanup(this.model), formId: this._formId }).subscribe(() => {
155
- this._ps.toast('ChangesSaved');
156
- this.form.markAsPristine();
157
- const form = this._session.profile.forms.find(f => f.name == this._formId);
158
- if (form)
159
- form.options = this.model;
160
- this.saving = false;
161
- }, () => {
162
- this._ps.error();
163
- this.saving = false;
164
- });
165
- }
166
- };
167
- SurveyDesignerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SurveyDesignerComponent, deps: [{ token: i1.FormBuilder }, { token: i2.PaneRef }, { token: i0.ChangeDetectorRef }, { token: i3.PromptService }, { token: i4.SessionService }, { token: i0.ElementRef }, { token: i5.UtilityRef }], target: i0.ɵɵFactoryTarget.Component });
168
- SurveyDesignerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: SurveyDesignerComponent, selector: "ng-component", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === -1\"><mat-icon>undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon>redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"settings = !settings\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" *ngIf=\"model\">\r\n <div class=\"column\" *ngIf=\"settings\">\r\n <mat-form-field>\r\n <mat-label>{{'Value'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"value\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Subject'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"subject\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Summary'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"summary\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, questions)\">\r\n <div class=\"column\" *ngFor=\"let q of questions.controls; let i = index\" cdkDrag [attr.data-index]=\"i\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"q\">\r\n <mat-form-field>\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput required formControlName=\"name\" />\r\n <mat-error *ngIf=\"q.get('name').hasError('pattern')\" [innerHTML]=\"'ProgramPatternErr'|translate\"></mat-error>\r\n <mat-error *ngIf=\"q.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Field'\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Label'|translate}}</mat-label>\r\n <input matInput required formControlName=\"label\" />\r\n <mat-error *ngIf=\"q.get('label').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Label'\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Description'|translate}}</mat-label>\r\n <textarea matInput formControlName=\"description\" cdkTextareaAutosize></textarea>\r\n </mat-form-field>\r\n <mat-checkbox formControlName=\"required\">{{'Mandatory'|translate}}</mat-checkbox>\r\n <ng-container [ngSwitch]=\"q.get('type').value\">\r\n <div *ngSwitchCase=\"'Date'\">\r\n </div>\r\n <div *ngSwitchCase=\"'Text'\">\r\n <mat-form-field>\r\n <mat-label>{{'Type'|translate}}</mat-label>\r\n <mat-select formControlName=\"kind\">\r\n <mat-option value=\"String\">{{'Text'|translate}}</mat-option>\r\n <mat-option value=\"PhoneNumber\">{{'Tel'|translate}}</mat-option>\r\n <mat-option value=\"EmailAddress\">{{'Email'|translate}}</mat-option>\r\n <mat-option value=\"Address\">{{'Address'|translate}}</mat-option>\r\n <mat-option value=\"Url\">{{'Url'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngSwitchCase=\"'Number'\">\r\n </div>\r\n <div *ngSwitchCase=\"'Choice'\">\r\n </div>\r\n <mat-form-field *ngSwitchCase=\"'Select'\">\r\n <mat-label>{{'DataType'|translate}}</mat-label>\r\n <mat-select formControlName=\"dataType\" required>\r\n <mat-option *ngFor=\"let t of datatypes\" [value]=\"t.name\">{{t.title}}</mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"q.get('dataType').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'DataType'\"></mat-error>\r\n </mat-form-field>\r\n <div *ngSwitchDefault>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"actions\">\r\n <button mat-stroked-button (click)=\"remove(q)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n <!--<div *cdkDragPlaceholder class=\"drag-placeholder\"></div>-->\r\n </div>\r\n </div>\r\n <div class=\"column\">\r\n <button mat-stroked-button [matMenuTriggerFor]=\"questionTypeMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #questionTypeMenu>\r\n <button mat-menu-item (click)=\"add('Text', $event)\">{{'Text'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('HTML', $event)\">{{'HTML'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Number', $event)\">{{'Numeric'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Date', $event)\">{{'Date'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Select', $event)\">{{'Select'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Choice', $event)\">{{'Choice'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('YesNo', $event)\">{{'YesNo'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Checkbox', $event)\">{{'Checkbox'|translate}}</button>\r\n </mat-menu>\r\n </div>\r\n</form>\r\n", styles: ["form{margin:8px}section,.designer-row,.designer-field{border:2px solid transparent;border-radius:3px;padding:8px}section:hover,.designer-row:hover,.designer-field:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i6.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i8.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i10.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i14.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i15.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i16.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i17.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i17.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i17.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i18.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: i19.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }, { kind: "pipe", type: i20.TranslatePipe, name: "translate" }] });
169
- SurveyDesignerComponent = __decorate([
170
- BizDoc({ selector: 'bizdoc-survey-designer' })
171
- ], SurveyDesignerComponent);
172
- export { SurveyDesignerComponent };
173
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SurveyDesignerComponent, decorators: [{
174
- type: Component,
175
- args: [{ template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === -1\"><mat-icon>undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon>redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"settings = !settings\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" *ngIf=\"model\">\r\n <div class=\"column\" *ngIf=\"settings\">\r\n <mat-form-field>\r\n <mat-label>{{'Value'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"value\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Subject'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"subject\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Summary'|translate}}</mat-label>\r\n <bizdoc-ace-input formControlName=\"summary\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'Expression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, questions)\">\r\n <div class=\"column\" *ngFor=\"let q of questions.controls; let i = index\" cdkDrag [attr.data-index]=\"i\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"q\">\r\n <mat-form-field>\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput required formControlName=\"name\" />\r\n <mat-error *ngIf=\"q.get('name').hasError('pattern')\" [innerHTML]=\"'ProgramPatternErr'|translate\"></mat-error>\r\n <mat-error *ngIf=\"q.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Field'\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Label'|translate}}</mat-label>\r\n <input matInput required formControlName=\"label\" />\r\n <mat-error *ngIf=\"q.get('label').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'Label'\"></mat-error>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Description'|translate}}</mat-label>\r\n <textarea matInput formControlName=\"description\" cdkTextareaAutosize></textarea>\r\n </mat-form-field>\r\n <mat-checkbox formControlName=\"required\">{{'Mandatory'|translate}}</mat-checkbox>\r\n <ng-container [ngSwitch]=\"q.get('type').value\">\r\n <div *ngSwitchCase=\"'Date'\">\r\n </div>\r\n <div *ngSwitchCase=\"'Text'\">\r\n <mat-form-field>\r\n <mat-label>{{'Type'|translate}}</mat-label>\r\n <mat-select formControlName=\"kind\">\r\n <mat-option value=\"String\">{{'Text'|translate}}</mat-option>\r\n <mat-option value=\"PhoneNumber\">{{'Tel'|translate}}</mat-option>\r\n <mat-option value=\"EmailAddress\">{{'Email'|translate}}</mat-option>\r\n <mat-option value=\"Address\">{{'Address'|translate}}</mat-option>\r\n <mat-option value=\"Url\">{{'Url'|translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngSwitchCase=\"'Number'\">\r\n </div>\r\n <div *ngSwitchCase=\"'Choice'\">\r\n </div>\r\n <mat-form-field *ngSwitchCase=\"'Select'\">\r\n <mat-label>{{'DataType'|translate}}</mat-label>\r\n <mat-select formControlName=\"dataType\" required>\r\n <mat-option *ngFor=\"let t of datatypes\" [value]=\"t.name\">{{t.title}}</mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"q.get('dataType').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:'DataType'\"></mat-error>\r\n </mat-form-field>\r\n <div *ngSwitchDefault>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"actions\">\r\n <button mat-stroked-button (click)=\"remove(q)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n <!--<div *cdkDragPlaceholder class=\"drag-placeholder\"></div>-->\r\n </div>\r\n </div>\r\n <div class=\"column\">\r\n <button mat-stroked-button [matMenuTriggerFor]=\"questionTypeMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #questionTypeMenu>\r\n <button mat-menu-item (click)=\"add('Text', $event)\">{{'Text'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('HTML', $event)\">{{'HTML'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Number', $event)\">{{'Numeric'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Date', $event)\">{{'Date'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Select', $event)\">{{'Select'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Choice', $event)\">{{'Choice'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('YesNo', $event)\">{{'YesNo'|translate}}</button>\r\n <button mat-menu-item (click)=\"add('Checkbox', $event)\">{{'Checkbox'|translate}}</button>\r\n </mat-menu>\r\n </div>\r\n</form>\r\n", styles: ["form{margin:8px}section,.designer-row,.designer-field{border:2px solid transparent;border-radius:3px;padding:8px}section:hover,.designer-row:hover,.designer-field:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"] }]
176
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.PaneRef }, { type: i0.ChangeDetectorRef }, { type: i3.PromptService }, { type: i4.SessionService }, { type: i0.ElementRef }, { type: i5.UtilityRef }]; }, propDecorators: { handleKeyboardEvent: [{
177
- type: HostListener,
178
- args: ['document:keydown', ['$event']]
179
- }] } });
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS9zdXJ2ZXkvc3VydmV5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS9zdXJ2ZXkvc3VydmV5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFrRCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT2xELE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDO0FBRTlCLE1BQU07QUFNQyxJQUFNLHVCQUF1QixHQUE3QixNQUFNLHVCQUF1QjtJQWdCbEMsWUFDVSxHQUFnQixFQUNoQixLQUFtQixFQUNuQixHQUFzQixFQUN0QixHQUFrQixFQUNsQixRQUF3QixFQUN4QixHQUFlLEVBQ2YsSUFBK0Y7UUFOL0YsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUNoQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFFBQUcsR0FBSCxHQUFHLENBQWU7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUNmLFNBQUksR0FBSixJQUFJLENBQTJGO1FBdEJ6RyxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsVUFBSyxHQUFHLElBQUksQ0FBQztRQUNiLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFTixZ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SSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNFLElBQUksSUFBSTtnQkFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEdBQUcsRUFBRTtZQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztvSEFsSlUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsZ0lDbkJwQyx5c0xBK0ZBO0FENUVhLHVCQUF1QjtJQURuQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztHQUNsQyx1QkFBdUIsQ0FtSm5DO1NBbkpZLHVCQUF1QjsyRkFBdkIsdUJBQXVCO2tCQUxuQyxTQUFTOzttUUEwSFIsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQml6RG9jIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvZGVjb3JhdG9yc1wiO1xyXG5pbXBvcnQgeyBjbGVhbnVwIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCB7IEN1YmUsIEZpZWxkS2luZCwgVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFuZVJlZiB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Nsb3RzL3BhbmUtcmVmXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlSZWYgfSBmcm9tIFwiLi4vLi4vdXRpbGl0eS1yZWZcIjtcclxuXHJcbmNvbnN0IE5BTUUgPSAvXltBLVphLXpdK1xcdyokLztcclxuXHJcbi8qKiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJ3N1cnZleS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ3N1cnZleS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbkBCaXpEb2MoeyBzZWxlY3RvcjogJ2JpemRvYy1zdXJ2ZXktZGVzaWduZXInIH0pXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlEZXNpZ25lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgbG9hZGluZyA9IHRydWU7XHJcbiAgdG9vbHMgPSB0cnVlO1xyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIG1vZGVsOiBTdXJ2ZXlNZXRhZGF0YTtcclxuICByZWFkb25seSBoaXN0b3J5OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGhpc3RvcnlJbmRleCA9IC0xO1xyXG4gIHJlYWRvbmx5IGRhdGF0eXBlczogVHlwZVtdO1xyXG4gIHJlYWRvbmx5IGN1YmVzOiBDdWJlW107XHJcbiAgcmVhZG9ubHkgcXVlc3Rpb25zID0gdGhpcy5fZmIuYXJyYXkoW10pO1xyXG4gIHJlYWRvbmx5IGZvcm0gPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICBxdWVzdGlvbnM6IHRoaXMucXVlc3Rpb25zXHJcbiAgfSk7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBzZXR0aW5ncyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2Zvcm1JZDogc3RyaW5nO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfcGFuZTogUGFuZVJlZjxhbnk+LFxyXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfcHM6IFByb21wdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2VsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBfcmVmOiBVdGlsaXR5UmVmPGJvb2xlYW4sIHsgbWV0YWRhdGE6IFN1cnZleU1ldGFkYXRhLCBmb3JtSWQ6IHN0cmluZyB9LCBTdXJ2ZXlNZXRhZGF0YSwgc3RyaW5nPikge1xyXG4gICAgdGhpcy5kYXRhdHlwZXMgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudHlwZXM7XHJcbiAgICB0aGlzLmN1YmVzID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmN1YmVzO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3BhbmUucXVlcnlQYXJhbXNDaGFuZ2Uuc3Vic2NyaWJlKHAgPT4ge1xyXG4gICAgICBjb25zdCB7IGZvcm1JZCB9ID0gcDtcclxuICAgICAgZm9ybUlkICYmIHRoaXMuX29wZW4oZm9ybUlkKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKCkuXHJcbiAgICAgIHN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgICAvL3RoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfb3Blbihmb3JtSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcmVmLnBvcHVsYXRlKGZvcm1JZCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICB0aGlzLl9mb3JtSWQgPSBmb3JtSWQ7XHJcbiAgICAgIHRoaXMuX2Fzc2lnbihyKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYXNzaWduKG1vZGVsOiBTdXJ2ZXlNZXRhZGF0YSkge1xyXG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsIHx8IHsgcXVlc3Rpb25zOiBbXSB9O1xyXG4gICAgdGhpcy5xdWVzdGlvbnMuY2xlYXIoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5tb2RlbCBhcyBhbnksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIG1vZGVsLnF1ZXN0aW9ucz8uZm9yRWFjaChxID0+IHRoaXMucXVlc3Rpb25zLnB1c2godGhpcy5fcXVlc3Rpb25mb3JtKHEpIGFzIGFueSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcXVlc3Rpb25mb3JtKG1vZGVsOiBRdWVzdGlvbik6IGFueSB7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fZmIuY29udHJvbChtb2RlbC5uYW1lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKE5BTUUpXSksXHJcbiAgICAgIGxhYmVsID0gdGhpcy5fZmIuY29udHJvbChtb2RlbC5sYWJlbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICByZXR1cm4gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBuYW1lLFxyXG4gICAgICBsYWJlbCxcclxuICAgICAgZGVzY3JpcHRpb246IG1vZGVsLmRlc2NyaXB0aW9uLFxyXG4gICAgICB0eXBlOiBtb2RlbC50eXBlLFxyXG4gICAgICBkZWZhdWx0VmFsdWU6IChtb2RlbCBhcyBOdW1iZXIpLmRlZmF1bHRWYWx1ZSxcclxuICAgICAgZGF0YVR5cGU6IChtb2RlbCBhcyBTZWxlY3QpLmRhdGFUeXBlLFxyXG4gICAgICBwbGFjZWhvbGRlcjogKG1vZGVsIGFzIFRleHQpLnBsYWNlaG9sZGVyLFxyXG4gICAgICBwYXR0ZXJuOiAobW9kZWwgYXMgVGV4dCkucGF0dGVybixcclxuICAgICAga2luZDogKG1vZGVsIGFzIFRleHQpLmtpbmQsXHJcbiAgICAgIG1pbkxlbmd0aDogKG1vZGVsIGFzIFRleHQpLm1pbkxlbmd0aCxcclxuICAgICAgbWF4TGVuZ3RoOiAobW9kZWwgYXMgVGV4dCkubWF4TGVuZ3RoLFxyXG4gICAgICBtaW46IChtb2RlbCBhcyBOdW1iZXIpLm1pbixcclxuICAgICAgbWF4OiAobW9kZWwgYXMgTnVtYmVyKS5tYXgsXHJcbiAgICAgIHJlcXVpcmVkOiBtb2RlbC5yZXF1aXJlZCxcclxuICAgICAgb3B0aW9uczogdGhpcy5fZmIuYXJyYXkoKG1vZGVsIGFzIENob2ljZSkub3B0aW9ucyA/IFtdOiBbXSlcclxuICAgIH0pXHJcbiAgfVxyXG4gIGFkZCh0eXBlOiBhbnksIGV2dD86IEV2ZW50KSB7XHJcbiAgICBsZXQgbiA9IDAsIG5hbWUsIGxhYmVsO1xyXG4gICAgZG8ge1xyXG4gICAgICBuKys7XHJcbiAgICAgIG5hbWUgPSAncXVlc3Rpb24nICsgJ18nICsgbjtcclxuICAgICAgbGFiZWwgPSAnUXVlc3Rpb24nICsgJyAnICsgbjtcclxuICAgIH0gd2hpbGUgKHRoaXMucXVlc3Rpb25zLmNvbnRyb2xzLlxyXG4gICAgICAgIGZpbmQoYyA9PiBjLmdldCgnbmFtZScpLnZhbHVlID09PSBuYW1lIHx8IGMuZ2V0KCdsYWJlbCcpLnZhbHVlID09PSBsYWJlbCkpO1xyXG4gICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICB0aGlzLnF1ZXN0aW9ucy5wdXNoKHRoaXMuX3F1ZXN0aW9uZm9ybSh7XHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIGxhYmVsLFxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PlxyXG4gICAgICB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kZXNpZ25lci1maWVsZDpsYXN0LWNoaWxkIGlucHV0Jyk/LmZvY3VzKClcclxuICAgIClcclxuICB9XHJcbiAgcmVtb3ZlKHF1ZXN0aW9uOiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgdGhpcy5xdWVzdGlvbnMuY29udHJvbHMucmVtb3ZlKHF1ZXN0aW9uIGFzIGFueSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX25vdGlmeUNoYW5nZSgpIHtcclxuICAgIHRoaXMuaGlzdG9yeS5wdXNoKEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS52YWx1ZSkpO1xyXG4gICAgdGhpcy5oaXN0b3J5SW5kZXggPSB0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMTtcclxuICAgIHRoaXMuZm9ybS5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuICB1bmRvKCkge1xyXG4gICAgdGhpcy5fcmVzdG9yZSgpO1xyXG4gICAgdGhpcy5oaXN0b3J5SW5kZXgtLTtcclxuICB9XHJcbiAgcmVkbygpIHtcclxuICAgIHRoaXMuX3Jlc3RvcmUoKTtcclxuICAgIHRoaXMuaGlzdG9yeUluZGV4Kys7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Jlc3RvcmUoKSB7XHJcbiAgICB0aGlzLl9hc3NpZ24oSlNPTi5wYXJzZSh0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5SW5kZXhdKSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEN0cmwtcyBzYXZlOyBDdHJsLXogdW5kb1xyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChldmVudC5jdHJsS2V5KSB7XHJcbiAgICAgIGlmIChldmVudC53aGljaCA9PT0gODMgfHwgZXZlbnQud2hpY2ggPT09IDExNSkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5kaXJ0eSAmJiB0aGlzLnNhdmUoKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPEZvcm1Hcm91cD4sIGNvbGxlY3Rpb246IEZvcm1BcnJheSkge1xyXG4gICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gY29sbGVjdGlvbi5hdChldmVudC5wcmV2aW91c0luZGV4KTtcclxuICAgIGNvbGxlY3Rpb24ucmVtb3ZlQXQoZXZlbnQucHJldmlvdXNJbmRleCk7XHJcbiAgICBjb2xsZWN0aW9uLmluc2VydChldmVudC5jdXJyZW50SW5kZXgsIGVsZW1lbnQpO1xyXG4gICAgLy9tb3ZlSXRlbUluQXJyYXkoZXZlbnQuY29udGFpbmVyLmRhdGEsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgfVxyXG4gIHNhdmUoKSB7XHJcbiAgICB0aGlzLnNhdmluZyA9IHRydWU7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMubW9kZWwsIHRoaXMuZm9ybS52YWx1ZSk7XHJcbiAgICB0aGlzLl9yZWYuZXhlY3V0ZSh7IG1ldGFkYXRhOiBjbGVhbnVwKHRoaXMubW9kZWwpLCBmb3JtSWQ6IHRoaXMuX2Zvcm1JZCB9KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9wcy50b2FzdCgnQ2hhbmdlc1NhdmVkJyk7XHJcbiAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmZvcm1zLmZpbmQoZiA9PiBmLm5hbWUgPT0gdGhpcy5fZm9ybUlkKTtcclxuICAgICAgaWYgKGZvcm0pIGZvcm0ub3B0aW9ucyA9IHRoaXMubW9kZWw7XHJcbiAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICB9LCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuX3BzLmVycm9yKCk7XHJcbiAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBTdXJ2ZXlNZXRhZGF0YSB7XHJcbiAgcXVlc3Rpb25zOiBRdWVzdGlvbltdO1xyXG59XHJcbmV4cG9ydCB0eXBlIFF1ZXN0aW9uID0gVGV4dCB8IEh0bWwgfCBEYXRlIHwgTnVtYmVyIHwgU2VsZWN0IHwgQ2hvaWNlIHwgWWVzTm8gfCBDaGVja2JveDtcclxuaW50ZXJmYWNlIFF1ZXN0aW9uQmFzZSB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgSHRtbCBleHRlbmRzIFF1ZXN0aW9uQmFzZSB7XHJcbiAgdHlwZTogJ0h0bWwnO1xyXG4gIGxpbmVzPzogbnVtYmVyO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgVGV4dCBleHRlbmRzIFF1ZXN0aW9uQmFzZSB7XHJcbiAgdHlwZTogJ1RleHQnO1xyXG4gIHBhdHRlcm4/OiBzdHJpbmc7XHJcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xyXG4gIG1heExlbmd0aD86IG51bWJlcjtcclxuICBwcmVmaXhJY29uPzogc3RyaW5nO1xyXG4gIHN1Zml4SWNvbj86IHN0cmluZztcclxuICBsaW5lcz86IG51bWJlcjtcclxuICBraW5kPzogRmllbGRLaW5kO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tib3ggZXh0ZW5kcyBRdWVzdGlvbkJhc2Uge1xyXG4gIHR5cGU6ICdDaGVja2JveCc7XHJcbiAgZGVmYXVsdFZhbHVlPzogYm9vbGVhbjtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFllc05vIGV4dGVuZHMgUXVlc3Rpb25CYXNlIHtcclxuICB0eXBlOiAnWWVzTm8nO1xyXG4gIGRlZmF1bHRWYWx1ZT86IGJvb2xlYW47XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBEYXRlIGV4dGVuZHMgUXVlc3Rpb25CYXNlIHtcclxuICB0eXBlOiAnRGF0ZSc7XHJcbiAgcHJlZml4SWNvbj86IHN0cmluZztcclxuICBzdWZpeEljb24/OiBzdHJpbmc7XHJcbiAgZGVmYXVsdFZhbHVlPzogRGF0ZTtcclxuICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIE51bWJlciBleHRlbmRzIFF1ZXN0aW9uQmFzZSB7XHJcbiAgdHlwZTogJ051bWJlcic7XHJcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcbiAgZGVmYXVsdFZhbHVlPzogbnVtYmVyO1xyXG4gIHByZWZpeEljb24/OiBzdHJpbmc7XHJcbiAgc3VmaXhJY29uPzogc3RyaW5nO1xyXG4gIG1pbj86IG51bWJlcjtcclxuICBtYXg/OiBudW1iZXI7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3QgZXh0ZW5kcyBRdWVzdGlvbkJhc2Uge1xyXG4gIHR5cGU6ICdTZWxlY3QnO1xyXG4gIHByZWZpeEljb24/OiBzdHJpbmc7XHJcbiAgc3VmaXhJY29uPzogc3RyaW5nO1xyXG4gIGRhdGFUeXBlPzogc3RyaW5nO1xyXG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICBtdWx0aXBsZT86IGJvb2xlYW47XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBDaG9pY2UgZXh0ZW5kcyBRdWVzdGlvbkJhc2Uge1xyXG4gIHR5cGU6ICdDaG9pY2UnO1xyXG4gIG9wdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxufVxyXG4iLCI8bWF0LXRvb2xiYXI+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNhdmUoKVwiIFtkaXNhYmxlZF09XCIhZm9ybS5kaXJ0eSB8fCBsb2FkaW5nIHx8IHNhdmluZ1wiIFtiaXpkb2NUb29sdGlwXT1cIidTYXZlJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+c2F2ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInVuZG8oKVwiIFtiaXpkb2NUb29sdGlwXT1cIidVbmRvJyB8IHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCJoaXN0b3J5SW5kZXggPT09IC0xXCI+PG1hdC1pY29uPnVuZG88L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJyZWRvKClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVkbycgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiaGlzdG9yeUluZGV4ID09PSBoaXN0b3J5Lmxlbmd0aCAtIDFcIj48bWF0LWljb24+cmVkbzwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzZXR0aW5ncyA9ICFzZXR0aW5nc1wiIFtiaXpkb2NUb29sdGlwXT1cIidTZXR0aW5ncyd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+PC9idXR0b24+XHJcbjwvbWF0LXRvb2xiYXI+XHJcbjxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiICpuZ0lmPVwibW9kZWxcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgKm5nSWY9XCJzZXR0aW5nc1wiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J1ZhbHVlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8Yml6ZG9jLWFjZS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiPjwvYml6ZG9jLWFjZS1pbnB1dD5cclxuICAgICAgPG1hdC1oaW50PiB7eyAnRXhwcmVzc2lvbid8dHJhbnNsYXRlIH19PC9tYXQtaGludD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snU3ViamVjdCd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPGJpemRvYy1hY2UtaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwic3ViamVjdFwiPjwvYml6ZG9jLWFjZS1pbnB1dD5cclxuICAgICAgPG1hdC1oaW50PiB7eyAnRXhwcmVzc2lvbid8dHJhbnNsYXRlIH19PC9tYXQtaGludD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snU3VtbWFyeSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPGJpemRvYy1hY2UtaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwic3VtbWFyeVwiPjwvYml6ZG9jLWFjZS1pbnB1dD5cclxuICAgICAgPG1hdC1oaW50PiB7eyAnRXhwcmVzc2lvbid8dHJhbnNsYXRlIH19PC9tYXQtaGludD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50LCBxdWVzdGlvbnMpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgKm5nRm9yPVwibGV0IHEgb2YgcXVlc3Rpb25zLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgY2RrRHJhZyBbYXR0ci5kYXRhLWluZGV4XT1cImlcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2VjdGlvbi1kcmFnXCIgY2RrRHJhZ0hhbmRsZT5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIiBbZm9ybUdyb3VwXT1cInFcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnt7J05hbWUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIC8+XHJcbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicS5nZXQoJ25hbWUnKS5oYXNFcnJvcigncGF0dGVybicpXCIgW2lubmVySFRNTF09XCInUHJvZ3JhbVBhdHRlcm5FcnInfHRyYW5zbGF0ZVwiPjwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInEuZ2V0KCduYW1lJykuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiBbaW5uZXJIVE1MXT1cIidSZXF1aXJlZEVycid8dHJhbnNsYXRlOidGaWVsZCdcIj48L21hdC1lcnJvcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+e3snTGFiZWwnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPVwibGFiZWxcIiAvPlxyXG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInEuZ2V0KCdsYWJlbCcpLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgW2lubmVySFRNTF09XCInUmVxdWlyZWRFcnInfHRyYW5zbGF0ZTonTGFiZWwnXCI+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnt7J0Rlc2NyaXB0aW9uJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCIgY2RrVGV4dGFyZWFBdXRvc2l6ZT48L3RleHRhcmVhPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJyZXF1aXJlZFwiPnt7J01hbmRhdG9yeSd8dHJhbnNsYXRlfX08L21hdC1jaGVja2JveD5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJxLmdldCgndHlwZScpLnZhbHVlXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInRGF0ZSdcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ1RleHQnXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7J1R5cGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwia2luZFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdHJpbmdcIj57eydUZXh0J3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiUGhvbmVOdW1iZXJcIj57eydUZWwnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJFbWFpbEFkZHJlc3NcIj57eydFbWFpbCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkFkZHJlc3NcIj57eydBZGRyZXNzJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiVXJsXCI+e3snVXJsJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidOdW1iZXInXCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidDaG9pY2UnXCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdTd2l0Y2hDYXNlPVwiJ1NlbGVjdCdcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eydEYXRhVHlwZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiZGF0YVR5cGVcIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiBkYXRhdHlwZXNcIiBbdmFsdWVdPVwidC5uYW1lXCI+e3t0LnRpdGxlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInEuZ2V0KCdkYXRhVHlwZScpLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgW2lubmVySFRNTF09XCInUmVxdWlyZWRFcnInfHRyYW5zbGF0ZTonRGF0YVR5cGUnXCI+PC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJyZW1vdmUocSlcIiBbYml6ZG9jVG9vbHRpcF09XCInRGlzY2FyZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLTxkaXYgKmNka0RyYWdQbGFjZWhvbGRlciBjbGFzcz1cImRyYWctcGxhY2Vob2xkZXJcIj48L2Rpdj4tLT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cclxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJxdWVzdGlvblR5cGVNZW51XCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FkZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPG1hdC1tZW51ICNxdWVzdGlvblR5cGVNZW51PlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFkZCgnVGV4dCcsICRldmVudClcIj57eydUZXh0J3x0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFkZCgnSFRNTCcsICRldmVudClcIj57eydIVE1MJ3x0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFkZCgnTnVtYmVyJywgJGV2ZW50KVwiPnt7J051bWVyaWMnfHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiYWRkKCdEYXRlJywgJGV2ZW50KVwiPnt7J0RhdGUnfHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiYWRkKCdTZWxlY3QnLCAkZXZlbnQpXCI+e3snU2VsZWN0J3x0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFkZCgnQ2hvaWNlJywgJGV2ZW50KVwiPnt7J0Nob2ljZSd8dHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhZGQoJ1llc05vJywgJGV2ZW50KVwiPnt7J1llc05vJ3x0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFkZCgnQ2hlY2tib3gnLCAkZXZlbnQpXCI+e3snQ2hlY2tib3gnfHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==