@magic-xpa/angular 4.1100.0-dev4110.99 → 4.1100.0
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/README.md +5 -5
- 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 +648 -0
- package/esm2022/src/services/title.magic.service.mjs +19 -0
- package/esm2022/src/ui/GuiInteractiveExecutor.mjs +114 -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 +100 -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/{esm2020 → esm2022}/src/ui/directives/magic/nocontrol.magic.directive.mjs +193 -193
- 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 +232 -0
- package/esm2022/src/ui/directives/magicViewContainerRef.directive.mjs +20 -0
- package/esm2022/src/ui/directives/mgformat.magic.directive.mjs +579 -0
- package/esm2022/src/ui/directives/range-validator.magic.directive.mjs +60 -0
- package/{esm2020 → esm2022}/src/ui/magic-confirmationBox.mjs +41 -41
- 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 +236 -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/{esm2020 → esm2022}/src/ui/utils.mjs +53 -53
- package/{fesm2020 → fesm2022}/magic-xpa-angular.mjs +4930 -4495
- package/fesm2022/magic-xpa-angular.mjs.map +1 -0
- package/index.d.ts +58 -58
- package/package.json +10 -16
- 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 -31
- 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 -22
- 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 +22 -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 +45 -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 +43 -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 -236
- 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 -105
- 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/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/fesm2015/magic-xpa-angular.mjs +0 -4865
- package/fesm2015/magic-xpa-angular.mjs.map +0 -1
- package/fesm2020/magic-xpa-angular.mjs.map +0 -1
@@ -1,356 +0,0 @@
|
|
1
|
-
import { Injectable } from '@angular/core';
|
2
|
-
import { TaskMagicService } from './task.magics.service';
|
3
|
-
import { GuiEnvironment, HtmlProperties, PIC } from '@magic-xpa/gui';
|
4
|
-
import { isNullOrUndefined, StringBuilder } from '@magic-xpa/mscorelib';
|
5
|
-
import { getGuiEventObj, CookieService } from '@magic-xpa/engine';
|
6
|
-
import { Logger, PICInterface, StorageAttribute } from '@magic-xpa/utils';
|
7
|
-
import { MagicColorService } from './magic-color.service';
|
8
|
-
import { maskitoTimeOptionsGenerator } from "@maskito/kit";
|
9
|
-
import * as i0 from "@angular/core";
|
10
|
-
import * as i1 from "./task.magics.service";
|
11
|
-
import * as i2 from "./magic-color.service";
|
12
|
-
export class AccessorMagicService {
|
13
|
-
constructor(task, magicColor) {
|
14
|
-
this.task = task;
|
15
|
-
this.magicColor = magicColor;
|
16
|
-
this.Logger = null;
|
17
|
-
this.hhmm = maskitoTimeOptionsGenerator({ mode: 'HH:MM' });
|
18
|
-
this.hhmmss = maskitoTimeOptionsGenerator({ mode: 'HH:MM:SS' });
|
19
|
-
this.Logger = Logger.Instance;
|
20
|
-
}
|
21
|
-
checkIsReadOnly(controlId) {
|
22
|
-
let properties;
|
23
|
-
properties = this.task.Records.list[0].getControlMetadata(controlId);
|
24
|
-
if (properties.properties.get(HtmlProperties.ReadOnly) !== null && properties.properties.get(HtmlProperties.ReadOnly) === true)
|
25
|
-
return true;
|
26
|
-
else
|
27
|
-
return false;
|
28
|
-
}
|
29
|
-
getText(controlId, rowId) {
|
30
|
-
return this.task.getProperty(controlId, HtmlProperties.Text, rowId);
|
31
|
-
}
|
32
|
-
getTabpageText(controlId, layer) {
|
33
|
-
const items = this.task.getProperty(controlId, HtmlProperties.ItemsList);
|
34
|
-
if (typeof items !== "undefined")
|
35
|
-
return items[layer].displayValue;
|
36
|
-
return "";
|
37
|
-
}
|
38
|
-
getImage(controlId, rowId) {
|
39
|
-
let result = this.task.getProperty(controlId, HtmlProperties.Image, rowId);
|
40
|
-
return result;
|
41
|
-
}
|
42
|
-
isImageExists(controlId, rowId) {
|
43
|
-
let result = this.task.getProperty(controlId, HtmlProperties.Image, rowId);
|
44
|
-
return !isNullOrUndefined(result);
|
45
|
-
}
|
46
|
-
getClasses(controlId, rowId) {
|
47
|
-
return this.task.getClasses(controlId, rowId);
|
48
|
-
}
|
49
|
-
getStyle(controlId, styleName, rowId) {
|
50
|
-
let style = this.task.getStyle(controlId, styleName, rowId);
|
51
|
-
return style;
|
52
|
-
}
|
53
|
-
getVisible(controlId, rowId) {
|
54
|
-
let vis = this.getProperty(controlId, HtmlProperties.Visible, rowId);
|
55
|
-
return vis ? 'visible' : 'hidden';
|
56
|
-
}
|
57
|
-
getAlphaMask(controlId, rowId) {
|
58
|
-
if (isNullOrUndefined(controlId))
|
59
|
-
return null;
|
60
|
-
let pic = this.task.GetControlPictureMask(controlId);
|
61
|
-
let mask = pic.getMask();
|
62
|
-
let valueStr = new StringBuilder();
|
63
|
-
for (let i = 0; i < mask.length; i++) {
|
64
|
-
switch (mask.charCodeAt(i)) {
|
65
|
-
case PICInterface.PIC_N:
|
66
|
-
valueStr.Append("0");
|
67
|
-
break;
|
68
|
-
case PICInterface.PIC_U:
|
69
|
-
case PICInterface.PIC_L:
|
70
|
-
case PICInterface.PIC_X:
|
71
|
-
valueStr.Append("A");
|
72
|
-
break;
|
73
|
-
default:
|
74
|
-
valueStr.Append(mask.charAt(i));
|
75
|
-
break;
|
76
|
-
}
|
77
|
-
}
|
78
|
-
return (pic != null) ? valueStr.toString() : null;
|
79
|
-
}
|
80
|
-
getNumericPicture(picture) {
|
81
|
-
var obj = {};
|
82
|
-
if (isNullOrUndefined(picture))
|
83
|
-
return obj;
|
84
|
-
let pic = new PIC(picture, StorageAttribute.NUMERIC, 0);
|
85
|
-
obj['prefix'] = "";
|
86
|
-
if (pic.getPosPref_().length > 0 && pic.getNegPref_().length > 0) {
|
87
|
-
let pref = '-' + pic.getPosPref_();
|
88
|
-
if (pref == pic.getNegPref_())
|
89
|
-
obj['prefix'] = pic.getPosPref_();
|
90
|
-
}
|
91
|
-
if (pic.getPosSuff_().length > 0)
|
92
|
-
obj['suffix'] = pic.getPosSuff_();
|
93
|
-
else
|
94
|
-
obj['suffix'] = "";
|
95
|
-
if (pic.isNegative())
|
96
|
-
obj['allowNegative'] = true;
|
97
|
-
else
|
98
|
-
obj['allowNegative'] = false;
|
99
|
-
if (pic.getDec() >= 0)
|
100
|
-
obj['precision'] = pic.getDec();
|
101
|
-
if (pic.isLeft())
|
102
|
-
obj['align'] = "left";
|
103
|
-
obj['decimal'] = GuiEnvironment.Environment.GetDecimal();
|
104
|
-
if (pic.withComa())
|
105
|
-
obj['thousands'] = GuiEnvironment.Environment.GetThousands();
|
106
|
-
else
|
107
|
-
obj['thousands'] = "";
|
108
|
-
if (pic.getWholes())
|
109
|
-
obj['wholes'] = pic.getWholes();
|
110
|
-
return obj;
|
111
|
-
}
|
112
|
-
getMustInput(controlId, rowId) {
|
113
|
-
let vis = this.getProperty(controlId, HtmlProperties.MustInput, rowId);
|
114
|
-
return vis ? 'true' : 'false';
|
115
|
-
}
|
116
|
-
isDisabled(controlId, rowId) {
|
117
|
-
let result = this.getProperty(controlId, HtmlProperties.Enabled, rowId);
|
118
|
-
return result === true ? null : true;
|
119
|
-
}
|
120
|
-
getProperty(controlId, prop, rowId) {
|
121
|
-
return this.task.getProperty(controlId, prop, rowId);
|
122
|
-
}
|
123
|
-
getTitle(controlId, rowId) {
|
124
|
-
return this.task.getProperty(controlId, HtmlProperties.Tooltip, rowId);
|
125
|
-
}
|
126
|
-
getZoomButtonTitle(controlId, rowId) {
|
127
|
-
return this.task.getProperty(controlId, HtmlProperties.ZoomButtonTooltip, rowId);
|
128
|
-
}
|
129
|
-
getSelectedValue(controlId, rowId) {
|
130
|
-
return this.task.getProperty(controlId, HtmlProperties.SelectedValue, rowId);
|
131
|
-
}
|
132
|
-
getPlaceholder(controlId, rowId) {
|
133
|
-
return this.task.getProperty(controlId, HtmlProperties.PlaceHolder, rowId);
|
134
|
-
}
|
135
|
-
getType(controlId, rowId) {
|
136
|
-
let result = this.task.getProperty(controlId, HtmlProperties.Password, rowId);
|
137
|
-
return result ? "password" : "text";
|
138
|
-
}
|
139
|
-
getTabIndex(controlId, rowId) {
|
140
|
-
return this.task.getProperty(controlId, HtmlProperties.TabIndex, rowId);
|
141
|
-
}
|
142
|
-
getValue(controlId, rowId) {
|
143
|
-
let val = this.task.getValue(controlId, rowId);
|
144
|
-
return val;
|
145
|
-
}
|
146
|
-
getFormattedValue(controlId, rowId) {
|
147
|
-
let val = this.task.getValue(controlId, rowId);
|
148
|
-
val = this.task.getFormattedValue(controlId, val, rowId);
|
149
|
-
return val;
|
150
|
-
}
|
151
|
-
getPicture(controlId, rowId) {
|
152
|
-
if (isNullOrUndefined(controlId))
|
153
|
-
return null;
|
154
|
-
let pic = this.task.GetControlPictureMask(controlId);
|
155
|
-
return (pic != null) ? pic.getFormat().toString() : null;
|
156
|
-
}
|
157
|
-
getCustomProperty(controlId, propertyNameOrRowID, rowId) {
|
158
|
-
if (controlId.indexOf('~') == -1)
|
159
|
-
return this.getCustomProperty_1(controlId, propertyNameOrRowID, rowId);
|
160
|
-
else {
|
161
|
-
let cid = controlId.split('~')[0];
|
162
|
-
let propName = controlId.split('~')[1];
|
163
|
-
return this.getCustomProperty_1(cid, propName, propertyNameOrRowID);
|
164
|
-
}
|
165
|
-
}
|
166
|
-
getCustomProperty_1(controlId, propertyName, rowId) {
|
167
|
-
let userProperties;
|
168
|
-
if (isNullOrUndefined(rowId))
|
169
|
-
rowId = '0';
|
170
|
-
let rec = this.task.Records.list[rowId];
|
171
|
-
if (isNullOrUndefined(rec))
|
172
|
-
debugger;
|
173
|
-
else {
|
174
|
-
const controlMetadata = rec.getControlMetadata(controlId);
|
175
|
-
if (controlMetadata.userProperties.has(propertyName)) {
|
176
|
-
userProperties = controlMetadata.userProperties.get(propertyName);
|
177
|
-
}
|
178
|
-
}
|
179
|
-
return userProperties;
|
180
|
-
}
|
181
|
-
getItemListValues(id, rowId) {
|
182
|
-
return this.getProperty(id, HtmlProperties.ItemsList, rowId);
|
183
|
-
}
|
184
|
-
getFilteredList(controlId, rowId) {
|
185
|
-
if (isNullOrUndefined(rowId))
|
186
|
-
rowId = '0';
|
187
|
-
let items = this.getItemListValues(controlId, rowId);
|
188
|
-
let value = this.task.getFormControl(rowId, controlId).value;
|
189
|
-
if (value !== null && value !== "" && items instanceof Array) {
|
190
|
-
value = value.toLowerCase();
|
191
|
-
return items.filter(option => option.displayValue.toLowerCase().includes(value));
|
192
|
-
}
|
193
|
-
else
|
194
|
-
return items;
|
195
|
-
}
|
196
|
-
getDisplayValue(id, rowId) {
|
197
|
-
let displayValue = "";
|
198
|
-
let o = this.getProperty(id, HtmlProperties.ItemsList, rowId);
|
199
|
-
let value = this.task.getValue(id, rowId);
|
200
|
-
if (value >= 0 && value < o.length && !isNullOrUndefined(o[value]))
|
201
|
-
displayValue = o[value].displayValue;
|
202
|
-
return displayValue;
|
203
|
-
}
|
204
|
-
isOptionSelected(index, controlId) {
|
205
|
-
let val = this.task.getValue(controlId, "0");
|
206
|
-
for (let item of val) {
|
207
|
-
if (item === index)
|
208
|
-
return true;
|
209
|
-
}
|
210
|
-
return false;
|
211
|
-
}
|
212
|
-
isTabPageSelected(controlId, layer) {
|
213
|
-
let val = this.task.getProperty(controlId, HtmlProperties.SelectedValue);
|
214
|
-
return val == (layer - 1);
|
215
|
-
}
|
216
|
-
isTabPageLayerSelected(controlId, layer) {
|
217
|
-
let val = this.task.getProperty(controlId, HtmlProperties.SelectedLayer);
|
218
|
-
return val == (layer - 1);
|
219
|
-
}
|
220
|
-
getTabSelectedIndex(controlId) {
|
221
|
-
let val = this.task.getProperty(controlId, HtmlProperties.SelectedValue);
|
222
|
-
return val;
|
223
|
-
}
|
224
|
-
ifRowCreated(row) {
|
225
|
-
if (row == null)
|
226
|
-
return false;
|
227
|
-
let rowId = typeof row == "number" ? row.toString() : row.rowId;
|
228
|
-
let result = this.getFormGroupByRow(rowId);
|
229
|
-
return !isNullOrUndefined(result);
|
230
|
-
}
|
231
|
-
getFormGroupByRow(id) {
|
232
|
-
return this.task.formGroups[id];
|
233
|
-
}
|
234
|
-
isRowSelected(controlId, rowId) {
|
235
|
-
const selectedRow = this.task.getProperty(controlId, HtmlProperties.SelectedRow, "0");
|
236
|
-
return selectedRow == rowId;
|
237
|
-
}
|
238
|
-
isRowInRowEditing(row) {
|
239
|
-
let guiRowId = '0';
|
240
|
-
guiRowId = typeof row == "number" ? row.toString() : row.rowId;
|
241
|
-
return this.task.isRowInRowEditing(guiRowId);
|
242
|
-
}
|
243
|
-
isCurrentInRowEditing() {
|
244
|
-
let row = this.task.tableService.getSelectedRow();
|
245
|
-
return this.task.isRowInRowEditing(row);
|
246
|
-
}
|
247
|
-
guiTopIndex() {
|
248
|
-
return this.task.tableService.getTableTopIndex();
|
249
|
-
}
|
250
|
-
getErrMsg(id, rowId) {
|
251
|
-
let c = this.task.getFormControl(rowId, id);
|
252
|
-
if (c.hasError('required'))
|
253
|
-
return 'Control must be updated.';
|
254
|
-
if (c.hasError('pattern')) {
|
255
|
-
if (c.errors.pattern.actualValue < 0 && !c.errors.pattern.requiredPattern.includes('-'))
|
256
|
-
return 'Value must be non-negative';
|
257
|
-
if (c.errors.pattern.requiredPattern.includes('.')) {
|
258
|
-
const numericFormat = Math.abs(c.errors.pattern.actualValue).toString().split('.')[0];
|
259
|
-
const decimalFormat = Math.abs(c.errors.pattern.actualValue).toString().split('.')[1];
|
260
|
-
const actualNumericLimit = c.errors.pattern.requiredPattern.match(/,(\d+)/)[1];
|
261
|
-
const actualDecimalLimit = c.errors.pattern.requiredPattern.match(/(?:[^,]+,){2}(\d+)/)[1];
|
262
|
-
if (numericFormat.length > actualNumericLimit || decimalFormat.length > actualDecimalLimit) {
|
263
|
-
return "Numeric format is limited to " + actualNumericLimit + "." + actualDecimalLimit + " digits";
|
264
|
-
}
|
265
|
-
}
|
266
|
-
else if (!c.errors.pattern.requiredPattern.includes('.') && !Number.isInteger(c.errors.pattern.actualValue)) {
|
267
|
-
const actualNumericLimit = c.errors.pattern.requiredPattern.match(/,(\d+)/)[1];
|
268
|
-
return "Numeric format is limited to " + actualNumericLimit + "." + 0 + " digits";
|
269
|
-
}
|
270
|
-
else {
|
271
|
-
const numericFormat = Math.abs(c.errors.pattern.actualValue).toString();
|
272
|
-
const actualNumericLimit = c.errors.pattern.requiredPattern.match(/,(\d+)/)[1];
|
273
|
-
if (numericFormat.length > actualNumericLimit) {
|
274
|
-
return "Numeric format is limited to " + actualNumericLimit + "." + 0 + " digits";
|
275
|
-
}
|
276
|
-
}
|
277
|
-
}
|
278
|
-
if (c.hasError('rangevalidator'))
|
279
|
-
return c.errors.rangevalidator.errorMsg;
|
280
|
-
if (c.hasError('maxlength'))
|
281
|
-
return 'Max length allowed is : ' + c.errors.maxlength.requiredLength;
|
282
|
-
if (c.hasError('max'))
|
283
|
-
return 'Max value allowed is : ' + c.errors.max.max;
|
284
|
-
let controlMetadata = this.task.Records.list[rowId].getControlMetadata(id);
|
285
|
-
for (let key of controlMetadata.customValidators.keys()) {
|
286
|
-
if (c.hasError(key)) {
|
287
|
-
let customValidator = controlMetadata.customValidators.get(key);
|
288
|
-
return customValidator.getErrMessage();
|
289
|
-
}
|
290
|
-
}
|
291
|
-
return 'unknown error';
|
292
|
-
}
|
293
|
-
setValueToControl(controlName, value, refreshDisplay) {
|
294
|
-
if (typeof refreshDisplay === "undefined")
|
295
|
-
refreshDisplay = true;
|
296
|
-
let guiEvent = getGuiEventObj("setexternalvalue", controlName, 0);
|
297
|
-
guiEvent.externalValue = value;
|
298
|
-
guiEvent.param = refreshDisplay;
|
299
|
-
this.task.insertEvent(guiEvent);
|
300
|
-
}
|
301
|
-
isDataviewEmpty() {
|
302
|
-
return this.task.Records.isEmptyDataView;
|
303
|
-
}
|
304
|
-
simulateClick(controlName, rowId) {
|
305
|
-
if (typeof rowId === "undefined")
|
306
|
-
rowId = 0;
|
307
|
-
this.task.insertEvent(getGuiEventObj('click', controlName, rowId));
|
308
|
-
}
|
309
|
-
isLoggedIn() {
|
310
|
-
return this.task.getIsLoggenIn();
|
311
|
-
}
|
312
|
-
GetFormRecords() {
|
313
|
-
let rowId = 0;
|
314
|
-
let recArray;
|
315
|
-
if (!isNullOrUndefined(this.task.Records) && this.task.Records.list.length > 0) {
|
316
|
-
let recList = this.task.Records.list;
|
317
|
-
let tableControls = new Array();
|
318
|
-
for (const key in this.task.template) {
|
319
|
-
if (this.task.template[key] == '1')
|
320
|
-
tableControls.push(key);
|
321
|
-
}
|
322
|
-
recArray = new Array();
|
323
|
-
if (tableControls.length > 0) {
|
324
|
-
recList.forEach((ctrlMetaData) => {
|
325
|
-
if (this.task.Records.isRowCreated(rowId)) {
|
326
|
-
var formRecord = {};
|
327
|
-
formRecord['rowId'] = rowId;
|
328
|
-
tableControls.forEach((ctrlId) => {
|
329
|
-
formRecord[ctrlId] = ctrlMetaData.values[ctrlId];
|
330
|
-
});
|
331
|
-
recArray.push(formRecord);
|
332
|
-
}
|
333
|
-
});
|
334
|
-
}
|
335
|
-
}
|
336
|
-
return recArray;
|
337
|
-
}
|
338
|
-
SetCookie(name, value, expires, path, domain, secure, sameSite) {
|
339
|
-
CookieService.setCookie(name, value, expires, path, domain, secure, sameSite);
|
340
|
-
}
|
341
|
-
GetCookie(name) {
|
342
|
-
return CookieService.getCookie(name);
|
343
|
-
}
|
344
|
-
DeleteCookie(name) {
|
345
|
-
return CookieService.deleteCookie(name);
|
346
|
-
}
|
347
|
-
getColor(colorNumber, colorType) {
|
348
|
-
return this.magicColor.getColor(colorNumber, colorType);
|
349
|
-
}
|
350
|
-
}
|
351
|
-
AccessorMagicService.ɵfac = function AccessorMagicService_Factory(t) { return new (t || AccessorMagicService)(i0.ɵɵinject(i1.TaskMagicService), i0.ɵɵinject(i2.MagicColorService)); };
|
352
|
-
AccessorMagicService.ɵprov = i0.ɵɵdefineInjectable({ token: AccessorMagicService, factory: AccessorMagicService.ɵfac });
|
353
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AccessorMagicService, [{
|
354
|
-
type: Injectable
|
355
|
-
}], function () { return [{ type: i1.TaskMagicService }, { type: i2.MagicColorService }]; }, null); })();
|
356
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzb3IubWFnaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3NlcnZpY2VzL2FjY2Vzc29yLm1hZ2ljLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RCxPQUFPLEVBQW1CLGNBQWMsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFHLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXhFLE9BQU8sRUFBRSxjQUFjLEVBQWEsYUFBYSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7QUFLM0QsTUFBTSxPQUFPLG9CQUFvQjtJQVMvQixZQUFzQixJQUFzQixFQUFZLFVBQTZCO1FBQS9ELFNBQUksR0FBSixJQUFJLENBQWtCO1FBQVksZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFSckYsV0FBTSxHQUFRLElBQUksQ0FBQztRQUVILFNBQUksR0FBbUIsMkJBQTJCLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUNwRSxXQUFNLEdBQW1CLDJCQUEyQixDQUFDLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7UUFNdkYsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2hDLENB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QUM7SUFLTSxRQUFRLENBQUMsV0FBbUIsRUFBRSxTQUFTO1FBQzVDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUM7O3dGQTlxQlUsb0JBQW9COzREQUFwQixvQkFBb0IsV0FBcEIsb0JBQW9CO3VGQUFwQixvQkFBb0I7Y0FEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGFza01hZ2ljU2VydmljZSB9IGZyb20gJy4vdGFzay5tYWdpY3Muc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnRyb2xNZXRhZGF0YSwgQ29udHJvbHNNZXRhZGF0YSB9IGZyb20gJy4uL2NvbnRyb2xzLm1ldGFkYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgQ3VzdG9tVmFsaWRhdG9yLCBHdWlFbnZpcm9ubWVudCwgSHRtbFByb3BlcnRpZXMsIFBJQyB9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHsgaXNOdWxsT3JVbmRlZmluZWQgLCBTdHJpbmdCdWlsZGVyfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZ2V0R3VpRXZlbnRPYmosIElHdWlFdmVudCwgQ29va2llU2VydmljZX0gZnJvbSAnQG1hZ2ljLXhwYS9lbmdpbmUnO1xyXG5pbXBvcnQgeyBMb2dnZXIsIFBJQ0ludGVyZmFjZSwgU3RvcmFnZUF0dHJpYnV0ZSB9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBNYWdpY0NvbG9yU2VydmljZSB9IGZyb20gJy4vbWFnaWMtY29sb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hc2tpdG9PcHRpb25zIH0gZnJvbSBcIkBtYXNraXRvL2NvcmVcIjtcclxuaW1wb3J0IHsgbWFza2l0b1RpbWVPcHRpb25zR2VuZXJhdG9yIH0gZnJvbSBcIkBtYXNraXRvL2tpdFwiO1xyXG4vKipcclxuICogUHJvdmlkZXMgdGhlIFVJIHdpdGggdmFsdWVzIGNhbGN1bGF0ZWQgYnkgdGhlIE1hZ2ljIFdlYkNsaWVudFxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQWNjZXNzb3JNYWdpY1NlcnZpY2Uge1xyXG4gIExvZ2dlcjogYW55ID0gbnVsbDtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5IGhobW06IE1hc2tpdG9PcHRpb25zID0gbWFza2l0b1RpbWVPcHRpb25zR2VuZXJhdG9yKHttb2RlOiAnSEg6TU0nfSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGhobW1zczogTWFza2l0b09wdGlvbnMgPSBtYXNraXRvVGltZU9wdGlvbnNHZW5lcmF0b3Ioe21vZGU6ICdISDpNTTpTUyd9KTtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB0YXNrOiBUYXNrTWFnaWNTZXJ2aWNlLHByb3RlY3RlZCAgbWFnaWNDb2xvcjogTWFnaWNDb2xvclNlcnZpY2UpIHtcclxuICAgIHRoaXMuTG9nZ2VyID0gTG9nZ2VyLkluc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIHRoZSBjb250cm9sIGlzIHJlYWQtb25seVxyXG4gICAqIEBwYXJhbSBjb250cm9sSWQgSWQgb2YgY29udHJvbFxyXG4gICAqIEByZXR1cm5zIElzIHRoZSBjb250cm9sIG5vdCByZWFkLW9ubHlcclxuICAgKi9cclxuICAvLyBDaGVja1JlYWRPbmx5XHJcbiAgY2hlY2tJc1JlYWRPbmx5KGNvbnRyb2xJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcHJvcGVydGllczogQ29udHJvbE1ldGFkYXRhO1xyXG4gICAgcHJvcGVydGllcyA9IHRoaXMudGFzay5SZWNvcmRzLmxpc3RbMF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcbiAgICBpZiAocHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldChIdG1sUHJvcGVydGllcy5SZWFkT25seSkgIT09IG51bGwgJiYgcHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldChIdG1sUHJvcGVydGllcy5SZWFkT25seSkgPT09IHRydWUpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IG9mIHRoZSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHJvd0lkIElkIG9mIHJvdywgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zIFRoZSB0ZXh0IG9mIHRoZSBjb250cm9sXHJcbiAgICovXHJcbiAgLy8gbWdHZXRUZXh0XHJcbiAgZ2V0VGV4dChjb250cm9sSWQ6IHN0cmluZywgcm93SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGFzay5nZXRQcm9wZXJ0eShjb250cm9sSWQsIEh0bWxQcm9wZXJ0aWVzLlRleHQsIHJvd0lkKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdGV4dCBvZiB0aGUgdGFiIHBhZ2VcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gbGF5ZXIgSWQgb2YgdGFicGFnZVxyXG4gICAqIEByZXR1cm5zIFRleHQgb2YgdGFicGFnZVxyXG4gICAqL1xyXG4gIC8vIG1nR2V0VGFicGFnZVRleHRcclxuICBnZXRUYWJwYWdlVGV4dChjb250cm9sSWQ6IHN0cmluZywgbGF5ZXI6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFzay5nZXRQcm9wZXJ0eShjb250cm9sSWQsIEh0bWxQcm9wZXJ0aWVzLkl0ZW1zTGlzdCk7XHJcbiAgICBpZiAodHlwZW9mIGl0ZW1zICE9PSBcInVuZGVmaW5lZFwiKVxyXG4gICAgICByZXR1cm4gaXRlbXNbbGF5ZXJdLmRpc3BsYXlWYWx1ZTtcclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgaW1hZ2UgZGVmaW5lZCBmb3IgdGhlIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gcm93SWQgSWQgb2Ygcm93LCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHJldHVybnMgSW1hZ2Ugc2V0IG9uIGNvbnRyb2xcclxuICAgKi9cclxuICAvLyBtZ0dldEltYWdlXHJcbiAgZ2V0SW1hZ2UoY29udHJvbElkOiBzdHJpbmcsIHJvd0lkPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCByZXN1bHQgPSB0aGlzLnRhc2suZ2V0UHJvcGVydHkoY29udHJvbElkLCBIdG1sUHJvcGVydGllcy5JbWFnZSwgcm93SWQpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHdoZXRoZXIgYW4gaW1hZ2UgaXMgc2V0IGZvciB0aGlzIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gcm93SWQgSWQgb2Ygcm93LCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHJldHVybnMgcmV0dXJucyB0cnVlIGlmIGNvbnRyb2wgaGFzIGFuIGltYWdlIHNldCBvbiBpdFxyXG4gICAqL1xyXG4gIC8vIG1nSXNJbWFnZUV4aXN0c1xyXG4gIGlzSW1hZ2VFeGlzdHMoY29udHJvbElkOiBzdHJpbmcsIHJvd0lkPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy50YXNrLmdldFByb3BlcnR5KGNvbnRyb2xJZCwgSHRtbFByb3BlcnRpZXMuSW1hZ2UsIHJvd0lkKTtcclxuICAgIHJldHVybiAhaXNOdWxsT3JVbmRlZmluZWQocmVzdWx0KTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBDU1MgY2xhc3NlcyBzZXQgb24gdGhlIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gcm93SWQgSWQgb2Ygcm93LCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHJldHVybnMgVGhlIGNsYXNzZXMgZm9yIHRoaXMgY29udHJvbFxyXG4gICAqL1xyXG4gIC8vIG1nR2V0Q2xhc3Nlc1xyXG4gIGdldENsYXNzZXMoY29udHJvbElkOiBzdHJpbmcsIHJvd0lkPzogc3RyaW5nKSA6c3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRhc2suZ2V0Q2xhc3Nlcyhjb250cm9sSWQsIHJvd0lkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIENTUyBzdHlsZXMgc2V0IG9uIHRoZSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHN0eWxlTmFtZSBOQW1lIG9mIHN0eWxlIHJlcXVlc3RlZFxyXG4gICAqIEBwYXJhbSByb3dJZCBJZCBvZiByb3csIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcmV0dXJucyBUaGUgc3R5bGUgc2V0IG9uIHRoZSBjb250cm9sXHJcbiAgICovXHJcbiAgLy8gbWdHZXRTdHlsZVxyXG4gIGdldFN0eWxlKGNvbnRyb2xJZDogc3RyaW5nLCBzdHlsZU5hbWU6IHN0cmluZywgcm93SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHN0eWxlID0gdGhpcy50YXNrLmdldFN0eWxlKGNvbnRyb2xJZCwgc3R5bGVOYW1lLCByb3dJZClcclxuICAgIHJldHVybiBzdHlsZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgd2hldGhlciBhIGNvbnRyb2wgaXMgdmlzaWJsZSBvciBub3RcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gcm93SWQgSWQgb2Ygcm93LCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHJldHVybnMgSXMgdGhlIGNvbnRyb2wgdmlzaWJsZSBvciBoaWRkZW5cclxuICAgKi9cclxuICAvLyBtZ0dldFZpc2libGVcclxuICBnZXRWaXNpYmxlKGNvbnRyb2xJZDogc3RyaW5nLCByb3dJZD86IHN0cmluZykgOiBzdHJpbmcge1xyXG4gICAgbGV0IHZpczogQm9vbGVhbiA9IHRoaXMuZ2V0UHJvcGVydHkoY29udHJvbElkLCBIdG1sUHJvcGVydGllcy5WaXNpYmxlLCByb3dJZCk7XHJcbiAgICByZXR1cm4gdmlzID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGFscGhhIG1hc2sgb2YgYSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHJvd0lkIElkIG9mIHJvdywgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zIGFscGhhIG1hc2sgb2YgdGhlIGNvbnRyb2xcclxuICAgKi9cclxuICAvLyBnZXRBbHBoYU1hc2tcclxuICBnZXRBbHBoYU1hc2soY29udHJvbElkOiBzdHJpbmcsIHJvd0lkPzogc3RyaW5nKTpzdHJpbmd7XHJcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udHJvbElkKSlcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcGljOiBQSUMgPSB0aGlzLnRhc2suR2V0Q29udHJvbFBpY3R1cmVNYXNrKGNvbnRyb2xJZCk7XHJcbiAgICBsZXQgbWFzazogc3RyaW5nID0gcGljLmdldE1hc2soKTtcclxuICAgIGxldCB2YWx1ZVN0cjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IG1hc2subGVuZ3RoOyBpKyspIHtcclxuICAgICAgc3dpdGNoIChtYXNrLmNoYXJDb2RlQXQoaSkpIHtcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTjpcclxuICAgICAgICAgIHZhbHVlU3RyLkFwcGVuZChcIjBcIik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVTpcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTDpcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWDpcclxuICAgICAgICAgIHZhbHVlU3RyLkFwcGVuZChcIkFcIik7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHZhbHVlU3RyLkFwcGVuZChtYXNrLmNoYXJBdChpKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAgKHBpYyAhPSBudWxsKSA/IHZhbHVlU3RyLnRvU3RyaW5nKCkgOiBudWxsO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIG9iamVjdCByZXByZXNlbnRpbmcgbnVtZXJpYyBwaWN0dXJlXHJcbiAgICogQHBhcmFtIHBpY3R1cmUgc3RyaW5nIHdoaWNoIGlzIGRlZmluZWQgaW4gbWFnaWNcclxuICAgKiBAcmV0dXJucyBvYmplY3QgcmVwcmVzZW50aW5nIG51bWVyaWMgcGljdHVyZVxyXG4gICAqL1xyXG4gIC8vIG1nR2V0TnVtZXJpY1BpY3R1cmVcclxuICBnZXROdW1lcmljUGljdHVyZShwaWN0dXJlOiBzdHJpbmcpIDogYW55IHtcclxuICAgdmFyIG9iaiA9IHt9O1xyXG4gICBpZiAoaXNOdWxsT3JVbmRlZmluZWQocGljdHVyZSkpXHJcbiAgICAgIHJldHVybiBvYmo7XHJcblxyXG4gICBsZXQgcGljOiBQSUMgPSBuZXcgUElDKHBpY3R1cmUsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQywgMCk7XHJcblxyXG5cclxuXHJcbiAgIG9ialsncHJlZml4J10gPSBcIlwiXHJcbiAgIGlmIChwaWMuZ2V0UG9zUHJlZl8oKS5sZW5ndGggPiAwICYmIHBpYy5nZXROZWdQcmVmXygpLmxlbmd0aCA+IDApIHtcclxuICAgICBsZXQgcHJlZiA9ICctJytwaWMuZ2V0UG9zUHJlZl8oKTtcclxuICAgICBpZiAocHJlZiA9PSBwaWMuZ2V0TmVnUHJlZl8oKSlcclxuICAgICAgb2JqWydwcmVmaXgnXSA9IHBpYy5nZXRQb3NQcmVmXygpO1xyXG4gICB9XHJcbiAgIGlmKHBpYy5nZXRQb3NTdWZmXygpLmxlbmd0aCA+IDApXHJcbiAgICAgb2JqWydzdWZmaXgnXSA9IHBpYy5nZXRQb3NTdWZmXygpO1xyXG4gICBlbHNlXHJcbiAgICAgb2JqWydzdWZmaXgnXSA9IFwiXCI7XHJcblxyXG4gICBpZihwaWMuaXNOZWdhdGl2ZSgpKVxyXG4gICAgIG9ialsnYWxsb3dOZWdhdGl2ZSddID0gdHJ1ZTtcclxuICAgZWxzZVxyXG4gICAgIG9ialsnYWxsb3dOZWdhdGl2ZSddID0gZmFsc2U7XHJcbiAgIGlmKHBpYy5nZXREZWMoKT49IDApXHJcbiAgICAgIG9ialsncHJlY2lzaW9uJ10gPSBwaWMuZ2V0RGVjKCk7XHJcblxyXG4gICBpZihwaWMuaXNMZWZ0KCkpXHJcbiAgICAgIG9ialsnYWxpZ24nXT1cImxlZnRcIjtcclxuXHJcbiAgIG9ialsnZGVjaW1hbCddID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGVjaW1hbCgpO1xyXG4gICBpZihwaWMud2l0aENvbWEoKSlcclxuICAgICAgb2JqWyd0aG91c2FuZHMnXT1HdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaG91c2FuZHMoKTtcclxuICAgZWxzZVxyXG4gICAgIG9ialsndGhvdXNhbmRzJ109XCJcIjtcclxuXHJcbiAgICBpZihwaWMuZ2V0V2hvbGVzKCkpXHJcbiAgICAgIG9ialsnd2hvbGVzJ109cGljLmdldFdob2xlcygpO1xyXG5cclxuICAgIHJldHVybiAgIG9iajtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgd2hldGhlciBhIGNvbnRyb2wgc2hvdWxkIGhhdmUgdGhlIFwicmVxdWlyZWRcIiBhdHRyaWJ1dGUgc2V0IG9uIGl0XHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHJvd0lkIElkIG9mIHJvdywgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgLy8gbWdHZXRNdXN0SW5wdXRcclxuICBnZXRNdXN0SW5wdXQoY29udHJvbElkOiBzdHJpbmcsIHJvd0lkPzogc3RyaW5nKSA6IHN0cmluZyB7XHJcbiAgICBsZXQgdmlzOiBCb29sZWFuID0gdGhpcy5nZXRQcm9wZXJ0eShjb250cm9sSWQsIEh0bWxQcm9wZXJ0aWVzLk11c3RJbnB1dCwgcm93SWQpO1xyXG4gICAgcmV0dXJuIHZpcyA/ICd0cnVlJyA6ICdmYWxzZSc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHdoZXRoZXIgYSBjb250cm9sIGlzIGRpc2FibGVkXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHJvd0lkIElkIG9mIHJvdywgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgLy8gbWdJc0Rpc2FibGVkXHJcbiAgaXNEaXNhYmxlZChjb250cm9sSWQ6IHN0cmluZywgcm93SWQ/OiBzdHJpbmcpOiBhbnl7XHJcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5nZXRQcm9wZXJ0eShjb250cm9sSWQsIEh0bWxQcm9wZXJ0aWVzLkVuYWJsZWQsIHJvd0lkKTtcclxuICAgIHJldHVybiByZXN1bHQgPT09IHRydWUgPyBudWxsIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvLyBnZXRQcm9wZXJ0eSAobm90IGNoYW5nZWQpXHJcbiAgZ2V0UHJvcGVydHkoY29udHJvbElkOiBzdHJpbmcsIHByb3A6IEh0bWxQcm9wZXJ0aWVzLCByb3dJZD86IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMudGFzay5nZXRQcm9wZXJ0eShjb250cm9sSWQsIHByb3AsIHJvd0lkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHRpdGxlICh0b29sdGlwKSB0ZXh0IG9mIHRoZSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHJvd0lkIElkIG9mIHJvdywgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgLy8gbWdHZXRUaXRsZVxyXG4gIGdldFRpdGxlKGNvbnRyb2xJZDogc3RyaW5nLCByb3dJZD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50YXNrLmdldFByb3BlcnR5KGNvbnRyb2xJZCwgSHRtbFByb3BlcnRpZXMuVG9vbHRpcCwgcm93SWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdGl0bGUgKHRvb2x0aXApIHRleHQgb2YgdGhlIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gcm93SWQgSWQgb2Ygcm93LCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICAvLyBtZ0dldFRpdGxlIGZvciB6b29tIGJ1dHRvblxyXG4gIGdldFpvb21CdXR0b25UaXRsZShjb250cm9sSWQ6IHN0cmluZywgcm93SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGFzay5nZXRQcm9wZXJ0eShjb250cm9sSWQsIEh0bWxQcm9wZXJ0aWVzLlpvb21CdXR0b25Ub29sdGlwLCByb3dJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBzZWxlY3Rpb24gY29udHJvbCdzIHNlbGVjdGVkIHZhbHVlXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHJvd0lkIElkIG9mIHJvdywgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgLy8gZ2V0U2VsZWN0ZWRWYWx1ZVxyXG4gIGdldFNlbGVjdGVkVmFsdWUoY29udHJvbElkOiBzdHJpbmcsIHJvd0lkPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRhc2suZ2V0UHJvcGVydHkoY29udHJvbElkLCBIdG1sUHJvcGVydGllcy5TZWxlY3RlZFZhbHVlLCByb3dJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBwbGFjZS1ob2xkZXIgdGV4dCBvZiB0aGUgY29udHJvbFxyXG4gICAqIEBwYXJhbSBjb250cm9sSWQgSWQgb2YgY29udHJvbFxyXG4gICAqIEBwYXJhbSByb3dJZCBJZCBvZiByb3csIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIC8vIG1nR2V0UGxhY2Vob2xkZXJcclxuICBnZXRQbGFjZWhvbGRlcihjb250cm9sSWQ6IHN0cmluZywgcm93SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGFzay5nZXRQcm9wZXJ0eShjb250cm9sSWQsIEh0bWxQcm9wZXJ0aWVzLlBsYWNlSG9sZGVyLCByb3dJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgdHlwZSBmb3IgaW5wdXQgY29udHJvbHMgLSBzaG91bGQgdGhlIGNvbnRyb2wgYmUgYSBzaW1wbGUgdGV4dCBvciBhIHBhc3N3b3JkIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gcm93SWQgSWQgb2Ygcm93LCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICAvLyBtZ0dldFR5cGVcclxuICBnZXRUeXBlKGNvbnRyb2xJZDogc3RyaW5nLCByb3dJZD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy50YXNrLmdldFByb3BlcnR5KGNvbnRyb2xJZCwgSHRtbFByb3BlcnRpZXMuUGFzc3dvcmQsIHJvd0lkKTtcclxuICAgIHJldHVybiByZXN1bHQgPyBcInBhc3N3b3JkXCIgOiBcInRleHRcIlxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdGFiLWluZGV4IG9mIHRoZSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHJvd0lkIElkIG9mIHJvdywgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgLy8gbWdHZXRUYWJJbmRleFxyXG4gIGdldFRhYkluZGV4KGNvbnRyb2xJZDogc3RyaW5nLCByb3dJZD86IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50YXNrLmdldFByb3BlcnR5KGNvbnRyb2xJZCwgSHRtbFByb3BlcnRpZXMuVGFiSW5kZXgsIHJvd0lkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHJvd0lkIElkIG9mIHJvdywgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgLy8vIG1nR2V0VmFsdWUgLS0+XHJcbiAgZ2V0VmFsdWUoY29udHJvbElkOiBzdHJpbmcsIHJvd0lkPzogc3RyaW5nKTogYW55IHtcclxuICAgIGxldCB2YWwgPSB0aGlzLnRhc2suZ2V0VmFsdWUoY29udHJvbElkLCByb3dJZCk7XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZm9ybWF0dGVkIHZhbHVlIG9mIHRoZSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHJvd0lkIElkIG9mIHJvdywgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgLy8vIG1nR2V0VmFsdWUgLS0+XHJcbiAgZ2V0Rm9ybWF0dGVkVmFsdWUoY29udHJvbElkOiBzdHJpbmcsIHJvd0lkPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCB2YWwgPSB0aGlzLnRhc2suZ2V0VmFsdWUoY29udHJvbElkLCByb3dJZCk7XHJcbiAgICB2YWwgPSB0aGlzLnRhc2suZ2V0Rm9ybWF0dGVkVmFsdWUoY29udHJvbElkLCB2YWwsIHJvd0lkKTtcclxuICAgIHJldHVybiB2YWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBQaWN0dXJlIG9mIHRoZSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHJvd0lkIElkIG9mIHJvdywgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgLy8vIGdldFBpY3R1cmUgLS0+XHJcbiAgZ2V0UGljdHVyZShjb250cm9sSWQ6IHN0cmluZywgcm93SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cclxuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChjb250cm9sSWQpKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIGxldCBwaWM6IFBJQyA9IHRoaXMudGFzay5HZXRDb250cm9sUGljdHVyZU1hc2soY29udHJvbElkKTtcclxuICAgIHJldHVybiAgKHBpYyAhPSBudWxsKSA/IHBpYy5nZXRGb3JtYXQoKS50b1N0cmluZygpIDogbnVsbDtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBjdXN0b20gKHVzZXIpIHByb3BlcnRpZXMgb2YgdGhlIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIE5hbWUgb2YgcmVxdWVzdGVkIHByb3BlcnR5XHJcbiAgICogQHBhcmFtIHJvd0lkIElkIG9mIHJvdywgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgLy8gbWdHZXRDdXN0b21Qcm9wZXJ0eVxyXG4gIGdldEN1c3RvbVByb3BlcnR5KGNvbnRyb2xJZDogc3RyaW5nLCBwcm9wZXJ0eU5hbWVPclJvd0lEPzogc3RyaW5nLCByb3dJZD86IHN0cmluZykgOiBhbnlcclxuICB7XHJcbiAgICBpZihjb250cm9sSWQuaW5kZXhPZignficpPT0gLTEpXHJcbiAgICByZXR1cm4gdGhpcy5nZXRDdXN0b21Qcm9wZXJ0eV8xKGNvbnRyb2xJZCwgcHJvcGVydHlOYW1lT3JSb3dJRCwgcm93SWQpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCAgY2lkOiBzdHJpbmcgPSBjb250cm9sSWQuc3BsaXQoJ34nKVswXTtcclxuICAgICAgbGV0ICBwcm9wTmFtZTogc3RyaW5nID0gY29udHJvbElkLnNwbGl0KCd+JylbMV07XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5nZXRDdXN0b21Qcm9wZXJ0eV8xKGNpZCwgcHJvcE5hbWUsIHByb3BlcnR5TmFtZU9yUm93SUQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q3VzdG9tUHJvcGVydHlfMShjb250cm9sSWQ6IHN0cmluZywgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHJvd0lkPzogc3RyaW5nKVxyXG4gIHtcclxuICAgIGxldCB1c2VyUHJvcGVydGllcztcclxuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChyb3dJZCkpXHJcbiAgICAgIHJvd0lkID0gJzAnO1xyXG4gICAgbGV0IHJlYyA9IHRoaXMudGFzay5SZWNvcmRzLmxpc3Rbcm93SWRdO1xyXG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHJlYykpXHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2xNZXRhZGF0YSA9IHJlYy5nZXRDb250cm9sTWV0YWRhdGEoY29udHJvbElkKTtcclxuXHJcbiAgICAgIGlmIChjb250cm9sTWV0YWRhdGEudXNlclByb3BlcnRpZXMuaGFzKHByb3BlcnR5TmFtZSkpIHtcclxuICAgICAgICB1c2VyUHJvcGVydGllcyA9IGNvbnRyb2xNZXRhZGF0YS51c2VyUHJvcGVydGllcy5nZXQocHJvcGVydHlOYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVzZXJQcm9wZXJ0aWVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBpdGVtcyBvZiBhIHNlbGVjdGlvbiBjb250cm9sXHJcbiAgICogQHBhcmFtIGlkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gcm93SWQgSWQgb2Ygcm93LCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICAvLyBtZ0dldEl0ZW1MaXN0VmFsdWVzXHJcbiAgZ2V0SXRlbUxpc3RWYWx1ZXMoaWQ6IHN0cmluZywgcm93SWQ/OiBzdHJpbmcpIDogQXJyYXk8e2luZGV4OiBudW1iZXIsIGRpc3BsYXlWYWx1ZTogc3RyaW5nfT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoaWQsIEh0bWxQcm9wZXJ0aWVzLkl0ZW1zTGlzdCwgcm93SWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZmlsdGVyZWQgaXRlbXMgbGlzdCBiYXNlZCBvbiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgY29udHJvbFxyXG4gICAqIEBwYXJhbSBjb250cm9sSWQgSWQgb2YgY29udHJvbFxyXG4gICAqIEBwYXJhbSByb3dJZCBJZCBvZiByb3csIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGdldEZpbHRlcmVkTGlzdChjb250cm9sSWQ6IHN0cmluZywgcm93SWQ/OiBzdHJpbmcpOiBBcnJheTx7aW5kZXg6IG51bWJlciwgZGlzcGxheVZhbHVlOiBzdHJpbmd9PiB7XHJcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQocm93SWQpKVxyXG4gICAgICByb3dJZCA9ICcwJztcclxuXHJcbiAgICBsZXQgaXRlbXMgPSB0aGlzLmdldEl0ZW1MaXN0VmFsdWVzKGNvbnRyb2xJZCwgcm93SWQpO1xyXG4gICAgbGV0IHZhbHVlOiBzdHJpbmcgPSB0aGlzLnRhc2suZ2V0Rm9ybUNvbnRyb2wocm93SWQsIGNvbnRyb2xJZCkudmFsdWU7XHJcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IFwiXCIgJiYgaXRlbXMgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHJldHVybiBpdGVtcy5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi5kaXNwbGF5VmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gaXRlbXM7XHJcbiAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIEdldHMgdGhlIGRpc3BsYXkgdmFsdWUgb2YgdGhlIGl0ZW0gZnJvbSBpdGVtcyBvZiBhIHNlbGVjdGlvbiBjb250cm9sXHJcbiAgICogQHBhcmFtIGlkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gcm93SWQgSWQgb2Ygcm93LCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBnZXREaXNwbGF5VmFsdWUoaWQsIHJvd0lkPykge1xyXG4gICAgbGV0IGRpc3BsYXlWYWx1ZTpzdHJpbmcgPVwiXCJcclxuXHJcbiAgICBsZXQgbyA9ICB0aGlzLmdldFByb3BlcnR5KGlkLCBIdG1sUHJvcGVydGllcy5JdGVtc0xpc3QsIHJvd0lkKTtcclxuICAgIGxldCB2YWx1ZSA9IHRoaXMudGFzay5nZXRWYWx1ZShpZCwgcm93SWQpXHJcbiAgICBpZiAodmFsdWUgPj0wICYmIHZhbHVlIDxvLmxlbmd0aCAgJiYgIWlzTnVsbE9yVW5kZWZpbmVkKG9bdmFsdWVdKSlcclxuICAgICAgZGlzcGxheVZhbHVlID0gb1t2YWx1ZV0uZGlzcGxheVZhbHVlO1xyXG4gICAgcmV0dXJuIGRpc3BsYXlWYWx1ZVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB3aGV0aGVyIGEgdGFiIHBhZ2UgaXMgc2VsZWN0ZWQgb3Igbm90XHJcbiAgICogQHBhcmFtICBpbmRleCBvZiBjdXJyZW50IG9wdGlvbiBpbiBpdGVyYXJvdHJcclxuICAgKiBAcGFyYW0gY29udHJvbCBJZCBvZiBsaXN0IGNvbnRyb2xcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqLyAvLyBpc09wdGlvblNlbGVjdGVkXHJcbiAgaXNPcHRpb25TZWxlY3RlZChpbmRleCwgY29udHJvbElkKSB7XHJcbiAgICBsZXQgdmFsID0gdGhpcy50YXNrLmdldFZhbHVlKGNvbnRyb2xJZCwgXCIwXCIpO1xyXG4gICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHZhbCkge1xyXG4gICAgICAgICAgIGlmIChpdGVtID09PSBpbmRleClcclxuICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB3aGV0aGVyIGEgdGFiIHBhZ2UgaXMgc2VsZWN0ZWQgb3Igbm90IC0gdXNlZCBmb3IgdGhlIHRhYiBidXR0b25zXHJcbiAgICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSAgbGF5ZXIgSWQgb2YgdGhlIHRhYiBwYWdlXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovIC8vIG1nSXNUYWJQYWdlU2VsZWN0ZWRcclxuICBpc1RhYlBhZ2VTZWxlY3RlZChjb250cm9sSWQ6IHN0cmluZywgbGF5ZXI6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbCA9IHRoaXMudGFzay5nZXRQcm9wZXJ0eShjb250cm9sSWQsIEh0bWxQcm9wZXJ0aWVzLlNlbGVjdGVkVmFsdWUpO1xyXG4gICAgcmV0dXJuIHZhbCA9PSAobGF5ZXIgLSAxKTsgLy8gY29tcGFyaW5nIHN0cmluZyB0byBudW1iZXIhXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHdoZXRoZXIgYSB0YWIgcGFnZSBsYXllciBpcyBzZWxlY3RlZCBvciBub3QgLSB1c2VkIGZvciB0aGUgZGl2IHdoaWNoIHJlcHJlc2VudHMgdGhlIHRhYiBwYWdlXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtICBsYXllciBJZCBvZiB0aGUgdGFiIHBhZ2VcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqLyAvLyBtZ0lzVGFiTGF5ZXJTZWxlY3RlZFxyXG4gIGlzVGFiUGFnZUxheWVyU2VsZWN0ZWQoY29udHJvbElkOiBzdHJpbmcsIGxheWVyOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCB2YWwgPSB0aGlzLnRhc2suZ2V0UHJvcGVydHkoY29udHJvbElkLCBIdG1sUHJvcGVydGllcy5TZWxlY3RlZExheWVyKTtcclxuICAgIHJldHVybiB2YWwgPT0gKGxheWVyIC0gMSk7IC8vIGNvbXBhcmluZyBzdHJpbmcgdG8gbnVtYmVyIVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHNlbGVjdGVkIHRhYiBwYWdlXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBnZXRUYWJTZWxlY3RlZEluZGV4KGNvbnRyb2xJZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgdmFsID0gdGhpcy50YXNrLmdldFByb3BlcnR5KGNvbnRyb2xJZCwgSHRtbFByb3BlcnRpZXMuU2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICByZXR1cm4gdmFsOyAvLyBjb21wYXJpbmcgc3RyaW5nIHRvIG51bWJlciFcclxuICB9XHJcblxyXG5cclxuICAvLyBwcml2YXRlIG1ldGhvZGVzXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vIG1nSWZSb3dDcmVhdGVkXHJcbiAgaWZSb3dDcmVhdGVkKHJvdyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHJvdyA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICBsZXQgcm93SWQgPSB0eXBlb2Ygcm93ID09IFwibnVtYmVyXCIgPyByb3cudG9TdHJpbmcoKSA6IHJvdy5yb3dJZDtcclxuICAgIGxldCByZXN1bHQgPSB0aGlzLmdldEZvcm1Hcm91cEJ5Um93KHJvd0lkKTtcclxuICAgIHJldHVybiAhaXNOdWxsT3JVbmRlZmluZWQocmVzdWx0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvLyBtZ0dldEZvcm1Hcm91cEJ5Um93XHJcbiAgZ2V0Rm9ybUdyb3VwQnlSb3coaWQ6IHN0cmluZyk6IEZvcm1Hcm91cCB7XHJcbiAgICByZXR1cm4gdGhpcy50YXNrLmZvcm1Hcm91cHNbaWRdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vIGlzUm93U2VsZWN0ZWQgKG5vdCBjaGFuZ2VkKVxyXG4gIGlzUm93U2VsZWN0ZWQoY29udHJvbElkLCByb3dJZD8pIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkUm93ID0gdGhpcy50YXNrLmdldFByb3BlcnR5KGNvbnRyb2xJZCwgSHRtbFByb3BlcnRpZXMuU2VsZWN0ZWRSb3csIFwiMFwiKTtcclxuICAgIHJldHVybiBzZWxlY3RlZFJvdyA9PSByb3dJZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgd2hldGhlciBhIHJvdyBpcyBpbiBlZGl0IHN0YXRlXHJcbiAgICogQHBhcmFtIHJvd1xyXG4gICAqL1xyXG4gIGlzUm93SW5Sb3dFZGl0aW5nKHJvdz86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGd1aVJvd0lkIDogc3RyaW5nID0gJzAnO1xyXG4gICAgZ3VpUm93SWQ9IHR5cGVvZiByb3cgPT0gXCJudW1iZXJcIiA/IHJvdy50b1N0cmluZygpIDogcm93LnJvd0lkO1xyXG4gICAgcmV0dXJuIHRoaXMudGFzay5pc1Jvd0luUm93RWRpdGluZyhndWlSb3dJZClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgd2hldGhlciBhIHJvdyBpcyBpbiBlZGl0IHN0YXRlLCB1c2UgdGhpcyBtZXRob2Qgd2hpbGUgY29udHJvbCBvdXRzaWRlIHRhYmxlIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gcm93XHJcbiAgICovXHJcbiAgaXNDdXJyZW50SW5Sb3dFZGl0aW5nKCk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGxldCByb3cgID0gdGhpcy50YXNrLnRhYmxlU2VydmljZS5nZXRTZWxlY3RlZFJvdygpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRhc2suaXNSb3dJblJvd0VkaXRpbmcocm93KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vIEdldEd1aVRvcEluZGV4XHJcbiAgZ3VpVG9wSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRhc2sudGFibGVTZXJ2aWNlLmdldFRhYmxlVG9wSW5kZXgoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBnZXRFcnJNc2coaWQ6IHN0cmluZyxyb3dJZDogc3RyaW5nKTogc3RyaW5nXHJcbiAge1xyXG4gICAgbGV0IGMgPSB0aGlzLnRhc2suZ2V0Rm9ybUNvbnRyb2wocm93SWQsIGlkKTtcclxuICAgIGlmIChjLmhhc0Vycm9yKCdyZXF1aXJlZCcpKVxyXG4gICAgICByZXR1cm4gJ0NvbnRyb2wgbXVzdCBiZSB1cGRhdGVkLic7XHJcbiAgICBpZiAoYy5oYXNFcnJvcigncGF0dGVybicpKXtcclxuICAgICAgLy9UbyBjaGVjayB3aGV0aGVyIHRoZSBudW1lcmljIGZpZWxkIGFsbG93ZWQgb25seSBwb3NpdGl2ZSB2YWx1ZXMgb3Igbm90LlxyXG4gICAgICBpZihjLmVycm9ycy5wYXR0ZXJuLmFjdHVhbFZhbHVlIDwgMCAmJiAhYy5lcnJvcnMucGF0dGVybi5yZXF1aXJlZFBhdHRlcm4uaW5jbHVkZXMoJy0nKSlcclxuICAgICAgICByZXR1cm4gJ1ZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlJztcclxuICAgICAgaWYoYy5lcnJvcnMucGF0dGVybi5yZXF1aXJlZFBhdHRlcm4uaW5jbHVkZXMoJy4nKSl7XHJcbiAgICAgICAgY29uc3QgbnVtZXJpY0Zvcm1hdCA9IE1hdGguYWJzKGMuZXJyb3JzLnBhdHRlcm4uYWN0dWFsVmFsdWUpLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXTtcclxuICAgICAgICBjb25zdCBkZWNpbWFsRm9ybWF0ID0gTWF0aC5hYnMoYy5lcnJvcnMucGF0dGVybi5hY3R1YWxWYWx1ZSkudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdO1xyXG4gICAgICAgIGNvbnN0IGFjdHVhbE51bWVyaWNMaW1pdCA9IGMuZXJyb3JzLnBhdHRlcm4ucmVxdWlyZWRQYXR0ZXJuLm1hdGNoKC8sKFxcZCspLylbMV07XHJcbiAgICAgICAgY29uc3QgYWN0dWFsRGVjaW1hbExpbWl0ID0gYy5lcnJvcnMucGF0dGVybi5yZXF1aXJlZFBhdHRlcm4ubWF0Y2goLyg/OlteLF0rLCl7Mn0oXFxkKykvKVsxXTtcclxuICAgICAgICBpZihudW1lcmljRm9ybWF0Lmxlbmd0aCA+IGFjdHVhbE51bWVyaWNMaW1pdCB8fCBkZWNpbWFsRm9ybWF0Lmxlbmd0aCA+IGFjdHVhbERlY2ltYWxMaW1pdCl7XHJcbiAgICAgICAgICByZXR1cm4gXCJOdW1lcmljIGZvcm1hdCBpcyBsaW1pdGVkIHRvIFwiICsgYWN0dWFsTnVtZXJpY0xpbWl0ICsgXCIuXCIrIGFjdHVhbERlY2ltYWxMaW1pdCArIFwiIGRpZ2l0c1wiXHJcbiAgICAgICAgfVxyXG4gICAgICB9ZWxzZSBpZighYy5lcnJvcnMucGF0dGVybi5yZXF1aXJlZFBhdHRlcm4uaW5jbHVkZXMoJy4nKSAmJiAhTnVtYmVyLmlzSW50ZWdlcihjLmVycm9ycy5wYXR0ZXJuLmFjdHVhbFZhbHVlKSl7XHJcbiAgICAgICAgY29uc3QgYWN0dWFsTnVtZXJpY0xpbWl0ID0gYy5lcnJvcnMucGF0dGVybi5yZXF1aXJlZFBhdHRlcm4ubWF0Y2goLywoXFxkKykvKVsxXTtcclxuICAgICAgICByZXR1cm4gXCJOdW1lcmljIGZvcm1hdCBpcyBsaW1pdGVkIHRvIFwiICsgYWN0dWFsTnVtZXJpY0xpbWl0ICsgXCIuXCIrIDAgKyBcIiBkaWdpdHNcIlxyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBjb25zdCBudW1lcmljRm9ybWF0ID0gTWF0aC5hYnMoYy5lcnJvcnMucGF0dGVybi5hY3R1YWxWYWx1ZSkudG9TdHJpbmcoKTtcclxuICAgICAgICBjb25zdCBhY3R1YWxOdW1lcmljTGltaXQgPSBjLmVycm9ycy5wYXR0ZXJuLnJlcXVpcmVkUGF0dGVybi5tYXRjaCgvLChcXGQrKS8pWzFdO1xyXG4gICAgICAgIGlmKG51bWVyaWNGb3JtYXQubGVuZ3RoID4gYWN0dWFsTnVtZXJpY0xpbWl0KXtcclxuICAgICAgICAgIHJldHVybiBcIk51bWVyaWMgZm9ybWF0IGlzIGxpbWl0ZWQgdG8gXCIgKyBhY3R1YWxOdW1lcmljTGltaXQgKyBcIi5cIisgMCArIFwiIGRpZ2l0c1wiXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYy5oYXNFcnJvcigncmFuZ2V2YWxpZGF0b3InKSlcclxuICAgICAgcmV0dXJuIGMuZXJyb3JzLnJhbmdldmFsaWRhdG9yLmVycm9yTXNnO1xyXG4gICAgaWYgKGMuaGFzRXJyb3IoJ21heGxlbmd0aCcpKVxyXG4gICAgICByZXR1cm4gJ01heCBsZW5ndGggYWxsb3dlZCBpcyA6ICcgKyBjLmVycm9ycy5tYXhsZW5ndGgucmVxdWlyZWRMZW5ndGg7XHJcbiAgICBpZiAoYy5oYXNFcnJvcignbWF4JykpXHJcbiAgICAgIHJldHVybiAnTWF4IHZhbHVlIGFsbG93ZWQgaXMgOiAnICsgYy5lcnJvcnMubWF4Lm1heDtcclxuXHJcbiAgICBsZXQgY29udHJvbE1ldGFkYXRhID0gdGhpcy50YXNrLlJlY29yZHMubGlzdFtyb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGlkKTtcclxuICAgIGZvciAobGV0IGtleSBvZiBjb250cm9sTWV0YWRhdGEuY3VzdG9tVmFsaWRhdG9ycy5rZXlzKCkpXHJcbiAgICB7XHJcbiAgICAgIGlmIChjLmhhc0Vycm9yKGtleSkpIHtcclxuICAgICAgICBsZXQgY3VzdG9tVmFsaWRhdG9yOiBDdXN0b21WYWxpZGF0b3IgID0gY29udHJvbE1ldGFkYXRhLmN1c3RvbVZhbGlkYXRvcnMuZ2V0KGtleSk7XHJcbiAgICAgICAgcmV0dXJuIGN1c3RvbVZhbGlkYXRvci5nZXRFcnJNZXNzYWdlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJ3Vua25vd24gZXJyb3InO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBhIHVzZXItc3VwcGxpZWQgdmFsdWUgdG8gdGhlIHNwZWNpZmllZCBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lXHJcbiAgICogQHBhcmFtIHZhbHVlXHJcbiAgICogQHBhcmFtIHJlZnJlc2hEaXNwbGF5XHJcbiAgICovXHJcbiAgc2V0VmFsdWVUb0NvbnRyb2woY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgcmVmcmVzaERpc3BsYXk/OiBib29sZWFuKXtcclxuICAgIGlmKHR5cGVvZiByZWZyZXNoRGlzcGxheSA9PT0gXCJ1bmRlZmluZWRcIilcclxuICAgICAgcmVmcmVzaERpc3BsYXkgPSB0cnVlO1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaihcInNldGV4dGVybmFsdmFsdWVcIiwgY29udHJvbE5hbWUsIDApO1xyXG4gICAgZ3VpRXZlbnQuZXh0ZXJuYWxWYWx1ZSA9IHZhbHVlO1xyXG4gICAgZ3VpRXZlbnQucGFyYW0gPSByZWZyZXNoRGlzcGxheTtcclxuICAgIHRoaXMudGFzay5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxuICBpc0RhdGF2aWV3RW1wdHkoKSA6IGJvb2xlYW4ge1xyXG4gICAgIHJldHVybiB0aGlzLnRhc2suUmVjb3Jkcy5pc0VtcHR5RGF0YVZpZXc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBzaW11bGF0ZXMgYSBjbGljayBldmVudCBvbiB0aGUgc3BlY2lmaWVkIGNvbnRyb2wsIGZvciB0aGUgTWFnaWMgZW5naW5lXHJcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lXHJcbiAgICogQHBhcmFtIHJvd0lkXHJcbiAgICovXHJcbiAgc2ltdWxhdGVDbGljayhjb250cm9sTmFtZTogc3RyaW5nLCByb3dJZD86IG51bWJlcil7XHJcbiAgICBpZiAodHlwZW9mIHJvd0lkID09PSBcInVuZGVmaW5lZFwiKVxyXG4gICAgICByb3dJZCA9IDA7XHJcbiAgICB0aGlzLnRhc2suaW5zZXJ0RXZlbnQoZ2V0R3VpRXZlbnRPYmooJ2NsaWNrJywgY29udHJvbE5hbWUsIHJvd0lkKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gQm9vbGVhbiBUUlVFIGlmIHVzZXIgbG9nZ2VkIGluIEVsc2UgaXQgd2lsbCByZXR1cm4gRkFMU0VcclxuICAgKi9cclxuICBpc0xvZ2dlZEluKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGFzay5nZXRJc0xvZ2dlbkluKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIEpTIG9iamVjdCBjb250YWluaW5nIHRoZSByZWNvcmRzIHdpdGggYWxsIHRhYmxlIGZpZWxkcy5cclxuICAgKi9cclxuICBHZXRGb3JtUmVjb3JkcygpOiBhbnkge1xyXG4gICAgbGV0IHJvd0lkOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHJlY0FycmF5OiBhbnk7XHJcblxyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZCh0aGlzLnRhc2suUmVjb3JkcykgJiYgdGhpcy50YXNrLlJlY29yZHMubGlzdC5sZW5ndGggPiAwICkge1xyXG4gICAgICBsZXQgcmVjTGlzdDogQ29udHJvbHNNZXRhZGF0YVtdID0gdGhpcy50YXNrLlJlY29yZHMubGlzdDtcclxuICAgICAgbGV0IHRhYmxlQ29udHJvbHM6IHN0cmluZ1tdID0gbmV3IEFycmF5KCk7XHJcblxyXG4gICAgICAvL0dlbmVyYXRlIGxpc3Qgb2YgdGFibGUgZmllbGRzIG5hbWVzXHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMudGFzay50ZW1wbGF0ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnRhc2sudGVtcGxhdGVba2V5XSA9PSAnMScpXHJcbiAgICAgICAgICB0YWJsZUNvbnRyb2xzLnB1c2goa2V5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVjQXJyYXkgPSBuZXcgQXJyYXkoKTtcclxuXHJcbiAgICAgIC8vVXBkYXRlIHRoZSByZWNvcmRzIGFzIGxpc3Qgb2Ygb2JqZWN0cyB3aXRoIHZhbHVlcyBmb3IgdGFibGUgZmllbGRzLlxyXG4gICAgICBpZiAodGFibGVDb250cm9scy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmVjTGlzdC5mb3JFYWNoKChjdHJsTWV0YURhdGE6IENvbnRyb2xzTWV0YWRhdGEpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnRhc2suUmVjb3Jkcy5pc1Jvd0NyZWF0ZWQocm93SWQpKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JtUmVjb3JkID0ge307XHJcbiAgICAgICAgICAgIGZvcm1SZWNvcmRbJ3Jvd0lkJ10gPSByb3dJZDtcclxuICAgICAgICAgICAgdGFibGVDb250cm9scy5mb3JFYWNoKChjdHJsSWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIGZvcm1SZWNvcmRbY3RybElkXSA9IGN0cmxNZXRhRGF0YS52YWx1ZXNbY3RybElkXTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZWNBcnJheS5wdXNoKGZvcm1SZWNvcmQpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVjQXJyYXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRDb29raWUgOiBzZXQgdGhlIGNvb2tpZSB3aXRoIHNwZWNpZmllZCBuYW1lIGFuZCB2YWx1ZSAgaW4gYnJvd3NlclxyXG4gICAqIGV4cGlyZXMgLSBleHBpcmF0aW9uIHRpbWVcclxuICAgKiBwYXRoIC0gcGF0aCB3aGljaCBtdWNoIGV4aXN0cyBpbiBvcmRlciBzbyB0aGF0IGNvb2tpZSBpcyBzZW50IGFzIGhlYWRlclxyXG4gICAqIGRvbWFpbiAtIHNwZWNpZmllcyB3aGljaCBob3N0cyBhcmUgYWxsb3dlZCB0byByZWNlaXZlIHRoZSBjb29raWVcclxuICAgKiBzZWN1cmUgLSBzcGVjaWZpZXMgaWYgY29va2llIGlzIHNlY3VyZSAoIHdvcmtzIG9ubHkgd2l0aCBIVFRQUylcclxuICAgKiBzYW1lU2l0ZSAtIGxldHMgc2VydmVycyBzcGVjaWZ5IHdoZXRoZXIvd2hlbiBjb29raWVzIGFyZSBzZW50IHdpdGggY3Jvc3Mtc2l0ZSByZXF1ZXN0c1xyXG4gICAqL1xyXG4gIFNldENvb2tpZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGV4cGlyZXM/OiBEYXRlLCBwYXRoPyAsIGRvbWFpbj8gLCBzZWN1cmU/LCBzYW1lU2l0ZSA/KSB7XHJcbiAgICBDb29raWVTZXJ2aWNlLnNldENvb2tpZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUsIHNhbWVTaXRlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldENvb2tpZSA6IGdldCB0aGUgY29va2llIHdpdGggc3BlY2lmaWVkIG5hbWUgYW5kIHZhbHVlICBpbiBicm93c2VyXHJcbiAgICovXHJcbiAgR2V0Q29va2llKG5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gQ29va2llU2VydmljZS5nZXRDb29raWUobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVDb29raWUgOiBkZWxldGVzIHRoZSBjb29raWVcclxuICAgKi9cclxuICBEZWxldGVDb29raWUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiBDb29raWVTZXJ2aWNlLmRlbGV0ZUNvb2tpZShuYW1lKTtcclxuICB9XHJcblxyXG4gICAvKipcclxuICAgKiBnZXQgUkdCQSBjb2xvciBmcm9tIGNvbG9yIGZpbGVcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0Q29sb3IoY29sb3JOdW1iZXI6IG51bWJlciwgY29sb3JUeXBlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tYWdpY0NvbG9yLmdldENvbG9yKGNvbG9yTnVtYmVyLCBjb2xvclR5cGUpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
@@ -1,46 +0,0 @@
|
|
1
|
-
import { Injectable } from '@angular/core';
|
2
|
-
import { EngineMagicService } from './engine.magic.service';
|
3
|
-
import { List } from '@magic-xpa/mscorelib';
|
4
|
-
import { Logger } from '@magic-xpa/utils';
|
5
|
-
import * as i0 from "@angular/core";
|
6
|
-
import * as i1 from "./engine.magic.service";
|
7
|
-
export class CommandsCollectorMagicService {
|
8
|
-
constructor(magic) {
|
9
|
-
this.magic = magic;
|
10
|
-
this.count = 0;
|
11
|
-
this.commands = new List();
|
12
|
-
this.subscription = null;
|
13
|
-
}
|
14
|
-
startCollecting() {
|
15
|
-
this.count++;
|
16
|
-
Logger.Instance.WriteDevToLog("CommandsCollectorMagicService.startCollecting() --- " + this.count);
|
17
|
-
if (this.subscription === null) {
|
18
|
-
this.subscription = this.magic.refreshDom
|
19
|
-
.subscribe(command => {
|
20
|
-
this.commands.push(command);
|
21
|
-
});
|
22
|
-
}
|
23
|
-
}
|
24
|
-
stopCollecting() {
|
25
|
-
this.count--;
|
26
|
-
Logger.Instance.WriteDevToLog("CommandsCollectorMagicService.stopCollecting() --- " + this.count);
|
27
|
-
if (this.count === 0) {
|
28
|
-
this.subscription.unsubscribe();
|
29
|
-
this.subscription = null;
|
30
|
-
}
|
31
|
-
}
|
32
|
-
GetCommands(taskId) {
|
33
|
-
const commands = this.commands.filter((command) => command.TaskTag === taskId);
|
34
|
-
commands.forEach(command => { this.commands.Remove(command); });
|
35
|
-
return commands;
|
36
|
-
}
|
37
|
-
}
|
38
|
-
CommandsCollectorMagicService.ɵfac = function CommandsCollectorMagicService_Factory(t) { return new (t || CommandsCollectorMagicService)(i0.ɵɵinject(i1.EngineMagicService)); };
|
39
|
-
CommandsCollectorMagicService.ɵprov = i0.ɵɵdefineInjectable({ token: CommandsCollectorMagicService, factory: CommandsCollectorMagicService.ɵfac, providedIn: 'root' });
|
40
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CommandsCollectorMagicService, [{
|
41
|
-
type: Injectable,
|
42
|
-
args: [{
|
43
|
-
providedIn: 'root'
|
44
|
-
}]
|
45
|
-
}], function () { return [{ type: i1.EngineMagicService }]; }, null); })();
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMtY29sbGVjdG9yLm1hZ2ljLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9zZXJ2aWNlcy9jb21tYW5kcy1jb2xsZWN0b3IubWFnaWMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQVMxQyxNQUFNLE9BQU8sNkJBQTZCO0lBS3hDLFlBQXNCLEtBQXlCO1FBQXpCLFVBQUssR0FBTCxLQUFLLENBQW9CO1FBSnZDLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsYUFBUSxHQUFxQixJQUFJLElBQUksRUFBYyxDQUFDO1FBQ3BELGlCQUFZLEdBQWlCLElBQUksQ0FBQztJQUcxQyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLHNEQUFzRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuRyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFO1lBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVO2lCQUN0QyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLHFEQUFxRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsRyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWM7UUFDeEIsTUFBTSxRQUFRLEdBQWlCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFFLENBQUMsT0FBbUIsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsQ0FBQztRQUMxRyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoRSxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzswR0FuQ1UsNkJBQTZCO3FFQUE3Qiw2QkFBNkIsV0FBN0IsNkJBQTZCLG1CQUY1QixNQUFNO3VGQUVQLDZCQUE2QjtjQUh6QyxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVuZ2luZU1hZ2ljU2VydmljZSB9IGZyb20gJy4vZW5naW5lLm1hZ2ljLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHdWlDb21tYW5kIH0gZnJvbSAnQG1hZ2ljLXhwYS9ndWknO1xyXG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbWFuZHNDb2xsZWN0b3JNYWdpY1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgY291bnQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBjb21tYW5kczogTGlzdDxHdWlDb21tYW5kPiA9IG5ldyBMaXN0PEd1aUNvbW1hbmQ+KCk7XHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBtYWdpYzogRW5naW5lTWFnaWNTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBzdGFydENvbGxlY3RpbmcoKSB7XHJcbiAgICB0aGlzLmNvdW50Kys7XHJcbiAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcIkNvbW1hbmRzQ29sbGVjdG9yTWFnaWNTZXJ2aWNlLnN0YXJ0Q29sbGVjdGluZygpIC0tLSBcIiArIHRoaXMuY291bnQpO1xyXG5cclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbiA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMubWFnaWMucmVmcmVzaERvbVxyXG4gICAgICAgIC5zdWJzY3JpYmUoY29tbWFuZCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbW1hbmRzLnB1c2goY29tbWFuZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9wQ29sbGVjdGluZygpIHtcclxuICAgIHRoaXMuY291bnQtLTtcclxuICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiQ29tbWFuZHNDb2xsZWN0b3JNYWdpY1NlcnZpY2Uuc3RvcENvbGxlY3RpbmcoKSAtLS0gXCIgKyB0aGlzLmNvdW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5jb3VudCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBHZXRDb21tYW5kcyh0YXNrSWQ6IHN0cmluZyk6IEd1aUNvbW1hbmRbXSB7XHJcbiAgICBjb25zdCBjb21tYW5kczogR3VpQ29tbWFuZFtdID0gdGhpcy5jb21tYW5kcy5maWx0ZXIoIChjb21tYW5kOiBHdWlDb21tYW5kKSA9PiBjb21tYW5kLlRhc2tUYWcgPT09IHRhc2tJZCk7XHJcbiAgICBjb21tYW5kcy5mb3JFYWNoKGNvbW1hbmQgPT4geyB0aGlzLmNvbW1hbmRzLlJlbW92ZShjb21tYW5kKTsgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbW1hbmRzO1xyXG4gIH1cclxufVxyXG4iXX0=
|
@@ -1,46 +0,0 @@
|
|
1
|
-
import { Injectable } from '@angular/core';
|
2
|
-
import * as i0 from "@angular/core";
|
3
|
-
export class ComponentListMagicService {
|
4
|
-
constructor() {
|
5
|
-
this.components = new Map();
|
6
|
-
this.dialogs = new Map();
|
7
|
-
this.lazyLoadModulesMap = null;
|
8
|
-
}
|
9
|
-
getData(name, mustHaveData) {
|
10
|
-
let data = null;
|
11
|
-
let haveData = this.components.has(name);
|
12
|
-
if (!haveData && mustHaveData) {
|
13
|
-
console.log("Error: Component: " + name + " does not exist in components map");
|
14
|
-
}
|
15
|
-
if (haveData)
|
16
|
-
data = this.components.get(name);
|
17
|
-
return data;
|
18
|
-
}
|
19
|
-
getComponent(name, mustHaveData = true) {
|
20
|
-
let data = this.getData(name, mustHaveData);
|
21
|
-
return data ? data.component : null;
|
22
|
-
}
|
23
|
-
addComponents(componentList, modulRef) {
|
24
|
-
for (let key in componentList) {
|
25
|
-
let data = { moduleRef: modulRef, component: componentList[key] };
|
26
|
-
this.components.set(key, data);
|
27
|
-
}
|
28
|
-
}
|
29
|
-
getModuleRef(name) {
|
30
|
-
let data = this.getData(name, false);
|
31
|
-
return data ? data.moduleRef : null;
|
32
|
-
;
|
33
|
-
}
|
34
|
-
getLazyLoadModuleData(name) {
|
35
|
-
return (this.lazyLoadModulesMap != null && this.lazyLoadModulesMap.hasOwnProperty(name)) ? this.lazyLoadModulesMap[name] : null;
|
36
|
-
}
|
37
|
-
}
|
38
|
-
ComponentListMagicService.ɵfac = function ComponentListMagicService_Factory(t) { return new (t || ComponentListMagicService)(); };
|
39
|
-
ComponentListMagicService.ɵprov = i0.ɵɵdefineInjectable({ token: ComponentListMagicService, factory: ComponentListMagicService.ɵfac, providedIn: 'root' });
|
40
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ComponentListMagicService, [{
|
41
|
-
type: Injectable,
|
42
|
-
args: [{
|
43
|
-
providedIn: 'root'
|
44
|
-
}]
|
45
|
-
}], null, null); })();
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWxpc3QubWFnaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3NlcnZpY2VzL2NvbXBvbmVudC1saXN0Lm1hZ2ljLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBZSxNQUFNLGVBQWUsQ0FBQzs7QUFtQnhELE1BQU0sT0FBTyx5QkFBeUI7SUFIdEM7UUFRRSxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFJN0MsWUFBTyxHQUFNLElBQUksR0FBRyxFQUFjLENBQUM7UUFFbkMsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO0tBeUQzQjtJQXZEQyxPQUFPLENBQUMsSUFBVyxFQUFHLFlBQXFCO1FBQ3pDLElBQUksSUFBSSxHQUFpQixJQUFJLENBQUM7UUFFOUIsSUFBSSxRQUFRLEdBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFFBQVEsSUFBSSxZQUFZLEVBQUU7WUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsbUNBQW1DLENBQUMsQ0FBQztTQUNoRjtRQUVELElBQUksUUFBUTtZQUNWLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVsQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFRRCxZQUFZLENBQUMsSUFBVyxFQUFFLGVBQXVCLElBQUk7UUFDbkQsSUFBSSxJQUFJLEdBQWtCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQzFELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdEMsQ0FBQztJQUVELGFBQWEsQ0FBQyxhQUFpQixFQUFHLFFBQTBCO1FBQzNELEtBQUksSUFBSSxHQUFHLElBQUksYUFBYSxFQUFDO1lBQzNCLElBQUksSUFBSSxHQUFrQixFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDO1lBQzdFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFPRCxZQUFZLENBQUUsSUFBVztRQUN2QixJQUFJLElBQUksR0FBa0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDbkQsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUFBLENBQUM7SUFDdkMsQ0FBQztJQU9ELHFCQUFxQixDQUFFLElBQVc7UUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsSSxDQUFDOztrR0E5RFUseUJBQXlCO2lFQUF6Qix5QkFBeUIsV0FBekIseUJBQXlCLG1CQUZ4QixNQUFNO3VGQUVQLHlCQUF5QjtjQUhyQyxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ01vZHVsZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RGF0YSB7XHJcbiAgY29tcG9uZW50OmFueTtcclxuICBtb2R1bGVSZWY6TmdNb2R1bGVSZWY8YW55PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVEYXRhIHtcclxuICBtb2R1bGVOYW1lOiBzdHJpbmc7XHJcbiAgbW9kdWxlUGF0aDogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogTWFuYWdlcyB0aGUgbGlzdCBvZiBjb21wb25lbnRzIGluIGEgcHJvamVjdCwgYW5kIHRoZSBwcm9qZWN0IHRpdGxlXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21wb25lbnRMaXN0TWFnaWNTZXJ2aWNle1xyXG5cclxuICAvKipcclxuICAgKiBNYXAgb2YgcHJvamVjdCBjb21wb25lbnRzXHJcbiAgICovXHJcbiAgY29tcG9uZW50cyA9IG5ldyBNYXA8c3RyaW5nLENvbXBvbmVudERhdGE+KCk7XHJcbiAgLyoqXHJcbiAgICogTWFwIG9mIHByb2plY3QgZGlhbG9nc1xyXG4gICAqL1xyXG4gIGRpYWxvZ3MgICAgPSBuZXcgTWFwPHN0cmluZyxhbnk+KCk7XHJcblxyXG4gIGxhenlMb2FkTW9kdWxlc01hcCA9IG51bGw7XHJcblxyXG4gIGdldERhdGEobmFtZTpzdHJpbmcsICBtdXN0SGF2ZURhdGE6IGJvb2xlYW4pe1xyXG4gICAgbGV0IGRhdGEgOkNvbXBvbmVudERhdGE9IG51bGw7XHJcblxyXG4gICAgbGV0IGhhdmVEYXRhOiBib29sZWFuICA9dGhpcy5jb21wb25lbnRzLmhhcyhuYW1lKTtcclxuICAgIGlmICghaGF2ZURhdGEgJiYgbXVzdEhhdmVEYXRhKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3I6IENvbXBvbmVudDogXCIgKyBuYW1lICsgXCIgZG9lcyBub3QgZXhpc3QgaW4gY29tcG9uZW50cyBtYXBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhdmVEYXRhKVxyXG4gICAgICBkYXRhID0gdGhpcy5jb21wb25lbnRzLmdldChuYW1lKVxyXG5cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGNvbXBvbmVudCBhY2NvcmRpbmcgdG8gbmFtZVxyXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgcmVxdWVzdGVkIGNvbXBvbmVudFxyXG4gICAqIEByZXR1cm5zIFRoZSByZXF1ZXN0ZWQgY29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0Q29tcG9uZW50KG5hbWU6c3RyaW5nLCBtdXN0SGF2ZURhdGE6Ym9vbGVhbiA9IHRydWUpe1xyXG4gICAgbGV0IGRhdGE6IENvbXBvbmVudERhdGEgPSB0aGlzLmdldERhdGEobmFtZSwgbXVzdEhhdmVEYXRhKVxyXG4gICAgcmV0dXJuIGRhdGEgPyBkYXRhLmNvbXBvbmVudCA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBhZGRDb21wb25lbnRzKGNvbXBvbmVudExpc3Q6YW55ICwgbW9kdWxSZWY/Ok5nTW9kdWxlUmVmPGFueT4pe1xyXG4gICBmb3IobGV0IGtleSBpbiBjb21wb25lbnRMaXN0KXtcclxuICAgICBsZXQgZGF0YSA6Q29tcG9uZW50RGF0YSA9IHttb2R1bGVSZWY6bW9kdWxSZWYsIGNvbXBvbmVudDpjb21wb25lbnRMaXN0W2tleV19O1xyXG4gICAgIHRoaXMuY29tcG9uZW50cy5zZXQoa2V5LGRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBSZXR1cm4gYSBjb21wb25lbnQgYWNjb3JkaW5nIHRvIG5hbWVcclxuICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgcmVxdWVzdGVkIGNvbXBvbmVudFxyXG4gICogQHJldHVybnMgVGhlIHJlcXVlc3RlZCBjb21wb25lbnRcclxuICAqL1xyXG4gIGdldE1vZHVsZVJlZiAobmFtZTpzdHJpbmcpe1xyXG4gICAgbGV0IGRhdGE6IENvbXBvbmVudERhdGEgPSB0aGlzLmdldERhdGEobmFtZSwgZmFsc2UpXHJcbiAgICByZXR1cm4gZGF0YSA/IGRhdGEubW9kdWxlUmVmIDogbnVsbDs7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGxhenkgbG9hZCBtb2R1bGUgZGV0YWlscyBvZiB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSBuYW1lOiBOYW1lIG9mIHJlcXVlc3RlZCBjb21wb25lbnRcclxuICAgKiBAcmV0dXJuczogbGF6eSBsb2FkIG1vZHVsZSBkZXRhaWxzXHJcbiAgICovXHJcbiAgZ2V0TGF6eUxvYWRNb2R1bGVEYXRhIChuYW1lOnN0cmluZyk6IE1vZHVsZURhdGEge1xyXG4gICAgcmV0dXJuICh0aGlzLmxhenlMb2FkTW9kdWxlc01hcCAhPSBudWxsICYmIHRoaXMubGF6eUxvYWRNb2R1bGVzTWFwLmhhc093blByb3BlcnR5KG5hbWUpKSA/IHRoaXMubGF6eUxvYWRNb2R1bGVzTWFwW25hbWVdIDogbnVsbDtcclxuICB9XHJcblxyXG4vKipcclxuICAgKiBQcm9qZWN0IHRpdGxlXHJcbiAgICovXHJcbiAgdGl0bGUgOiBzdHJpbmc7XHJcbn1cclxuIl19
|