@magic-xpa/gui 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 +7 -7
- package/{esm2020 → esm2022}/index.mjs +71 -71
- package/{esm2020 → esm2022}/magic-xpa-gui.mjs +1 -1
- package/esm2022/src/Commands.mjs +184 -0
- package/esm2022/src/Events.mjs +425 -0
- package/{esm2020 → esm2022}/src/EventsProcessor.mjs +66 -66
- package/{esm2020 → esm2022}/src/FocusManager.mjs +33 -33
- package/esm2022/src/GuiConstants.mjs +68 -0
- package/{esm2020 → esm2022}/src/GuiEnums.mjs +301 -300
- package/esm2022/src/GuiEnvironment.mjs +4 -0
- package/{esm2020 → esm2022}/src/IFlowMonitorQueue.mjs +1 -1
- package/esm2022/src/Manager.mjs +91 -0
- package/esm2022/src/UIBridge.mjs +33 -0
- package/{esm2020 → esm2022}/src/env/IEnvironment.mjs +1 -1
- package/{esm2020 → esm2022}/src/gui/ControlBase.mjs +2 -2
- package/esm2022/src/gui/GuiMgControl.mjs +123 -0
- package/{esm2020 → esm2022}/src/gui/GuiMgForm.mjs +3 -3
- package/esm2022/src/gui/KeyboardItem.mjs +135 -0
- package/esm2022/src/gui/LastFocusedVal.mjs +11 -0
- package/esm2022/src/gui/MgValue.mjs +16 -0
- package/{esm2020 → esm2022}/src/gui/PropParentInterface.mjs +1 -1
- package/{esm2020 → esm2022}/src/gui/low/DialogHandler.mjs +6 -6
- package/esm2022/src/gui/low/GuiCommand.mjs +68 -0
- package/esm2022/src/gui/low/GuiCommandQueue.mjs +35 -0
- package/esm2022/src/gui/low/GuiInteractive.mjs +178 -0
- package/esm2022/src/gui/low/Style.mjs +20 -0
- package/esm2022/src/management/RuntimeContextBase.mjs +42 -0
- package/esm2022/src/management/data/BlobType.mjs +281 -0
- package/esm2022/src/management/data/DcValues.mjs +214 -0
- package/{esm2020 → esm2022}/src/management/data/DcValuesBuilderBase.mjs +95 -95
- package/esm2022/src/management/data/FieldDef.mjs +331 -0
- package/{esm2020 → esm2022}/src/management/data/FieldsTable.mjs +54 -54
- package/esm2022/src/management/data/GuiDataViewBase.mjs +88 -0
- package/esm2022/src/management/data/GuiFieldBase.mjs +82 -0
- package/{esm2020 → esm2022}/src/management/data/IRecord.mjs +1 -1
- package/{esm2020 → esm2022}/src/management/data/IReferencedObject.mjs +1 -1
- package/esm2022/src/management/data/NUM_TYPE.mjs +1739 -0
- package/esm2022/src/management/data/ObjectReferenceBase.mjs +48 -0
- package/esm2022/src/management/data/ObjectReferencesCollection.mjs +27 -0
- package/{esm2020 → esm2022}/src/management/data/RecordUtils.mjs +360 -360
- package/esm2022/src/management/data/VectorType.mjs +612 -0
- package/esm2022/src/management/data/VectorTypeBase.mjs +88 -0
- package/{esm2020 → esm2022}/src/management/events/IActionManager.mjs +1 -1
- package/{esm2020 → esm2022}/src/management/events/IGuiEventsManager.mjs +1 -1
- package/esm2022/src/management/exp/ExpressionInterface.mjs +244 -0
- package/esm2022/src/management/exp/GuiExpressionEvaluator.mjs +305 -0
- package/esm2022/src/management/gui/ControlTable.mjs +118 -0
- package/esm2022/src/management/gui/DisplayConvertor.mjs +1649 -0
- package/esm2022/src/management/gui/FieldValidator.mjs +711 -0
- package/esm2022/src/management/gui/GuiControlPropertyAdapter.mjs +24 -0
- package/{esm2020 → esm2022}/src/management/gui/GuiFormPropertyAdapter.mjs +10 -10
- package/esm2022/src/management/gui/HebrewDate.mjs +278 -0
- package/esm2022/src/management/gui/Helps.mjs +237 -0
- package/esm2022/src/management/gui/MgControlBase.mjs +1869 -0
- package/esm2022/src/management/gui/MgFormBase.mjs +741 -0
- package/esm2022/src/management/gui/PIC.mjs +1185 -0
- package/{esm2020 → esm2022}/src/management/gui/PropDefaults.mjs +229 -229
- package/{esm2020 → esm2022}/src/management/gui/PropInterface.mjs +246 -245
- package/esm2022/src/management/gui/PropTable.mjs +221 -0
- package/esm2022/src/management/gui/Property.mjs +1362 -0
- package/esm2022/src/management/gui/ValidationDetails.mjs +248 -0
- package/{esm2020 → esm2022}/src/management/gui/ValidationDetailsBase.mjs +93 -93
- package/{esm2020 → esm2022}/src/management/gui/WrongFormatException.mjs +29 -29
- package/esm2022/src/management/tasks/GuiDataCollection.mjs +4 -0
- package/esm2022/src/management/tasks/GuiTaskBase.mjs +511 -0
- package/{esm2020 → esm2022}/src/management/tasks/IMGDataTable.mjs +1 -1
- package/{esm2020 → esm2022}/src/management/tasks/ITask.mjs +1 -1
- package/esm2022/src/management/tasks/MgTimer.mjs +21 -0
- package/esm2022/src/management/tasks/TaskDefinitionId.mjs +54 -0
- package/{esm2020 → esm2022}/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +41 -41
- package/{esm2020 → esm2022}/src/util/MemoryUtil.mjs +34 -34
- package/esm2022/src/util/ObjectReference.mjs +36 -0
- package/esm2022/src/util/UsernamePasswordCredentials.mjs +52 -0
- package/{fesm2020 → fesm2022}/magic-xpa-gui.mjs +16086 -16095
- package/fesm2022/magic-xpa-gui.mjs.map +1 -0
- package/index.d.ts +70 -70
- package/package.json +6 -12
- package/src/Commands.d.ts +40 -40
- package/src/Events.d.ts +157 -155
- package/src/EventsProcessor.d.ts +13 -13
- package/src/FocusManager.d.ts +8 -8
- package/src/GuiConstants.d.ts +65 -65
- package/src/GuiEnums.d.ts +283 -282
- package/src/GuiEnvironment.d.ts +4 -4
- package/src/IFlowMonitorQueue.d.ts +3 -3
- package/src/Manager.d.ts +26 -26
- package/src/UIBridge.d.ts +16 -16
- package/src/env/IEnvironment.d.ts +31 -31
- package/src/gui/ControlBase.d.ts +4 -4
- package/src/gui/GuiMgControl.d.ts +38 -38
- package/src/gui/GuiMgForm.d.ts +3 -3
- package/src/gui/KeyboardItem.d.ts +18 -18
- package/src/gui/LastFocusedVal.d.ts +7 -7
- package/src/gui/MgValue.d.ts +15 -15
- package/src/gui/PropParentInterface.d.ts +13 -13
- package/src/gui/low/DialogHandler.d.ts +4 -4
- package/src/gui/low/GuiCommand.d.ts +37 -37
- package/src/gui/low/GuiCommandQueue.d.ts +13 -13
- package/src/gui/low/GuiInteractive.d.ts +55 -55
- package/src/gui/low/Style.d.ts +19 -19
- package/src/management/RuntimeContextBase.d.ts +23 -23
- package/src/management/data/BlobType.d.ts +29 -29
- package/src/management/data/DcValues.d.ts +33 -33
- package/src/management/data/DcValuesBuilderBase.d.ts +17 -17
- package/src/management/data/FieldDef.d.ts +53 -53
- package/src/management/data/FieldsTable.d.ts +16 -16
- package/src/management/data/GuiDataViewBase.d.ts +27 -27
- package/src/management/data/GuiFieldBase.d.ts +17 -17
- package/src/management/data/IRecord.d.ts +12 -12
- package/src/management/data/IReferencedObject.d.ts +5 -5
- package/src/management/data/NUM_TYPE.d.ts +103 -103
- package/src/management/data/ObjectReferenceBase.d.ts +16 -16
- package/src/management/data/ObjectReferencesCollection.d.ts +10 -10
- package/src/management/data/RecordUtils.d.ts +21 -21
- package/src/management/data/VectorType.d.ts +52 -52
- package/src/management/data/VectorTypeBase.d.ts +8 -8
- package/src/management/events/IActionManager.d.ts +7 -7
- package/src/management/events/IGuiEventsManager.d.ts +20 -20
- package/src/management/exp/ExpressionInterface.d.ts +242 -242
- package/src/management/exp/GuiExpressionEvaluator.d.ts +47 -47
- package/src/management/gui/ControlTable.d.ts +28 -28
- package/src/management/gui/DisplayConvertor.d.ts +103 -103
- package/src/management/gui/FieldValidator.d.ts +35 -35
- package/src/management/gui/GuiControlPropertyAdapter.d.ts +40 -40
- package/src/management/gui/GuiFormPropertyAdapter.d.ts +17 -17
- package/src/management/gui/HebrewDate.d.ts +46 -46
- package/src/management/gui/Helps.d.ts +51 -51
- package/src/management/gui/MgControlBase.d.ts +225 -223
- package/src/management/gui/MgFormBase.d.ts +160 -160
- package/src/management/gui/PIC.d.ts +108 -108
- package/src/management/gui/PropDefaults.d.ts +7 -7
- package/src/management/gui/PropInterface.d.ts +244 -243
- package/src/management/gui/PropTable.d.ts +33 -33
- package/src/management/gui/Property.d.ts +121 -121
- package/src/management/gui/ValidationDetails.d.ts +52 -52
- package/src/management/gui/ValidationDetailsBase.d.ts +14 -14
- package/src/management/gui/WrongFormatException.d.ts +9 -9
- package/src/management/tasks/GuiDataCollection.d.ts +4 -4
- package/src/management/tasks/GuiTaskBase.d.ts +150 -150
- package/src/management/tasks/IMGDataTable.d.ts +10 -10
- package/src/management/tasks/ITask.d.ts +6 -6
- package/src/management/tasks/MgTimer.d.ts +8 -8
- package/src/management/tasks/TaskDefinitionId.d.ts +16 -16
- package/src/management/tasks/TaskDefinitionIdTableSaxHandler.d.ts +7 -7
- package/src/util/MemoryUtil.d.ts +6 -6
- package/src/util/ObjectReference.d.ts +9 -9
- package/src/util/UsernamePasswordCredentials.d.ts +18 -18
- package/esm2020/src/Commands.mjs +0 -184
- package/esm2020/src/Events.mjs +0 -420
- package/esm2020/src/GuiConstants.mjs +0 -68
- package/esm2020/src/GuiEnvironment.mjs +0 -4
- package/esm2020/src/Manager.mjs +0 -91
- package/esm2020/src/UIBridge.mjs +0 -32
- package/esm2020/src/gui/GuiMgControl.mjs +0 -125
- package/esm2020/src/gui/KeyboardItem.mjs +0 -135
- package/esm2020/src/gui/LastFocusedVal.mjs +0 -11
- package/esm2020/src/gui/MgValue.mjs +0 -16
- package/esm2020/src/gui/low/GuiCommand.mjs +0 -66
- package/esm2020/src/gui/low/GuiCommandQueue.mjs +0 -35
- package/esm2020/src/gui/low/GuiInteractive.mjs +0 -176
- package/esm2020/src/gui/low/Style.mjs +0 -20
- package/esm2020/src/management/RuntimeContextBase.mjs +0 -43
- package/esm2020/src/management/data/BlobType.mjs +0 -281
- package/esm2020/src/management/data/DcValues.mjs +0 -214
- package/esm2020/src/management/data/FieldDef.mjs +0 -331
- package/esm2020/src/management/data/GuiDataViewBase.mjs +0 -90
- package/esm2020/src/management/data/GuiFieldBase.mjs +0 -82
- package/esm2020/src/management/data/NUM_TYPE.mjs +0 -1741
- package/esm2020/src/management/data/ObjectReferenceBase.mjs +0 -48
- package/esm2020/src/management/data/ObjectReferencesCollection.mjs +0 -29
- package/esm2020/src/management/data/VectorType.mjs +0 -612
- package/esm2020/src/management/data/VectorTypeBase.mjs +0 -88
- package/esm2020/src/management/exp/ExpressionInterface.mjs +0 -244
- package/esm2020/src/management/exp/GuiExpressionEvaluator.mjs +0 -307
- package/esm2020/src/management/gui/ControlTable.mjs +0 -118
- package/esm2020/src/management/gui/DisplayConvertor.mjs +0 -1679
- package/esm2020/src/management/gui/FieldValidator.mjs +0 -711
- package/esm2020/src/management/gui/GuiControlPropertyAdapter.mjs +0 -22
- package/esm2020/src/management/gui/HebrewDate.mjs +0 -278
- package/esm2020/src/management/gui/Helps.mjs +0 -237
- package/esm2020/src/management/gui/MgControlBase.mjs +0 -1858
- package/esm2020/src/management/gui/MgFormBase.mjs +0 -741
- package/esm2020/src/management/gui/PIC.mjs +0 -1185
- package/esm2020/src/management/gui/PropTable.mjs +0 -221
- package/esm2020/src/management/gui/Property.mjs +0 -1356
- package/esm2020/src/management/gui/ValidationDetails.mjs +0 -248
- package/esm2020/src/management/tasks/GuiDataCollection.mjs +0 -4
- package/esm2020/src/management/tasks/GuiTaskBase.mjs +0 -510
- package/esm2020/src/management/tasks/MgTimer.mjs +0 -21
- package/esm2020/src/management/tasks/TaskDefinitionId.mjs +0 -54
- package/esm2020/src/util/ObjectReference.mjs +0 -36
- package/esm2020/src/util/UsernamePasswordCredentials.mjs +0 -52
- package/fesm2015/magic-xpa-gui.mjs +0 -16391
- package/fesm2015/magic-xpa-gui.mjs.map +0 -1
- package/fesm2020/magic-xpa-gui.mjs.map +0 -1
|
@@ -1,307 +0,0 @@
|
|
|
1
|
-
import { ApplicationException, NString } from '@magic-xpa/mscorelib';
|
|
2
|
-
import { Rtf, StorageAttribute, StorageAttributeCheck, StrUtil } from '@magic-xpa/utils';
|
|
3
|
-
import { Manager } from '../../Manager';
|
|
4
|
-
import { NUM_TYPE } from '../data/NUM_TYPE';
|
|
5
|
-
import { BlobType } from '../data/BlobType';
|
|
6
|
-
import { DisplayConvertor } from '../gui/DisplayConvertor';
|
|
7
|
-
export class GuiExpressionEvaluator {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.ExpTask = null;
|
|
10
|
-
this.Events = null;
|
|
11
|
-
}
|
|
12
|
-
eval_op_statusbar_set_text(resVal, statusBarText) {
|
|
13
|
-
resVal.Attr = StorageAttribute.UNICODE;
|
|
14
|
-
resVal.StrVal = Manager.GetCurrentRuntimeContext().DefaultStatusMsg;
|
|
15
|
-
if (Manager.GetCurrentRuntimeContext().DefaultStatusMsg === null) {
|
|
16
|
-
resVal.StrVal = '';
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
resVal.StrVal = Manager.GetCurrentRuntimeContext().DefaultStatusMsg;
|
|
20
|
-
}
|
|
21
|
-
resVal.IsNull = false;
|
|
22
|
-
if (!(statusBarText.Attr !== StorageAttribute.ALPHA && statusBarText.Attr !== StorageAttribute.UNICODE)) {
|
|
23
|
-
if (!statusBarText.IsNull) {
|
|
24
|
-
let text = statusBarText.StrVal;
|
|
25
|
-
let task = this.ExpTask.GetContextTask();
|
|
26
|
-
if (task.getForm() === null && Manager.GetCurrentRuntimeContext().FrameForm !== null) {
|
|
27
|
-
task = Manager.GetCurrentRuntimeContext().FrameForm.getTask();
|
|
28
|
-
}
|
|
29
|
-
task.WriteToMessagePane(text);
|
|
30
|
-
Manager.GetCurrentRuntimeContext().DefaultStatusMsg = text;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
IsParallel() {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
eval_op_ctrl_name(resVal) {
|
|
38
|
-
let lastClickedCtrlName = Manager.GetCurrentRuntimeContext().LastClickedCtrlName;
|
|
39
|
-
resVal.StrVal = (NString.IsNullOrEmpty(lastClickedCtrlName) ? '' : lastClickedCtrlName);
|
|
40
|
-
resVal.Attr = StorageAttribute.ALPHA;
|
|
41
|
-
}
|
|
42
|
-
eval_op_gotoCtrl(ctrlName, rowNum, generation, retVal) {
|
|
43
|
-
retVal.Attr = StorageAttribute.BOOLEAN;
|
|
44
|
-
retVal.BoolVal = false;
|
|
45
|
-
let task = this.GetContextTask(generation.MgNumVal.NUM_2_LONG());
|
|
46
|
-
if (task === null || task.getForm() === null)
|
|
47
|
-
return;
|
|
48
|
-
let iRowNum = rowNum.MgNumVal.NUM_2_LONG();
|
|
49
|
-
let sCtrlName = StrUtil.rtrim(ctrlName.StrVal);
|
|
50
|
-
let ctrl = task.getForm().GetCtrl(sCtrlName);
|
|
51
|
-
retVal.BoolVal = this.HandleControlGoto(task, ctrl, iRowNum);
|
|
52
|
-
}
|
|
53
|
-
static GetContextTask(currTask, generation) {
|
|
54
|
-
let task = null;
|
|
55
|
-
let taskBase = currTask.GetContextTask();
|
|
56
|
-
if (generation === GuiExpressionEvaluator.TRIGGER_TASK) {
|
|
57
|
-
task = taskBase;
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
if (generation < taskBase.GetTaskDepth()) {
|
|
61
|
-
task = taskBase.GetTaskAncestor(generation);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return task;
|
|
65
|
-
}
|
|
66
|
-
GetContextTask(generation) {
|
|
67
|
-
return GuiExpressionEvaluator.GetContextTask(this.ExpTask, generation);
|
|
68
|
-
}
|
|
69
|
-
ConstructMagicNum(resVal, i, attr) {
|
|
70
|
-
resVal.MgNumVal = new NUM_TYPE();
|
|
71
|
-
resVal.MgNumVal.NUM_4_LONG(i);
|
|
72
|
-
resVal.Attr = attr;
|
|
73
|
-
}
|
|
74
|
-
SetNULL(resVal, attr) {
|
|
75
|
-
resVal.IsNull = true;
|
|
76
|
-
resVal.Attr = attr;
|
|
77
|
-
switch (attr) {
|
|
78
|
-
case StorageAttribute.ALPHA:
|
|
79
|
-
case StorageAttribute.UNICODE:
|
|
80
|
-
resVal.StrVal = null;
|
|
81
|
-
break;
|
|
82
|
-
case StorageAttribute.TIME:
|
|
83
|
-
case StorageAttribute.DATE:
|
|
84
|
-
case StorageAttribute.NUMERIC:
|
|
85
|
-
resVal.MgNumVal = null;
|
|
86
|
-
break;
|
|
87
|
-
case StorageAttribute.BOOLEAN:
|
|
88
|
-
resVal.BoolVal = false;
|
|
89
|
-
break;
|
|
90
|
-
default:
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
GetValidatedValue(currCtrl, oldValue, newValue) {
|
|
95
|
-
let vd = currCtrl.buildCopyPicture(oldValue, newValue);
|
|
96
|
-
vd.evaluate();
|
|
97
|
-
let validationFailed = vd.ValidationFailed;
|
|
98
|
-
let ctrlValue;
|
|
99
|
-
if (validationFailed) {
|
|
100
|
-
let field = currCtrl.getField();
|
|
101
|
-
ctrlValue = ((field.getType() === StorageAttribute.BLOB_VECTOR) ? field.getCellDefualtValue() : field.getDefaultValue());
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
ctrlValue = vd.getDispValue();
|
|
105
|
-
}
|
|
106
|
-
return ctrlValue;
|
|
107
|
-
}
|
|
108
|
-
SetVal(resVal, type, val, pic) {
|
|
109
|
-
switch (type) {
|
|
110
|
-
case StorageAttribute.ALPHA:
|
|
111
|
-
case StorageAttribute.BLOB:
|
|
112
|
-
case StorageAttribute.BLOB_VECTOR:
|
|
113
|
-
case StorageAttribute.UNICODE:
|
|
114
|
-
resVal.Attr = type;
|
|
115
|
-
resVal.StrVal = val;
|
|
116
|
-
if (type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR)
|
|
117
|
-
resVal.IncludeBlobPrefix = true;
|
|
118
|
-
break;
|
|
119
|
-
case StorageAttribute.NUMERIC:
|
|
120
|
-
case StorageAttribute.DATE:
|
|
121
|
-
case StorageAttribute.TIME:
|
|
122
|
-
resVal.Attr = type;
|
|
123
|
-
if (val == null)
|
|
124
|
-
resVal.MgNumVal = null;
|
|
125
|
-
else if (pic == null)
|
|
126
|
-
resVal.MgNumVal = new NUM_TYPE(val);
|
|
127
|
-
else
|
|
128
|
-
resVal.MgNumVal = new NUM_TYPE(val, pic, (this.ExpTask).getCompIdx());
|
|
129
|
-
break;
|
|
130
|
-
case StorageAttribute.BOOLEAN:
|
|
131
|
-
resVal.Attr = type;
|
|
132
|
-
resVal.BoolVal = DisplayConvertor.toBoolean(val);
|
|
133
|
-
break;
|
|
134
|
-
default:
|
|
135
|
-
this.SetNULL(resVal, type);
|
|
136
|
-
this.Events.WriteExceptionToLog('ExpressionEvaluator.SetVal() there is no such type : ' + type);
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
static exp_build_string(val) {
|
|
141
|
-
let name = '';
|
|
142
|
-
if (val.StrVal !== null) {
|
|
143
|
-
let len = val.StrVal.length;
|
|
144
|
-
if (len > 0) {
|
|
145
|
-
name = StrUtil.ZstringMake(val.StrVal, len);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return name;
|
|
149
|
-
}
|
|
150
|
-
static isExpVal(obj) {
|
|
151
|
-
return obj instanceof ExpVal;
|
|
152
|
-
}
|
|
153
|
-
BlobStringConversion(val, expectedType) {
|
|
154
|
-
if (StorageAttributeCheck.IsTypeAlphaOrUnicode(expectedType)) {
|
|
155
|
-
if (val.Attr === StorageAttribute.BLOB) {
|
|
156
|
-
let includeBlobPrefix = val.IncludeBlobPrefix;
|
|
157
|
-
if (includeBlobPrefix) {
|
|
158
|
-
let contentType = BlobType.getContentType(val.StrVal);
|
|
159
|
-
val.StrVal = BlobType.getString(val.StrVal);
|
|
160
|
-
val.IncludeBlobPrefix = false;
|
|
161
|
-
if (contentType !== BlobType.CONTENT_TYPE_BINARY && Rtf.isRtf(val.StrVal)) {
|
|
162
|
-
val.StrVal = StrUtil.GetPlainTextfromRtf(val.StrVal);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
val.Attr = expectedType;
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
if (val.Attr === StorageAttribute.BLOB_VECTOR) {
|
|
169
|
-
let includeBlobPrefix2 = val.IncludeBlobPrefix;
|
|
170
|
-
if (includeBlobPrefix2) {
|
|
171
|
-
val.StrVal = BlobType.removeBlobPrefix(val.StrVal);
|
|
172
|
-
val.IncludeBlobPrefix = false;
|
|
173
|
-
}
|
|
174
|
-
val.Attr = expectedType;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
if (expectedType === StorageAttribute.BLOB) {
|
|
180
|
-
if (StorageAttributeCheck.IsTypeAlphaOrUnicode(val.Attr)) {
|
|
181
|
-
let contentType = (val.Attr === StorageAttribute.ALPHA) ? BlobType.CONTENT_TYPE_ANSI : BlobType.CONTENT_TYPE_UNICODE;
|
|
182
|
-
val.StrVal = BlobType.createFromString(val.StrVal, contentType);
|
|
183
|
-
val.IncludeBlobPrefix = true;
|
|
184
|
-
val.Attr = expectedType;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
eval_op_zimeread(resVal) {
|
|
190
|
-
resVal.Attr = StorageAttribute.ALPHA;
|
|
191
|
-
resVal.StrVal = '';
|
|
192
|
-
let utilImeJpn = Manager.UtilImeJpn;
|
|
193
|
-
if (utilImeJpn !== null) {
|
|
194
|
-
let strImeRead = utilImeJpn.StrImeRead;
|
|
195
|
-
if (!NString.IsNullOrEmpty(utilImeJpn.StrImeRead)) {
|
|
196
|
-
resVal.StrVal = strImeRead;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
ConvertExpVal(val, expectedType) {
|
|
201
|
-
if (StorageAttributeCheck.StorageFldAlphaUnicodeOrBlob(val.Attr, expectedType)) {
|
|
202
|
-
this.BlobStringConversion(val, expectedType);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
GuiExpressionEvaluator.TRIGGER_TASK = 500000;
|
|
207
|
-
export class ExpVal {
|
|
208
|
-
constructor(attr, isNull, mgVal) {
|
|
209
|
-
this.Attr = StorageAttribute.NONE;
|
|
210
|
-
this.IsNull = false;
|
|
211
|
-
this.MgNumVal = null;
|
|
212
|
-
this.StrVal = null;
|
|
213
|
-
this.BoolVal = false;
|
|
214
|
-
this.IncludeBlobPrefix = false;
|
|
215
|
-
this.OriginalNull = false;
|
|
216
|
-
this.VectorField = null;
|
|
217
|
-
if (arguments.length === 0) {
|
|
218
|
-
this.constructor_0();
|
|
219
|
-
return;
|
|
220
|
-
}
|
|
221
|
-
this.constructor_1(attr, isNull, mgVal);
|
|
222
|
-
}
|
|
223
|
-
constructor_0() {
|
|
224
|
-
this.Attr = StorageAttribute.NONE;
|
|
225
|
-
}
|
|
226
|
-
constructor_1(attr, isNull, mgVal) {
|
|
227
|
-
this.Init(attr, isNull, mgVal);
|
|
228
|
-
}
|
|
229
|
-
Copy(src) {
|
|
230
|
-
this.Attr = src.Attr;
|
|
231
|
-
this.BoolVal = src.BoolVal;
|
|
232
|
-
this.IncludeBlobPrefix = src.IncludeBlobPrefix;
|
|
233
|
-
this.IsNull = src.IsNull;
|
|
234
|
-
this.MgNumVal = src.MgNumVal;
|
|
235
|
-
this.StrVal = src.StrVal;
|
|
236
|
-
this.VectorField = src.VectorField;
|
|
237
|
-
this.OriginalNull = src.OriginalNull;
|
|
238
|
-
}
|
|
239
|
-
Nullify() {
|
|
240
|
-
this.Init(StorageAttribute.NONE, true, null);
|
|
241
|
-
}
|
|
242
|
-
Init(attr, isNull, mgVal) {
|
|
243
|
-
this.Attr = attr;
|
|
244
|
-
this.IsNull = isNull;
|
|
245
|
-
switch (this.Attr) {
|
|
246
|
-
case StorageAttribute.ALPHA:
|
|
247
|
-
case StorageAttribute.UNICODE:
|
|
248
|
-
this.StrVal = mgVal;
|
|
249
|
-
break;
|
|
250
|
-
case StorageAttribute.BLOB:
|
|
251
|
-
case StorageAttribute.BLOB_VECTOR:
|
|
252
|
-
this.StrVal = mgVal;
|
|
253
|
-
this.IncludeBlobPrefix = true;
|
|
254
|
-
break;
|
|
255
|
-
case StorageAttribute.NUMERIC:
|
|
256
|
-
case StorageAttribute.DATE:
|
|
257
|
-
case StorageAttribute.TIME:
|
|
258
|
-
this.MgNumVal = ((mgVal !== null) ? new NUM_TYPE(mgVal) : null);
|
|
259
|
-
break;
|
|
260
|
-
case StorageAttribute.BOOLEAN:
|
|
261
|
-
this.BoolVal = (mgVal !== null && mgVal === '1');
|
|
262
|
-
break;
|
|
263
|
-
case StorageAttribute.NONE:
|
|
264
|
-
this.BoolVal = false;
|
|
265
|
-
this.StrVal = null;
|
|
266
|
-
this.MgNumVal = null;
|
|
267
|
-
this.OriginalNull = true;
|
|
268
|
-
this.VectorField = null;
|
|
269
|
-
this.IncludeBlobPrefix = false;
|
|
270
|
-
break;
|
|
271
|
-
case StorageAttribute.DOTNET:
|
|
272
|
-
this.StrVal = mgVal;
|
|
273
|
-
break;
|
|
274
|
-
default:
|
|
275
|
-
throw new ApplicationException('in ExpVal.ExpVal() illegal attribute: \'' + this.Attr + '\'');
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
ToMgVal() {
|
|
279
|
-
let str;
|
|
280
|
-
switch (this.Attr) {
|
|
281
|
-
case StorageAttribute.ALPHA:
|
|
282
|
-
case StorageAttribute.BLOB:
|
|
283
|
-
case StorageAttribute.BLOB_VECTOR:
|
|
284
|
-
case StorageAttribute.UNICODE:
|
|
285
|
-
str = this.StrVal;
|
|
286
|
-
break;
|
|
287
|
-
case StorageAttribute.NUMERIC:
|
|
288
|
-
case StorageAttribute.DATE:
|
|
289
|
-
case StorageAttribute.TIME:
|
|
290
|
-
str = this.MgNumVal.toXMLrecord();
|
|
291
|
-
break;
|
|
292
|
-
case StorageAttribute.BOOLEAN:
|
|
293
|
-
str = this.BoolVal
|
|
294
|
-
? '1'
|
|
295
|
-
: '0';
|
|
296
|
-
break;
|
|
297
|
-
default:
|
|
298
|
-
str = '[illegal attribute: ' + this.Attr + ']';
|
|
299
|
-
break;
|
|
300
|
-
}
|
|
301
|
-
return str;
|
|
302
|
-
}
|
|
303
|
-
isEmptyString() {
|
|
304
|
-
return (this.Attr === StorageAttribute.ALPHA || this.Attr === StorageAttribute.UNICODE) && this.StrVal === '';
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpRXhwcmVzc2lvbkV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9leHAvR3VpRXhwcmVzc2lvbkV2YWx1YXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsT0FBTyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbkUsT0FBTyxFQUFDLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUduRyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXRDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUcxQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFHMUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFHekQsTUFBTSxPQUFnQixzQkFBc0I7SUFBNUM7UUFFRSxZQUFPLEdBQWdCLElBQUksQ0FBQztRQUNwQixXQUFNLEdBQVEsSUFBSSxDQUFDO0lBd1M3QixDQUFDO0lBNVJDLDBCQUEwQixDQUFDLE1BQWMsRUFBRSxhQUFxQjtRQUM5RCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN2QyxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1FBRXBFLElBQUksT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO1lBQ2hFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ3BCO2FBQU07WUFDTCxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1NBQ3JF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QUFnQixDQUFDLElBQUksQ0FBQztZQUMzQixLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQ3hCLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNsQyxNQUFNO1lBRVIsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU87b0JBQ2hCLENBQUMsQ0FBQyxHQUFHO29CQUNMLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ1IsTUFBTTtZQUVSO2dCQUNFLEdBQUcsR0FBRyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDL0MsTUFBTTtTQUNUO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBTUQsYUFBYTtRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO0lBQ2hILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBwbGljYXRpb25FeGNlcHRpb24sIE5TdHJpbmd9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtSdGYsIFN0b3JhZ2VBdHRyaWJ1dGUsIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjaywgU3RyVXRpbCwgVXRpbEltZUpwbn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7R3VpVGFza0Jhc2V9IGZyb20gJy4uL3Rhc2tzL0d1aVRhc2tCYXNlJztcclxuaW1wb3J0IHtJVGFza30gZnJvbSAnLi4vdGFza3MvSVRhc2snO1xyXG5pbXBvcnQge01hbmFnZXJ9IGZyb20gJy4uLy4uL01hbmFnZXInO1xyXG5pbXBvcnQge01nQ29udHJvbEJhc2V9IGZyb20gJy4uL2d1aS9NZ0NvbnRyb2xCYXNlJztcclxuaW1wb3J0IHtOVU1fVFlQRX0gZnJvbSAnLi4vZGF0YS9OVU1fVFlQRSc7XHJcbmltcG9ydCB7R3VpRmllbGRCYXNlfSBmcm9tICcuLi9kYXRhL0d1aUZpZWxkQmFzZSc7XHJcblxyXG5pbXBvcnQge0Jsb2JUeXBlfSBmcm9tICcuLi9kYXRhL0Jsb2JUeXBlJztcclxuaW1wb3J0IHtWYWxpZGF0aW9uRGV0YWlsc30gZnJvbSAnLi4vZ3VpL1ZhbGlkYXRpb25EZXRhaWxzJztcclxuaW1wb3J0IHtQSUN9IGZyb20gJy4uL2d1aS9QSUMnO1xyXG5pbXBvcnQge0Rpc3BsYXlDb252ZXJ0b3J9IGZyb20gJy4uL2d1aS9EaXNwbGF5Q29udmVydG9yJztcclxuXHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR3VpRXhwcmVzc2lvbkV2YWx1YXRvciB7XHJcbiAgc3RhdGljIFRSSUdHRVJfVEFTSzogbnVtYmVyID0gNTAwMDAwO1xyXG4gIEV4cFRhc2s6IEd1aVRhc2tCYXNlID0gbnVsbDtcclxuICBwcml2YXRlIEV2ZW50czogYW55ID0gbnVsbDtcclxuXHJcblxyXG4gIGFic3RyYWN0IEhhbmRsZUNvbnRyb2xHb3RvKHRhc2s6IElUYXNrLCBjdHJsOiBNZ0NvbnRyb2xCYXNlLCByb3dObzogbnVtYmVyKTogYm9vbGVhbjtcclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJvdGVjdGVkKVxyXG4gIC8vLyBzZXRzIHRoZSBzdGF0dXMgYmFyIHRleHQgd2l0aCB0aGUgZ2l2ZW4gdGV4dCBhbmRcclxuICAvLy8gc2V0cyB0aGUgcmVzdWx0IHdpdGggdGhlIGxhc3QgdGV4dCB0aGF0IHdhcyBzZXQgdG8gdGhlIHN0YXR1cyBiYXIgYnkgdGhlIHVzZSBvZiB0aGlzIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPmxhc3QgdGV4dCBvZiBzdGF0dXMgYmFyPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXR1c0JhclRleHRcIj50aGUgdGV4dCB0byBiZSBzZXQgYXQgc3RhdHVzIGJhcjwvcGFyYW0+XHJcbiAgZXZhbF9vcF9zdGF0dXNiYXJfc2V0X3RleHQocmVzVmFsOiBFeHBWYWwsIHN0YXR1c0JhclRleHQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5EZWZhdWx0U3RhdHVzTXNnO1xyXG5cclxuICAgIGlmIChNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLkRlZmF1bHRTdGF0dXNNc2cgPT09IG51bGwpIHtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuRGVmYXVsdFN0YXR1c01zZztcclxuICAgIH1cclxuICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIShzdGF0dXNCYXJUZXh0LkF0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgJiYgc3RhdHVzQmFyVGV4dC5BdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpKSB7XHJcbiAgICAgIGlmICghc3RhdHVzQmFyVGV4dC5Jc051bGwpIHtcclxuICAgICAgICBsZXQgdGV4dDogc3RyaW5nID0gc3RhdHVzQmFyVGV4dC5TdHJWYWw7XHJcbiAgICAgICAgbGV0IHRhc2s6IEd1aVRhc2tCYXNlID0gPEd1aVRhc2tCYXNlPnRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpO1xyXG5cclxuICAgICAgICAvLyBJbiBjYXNlIG9mIG5vbiBpbnRlcmFjdGl2ZSB0YXNrcywgaXQgaXMgcG9zc2libGUgdGhhdCB0YXNrIGhhcyBvcGVuIHdpbmRvdyA9IE5vLCBTbyBkaXNwbGF5IHRoZSBzdGF0dXMgYmFyIG1zZyBvbiBmcmFtZSB3aW5kb3cuXHJcbiAgICAgICAgaWYgKHRhc2suZ2V0Rm9ybSgpID09PSBudWxsICYmIE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuRnJhbWVGb3JtICE9PSBudWxsKSB7XHJcbiAgICAgICAgICB0YXNrID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5GcmFtZUZvcm0uZ2V0VGFzaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0YXNrLldyaXRlVG9NZXNzYWdlUGFuZSh0ZXh0KTtcclxuICAgICAgICBNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLkRlZmF1bHRTdGF0dXNNc2cgPSB0ZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgSXNQYXJhbGxlbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gcmV0dXJuIHRoZSBjb250cm9sIG5hbWUgb2YgbGFzdCBjbGlja2VkIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGV2YWxfb3BfY3RybF9uYW1lKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgbGFzdENsaWNrZWRDdHJsTmFtZTogc3RyaW5nID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5MYXN0Q2xpY2tlZEN0cmxOYW1lO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IChOU3RyaW5nLklzTnVsbE9yRW1wdHkobGFzdENsaWNrZWRDdHJsTmFtZSkgPyAnJyA6IGxhc3RDbGlja2VkQ3RybE5hbWUpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJvdGVjdGVkKVxyXG4gIC8vLyBNb3ZlcyB0aGUgY2FyZXQgdG8gc3BlY2lmaWVkIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybE5hbWVcIj50aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyb3dOdW1cIj50aGUgcm93IGluIHRoZSB0YWJsZSAgMCByZXByZXNlbnRzIGN1cnJlbnQgcm93PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImdlbmVyYXRpb25cIj50aGUgdGFzayBnZW5lcmF0aW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJldFZhbFwiPnRoZSByZXN1bHQ8L3BhcmFtPlxyXG4gIGV2YWxfb3BfZ290b0N0cmwoY3RybE5hbWU6IEV4cFZhbCwgcm93TnVtOiBFeHBWYWwsIGdlbmVyYXRpb246IEV4cFZhbCwgcmV0VmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJldFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmV0VmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgIGxldCB0YXNrOiBHdWlUYXNrQmFzZSA9IHRoaXMuR2V0Q29udGV4dFRhc2soZ2VuZXJhdGlvbi5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgaWYgKHRhc2sgPT09IG51bGwgfHwgdGFzay5nZXRGb3JtKCkgPT09IG51bGwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsZXQgaVJvd051bTogbnVtYmVyID0gcm93TnVtLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBzQ3RybE5hbWU6IHN0cmluZyA9IFN0clV0aWwucnRyaW0oY3RybE5hbWUuU3RyVmFsKTtcclxuICAgIGxldCBjdHJsOiBNZ0NvbnRyb2xCYXNlID0gdGFzay5nZXRGb3JtKCkuR2V0Q3RybChzQ3RybE5hbWUpO1xyXG4gICAgcmV0VmFsLkJvb2xWYWwgPSB0aGlzLkhhbmRsZUNvbnRyb2xHb3RvKHRhc2ssIGN0cmwsIGlSb3dOdW0pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIGdldCBjb250ZXh0IHRhc2sgYnkgYSBzcGVjaWZpZWQgZ2VuZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdXJyVGFza1wiPmN1cnJlbnQgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJnZW5lcmF0aW9uXCI+dGFzayBnZW5lcmF0aW9uPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRhc2sgYXQgc3BlY2lmaWVkIGdlbmVyYXRpb248L3JldHVybnM+XHJcbiAgc3RhdGljIEdldENvbnRleHRUYXNrKGN1cnJUYXNrOiBHdWlUYXNrQmFzZSwgZ2VuZXJhdGlvbjogbnVtYmVyKTogR3VpVGFza0Jhc2Uge1xyXG4gICAgbGV0IHRhc2s6IEd1aVRhc2tCYXNlID0gbnVsbDtcclxuICAgIGxldCB0YXNrQmFzZTogR3VpVGFza0Jhc2UgPSA8R3VpVGFza0Jhc2U+IGN1cnJUYXNrLkdldENvbnRleHRUYXNrKCk7XHJcbiAgICBpZiAoZ2VuZXJhdGlvbiA9PT0gR3VpRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgdGFzayA9IHRhc2tCYXNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGdlbmVyYXRpb24gPCB0YXNrQmFzZS5HZXRUYXNrRGVwdGgoKSkge1xyXG4gICAgICAgIHRhc2sgPSA8R3VpVGFza0Jhc2U+dGFza0Jhc2UuR2V0VGFza0FuY2VzdG9yKGdlbmVyYXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJvdGVjdGVkKVxyXG4gIC8vLyBnZXQgY29udGV4dCB0YXNrIGJ5IGEgc3BlY2lmaWVkIGdlbmVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZ2VuZXJhdGlvblwiPnRhc2sgZ2VuZXJhdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0YXNrIGF0IHNwZWNpZmllZCBnZW5lcmF0aW9uPC9yZXR1cm5zPlxyXG4gIEdldENvbnRleHRUYXNrKGdlbmVyYXRpb246IG51bWJlcik6IEd1aVRhc2tCYXNlIHtcclxuICAgIHJldHVybiBHdWlFeHByZXNzaW9uRXZhbHVhdG9yLkdldENvbnRleHRUYXNrKHRoaXMuRXhwVGFzaywgZ2VuZXJhdGlvbik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gQ3JlYXRlIGEgTlVNX1RZUEUgd2l0aCB0aGUgdmFsdWUgb2YgaSBhbmQgc2V0IHRoZSBFeHBWYWwgd2l0aCBpdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsOiBFeHBWYWwsIGk6IG51bWJlciwgYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSk6IHZvaWQge1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhpKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gYXR0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHVibGljKVxyXG4gIC8vLyBzZXQgbnVsbCB2YWx1ZSB0byBFeHByZXNzaW9uIEV2YWx1YXRvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj50byBzZXQgaXQgTlVMTDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhdHRyXCI+YXR0cmlidXRlIG9mIEV4cFZhbHVlPC9wYXJhbT5cclxuICBTZXROVUxMKHJlc1ZhbDogRXhwVmFsLCBhdHRyOiBTdG9yYWdlQXR0cmlidXRlKTogdm9pZCB7XHJcbiAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgIHJlc1ZhbC5BdHRyID0gYXR0cjtcclxuXHJcbiAgICBzd2l0Y2ggKGF0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbnVsbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHZhbGlkYXRlIHZhbHVlIG9mIHRoZSBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN1cnJDdHJsXCI+Y29udHJvbCB3aG9zZSB2YWx1ZSBuZWVkIHRvIGJlIGV2YWx1YXRlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvbGRWYWx1ZVwiPm9sZCB2YWx1ZSBvZiB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdWYWx1ZVwiPm5ldyB2YWx1ZSBvZiB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgR2V0VmFsaWRhdGVkVmFsdWUoY3VyckN0cmw6IE1nQ29udHJvbEJhc2UsIG9sZFZhbHVlOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHZkOiBWYWxpZGF0aW9uRGV0YWlscyA9IGN1cnJDdHJsLmJ1aWxkQ29weVBpY3R1cmUob2xkVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgIHZkLmV2YWx1YXRlKCk7XHJcbiAgICBsZXQgdmFsaWRhdGlvbkZhaWxlZDogYm9vbGVhbiA9IHZkLlZhbGlkYXRpb25GYWlsZWQ7XHJcbiAgICBsZXQgY3RybFZhbHVlOiBzdHJpbmc7XHJcbiAgICBpZiAodmFsaWRhdGlvbkZhaWxlZCkge1xyXG4gICAgICBsZXQgZmllbGQ6IEd1aUZpZWxkQmFzZSA9IGN1cnJDdHJsLmdldEZpZWxkKCk7XHJcbiAgICAgIGN0cmxWYWx1ZSA9ICgoZmllbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSA/IGZpZWxkLmdldENlbGxEZWZ1YWx0VmFsdWUoKSA6IGZpZWxkLmdldERlZmF1bHRWYWx1ZSgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0cmxWYWx1ZSA9IHZkLmdldERpc3BWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0cmxWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgZXhwVmFsdWUgb2YgbmVlZGVkIHR5cGUgLiB0aGUgdmFsdWUgaXMgaW5pdGVkIGJ5IHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPm5lZWQgYmUgZXZhbHVhdGVkL2luaXRpYWxpemVkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGVcIj5vZiByZXNWYWwgKEFscGhhfE51bWVyaWN8TG9naWNhbHxEYXRlfFRpbWV8QmxvYnxWZWN0b3IpPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPnN0cmluZy9oZXhhIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj5mb3Igc3RyaW5nIGV2YWx1YXRpb248L3BhcmFtPlxyXG4gIFNldFZhbChyZXNWYWw6IEV4cFZhbCwgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgdmFsOiBzdHJpbmcsIHBpYzogUElDKTogdm9pZCB7XHJcblxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdHlwZTtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgICByZXNWYWwuSW5jbHVkZUJsb2JQcmVmaXggPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IHR5cGU7XHJcbiAgICAgICAgaWYgKHZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbnVsbDtcclxuICAgICAgICBlbHNlIGlmIChwaWMgPT0gbnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSh2YWwpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSh2YWwsIHBpYywgKHRoaXMuRXhwVGFzaykuZ2V0Q29tcElkeCgpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdHlwZTtcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IERpc3BsYXlDb252ZXJ0b3IudG9Cb29sZWFuKHZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuU2V0TlVMTChyZXNWYWwsIHR5cGUpO1xyXG5cclxuICAgICAgICB0aGlzLkV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKCdFeHByZXNzaW9uRXZhbHVhdG9yLlNldFZhbCgpIHRoZXJlIGlzIG5vIHN1Y2ggdHlwZSA6ICcgKyB0eXBlKTtcclxuXHJcbiAgICAgICAgLy8gQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coXCJFeHByZXNzaW9uRXZhbHVhdG9yLlNldFZhbCgpIHRoZXJlIGlzIG5vIHN1Y2ggdHlwZSA6IFwiICsgdHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gdHJpbXMgYW5kIHJldHVybnMgdGhlIHN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+Y29udGFpbmluZyBzdHJpbmcgdG8gYmUgdHJpbW1lZCAoc3RyVmFsXyBtZW1iZXIgb2YgRXhwVmFsKTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPnRyaW1tZWQgc3RyaW5nPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBleHBfYnVpbGRfc3RyaW5nKHZhbDogRXhwVmFsKTogc3RyaW5nIHtcclxuICAgIGxldCBuYW1lOiBzdHJpbmcgPSAnJztcclxuICAgIGlmICh2YWwuU3RyVmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBsZW46IG51bWJlciA9IDxudW1iZXI+dmFsLlN0clZhbC5sZW5ndGg7XHJcbiAgICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgICAgbmFtZSA9IFN0clV0aWwuWnN0cmluZ01ha2UodmFsLlN0clZhbCwgPG51bWJlcj5sZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY2hlY2tzIGlmIHRoZSBvYmplY3QgaXMgaW5zdGFuY2Ugb2YgRXhwVmFsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvYmpcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIGlzRXhwVmFsKG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRXhwVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcml2YXRlKVxyXG4gIC8vLyBoYW5kbGUgY29udmVyc2lvbnMgYmV0d2VlbiBibG9iIGFuZCB1bmljb2RlL2FscGhhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImV4cGVjdGVkVHlwZVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBCbG9iU3RyaW5nQ29udmVyc2lvbih2YWw6IEV4cFZhbCwgZXhwZWN0ZWRUeXBlOiBTdG9yYWdlQXR0cmlidXRlKTogdm9pZCB7XHJcbiAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKGV4cGVjdGVkVHlwZSkpIHtcclxuICAgICAgaWYgKHZhbC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpIHtcclxuICAgICAgICBsZXQgaW5jbHVkZUJsb2JQcmVmaXg6IGJvb2xlYW4gPSB2YWwuSW5jbHVkZUJsb2JQcmVmaXg7XHJcbiAgICAgICAgaWYgKGluY2x1ZGVCbG9iUHJlZml4KSB7XHJcbiAgICAgICAgICBsZXQgY29udGVudFR5cGU6IHN0cmluZyA9IEJsb2JUeXBlLmdldENvbnRlbnRUeXBlKHZhbC5TdHJWYWwpO1xyXG4gICAgICAgICAgdmFsLlN0clZhbCA9IEJsb2JUeXBlLmdldFN0cmluZyh2YWwuU3RyVmFsKTtcclxuICAgICAgICAgIHZhbC5JbmNsdWRlQmxvYlByZWZpeCA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGNvbnRlbnRUeXBlICE9PSBCbG9iVHlwZS5DT05URU5UX1RZUEVfQklOQVJZICYmIFJ0Zi5pc1J0Zih2YWwuU3RyVmFsKSkge1xyXG4gICAgICAgICAgICB2YWwuU3RyVmFsID0gU3RyVXRpbC5HZXRQbGFpblRleHRmcm9tUnRmKHZhbC5TdHJWYWwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YWwuQXR0ciA9IGV4cGVjdGVkVHlwZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodmFsLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgICAgIGxldCBpbmNsdWRlQmxvYlByZWZpeDI6IGJvb2xlYW4gPSB2YWwuSW5jbHVkZUJsb2JQcmVmaXg7XHJcbiAgICAgICAgICBpZiAoaW5jbHVkZUJsb2JQcmVmaXgyKSB7XHJcbiAgICAgICAgICAgIHZhbC5TdHJWYWwgPSBCbG9iVHlwZS5yZW1vdmVCbG9iUHJlZml4KHZhbC5TdHJWYWwpO1xyXG4gICAgICAgICAgICB2YWwuSW5jbHVkZUJsb2JQcmVmaXggPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhbC5BdHRyID0gZXhwZWN0ZWRUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGV4cGVjdGVkVHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKSB7XHJcbiAgICAgICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZSh2YWwuQXR0cikpIHtcclxuICAgICAgICAgIGxldCBjb250ZW50VHlwZTogc3RyaW5nID0gKHZhbC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKSA/IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9BTlNJIDogQmxvYlR5cGUuQ09OVEVOVF9UWVBFX1VOSUNPREU7XHJcbiAgICAgICAgICB2YWwuU3RyVmFsID0gQmxvYlR5cGUuY3JlYXRlRnJvbVN0cmluZyh2YWwuU3RyVmFsLCBjb250ZW50VHlwZSk7XHJcbiAgICAgICAgICB2YWwuSW5jbHVkZUJsb2JQcmVmaXggPSB0cnVlO1xyXG4gICAgICAgICAgdmFsLkF0dHIgPSBleHBlY3RlZFR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBldmFsX29wX3ppbWVyZWFkKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICBsZXQgdXRpbEltZUpwbjogVXRpbEltZUpwbiA9IE1hbmFnZXIuVXRpbEltZUpwbjtcclxuICAgIGlmICh1dGlsSW1lSnBuICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBzdHJJbWVSZWFkOiBzdHJpbmcgPSB1dGlsSW1lSnBuLlN0ckltZVJlYWQ7XHJcbiAgICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHV0aWxJbWVKcG4uU3RySW1lUmVhZCkpIHtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gc3RySW1lUmVhZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBDb252ZXJ0RXhwVmFsKHZhbDogRXhwVmFsLCBleHBlY3RlZFR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiB2b2lkIHtcclxuICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suU3RvcmFnZUZsZEFscGhhVW5pY29kZU9yQmxvYih2YWwuQXR0ciwgZXhwZWN0ZWRUeXBlKSkge1xyXG4gICAgICB0aGlzLkJsb2JTdHJpbmdDb252ZXJzaW9uKHZhbCwgZXhwZWN0ZWRUeXBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBUaGUgY2xhc3MgaG9sZHMgZGF0YSBvZiBhIGJhc2ljIGVsZW1lbnQgKGNvbnN0YW50IG9yIHZhcmlhYmxlKSB0aGF0XHJcbi8vLyAgIGFwcGVhcnMgb3IgYXJlIHJlc3VsdCBvZiBleGVjdXRpb24gb2Ygb3BlcmF0b3JcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIEV4cFZhbCB7XHJcbiAgQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTtcclxuICBJc051bGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBNZ051bVZhbDogTlVNX1RZUEUgPSBudWxsO1xyXG4gIFN0clZhbDogc3RyaW5nID0gbnVsbDtcclxuICBCb29sVmFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgSW5jbHVkZUJsb2JQcmVmaXg6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBPcmlnaW5hbE51bGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBWZWN0b3JGaWVsZDogR3VpRmllbGRCYXNlID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoKTtcclxuICBjb25zdHJ1Y3RvcihhdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBpc051bGw6IGJvb2xlYW4sIG1nVmFsOiBzdHJpbmcpO1xyXG4gIGNvbnN0cnVjdG9yKGF0dHI/OiBTdG9yYWdlQXR0cmlidXRlLCBpc051bGw/OiBib29sZWFuLCBtZ1ZhbD86IHN0cmluZykge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0b3JfMShhdHRyLCBpc051bGwsIG1nVmFsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICAgIHRoaXMuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMShhdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBpc051bGw6IGJvb2xlYW4sIG1nVmFsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuSW5pdChhdHRyLCBpc051bGwsIG1nVmFsKTtcclxuICB9XHJcblxyXG4gIENvcHkoc3JjOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHRoaXMuQXR0ciA9IHNyYy5BdHRyO1xyXG4gICAgdGhpcy5Cb29sVmFsID0gc3JjLkJvb2xWYWw7XHJcbiAgICB0aGlzLkluY2x1ZGVCbG9iUHJlZml4ID0gc3JjLkluY2x1ZGVCbG9iUHJlZml4O1xyXG4gICAgdGhpcy5Jc051bGwgPSBzcmMuSXNOdWxsO1xyXG4gICAgdGhpcy5NZ051bVZhbCA9IHNyYy5NZ051bVZhbDtcclxuICAgIHRoaXMuU3RyVmFsID0gc3JjLlN0clZhbDtcclxuICAgIHRoaXMuVmVjdG9yRmllbGQgPSBzcmMuVmVjdG9yRmllbGQ7XHJcbiAgICB0aGlzLk9yaWdpbmFsTnVsbCA9IHNyYy5PcmlnaW5hbE51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIG51bGxpZnlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIE51bGxpZnkoKTogdm9pZCB7XHJcbiAgICB0aGlzLkluaXQoU3RvcmFnZUF0dHJpYnV0ZS5OT05FLCB0cnVlLCBudWxsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbml0aWFsaXplXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBJbml0KGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIGlzTnVsbDogYm9vbGVhbiwgbWdWYWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5BdHRyID0gYXR0cjtcclxuICAgIHRoaXMuSXNOdWxsID0gaXNOdWxsO1xyXG5cclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuQXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIHRoaXMuU3RyVmFsID0gbWdWYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgIHRoaXMuU3RyVmFsID0gbWdWYWw7XHJcbiAgICAgICAgdGhpcy5JbmNsdWRlQmxvYlByZWZpeCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIHRoaXMuTWdOdW1WYWwgPSAoKG1nVmFsICE9PSBudWxsKSA/IG5ldyBOVU1fVFlQRShtZ1ZhbCkgOiBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHRoaXMuQm9vbFZhbCA9IChtZ1ZhbCAhPT0gbnVsbCAmJiBtZ1ZhbCA9PT0gJzEnKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OT05FOlxyXG4gICAgICAgIHRoaXMuQm9vbFZhbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU3RyVmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLk1nTnVtVmFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLk9yaWdpbmFsTnVsbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5WZWN0b3JGaWVsZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5JbmNsdWRlQmxvYlByZWZpeCA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRPVE5FVDpcclxuICAgICAgICAvLyBGb3IgZG90bmV0IG9iamVjdHMsIEV4cFZhbCBzaG91bGQgYmUgY29uc3RydWN0ZWQgdXNpbmcgb3ZlcmxvYWRlZCBDb25zdHJ1Y3Rvci5cclxuICAgICAgICAvLyBJZiBpdCBpcyBhIGJsb2JQcmVmaXgsIGl0IHNob3VsZCBiZSBkb25lIGhlcmUuXHJcbiAgICAgICAgdGhpcy5TdHJWYWwgPSBtZ1ZhbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKCdpbiBFeHBWYWwuRXhwVmFsKCkgaWxsZWdhbCBhdHRyaWJ1dGU6IFxcJycgKyB0aGlzLkF0dHIgKyAnXFwnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0cyB0aGUgc3RyaW5nIGZvcm0gb2YgdGhlIHZhbHVlIGluIHRoZSBFeHBWYWwgY2xhc3NcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFRvTWdWYWwoKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgc3RyOiBzdHJpbmc7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLkF0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICBzdHIgPSB0aGlzLlN0clZhbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgc3RyID0gdGhpcy5NZ051bVZhbC50b1hNTHJlY29yZCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgc3RyID0gdGhpcy5Cb29sVmFsXHJcbiAgICAgICAgICA/ICcxJ1xyXG4gICAgICAgICAgOiAnMCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHN0ciA9ICdbaWxsZWdhbCBhdHRyaWJ1dGU6ICcgKyB0aGlzLkF0dHIgKyAnXSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gZW1wdHkgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzRW1wdHlTdHJpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCB0aGlzLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkgJiYgdGhpcy5TdHJWYWwgPT09ICcnO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { XMLConstants } from '@magic-xpa/utils';
|
|
2
|
-
import { MgControlBase } from './MgControlBase';
|
|
3
|
-
import { List, NString } from '@magic-xpa/mscorelib';
|
|
4
|
-
export class ControlTable {
|
|
5
|
-
constructor() {
|
|
6
|
-
this._controls = null;
|
|
7
|
-
this._mgForm = null;
|
|
8
|
-
this._controls = new List();
|
|
9
|
-
}
|
|
10
|
-
fillData(mgForm, parser) {
|
|
11
|
-
this._mgForm = mgForm;
|
|
12
|
-
while (this.initInnerObjects(parser.getNextTag(), parser)) {
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
initInnerObjects(foundTagName, parser) {
|
|
16
|
-
if (foundTagName === null)
|
|
17
|
-
return false;
|
|
18
|
-
if (foundTagName === XMLConstants.MG_TAG_CONTROL) {
|
|
19
|
-
let control = this._mgForm.ConstructMgControl();
|
|
20
|
-
control.fillData(this._mgForm, this._controls.length, parser);
|
|
21
|
-
this._controls.push(control);
|
|
22
|
-
}
|
|
23
|
-
else if (foundTagName === ("/" + XMLConstants.MG_TAG_CONTROL)) {
|
|
24
|
-
parser.setCurrIndex2EndOfTag();
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
else
|
|
28
|
-
return false;
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
getSize() {
|
|
32
|
-
return this._controls.length;
|
|
33
|
-
}
|
|
34
|
-
getCtrl(idxOrCtrlName) {
|
|
35
|
-
if (arguments.length === 1 && (idxOrCtrlName === null || typeof idxOrCtrlName === "undefined" || idxOrCtrlName.constructor === Number)) {
|
|
36
|
-
return this.getCtrl_0(idxOrCtrlName);
|
|
37
|
-
}
|
|
38
|
-
return this.getCtrl_1(idxOrCtrlName);
|
|
39
|
-
}
|
|
40
|
-
getCtrl_0(idx) {
|
|
41
|
-
if (idx < this.getSize())
|
|
42
|
-
return this._controls.get_Item(idx);
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
getCtrl_1(ctrlName) {
|
|
46
|
-
if (!NString.IsNullOrEmpty(ctrlName)) {
|
|
47
|
-
return this._controls.find(ctrl => {
|
|
48
|
-
return (NString.Equals(ctrlName, ctrl.getName(), true) ||
|
|
49
|
-
NString.Equals(ctrlName, ctrl.Name, true));
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
getCtrlByName(ctrlName, ctrlType) {
|
|
55
|
-
if (!NString.IsNullOrEmpty(ctrlName)) {
|
|
56
|
-
return this._controls.find(ctrl => {
|
|
57
|
-
return ((ctrl.Type === ctrlType) && NString.Equals(ctrlName, ctrl.getName(), true) ||
|
|
58
|
-
NString.Equals(ctrlName, ctrl.Name, true));
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
GetControlByIsn(isn) {
|
|
64
|
-
let ctrlByIsn = null;
|
|
65
|
-
ctrlByIsn = this._controls.find(ctrl => {
|
|
66
|
-
return (ctrl.ControlIsn === isn);
|
|
67
|
-
});
|
|
68
|
-
return ctrlByIsn;
|
|
69
|
-
}
|
|
70
|
-
GetControl(predicate) {
|
|
71
|
-
return this._controls.find(predicate);
|
|
72
|
-
}
|
|
73
|
-
filter(callackFuntion) {
|
|
74
|
-
return this._controls.filter(callackFuntion);
|
|
75
|
-
}
|
|
76
|
-
contains(ctrl) {
|
|
77
|
-
let contains = false;
|
|
78
|
-
if (ctrl !== null)
|
|
79
|
-
contains = this._controls.Contains(ctrl);
|
|
80
|
-
return contains;
|
|
81
|
-
}
|
|
82
|
-
addControl(ctrl) {
|
|
83
|
-
this._controls.push(ctrl);
|
|
84
|
-
}
|
|
85
|
-
setControlAt(ctrl, index) {
|
|
86
|
-
if (this._controls.length <= index)
|
|
87
|
-
this._controls.SetSize(index + 1);
|
|
88
|
-
this._controls.set_Item(index, ctrl);
|
|
89
|
-
}
|
|
90
|
-
deleteControlAt(index) {
|
|
91
|
-
this._controls.set_Item(index, null);
|
|
92
|
-
}
|
|
93
|
-
Remove(ctrlOrIdx) {
|
|
94
|
-
if (arguments.length === 1 && (ctrlOrIdx === null || ctrlOrIdx instanceof MgControlBase)) {
|
|
95
|
-
return this.Remove_0(ctrlOrIdx);
|
|
96
|
-
}
|
|
97
|
-
this.Remove_1(ctrlOrIdx);
|
|
98
|
-
}
|
|
99
|
-
Remove_0(ctrl) {
|
|
100
|
-
this._controls.Remove(ctrl);
|
|
101
|
-
return this._controls.Contains(ctrl);
|
|
102
|
-
}
|
|
103
|
-
Remove_1(idx) {
|
|
104
|
-
this._controls.RemoveAt(idx);
|
|
105
|
-
}
|
|
106
|
-
getControlIdx(inCtrl, includeSubs) {
|
|
107
|
-
let counter = 0;
|
|
108
|
-
for (let i = 0; i < this._controls.length; i++) {
|
|
109
|
-
let ctrl = this._controls.get_Item(i);
|
|
110
|
-
if (inCtrl === ctrl)
|
|
111
|
-
return counter;
|
|
112
|
-
else if (includeSubs || !ctrl.isSubform())
|
|
113
|
-
counter++;
|
|
114
|
-
}
|
|
115
|
-
return -1;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbFRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9tYW5hZ2VtZW50L2d1aS9Db250cm9sVGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixZQUFZLEVBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUUxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxNQUFNLE9BQU8sWUFBWTtJQUt2QjtRQUpRLGNBQVMsR0FBd0IsSUFBSSxDQUFDO1FBQ3RDLFlBQU8sR0FBZSxJQUFJLENBQUM7UUFJakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFHRCxRQUFRLENBQUMsTUFBa0IsRUFBRSxNQUFpQjtRQUU1QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7U0FDMUQ7SUFDSCxDQUFDO0lBS08sZ0JBQWdCLENBQUMsWUFBb0IsRUFBRSxNQUFpQjtRQUM5RCxJQUFJLFlBQVksS0FBSyxJQUFJO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1FBRWYsSUFBSSxZQUFZLEtBQUssWUFBWSxDQUFDLGNBQWMsRUFBRTtZQUNoRCxJQUFJLE9BQU8sR0FBa0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQy9ELE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxP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USxDQUFDLEdBQVc7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUtELGFBQWEsQ0FBQyxNQUFxQixFQUFFLFdBQW9CO1FBQ3ZELElBQUksT0FBTyxHQUFXLENBQUMsQ0FBQztRQUN4QixLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEQsSUFBSSxJQUFJLEdBQWtCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELElBQUksTUFBTSxLQUFLLElBQUk7Z0JBQ2pCLE9BQU8sT0FBTyxDQUFDO2lCQUNaLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDdkMsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZ0NvbnRyb2xUeXBlLCBYTUxDb25zdGFudHMsIFhtbFBhcnNlciB9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBNZ0Zvcm1CYXNlIH0gZnJvbSAnLi9NZ0Zvcm1CYXNlJztcclxuaW1wb3J0IHsgTWdDb250cm9sQmFzZSB9IGZyb20gJy4vTWdDb250cm9sQmFzZSc7XHJcbmltcG9ydCB7IExpc3QsIE5TdHJpbmcgfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29udHJvbFRhYmxlIHtcclxuICBwcml2YXRlIF9jb250cm9sczogTGlzdDxNZ0NvbnRyb2xCYXNlPiA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbWdGb3JtOiBNZ0Zvcm1CYXNlID0gbnVsbDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkNUT1I8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLl9jb250cm9scyA9IG5ldyBMaXN0KCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+cGFyc2UgaW5wdXQgc3RyaW5nIGFuZCBmaWxsIGlubmVyIGRhdGE8L3N1bW1hcnk+XHJcbiAgZmlsbERhdGEobWdGb3JtOiBNZ0Zvcm1CYXNlLCBwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuX21nRm9ybSA9IG1nRm9ybTtcclxuICAgIHdoaWxlICh0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLmdldE5leHRUYWcoKSwgcGFyc2VyKSkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlRvIGFsbG9jYXRlIGFuZCBmaWxsIGlubmVyIG9iamVjdHMgb2YgdGhlIGNsYXNzPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm91bmRUYWdOYW1lXCI+bmFtZSBvZiB0YWcsIG9mIG9iamVjdCwgd2hpY2ggbmVlZCBiZSBhbGxvY2F0ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gYm9vbGVhbiBpZiBpbm5lciB0YWdzIGZpbmlzaGVkPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgaW5pdElubmVyT2JqZWN0cyhmb3VuZFRhZ05hbWU6IHN0cmluZywgcGFyc2VyOiBYbWxQYXJzZXIpOiBib29sZWFuIHtcclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0NPTlRST0wpIHtcclxuICAgICAgbGV0IGNvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSB0aGlzLl9tZ0Zvcm0uQ29uc3RydWN0TWdDb250cm9sKCk7XHJcbiAgICAgIGNvbnRyb2wuZmlsbERhdGEodGhpcy5fbWdGb3JtLCB0aGlzLl9jb250cm9scy5sZW5ndGgsIHBhcnNlcik7XHJcbiAgICAgIHRoaXMuX2NvbnRyb2xzLnB1c2goY29udHJvbCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3VuZFRhZ05hbWUgPT09IChcIi9cIiArIFhNTENvbnN0YW50cy5NR19UQUdfQ09OVFJPTCkpIHtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Z2V0IHRoZSBzaXplIG9mIHRoZSB0YWJsZTwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzaXplIG9mIHRoZSB0YWJsZTwvcmV0dXJucz5cclxuICBnZXRTaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbHMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3RybChpZHg6IG51bWJlcik6IE1nQ29udHJvbEJhc2U7XHJcbiAgZ2V0Q3RybChjdHJsTmFtZTogc3RyaW5nKTogTWdDb250cm9sQmFzZTtcclxuICBnZXRDdHJsKGlkeE9yQ3RybE5hbWU6IGFueSk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKGlkeE9yQ3RybE5hbWUgPT09IG51bGwgfHwgdHlwZW9mIGlkeE9yQ3RybE5hbWUgPT09IFwidW5kZWZpbmVkXCIgfHwgaWR4T3JDdHJsTmFtZS5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRDdHJsXzAoaWR4T3JDdHJsTmFtZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDdHJsXzEoaWR4T3JDdHJsTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Z2V0IGNvbnRyb2wgYnkgaXRzIGluZGV4PC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+aXMgdGhlIGluZGV4IG9mIHRoZSBjb250cm9sIGluIHRoZSB0YWJsZTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVxdWVzdGVkIGNvbnRyb2wgb2JqZWN0PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0Q3RybF8wKGlkeDogbnVtYmVyKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICBpZiAoaWR4IDwgdGhpcy5nZXRTaXplKCkpXHJcbiAgICAgIHJldHVybiB0aGlzLl9jb250cm9scy5nZXRfSXRlbShpZHgpO1xyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5nZXQgY29udHJvbCBieSBpdHMgbmFtZTwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxOYW1lXCI+aXMgdGhlIHJlcXVlc3RlZCBjb250cm9scyBuYW1lPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSByZXF1ZXN0ZWQgY29udHJvbCBvYmplY3Q8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRDdHJsXzEoY3RybE5hbWU6IHN0cmluZyk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgaWYgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkoY3RybE5hbWUpKSB7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5fY29udHJvbHMuZmluZChjdHJsID0+IHtcclxuICAgICAgICByZXR1cm4gKE5TdHJpbmcuRXF1YWxzKGN0cmxOYW1lLCBjdHJsLmdldE5hbWUoKSwgdHJ1ZSkgfHxcclxuICAgICAgICAgIE5TdHJpbmcuRXF1YWxzKGN0cmxOYW1lLCBjdHJsLk5hbWUsIHRydWUpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Z2V0IGNvbnRyb2wgKHdoaWNoIGlzIG5vdCB0aGUgZnJhbWUgZm9ybSkgYnkgaXRzIG5hbWU8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsTmFtZVwiPmlzIHRoZSByZXF1ZXN0ZWQgY29udHJvbHMgbmFtZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3RybFR5cGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHJlcXVlc3RlZCBjb250cm9sIG9iamVjdDwvcmV0dXJucz5cclxuICBnZXRDdHJsQnlOYW1lKGN0cmxOYW1lOiBzdHJpbmcsIGN0cmxUeXBlOiBNZ0NvbnRyb2xUeXBlKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICBpZiAoIU5TdHJpbmcuSXNOdWxsT3JFbXB0eShjdHJsTmFtZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xzLmZpbmQoY3RybCA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgoY3RybC5UeXBlID09PSBjdHJsVHlwZSkgJiYgTlN0cmluZy5FcXVhbHMoY3RybE5hbWUsIGN0cmwuZ2V0TmFtZSgpLCB0cnVlKSB8fFxyXG4gICAgICAgICAgTlN0cmluZy5FcXVhbHMoY3RybE5hbWUsIGN0cmwuTmFtZSwgdHJ1ZSkpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCBhIGNvbnRyb2wgYnkgaXRzIElTTlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNuXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldENvbnRyb2xCeUlzbihpc246IG51bWJlcik6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgbGV0IGN0cmxCeUlzbjogTWdDb250cm9sQmFzZSA9IG51bGw7XHJcbiAgICBjdHJsQnlJc24gPSB0aGlzLl9jb250cm9scy5maW5kKGN0cmwgPT4ge1xyXG4gICAgICByZXR1cm4gKGN0cmwuQ29udHJvbElzbiA9PT0gaXNuKVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGN0cmxCeUlzbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2V0IGEgY29udHJvbCBtYXRoY2hpbmcgdGhlIHByZWRpY2F0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicHJlZGljYXRlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldENvbnRyb2wocHJlZGljYXRlOiAodmFsdWU6IE1nQ29udHJvbEJhc2UpID0+IGJvb2xlYW4pOiBNZ0NvbnRyb2xCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl9jb250cm9scy5maW5kKHByZWRpY2F0ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmlsdGVyKGNhbGxhY2tGdW50aW9uOiAoaXRlbSwgaW5kZXgsIGFycmF5KSA9PiBib29sZWFuKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9jb250cm9scy5maWx0ZXIoY2FsbGFja0Z1bnRpb24pO1xyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5yZXR1cm5zIHRydWUgaWYgdGhpcyB0YWJsZSBjb250YWlucyB0aGUgZ2l2ZW4gY29udHJvbDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj50aGUgY29udHJvbCB0byBsb29rIGZvcjwvcGFyYW0+XHJcbiAgY29udGFpbnMoY3RybDogTWdDb250cm9sQmFzZSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNvbnRhaW5zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoY3RybCAhPT0gbnVsbClcclxuICAgICAgY29udGFpbnMgPSB0aGlzLl9jb250cm9scy5Db250YWlucyhjdHJsKTtcclxuICAgIHJldHVybiBjb250YWlucztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5hZGQgYSBjb250cm9sIHRvIHRoZSB0YWJsZTwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj5pcyB0aGUgY29udHJvbCB0byBiZSBhZGRlZDwvcGFyYW0+XHJcbiAgYWRkQ29udHJvbChjdHJsOiBNZ0NvbnRyb2xCYXNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb250cm9scy5wdXNoKGN0cmwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PnNldCBhIGNvbnRyb2wgdG8gYSBjZWxsIGluIHRoZSB0YWJsZTwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj5pcyB0aGUgY29udHJvbCB0byBiZSBhZGRlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbmRleFwiPndoZXJlIHRvIHNldCB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgc2V0Q29udHJvbEF0KGN0cmw6IE1nQ29udHJvbEJhc2UsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9jb250cm9scy5sZW5ndGggPD0gaW5kZXgpXHJcbiAgICAgIHRoaXMuX2NvbnRyb2xzLlNldFNpemUoaW5kZXggKyAxKTtcclxuICAgIHRoaXMuX2NvbnRyb2xzLnNldF9JdGVtKGluZGV4LCBjdHJsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5yZXBsYWNlIGEgY29udHJvbCBpbiB0aGUgY29udHJvbCB0YWJsZSB3aXRoIG51bGw8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbmRleFwiPm9mIGNvbnRyb2wgdG8gYmUgZGVsZXRlZDwvcGFyYW0+XHJcbiAgZGVsZXRlQ29udHJvbEF0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbnRyb2xzLnNldF9JdGVtKGluZGV4LCBudWxsKTtcclxuICB9XHJcblxyXG4gIFJlbW92ZShjdHJsOiBNZ0NvbnRyb2xCYXNlKTogYm9vbGVhbjtcclxuICBSZW1vdmUoaWR4OiBudW1iZXIpO1xyXG4gIFJlbW92ZShjdHJsT3JJZHg6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKGN0cmxPcklkeCA9PT0gbnVsbCB8fCBjdHJsT3JJZHggaW5zdGFuY2VvZiBNZ0NvbnRyb2xCYXNlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5SZW1vdmVfMChjdHJsT3JJZHgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5SZW1vdmVfMShjdHJsT3JJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PnJlbW92ZXMgYSBjb250cm9sIGZyb20gdGhlIHRhYmxlIGFuZCByZXR1cm5zIHRydWUgb24gc3VjY2Vzczwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj50aGUgY29udHJvbCB0byByZW1vdmU8L3BhcmFtPlxyXG4gIHByaXZhdGUgUmVtb3ZlXzAoY3RybDogTWdDb250cm9sQmFzZSk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fY29udHJvbHMuUmVtb3ZlKGN0cmwpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xzLkNvbnRhaW5zKGN0cmwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PnJlbW92ZXMgYSBjb250cm9sIGZyb20gdGhlIHRhYmxlIGJ5IGluZGV4Ljwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPnRoZSBpZHggb2YgdGhlIGNvbnRyb2wgdG8gYmUgcmVtb3ZlZDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBSZW1vdmVfMShpZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY29udHJvbHMuUmVtb3ZlQXQoaWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5DdHJsXCI+dGhlIGNvbnRyb2wgd2hvc2UgaW5kZXggd2UgbmVlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaW5jbHVkZVN1YnNcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gaWR4IG9mIGEgY29udHJvbCBpbiB0aGUgdGFibGUsIGV4Y2x1ZGluZyBzdWJmb3JtcyBjb250cm9sPC9yZXR1cm5zPlxyXG4gIGdldENvbnRyb2xJZHgoaW5DdHJsOiBNZ0NvbnRyb2xCYXNlLCBpbmNsdWRlU3ViczogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBsZXQgY291bnRlcjogbnVtYmVyID0gMDtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9jb250cm9scy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgY3RybDogTWdDb250cm9sQmFzZSA9IHRoaXMuX2NvbnRyb2xzLmdldF9JdGVtKGkpO1xyXG4gICAgICBpZiAoaW5DdHJsID09PSBjdHJsKVxyXG4gICAgICAgIHJldHVybiBjb3VudGVyO1xyXG4gICAgICBlbHNlIGlmIChpbmNsdWRlU3VicyB8fCAhY3RybC5pc1N1YmZvcm0oKSlcclxuICAgICAgICBjb3VudGVyKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19
|