@magic-xpa/engine 4.1200.0-dev4120.19 → 4.1200.0-dev4120.191
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/fesm2022/magic-xpa-engine.mjs +11347 -1307
- package/fesm2022/magic-xpa-engine.mjs.map +1 -1
- package/index.d.ts +4 -0
- package/package.json +5 -7
- package/src/ClientManager.d.ts +2 -0
- package/src/CommandsProcessorBase.d.ts +2 -1
- package/src/CommandsProcessorManager.d.ts +2 -1
- package/src/ConstInterface.d.ts +7 -0
- package/src/bridge/MagicBridge.d.ts +2 -0
- package/src/commands/ClientToServer/CachedFileQueryCommand.d.ts +9 -0
- package/src/commands/ClientToServer/CommandFactory.d.ts +4 -2
- package/src/commands/ClientToServer/ControlItemsRefreshCommand.d.ts +1 -0
- package/src/commands/ClientToServer/FetchDataControlValuesEventCommand.d.ts +1 -0
- package/src/event/EventHandler.d.ts +5 -0
- package/src/event/EventsManager.d.ts +4 -0
- package/src/exp/ExpressionEvaluator.d.ts +5 -0
- package/src/http/HttpManager.d.ts +2 -1
- package/src/http/client/HttpClientAsync.d.ts +2 -2
- package/src/http/client/HttpClientBase.d.ts +3 -3
- package/src/http/client/HttpClientSync.d.ts +2 -2
- package/src/remote/RemoteCommandsProcessor.d.ts +9 -2
- package/src/remote/RemoteControlItemsRefreshCommand.d.ts +1 -0
- package/src/rt/Operation.d.ts +3 -1
- package/src/util/ParamParseResult.d.ts +3 -3
- package/esm2022/index.mjs +0 -188
- package/esm2022/magic-xpa-engine.mjs +0 -2
- package/esm2022/src/AccessHelper.mjs +0 -15
- package/esm2022/src/ClientManager.mjs +0 -420
- package/esm2022/src/CommandsProcessorBase.mjs +0 -56
- package/esm2022/src/CommandsProcessorManager.mjs +0 -26
- package/esm2022/src/CommandsTable.mjs +0 -162
- package/esm2022/src/ConstInterface.mjs +0 -517
- package/esm2022/src/CurrentClientVersion.mjs +0 -2
- package/esm2022/src/FlowMonitorInterface.mjs +0 -16
- package/esm2022/src/GUIManager.mjs +0 -62
- package/esm2022/src/GlobalCommandsManager.mjs +0 -34
- package/esm2022/src/GuiEventsProcessor.mjs +0 -156
- package/esm2022/src/ICommandsTable.mjs +0 -2
- package/esm2022/src/ServerConfig.mjs +0 -122
- package/esm2022/src/bridge/IGuiEvent.mjs +0 -20
- package/esm2022/src/bridge/MagicBridge.mjs +0 -41
- package/esm2022/src/commands/ClientOriginatedCommandTaskTag.mjs +0 -12
- package/esm2022/src/commands/ClientToServer/AddUserLocateDataViewCommand.mjs +0 -9
- package/esm2022/src/commands/ClientToServer/AddUserRangeDataviewCommand.mjs +0 -9
- package/esm2022/src/commands/ClientToServer/AddUserSortDataViewCommand.mjs +0 -9
- package/esm2022/src/commands/ClientToServer/BrowserEscEventCommand.mjs +0 -26
- package/esm2022/src/commands/ClientToServer/ClientOriginatedCommand.mjs +0 -15
- package/esm2022/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +0 -60
- package/esm2022/src/commands/ClientToServer/ColumnSortEventCommand.mjs +0 -29
- package/esm2022/src/commands/ClientToServer/CommandFactory.mjs +0 -261
- package/esm2022/src/commands/ClientToServer/CommandSerializationHelper.mjs +0 -67
- package/esm2022/src/commands/ClientToServer/ComputeEventCommand.mjs +0 -26
- package/esm2022/src/commands/ClientToServer/ContextTerminationEventCommand.mjs +0 -24
- package/esm2022/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs +0 -23
- package/esm2022/src/commands/ClientToServer/ControlItemsRefreshCommand.mjs +0 -8
- package/esm2022/src/commands/ClientToServer/DataViewOutputCommand.mjs +0 -13
- package/esm2022/src/commands/ClientToServer/DataviewCommand.mjs +0 -44
- package/esm2022/src/commands/ClientToServer/EvaluateCommand.mjs +0 -40
- package/esm2022/src/commands/ClientToServer/EventCommand.mjs +0 -43
- package/esm2022/src/commands/ClientToServer/ExecOperCommand.mjs +0 -70
- package/esm2022/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +0 -25
- package/esm2022/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs +0 -11
- package/esm2022/src/commands/ClientToServer/ICommandTaskTag.mjs +0 -2
- package/esm2022/src/commands/ClientToServer/IndexChangeEventCommand.mjs +0 -24
- package/esm2022/src/commands/ClientToServer/IniputForceWriteCommand.mjs +0 -26
- package/esm2022/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs +0 -26
- package/esm2022/src/commands/ClientToServer/QueryCommand.mjs +0 -21
- package/esm2022/src/commands/ClientToServer/RecomputeCommand.mjs +0 -30
- package/esm2022/src/commands/ClientToServer/RefreshEventCommand.mjs +0 -30
- package/esm2022/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +0 -27
- package/esm2022/src/commands/ClientToServer/RollbackEventCommand.mjs +0 -43
- package/esm2022/src/commands/ClientToServer/SelectProgramCommand.mjs +0 -19
- package/esm2022/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs +0 -9
- package/esm2022/src/commands/ClientToServer/SubformOpenEventCommand.mjs +0 -24
- package/esm2022/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +0 -27
- package/esm2022/src/commands/ClientToServer/TransactionCommand.mjs +0 -34
- package/esm2022/src/commands/ClientToServer/UnloadCommand.mjs +0 -18
- package/esm2022/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +0 -18
- package/esm2022/src/commands/DataViewCommandBase.mjs +0 -8
- package/esm2022/src/commands/IClientCommand.mjs +0 -2
- package/esm2022/src/commands/IClientTargetedCommand.mjs +0 -13
- package/esm2022/src/commands/IClientToServerCommandInfo.mjs +0 -2
- package/esm2022/src/commands/ServerToClient/AbortCommand.mjs +0 -65
- package/esm2022/src/commands/ServerToClient/AddLocateCommand.mjs +0 -22
- package/esm2022/src/commands/ServerToClient/AddRangeCommand.mjs +0 -62
- package/esm2022/src/commands/ServerToClient/AddSortCommand.mjs +0 -33
- package/esm2022/src/commands/ServerToClient/ClientRefreshCommand.mjs +0 -25
- package/esm2022/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +0 -24
- package/esm2022/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +0 -45
- package/esm2022/src/commands/ServerToClient/OpenURLCommand.mjs +0 -221
- package/esm2022/src/commands/ServerToClient/ResetLocateCommand.mjs +0 -15
- package/esm2022/src/commands/ServerToClient/ResetRangeCommand.mjs +0 -15
- package/esm2022/src/commands/ServerToClient/ResetSortCommand.mjs +0 -15
- package/esm2022/src/commands/ServerToClient/ResultCommand.mjs +0 -37
- package/esm2022/src/commands/ServerToClient/VerifyCommand.mjs +0 -83
- package/esm2022/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +0 -132
- package/esm2022/src/communications/IConnectionStateManager.mjs +0 -2
- package/esm2022/src/communications/InteractiveCommunicationsFailureHandler.mjs +0 -15
- package/esm2022/src/data/DataSourceIdKey.mjs +0 -3
- package/esm2022/src/data/DataView.mjs +0 -1613
- package/esm2022/src/data/DataViewBase.mjs +0 -4
- package/esm2022/src/data/DataviewManager.mjs +0 -28
- package/esm2022/src/data/DataviewManagerBase.mjs +0 -15
- package/esm2022/src/data/DvCache.mjs +0 -67
- package/esm2022/src/data/Field.mjs +0 -646
- package/esm2022/src/data/FieldBase.mjs +0 -15
- package/esm2022/src/data/FieldsTable.mjs +0 -103
- package/esm2022/src/data/IRecordsTable.mjs +0 -2
- package/esm2022/src/data/Key.mjs +0 -88
- package/esm2022/src/data/Record.mjs +0 -880
- package/esm2022/src/data/RecordOutOfDataViewException.mjs +0 -16
- package/esm2022/src/data/RecordsTable.mjs +0 -267
- package/esm2022/src/data/TaskTransactionManager.mjs +0 -107
- package/esm2022/src/data/XMLBasedDcValuesBuilder.mjs +0 -74
- package/esm2022/src/enums.mjs +0 -24
- package/esm2022/src/env/EnvVariablesTable.mjs +0 -340
- package/esm2022/src/env/Environment.mjs +0 -487
- package/esm2022/src/env/ILanguageData.mjs +0 -2
- package/esm2022/src/env/LanguageData.mjs +0 -227
- package/esm2022/src/env/MirrorString.mjs +0 -67
- package/esm2022/src/event/ActionManager.mjs +0 -91
- package/esm2022/src/event/Event.mjs +0 -1333
- package/esm2022/src/event/EventHandler.mjs +0 -766
- package/esm2022/src/event/EventHandlerPosition.mjs +0 -204
- package/esm2022/src/event/EventsManager.mjs +0 -2988
- package/esm2022/src/event/IEventsManager.mjs +0 -7
- package/esm2022/src/event/RunTimeEvent.mjs +0 -399
- package/esm2022/src/event/RunTimeEventBase.mjs +0 -4
- package/esm2022/src/event/UserEventsTable.mjs +0 -47
- package/esm2022/src/exp/ExpTable.mjs +0 -57
- package/esm2022/src/exp/Expression.mjs +0 -200
- package/esm2022/src/exp/ExpressionDict.mjs +0 -727
- package/esm2022/src/exp/ExpressionEvaluator.mjs +0 -4206
- package/esm2022/src/exp/ExpressionLocalJpn.mjs +0 -314
- package/esm2022/src/exp/GlobalParamsTable.mjs +0 -85
- package/esm2022/src/exp/YesNoExp.mjs +0 -36
- package/esm2022/src/gui/CreatedFormVector.mjs +0 -23
- package/esm2022/src/gui/FormsTable.mjs +0 -66
- package/esm2022/src/gui/MgControl.mjs +0 -363
- package/esm2022/src/gui/MgForm.mjs +0 -1224
- package/esm2022/src/http/HttpManager.mjs +0 -97
- package/esm2022/src/http/client/HttpClientAsync.mjs +0 -68
- package/esm2022/src/http/client/HttpClientBase.mjs +0 -132
- package/esm2022/src/http/client/HttpClientEvents.mjs +0 -39
- package/esm2022/src/http/client/HttpClientSync.mjs +0 -42
- package/esm2022/src/http/client/HttpUtility.mjs +0 -84
- package/esm2022/src/http/client/ICommunicationsFailureHandler.mjs +0 -2
- package/esm2022/src/remote/AddUserLocateRemoteDataViewCommand.mjs +0 -18
- package/esm2022/src/remote/AddUserRangeRemoteDataViewCommand.mjs +0 -18
- package/esm2022/src/remote/AddUserSortRemoteDataViewCommand.mjs +0 -18
- package/esm2022/src/remote/RemoteCommandsProcessor.mjs +0 -883
- package/esm2022/src/remote/RemoteControlItemsRefreshCommand.mjs +0 -25
- package/esm2022/src/remote/RemoteDataViewCommandBase.mjs +0 -24
- package/esm2022/src/remote/RemoteDataViewCommandFactory.mjs +0 -61
- package/esm2022/src/remote/RemoteDataViewCommandUpdateNonModifiable.mjs +0 -16
- package/esm2022/src/remote/RemoteDataviewManager.mjs +0 -17
- package/esm2022/src/remote/RemoteInitDataViewCommand.mjs +0 -11
- package/esm2022/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +0 -17
- package/esm2022/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +0 -13
- package/esm2022/src/remote/ResetUserSortRemoteDataviewCommand.mjs +0 -16
- package/esm2022/src/remote/ServerError.mjs +0 -40
- package/esm2022/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +0 -20
- package/esm2022/src/rt/Argument.mjs +0 -265
- package/esm2022/src/rt/ArgumentsList.mjs +0 -103
- package/esm2022/src/rt/Boundary.mjs +0 -152
- package/esm2022/src/rt/CompMainPrgTable.mjs +0 -63
- package/esm2022/src/rt/DataviewHeaderBase.mjs +0 -98
- package/esm2022/src/rt/DataviewHeaderFactory.mjs +0 -7
- package/esm2022/src/rt/DataviewHeaders.mjs +0 -53
- package/esm2022/src/rt/DataviewHeadersSaxHandler.mjs +0 -38
- package/esm2022/src/rt/ExecutionStack.mjs +0 -94
- package/esm2022/src/rt/ExecutionStackEntry.mjs +0 -17
- package/esm2022/src/rt/HandlersTable.mjs +0 -96
- package/esm2022/src/rt/IDataSourceViewDefinition.mjs +0 -2
- package/esm2022/src/rt/IDataviewHeader.mjs +0 -2
- package/esm2022/src/rt/IResultValue.mjs +0 -2
- package/esm2022/src/rt/LastFocusedManager.mjs +0 -65
- package/esm2022/src/rt/Operation.mjs +0 -735
- package/esm2022/src/rt/OperationTable.mjs +0 -67
- package/esm2022/src/rt/Recompute.mjs +0 -355
- package/esm2022/src/rt/RecomputeTable.mjs +0 -63
- package/esm2022/src/rt/RemoteDataviewHeader.mjs +0 -108
- package/esm2022/src/rt/ResultValue.mjs +0 -10
- package/esm2022/src/rt/TableCache.mjs +0 -177
- package/esm2022/src/rt/TableCacheManager.mjs +0 -67
- package/esm2022/src/rt/Transaction.mjs +0 -53
- package/esm2022/src/security/UserDetails.mjs +0 -71
- package/esm2022/src/tasks/IMGDataCollection.mjs +0 -2
- package/esm2022/src/tasks/MGData.mjs +0 -552
- package/esm2022/src/tasks/MGDataCollection.mjs +0 -252
- package/esm2022/src/tasks/RCTimer.mjs +0 -63
- package/esm2022/src/tasks/RemoteTaskService.mjs +0 -45
- package/esm2022/src/tasks/Task.mjs +0 -2499
- package/esm2022/src/tasks/TaskBase.mjs +0 -83
- package/esm2022/src/tasks/TaskServiceBase.mjs +0 -25
- package/esm2022/src/tasks/TasksTable.mjs +0 -80
- package/esm2022/src/tasks/sort/Sort.mjs +0 -5
- package/esm2022/src/tasks/sort/SortCollection.mjs +0 -67
- package/esm2022/src/util/ConstUtils.mjs +0 -14
- package/esm2022/src/util/FlowMonitorQueue.mjs +0 -451
- package/esm2022/src/util/HeapSort.mjs +0 -70
- package/esm2022/src/util/IMirrorXML.mjs +0 -2
- package/esm2022/src/util/IServerConfig.mjs +0 -2
- package/esm2022/src/util/MgBlockingQueue.mjs +0 -2
- package/esm2022/src/util/MgPriorityBlockingQueue.mjs +0 -74
- package/esm2022/src/util/MgPriorityQueue.mjs +0 -66
- package/esm2022/src/util/ParamParseResult.mjs +0 -8
- package/esm2022/src/util/PrmMap.mjs +0 -153
- package/esm2022/src/util/ReturnResult.mjs +0 -46
- package/esm2022/src/util/ReturnResultBase.mjs +0 -18
- package/esm2022/src/util/Scrambler.mjs +0 -89
- package/esm2022/src/util/UniqueIDUtils.mjs +0 -13
- package/esm2022/src/util/cookie.service.mjs +0 -92
@@ -1,67 +0,0 @@
|
|
1
|
-
import { ApplicationException, Int32, List } from "@magic-xpa/mscorelib";
|
2
|
-
import { Operation } from "./Operation";
|
3
|
-
import { ConstInterface } from "../ConstInterface";
|
4
|
-
export class OperationTable {
|
5
|
-
_operations = new List();
|
6
|
-
_firstBlockOperIdx = Int32.MaxValue;
|
7
|
-
constructor() {
|
8
|
-
}
|
9
|
-
fillData(taskRef, evtHandler, parser) {
|
10
|
-
while (this.initInnerObjects(parser.getNextTag(), taskRef, evtHandler, parser)) {
|
11
|
-
}
|
12
|
-
for (let i = this._firstBlockOperIdx; i < this._operations.length; i = i + 1) {
|
13
|
-
let operation = this._operations.get_Item(i);
|
14
|
-
let operType = operation.getType();
|
15
|
-
if (operType === ConstInterface.MG_OPER_LOOP || operType === ConstInterface.MG_OPER_BLOCK ||
|
16
|
-
operType === ConstInterface.MG_OPER_ELSE) {
|
17
|
-
let operIdx = this.serverId2operIdx(operation.getBlockClose(), i + 1);
|
18
|
-
operation.setBlockClose(operIdx);
|
19
|
-
operIdx = this.serverId2operIdx(operation.getBlockEnd(), operIdx);
|
20
|
-
operation.setBlockEnd(operIdx);
|
21
|
-
}
|
22
|
-
}
|
23
|
-
}
|
24
|
-
initInnerObjects(foundTagName, taskRef, evtHandler, parser) {
|
25
|
-
if (foundTagName != null && foundTagName === (ConstInterface.MG_TAG_OPER)) {
|
26
|
-
let oper = new Operation();
|
27
|
-
oper.fillData(taskRef, evtHandler, parser);
|
28
|
-
this._operations.push(oper);
|
29
|
-
if (this._firstBlockOperIdx === Int32.MaxValue
|
30
|
-
&& (oper.getType() === ConstInterface.MG_OPER_LOOP || oper.getType() === ConstInterface.MG_OPER_BLOCK))
|
31
|
-
this._firstBlockOperIdx = this._operations.length - 1;
|
32
|
-
return true;
|
33
|
-
}
|
34
|
-
return false;
|
35
|
-
}
|
36
|
-
getSize() {
|
37
|
-
return this._operations.length;
|
38
|
-
}
|
39
|
-
getOperation(idx) {
|
40
|
-
if (idx >= 0 && idx < this._operations.length)
|
41
|
-
return this._operations.get_Item(idx);
|
42
|
-
throw new ApplicationException("in OperationTable.getOperation() index out of bounds: " + idx);
|
43
|
-
}
|
44
|
-
serverId2operIdx(id, startFrom) {
|
45
|
-
let operIdx = -1;
|
46
|
-
for (let i = startFrom; i < this._operations.length; i = i + 1) {
|
47
|
-
let operation = this._operations.get_Item(i);
|
48
|
-
if (id === operation.getServerId()) {
|
49
|
-
operIdx = i;
|
50
|
-
break;
|
51
|
-
}
|
52
|
-
}
|
53
|
-
return operIdx;
|
54
|
-
}
|
55
|
-
serverId2FollowingOperIdx(id, startFrom) {
|
56
|
-
let operIdx = -1;
|
57
|
-
for (let i = startFrom; i < this._operations.length; i = i + 1) {
|
58
|
-
let operation = this._operations.get_Item(i);
|
59
|
-
if (id < operation.getServerId()) {
|
60
|
-
operIdx = i;
|
61
|
-
break;
|
62
|
-
}
|
63
|
-
}
|
64
|
-
return operIdx;
|
65
|
-
}
|
66
|
-
}
|
67
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL3J0L09wZXJhdGlvblRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFdkUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUd0QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHakQsTUFBTSxPQUFPLGNBQWM7SUFDakIsV0FBVyxHQUFvQixJQUFJLElBQUksRUFBYSxDQUFDO0lBQ3JELGtCQUFrQixHQUFXLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFFcEQ7SUFDQSxDQUFDO0lBUUQsUUFBUSxDQUFDLE9BQWEsRUFBRSxVQUF3QixFQUFFLE1BQWlCO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1NBQy9FO1FBU0QsS0FBSyxJQUFJLENBQUMsR0FBVyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BGLElBQUksU0FBUyxHQUFjLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hELElBQUksUUFBUSxHQUFXLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUUzQyxJQUFJLFFBQVEsS0FBSyxjQUFjLENBQUMsWUFBWSxJQUFJLFFBQVEsS0FBSyxjQUFjLENBQUMsYUFBYTtnQkFDdkYsUUFBUSxLQUFLLGNBQWMsQ0FBQyxZQUFZLEVBQUU7Z0JBQzFDLElBQUksT0FBTyxHQUFXLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM5RSxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUVqQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbEUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNoQztTQUNGO0lBQ0gsQ0FBQztJQWFPLGdCQUFnQixDQUFDLFlBQW9CLEVBQUUsT0FBYSxFQUFFLFVBQXdCLEVBQUUsTUFBaUI7UUFDdkcsSUFBSSxZQUFZLElBQUksSUFBSSxJQUFJLFlBQVksS0FBSyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN6RSxJQUFJLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU1QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxLQUFLLENBQUMsUUFBUTttQkFDekMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssY0FBYyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssY0FBYyxDQUFDLGFBQWEsQ0FBQztnQkFDdEcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUN4RCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBS0QsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQU9ELFlBQVksQ0FBQyxHQUFXO1FBQ3RCLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO1lBQzNDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxJQUFJLG9CQUFvQixDQUFDLHdEQUF3RCxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFZRCxnQkFBZ0IsQ0FBQyxFQUFVLEVBQUUsU0FBaUI7UUFDNUMsSUFBSSxPQUFPLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFekIsS0FBSyxJQUFJLENBQUMsR0FBVyxTQUFTLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RFLElBQUksU0FBUyxHQUFjLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXhELElBQUksRUFBRSxLQUFLLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDbEMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDWixNQUFNO2FBQ1A7U0FDRjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFZRCx5QkFBeUIsQ0FBQyxFQUFVLEVBQUUsU0FBaUI7UUFDckQsSUFBSSxPQUFPLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFekIsS0FBSyxJQUFJLENBQUMsR0FBVyxTQUFTLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RFLElBQUksU0FBUyxHQUFjLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXhELElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDaEMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDWixNQUFNO2FBQ1A7U0FDRjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBwbGljYXRpb25FeGNlcHRpb24sIEludDMyLCBMaXN0fSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHsgWG1sUGFyc2VyIH0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtPcGVyYXRpb259IGZyb20gXCIuL09wZXJhdGlvblwiO1xyXG5pbXBvcnQge0V2ZW50SGFuZGxlcn0gZnJvbSBcIi4uL2V2ZW50L0V2ZW50SGFuZGxlclwiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gXCIuLi9Db25zdEludGVyZmFjZVwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBPcGVyYXRpb25UYWJsZSB7XHJcbiAgcHJpdmF0ZSBfb3BlcmF0aW9uczogTGlzdDxPcGVyYXRpb24+ID0gbmV3IExpc3Q8T3BlcmF0aW9uPigpO1xyXG4gIHByaXZhdGUgX2ZpcnN0QmxvY2tPcGVySWR4OiBudW1iZXIgPSBJbnQzMi5NYXhWYWx1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKXtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGdW5jdGlvbiBmb3IgZmlsbGluZyBvd24gZmllbGRzLCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlubmVyIG9iamVzY3RzLlxyXG4gIC8vLyAgIFBhcnNpbmcgdGhlIGlucHV0IFN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1JlZlwiPnJlZmVyZW5jZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJldnRIYW5kbGVyXCI+dG8gZXZlbnQgaGFuZGxlcjwvcGFyYW0+XHJcbiAgZmlsbERhdGEodGFza1JlZjogVGFzaywgZXZ0SGFuZGxlcjogRXZlbnRIYW5kbGVyLCBwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgd2hpbGUgKHRoaXMuaW5pdElubmVyT2JqZWN0cyhwYXJzZXIuZ2V0TmV4dFRhZygpLCB0YXNrUmVmLCBldnRIYW5kbGVyLCBwYXJzZXIpKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLyogUUNSIyAxODA1MzUuXHJcbiAgICAgICAgICogU2luY2UgYmxhbmsgb3BlcmF0aW9ucyBhcmUgbm90IHNlbnQgZnJvbSB0aGUgU2VydmVyLCB0aGVyZSBjYW4gYmVcclxuICAgICAgICAgKiBhIG1pc21hdGNoIGluIHRoZSBCbG9ja0Nsb3NlIGFuZCBCbG9ja0VuZCBpZHggYmVjYXVzZSB0aGV5IGNvbnRhaW5cclxuICAgICAgICAgKiB0aGUgc2VydmVySWQuXHJcbiAgICAgICAgICogV2UgbmVlZCB0byB1cGRhdGUgdGhlc2UgaWR4IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgQ2xpZW50LXNpZGUgaWR4XHJcbiAgICAgICAgICovXHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gdGhpcy5fZmlyc3RCbG9ja09wZXJJZHg7IGkgPCB0aGlzLl9vcGVyYXRpb25zLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBvcGVyYXRpb246IE9wZXJhdGlvbiA9IHRoaXMuX29wZXJhdGlvbnMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgIGxldCBvcGVyVHlwZTogbnVtYmVyID0gb3BlcmF0aW9uLmdldFR5cGUoKTtcclxuXHJcbiAgICAgIGlmIChvcGVyVHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9MT09QIHx8IG9wZXJUeXBlID09PSBDb25zdEludGVyZmFjZS5NR19PUEVSX0JMT0NLIHx8XHJcbiAgICAgICAgb3BlclR5cGUgPT09IENvbnN0SW50ZXJmYWNlLk1HX09QRVJfRUxTRSkge1xyXG4gICAgICAgIGxldCBvcGVySWR4OiBudW1iZXIgPSB0aGlzLnNlcnZlcklkMm9wZXJJZHgob3BlcmF0aW9uLmdldEJsb2NrQ2xvc2UoKSwgaSArIDEpO1xyXG4gICAgICAgIG9wZXJhdGlvbi5zZXRCbG9ja0Nsb3NlKG9wZXJJZHgpO1xyXG5cclxuICAgICAgICBvcGVySWR4ID0gdGhpcy5zZXJ2ZXJJZDJvcGVySWR4KG9wZXJhdGlvbi5nZXRCbG9ja0VuZCgpLCBvcGVySWR4KTtcclxuICAgICAgICBvcGVyYXRpb24uc2V0QmxvY2tFbmQob3BlcklkeCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUbyBhbGxvY2F0ZSBhbmQgZmlsbCBpbm5lciBvYmplY3RzIG9mIHRoZSBjbGFzc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmb3VuZFRhZ05hbWVcIj5wb3NzaWJsZSAgdGFnIG5hbWUsIG5hbWUgb2Ygb2JqZWN0LCB3aGljaCBuZWVkIGJlIGFsbG9jYXRlZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWdkYXRhXCI+cmVmZXJlbmNlc1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1wiPmN1cnJlbnRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV2dEhhbmRsZXJcIj50byBldmVudCBoYW5kbGVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBpbml0SW5uZXJPYmplY3RzKGZvdW5kVGFnTmFtZTogU3RyaW5nLCB0YXNrUmVmOiBUYXNrLCBldnRIYW5kbGVyOiBFdmVudEhhbmRsZXIsIHBhcnNlcjogWG1sUGFyc2VyKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZm91bmRUYWdOYW1lICE9IG51bGwgJiYgZm91bmRUYWdOYW1lID09PSAoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX09QRVIpKSB7XHJcbiAgICAgIGxldCBvcGVyID0gbmV3IE9wZXJhdGlvbigpO1xyXG4gICAgICBvcGVyLmZpbGxEYXRhKHRhc2tSZWYsIGV2dEhhbmRsZXIsIHBhcnNlcik7XHJcbiAgICAgIHRoaXMuX29wZXJhdGlvbnMucHVzaChvcGVyKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9maXJzdEJsb2NrT3BlcklkeCA9PT0gSW50MzIuTWF4VmFsdWVcclxuICAgICAgICAmJiAob3Blci5nZXRUeXBlKCkgPT09IENvbnN0SW50ZXJmYWNlLk1HX09QRVJfTE9PUCB8fCBvcGVyLmdldFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9CTE9DSykpXHJcbiAgICAgICAgdGhpcy5fZmlyc3RCbG9ja09wZXJJZHggPSB0aGlzLl9vcGVyYXRpb25zLmxlbmd0aCAtIDE7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgaW4gdGhlIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRTaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3BlcmF0aW9ucy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGFuIG9wZXJhdGlvbiBieSBpdHMgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+dGhlIGluZGV4IG9mIHRoZSBvcGVyYXRpb24gaW4gdGhlIHRhYmxlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgZ2V0T3BlcmF0aW9uKGlkeDogbnVtYmVyKTogT3BlcmF0aW9uIHtcclxuICAgIGlmIChpZHggPj0gMCAmJiBpZHggPCB0aGlzLl9vcGVyYXRpb25zLmxlbmd0aClcclxuICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdGlvbnMuZ2V0X0l0ZW0oaWR4KTtcclxuICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIE9wZXJhdGlvblRhYmxlLmdldE9wZXJhdGlvbigpIGluZGV4IG91dCBvZiBib3VuZHM6IFwiICsgaWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIG9wZXJhdGlvbiBpZHggKGkuZS4gdGhlIHBvc2l0aW9uIGluIHRoZSBPcGVyYXRpb25UYWIpXHJcbiAgLy8vICAgZGVwZW5kaW5nIG9uIHRoZSBzZXJ2ZXJJZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZDpcIj50aGUgc2VydmVySWQgdG8gc2VhcmNoXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGFydEZyb206XCI+dGhlIGlkeCBmcm9tIHdoZXJlIHRoZSBzZWFyY2ggaXMgdG8gYmVnaW5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBvcGVyYXRpb24gaWR4LCBpZiBzZXJ2ZXJJZCBpcyBtYXRjaGVkLiBPdGhlcndpc2UgLTEuXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzZXJ2ZXJJZDJvcGVySWR4KGlkOiBudW1iZXIsIHN0YXJ0RnJvbTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBvcGVySWR4OiBudW1iZXIgPSAtMTtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSBzdGFydEZyb207IGkgPCB0aGlzLl9vcGVyYXRpb25zLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBvcGVyYXRpb246IE9wZXJhdGlvbiA9IHRoaXMuX29wZXJhdGlvbnMuZ2V0X0l0ZW0oaSk7XHJcblxyXG4gICAgICBpZiAoaWQgPT09IG9wZXJhdGlvbi5nZXRTZXJ2ZXJJZCgpKSB7XHJcbiAgICAgICAgb3BlcklkeCA9IGk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvcGVySWR4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgb3BlcmF0aW9uIGlkeCAoaS5lLiB0aGUgcG9zaXRpb24gaW4gdGhlIE9wZXJhdGlvblRhYilcclxuICAvLy8gICBkZXBlbmRpbmcgb24gdGhlIHNlcnZlcklkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkOlwiPnRoZSBzZXJ2ZXJJZCB0byBzZWFyY2hcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXJ0RnJvbTpcIj50aGUgaWR4IGZyb20gd2hlcmUgdGhlIHNlYXJjaCBpcyB0byBiZWdpblxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIG9wZXJhdGlvbiBpZHgsIGlmIHNlcnZlcklkIGlzIG1hdGNoZWQuIE90aGVyd2lzZSAtMS5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHNlcnZlcklkMkZvbGxvd2luZ09wZXJJZHgoaWQ6IG51bWJlciwgc3RhcnRGcm9tOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IG9wZXJJZHg6IG51bWJlciA9IC0xO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IHN0YXJ0RnJvbTsgaSA8IHRoaXMuX29wZXJhdGlvbnMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IG9wZXJhdGlvbjogT3BlcmF0aW9uID0gdGhpcy5fb3BlcmF0aW9ucy5nZXRfSXRlbShpKTtcclxuXHJcbiAgICAgIGlmIChpZCA8IG9wZXJhdGlvbi5nZXRTZXJ2ZXJJZCgpKSB7XHJcbiAgICAgICAgb3BlcklkeCA9IGk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvcGVySWR4O1xyXG4gIH1cclxufVxyXG4iXX0=
|
@@ -1,355 +0,0 @@
|
|
1
|
-
import { PropInterface, PropTable } from "@magic-xpa/gui";
|
2
|
-
import { FieldBase } from "../data/FieldBase";
|
3
|
-
import { List } from "@magic-xpa/mscorelib";
|
4
|
-
import { CommandsProcessorBase_SendingInstruction } from "../CommandsProcessorBase";
|
5
|
-
import { Constants, InternalInterface, Logger, XMLConstants, XmlParser } from "@magic-xpa/utils";
|
6
|
-
import { Record } from "../data/Record";
|
7
|
-
import { CommandFactory } from "../commands/ClientToServer/CommandFactory";
|
8
|
-
import { RemoteCommandsProcessor } from "../remote/RemoteCommandsProcessor";
|
9
|
-
import { DataviewHeaderBase } from "./DataviewHeaderBase";
|
10
|
-
import { FlowMonitorQueue } from "../util/FlowMonitorQueue";
|
11
|
-
import { ConstInterface } from "../ConstInterface";
|
12
|
-
import { Environment } from "../env/Environment";
|
13
|
-
import { AccessHelper } from "../AccessHelper";
|
14
|
-
export var Recompute_RcmpBy;
|
15
|
-
(function (Recompute_RcmpBy) {
|
16
|
-
Recompute_RcmpBy["CLIENT"] = "C";
|
17
|
-
Recompute_RcmpBy["SERVER_ON_CHANGE"] = "O";
|
18
|
-
})(Recompute_RcmpBy || (Recompute_RcmpBy = {}));
|
19
|
-
export class Recompute {
|
20
|
-
_ctrlProps = null;
|
21
|
-
_formProps = null;
|
22
|
-
_isOwnerFld = true;
|
23
|
-
OwnerFld = null;
|
24
|
-
_rcmpOrder = null;
|
25
|
-
_subForms = null;
|
26
|
-
_subFormsOnlyRecomp = false;
|
27
|
-
_hasServerLinksRecomputes = false;
|
28
|
-
RcmpMode = null;
|
29
|
-
Task = null;
|
30
|
-
constructor() {
|
31
|
-
}
|
32
|
-
fillData(dataView, taskRef, parser) {
|
33
|
-
this.Task = taskRef;
|
34
|
-
this._isOwnerFld = true;
|
35
|
-
while (this.initInnerObjects(parser, parser.getNextTag(), dataView)) {
|
36
|
-
}
|
37
|
-
}
|
38
|
-
initInnerObjects(parser, foundTagName, dataView) {
|
39
|
-
switch (foundTagName) {
|
40
|
-
case XMLConstants.MG_TAG_FLD:
|
41
|
-
if (this._isOwnerFld) {
|
42
|
-
this.fillFldField(parser, dataView);
|
43
|
-
this._isOwnerFld = false;
|
44
|
-
}
|
45
|
-
else
|
46
|
-
this.fillFldField(parser, dataView);
|
47
|
-
break;
|
48
|
-
case ConstInterface.MG_TAG_LINK:
|
49
|
-
this.fillLink(parser, dataView);
|
50
|
-
break;
|
51
|
-
case XMLConstants.MG_TAG_CONTROL:
|
52
|
-
if (this._ctrlProps == null)
|
53
|
-
this._ctrlProps = new PropTable();
|
54
|
-
this._ctrlProps.fillDataByExists(this.Task, parser);
|
55
|
-
if (this._ctrlProps.getCtrlRef() != null && this._ctrlProps.getCtrlRef().IsRepeatable && this.OwnerFld.IsVirtual &&
|
56
|
-
!(this.OwnerFld.hasInitExp()))
|
57
|
-
this.OwnerFld.causeTableInvalidation(true);
|
58
|
-
break;
|
59
|
-
case XMLConstants.MG_TAG_FORM_PROPERTIES:
|
60
|
-
if (this._formProps == null)
|
61
|
-
this._formProps = new PropTable();
|
62
|
-
this._formProps.fillDataByExists(this.Task, parser);
|
63
|
-
break;
|
64
|
-
case ConstInterface.MG_TAG_FLD_END:
|
65
|
-
parser.setCurrIndex2EndOfTag();
|
66
|
-
return false;
|
67
|
-
default:
|
68
|
-
Logger.Instance.WriteExceptionToLogWithMsg("There is no such tag in Recompute. Insert else if to Recompute.initInnerObjects for " + foundTagName);
|
69
|
-
return false;
|
70
|
-
}
|
71
|
-
return true;
|
72
|
-
}
|
73
|
-
AddRecomputeItem(item) {
|
74
|
-
if (this._rcmpOrder === null)
|
75
|
-
this._rcmpOrder = new List();
|
76
|
-
this._rcmpOrder.push(item);
|
77
|
-
}
|
78
|
-
fillLink(parser, dataView) {
|
79
|
-
let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());
|
80
|
-
if (endContext !== -1 && endContext < parser.getXMLdata().length) {
|
81
|
-
let tag = parser.getXMLsubstring(endContext);
|
82
|
-
parser.add2CurrIndex(tag.indexOf(ConstInterface.MG_TAG_LINK) + ConstInterface.MG_TAG_LINK.length);
|
83
|
-
let tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
|
84
|
-
for (let j = 0; j < tokensVector.length; j += 2) {
|
85
|
-
let attribute = (tokensVector.get_Item(j));
|
86
|
-
let valueStr = (tokensVector.get_Item(j + 1));
|
87
|
-
if (attribute === XMLConstants.MG_ATTR_ID)
|
88
|
-
this.AddRecomputeItem(dataView.getTask().getDataviewHeaders().getDataviewHeaderById(XmlParser.getInt(valueStr)));
|
89
|
-
else
|
90
|
-
Logger.Instance.WriteExceptionToLogWithMsg("There is no such tag in Recompute class. Insert case to Recompute.fillLink for " + attribute);
|
91
|
-
}
|
92
|
-
parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);
|
93
|
-
return;
|
94
|
-
}
|
95
|
-
else
|
96
|
-
Logger.Instance.WriteExceptionToLogWithMsg("in Recompute.fillLink() out of bounds");
|
97
|
-
}
|
98
|
-
fillFldField(parser, dataView) {
|
99
|
-
let endContext = parser.getXMLdata().indexOf(this._isOwnerFld
|
100
|
-
? XMLConstants.TAG_CLOSE
|
101
|
-
: XMLConstants.TAG_TERM, parser.getCurrIndex());
|
102
|
-
if (endContext !== -1 && endContext < parser.getXMLdata().length) {
|
103
|
-
let tag = parser.getXMLsubstring(endContext);
|
104
|
-
parser.add2CurrIndex(tag.indexOf(XMLConstants.MG_TAG_FLD) + XMLConstants.MG_TAG_FLD.length);
|
105
|
-
let tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
|
106
|
-
this.initElements(tokensVector, dataView);
|
107
|
-
if (this._isOwnerFld) {
|
108
|
-
parser.setCurrIndex(++endContext);
|
109
|
-
return;
|
110
|
-
}
|
111
|
-
parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);
|
112
|
-
return;
|
113
|
-
}
|
114
|
-
Logger.Instance.WriteExceptionToLogWithMsg("in Command.FillData() out of bounds");
|
115
|
-
}
|
116
|
-
initElements(tokensVector, dataView) {
|
117
|
-
for (let j = 0; j < tokensVector.length; j += 2) {
|
118
|
-
let attribute = (tokensVector.get_Item(j));
|
119
|
-
let valueStr = (tokensVector.get_Item(j + 1));
|
120
|
-
switch (attribute) {
|
121
|
-
case XMLConstants.MG_ATTR_ID: {
|
122
|
-
let fldId = XmlParser.getInt(valueStr);
|
123
|
-
let fld = dataView.getField(fldId);
|
124
|
-
if (this._isOwnerFld) {
|
125
|
-
this.OwnerFld = fld;
|
126
|
-
this.OwnerFld.setRecompute(this);
|
127
|
-
}
|
128
|
-
else {
|
129
|
-
fld.setRecomputed();
|
130
|
-
this.AddRecomputeItem(fld);
|
131
|
-
}
|
132
|
-
break;
|
133
|
-
}
|
134
|
-
case ConstInterface.MG_ATTR_RECOMPUTEBY:
|
135
|
-
this.RcmpMode = valueStr[0];
|
136
|
-
break;
|
137
|
-
case ConstInterface.MG_ATTR_SUB_FORM_RCMP:
|
138
|
-
this._subFormsOnlyRecomp = true;
|
139
|
-
break;
|
140
|
-
case ConstInterface.MG_ATTR_HAS_LINK_RECOMPUTES:
|
141
|
-
this._hasServerLinksRecomputes = true;
|
142
|
-
break;
|
143
|
-
case XMLConstants.MG_ATTR_NAME:
|
144
|
-
break;
|
145
|
-
default:
|
146
|
-
Logger.Instance.WriteExceptionToLogWithMsg("There is no such tag in Recompute class. Insert case to Recompute.initElements for " + attribute);
|
147
|
-
break;
|
148
|
-
}
|
149
|
-
}
|
150
|
-
}
|
151
|
-
async execute(rec) {
|
152
|
-
let i;
|
153
|
-
let fld;
|
154
|
-
let cmdsToServer = this.Task.getMGData().CmdsToServer;
|
155
|
-
let cmd;
|
156
|
-
try {
|
157
|
-
rec.setInRecompute(true);
|
158
|
-
this.Task.SetInRecompute(true);
|
159
|
-
this.SetSubformsInRecompute(true);
|
160
|
-
let allowServerRecompute = this._hasServerLinksRecomputes ||
|
161
|
-
(this.Task.getForm().AllowedSubformRecompute && await this.checkRefreshSubForms());
|
162
|
-
if (this.RcmpMode !== Recompute_RcmpBy.CLIENT && allowServerRecompute) {
|
163
|
-
let inClient = this._subFormsOnlyRecomp;
|
164
|
-
this.Task.ExecuteClientSubformRefresh = false;
|
165
|
-
if (inClient) {
|
166
|
-
inClient = await this.Task.prepareCache(true);
|
167
|
-
if (inClient)
|
168
|
-
inClient = await this.Task.testAndSet(true);
|
169
|
-
}
|
170
|
-
if (!inClient) {
|
171
|
-
this.Task.DataView.GetFieldsTab().setServerRcmp(true);
|
172
|
-
cmd = CommandFactory.CreateRecomputeCommand(this.Task.getTaskTag(), this.OwnerFld.getId(), !this.Task.getForm().AllowedSubformRecompute);
|
173
|
-
cmdsToServer.Add(cmd);
|
174
|
-
await RemoteCommandsProcessor.GetInstance().Execute(CommandsProcessorBase_SendingInstruction.TASKS_AND_COMMANDS);
|
175
|
-
}
|
176
|
-
if (this.Task.ExecuteClientSubformRefresh)
|
177
|
-
await this.RefreshSubforms();
|
178
|
-
else {
|
179
|
-
if (await this.recPrefixSubForms())
|
180
|
-
await this.recSuffixSubForms();
|
181
|
-
this.Task.CleanDoSubformPrefixSuffix();
|
182
|
-
}
|
183
|
-
}
|
184
|
-
else {
|
185
|
-
try {
|
186
|
-
FlowMonitorQueue.Instance.addRecompute(this.OwnerFld.getVarName(), this.Task.GetTaskDetails());
|
187
|
-
if (this._formProps != null)
|
188
|
-
await this._formProps.RefreshDisplay(false, false);
|
189
|
-
if (this._ctrlProps != null)
|
190
|
-
await this._ctrlProps.RefreshDisplay(false, false);
|
191
|
-
if (this._rcmpOrder != null) {
|
192
|
-
for (i = 0; i < this._rcmpOrder.length; i++) {
|
193
|
-
if (this._rcmpOrder.get_Item(i) instanceof FieldBase) {
|
194
|
-
fld = this._rcmpOrder.get_Item(i);
|
195
|
-
await this.fldRcmp(fld, true);
|
196
|
-
}
|
197
|
-
else if (this._rcmpOrder.get_Item(i) instanceof DataviewHeaderBase) {
|
198
|
-
let curLnk = this._rcmpOrder.get_Item(i);
|
199
|
-
await curLnk.getLinkedRecord(rec);
|
200
|
-
let linkFields = this.Task.DataView.GetFieldsTab().getLinkFields(curLnk.Id);
|
201
|
-
rec.setInCompute(true);
|
202
|
-
let saveInForceUpdate = rec.InForceUpdate;
|
203
|
-
rec.InForceUpdate = false;
|
204
|
-
for (let j = 0; j < linkFields.length; j++) {
|
205
|
-
await this.fldRcmp(linkFields.get_Item(j), false);
|
206
|
-
rec.clearFlag((linkFields.get_Item(j)).getId(), Record.FLAG_UPDATED);
|
207
|
-
rec.clearFlag((linkFields.get_Item(j)).getId(), Record.FLAG_MODIFIED);
|
208
|
-
rec.clearFlag((linkFields.get_Item(j)).getId(), Record.FLAG_CRSR_MODIFIED);
|
209
|
-
rec.clearHistoryFlag((linkFields.get_Item(j)).getId());
|
210
|
-
}
|
211
|
-
rec.InForceUpdate = saveInForceUpdate;
|
212
|
-
let retFld = curLnk.ReturnField;
|
213
|
-
if (retFld != null)
|
214
|
-
await this.fldRcmp(retFld, false);
|
215
|
-
rec.setInCompute(false);
|
216
|
-
rec.setForceSaveOrg(true);
|
217
|
-
}
|
218
|
-
}
|
219
|
-
}
|
220
|
-
await this.RefreshSubforms();
|
221
|
-
}
|
222
|
-
catch (e) {
|
223
|
-
Logger.Instance.WriteExceptionToLogWithMsg("in Recompute.execute(): " + e.Message);
|
224
|
-
}
|
225
|
-
}
|
226
|
-
this.Task.SetInRecompute(false);
|
227
|
-
this.SetSubformsInRecompute(false);
|
228
|
-
}
|
229
|
-
finally {
|
230
|
-
rec.buildLinksPosStr();
|
231
|
-
rec.setInRecompute(false);
|
232
|
-
}
|
233
|
-
}
|
234
|
-
async RefreshSubforms() {
|
235
|
-
if (this.Task.getForm().AllowedSubformRecompute) {
|
236
|
-
let subformsToRefresh = await this.GetSubformsToRefresh();
|
237
|
-
for (let i = 0; i < subformsToRefresh.length; i++) {
|
238
|
-
let subformTask = subformsToRefresh.get_Item(i);
|
239
|
-
await this.Task.SubformRefresh(subformTask, true);
|
240
|
-
}
|
241
|
-
}
|
242
|
-
}
|
243
|
-
async SetSubformsInRecompute(inRecompute) {
|
244
|
-
let subformsToRefresh = await this.GetSubformsToRefresh();
|
245
|
-
for (let i = 0; i < subformsToRefresh.length; i++) {
|
246
|
-
let subformTask = subformsToRefresh.get_Item(i);
|
247
|
-
subformTask.SetInRecompute(inRecompute);
|
248
|
-
}
|
249
|
-
}
|
250
|
-
async fldRcmp(fld, computeField) {
|
251
|
-
if (fld.IsVirtual
|
252
|
-
|| ((this.Task.getMode() !== Constants.TASK_MODE_QUERY ||
|
253
|
-
Environment.Instance.allowUpdateInQueryMode(this.Task.getCompIdx())))) {
|
254
|
-
if (!fld.isInEvalProcess()) {
|
255
|
-
if (computeField)
|
256
|
-
await fld.compute(true);
|
257
|
-
else
|
258
|
-
await fld.setValueAndStartRecompute(fld.getValue(false), fld.isNull(), true, false, false);
|
259
|
-
await fld.updateDisplay();
|
260
|
-
}
|
261
|
-
}
|
262
|
-
}
|
263
|
-
buildSubFormList() {
|
264
|
-
if (this._subForms === null) {
|
265
|
-
this._subForms = new List();
|
266
|
-
let subTasksTab = this.Task.getSubTasks();
|
267
|
-
if (subTasksTab !== null) {
|
268
|
-
for (let i = 0; i < subTasksTab.getSize(); i = i + 1) {
|
269
|
-
let subForm = subTasksTab.getTask(i);
|
270
|
-
if (subForm.getForm().getSubFormCtrl() !== null && subForm.refreshesOn(this.OwnerFld.getId())) {
|
271
|
-
this._subForms.push(subForm);
|
272
|
-
}
|
273
|
-
}
|
274
|
-
}
|
275
|
-
}
|
276
|
-
}
|
277
|
-
RemoveSubform(subformTask) {
|
278
|
-
this._subForms.Remove(subformTask);
|
279
|
-
}
|
280
|
-
AddSubform(subformTask) {
|
281
|
-
if (this._subForms === null)
|
282
|
-
this._subForms = new List();
|
283
|
-
if (!this._subForms.Contains(subformTask))
|
284
|
-
this._subForms.push(subformTask);
|
285
|
-
}
|
286
|
-
async recSuffixSubForms() {
|
287
|
-
let i;
|
288
|
-
let subForm;
|
289
|
-
let successful = true;
|
290
|
-
let subformCtrl;
|
291
|
-
this.buildSubFormList();
|
292
|
-
for (i = 0; successful && i < this._subForms.length; i++) {
|
293
|
-
subForm = this._subForms.get_Item(i);
|
294
|
-
subformCtrl = subForm.getForm().getSubFormCtrl();
|
295
|
-
if (subForm.isStarted() && !subformCtrl.RefreshOnVisible &&
|
296
|
-
await subformCtrl.checkProp(PropInterface.PROP_TYPE_AUTO_REFRESH, true) && !subForm.InSelect
|
297
|
-
&& subForm.DoSubformPrefixSuffix) {
|
298
|
-
await AccessHelper.eventsManager.handleInternalEventWithTask(subForm, InternalInterface.MG_ACT_REC_SUFFIX);
|
299
|
-
successful = !AccessHelper.eventsManager.GetStopExecutionFlag();
|
300
|
-
}
|
301
|
-
}
|
302
|
-
this.Task.DataView.setPrevCurrRec();
|
303
|
-
return (successful);
|
304
|
-
}
|
305
|
-
async checkRefreshSubForms() {
|
306
|
-
let refresh = !this._subFormsOnlyRecomp;
|
307
|
-
let subformsToRefresh = await this.GetSubformsToRefresh();
|
308
|
-
if (subformsToRefresh.length > 0)
|
309
|
-
refresh = true;
|
310
|
-
return refresh;
|
311
|
-
}
|
312
|
-
async GetSubformsToRefresh() {
|
313
|
-
let subTasks = new List();
|
314
|
-
let subformCtrl;
|
315
|
-
this.buildSubFormList();
|
316
|
-
for (let i = 0; i < this._subForms.length; i++) {
|
317
|
-
let subTask = this._subForms[i];
|
318
|
-
subformCtrl = subTask.getForm().getSubFormCtrl();
|
319
|
-
if (subTask.isStarted() && await subformCtrl.checkProp(PropInterface.PROP_TYPE_AUTO_REFRESH, true) &&
|
320
|
-
!subTask.InSelect && !subTask.InEndTask) {
|
321
|
-
await subformCtrl.checkProp(PropInterface.PROP_TYPE_VISIBLE, true);
|
322
|
-
if (!subformCtrl.isVisible() && !await subformCtrl.checkProp(PropInterface.PROP_TYPE_REFRESH_WHEN_HIDDEN, false))
|
323
|
-
subformCtrl.RefreshOnVisible = true;
|
324
|
-
else
|
325
|
-
subTasks.push(subTask);
|
326
|
-
}
|
327
|
-
}
|
328
|
-
return subTasks;
|
329
|
-
}
|
330
|
-
async recPrefixSubForms() {
|
331
|
-
let i;
|
332
|
-
let subForm;
|
333
|
-
let successful = true;
|
334
|
-
let subformCtrl;
|
335
|
-
this.buildSubFormList();
|
336
|
-
for (i = 0; successful && i < this._subForms.length; i++) {
|
337
|
-
subForm = this._subForms.get_Item(i);
|
338
|
-
subformCtrl = subForm.getForm().getSubFormCtrl();
|
339
|
-
if (subForm.isStarted() && !subformCtrl.RefreshOnVisible
|
340
|
-
&& await subformCtrl.checkProp(PropInterface.PROP_TYPE_AUTO_REFRESH, true)
|
341
|
-
&& !subForm.InSelect && subForm.DoSubformPrefixSuffix) {
|
342
|
-
await AccessHelper.eventsManager.handleInternalEventWithTaskAndSubformRefresh(subForm, InternalInterface.MG_ACT_REC_PREFIX, true);
|
343
|
-
successful = !AccessHelper.eventsManager.GetStopExecutionFlag();
|
344
|
-
}
|
345
|
-
}
|
346
|
-
return successful;
|
347
|
-
}
|
348
|
-
notifyServerOnChange() {
|
349
|
-
return this.RcmpMode === Recompute_RcmpBy.SERVER_ON_CHANGE;
|
350
|
-
}
|
351
|
-
isServerRcmp() {
|
352
|
-
return this.RcmpMode !== Recompute_RcmpBy.CLIENT;
|
353
|
-
}
|
354
|
-
}
|
355
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb21wdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ydC9SZWNvbXB1dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTFDLE9BQU8sRUFBQyx3Q0FBd0MsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBSTFELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE1BQU0sQ0FBTixJQUFZLGdCQUdYO0FBSEQsV0FBWSxnQkFBZ0I7SUFDMUIsZ0NBQVksQ0FBQTtJQUNaLDBDQUFzQixDQUFBO0FBQ3hCLENBQUMsRUFIVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBRzNCO0FBRUQsTUFBTSxPQUFPLFNBQVM7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QUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxXQUFXLEdBQWMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVELElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQjttQkFDbkQsTUFBTyxXQUFXLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUM7bUJBQ3hFLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMscUJBQXFCLEVBQUU7Z0JBQ3ZELE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyw0Q0FBNEMsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2xJLFVBQVUsR0FBRyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUNqRTtTQUNGO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUM7SUFDN0QsQ0FBQztJQUdELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxDQUFDO0lBQ25ELENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UHJvcEludGVyZmFjZSwgUHJvcFRhYmxlfSBmcm9tIFwiQG1hZ2ljLXhwYS9ndWlcIjtcclxuaW1wb3J0IHtGaWVsZEJhc2V9IGZyb20gXCIuLi9kYXRhL0ZpZWxkQmFzZVwiO1xyXG5pbXBvcnQge0xpc3R9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7Q29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbn0gZnJvbSBcIi4uL0NvbW1hbmRzUHJvY2Vzc29yQmFzZVwiO1xyXG5pbXBvcnQge0NvbnN0YW50cywgSW50ZXJuYWxJbnRlcmZhY2UsIExvZ2dlciwgWE1MQ29uc3RhbnRzLCBYbWxQYXJzZXJ9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7UmVjb3JkfSBmcm9tIFwiLi4vZGF0YS9SZWNvcmRcIjtcclxuaW1wb3J0IHtDb21tYW5kc1RhYmxlfSBmcm9tIFwiLi4vQ29tbWFuZHNUYWJsZVwiO1xyXG5pbXBvcnQge0lDbGllbnRDb21tYW5kfSBmcm9tIFwiLi4vY29tbWFuZHMvSUNsaWVudENvbW1hbmRcIjtcclxuaW1wb3J0IHtDb21tYW5kRmFjdG9yeX0gZnJvbSBcIi4uL2NvbW1hbmRzL0NsaWVudFRvU2VydmVyL0NvbW1hbmRGYWN0b3J5XCI7XHJcbmltcG9ydCB7UmVtb3RlQ29tbWFuZHNQcm9jZXNzb3J9IGZyb20gXCIuLi9yZW1vdGUvUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3JcIjtcclxuaW1wb3J0IHtEYXRhdmlld0hlYWRlckJhc2V9IGZyb20gXCIuL0RhdGF2aWV3SGVhZGVyQmFzZVwiO1xyXG5pbXBvcnQge0Zsb3dNb25pdG9yUXVldWV9IGZyb20gXCIuLi91dGlsL0Zsb3dNb25pdG9yUXVldWVcIjtcclxuaW1wb3J0IHtGaWVsZHNUYWJsZUV4dCBhcyBGaWVsZHNUYWJsZSB9IGZyb20gXCIuLi9kYXRhL0ZpZWxkc1RhYmxlXCI7XHJcbmltcG9ydCB7VGFza3NUYWJsZX0gZnJvbSBcIi4uL3Rhc2tzL1Rhc2tzVGFibGVcIjtcclxuaW1wb3J0IHtNZ0NvbnRyb2x9IGZyb20gXCIuLi9ndWkvTWdDb250cm9sXCI7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gXCIuLi9Db25zdEludGVyZmFjZVwiO1xyXG5pbXBvcnQge0RhdGFWaWV3fSBmcm9tIFwiLi4vZGF0YS9EYXRhVmlld1wiO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gXCIuLi9lbnYvRW52aXJvbm1lbnRcIjtcclxuaW1wb3J0IHsgQWNjZXNzSGVscGVyIH0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5cclxuZXhwb3J0IGVudW0gUmVjb21wdXRlX1JjbXBCeSB7XHJcbiAgQ0xJRU5UID0gJ0MnLFxyXG4gIFNFUlZFUl9PTl9DSEFOR0UgPSAnTydcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlY29tcHV0ZSB7XHJcbiAgcHJpdmF0ZSBfY3RybFByb3BzOiBQcm9wVGFibGUgPSBudWxsOyAvLyBhZmZlY3RlZCBjb250cm9sIHByb3BlcnRpZXNcclxuICBwcml2YXRlIF9mb3JtUHJvcHM6IFByb3BUYWJsZSA9IG51bGw7IC8vIGFmZmVjdGVkIGZvcm0gcHJvcGVydGllc1xyXG4gIHByaXZhdGUgX2lzT3duZXJGbGQ6IGJvb2xlYW4gPSB0cnVlOyAvLyBkZW5vdGVzIGlmIHRoZSBjdXJyZW50IHBhcnNlZCBmaWVsZCB0YWcgaXMgdGhlIG93bmVyIGZpZWxkXHJcbiAgT3duZXJGbGQ6IEZpZWxkQmFzZSA9IG51bGw7IC8vIHRoZSBmaWVsZCB0aGF0IG93bnMgdGhpcyByZWNvbXB1dGUgc3RydWN0dXJlXHJcblxyXG4gIHByaXZhdGUgX3JjbXBPcmRlcjogTGlzdDxGaWVsZEJhc2UgfCBEYXRhdmlld0hlYWRlckJhc2U+ID0gbnVsbDsgLy8gYWZmZWN0ZWQgZmllbGRzIGFuZCBsaW5rcy4gQ2FuJ3QgdXNlIExpc3Q8VD4gLSBob2xkcyBib3RoIGZpZWxkcyBhbmQgbGlua3NcclxuICBwcml2YXRlIF9zdWJGb3JtczogTGlzdDxUYXNrPiA9IG51bGw7IC8vIHN1YmZvcm1zICh0YXNrcykgYWZmZWN0ZWQgYnkgdGhpcyByZWNvbXB1dGVcclxuICBwcml2YXRlIF9zdWJGb3Jtc09ubHlSZWNvbXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9oYXNTZXJ2ZXJMaW5rc1JlY29tcHV0ZXM6IGJvb2xlYW4gPSBmYWxzZTsgLy8gdHJ1ZSwgaWYgdGhlIGZpZWxkIGhhcyBhbnkgbGluayByZWNvbXB1dGVzIGFuZCBpdCBpcyBhIHNlcnZlciByZWNvbXB1dGVcclxuICBSY21wTW9kZTogUmVjb21wdXRlX1JjbXBCeSA9IG51bGw7ICAvLyBXaG8gKGFuZCB3aGVuKSBwZXJmb3JtcyByY21wIChieSBjbGllbnQsXHJcblxyXG4gIFRhc2s6IFRhc2sgPSBudWxsOyAvLyBhIHJlZmVyZW5jZSB0byB0aGUgdGFzayBvZiB0aGlzIFJlY29tcHV0ZVxyXG5cclxuICBjb25zdHJ1Y3Rvcigpe1xyXG4gIH1cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdG8gZmlsbCBhbGwgcmVsZXZhbnQgZGF0YSBmb3IgPGZsZCAuLi4+IC4uLjwvZmxkPiB0YWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0YVZpZXdcIj5yZWZlcmVuY2UgdG8gYWxsIERhdGFWaWV3IG9iamVjdCwgd2hpY2ggY29uc2lzdCByZWxldmFudCBmaWVsZHMgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tSZWZcIj50byBwYXJlbnQgdGFzaywgd2hpY2ggbmVlZCBiZSBpbml0aWFsaXplZCBpbiBDb250cm9sVGFibGUuQ29udHJvbC50YXNrIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBpbmRleCBvZiB0aGUgZW5kIG9mIGN1cnJlbnQgPGZsZCAuLi4+PT4gPC9mbGQ+IDwvcmV0dXJucz5cclxuICBmaWxsRGF0YShkYXRhVmlldzogRGF0YVZpZXcsIHRhc2tSZWY6IFRhc2ssIHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5UYXNrID0gdGFza1JlZjtcclxuICAgIHRoaXMuX2lzT3duZXJGbGQgPSB0cnVlOyAvLyBzdGFydCBvZiBuZXcgPGZsZD4gdGFnXHJcbiAgICB3aGlsZSAodGhpcy5pbml0SW5uZXJPYmplY3RzKHBhcnNlciwgcGFyc2VyLmdldE5leHRUYWcoKSwgZGF0YVZpZXcpKSB7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRmlsbCBpbm5lciBtZW1iZXJzIGFuZCBuZWVkZWQgbGlua3MgZm9yIHRoZSBjdXJyZW50ICdmbGQnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIigoRGF0YVZpZXcpZGF0YVZpZXcpXCI+cmVmZXJlbmNlIHRvIGFsbCBEYXRhVmlldyBvYmplY3QsIHdoaWNoIGNvbnNpc3QgcmVsZXZhbnQgZmllbGRzIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBpbml0SW5uZXJPYmplY3RzKHBhcnNlcjogWG1sUGFyc2VyLCBmb3VuZFRhZ05hbWU6IHN0cmluZywgZGF0YVZpZXc6IERhdGFWaWV3KTogYm9vbGVhbiB7XHJcbiAgICBzd2l0Y2ggKGZvdW5kVGFnTmFtZSkge1xyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19UQUdfRkxEOlxyXG4gICAgICAgIC8vIGluaXQgPGZsZCBpZCA9IHJlY29tcHV0ZV9ieT0+IGZpcnN0IHRpbWUsIGluaXQgcmVmZXJlbmNlIGJ5IGlkXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzT3duZXJGbGQpIHtcclxuICAgICAgICAgIHRoaXMuZmlsbEZsZEZpZWxkKHBhcnNlciwgZGF0YVZpZXcpO1xyXG4gICAgICAgICAgdGhpcy5faXNPd25lckZsZCA9IGZhbHNlOyAvLyBtdXN0IHRvIGJlIGFmdGVyIEZpbGxGbGRGaWVsZFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLmZpbGxGbGRGaWVsZChwYXJzZXIsIGRhdGFWaWV3KTsgLy8gaXQncyBub3QgbmVlZCAoKERhdGFWaWV3KWRhdGFWaWV3KSwgaXQncyBub3QgZmlyc3QgPGZsZCA+XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19MSU5LOlxyXG4gICAgICAgIHRoaXMuZmlsbExpbmsocGFyc2VyLCBkYXRhVmlldyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19UQUdfQ09OVFJPTDpcclxuICAgICAgICBpZiAodGhpcy5fY3RybFByb3BzID09IG51bGwpXHJcbiAgICAgICAgICB0aGlzLl9jdHJsUHJvcHMgPSBuZXcgUHJvcFRhYmxlKCk7XHJcblxyXG4gICAgICAgIC8vIGZpbGwgdGhlIHByb3AgdGFibGUgdXNpbmcgdGhlIGV4aXN0aW5nIHByb3BlcnRpZXNcclxuICAgICAgICB0aGlzLl9jdHJsUHJvcHMuZmlsbERhdGFCeUV4aXN0cyh0aGlzLlRhc2ssIHBhcnNlcik7XHJcblxyXG4gICAgICAgIC8vIGlmIHZpcnR1YWwgZmllbGQgY2F1c2VzIHJlY29tcHV0ZSBvZiByZXBlYXRhYmxlIGNvbnRyb2xcclxuICAgICAgICBpZiAodGhpcy5fY3RybFByb3BzLmdldEN0cmxSZWYoKSAhPSBudWxsICYmIHRoaXMuX2N0cmxQcm9wcy5nZXRDdHJsUmVmKCkuSXNSZXBlYXRhYmxlICYmIHRoaXMuT3duZXJGbGQuSXNWaXJ0dWFsICYmXHJcbiAgICAgICAgICAhKHRoaXMuT3duZXJGbGQuaGFzSW5pdEV4cCgpKSlcclxuICAgICAgICAgIHRoaXMuT3duZXJGbGQuY2F1c2VUYWJsZUludmFsaWRhdGlvbih0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX1RBR19GT1JNX1BST1BFUlRJRVM6XHJcbiAgICAgICAgaWYgKHRoaXMuX2Zvcm1Qcm9wcyA9PSBudWxsKVxyXG4gICAgICAgICAgdGhpcy5fZm9ybVByb3BzID0gbmV3IFByb3BUYWJsZSgpO1xyXG5cclxuICAgICAgICAvLyBmaWxsIHRoZSBwcm9wIHRhYmxlIHVzaW5nIHRoZSBleGlzdGluZyBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdGhpcy5fZm9ybVByb3BzLmZpbGxEYXRhQnlFeGlzdHModGhpcy5UYXNrLCBwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfRkxEX0VORDpcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJUaGVyZSBpcyBubyBzdWNoIHRhZyBpbiBSZWNvbXB1dGUuIEluc2VydCBlbHNlIGlmIHRvIFJlY29tcHV0ZS5pbml0SW5uZXJPYmplY3RzIGZvciBcIiArIGZvdW5kVGFnTmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIEFkZFJlY29tcHV0ZUl0ZW0oaXRlbTogRmllbGRCYXNlIHwgRGF0YXZpZXdIZWFkZXJCYXNlKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcmNtcE9yZGVyID09PSBudWxsKVxyXG4gICAgICB0aGlzLl9yY21wT3JkZXIgPSBuZXcgTGlzdCgpO1xyXG4gICAgdGhpcy5fcmNtcE9yZGVyLnB1c2goaXRlbSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZmlsbCB0aGUgcmVjb21wdXRlZCBsaW5rIGRhdGEgKG9ubHkgaWQpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGZpbGxMaW5rKHBhcnNlcjogWG1sUGFyc2VyLCBkYXRhVmlldzogRGF0YVZpZXcpOiB2b2lkIHtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19URVJNLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgaWYgKGVuZENvbnRleHQgIT09IC0xICYmIGVuZENvbnRleHQgPCBwYXJzZXIuZ2V0WE1MZGF0YSgpLmxlbmd0aCkge1xyXG4gICAgICAvLyBsYXN0IHBvc2l0aW9uIG9mIGl0cyB0YWdcclxuICAgICAgbGV0IHRhZzogU3RyaW5nID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KTtcclxuICAgICAgcGFyc2VyLmFkZDJDdXJySW5kZXgodGFnLmluZGV4T2YoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0xJTkspICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0xJTksubGVuZ3RoKTtcclxuXHJcbiAgICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KSwgWE1MQ29uc3RhbnRzLlhNTF9BVFRSX0RFTElNKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgICBsZXQgYXR0cmlidXRlOiBzdHJpbmcgPSAodG9rZW5zVmVjdG9yLmdldF9JdGVtKGopKTtcclxuICAgICAgICBsZXQgdmFsdWVTdHI6IHN0cmluZyA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaiArIDEpKTtcclxuXHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gWE1MQ29uc3RhbnRzLk1HX0FUVFJfSUQpXHJcbiAgICAgICAgICB0aGlzLkFkZFJlY29tcHV0ZUl0ZW0oKDxUYXNrPmRhdGFWaWV3LmdldFRhc2soKSkuZ2V0RGF0YXZpZXdIZWFkZXJzKCkuZ2V0RGF0YXZpZXdIZWFkZXJCeUlkKFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpKSk7XHJcblxyXG4gICAgICAgIGVsc2UgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiVGhlcmUgaXMgbm8gc3VjaCB0YWcgaW4gUmVjb21wdXRlIGNsYXNzLiBJbnNlcnQgY2FzZSB0byBSZWNvbXB1dGUuZmlsbExpbmsgZm9yIFwiICsgYXR0cmlidXRlKTtcclxuICAgICAgfVxyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQgKyBYTUxDb25zdGFudHMuVEFHX1RFUk0ubGVuZ3RoKTsgLy8gdG8gZGVsZXRlIFwiLz5cIiB0b29cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBSZWNvbXB1dGUuZmlsbExpbmsoKSBvdXQgb2YgYm91bmRzXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEluaXQgUmVjb21wdXRlQnkgbWVtYmVyIGFuZCBpbml0IHJlZmVyZW5jZSBmcm9tIHRoZSBGaWVsZFJvb3QgdG8gdGhlIFJlY29tcHV0ZSBvYmplY3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwieG1sUGFyc2VyLmdldFhNTGRhdGEoKVwiPiwgaW5wdXQgc3RyaW5nIGZ1bGwgWE1MLmlubmVyVGV4dCA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwieG1sUGFyc2VyLmdldEN1cnJJbmRleCgpXCI+LCBpbmRleCBvZiBzdGFydCBmaXJzdCA8ZmxkIC4uLj4gdGFnIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCIoKERhdGFWaWV3KWRhdGFWaWV3KVwiPnJlZmVyZW5jZSB0byBhbGwgRGF0YVZpZXcgb2JqZWN0LCB3aGljaCBjb25zaXN0IHJlbGV2YW50IGZpZWxkcyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gaW5kZXggb2YgZW5kIG9mIDxmbGQgLi4uPiB0YWcgPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZmlsbEZsZEZpZWxkKHBhcnNlcjogWG1sUGFyc2VyLCBkYXRhVmlldzogRGF0YVZpZXcpOiB2b2lkIHtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YodGhpcy5faXNPd25lckZsZFxyXG4gICAgICA/IFhNTENvbnN0YW50cy5UQUdfQ0xPU0VcclxuICAgICAgOiBYTUxDb25zdGFudHMuVEFHX1RFUk0sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcblxyXG4gICAgaWYgKGVuZENvbnRleHQgIT09IC0xICYmIGVuZENvbnRleHQgPCBwYXJzZXIuZ2V0WE1MZGF0YSgpLmxlbmd0aCkge1xyXG5cclxuICAgICAgLy8gbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IFN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKFhNTENvbnN0YW50cy5NR19UQUdfRkxEKSArIFhNTENvbnN0YW50cy5NR19UQUdfRkxELmxlbmd0aCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksXHJcbiAgICAgICAgWE1MQ29uc3RhbnRzLlhNTF9BVFRSX0RFTElNKTtcclxuICAgICAgdGhpcy5pbml0RWxlbWVudHModG9rZW5zVmVjdG9yLCBkYXRhVmlldyk7XHJcbiAgICAgIGlmICh0aGlzLl9pc093bmVyRmxkKSB7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleCgrK2VuZENvbnRleHQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQgKyBYTUxDb25zdGFudHMuVEFHX1RFUk0ubGVuZ3RoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gQ29tbWFuZC5GaWxsRGF0YSgpIG91dCBvZiBib3VuZHNcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTWFrZSBpbml0aWFsaXphdGlvbiBvZiBwcml2YXRlIGVsZW1lbnRzIGJ5IGZvdW5kIHRva2Vuc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0b2tlbnNWZWN0b3JcIj5mb3VuZCB0b2tlbnMsIHdoaWNoIGNvbnNpc3QgYXR0cmlidXRlL3ZhbHVlIG9mIGV2ZXJ5IGZvdW5kIGVsZW1lbnQgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIigoRGF0YVZpZXcpZGF0YVZpZXcpXCI+cmVmZXJlbmNlIHRvIGZpZWxkIG9iamVjdHMsIGZvciA8ZmxkIGlkID0gLi4uPlxyXG4gIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRGF0YVZpZXcpZGF0YVZpZXcpPT1udWxsPT4gaXQncyBmaXJzdCBmb3VuZCBmaWVsZCwgbmVlZCB0byBpbml0IHJlZmVyZW5jZVxyXG4gIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIEZpZWxkUm9vdFxyXG4gIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRGF0YVZpZXcpZGF0YVZpZXcpIT1udWxsPT4gYWRkIHRoZSBkYXRhIHRvIGN1cnJpZW50IFJlY29yZCwgaXQncyBub3QgZmlyc3QgPGZsZD5cclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGluaXRFbGVtZW50cyh0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiwgZGF0YVZpZXc6IERhdGFWaWV3KTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgdG9rZW5zVmVjdG9yLmxlbmd0aDsgaiArPSAyKSB7XHJcbiAgICAgIGxldCBhdHRyaWJ1dGU6IHN0cmluZyA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaikpO1xyXG4gICAgICBsZXQgdmFsdWVTdHI6IHN0cmluZyA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaiArIDEpKTtcclxuXHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9JRDoge1xyXG4gICAgICAgICAgbGV0IGZsZElkOiBudW1iZXIgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGxldCBmbGQgPSA8RmllbGRCYXNlPmRhdGFWaWV3LmdldEZpZWxkKGZsZElkKTtcclxuICAgICAgICAgIGlmICh0aGlzLl9pc093bmVyRmxkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuT3duZXJGbGQgPSBmbGQ7XHJcbiAgICAgICAgICAgIHRoaXMuT3duZXJGbGQuc2V0UmVjb21wdXRlKHRoaXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZsZC5zZXRSZWNvbXB1dGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuQWRkUmVjb21wdXRlSXRlbShmbGQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRUNPTVBVVEVCWTpcclxuICAgICAgICAgIHRoaXMuUmNtcE1vZGUgPSA8UmVjb21wdXRlX1JjbXBCeT52YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1VCX0ZPUk1fUkNNUDpcclxuICAgICAgICAgIHRoaXMuX3N1YkZvcm1zT25seVJlY29tcCA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0hBU19MSU5LX1JFQ09NUFVURVM6XHJcbiAgICAgICAgICB0aGlzLl9oYXNTZXJ2ZXJMaW5rc1JlY29tcHV0ZXMgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfTkFNRTpcclxuICAgICAgICAgIC8qIGlnbm9yZSB0aGUgbmFtZSAqL1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJUaGVyZSBpcyBubyBzdWNoIHRhZyBpbiBSZWNvbXB1dGUgY2xhc3MuIEluc2VydCBjYXNlIHRvIFJlY29tcHV0ZS5pbml0RWxlbWVudHMgZm9yIFwiICsgYXR0cmlidXRlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSByZWNvbXB1dGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVjXCI+dGhlIHJlY29yZCBvbiB3aGljaCB0aGUgcmVjb21wdXRlIGlzIGV4ZWN1dGVkPC9wYXJhbT5cclxuICBwdWJsaWMgYXN5bmMgZXhlY3V0ZShyZWM6IFJlY29yZCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBmbGQ6IEZpZWxkQmFzZTtcclxuICAgIGxldCBjbWRzVG9TZXJ2ZXI6IENvbW1hbmRzVGFibGUgPSA8Q29tbWFuZHNUYWJsZT50aGlzLlRhc2suZ2V0TUdEYXRhKCkuQ21kc1RvU2VydmVyO1xyXG4gICAgbGV0IGNtZDogSUNsaWVudENvbW1hbmQ7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgcmVjLnNldEluUmVjb21wdXRlKHRydWUpO1xyXG4gICAgICB0aGlzLlRhc2suU2V0SW5SZWNvbXB1dGUgKHRydWUpO1xyXG4gICAgICB0aGlzLlNldFN1YmZvcm1zSW5SZWNvbXB1dGUodHJ1ZSk7XHJcbiAgICAgIGxldCBhbGxvd1NlcnZlclJlY29tcHV0ZTogYm9vbGVhbiA9IHRoaXMuX2hhc1NlcnZlckxpbmtzUmVjb21wdXRlcyB8fFxyXG4gICAgICAgICAgKHRoaXMuVGFzay5nZXRGb3JtKCkuQWxsb3dlZFN1YmZvcm1SZWNvbXB1dGUgJiYgYXdhaXQgdGhpcy5jaGVja1JlZnJlc2hTdWJGb3JtcygpKTtcclxuXHJcbiAgICAgIC8vIFNFUlZFUlxyXG4gICAgICBpZiAodGhpcy5SY21wTW9kZSAhPT0gUmVjb21wdXRlX1JjbXBCeS5DTElFTlQgJiYgYWxsb3dTZXJ2ZXJSZWNvbXB1dGUpIHtcclxuICAgICAgICBsZXQgaW5DbGllbnQ6IGJvb2xlYW4gPSB0aGlzLl9zdWJGb3Jtc09ubHlSZWNvbXA7XHJcbiAgICAgICAgdGhpcy5UYXNrLkV4ZWN1dGVDbGllbnRTdWJmb3JtUmVmcmVzaCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBpZiB0aGUgcmVjb21wdXRlIGlzIG5vdCBvbmx5IGR1ZSB0byBzdWItZm9ybXMgZ28gdG8gc2VydmVyXHJcbiAgICAgICAgaWYgKGluQ2xpZW50KSB7XHJcbiAgICAgICAgICBpbkNsaWVudCA9IGF3YWl0IHRoaXMuVGFzay5wcmVwYXJlQ2FjaGUodHJ1ZSk7XHJcbiAgICAgICAgICAvLyBpZiBhbGwgc3ViLWZvcm0gYXJlIG5vdCB1cGRhdGVcclxuICAgICAgICAgIGlmIChpbkNsaWVudClcclxuICAgICAgICAgICAgaW5DbGllbnQgPSBhd2FpdCB0aGlzLlRhc2sudGVzdEFuZFNldCh0cnVlKTsgLy8gdHJ5IHRvIHRha2UgZGF0YXZpZXdzIGZyb20gY2FjaGVcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpbkNsaWVudCkge1xyXG4gICAgICAgICAgKDxGaWVsZHNUYWJsZT50aGlzLlRhc2suRGF0YVZpZXcuR2V0RmllbGRzVGFiKCkpLnNldFNlcnZlclJjbXAodHJ1ZSk7XHJcbiAgICAgICAgICBjbWQgPSBDb21tYW5kRmFjdG9yeS5DcmVhdGVSZWNvbXB1dGVDb21tYW5kKHRoaXMuVGFzay5nZXRUYXNrVGFnKCksIHRoaXMuT3duZXJGbGQuZ2V0SWQoKSwgIXRoaXMuVGFzay5nZXRGb3JtKCkuQWxsb3dlZFN1YmZvcm1SZWNvbXB1dGUpO1xyXG4gICAgICAgICAgY21kc1RvU2VydmVyLkFkZChjbWQpO1xyXG4gICAgICAgICAgYXdhaXQgUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IuR2V0SW5zdGFuY2UoKS5FeGVjdXRlKENvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb24uVEFTS1NfQU5EX0NPTU1BTkRTKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuVGFzay5FeGVjdXRlQ2xpZW50U3ViZm9ybVJlZnJlc2gpXHJcbiAgICAgICAgICBhd2FpdCB0aGlzLlJlZnJlc2hTdWJmb3JtcygpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGF3YWl0IHRoaXMucmVjUHJlZml4U3ViRm9ybXMoKSlcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWNTdWZmaXhTdWJGb3JtcygpO1xyXG4gICAgICAgICAgdGhpcy5UYXNrLkNsZWFuRG9TdWJmb3JtUHJlZml4U3VmZml4KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIENMSUVOVFxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgRmxvd01vbml0b3JRdWV1ZS5JbnN0YW5jZS5hZGRSZWNvbXB1dGUodGhpcy5Pd25lckZsZC5nZXRWYXJOYW1lKCksIHRoaXMuVGFzay5HZXRUYXNrRGV0YWlscygpKTtcclxuXHJcbiAgICAgICAgICAvLyBGT1JNIFBST1BFUlRJRVNcclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtUHJvcHMgIT0gbnVsbClcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZm9ybVByb3BzLlJlZnJlc2hEaXNwbGF5KGZhbHNlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgLy8gQ1RSTCBQUk9QRVJUSUVTXHJcbiAgICAgICAgICBpZiAodGhpcy5fY3RybFByb3BzICE9IG51bGwpXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2N0cmxQcm9wcy5SZWZyZXNoRGlzcGxheShmYWxzZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgIC8vIHJlLWN1bXB1dGUgY2xpZW50IHNpZGUgZmllbGRzIGFuZCBsaW5rc1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3JjbXBPcmRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLl9yY21wT3JkZXIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5fcmNtcE9yZGVyLmdldF9JdGVtKGkpIGluc3RhbmNlb2YgRmllbGRCYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBmbGQgPSA8RmllbGRCYXNlPnRoaXMuX3JjbXBPcmRlci5nZXRfSXRlbShpKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmxkUmNtcChmbGQsIHRydWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9yY21wT3JkZXIuZ2V0X0l0ZW0oaSkgaW5zdGFuY2VvZiBEYXRhdmlld0hlYWRlckJhc2UpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjdXJMbmsgPSA8RGF0YXZpZXdIZWFkZXJCYXNlPnRoaXMuX3JjbXBPcmRlci5nZXRfSXRlbShpKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGN1ckxuay5nZXRMaW5rZWRSZWNvcmQocmVjKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIHJlY29tcHV0ZWQgYSBsaW5rIHdlIHNob3VsZCBhbHNvIHN0YXJ0IHRoZSByZWNvbXB1dGUgcHJvY2VzcyBvbiBhbGwgb2YgaXRzIGZpZWxkc1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmtGaWVsZHM6IExpc3Q8RmllbGRCYXNlPiA9ICg8RmllbGRzVGFibGU+dGhpcy5UYXNrLkRhdGFWaWV3LkdldEZpZWxkc1RhYigpKS5nZXRMaW5rRmllbGRzKGN1ckxuay5JZCk7XHJcbiAgICAgICAgICAgICAgICByZWMuc2V0SW5Db21wdXRlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNhdmVJbkZvcmNlVXBkYXRlOiBib29sZWFuID0gcmVjLkluRm9yY2VVcGRhdGU7XHJcbiAgICAgICAgICAgICAgICByZWMuSW5Gb3JjZVVwZGF0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCBsaW5rRmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmxkUmNtcChsaW5rRmllbGRzLmdldF9JdGVtKGopLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHJlYy5jbGVhckZsYWcoKGxpbmtGaWVsZHMuZ2V0X0l0ZW0oaikpLmdldElkKCksIFJlY29yZC5GTEFHX1VQREFURUQpO1xyXG4gICAgICAgICAgICAgICAgICByZWMuY2xlYXJGbGFnKChsaW5rRmllbGRzLmdldF9JdGVtKGopKS5nZXRJZCgpLCBSZWNvcmQuRkxBR19NT0RJRklFRCk7XHJcbiAgICAgICAgICAgICAgICAgIHJlYy5jbGVhckZsYWcoKGxpbmtGaWVsZHMuZ2V0X0l0ZW0oaikpLmdldElkKCksIFJlY29yZC5GTEFHX0NSU1JfTU9ESUZJRUQpO1xyXG4gICAgICAgICAgICAgICAgICByZWMuY2xlYXJIaXN0b3J5RmxhZygobGlua0ZpZWxkcy5nZXRfSXRlbShqKSkuZ2V0SWQoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZWMuSW5Gb3JjZVVwZGF0ZSA9IHNhdmVJbkZvcmNlVXBkYXRlO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IHJlY29tcHV0ZSBwcm9jZXNzIG9uIHRoZSByZXQgdmFsIG9mIHRoZSBsaW5rXHJcbiAgICAgICAgICAgICAgICBsZXQgcmV0RmxkOiBGaWVsZEJhc2UgPSBjdXJMbmsuUmV0dXJuRmllbGQ7XHJcbiAgICAgICAgICAgICAgICBpZiAocmV0RmxkICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmxkUmNtcChyZXRGbGQsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZWMuc2V0SW5Db21wdXRlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHJlYy5zZXRGb3JjZVNhdmVPcmcodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLlJlZnJlc2hTdWJmb3JtcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gUmVjb21wdXRlLmV4ZWN1dGUoKTogXCIgKyBlLk1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gIC8vIEVORCBDTElFTlQgQkxPQ0tcclxuICAgICAgdGhpcy5UYXNrLlNldEluUmVjb21wdXRlIChmYWxzZSk7XHJcbiAgICAgIHRoaXMuU2V0U3ViZm9ybXNJblJlY29tcHV0ZShmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgIHJlYy5idWlsZExpbmtzUG9zU3RyKCk7XHJcbiAgICAgIHJlYy5zZXRJblJlY29tcHV0ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8gU3ViZm9ybXMgcmVjb21wdXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIFJlZnJlc2hTdWJmb3JtcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLlRhc2suZ2V0Rm9ybSgpLkFsbG93ZWRTdWJmb3JtUmVjb21wdXRlKSB7XHJcbiAgICAgIGxldCBzdWJmb3Jtc1RvUmVmcmVzaDogTGlzdDxUYXNrPiA9IGF3YWl0IHRoaXMuR2V0U3ViZm9ybXNUb1JlZnJlc2goKTtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHN1YmZvcm1zVG9SZWZyZXNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHN1YmZvcm1UYXNrOiBUYXNrID0gc3ViZm9ybXNUb1JlZnJlc2guZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5UYXNrLlN1YmZvcm1SZWZyZXNoKHN1YmZvcm1UYXNrLCB0cnVlKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgU2V0U3ViZm9ybXNJblJlY29tcHV0ZShpblJlY29tcHV0ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgICAgbGV0IHN1YmZvcm1zVG9SZWZyZXNoOiBMaXN0PFRhc2s+ID0gYXdhaXQgdGhpcy5HZXRTdWJmb3Jtc1RvUmVmcmVzaCgpO1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc3ViZm9ybXNUb1JlZnJlc2gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgc3ViZm9ybVRhc2s6IFRhc2sgPSBzdWJmb3Jtc1RvUmVmcmVzaC5nZXRfSXRlbShpKTtcclxuICAgICAgICAgIHN1YmZvcm1UYXNrLlNldEluUmVjb21wdXRlKGluUmVjb21wdXRlKTtcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHJlY29tcHV0ZSBmaWVsZHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmxkXCI+LSB0aGUgZmllZGwgdG8gcmVjb21wdXRlPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGZsZFJjbXAoZmxkOiBGaWVsZEJhc2UsIGNvbXB1dGVGaWVsZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGZsZC5Jc1ZpcnR1YWxcclxuICAgICAgfHwgKCh0aGlzLlRhc2suZ2V0TW9kZSgpICE9PSBDb25zdGFudHMuVEFTS19NT0RFX1FVRVJZIHx8XHJcbiAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2UuYWxsb3dVcGRhdGVJblF1ZXJ5TW9kZSh0aGlzLlRhc2suZ2V0Q29tcElkeCgpKSkpKSB7XHJcbiAgICAgIGlmICghZmxkLmlzSW5FdmFsUHJvY2VzcygpKSB7XHJcbiAgICAgICAgaWYgKGNvbXB1dGVGaWVsZClcclxuICAgICAgICAgIGF3YWl0IGZsZC5jb21wdXRlKHRydWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGF3YWl0IGZsZC5zZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlKGZsZC5nZXRWYWx1ZShmYWxzZSksIGZsZC5pc051bGwoKSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICBhd2FpdCBmbGQudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pjwvc3VtbWFyeT5cclxuICBwcml2YXRlIGJ1aWxkU3ViRm9ybUxpc3QoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc3ViRm9ybXMgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fc3ViRm9ybXMgPSBuZXcgTGlzdDxUYXNrPigpO1xyXG4gICAgICBsZXQgc3ViVGFza3NUYWI6IFRhc2tzVGFibGUgPSB0aGlzLlRhc2suZ2V0U3ViVGFza3MoKTtcclxuXHJcbiAgICAgIGlmIChzdWJUYXNrc1RhYiAhPT0gbnVsbCkge1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBzdWJUYXNrc1RhYi5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICAgICAgbGV0IHN1YkZvcm06IFRhc2sgPSA8VGFzaz5zdWJUYXNrc1RhYi5nZXRUYXNrKGkpO1xyXG4gICAgICAgICAgLy8gUUNSICMyOTkxNTMuIEFkZCBvbmx5IHN1YmZvcm1zIChub3Qgc3VidGFza3MpLlxyXG4gICAgICAgICAgaWYgKHN1YkZvcm0uZ2V0Rm9ybSgpLmdldFN1YkZvcm1DdHJsKCkgIT09IG51bGwgJiYgc3ViRm9ybS5yZWZyZXNoZXNPbih0aGlzLk93bmVyRmxkLmdldElkKCkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1YkZvcm1zLnB1c2goc3ViRm9ybSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJlbW92ZXMgdGhlIHNwZWNpZmljIHRhc2sgZnJvbSBzdWJmb3JtcyBsaXN0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdWJmb3JtVGFza1wiPjwvcGFyYW0+XHJcbiAgUmVtb3ZlU3ViZm9ybShzdWJmb3JtVGFzazogVGFzayk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3ViRm9ybXMuUmVtb3ZlKHN1YmZvcm1UYXNrKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gSW5zZXJ0cyB0aGUgc3BlY2lmaWMgc3ViZm9ybSB0YXNrIGludG8gdGhlIHN1YmZvcm0gbGlzdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3ViZm9ybVRhc2tcIj48L3BhcmFtPlxyXG4gIEFkZFN1YmZvcm0oc3ViZm9ybVRhc2s6IFRhc2spOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9zdWJGb3JtcyA9PT0gbnVsbClcclxuICAgICAgdGhpcy5fc3ViRm9ybXMgPSBuZXcgTGlzdDxUYXNrPigpO1xyXG4gICAgaWYgKCF0aGlzLl9zdWJGb3Jtcy5Db250YWlucyhzdWJmb3JtVGFzaykpXHJcbiAgICAgIHRoaXMuX3N1YkZvcm1zLnB1c2goc3ViZm9ybVRhc2spO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgcmVjb3JkIHN1ZmZpeCBmb3IgdGhlIGFmZmVjdGVkIHN1YmZvcm1zIGlmIFJlZnJlc2ggaXMgbmVlZGVkXHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSBhbmQgaXQgaXMgbmVlZGVkIHRvIHJlZnJlc2hcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgcmVjU3VmZml4U3ViRm9ybXMoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IHN1YkZvcm06IFRhc2s7XHJcbiAgICBsZXQgc3VjY2Vzc2Z1bDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBsZXQgc3ViZm9ybUN0cmw6IE1nQ29udHJvbDtcclxuXHJcbiAgICAvLyBidWlsZCB0aGUgc3ViZm9ybXMgbGlzdCBhbmQgc2F2ZSBpdCBmb3IgZnV0dXJlIHVzZVxyXG4gICAgdGhpcy5idWlsZFN1YkZvcm1MaXN0KCk7XHJcblxyXG4gICAgLy8gZXhlY3V0ZSBcInJlY29yZCBzdWZmaXhcIiBmb3IgdGhlIHN1YmZvcm1zXHJcbiAgICBmb3IgKGkgPSAwOyBzdWNjZXNzZnVsICYmIGkgPCB0aGlzLl9zdWJGb3Jtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBzdWJGb3JtID0gdGhpcy5fc3ViRm9ybXMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgIHN1YmZvcm1DdHJsID0gPE1nQ29udHJvbD5zdWJGb3JtLmdldEZvcm0oKS5nZXRTdWJGb3JtQ3RybCgpO1xyXG4gICAgICBpZiAoc3ViRm9ybS5pc1N0YXJ0ZWQoKSAmJiAhc3ViZm9ybUN0cmwuUmVmcmVzaE9uVmlzaWJsZSAmJlxyXG4gICAgICAgIGF3YWl0IHN1YmZvcm1DdHJsLmNoZWNrUHJvcChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BVVRPX1JFRlJFU0gsIHRydWUpICYmICFzdWJGb3JtLkluU2VsZWN0XHJcbiAgICAgICAgJiYgc3ViRm9ybS5Eb1N1YmZvcm1QcmVmaXhTdWZmaXgpIHtcclxuICAgICAgICBhd2FpdCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5oYW5kbGVJbnRlcm5hbEV2ZW50V2l0aFRhc2soc3ViRm9ybSwgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19TVUZGSVgpO1xyXG4gICAgICAgIHN1Y2Nlc3NmdWwgPSAhQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuR2V0U3RvcEV4ZWN1dGlvbkZsYWcoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgKDxEYXRhVmlldz50aGlzLlRhc2suRGF0YVZpZXcpLnNldFByZXZDdXJyUmVjKCk7XHJcbiAgICByZXR1cm4gKHN1Y2Nlc3NmdWwpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2hlY2sgaWYgZG8gcmVmcmVzaCBmb3IgYW55IHN1YmZvcm0gdGhhdCB0aGUgZmllbGQgYWZmZWN0c1xyXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tSZWZyZXNoU3ViRm9ybXMoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgcmVmcmVzaDogYm9vbGVhbiA9ICF0aGlzLl9zdWJGb3Jtc09ubHlSZWNvbXA7XHJcbiAgICBsZXQgc3ViZm9ybXNUb1JlZnJlc2g6IExpc3Q8VGFzaz4gPSBhd2FpdCB0aGlzLkdldFN1YmZvcm1zVG9SZWZyZXNoKCk7XHJcbiAgICBpZiAoc3ViZm9ybXNUb1JlZnJlc2gubGVuZ3RoID4gMClcclxuICAgICAgcmVmcmVzaCA9IHRydWU7XHJcbiAgICByZXR1cm4gcmVmcmVzaDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0cyBhIGxpc3Qgb2YgdGhvc2Ugc3ViZm9ybXMgdGhhdCBtdXN0IGJlIHJlZnJlc2hlZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz5saXN0IG9mIHN1YmZvcm1zIHRvIHJlZnJlc2g8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBhc3luYyBHZXRTdWJmb3Jtc1RvUmVmcmVzaCgpOiBQcm9taXNlPExpc3Q8VGFzaz4+IHtcclxuXHJcbiAgICBsZXQgc3ViVGFza3M6IExpc3Q8VGFzaz4gPSBuZXcgTGlzdDxUYXNrPigpO1xyXG4gICAgbGV0IHN1YmZvcm1DdHJsOiBNZ0NvbnRyb2w7XHJcbiAgICAvLyBidWlsZCB0aGUgc3ViZm9ybXMgbGlzdCBhbmQgc2F2ZSBpdCBmb3IgZnV0dXJlIHVzZVxyXG4gICAgdGhpcy5idWlsZFN1YkZvcm1MaXN0KCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGk8dGhpcy5fc3ViRm9ybXMubGVuZ3RoOyBpKyspXHJcbiAgICB7XHJcbiAgICAgIGxldCBzdWJUYXNrID0gdGhpcy5fc3ViRm9ybXNbaV07XHJcbiAgICAgIHN1YmZvcm1DdHJsID0gPE1nQ29udHJvbD5zdWJUYXNrLmdldEZvcm0oKS5nZXRTdWJGb3JtQ3RybCgpO1xyXG4gICAgICBpZiAoc3ViVGFzay5pc1N0YXJ0ZWQoKSAmJiBhd2FpdCAgc3ViZm9ybUN0cmwuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FVVE9fUkVGUkVTSCwgdHJ1ZSkgJiZcclxuICAgICAgICAhc3ViVGFzay5JblNlbGVjdCAmJiAhc3ViVGFzay5JbkVuZFRhc2spIHtcclxuXHJcbiAgICAgICAgLy8gY29tcHV0ZSB0aGUgdmlzaWJpbGl0eSBwcm9wZXJ0eSBmb3IgdGhlIHN1YmZvcm0gY29udHJvbCBiZWZvcmUgdXNlIGl0IGluIGlzVmlzaWJsZSgpIG1ldGhvZFxyXG4gICAgICAgIGF3YWl0IHN1YmZvcm1DdHJsLmNoZWNrUHJvcChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFLCB0cnVlKTtcclxuICAgICAgICBpZiAoIXN1YmZvcm1DdHJsLmlzVmlzaWJsZSgpICYmICFhd2FpdCBzdWJmb3JtQ3RybC5jaGVja1Byb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUkVGUkVTSF9XSEVOX0hJRERFTiwgZmFsc2UpKVxyXG4gICAgICAgICAgc3ViZm9ybUN0cmwuUmVmcmVzaE9uVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgZWxzZSBzdWJUYXNrcy5wdXNoKHN1YlRhc2spO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3ViVGFza3M7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSByZWNvcmQgcHJlZml4IGZvciB0aGUgYWZmZWN0ZWQgc3ViZm9ybXMgaWYgUmVmcmVzaCBpcyBuZWVkZWRcclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5IGFuZCBpdCBpcyBuZWVkZWQgdG8gcmVmcmVzaFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyByZWNQcmVmaXhTdWJGb3JtcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgc3ViRm9ybTogVGFzaztcclxuICAgIGxldCBzdWNjZXNzZnVsOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGxldCBzdWJmb3JtQ3RybDogTWdDb250cm9sO1xyXG5cclxuICAgIC8vIGJ1aWxkIHRoZSBzdWJmb3JtcyBsaXN0IGFuZCBzYXZlIGl0IGZvciBmdXR1cmUgdXNlXHJcbiAgICB0aGlzLmJ1aWxkU3ViRm9ybUxpc3QoKTtcclxuXHJcbiAgICAvLyBleGVjdXRlIFwicmVjb3JkIHByZWZpeFwiIGZvciB0aGUgc3ViZm9ybXNcclxuICAgIGZvciAoaSA9IDA7IHN1Y2Nlc3NmdWwgJiYgaSA8IHRoaXMuX3N1YkZvcm1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHN1YkZvcm0gPSB0aGlzLl9zdWJGb3Jtcy5nZXRfSXRlbShpKTtcclxuICAgICAgc3ViZm9ybUN0cmwgPSA8TWdDb250cm9sPnN1YkZvcm0uZ2V0Rm9ybSgpLmdldFN1YkZvcm1DdHJsKCk7XHJcbiAgICAgIGlmIChzdWJGb3JtLmlzU3RhcnRlZCgpICYmICFzdWJmb3JtQ3RybC5SZWZyZXNoT25WaXNpYmxlXHJcbiAgICAgICAgJiYgYXdhaXQgIHN1YmZvcm1DdHJsLmNoZWNrUHJvcChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BVVRPX1JFRlJFU0gsIHRydWUpXHJcbiAgICAgICAgJiYgIXN1YkZvcm0uSW5TZWxlY3QgJiYgc3ViRm9ybS5Eb1N1YmZvcm1QcmVmaXhTdWZmaXgpIHtcclxuICAgICAgICBhd2FpdCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5oYW5kbGVJbnRlcm5hbEV2ZW50V2l0aFRhc2tBbmRTdWJmb3JtUmVmcmVzaChzdWJGb3JtLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1BSRUZJWCwgdHJ1ZSk7XHJcbiAgICAgICAgc3VjY2Vzc2Z1bCA9ICFBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5HZXRTdG9wRXhlY3V0aW9uRmxhZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VjY2Vzc2Z1bDtcclxuICB9XHJcblxyXG4gIG5vdGlmeVNlcnZlck9uQ2hhbmdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuUmNtcE1vZGUgPT09IFJlY29tcHV0ZV9SY21wQnkuU0VSVkVSX09OX0NIQU5HRTtcclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpZiB0aGUgY2xpZW50IGRvZXNuJ3Qga25vdyB0byByZWNvbXB1dGUgdGhpcyBmaWVsZDwvcmV0dXJucz5cclxuICBpc1NlcnZlclJjbXAoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5SY21wTW9kZSAhPT0gUmVjb21wdXRlX1JjbXBCeS5DTElFTlQ7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
@@ -1,63 +0,0 @@
|
|
1
|
-
import { NString } from "@magic-xpa/mscorelib";
|
2
|
-
import { Base64, Logger, XMLConstants, XmlParser } from "@magic-xpa/utils";
|
3
|
-
import { Recompute } from "./Recompute";
|
4
|
-
import { AccessHelper } from "../AccessHelper";
|
5
|
-
export class RecomputeTable {
|
6
|
-
fillAttributes(parser) {
|
7
|
-
let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex());
|
8
|
-
let Index = parser.getXMLdata().indexOf(XMLConstants.MG_TAG_RECOMPUTE, parser.getCurrIndex()) + XMLConstants.MG_TAG_RECOMPUTE.length;
|
9
|
-
let task = null;
|
10
|
-
let tokensVector = XmlParser.getTokens(parser.getXMLdata().substr(Index, endContext - Index), '"');
|
11
|
-
for (let j = 0; j < tokensVector.length; j += 2) {
|
12
|
-
let attribute = (tokensVector.get_Item(j));
|
13
|
-
let valueStr = (tokensVector.get_Item(j + 1));
|
14
|
-
if (attribute === XMLConstants.MG_ATTR_TASKID)
|
15
|
-
task = AccessHelper.mgDataTable.GetTaskByID(valueStr);
|
16
|
-
else
|
17
|
-
Logger.Instance.WriteExceptionToLogWithMsg(NString.Format("Unrecognized attribute: '{0}'", attribute));
|
18
|
-
}
|
19
|
-
parser.setCurrIndex(parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1);
|
20
|
-
return task;
|
21
|
-
}
|
22
|
-
fillData(parser) {
|
23
|
-
let task = this.fillAttributes(parser);
|
24
|
-
if (task !== null) {
|
25
|
-
Logger.Instance.WriteDevToLog("goes to refill recompute");
|
26
|
-
this.fillData_1(task.DataView, task, parser);
|
27
|
-
}
|
28
|
-
else
|
29
|
-
parser.setCurrIndex(parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1);
|
30
|
-
}
|
31
|
-
fillData_1(dataView, task, parser) {
|
32
|
-
if (parser.getNextTag() == XMLConstants.MG_TAG_RECOMPUTE) {
|
33
|
-
let currrentIndex = parser.getCurrIndex();
|
34
|
-
let encoded = parser.ReadContentOfCurrentElement().trim();
|
35
|
-
let decoded = Base64.decode(encoded.substr(0, encoded.length).trim());
|
36
|
-
let newXmlData = parser.getXMLdata().replace(encoded.trim(), decoded);
|
37
|
-
parser.setXMLdata(newXmlData);
|
38
|
-
parser.setCurrIndex(currrentIndex);
|
39
|
-
}
|
40
|
-
while (this.initInnerObjects(parser, parser.getNextTag(), dataView, task)) {
|
41
|
-
}
|
42
|
-
}
|
43
|
-
initInnerObjects(parser, nameOfFound, dataView, task) {
|
44
|
-
if (nameOfFound === null)
|
45
|
-
return false;
|
46
|
-
if (nameOfFound === XMLConstants.MG_TAG_RECOMPUTE)
|
47
|
-
parser.setCurrIndex(parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1);
|
48
|
-
else if (nameOfFound === XMLConstants.MG_TAG_FLD) {
|
49
|
-
let recompute = new Recompute();
|
50
|
-
recompute.fillData(dataView, task, parser);
|
51
|
-
}
|
52
|
-
else if (nameOfFound === '/' + XMLConstants.MG_TAG_RECOMPUTE) {
|
53
|
-
parser.setCurrIndex2EndOfTag();
|
54
|
-
return false;
|
55
|
-
}
|
56
|
-
else {
|
57
|
-
Logger.Instance.WriteExceptionToLogWithMsg("There is no such tag in <recompute>, add case to RecomputeTable.initInnerObjects for " + nameOfFound);
|
58
|
-
return false;
|
59
|
-
}
|
60
|
-
return true;
|
61
|
-
}
|
62
|
-
}
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb21wdXRlVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL3J0L1JlY29tcHV0ZVRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBTyxPQUFPLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFHekUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFPL0MsTUFBTSxPQUFPLGNBQWM7SUFLakIsY0FBYyxDQUFDLE1BQWlCO1FBQ3RDLElBQUksVUFBVSxHQUFXLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNwRyxJQUFJLEtBQUssR0FBVyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1FBRTdJLElBQUksSUFBSSxHQUFTLElBQUksQ0FBQztRQUN0QixJQUFJLFlBQVksR0FBaUIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFakgsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2RCxJQUFJLFNBQVMs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SSxTQUFTLEVBQUUsQ0FBQztZQUMzQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FFNUM7YUFDSSxJQUFJLFdBQVcsS0FBSyxHQUFHLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixFQUFFO1lBQzVELE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7YUFDSTtZQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQ3hDLHVGQUF1RixHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQ3pHLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdCwgTlN0cmluZ30gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7QmFzZTY0LCBMb2dnZXIsIFhNTENvbnN0YW50cywgWG1sUGFyc2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7RGF0YVZpZXd9IGZyb20gXCIuLi9kYXRhL0RhdGFWaWV3XCI7XHJcbmltcG9ydCB7UmVjb21wdXRlfSBmcm9tIFwiLi9SZWNvbXB1dGVcIjtcclxuaW1wb3J0IHsgQWNjZXNzSGVscGVyIH0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBEYXRhIGZvciA8cmVjb21wdXRlPi4uLi48L3JlY29tcHV0ZT5cclxuLy8vICAgdGhpcyBjbGFzcyBpcyB1c2VkIG9ubHkgdG8gY3JlYXRlIHRoZSBSZWNvbXB1dGUgb2JqZWN0cyBidXQgZG8gbm90XHJcbi8vLyAgIGhvbGQgYW55IGRhdGFcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIFJlY29tcHV0ZVRhYmxlIHtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgcmVjb21wdXRlIGF0dHJpYnV0ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZmlsbEF0dHJpYnV0ZXMocGFyc2VyOiBYbWxQYXJzZXIpOiBUYXNrIHtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGxldCBJbmRleDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5NR19UQUdfUkVDT01QVVRFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgWE1MQ29uc3RhbnRzLk1HX1RBR19SRUNPTVBVVEUubGVuZ3RoO1xyXG5cclxuICAgIGxldCB0YXNrOiBUYXNrID0gbnVsbDtcclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTGRhdGEoKS5zdWJzdHIoSW5kZXgsIGVuZENvbnRleHQgLSBJbmRleCksICdcIicpO1xyXG5cclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gWE1MQ29uc3RhbnRzLk1HX0FUVFJfVEFTS0lEKVxyXG4gICAgICAgICAgdGFzayA9IDxUYXNrPkFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5HZXRUYXNrQnlJRCh2YWx1ZVN0cik7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhOU3RyaW5nLkZvcm1hdChcIlVucmVjb2duaXplZCBhdHRyaWJ1dGU6ICd7MH0nXCIsIGF0dHJpYnV0ZSkpO1xyXG4gICAgfVxyXG4gICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgLy8gc3RhcnQgb2YgPGZsZCAuLi4+XHJcblxyXG4gICAgcmV0dXJuIHRhc2s7XHJcbiAgfVxyXG5cclxuICBmaWxsRGF0YShwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSB0aGlzLmZpbGxBdHRyaWJ1dGVzKHBhcnNlcik7XHJcblxyXG4gICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIHJlZmlsbCByZWNvbXB1dGVcIik7XHJcbiAgICAgIHRoaXMuZmlsbERhdGFfMSg8RGF0YVZpZXc+dGFzay5EYXRhVmlldywgdGFzaywgcGFyc2VyKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUbyBwYXJzZSBpbnB1dCBzdHJpbmcgYW5kIGZpbGwgaW5uZXIgZGF0YSA6IFZlY3RvciBwcm9wc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZmlsbERhdGFfMShkYXRhVmlldzogRGF0YVZpZXcsIHRhc2s6IFRhc2ssIHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICAgaWYgKHBhcnNlci5nZXROZXh0VGFnKCkgPT0gWE1MQ29uc3RhbnRzLk1HX1RBR19SRUNPTVBVVEUpIHtcclxuICAgICAgbGV0IGN1cnJyZW50SW5kZXggPSBwYXJzZXIuZ2V0Q3VyckluZGV4KCk7IC8vIGdldCB0aGUgY3VycmVudEluZGV4IG9mIFJlY29tcHV0ZSB0YWdcclxuICAgICAgbGV0IGVuY29kZWQgPSBwYXJzZXIuUmVhZENvbnRlbnRPZkN1cnJlbnRFbGVtZW50KCkudHJpbSgpOyAvLyBnZXQgdmFsdWUgb2YgZW5jb2RlZCB2YWx1ZSBvZiBSZWNvbXB1dGVcclxuICAgICAgbGV0IGRlY29kZWQgPSBCYXNlNjQuZGVjb2RlKGVuY29kZWQuc3Vic3RyKDAsIGVuY29kZWQubGVuZ3RoKS50cmltKCkpOyAvL2RlY29kZSB0aGUgdmFsdWUgb2YgcmVjb21wdXRlXHJcbiAgICAgIGxldCBuZXdYbWxEYXRhID0gcGFyc2VyLmdldFhNTGRhdGEoKS5yZXBsYWNlKGVuY29kZWQudHJpbSgpLCBkZWNvZGVkKTsgLy8gcmVwbGFjZSB0aGUgZW5jb2RlZCB2YWx1ZSB3aXRoIGRlY29kZWQgdmFsdWVcclxuICAgICAgcGFyc2VyLnNldFhNTGRhdGEobmV3WG1sRGF0YSk7IC8vY3JlYXRlIGEgcGFyc2VyIHdpdGggbmV3WE1MXHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoY3VycnJlbnRJbmRleCk7IC8vIHNldCB0aGUgY3VycmVudCBpbmRleCBvZiBwYXJzZXIgdG8gcmVjb21wdXRlIHRhZ1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlICh0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLCBwYXJzZXIuZ2V0TmV4dFRhZygpLCBkYXRhVmlldywgdGFzaykpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGaWxsIFJlY29tcHV0ZSBPYmplY3QsIGdpdmVzIGl0cyByZWZlcmVuY2UgdG8gRmllbGQgYW5kIHJlZmVyZW5jZSBvZiBGaWVsZCB0byBoaW1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgaW5pdElubmVyT2JqZWN0cyhwYXJzZXI6IFhtbFBhcnNlciwgbmFtZU9mRm91bmQ6IFN0cmluZywgZGF0YVZpZXc6IERhdGFWaWV3LCB0YXNrOiBUYXNrKTogYm9vbGVhbiB7XHJcbiAgICBpZiAobmFtZU9mRm91bmQgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAobmFtZU9mRm91bmQgPT09IFhNTENvbnN0YW50cy5NR19UQUdfUkVDT01QVVRFKVxyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7XHJcbiAgICAvLyBzdGFydCBvZiA8ZmxkIC4uLj5cclxuICAgIGVsc2UgaWYgKG5hbWVPZkZvdW5kID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0ZMRCkge1xyXG4gICAgICBsZXQgcmVjb21wdXRlOiBSZWNvbXB1dGUgPSBuZXcgUmVjb21wdXRlKCk7XHJcbiAgICAgIHJlY29tcHV0ZS5maWxsRGF0YShkYXRhVmlldywgdGFzaywgcGFyc2VyKTsgLy8gZ2V0IHJlZmVyZW5jZSB0byBEYXRhVmlldywgdG8gbWFrZSBsaW5rZWQgcmVmLiA6IFJlY29tcHV0ZTwtRmllbGRcclxuICAgICAgLy8gdGFza1JlZmVyZW5jZSBmb3IgUmVjb21wdXRlLnByb3BzPT4gQ29udHJvbFRhYmxlLkNvbnRyb2wudGFza1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobmFtZU9mRm91bmQgPT09ICcvJyArIFhNTENvbnN0YW50cy5NR19UQUdfUkVDT01QVVRFKSB7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcclxuICAgICAgICBcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIDxyZWNvbXB1dGU+LCBhZGQgY2FzZSB0byBSZWNvbXB1dGVUYWJsZS5pbml0SW5uZXJPYmplY3RzIGZvciBcIiArIG5hbWVPZkZvdW5kKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|