@magic-xpa/engine 4.1100.0-dev4110.2 → 4.1100.0-dev4110.202

Sign up to get free protection for your applications and to get access to all the features.
Files changed (515) hide show
  1. package/{esm2020 → esm2022}/index.mjs +188 -188
  2. package/{esm2020 → esm2022}/magic-xpa-engine.mjs +1 -1
  3. package/esm2022/src/AccessHelper.mjs +15 -0
  4. package/esm2022/src/ClientManager.mjs +409 -0
  5. package/esm2022/src/CommandsProcessorBase.mjs +56 -0
  6. package/esm2022/src/CommandsProcessorManager.mjs +26 -0
  7. package/esm2022/src/CommandsTable.mjs +162 -0
  8. package/esm2022/src/ConstInterface.mjs +517 -0
  9. package/{esm2020 → esm2022}/src/CurrentClientVersion.mjs +2 -2
  10. package/esm2022/src/FlowMonitorInterface.mjs +16 -0
  11. package/esm2022/src/GUIManager.mjs +62 -0
  12. package/esm2022/src/GlobalCommandsManager.mjs +34 -0
  13. package/esm2022/src/GuiEventsProcessor.mjs +157 -0
  14. package/{esm2020 → esm2022}/src/ICommandsTable.mjs +1 -1
  15. package/esm2022/src/ServerConfig.mjs +122 -0
  16. package/{esm2020 → esm2022}/src/bridge/IGuiEvent.mjs +19 -19
  17. package/{esm2020 → esm2022}/src/bridge/MagicBridge.mjs +40 -40
  18. package/esm2022/src/commands/ClientOriginatedCommandTaskTag.mjs +12 -0
  19. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserLocateDataViewCommand.mjs +8 -8
  20. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserRangeDataviewCommand.mjs +9 -9
  21. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserSortDataViewCommand.mjs +9 -9
  22. package/{esm2020 → esm2022}/src/commands/ClientToServer/BrowserEscEventCommand.mjs +23 -23
  23. package/{esm2020 → esm2022}/src/commands/ClientToServer/ClientOriginatedCommand.mjs +14 -14
  24. package/esm2022/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +60 -0
  25. package/{esm2020 → esm2022}/src/commands/ClientToServer/ColumnSortEventCommand.mjs +26 -26
  26. package/esm2022/src/commands/ClientToServer/CommandFactory.mjs +260 -0
  27. package/esm2022/src/commands/ClientToServer/CommandSerializationHelper.mjs +67 -0
  28. package/{esm2020 → esm2022}/src/commands/ClientToServer/ComputeEventCommand.mjs +23 -23
  29. package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTerminationEventCommand.mjs +20 -20
  30. package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs +19 -19
  31. package/{esm2020 → esm2022}/src/commands/ClientToServer/ControlItemsRefreshCommand.mjs +8 -8
  32. package/esm2022/src/commands/ClientToServer/DataViewOutputCommand.mjs +13 -0
  33. package/{esm2020 → esm2022}/src/commands/ClientToServer/DataviewCommand.mjs +44 -44
  34. package/esm2022/src/commands/ClientToServer/EvaluateCommand.mjs +37 -0
  35. package/esm2022/src/commands/ClientToServer/EventCommand.mjs +40 -0
  36. package/esm2022/src/commands/ClientToServer/ExecOperCommand.mjs +67 -0
  37. package/esm2022/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +22 -0
  38. package/{esm2020 → esm2022}/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs +10 -10
  39. package/{esm2020 → esm2022}/src/commands/ClientToServer/ICommandTaskTag.mjs +1 -1
  40. package/{esm2020 → esm2022}/src/commands/ClientToServer/IndexChangeEventCommand.mjs +21 -21
  41. package/esm2022/src/commands/ClientToServer/IniputForceWriteCommand.mjs +23 -0
  42. package/{esm2020 → esm2022}/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs +23 -23
  43. package/{esm2020 → esm2022}/src/commands/ClientToServer/QueryCommand.mjs +20 -20
  44. package/esm2022/src/commands/ClientToServer/RecomputeCommand.mjs +27 -0
  45. package/esm2022/src/commands/ClientToServer/RefreshEventCommand.mjs +27 -0
  46. package/esm2022/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +24 -0
  47. package/esm2022/src/commands/ClientToServer/RollbackEventCommand.mjs +40 -0
  48. package/{esm2020 → esm2022}/src/commands/ClientToServer/SelectProgramCommand.mjs +14 -14
  49. package/{esm2020 → esm2022}/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs +9 -9
  50. package/{esm2020 → esm2022}/src/commands/ClientToServer/SubformOpenEventCommand.mjs +21 -21
  51. package/esm2022/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +24 -0
  52. package/esm2022/src/commands/ClientToServer/TransactionCommand.mjs +30 -0
  53. package/{esm2020 → esm2022}/src/commands/ClientToServer/UnloadCommand.mjs +14 -14
  54. package/esm2022/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +18 -0
  55. package/esm2022/src/commands/DataViewCommandBase.mjs +8 -0
  56. package/{esm2020 → esm2022}/src/commands/IClientCommand.mjs +1 -1
  57. package/esm2022/src/commands/IClientTargetedCommand.mjs +13 -0
  58. package/{esm2020 → esm2022}/src/commands/IClientToServerCommandInfo.mjs +1 -1
  59. package/esm2022/src/commands/ServerToClient/AbortCommand.mjs +65 -0
  60. package/{esm2020 → esm2022}/src/commands/ServerToClient/AddLocateCommand.mjs +21 -21
  61. package/esm2022/src/commands/ServerToClient/AddRangeCommand.mjs +62 -0
  62. package/esm2022/src/commands/ServerToClient/AddSortCommand.mjs +33 -0
  63. package/esm2022/src/commands/ServerToClient/ClientRefreshCommand.mjs +25 -0
  64. package/esm2022/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +24 -0
  65. package/esm2022/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +45 -0
  66. package/esm2022/src/commands/ServerToClient/OpenURLCommand.mjs +221 -0
  67. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetLocateCommand.mjs +14 -14
  68. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetRangeCommand.mjs +14 -14
  69. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetSortCommand.mjs +14 -14
  70. package/esm2022/src/commands/ServerToClient/ResultCommand.mjs +37 -0
  71. package/esm2022/src/commands/ServerToClient/VerifyCommand.mjs +83 -0
  72. package/esm2022/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +132 -0
  73. package/{esm2020 → esm2022}/src/communications/IConnectionStateManager.mjs +1 -1
  74. package/esm2022/src/communications/InteractiveCommunicationsFailureHandler.mjs +15 -0
  75. package/{esm2020 → esm2022}/src/data/DataSourceIdKey.mjs +2 -2
  76. package/esm2022/src/data/DataView.mjs +1613 -0
  77. package/{esm2020 → esm2022}/src/data/DataViewBase.mjs +3 -3
  78. package/esm2022/src/data/DataviewManager.mjs +28 -0
  79. package/esm2022/src/data/DataviewManagerBase.mjs +15 -0
  80. package/esm2022/src/data/DvCache.mjs +67 -0
  81. package/esm2022/src/data/Field.mjs +646 -0
  82. package/esm2022/src/data/FieldBase.mjs +15 -0
  83. package/esm2022/src/data/FieldsTable.mjs +103 -0
  84. package/{esm2020 → esm2022}/src/data/IRecordsTable.mjs +1 -1
  85. package/esm2022/src/data/Key.mjs +88 -0
  86. package/esm2022/src/data/Record.mjs +866 -0
  87. package/{esm2020 → esm2022}/src/data/RecordOutOfDataViewException.mjs +15 -15
  88. package/esm2022/src/data/RecordsTable.mjs +267 -0
  89. package/esm2022/src/data/TaskTransactionManager.mjs +103 -0
  90. package/esm2022/src/data/XMLBasedDcValuesBuilder.mjs +74 -0
  91. package/{esm2020 → esm2022}/src/enums.mjs +23 -23
  92. package/esm2022/src/env/EnvVariablesTable.mjs +340 -0
  93. package/esm2022/src/env/Environment.mjs +487 -0
  94. package/{esm2020 → esm2022}/src/env/ILanguageData.mjs +1 -1
  95. package/esm2022/src/env/LanguageData.mjs +227 -0
  96. package/esm2022/src/env/MirrorString.mjs +65 -0
  97. package/esm2022/src/event/ActionManager.mjs +91 -0
  98. package/esm2022/src/event/Event.mjs +1333 -0
  99. package/esm2022/src/event/EventHandler.mjs +766 -0
  100. package/esm2022/src/event/EventHandlerPosition.mjs +204 -0
  101. package/esm2022/src/event/EventsManager.mjs +2988 -0
  102. package/{esm2020 → esm2022}/src/event/IEventsManager.mjs +6 -6
  103. package/esm2022/src/event/RunTimeEvent.mjs +399 -0
  104. package/{esm2020 → esm2022}/src/event/RunTimeEventBase.mjs +3 -3
  105. package/esm2022/src/event/UserEventsTable.mjs +47 -0
  106. package/esm2022/src/exp/ExpTable.mjs +57 -0
  107. package/esm2022/src/exp/Expression.mjs +200 -0
  108. package/esm2022/src/exp/ExpressionDict.mjs +727 -0
  109. package/esm2022/src/exp/ExpressionEvaluator.mjs +4206 -0
  110. package/esm2022/src/exp/ExpressionLocalJpn.mjs +314 -0
  111. package/esm2022/src/exp/GlobalParamsTable.mjs +85 -0
  112. package/esm2022/src/exp/YesNoExp.mjs +36 -0
  113. package/esm2022/src/gui/CreatedFormVector.mjs +23 -0
  114. package/esm2022/src/gui/FormsTable.mjs +66 -0
  115. package/esm2022/src/gui/MgControl.mjs +363 -0
  116. package/esm2022/src/gui/MgForm.mjs +1181 -0
  117. package/esm2022/src/http/HttpManager.mjs +97 -0
  118. package/esm2022/src/http/client/HttpClientAsync.mjs +68 -0
  119. package/esm2022/src/http/client/HttpClientBase.mjs +132 -0
  120. package/esm2022/src/http/client/HttpClientEvents.mjs +39 -0
  121. package/esm2022/src/http/client/HttpClientSync.mjs +42 -0
  122. package/esm2022/src/http/client/HttpUtility.mjs +84 -0
  123. package/{esm2020 → esm2022}/src/http/client/ICommunicationsFailureHandler.mjs +1 -1
  124. package/esm2022/src/remote/AddUserLocateRemoteDataViewCommand.mjs +18 -0
  125. package/esm2022/src/remote/AddUserRangeRemoteDataViewCommand.mjs +18 -0
  126. package/esm2022/src/remote/AddUserSortRemoteDataViewCommand.mjs +18 -0
  127. package/esm2022/src/remote/RemoteCommandsProcessor.mjs +882 -0
  128. package/esm2022/src/remote/RemoteControlItemsRefreshCommand.mjs +25 -0
  129. package/esm2022/src/remote/RemoteDataViewCommandBase.mjs +24 -0
  130. package/esm2022/src/remote/RemoteDataViewCommandFactory.mjs +61 -0
  131. package/{esm2020 → esm2022}/src/remote/RemoteDataViewCommandUpdateNonModifiable.mjs +15 -15
  132. package/{esm2020 → esm2022}/src/remote/RemoteDataviewManager.mjs +17 -17
  133. package/{esm2020 → esm2022}/src/remote/RemoteInitDataViewCommand.mjs +10 -10
  134. package/esm2022/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +17 -0
  135. package/{esm2020 → esm2022}/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +12 -12
  136. package/esm2022/src/remote/ResetUserSortRemoteDataviewCommand.mjs +16 -0
  137. package/esm2022/src/remote/ServerError.mjs +40 -0
  138. package/esm2022/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +20 -0
  139. package/esm2022/src/rt/Argument.mjs +265 -0
  140. package/esm2022/src/rt/ArgumentsList.mjs +103 -0
  141. package/esm2022/src/rt/Boundary.mjs +152 -0
  142. package/esm2022/src/rt/CompMainPrgTable.mjs +63 -0
  143. package/{esm2020 → esm2022}/src/rt/DataviewHeaderBase.mjs +98 -96
  144. package/{esm2020 → esm2022}/src/rt/DataviewHeaderFactory.mjs +6 -6
  145. package/esm2022/src/rt/DataviewHeaders.mjs +53 -0
  146. package/esm2022/src/rt/DataviewHeadersSaxHandler.mjs +38 -0
  147. package/esm2022/src/rt/ExecutionStack.mjs +94 -0
  148. package/{esm2020 → esm2022}/src/rt/ExecutionStackEntry.mjs +17 -17
  149. package/esm2022/src/rt/HandlersTable.mjs +96 -0
  150. package/{esm2020 → esm2022}/src/rt/IDataSourceViewDefinition.mjs +1 -1
  151. package/{esm2020 → esm2022}/src/rt/IDataviewHeader.mjs +1 -1
  152. package/{esm2020 → esm2022}/src/rt/IResultValue.mjs +1 -1
  153. package/esm2022/src/rt/LastFocusedManager.mjs +65 -0
  154. package/esm2022/src/rt/Operation.mjs +735 -0
  155. package/esm2022/src/rt/OperationTable.mjs +67 -0
  156. package/esm2022/src/rt/Recompute.mjs +355 -0
  157. package/esm2022/src/rt/RecomputeTable.mjs +63 -0
  158. package/esm2022/src/rt/RemoteDataviewHeader.mjs +108 -0
  159. package/esm2022/src/rt/ResultValue.mjs +10 -0
  160. package/esm2022/src/rt/TableCache.mjs +177 -0
  161. package/esm2022/src/rt/TableCacheManager.mjs +67 -0
  162. package/esm2022/src/rt/Transaction.mjs +53 -0
  163. package/esm2022/src/security/UserDetails.mjs +71 -0
  164. package/{esm2020 → esm2022}/src/tasks/IMGDataCollection.mjs +1 -1
  165. package/esm2022/src/tasks/MGData.mjs +552 -0
  166. package/esm2022/src/tasks/MGDataCollection.mjs +252 -0
  167. package/esm2022/src/tasks/RCTimer.mjs +63 -0
  168. package/esm2022/src/tasks/RemoteTaskService.mjs +45 -0
  169. package/esm2022/src/tasks/Task.mjs +2498 -0
  170. package/esm2022/src/tasks/TaskBase.mjs +83 -0
  171. package/esm2022/src/tasks/TaskServiceBase.mjs +25 -0
  172. package/esm2022/src/tasks/TasksTable.mjs +80 -0
  173. package/esm2022/src/tasks/sort/Sort.mjs +5 -0
  174. package/esm2022/src/tasks/sort/SortCollection.mjs +67 -0
  175. package/esm2022/src/util/ConstUtils.mjs +14 -0
  176. package/esm2022/src/util/FlowMonitorQueue.mjs +451 -0
  177. package/esm2022/src/util/HeapSort.mjs +70 -0
  178. package/{esm2020 → esm2022}/src/util/IMirrorXML.mjs +1 -1
  179. package/{esm2020 → esm2022}/src/util/IServerConfig.mjs +1 -1
  180. package/{esm2020 → esm2022}/src/util/MgBlockingQueue.mjs +1 -1
  181. package/esm2022/src/util/MgPriorityBlockingQueue.mjs +74 -0
  182. package/esm2022/src/util/MgPriorityQueue.mjs +66 -0
  183. package/{esm2020 → esm2022}/src/util/ParamParseResult.mjs +7 -7
  184. package/esm2022/src/util/PrmMap.mjs +152 -0
  185. package/esm2022/src/util/ReturnResult.mjs +46 -0
  186. package/esm2022/src/util/ReturnResultBase.mjs +18 -0
  187. package/esm2022/src/util/Scrambler.mjs +89 -0
  188. package/esm2022/src/util/UniqueIDUtils.mjs +13 -0
  189. package/esm2022/src/util/cookie.service.mjs +92 -0
  190. package/{fesm2020 → fesm2022}/magic-xpa-engine.mjs +29750 -29694
  191. package/fesm2022/magic-xpa-engine.mjs.map +1 -0
  192. package/index.d.ts +187 -187
  193. package/package.json +8 -14
  194. package/src/AccessHelper.d.ts +20 -20
  195. package/src/ClientManager.d.ts +34 -32
  196. package/src/CommandsProcessorBase.d.ts +23 -23
  197. package/src/CommandsProcessorManager.d.ts +6 -6
  198. package/src/CommandsTable.d.ts +22 -22
  199. package/src/ConstInterface.d.ts +516 -515
  200. package/src/CurrentClientVersion.d.ts +1 -1
  201. package/src/FlowMonitorInterface.d.ts +15 -15
  202. package/src/GUIManager.d.ts +17 -17
  203. package/src/GlobalCommandsManager.d.ts +17 -17
  204. package/src/GuiEventsProcessor.d.ts +24 -24
  205. package/src/ICommandsTable.d.ts +9 -9
  206. package/src/ServerConfig.d.ts +35 -34
  207. package/src/bridge/IGuiEvent.d.ts +19 -19
  208. package/src/bridge/MagicBridge.d.ts +16 -16
  209. package/src/commands/ClientOriginatedCommandTaskTag.d.ts +8 -8
  210. package/src/commands/ClientToServer/AddUserLocateDataViewCommand.d.ts +4 -4
  211. package/src/commands/ClientToServer/AddUserRangeDataviewCommand.d.ts +6 -6
  212. package/src/commands/ClientToServer/AddUserSortDataViewCommand.d.ts +6 -6
  213. package/src/commands/ClientToServer/BrowserEscEventCommand.d.ts +8 -8
  214. package/src/commands/ClientToServer/ClientOriginatedCommand.d.ts +8 -8
  215. package/src/commands/ClientToServer/ClientOriginatedCommandSerializer.d.ts +6 -6
  216. package/src/commands/ClientToServer/ColumnSortEventCommand.d.ts +10 -10
  217. package/src/commands/ClientToServer/CommandFactory.d.ts +64 -64
  218. package/src/commands/ClientToServer/CommandSerializationHelper.d.ts +20 -20
  219. package/src/commands/ClientToServer/ComputeEventCommand.d.ts +8 -8
  220. package/src/commands/ClientToServer/ContextTerminationEventCommand.d.ts +7 -7
  221. package/src/commands/ClientToServer/ContextTimeoutResetCommand.d.ts +7 -7
  222. package/src/commands/ClientToServer/ControlItemsRefreshCommand.d.ts +6 -6
  223. package/src/commands/ClientToServer/DataViewOutputCommand.d.ts +9 -9
  224. package/src/commands/ClientToServer/DataviewCommand.d.ts +32 -32
  225. package/src/commands/ClientToServer/EvaluateCommand.d.ts +15 -15
  226. package/src/commands/ClientToServer/EventCommand.d.ts +15 -15
  227. package/src/commands/ClientToServer/ExecOperCommand.d.ts +23 -23
  228. package/src/commands/ClientToServer/FetchDataControlValuesEventCommand.d.ts +8 -8
  229. package/src/commands/ClientToServer/GlobalParamsQueryCommand.d.ts +5 -5
  230. package/src/commands/ClientToServer/ICommandTaskTag.d.ts +3 -3
  231. package/src/commands/ClientToServer/IndexChangeEventCommand.d.ts +8 -8
  232. package/src/commands/ClientToServer/IniputForceWriteCommand.d.ts +10 -10
  233. package/src/commands/ClientToServer/NonReversibleExitEventCommand.d.ts +8 -8
  234. package/src/commands/ClientToServer/QueryCommand.d.ts +8 -8
  235. package/src/commands/ClientToServer/RecomputeCommand.d.ts +11 -11
  236. package/src/commands/ClientToServer/RefreshEventCommand.d.ts +12 -12
  237. package/src/commands/ClientToServer/RefreshScreenEventCommand.d.ts +10 -10
  238. package/src/commands/ClientToServer/RollbackEventCommand.d.ts +14 -14
  239. package/src/commands/ClientToServer/SelectProgramCommand.d.ts +6 -6
  240. package/src/commands/ClientToServer/SetTransactionStateDataviewCommand.d.ts +5 -5
  241. package/src/commands/ClientToServer/SubformOpenEventCommand.d.ts +8 -8
  242. package/src/commands/ClientToServer/SubformRefreshEventCommand.d.ts +9 -9
  243. package/src/commands/ClientToServer/TransactionCommand.d.ts +12 -12
  244. package/src/commands/ClientToServer/UnloadCommand.d.ts +7 -7
  245. package/src/commands/ClientToServer/WriteMessageToServerLogCommand.d.ts +6 -6
  246. package/src/commands/DataViewCommandBase.d.ts +6 -6
  247. package/src/commands/IClientCommand.d.ts +2 -2
  248. package/src/commands/IClientTargetedCommand.d.ts +12 -12
  249. package/src/commands/IClientToServerCommandInfo.d.ts +3 -3
  250. package/src/commands/ServerToClient/AbortCommand.d.ts +11 -11
  251. package/src/commands/ServerToClient/AddLocateCommand.d.ts +6 -6
  252. package/src/commands/ServerToClient/AddRangeCommand.d.ts +10 -10
  253. package/src/commands/ServerToClient/AddSortCommand.d.ts +9 -9
  254. package/src/commands/ServerToClient/ClientRefreshCommand.d.ts +7 -7
  255. package/src/commands/ServerToClient/ClientTargetedCommandBase.d.ts +12 -12
  256. package/src/commands/ServerToClient/EnhancedVerifyCommand.d.ts +13 -13
  257. package/src/commands/ServerToClient/OpenURLCommand.d.ts +21 -21
  258. package/src/commands/ServerToClient/ResetLocateCommand.d.ts +6 -6
  259. package/src/commands/ServerToClient/ResetRangeCommand.d.ts +6 -6
  260. package/src/commands/ServerToClient/ResetSortCommand.d.ts +6 -6
  261. package/src/commands/ServerToClient/ResultCommand.d.ts +10 -10
  262. package/src/commands/ServerToClient/VerifyCommand.d.ts +17 -17
  263. package/src/commands/ServerToClient/XMLBasedCommandBuilder.d.ts +11 -11
  264. package/src/communications/IConnectionStateManager.d.ts +4 -4
  265. package/src/communications/InteractiveCommunicationsFailureHandler.d.ts +6 -6
  266. package/src/data/DataSourceIdKey.d.ts +2 -2
  267. package/src/data/DataView.d.ts +162 -162
  268. package/src/data/DataViewBase.d.ts +12 -12
  269. package/src/data/DataviewManager.d.ts +14 -14
  270. package/src/data/DataviewManagerBase.d.ts +11 -11
  271. package/src/data/DvCache.d.ts +15 -15
  272. package/src/data/Field.d.ts +103 -103
  273. package/src/data/FieldBase.d.ts +23 -23
  274. package/src/data/FieldsTable.d.ts +27 -27
  275. package/src/data/IRecordsTable.d.ts +7 -7
  276. package/src/data/Key.d.ts +15 -15
  277. package/src/data/Record.d.ts +156 -156
  278. package/src/data/RecordOutOfDataViewException.d.ts +10 -10
  279. package/src/data/RecordsTable.d.ts +38 -38
  280. package/src/data/TaskTransactionManager.d.ts +17 -17
  281. package/src/data/XMLBasedDcValuesBuilder.d.ts +11 -11
  282. package/src/enums.d.ts +21 -21
  283. package/src/env/EnvVariablesTable.d.ts +17 -17
  284. package/src/env/Environment.d.ts +118 -118
  285. package/src/env/ILanguageData.d.ts +3 -3
  286. package/src/env/LanguageData.d.ts +20 -20
  287. package/src/env/MirrorString.d.ts +15 -15
  288. package/src/event/ActionManager.d.ts +14 -14
  289. package/src/event/Event.d.ts +79 -79
  290. package/src/event/EventHandler.d.ts +66 -66
  291. package/src/event/EventHandlerPosition.d.ts +25 -25
  292. package/src/event/EventsManager.d.ts +205 -204
  293. package/src/event/IEventsManager.d.ts +77 -77
  294. package/src/event/RunTimeEvent.d.ts +126 -123
  295. package/src/event/RunTimeEventBase.d.ts +5 -5
  296. package/src/event/UserEventsTable.d.ts +11 -11
  297. package/src/exp/ExpTable.d.ts +11 -11
  298. package/src/exp/Expression.d.ts +37 -37
  299. package/src/exp/ExpressionDict.d.ts +12 -12
  300. package/src/exp/ExpressionEvaluator.d.ts +198 -198
  301. package/src/exp/ExpressionLocalJpn.d.ts +18 -18
  302. package/src/exp/GlobalParamsTable.d.ts +19 -19
  303. package/src/exp/YesNoExp.d.ts +9 -9
  304. package/src/gui/CreatedFormVector.d.ts +10 -10
  305. package/src/gui/FormsTable.d.ts +15 -15
  306. package/src/gui/MgControl.d.ts +60 -60
  307. package/src/gui/MgForm.d.ts +93 -93
  308. package/src/http/HttpManager.d.ts +25 -25
  309. package/src/http/client/HttpClientAsync.d.ts +16 -16
  310. package/src/http/client/HttpClientBase.d.ts +30 -30
  311. package/src/http/client/HttpClientEvents.d.ts +18 -18
  312. package/src/http/client/HttpClientSync.d.ts +17 -17
  313. package/src/http/client/HttpUtility.d.ts +10 -10
  314. package/src/http/client/ICommunicationsFailureHandler.d.ts +5 -5
  315. package/src/remote/AddUserLocateRemoteDataViewCommand.d.ts +8 -8
  316. package/src/remote/AddUserRangeRemoteDataViewCommand.d.ts +8 -8
  317. package/src/remote/AddUserSortRemoteDataViewCommand.d.ts +8 -8
  318. package/src/remote/RemoteCommandsProcessor.d.ts +51 -51
  319. package/src/remote/RemoteControlItemsRefreshCommand.d.ts +8 -8
  320. package/src/remote/RemoteDataViewCommandBase.d.ts +10 -10
  321. package/src/remote/RemoteDataViewCommandFactory.d.ts +6 -6
  322. package/src/remote/RemoteDataViewCommandUpdateNonModifiable.d.ts +8 -8
  323. package/src/remote/RemoteDataviewManager.d.ts +9 -9
  324. package/src/remote/RemoteInitDataViewCommand.d.ts +7 -7
  325. package/src/remote/ResetUserLocateRemoteDataviewCommand.d.ts +7 -7
  326. package/src/remote/ResetUserRangeRemoteDataviewCommand.d.ts +7 -7
  327. package/src/remote/ResetUserSortRemoteDataviewCommand.d.ts +7 -7
  328. package/src/remote/ServerError.d.ts +16 -16
  329. package/src/remote/SetTransactionStateRemoteDataViewCommand.d.ts +8 -8
  330. package/src/rt/Argument.d.ts +36 -36
  331. package/src/rt/ArgumentsList.d.ts +24 -24
  332. package/src/rt/Boundary.d.ts +27 -27
  333. package/src/rt/CompMainPrgTable.d.ts +10 -10
  334. package/src/rt/DataviewHeaderBase.d.ts +34 -34
  335. package/src/rt/DataviewHeaderFactory.d.ts +5 -5
  336. package/src/rt/DataviewHeaders.d.ts +12 -12
  337. package/src/rt/DataviewHeadersSaxHandler.d.ts +10 -10
  338. package/src/rt/ExecutionStack.d.ts +22 -22
  339. package/src/rt/ExecutionStackEntry.d.ts +7 -7
  340. package/src/rt/HandlersTable.d.ts +19 -19
  341. package/src/rt/IDataSourceViewDefinition.d.ts +6 -6
  342. package/src/rt/IDataviewHeader.d.ts +10 -10
  343. package/src/rt/IResultValue.d.ts +4 -4
  344. package/src/rt/LastFocusedManager.d.ts +23 -23
  345. package/src/rt/Operation.d.ts +97 -97
  346. package/src/rt/OperationTable.d.ts +15 -15
  347. package/src/rt/Recompute.d.ts +41 -41
  348. package/src/rt/RecomputeTable.d.ts +9 -9
  349. package/src/rt/RemoteDataviewHeader.d.ts +14 -14
  350. package/src/rt/ResultValue.d.ts +7 -7
  351. package/src/rt/TableCache.d.ts +29 -29
  352. package/src/rt/TableCacheManager.d.ts +10 -10
  353. package/src/rt/Transaction.d.ts +23 -23
  354. package/src/security/UserDetails.d.ts +16 -16
  355. package/src/tasks/IMGDataCollection.d.ts +26 -26
  356. package/src/tasks/MGData.d.ts +63 -63
  357. package/src/tasks/MGDataCollection.d.ts +42 -42
  358. package/src/tasks/RCTimer.d.ts +13 -13
  359. package/src/tasks/RemoteTaskService.d.ts +16 -16
  360. package/src/tasks/Task.d.ts +312 -312
  361. package/src/tasks/TaskBase.d.ts +123 -123
  362. package/src/tasks/TaskServiceBase.d.ts +16 -16
  363. package/src/tasks/TasksTable.d.ts +21 -21
  364. package/src/tasks/sort/Sort.d.ts +4 -4
  365. package/src/tasks/sort/SortCollection.d.ts +11 -11
  366. package/src/util/ConstUtils.d.ts +3 -3
  367. package/src/util/FlowMonitorQueue.d.ts +70 -70
  368. package/src/util/HeapSort.d.ts +6 -6
  369. package/src/util/IMirrorXML.d.ts +6 -6
  370. package/src/util/IServerConfig.d.ts +11 -11
  371. package/src/util/MgBlockingQueue.d.ts +5 -5
  372. package/src/util/MgPriorityBlockingQueue.d.ts +17 -17
  373. package/src/util/MgPriorityQueue.d.ts +13 -13
  374. package/src/util/ParamParseResult.d.ts +6 -6
  375. package/src/util/PrmMap.d.ts +28 -28
  376. package/src/util/ReturnResult.d.ts +18 -18
  377. package/src/util/ReturnResultBase.d.ts +11 -11
  378. package/src/util/Scrambler.d.ts +10 -10
  379. package/src/util/UniqueIDUtils.d.ts +4 -4
  380. package/src/util/cookie.service.d.ts +8 -8
  381. package/esm2020/src/AccessHelper.mjs +0 -9
  382. package/esm2020/src/ClientManager.mjs +0 -399
  383. package/esm2020/src/CommandsProcessorBase.mjs +0 -58
  384. package/esm2020/src/CommandsProcessorManager.mjs +0 -26
  385. package/esm2020/src/CommandsTable.mjs +0 -162
  386. package/esm2020/src/ConstInterface.mjs +0 -516
  387. package/esm2020/src/FlowMonitorInterface.mjs +0 -16
  388. package/esm2020/src/GUIManager.mjs +0 -62
  389. package/esm2020/src/GlobalCommandsManager.mjs +0 -34
  390. package/esm2020/src/GuiEventsProcessor.mjs +0 -154
  391. package/esm2020/src/ServerConfig.mjs +0 -117
  392. package/esm2020/src/commands/ClientOriginatedCommandTaskTag.mjs +0 -11
  393. package/esm2020/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +0 -60
  394. package/esm2020/src/commands/ClientToServer/CommandFactory.mjs +0 -260
  395. package/esm2020/src/commands/ClientToServer/CommandSerializationHelper.mjs +0 -69
  396. package/esm2020/src/commands/ClientToServer/DataViewOutputCommand.mjs +0 -13
  397. package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +0 -36
  398. package/esm2020/src/commands/ClientToServer/EventCommand.mjs +0 -40
  399. package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +0 -67
  400. package/esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +0 -22
  401. package/esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs +0 -23
  402. package/esm2020/src/commands/ClientToServer/RecomputeCommand.mjs +0 -27
  403. package/esm2020/src/commands/ClientToServer/RefreshEventCommand.mjs +0 -27
  404. package/esm2020/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +0 -24
  405. package/esm2020/src/commands/ClientToServer/RollbackEventCommand.mjs +0 -39
  406. package/esm2020/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +0 -24
  407. package/esm2020/src/commands/ClientToServer/TransactionCommand.mjs +0 -28
  408. package/esm2020/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +0 -18
  409. package/esm2020/src/commands/DataViewCommandBase.mjs +0 -10
  410. package/esm2020/src/commands/IClientTargetedCommand.mjs +0 -9
  411. package/esm2020/src/commands/ServerToClient/AbortCommand.mjs +0 -65
  412. package/esm2020/src/commands/ServerToClient/AddRangeCommand.mjs +0 -62
  413. package/esm2020/src/commands/ServerToClient/AddSortCommand.mjs +0 -33
  414. package/esm2020/src/commands/ServerToClient/ClientRefreshCommand.mjs +0 -25
  415. package/esm2020/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +0 -27
  416. package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +0 -45
  417. package/esm2020/src/commands/ServerToClient/OpenURLCommand.mjs +0 -221
  418. package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +0 -37
  419. package/esm2020/src/commands/ServerToClient/VerifyCommand.mjs +0 -83
  420. package/esm2020/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +0 -132
  421. package/esm2020/src/communications/InteractiveCommunicationsFailureHandler.mjs +0 -17
  422. package/esm2020/src/data/DataView.mjs +0 -1610
  423. package/esm2020/src/data/DataviewManager.mjs +0 -28
  424. package/esm2020/src/data/DataviewManagerBase.mjs +0 -15
  425. package/esm2020/src/data/DvCache.mjs +0 -67
  426. package/esm2020/src/data/Field.mjs +0 -646
  427. package/esm2020/src/data/FieldBase.mjs +0 -18
  428. package/esm2020/src/data/FieldsTable.mjs +0 -103
  429. package/esm2020/src/data/Key.mjs +0 -88
  430. package/esm2020/src/data/Record.mjs +0 -846
  431. package/esm2020/src/data/RecordsTable.mjs +0 -267
  432. package/esm2020/src/data/TaskTransactionManager.mjs +0 -103
  433. package/esm2020/src/data/XMLBasedDcValuesBuilder.mjs +0 -74
  434. package/esm2020/src/env/EnvVariablesTable.mjs +0 -340
  435. package/esm2020/src/env/Environment.mjs +0 -489
  436. package/esm2020/src/env/LanguageData.mjs +0 -226
  437. package/esm2020/src/env/MirrorString.mjs +0 -65
  438. package/esm2020/src/event/ActionManager.mjs +0 -91
  439. package/esm2020/src/event/Event.mjs +0 -1333
  440. package/esm2020/src/event/EventHandler.mjs +0 -766
  441. package/esm2020/src/event/EventHandlerPosition.mjs +0 -204
  442. package/esm2020/src/event/EventsManager.mjs +0 -2975
  443. package/esm2020/src/event/RunTimeEvent.mjs +0 -392
  444. package/esm2020/src/event/UserEventsTable.mjs +0 -47
  445. package/esm2020/src/exp/ExpTable.mjs +0 -59
  446. package/esm2020/src/exp/Expression.mjs +0 -200
  447. package/esm2020/src/exp/ExpressionDict.mjs +0 -727
  448. package/esm2020/src/exp/ExpressionEvaluator.mjs +0 -4212
  449. package/esm2020/src/exp/ExpressionLocalJpn.mjs +0 -314
  450. package/esm2020/src/exp/GlobalParamsTable.mjs +0 -85
  451. package/esm2020/src/exp/YesNoExp.mjs +0 -36
  452. package/esm2020/src/gui/CreatedFormVector.mjs +0 -23
  453. package/esm2020/src/gui/FormsTable.mjs +0 -66
  454. package/esm2020/src/gui/MgControl.mjs +0 -353
  455. package/esm2020/src/gui/MgForm.mjs +0 -1181
  456. package/esm2020/src/http/HttpManager.mjs +0 -97
  457. package/esm2020/src/http/client/HttpClientAsync.mjs +0 -67
  458. package/esm2020/src/http/client/HttpClientBase.mjs +0 -132
  459. package/esm2020/src/http/client/HttpClientEvents.mjs +0 -39
  460. package/esm2020/src/http/client/HttpClientSync.mjs +0 -42
  461. package/esm2020/src/http/client/HttpUtility.mjs +0 -84
  462. package/esm2020/src/remote/AddUserLocateRemoteDataViewCommand.mjs +0 -18
  463. package/esm2020/src/remote/AddUserRangeRemoteDataViewCommand.mjs +0 -18
  464. package/esm2020/src/remote/AddUserSortRemoteDataViewCommand.mjs +0 -18
  465. package/esm2020/src/remote/RemoteCommandsProcessor.mjs +0 -880
  466. package/esm2020/src/remote/RemoteControlItemsRefreshCommand.mjs +0 -25
  467. package/esm2020/src/remote/RemoteDataViewCommandBase.mjs +0 -24
  468. package/esm2020/src/remote/RemoteDataViewCommandFactory.mjs +0 -61
  469. package/esm2020/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +0 -17
  470. package/esm2020/src/remote/ResetUserSortRemoteDataviewCommand.mjs +0 -16
  471. package/esm2020/src/remote/ServerError.mjs +0 -40
  472. package/esm2020/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +0 -20
  473. package/esm2020/src/rt/Argument.mjs +0 -265
  474. package/esm2020/src/rt/ArgumentsList.mjs +0 -103
  475. package/esm2020/src/rt/Boundary.mjs +0 -152
  476. package/esm2020/src/rt/CompMainPrgTable.mjs +0 -65
  477. package/esm2020/src/rt/DataviewHeaders.mjs +0 -53
  478. package/esm2020/src/rt/DataviewHeadersSaxHandler.mjs +0 -38
  479. package/esm2020/src/rt/ExecutionStack.mjs +0 -94
  480. package/esm2020/src/rt/HandlersTable.mjs +0 -96
  481. package/esm2020/src/rt/LastFocusedManager.mjs +0 -67
  482. package/esm2020/src/rt/Operation.mjs +0 -735
  483. package/esm2020/src/rt/OperationTable.mjs +0 -67
  484. package/esm2020/src/rt/Recompute.mjs +0 -355
  485. package/esm2020/src/rt/RecomputeTable.mjs +0 -63
  486. package/esm2020/src/rt/RemoteDataviewHeader.mjs +0 -108
  487. package/esm2020/src/rt/ResultValue.mjs +0 -12
  488. package/esm2020/src/rt/TableCache.mjs +0 -177
  489. package/esm2020/src/rt/TableCacheManager.mjs +0 -67
  490. package/esm2020/src/rt/Transaction.mjs +0 -53
  491. package/esm2020/src/security/UserDetails.mjs +0 -71
  492. package/esm2020/src/tasks/MGData.mjs +0 -552
  493. package/esm2020/src/tasks/MGDataCollection.mjs +0 -252
  494. package/esm2020/src/tasks/RCTimer.mjs +0 -63
  495. package/esm2020/src/tasks/RemoteTaskService.mjs +0 -45
  496. package/esm2020/src/tasks/Task.mjs +0 -2496
  497. package/esm2020/src/tasks/TaskBase.mjs +0 -87
  498. package/esm2020/src/tasks/TaskServiceBase.mjs +0 -25
  499. package/esm2020/src/tasks/TasksTable.mjs +0 -80
  500. package/esm2020/src/tasks/sort/Sort.mjs +0 -7
  501. package/esm2020/src/tasks/sort/SortCollection.mjs +0 -67
  502. package/esm2020/src/util/ConstUtils.mjs +0 -14
  503. package/esm2020/src/util/FlowMonitorQueue.mjs +0 -453
  504. package/esm2020/src/util/HeapSort.mjs +0 -70
  505. package/esm2020/src/util/MgPriorityBlockingQueue.mjs +0 -74
  506. package/esm2020/src/util/MgPriorityQueue.mjs +0 -66
  507. package/esm2020/src/util/PrmMap.mjs +0 -151
  508. package/esm2020/src/util/ReturnResult.mjs +0 -46
  509. package/esm2020/src/util/ReturnResultBase.mjs +0 -18
  510. package/esm2020/src/util/Scrambler.mjs +0 -89
  511. package/esm2020/src/util/UniqueIDUtils.mjs +0 -12
  512. package/esm2020/src/util/cookie.service.mjs +0 -92
  513. package/fesm2015/magic-xpa-engine.mjs +0 -30836
  514. package/fesm2015/magic-xpa-engine.mjs.map +0 -1
  515. package/fesm2020/magic-xpa-engine.mjs.map +0 -1
@@ -0,0 +1,66 @@
1
+ import { List } from "@magic-xpa/mscorelib";
2
+ import { XMLConstants } from "@magic-xpa/utils";
3
+ import { Manager, RuntimeContextBase } from "@magic-xpa/gui";
4
+ import { RemoteTaskService } from "../tasks/RemoteTaskService";
5
+ export class FormsTable {
6
+ _task = null;
7
+ _parentForm = null;
8
+ _formsStringXml = null;
9
+ get Count() {
10
+ return this._formsStringXml.length;
11
+ }
12
+ get_Item(formDisplayIndex) {
13
+ if (formDisplayIndex > 0 && formDisplayIndex <= this._formsStringXml.length)
14
+ return this._formsStringXml.get_Item(formDisplayIndex - 1);
15
+ return null;
16
+ }
17
+ constructor(task, parentForm) {
18
+ this._task = task;
19
+ this._parentForm = parentForm;
20
+ }
21
+ async fillData() {
22
+ this._formsStringXml = new List();
23
+ let parser = Manager.GetCurrentRuntimeContext().Parser;
24
+ while (await this.initInnerObjects(parser.getNextTag())) {
25
+ }
26
+ }
27
+ InitFormFromXmlString(formDisplayIndex) {
28
+ let formStrXml = this.get_Item(1);
29
+ if (formDisplayIndex > 0 && formDisplayIndex <= this._formsStringXml.length)
30
+ formStrXml = this.get_Item(formDisplayIndex);
31
+ if (formStrXml !== null) {
32
+ RuntimeContextBase.Instance.Parser.push();
33
+ RuntimeContextBase.Instance.Parser.PrepareFormReadString(formStrXml);
34
+ this._task.FormInitData(this._parentForm);
35
+ RuntimeContextBase.Instance.Parser.pop();
36
+ }
37
+ }
38
+ async initInnerObjects(foundTagName) {
39
+ if (foundTagName === null)
40
+ return false;
41
+ let parser = Manager.GetCurrentRuntimeContext().Parser;
42
+ if (foundTagName === XMLConstants.MG_TAG_FORMS) {
43
+ parser.setCurrIndex(parser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, parser.getCurrIndex()) + 1);
44
+ }
45
+ else if (foundTagName === XMLConstants.MG_TAG_FORM) {
46
+ let formStringXml = RuntimeContextBase.Instance.Parser.ReadToEndOfCurrentElement();
47
+ this._formsStringXml.push(formStringXml);
48
+ return true;
49
+ }
50
+ else if (foundTagName === ('/' + XMLConstants.MG_TAG_FORM)) {
51
+ parser.setCurrIndex2EndOfTag();
52
+ return true;
53
+ }
54
+ else if (foundTagName === ('/' + XMLConstants.MG_TAG_FORMS)) {
55
+ await this.PrepareMainDisplayForConnectedTask();
56
+ parser.setCurrIndex2EndOfTag();
57
+ return false;
58
+ }
59
+ return true;
60
+ }
61
+ async PrepareMainDisplayForConnectedTask() {
62
+ if (this._task.TaskService instanceof RemoteTaskService)
63
+ await this._task.PrepareTaskForm();
64
+ }
65
+ }
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybXNUYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZ3VpL0Zvcm1zVGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzFDLE9BQU8sRUFBWSxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsT0FBTyxFQUFjLGtCQUFrQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFLN0QsTUFBTSxPQUFPLFVBQVU7SUFDYixLQUFLLEdBQVMsSUFBSSxDQUFDO0lBQ25CLFdBQVcsR0FBZSxJQUFJLENBQUM7SUFDdkMsZUFBZSxHQUFpQixJQUFJLENBQUM7SUFLckMsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztJQUNyQyxDQUFDO0lBT0QsUUFBUSxDQUFDLGdCQUF3QjtRQUMvQixJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07WUFDekUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU3RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxZQUFZLElBQVUsRUFBRSxVQUFzQjtRQUM1QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBTUQsS0FBSyxDQUFDLFFBQVE7UUFDWixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFbEMsSUFBSSxNQUFNLEdBQWMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUMsTUFBTSxDQUFDO1FBRWxFLE9BQU8sTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQztJQU1ELHFCQUFxQixDQUFDLGdCQUF3QjtRQUU1QyxJQUFJLFVBQVUsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFDLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTtZQUN6RSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRS9DLElBQUksVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hCLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVyRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQU9PLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFvQjtRQUNqRCxJQUFJLFlBQVksS0FBSyxJQUFJO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1FBRWYsSUFBSSxNQUFNLEdBQWMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2xFLElBQUksWUFBWSxLQUFLLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RyxDQUFDO2FBQ0ksSUFBSSxZQUFZLEtBQUssWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25ELElBQUksYUFBYSxHQUFXLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUMzRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFDSSxJQUFJLFlBQVksS0FBSyxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFDSSxJQUFJLFlBQVksS0FBSyxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxNQUFNLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1lBRWhELE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUtPLEtBQUssQ0FBQyxrQ0FBa0M7UUFDOUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsWUFBWSxpQkFBaUI7WUFDckQsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7WG1sUGFyc2VyLCBYTUxDb25zdGFudHN9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7TWFuYWdlciwgTWdGb3JtQmFzZSwgUnVudGltZUNvbnRleHRCYXNlfSBmcm9tIFwiQG1hZ2ljLXhwYS9ndWlcIjtcclxuaW1wb3J0IHtUYXNrfSBmcm9tIFwiLi4vdGFza3MvVGFza1wiO1xyXG5pbXBvcnQge1JlbW90ZVRhc2tTZXJ2aWNlfSBmcm9tIFwiLi4vdGFza3MvUmVtb3RlVGFza1NlcnZpY2VcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vIHNhdmUgYWxsIGZvcm1zIG9uIHRhc2tcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIEZvcm1zVGFibGUge1xyXG4gIHByaXZhdGUgX3Rhc2s6IFRhc2sgPSBudWxsO1xyXG4gIHByaXZhdGUgX3BhcmVudEZvcm06IE1nRm9ybUJhc2UgPSBudWxsO1xyXG4gIF9mb3Jtc1N0cmluZ1htbDogTGlzdDxzdHJpbmc+ID0gbnVsbDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBjb3VudCBvZiBmb3Jtc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0IENvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybXNTdHJpbmdYbWwubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm4gdGhlIGZvcm0gYnkgc2VuZCB0aGUgZGlzcGxheSBpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZm9ybURpc3BsYXlJbmRleFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRfSXRlbShmb3JtRGlzcGxheUluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGZvcm1EaXNwbGF5SW5kZXggPiAwICYmIGZvcm1EaXNwbGF5SW5kZXggPD0gdGhpcy5fZm9ybXNTdHJpbmdYbWwubGVuZ3RoKVxyXG4gICAgICByZXR1cm4gdGhpcy5fZm9ybXNTdHJpbmdYbWwuZ2V0X0l0ZW0oZm9ybURpc3BsYXlJbmRleCAtIDEpO1xyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IodGFzazogVGFzaywgcGFyZW50Rm9ybTogTWdGb3JtQmFzZSkge1xyXG4gICAgdGhpcy5fdGFzayA9IHRhc2s7XHJcbiAgICB0aGlzLl9wYXJlbnRGb3JtID0gcGFyZW50Rm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBwYXJzZSB0aGUgZm9ybSBzdHJ1Y3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1JlZlwiPnJlZmVyZW5jZSB0byB0aGUgb3duZXJUYXNrIG9mIHRoaXMgZm9ybTwvcGFyYW0+XHJcbiAgYXN5bmMgZmlsbERhdGEoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9mb3Jtc1N0cmluZ1htbCA9IG5ldyBMaXN0KCk7XHJcblxyXG4gICAgbGV0IHBhcnNlcjogWG1sUGFyc2VyID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5QYXJzZXI7XHJcblxyXG4gICAgd2hpbGUgKGF3YWl0IHRoaXMuaW5pdElubmVyT2JqZWN0cyhwYXJzZXIuZ2V0TmV4dFRhZygpKSkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpbml0IHRoZSBmb3JtIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmb3JtRGlzcGxheUluZGV4XCI+PC9wYXJhbT5cclxuICBJbml0Rm9ybUZyb21YbWxTdHJpbmcoZm9ybURpc3BsYXlJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAvLyB3aGlsZSB0aGUgZm9ybSBpc24ndCBleGlzdCB0aGUgZmlyc3QgZm9ybSB3aWxsIGJlIG9wZW4uIChpdCBpcyB0aGUgc2FtZSBpbiBub24gb2ZmbGluZSB0YXNrKVxyXG4gICAgbGV0IGZvcm1TdHJYbWw6IHN0cmluZyA9IHRoaXMuZ2V0X0l0ZW0oMSk7XHJcblxyXG4gICAgaWYgKGZvcm1EaXNwbGF5SW5kZXggPiAwICYmIGZvcm1EaXNwbGF5SW5kZXggPD0gdGhpcy5fZm9ybXNTdHJpbmdYbWwubGVuZ3RoKVxyXG4gICAgICBmb3JtU3RyWG1sID0gdGhpcy5nZXRfSXRlbShmb3JtRGlzcGxheUluZGV4KTtcclxuXHJcbiAgICBpZiAoZm9ybVN0clhtbCAhPT0gbnVsbCkge1xyXG4gICAgICBSdW50aW1lQ29udGV4dEJhc2UuSW5zdGFuY2UuUGFyc2VyLnB1c2goKTsgLy8gYWxsb3cgcmVjdXJzaXZlIHBhcnNpbmdcclxuICAgICAgUnVudGltZUNvbnRleHRCYXNlLkluc3RhbmNlLlBhcnNlci5QcmVwYXJlRm9ybVJlYWRTdHJpbmcoZm9ybVN0clhtbCk7XHJcblxyXG4gICAgICB0aGlzLl90YXNrLkZvcm1Jbml0RGF0YSh0aGlzLl9wYXJlbnRGb3JtKTtcclxuICAgICAgUnVudGltZUNvbnRleHRCYXNlLkluc3RhbmNlLlBhcnNlci5wb3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUbyBhbGxvY2F0ZSBhbmQgZmlsbCBpbm5lciBvYmplY3RzIG9mIHRoZSBjbGFzc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZm91bmRUYWdOYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgYXN5bmMgaW5pdElubmVyT2JqZWN0cyhmb3VuZFRhZ05hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKGZvdW5kVGFnTmFtZSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCBwYXJzZXI6IFhtbFBhcnNlciA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuUGFyc2VyO1xyXG4gICAgaWYgKGZvdW5kVGFnTmFtZSA9PT0gWE1MQ29uc3RhbnRzLk1HX1RBR19GT1JNUykge1xyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7IC8vIG1vdmUgSW5kZXggdG8gZW5kIG9mIDxkdmhlYWRlcj4gKzEgZm9yICc+J1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZm91bmRUYWdOYW1lID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0ZPUk0pIHtcclxuICAgICAgbGV0IGZvcm1TdHJpbmdYbWw6IHN0cmluZyA9IFJ1bnRpbWVDb250ZXh0QmFzZS5JbnN0YW5jZS5QYXJzZXIuUmVhZFRvRW5kT2ZDdXJyZW50RWxlbWVudCgpO1xyXG4gICAgICB0aGlzLl9mb3Jtc1N0cmluZ1htbC5wdXNoKGZvcm1TdHJpbmdYbWwpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZvdW5kVGFnTmFtZSA9PT0gKCcvJyArIFhNTENvbnN0YW50cy5NR19UQUdfRk9STSkpIHtcclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZvdW5kVGFnTmFtZSA9PT0gKCcvJyArIFhNTENvbnN0YW50cy5NR19UQUdfRk9STVMpKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuUHJlcGFyZU1haW5EaXNwbGF5Rm9yQ29ubmVjdGVkVGFzaygpO1xyXG5cclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZm9yIHJlbW90ZSB0YXNrIHdlIGhhdmUgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBmb3JtIGRpc3BsYXlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgUHJlcGFyZU1haW5EaXNwbGF5Rm9yQ29ubmVjdGVkVGFzaygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl90YXNrLlRhc2tTZXJ2aWNlIGluc3RhbmNlb2YgUmVtb3RlVGFza1NlcnZpY2UpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3Rhc2suUHJlcGFyZVRhc2tGb3JtKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,363 @@
1
+ import { Commands, CommandType, GuiDataCollection, HtmlProperties, MgControlBase, PropInterface } from '@magic-xpa/gui';
2
+ import { InternalInterface, Logger, MgControlType, ScrollBarThumbType, StorageAttribute, SubformType, TableBehaviour } from '@magic-xpa/utils';
3
+ import { Debug, NString } from '@magic-xpa/mscorelib';
4
+ import { ArgumentsList } from '../rt/ArgumentsList';
5
+ import { TaskBase } from '../tasks/TaskBase';
6
+ import { ConstInterface } from '../ConstInterface';
7
+ import { AccessHelper } from '../AccessHelper';
8
+ export class MgControl extends MgControlBase {
9
+ _focusedStopExecution;
10
+ _inControlSuffix;
11
+ _rtEvtTask;
12
+ _subformTaskId;
13
+ _subformTask;
14
+ IsInteractiveUpdate;
15
+ refreshOnString;
16
+ SubformLoaded;
17
+ HasZoomHandler;
18
+ ArgList;
19
+ static ReturnToCtrl = null;
20
+ initialize() {
21
+ this._focusedStopExecution = false;
22
+ this._inControlSuffix = false;
23
+ this._rtEvtTask = null;
24
+ this._subformTaskId = null;
25
+ this._subformTask = null;
26
+ this.IsInteractiveUpdate = false;
27
+ this.refreshOnString = null;
28
+ this.SubformLoaded = false;
29
+ this.HasZoomHandler = false;
30
+ this.ArgList = null;
31
+ }
32
+ constructor(type, taskOrParentMgForm, parentControlOrParentControlIdx) {
33
+ if (arguments.length === 0)
34
+ super();
35
+ else if (arguments.length === 3 && (type === null || type.constructor === Number) && (taskOrParentMgForm === null || taskOrParentMgForm instanceof TaskBase) && (parentControlOrParentControlIdx === null || parentControlOrParentControlIdx.constructor === Number))
36
+ super(type, taskOrParentMgForm.getForm(), parentControlOrParentControlIdx);
37
+ else
38
+ super(type, taskOrParentMgForm, parentControlOrParentControlIdx);
39
+ this.initialize();
40
+ }
41
+ GetVarIndex() {
42
+ return super.getForm().getTask().DataView.Dvcount + this.veeIndx;
43
+ }
44
+ async fillData(mgForm, ditIdx, parser) {
45
+ super.fillData(mgForm, ditIdx, parser);
46
+ this.ArgList = await this.GetArgumentList();
47
+ }
48
+ SetAttribute(attribute, valueStr) {
49
+ let isTagProcessed = super.SetAttribute(attribute, valueStr);
50
+ if (!isTagProcessed) {
51
+ switch (attribute) {
52
+ case ConstInterface.MG_ATTR_SUBFORM_TASK:
53
+ if (valueStr.trim() != "")
54
+ this._subformTaskId = valueStr;
55
+ break;
56
+ case ConstInterface.MG_ATTR_REFRESHON:
57
+ this.refreshOnString = valueStr.trim();
58
+ break;
59
+ default:
60
+ isTagProcessed = false;
61
+ Logger.Instance.WriteExceptionToLogWithMsg(NString.Format("Unrecognized attribute: '{0}'", attribute));
62
+ break;
63
+ }
64
+ }
65
+ return isTagProcessed;
66
+ }
67
+ async GetArgumentList() {
68
+ let argList = null;
69
+ if (this._propTab === null)
70
+ return argList;
71
+ let ArgListProp = this._propTab.getPropById(PropInterface.PROP_TYPE_PARAMETERS);
72
+ if (ArgListProp === null)
73
+ return argList;
74
+ let parms = await ArgListProp.getValue();
75
+ if (parms !== null) {
76
+ argList = new ArgumentsList();
77
+ argList.fillList(parms, super.getForm().getTask());
78
+ if (this.refreshOnString !== null)
79
+ argList.RefreshOnString = this.refreshOnString;
80
+ }
81
+ return argList;
82
+ }
83
+ isDescendent(parentForm) {
84
+ let isDescendent = false;
85
+ let checkCurrentForm = super.getForm();
86
+ Debug.Assert(parentForm !== null);
87
+ while (!isDescendent && checkCurrentForm !== null) {
88
+ if (parentForm === checkCurrentForm)
89
+ isDescendent = true;
90
+ else {
91
+ let currTask = checkCurrentForm.getTask();
92
+ if (currTask.getParent() !== null)
93
+ checkCurrentForm = currTask.getParent().getForm();
94
+ else
95
+ break;
96
+ }
97
+ }
98
+ return isDescendent;
99
+ }
100
+ async refreshOnExpression() {
101
+ let i;
102
+ let size = (this._propTab === null ? 0 : this._propTab.getSize());
103
+ let prop;
104
+ let refresh = false;
105
+ for (i = 0; i < size && !refresh; i++) {
106
+ prop = this._propTab.getProp(i);
107
+ switch (prop.getID()) {
108
+ case PropInterface.PROP_TYPE_DATA:
109
+ if (!prop.isExpression() && this._field !== null && this._field.getTask() !== this.getForm().getTask()) {
110
+ refresh = true;
111
+ break;
112
+ }
113
+ case PropInterface.PROP_TYPE_FORMAT:
114
+ case PropInterface.PROP_TYPE_VISIBLE:
115
+ case PropInterface.PROP_TYPE_ENABLED:
116
+ case PropInterface.PROP_TYPE_RANGE:
117
+ case PropInterface.PROP_TYPE_TRANSLATOR:
118
+ if (prop.isExpression())
119
+ refresh = true;
120
+ break;
121
+ default:
122
+ break;
123
+ }
124
+ if (refresh)
125
+ await this.RefreshDisplay();
126
+ }
127
+ }
128
+ async invoke() {
129
+ let invoked = false;
130
+ if (await this.isParkable(true)) {
131
+ await AccessHelper.eventsManager.handleInternalEventWithMgControlBase(this, InternalInterface.MG_ACT_CTRL_PREFIX);
132
+ invoked = true;
133
+ }
134
+ return invoked;
135
+ }
136
+ async isParkable(checkEnabledAndVisible) {
137
+ let result = !super.isImageControl();
138
+ if (result) {
139
+ await super.checkProp(PropInterface.PROP_TYPE_ENABLED, true);
140
+ await super.checkProp(PropInterface.PROP_TYPE_VISIBLE, true);
141
+ result = await super.isParkable(checkEnabledAndVisible);
142
+ }
143
+ return result;
144
+ }
145
+ getSubformTaskId() {
146
+ return this._subformTaskId;
147
+ }
148
+ initSubformTask() {
149
+ if (super.isSubform())
150
+ this._subformTask = GuiDataCollection.MGDataTable.GetTaskByID(this._subformTaskId);
151
+ }
152
+ getParentTable() {
153
+ return this._parentTable;
154
+ }
155
+ async restoreOldValue() {
156
+ if (this._field !== null)
157
+ await this._field.updateDisplay();
158
+ else {
159
+ super.resetPrevVal();
160
+ await super.SetAndRefreshDisplayValue(await this.getMgValue(this.Value), this.IsNull);
161
+ }
162
+ }
163
+ setRtEvtTask(curTask) {
164
+ this._rtEvtTask = curTask;
165
+ }
166
+ getRtEvtTask() {
167
+ return this._rtEvtTask;
168
+ }
169
+ setSubformTaskId(taskId) {
170
+ this._subformTaskId = taskId;
171
+ }
172
+ isFocusedStopExecution() {
173
+ return this._focusedStopExecution;
174
+ }
175
+ setFocusedStopExecution(focusedStopExecution) {
176
+ this._focusedStopExecution = focusedStopExecution;
177
+ }
178
+ onTheSameSubFormControl(ctrl) {
179
+ let retValue = false;
180
+ if (ctrl !== null) {
181
+ if (super.getForm().isSubForm() && ctrl.getForm().isSubForm()) {
182
+ if (super.getForm().getTask() === ctrl.getForm().getTask())
183
+ retValue = true;
184
+ }
185
+ }
186
+ return retValue;
187
+ }
188
+ onDiffForm(ctrl) {
189
+ let isSubform = super.getForm().isSubForm() || ctrl.getForm().isSubForm();
190
+ let isOnDiffForm = (isSubform) && !this.onTheSameSubFormControl(ctrl);
191
+ return isOnDiffForm;
192
+ }
193
+ isInControlSuffix() {
194
+ return this._inControlSuffix;
195
+ }
196
+ setInControlSuffix(inControlSuffix) {
197
+ this._inControlSuffix = inControlSuffix;
198
+ }
199
+ HasSelectProgram() {
200
+ let HasSelectProgram = false;
201
+ let selectProgProp = super.GetComputedProperty(PropInterface.PROP_TYPE_SELECT_PROGRAM);
202
+ if (selectProgProp !== null && selectProgProp.GetComputedValue() !== null)
203
+ HasSelectProgram = true;
204
+ return HasSelectProgram;
205
+ }
206
+ useZoomHandler() {
207
+ return this.HasZoomHandler || (super.getField() !== null && (super.getField().getHasZoomHandler() || (this.HasSelectProgram())));
208
+ }
209
+ async updatePropertyLogicNesting(propId, commandType, val, updateThis) {
210
+ if (val && super.haveToCheckParentValue())
211
+ val = super.isParentPropValue(propId);
212
+ if (val && super.isSubform() && commandType === CommandType.PROP_SET_VISIBLE && this.ShouldSetSubformInvisible())
213
+ val = false;
214
+ if (updateThis) {
215
+ Commands.addOperationWithLine(CommandType.SET_PROPERTY, this, super.getDisplayLine(false), commandType === CommandType.PROP_SET_VISIBLE ? HtmlProperties.Visible : HtmlProperties.Enabled, val);
216
+ }
217
+ await super.updateChildrenPropValue(propId, commandType, val);
218
+ }
219
+ ShouldSetSubformInvisible() {
220
+ let setInvisible = false;
221
+ let subformType = super.GetComputedProperty(PropInterface.PROP_TYPE_SUBFORM_TYPE).GetComputedValueInteger();
222
+ if (subformType === SubformType.None && this.getSubformTaskId() === null)
223
+ setInvisible = true;
224
+ return setInvisible;
225
+ }
226
+ async updateSubformChildrenPropValue(propId, commandType, val) {
227
+ Debug.Assert(super.isSubform());
228
+ if (!super.getForm().getTask().AfterFirstRecordPrefix)
229
+ return;
230
+ let subformType = super.GetComputedProperty(PropInterface.PROP_TYPE_SUBFORM_TYPE).GetComputedValueInteger();
231
+ if (this._subformTaskId !== null || subformType === SubformType.None) {
232
+ if (this._subformTask !== null && this._subformTask.isStarted()) {
233
+ this.SubformLoaded = true;
234
+ if (commandType === CommandType.PROP_SET_VISIBLE && val && this.RefreshOnVisible) {
235
+ this.RefreshOnVisible = false;
236
+ await super.getForm().getTask().SubformRefresh(this._subformTask, true);
237
+ }
238
+ let subformForm = this._subformTask.getForm();
239
+ for (let i = 0; i < subformForm.getCtrlCount(); i++) {
240
+ let child = subformForm.getCtrl(i);
241
+ if (!child.isColumnControl())
242
+ continue;
243
+ let childValue = await child.checkProp(propId, true) && val;
244
+ if (childValue)
245
+ childValue = child.isParentPropValue(propId);
246
+ await child.updateChildrenPropValue(propId, commandType, childValue);
247
+ }
248
+ }
249
+ }
250
+ else if ((commandType === CommandType.PROP_SET_VISIBLE && val) && !this.SubformLoaded) {
251
+ this.SubformLoaded = true;
252
+ await AccessHelper.eventsManager.handleInternalEventWithMgControlBase(this, InternalInterface.MG_ACT_SUBFORM_OPEN);
253
+ }
254
+ }
255
+ Init() {
256
+ this.initSubformTask();
257
+ }
258
+ GetTableBehaviour() {
259
+ return TableBehaviour.UnlimitedItems;
260
+ }
261
+ async validateAndSetValue(NewValue, updateCtrl) {
262
+ super.UpdateModifiedByUser(NewValue);
263
+ if (this.ModifiedByUser) {
264
+ let ctrlCurrValue = this.Value;
265
+ let vd;
266
+ if (super.getPIC() === null)
267
+ return true;
268
+ vd = super.buildPicture(ctrlCurrValue, NewValue);
269
+ vd.evaluate();
270
+ if (vd.ValidationFailed) {
271
+ this.ModifiedByUser = false;
272
+ return false;
273
+ }
274
+ this.IsInteractiveUpdate = true;
275
+ super.getForm().getTask().setDataSynced(false);
276
+ if (updateCtrl) {
277
+ if (this._field !== null && this._field.getType() === StorageAttribute.NUMERIC && typeof NewValue === 'string' && NewValue.trim().length > 0)
278
+ vd.setValue(NewValue);
279
+ await this.setValue(vd);
280
+ }
281
+ }
282
+ return true;
283
+ }
284
+ async setValue(vd) {
285
+ let isNull = vd.getIsNull();
286
+ let newValue = vd.getDispValue();
287
+ let mgVal;
288
+ if (!isNull || !this._field.hasNullDisplayValue())
289
+ mgVal = await super.getMgValue(newValue);
290
+ else
291
+ mgVal = ((this._field.getType() === StorageAttribute.BLOB_VECTOR) ? this._field.getCellDefualtValue() : this._field.getDefaultValue());
292
+ if (mgVal !== null) {
293
+ if (this._field !== null && (!(newValue === this.Value) || this.KeyStrokeOn || this.IsNull !== isNull)) {
294
+ await this._field.setValueAndStartRecompute(mgVal, isNull, true, true, false);
295
+ if (super.isCheckBox()) {
296
+ this.forceRefresh = true;
297
+ mgVal = this._field.getValue(false);
298
+ }
299
+ }
300
+ if ((this._field !== null && isNull) && this._field.hasNullDisplayValue())
301
+ mgVal = newValue;
302
+ await super.SetAndRefreshDisplayValue(mgVal, isNull);
303
+ this.forceRefresh = false;
304
+ this.KeyStrokeOn = false;
305
+ }
306
+ }
307
+ getSubformTask() {
308
+ return this._subformTask;
309
+ }
310
+ resetSubformTask() {
311
+ this._subformTask = null;
312
+ this._subformTaskId = "0";
313
+ }
314
+ GetSubformMgForm() {
315
+ let form = null;
316
+ if (this._subformTask !== null)
317
+ form = this._subformTask.getForm();
318
+ return form;
319
+ }
320
+ IsTableWithAbsoluteScrollbar() {
321
+ let tableWithAbsoluteScrollbar = false;
322
+ Debug.Assert(this.Type === MgControlType.CTRL_TYPE_TABLE, "In MgControl.IsTableWithAbsoluteScrollbar(): Not a table control.");
323
+ if (this._propTab.propExists(PropInterface.PROP_TYPE_SCROLL_BAR_THUMB))
324
+ tableWithAbsoluteScrollbar = (this._propTab.getPropById(PropInterface.PROP_TYPE_SCROLL_BAR_THUMB).GetComputedValueInteger() === ScrollBarThumbType.Absolute);
325
+ return tableWithAbsoluteScrollbar;
326
+ }
327
+ static validReturnToCtrl() {
328
+ if (MgControl.ReturnToCtrl !== null && MgControl.ReturnToCtrl.getForm().getTask().isAborting())
329
+ return false;
330
+ return true;
331
+ }
332
+ maySetValue() {
333
+ switch (this.Type) {
334
+ case MgControlType.CTRL_TYPE_CHECKBOX:
335
+ case MgControlType.CTRL_TYPE_TEXT:
336
+ case MgControlType.CTRL_TYPE_COMBO:
337
+ case MgControlType.CTRL_TYPE_LIST:
338
+ case MgControlType.CTRL_TYPE_RADIO:
339
+ case MgControlType.CTRL_TYPE_TAB:
340
+ break;
341
+ default:
342
+ return false;
343
+ }
344
+ if (this._field === null || this._valExpId > 0)
345
+ return false;
346
+ return this.isModifiable();
347
+ }
348
+ async validateAndSetValueIfAllowed(NewValue, refreshDisplay) {
349
+ if (!this.maySetValue()) {
350
+ Logger.Instance.WriteErrorToLog(NString.Format("Unable to change value of control {0}: The control is read-only.", this.Name));
351
+ return false;
352
+ }
353
+ let retVal = await this.validateAndSetValue(NewValue, true);
354
+ if (!retVal)
355
+ Logger.Instance.WriteErrorToLog(NString.Format("Value validation failed for {0}.", this.Name));
356
+ if (refreshDisplay) {
357
+ Commands.addNoParameters(CommandType.REFRESH_TASK, this.getForm());
358
+ Commands.invoke();
359
+ }
360
+ return retVal;
361
+ }
362
+ }
363
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWdDb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ndWkvTWdDb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsYUFBYSxFQUdiLGFBQWEsRUFHZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxjQUFjLEVBRWYsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFJM0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQVE3QyxNQUFNLE9BQU8sU0FBVSxTQUFRLGFBQWE7SUFDbEMscUJBQXFCLENBQVU7SUFDL0IsZ0JBQWdCLENBQVU7SUFDMUIsVUFBVSxDQUFXO0lBRXJCLGNBQWMsQ0FBUztJQUN2QixZQUFZLENBQVc7SUFFL0IsbUJBQW1CLENBQVU7SUFDckIsZUFBZSxDQUFTO0lBQ2hDLGFBQWEsQ0FBVTtJQUN2QixjQUFjLENBQVU7SUFDeEIsT0FBTyxDQUFnQjtJQUV2QixNQUFNLENBQUMsWUFBWSxHQUFjLElBQUksQ0FBQztJQUU5QixVQUFVO1FBQ2hCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5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QUFDLGFBQWE7Z0JBQzlCLE1BQU07WUFFUjtnQkFDRSxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBR0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUM7WUFDNUMsT0FBTyxLQUFLLENBQUM7UUFFZixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBUUQsS0FBSyxDQUFDLDRCQUE0QixDQUFDLFFBQWEsRUFBRSxjQUF1QjtRQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxrRUFBa0UsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMvSCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE1BQU07WUFDVCxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpHLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBR0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tbWFuZHMsXHJcbiAgQ29tbWFuZFR5cGUsXHJcbiAgR3VpRGF0YUNvbGxlY3Rpb24sXHJcbiAgSHRtbFByb3BlcnRpZXMsXHJcbiAgTWdDb250cm9sQmFzZSxcclxuICBNZ0Zvcm1CYXNlLFxyXG4gIFByb3BlcnR5LFxyXG4gIFByb3BJbnRlcmZhY2UsXHJcbiAgUHJvcFBhcmVudEludGVyZmFjZSxcclxuICBWYWxpZGF0aW9uRGV0YWlsc1xyXG59IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtcclxuICBJbnRlcm5hbEludGVyZmFjZSxcclxuICBMb2dnZXIsXHJcbiAgTWdDb250cm9sVHlwZSxcclxuICBTY3JvbGxCYXJUaHVtYlR5cGUsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBTdWJmb3JtVHlwZSxcclxuICBUYWJsZUJlaGF2aW91cixcclxuICBYbWxQYXJzZXJcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtEZWJ1ZywgTlN0cmluZ30gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge0FyZ3VtZW50c0xpc3R9IGZyb20gJy4uL3J0L0FyZ3VtZW50c0xpc3QnO1xyXG5pbXBvcnQge1Rhc2tCYXNlfSBmcm9tICcuLi90YXNrcy9UYXNrQmFzZSc7XHJcbmltcG9ydCB7TWdGb3JtfSBmcm9tICcuL01nRm9ybSc7XHJcbmltcG9ydCB7RmllbGR9IGZyb20gJy4uL2RhdGEvRmllbGQnO1xyXG5pbXBvcnQge0RhdGFWaWV3fSBmcm9tICcuLi9kYXRhL0RhdGFWaWV3JztcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5pbXBvcnQge0FjY2Vzc0hlbHBlcn0gZnJvbSAnLi4vQWNjZXNzSGVscGVyJztcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgZGF0YSBmb3IgPGNvbnRyb2w+IC4uLjwvY29udHJvbD4gdGFnXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8YXV0aG9yPiAgZWh1ZG1cclxuLy8vXHJcbi8vLyA8L2F1dGhvcj5cclxuZXhwb3J0IGNsYXNzIE1nQ29udHJvbCBleHRlbmRzIE1nQ29udHJvbEJhc2UgaW1wbGVtZW50cyBQcm9wUGFyZW50SW50ZXJmYWNlIHtcclxuICBwcml2YXRlIF9mb2N1c2VkU3RvcEV4ZWN1dGlvbjogYm9vbGVhbjsgLy8gdXNlZCB0byByZW1lbWJlciBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZlxyXG4gIHByaXZhdGUgX2luQ29udHJvbFN1ZmZpeDogYm9vbGVhbjsgLy8gdHJ1ZSwgaXMgY29udHJvbCBpcyBpbiBjb250cm9sIHN1ZmZpeFxyXG4gIHByaXZhdGUgX3J0RXZ0VGFzazogVGFza0Jhc2U7XHJcblxyXG4gIHByaXZhdGUgX3N1YmZvcm1UYXNrSWQ6IHN0cmluZzsgLy8gdGhlIHRhc2sgaWQgb2YgdGhlIHN1YiBmb3JtIHRhc2sgKGlmIHRoaXNcclxuICBwcml2YXRlIF9zdWJmb3JtVGFzazogVGFza0Jhc2U7IC8vIHJlZmVyZW5jZSB0byB0YXNrIG9mIHRoZSBzdWIgZm9ybSB0YXNrXHJcblxyXG4gIElzSW50ZXJhY3RpdmVVcGRhdGU6IGJvb2xlYW47IC8vIHRydWUgaWYgdGhpcyBjb250cm9sIHdhcyBtb2RpZmllZCBieSB1c2VyXHJcbiAgcHJpdmF0ZSByZWZyZXNoT25TdHJpbmc6IHN0cmluZzsgLy8gT25seSBmb3Igb2ZmbGluZS4gR2V0IGl0IGZyb20gWE1MIGFuZCBwdXQgaXQgb24gdGhlIHN1YmZvcm0gdGFzayB3aGVuIHRoZSBzdWJmb3JtIHRhc2sgaXMgb3BlbmVkXHJcbiAgU3ViZm9ybUxvYWRlZDogYm9vbGVhbjsgLy8gdHJ1ZSwgaWYgdGhlIHN1YmZvcm0gdGFzayB3YXMgbG9hZGVkIGFscmVhZHlcclxuICBIYXNab29tSGFuZGxlcjogYm9vbGVhbjsgLy8gaWYgVFJVRSwgdGhlcmUgaXMgYSB6b29tIGhhbmRsZXIgb24gdGhpcyBjdHJsXHJcbiAgQXJnTGlzdDogQXJndW1lbnRzTGlzdDsgLy8gYXJndW1lbnQgbGlzdCBidWlsdCBmcm9tIHRoZSBwcm9wZXJ0eVxyXG5cclxuICBzdGF0aWMgUmV0dXJuVG9DdHJsOiBNZ0NvbnRyb2wgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemUoKSB7XHJcbiAgICB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5faW5Db250cm9sU3VmZml4ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9ydEV2dFRhc2sgPSBudWxsO1xyXG4gICAgdGhpcy5fc3ViZm9ybVRhc2tJZCA9IG51bGw7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFzayA9IG51bGw7XHJcbiAgICB0aGlzLklzSW50ZXJhY3RpdmVVcGRhdGUgPSBmYWxzZTtcclxuICAgIHRoaXMucmVmcmVzaE9uU3RyaW5nID0gbnVsbDtcclxuICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5IYXNab29tSGFuZGxlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5BcmdMaXN0ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUsIHRhc2s6IFRhc2tCYXNlLCBwYXJlbnRDb250cm9sOiBudW1iZXIpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUsIHBhcmVudE1nRm9ybTogTWdGb3JtQmFzZSwgcGFyZW50Q29udHJvbElkeDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3Rvcih0eXBlPzogTWdDb250cm9sVHlwZSwgdGFza09yUGFyZW50TWdGb3JtPzogYW55LCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcclxuICAgICAgc3VwZXIoKTtcclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHR5cGUgPT09IG51bGwgfHwgdHlwZS5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAodGFza09yUGFyZW50TWdGb3JtID09PSBudWxsIHx8IHRhc2tPclBhcmVudE1nRm9ybSBpbnN0YW5jZW9mIFRhc2tCYXNlKSAmJiAocGFyZW50Q29udHJvbE9yUGFyZW50Q29udHJvbElkeCA9PT0gbnVsbCB8fCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKVxyXG4gICAgICBzdXBlcih0eXBlLCB0YXNrT3JQYXJlbnRNZ0Zvcm0uZ2V0Rm9ybSgpLCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4KTtcclxuICAgIGVsc2VcclxuICAgICAgc3VwZXIodHlwZSwgdGFza09yUGFyZW50TWdGb3JtLCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4KTtcclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcclxuICB9XHJcblxyXG4gIEdldFZhckluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKDxEYXRhVmlldz5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpLkRhdGFWaWV3KS5EdmNvdW50ICsgdGhpcy52ZWVJbmR4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTZXQgYXJndW1lbnRzIGZyb20gdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtZ0Zvcm1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRpdElkeFwiPjwvcGFyYW0+XHJcbiAgYXN5bmMgZmlsbERhdGEobWdGb3JtOiBNZ0Zvcm1CYXNlLCBkaXRJZHg6IG51bWJlciwgcGFyc2VyOiBYbWxQYXJzZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHN1cGVyLmZpbGxEYXRhKG1nRm9ybSwgZGl0SWR4LCBwYXJzZXIpO1xyXG4gICAgdGhpcy5BcmdMaXN0ID0gYXdhaXQgdGhpcy5HZXRBcmd1bWVudExpc3QoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGNvbnRyb2wgYXR0cmlidXRlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgU2V0QXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nLCB2YWx1ZVN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNUYWdQcm9jZXNzZWQ6IGJvb2xlYW4gPSBzdXBlci5TZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZVN0cik7XHJcbiAgICBpZiAoIWlzVGFnUHJvY2Vzc2VkKSB7XHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NVQkZPUk1fVEFTSzpcclxuICAgICAgICAgIGlmICh2YWx1ZVN0ci50cmltKCkgIT0gXCJcIilcclxuICAgICAgICAgICAgdGhpcy5fc3ViZm9ybVRhc2tJZCA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JFRlJFU0hPTjpcclxuICAgICAgICAgIHRoaXMucmVmcmVzaE9uU3RyaW5nID0gdmFsdWVTdHIudHJpbSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlzVGFnUHJvY2Vzc2VkID0gZmFsc2U7XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coTlN0cmluZy5Gb3JtYXQoXCJVbnJlY29nbml6ZWQgYXR0cmlidXRlOiAnezB9J1wiLCBhdHRyaWJ1dGUpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNUYWdQcm9jZXNzZWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGJ1aWxkIEFyZ3VtZW50IGxpc3QgZnJvbSB0aGUgcHJvcGVydHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgR2V0QXJndW1lbnRMaXN0KCk6IFByb21pc2U8QXJndW1lbnRzTGlzdD4ge1xyXG4gICAgbGV0IGFyZ0xpc3Q6IEFyZ3VtZW50c0xpc3QgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuX3Byb3BUYWIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBhcmdMaXN0O1xyXG4gICAgbGV0IEFyZ0xpc3RQcm9wOiBQcm9wZXJ0eSA9IHRoaXMuX3Byb3BUYWIuZ2V0UHJvcEJ5SWQoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUEFSQU1FVEVSUyk7XHJcbiAgICBpZiAoQXJnTGlzdFByb3AgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBhcmdMaXN0O1xyXG5cclxuICAgIGxldCBwYXJtczogc3RyaW5nID0gYXdhaXQgQXJnTGlzdFByb3AuZ2V0VmFsdWUoKTtcclxuICAgIGlmIChwYXJtcyAhPT0gbnVsbCkge1xyXG4gICAgICBhcmdMaXN0ID0gbmV3IEFyZ3VtZW50c0xpc3QoKTtcclxuICAgICAgYXJnTGlzdC5maWxsTGlzdChwYXJtcywgPFRhc2tCYXNlPnN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkpO1xyXG4gICAgICBpZiAodGhpcy5yZWZyZXNoT25TdHJpbmcgIT09IG51bGwpXHJcbiAgICAgICAgYXJnTGlzdC5SZWZyZXNoT25TdHJpbmcgPSB0aGlzLnJlZnJlc2hPblN0cmluZztcclxuICAgIH1cclxuICAgIHJldHVybiBhcmdMaXN0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0cnVlIGlmIHRoaXMgY29udHJvbCBpcyBkZXNjZW5kYW50IG9mIHRoZSBwYXJlbnRGb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudEZvcm1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNEZXNjZW5kZW50KHBhcmVudEZvcm06IE1nRm9ybSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzRGVzY2VuZGVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGNoZWNrQ3VycmVudEZvcm06IE1nRm9ybSA9IDxNZ0Zvcm0+c3VwZXIuZ2V0Rm9ybSgpO1xyXG5cclxuICAgIERlYnVnLkFzc2VydChwYXJlbnRGb3JtICE9PSBudWxsKTtcclxuXHJcbiAgICB3aGlsZSAoIWlzRGVzY2VuZGVudCAmJiBjaGVja0N1cnJlbnRGb3JtICE9PSBudWxsKSB7XHJcbiAgICAgIGlmIChwYXJlbnRGb3JtID09PSBjaGVja0N1cnJlbnRGb3JtKVxyXG4gICAgICAgIGlzRGVzY2VuZGVudCA9IHRydWU7XHJcblxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgY3VyclRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPmNoZWNrQ3VycmVudEZvcm0uZ2V0VGFzaygpO1xyXG4gICAgICAgIGlmIChjdXJyVGFzay5nZXRQYXJlbnQoKSAhPT0gbnVsbClcclxuICAgICAgICAgIGNoZWNrQ3VycmVudEZvcm0gPSA8TWdGb3JtPmN1cnJUYXNrLmdldFBhcmVudCgpLmdldEZvcm0oKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzRGVzY2VuZGVudDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSZWZyZXNoIGNvbnRyb2wgZGlzcGxheSBpZiBpdCBoYXMgYSBwcm9wZXJ0eSB3aGljaCBpcyBhbiBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaE9uRXhwcmVzc2lvbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgc2l6ZTogbnVtYmVyID0gKHRoaXMuX3Byb3BUYWIgPT09IG51bGwgPyAwIDogdGhpcy5fcHJvcFRhYi5nZXRTaXplKCkpO1xyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5O1xyXG4gICAgbGV0IHJlZnJlc2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZSAmJiAhcmVmcmVzaDsgaSsrKSB7XHJcbiAgICAgIHByb3AgPSB0aGlzLl9wcm9wVGFiLmdldFByb3AoaSk7XHJcblxyXG4gICAgICBzd2l0Y2ggKHByb3AuZ2V0SUQoKSkge1xyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfREFUQTpcclxuICAgICAgICAgIGlmICghcHJvcC5pc0V4cHJlc3Npb24oKSAmJiB0aGlzLl9maWVsZCAhPT0gbnVsbCAmJiB0aGlzLl9maWVsZC5nZXRUYXNrKCkgIT09IHRoaXMuZ2V0Rm9ybSgpLmdldFRhc2soKSkge1xyXG4gICAgICAgICAgICByZWZyZXNoID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgLyogIGZhbGxzIHRocm91Z2ggKi9cclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZPUk1BVDpcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1ZJU0lCTEU6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9FTkFCTEVEOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUkFOR0U6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UUkFOU0xBVE9SOlxyXG4gICAgICAgICAgaWYgKHByb3AuaXNFeHByZXNzaW9uKCkpXHJcbiAgICAgICAgICAgIHJlZnJlc2ggPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZWZyZXNoKVxyXG4gICAgICAgIGF3YWl0IHRoaXMuUmVmcmVzaERpc3BsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGludm9rZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBpbnZva2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8gaWYgdGhlIGNvbnRyb2wgaXMgbm90IHZpc2libGUsIG5vdCBlbmFibGVkIG9yIG5vdCBwYXJrYWJsZSBza2lwIHRoaXMgY29udHJvbFxyXG4gICAgaWYgKGF3YWl0IHRoaXMuaXNQYXJrYWJsZSh0cnVlKSkge1xyXG4gICAgICBhd2FpdCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5oYW5kbGVJbnRlcm5hbEV2ZW50V2l0aE1nQ29udHJvbEJhc2UodGhpcywgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfUFJFRklYKTtcclxuICAgICAgaW52b2tlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW52b2tlZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGlzUGFya2FibGUoY2hlY2tFbmFibGVkQW5kVmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9ICFzdXBlci5pc0ltYWdlQ29udHJvbCgpO1xyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICBhd2FpdCBzdXBlci5jaGVja1Byb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRU5BQkxFRCwgdHJ1ZSk7XHJcblxyXG4gICAgICBhd2FpdCBzdXBlci5jaGVja1Byb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVklTSUJMRSwgdHJ1ZSk7XHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHN1cGVyLmlzUGFya2FibGUoY2hlY2tFbmFibGVkQW5kVmlzaWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdWJmb3JtIHRhc2sgaWQgb2YgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFN1YmZvcm1UYXNrSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9zdWJmb3JtVGFza0lkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZpbmQgdGhlIHN1YmZvcm0gdGFzayBhY2NvcmRpbmcgdG8gaXRzIGlkIGFuZCBzYXZlIGl0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpbml0U3ViZm9ybVRhc2soKTogdm9pZCB7XHJcbiAgICBpZiAoc3VwZXIuaXNTdWJmb3JtKCkpXHJcbiAgICAgIHRoaXMuX3N1YmZvcm1UYXNrID0gPFRhc2tCYXNlPkd1aURhdGFDb2xsZWN0aW9uLk1HRGF0YVRhYmxlLkdldFRhc2tCeUlEKHRoaXMuX3N1YmZvcm1UYXNrSWQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgY29udHJvbCdzIHBhcmVudFRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRQYXJlbnRUYWJsZSgpOiBNZ0NvbnRyb2wge1xyXG4gICAgcmV0dXJuIDxNZ0NvbnRyb2w+dGhpcy5fcGFyZW50VGFibGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmVzdG9yZSBhbmQgZGlzcGxheSB0aGUgb2xkIHZhbHVlIG9mIHRoZSBjb250cm9sIHVzZWQgd2hlbiB0aGUgY29udHJvbCBpcyBub3QgbW9kaWZpYWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgcmVzdG9yZU9sZFZhbHVlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX2ZpZWxkICE9PSBudWxsKVxyXG4gICAgICBhd2FpdCAoPEZpZWxkPnRoaXMuX2ZpZWxkKS51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgc3VwZXIucmVzZXRQcmV2VmFsKCk7XHJcbiAgICAgIGF3YWl0IHN1cGVyLlNldEFuZFJlZnJlc2hEaXNwbGF5VmFsdWUoYXdhaXQgdGhpcy5nZXRNZ1ZhbHVlKHRoaXMuVmFsdWUpLCB0aGlzLklzTnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyB0aGUgZXZlbnQgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0UnRFdnRUYXNrKGN1clRhc2s6IFRhc2tCYXNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9ydEV2dFRhc2sgPSBjdXJUYXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGV2ZW50IHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFJ0RXZ0VGFzaygpOiBUYXNrQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcnRFdnRUYXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldHMgdGhlIHN1YmZvcm0gdGFzayBpZCBvZiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0U3ViZm9ybVRhc2tJZCh0YXNrSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3ViZm9ybVRhc2tJZCA9IHRhc2tJZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHN0b3BFeGVjdXRpb24gZmxhZyBpbiB0aGUgZW5kIG9mIGhhbmRsZSBmb2N1cyBvbiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0ZvY3VzZWRTdG9wRXhlY3V0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZvY3VzZWRTdG9wRXhlY3V0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlbWVtYmVyIHN0b3BFeGVjdXRpb24gZmxhZyBpbiB0aGUgZW5kIG9mIGhhbmRsZSBmb2N1cyBvbiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmb2N1c2VkU3RvcEV4ZWN1dGlvblwiPjwvcGFyYW0+XHJcbiAgc2V0Rm9jdXNlZFN0b3BFeGVjdXRpb24oZm9jdXNlZFN0b3BFeGVjdXRpb246IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2ZvY3VzZWRTdG9wRXhlY3V0aW9uID0gZm9jdXNlZFN0b3BFeGVjdXRpb247XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmwtXCI+VGhlIGN0cmwgdG8gY2hlY2suIGNhbiBiZSBmcmFtZSBmb3JtIGFuZCBhbHNvIHN1YmZvcm0gY29udHJvbFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgb25UaGVTYW1lU3ViRm9ybUNvbnRyb2woY3RybDogTWdDb250cm9sKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmIChjdHJsICE9PSBudWxsKSB7XHJcbiAgICAgIGlmIChzdXBlci5nZXRGb3JtKCkuaXNTdWJGb3JtKCkgJiYgY3RybC5nZXRGb3JtKCkuaXNTdWJGb3JtKCkpIHtcclxuICAgICAgICBpZiAoc3VwZXIuZ2V0Rm9ybSgpLmdldFRhc2soKSA9PT0gY3RybC5nZXRGb3JtKCkuZ2V0VGFzaygpKVxyXG4gICAgICAgICAgcmV0VmFsdWUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0VmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJ1ZSBpZiB0aGUgY3RybHMgYXJlIG9uIGRpZmZlcmVudCBmb3Jtc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIG9uRGlmZkZvcm0oY3RybDogTWdDb250cm9sKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNTdWJmb3JtOiBib29sZWFuID0gc3VwZXIuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpIHx8IGN0cmwuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpO1xyXG4gICAgbGV0IGlzT25EaWZmRm9ybTogYm9vbGVhbiA9IChpc1N1YmZvcm0gKSAmJiAhdGhpcy5vblRoZVNhbWVTdWJGb3JtQ29udHJvbChjdHJsKTtcclxuXHJcbiAgICByZXR1cm4gaXNPbkRpZmZGb3JtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRydWUgaWYgY29udHJvbCBpcyBpbiBjb250cm9sIHN1ZmZpeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0luQ29udHJvbFN1ZmZpeCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbkNvbnRyb2xTdWZmaXg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRydWUgaWYgY29udHJvbCBpcyBpbiBjb250cm9sIHN1ZmZpeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbkNvbnRyb2xTdWZmaXhcIj48L3BhcmFtPlxyXG4gIHNldEluQ29udHJvbFN1ZmZpeChpbkNvbnRyb2xTdWZmaXg6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2luQ29udHJvbFN1ZmZpeCA9IGluQ29udHJvbFN1ZmZpeDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdHJ1ZSBpZiB0aGUgY29udHJvbCBoYXMgc2VsZWN0IHByb2dyYW1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEhhc1NlbGVjdFByb2dyYW0oKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgSGFzU2VsZWN0UHJvZ3JhbTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHNlbGVjdFByb2dQcm9wOiBQcm9wZXJ0eSA9IHN1cGVyLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUX1BST0dSQU0pO1xyXG4gICAgaWYgKHNlbGVjdFByb2dQcm9wICE9PSBudWxsICYmIHNlbGVjdFByb2dQcm9wLkdldENvbXB1dGVkVmFsdWUoKSAhPT0gbnVsbClcclxuICAgICAgSGFzU2VsZWN0UHJvZ3JhbSA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIEhhc1NlbGVjdFByb2dyYW07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgdGhlIGNvbnRyb2wgdXNlIHRoZSBoYW5kbGVyIFpPT00gKGZvciBzZWxlY3QgcHJvZ3JhbSBvciBab29tIGhhbmRsZXIpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHVzZVpvb21IYW5kbGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuSGFzWm9vbUhhbmRsZXIgfHwgKHN1cGVyLmdldEZpZWxkKCkgIT09IG51bGwgJiYgKCg8RmllbGQ+c3VwZXIuZ2V0RmllbGQoKSkuZ2V0SGFzWm9vbUhhbmRsZXIoKSB8fCAodGhpcy5IYXNTZWxlY3RQcm9ncmFtKCkpKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVXBkYXRlIGJvb2xlYW4gcHJvcGVydHkoZXg6dmlzaWJsZVxcZW5hYmxlKSBvZiBjb250cm9sIGFuZCBpdCdzIGNoaWxkcmVuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByb3BJZFwiPnByb3BlcnR5IGlkIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21tYW5kVHlwZVwiPmNvbW1hbmQgdHlwZSB0aGF0IGJlbG9uZyB0byB0aGUgcHJvcCBpZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlVGhpc1wiPjwvcGFyYW0+XHJcbiAgYXN5bmMgdXBkYXRlUHJvcGVydHlMb2dpY05lc3RpbmcocHJvcElkOiBudW1iZXIsIGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgdmFsOiBib29sZWFuLCB1cGRhdGVUaGlzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodmFsICYmIHN1cGVyLmhhdmVUb0NoZWNrUGFyZW50VmFsdWUoKSlcclxuICAgICAgdmFsID0gc3VwZXIuaXNQYXJlbnRQcm9wVmFsdWUocHJvcElkKTtcclxuXHJcbiAgICAvLyBpZiB0aGUgc3ViZm9ybSBtdXN0IGJlIGludmlzaWJsZSAoQ1RSTF9TVUJGT1JNX05PTkUpIHdlIGNoYW5nZSBpdHMgdmlzaWJpbGl0eSB0byBmYWxzZVxyXG4gICAgaWYgKHZhbCAmJiBzdXBlci5pc1N1YmZvcm0oKSAmJiBjb21tYW5kVHlwZSA9PT0gQ29tbWFuZFR5cGUuUFJPUF9TRVRfVklTSUJMRSAmJiB0aGlzLlNob3VsZFNldFN1YmZvcm1JbnZpc2libGUoKSlcclxuICAgICAgdmFsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHVwZGF0ZVRoaXMpIHtcclxuICAgICAgQ29tbWFuZHMuYWRkT3BlcmF0aW9uV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZLCB0aGlzLCBzdXBlci5nZXREaXNwbGF5TGluZShmYWxzZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRUeXBlID09PSBDb21tYW5kVHlwZS5QUk9QX1NFVF9WSVNJQkxFID8gSHRtbFByb3BlcnRpZXMuVmlzaWJsZSA6IEh0bWxQcm9wZXJ0aWVzLkVuYWJsZWQsIHZhbCk7XHJcblxyXG4gICAgfVxyXG4gICAgYXdhaXQgc3VwZXIudXBkYXRlQ2hpbGRyZW5Qcm9wVmFsdWUocHJvcElkLCBjb21tYW5kVHlwZSwgdmFsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gSWYgdGhlIHN1YmZvcm0gbXVzdCBiZSBpbnZpc2libGUgKGZvciBleGFtcGxlIENUUkxfU1VCRk9STV9OT05FKSByZXR1cm5zIHRydWUuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgU2hvdWxkU2V0U3ViZm9ybUludmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIGxldCBzZXRJbnZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBzdWJmb3JtVHlwZTogU3ViZm9ybVR5cGUgPSA8U3ViZm9ybVR5cGU+c3VwZXIuR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TVUJGT1JNX1RZUEUpLkdldENvbXB1dGVkVmFsdWVJbnRlZ2VyKCk7XHJcbiAgICBpZiAoc3ViZm9ybVR5cGUgPT09IFN1YmZvcm1UeXBlLk5vbmUgJiYgdGhpcy5nZXRTdWJmb3JtVGFza0lkKCkgPT09IG51bGwpXHJcbiAgICAgIHNldEludmlzaWJsZSA9IHRydWU7XHJcbiAgICByZXR1cm4gc2V0SW52aXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFVwZGF0ZXMgdmlzaWJpbGl0eSBvciBlbmFibGUgcHJvcGVydHkgb2Ygc3ViZm9ybSBjb250cm9sc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj5JZCBvZiB2aXNpYmlsaXR5IG9yIGVuYWJsZSBwcm9wZXJ0eTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21tYW5kVHlwZVwiPnR5cGUgb2YgdGhlIEdVSSBjb21tYW5kPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPnZhbHVlIGZvciB0aGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIGFzeW5jIHVwZGF0ZVN1YmZvcm1DaGlsZHJlblByb3BWYWx1ZShwcm9wSWQ6IG51bWJlciwgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLCB2YWw6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIERlYnVnLkFzc2VydChzdXBlci5pc1N1YmZvcm0oKSk7XHJcblxyXG4gICAgaWYgKCEoPFRhc2tCYXNlPnN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkpLkFmdGVyRmlyc3RSZWNvcmRQcmVmaXgpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsZXQgc3ViZm9ybVR5cGU6IFN1YmZvcm1UeXBlID0gPFN1YmZvcm1UeXBlPnN1cGVyLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU1VCRk9STV9UWVBFKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgaWYgKHRoaXMuX3N1YmZvcm1UYXNrSWQgIT09IG51bGwgfHwgc3ViZm9ybVR5cGUgPT09IFN1YmZvcm1UeXBlLk5vbmUpIHtcclxuICAgICAgaWYgKHRoaXMuX3N1YmZvcm1UYXNrICE9PSBudWxsICYmIHRoaXMuX3N1YmZvcm1UYXNrLmlzU3RhcnRlZCgpKSB7XHJcbiAgICAgICAgdGhpcy5TdWJmb3JtTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAoY29tbWFuZFR5cGUgPT09IENvbW1hbmRUeXBlLlBST1BfU0VUX1ZJU0lCTEUgJiYgdmFsICYmIHRoaXMuUmVmcmVzaE9uVmlzaWJsZSkge1xyXG4gICAgICAgICAgdGhpcy5SZWZyZXNoT25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICBhd2FpdCAoPFRhc2tCYXNlPnN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkpLlN1YmZvcm1SZWZyZXNoKHRoaXMuX3N1YmZvcm1UYXNrLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdWJmb3JtRm9ybTogTWdGb3JtQmFzZSA9IHRoaXMuX3N1YmZvcm1UYXNrLmdldEZvcm0oKTtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc3ViZm9ybUZvcm0uZ2V0Q3RybENvdW50KCk7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGNoaWxkOiBNZ0NvbnRyb2xCYXNlID0gc3ViZm9ybUZvcm0uZ2V0Q3RybChpKTtcclxuICAgICAgICAgIC8vIFFDUiAjOTgxNTU1LCBXZSBzaG91bGQgbm90IGFmZmVjdCB2aXNpYmlsaXR5IG9mIHRoZSBUYWJsZUNvbHVtbnMgc2luY2UgaXQgaXMgbWFuYWdlZCBieSB0aGUgdGFibGUuU2V0dGluZyB2aXNpYmlsaXR5XHJcbiAgICAgICAgICAvLyBvZiBhbGwgY29sdW1ucyB0byBmYWxzZSBwcmV2ZW50cyB0YWJsZSBwbGFjZW1lbnRcclxuICAgICAgICAgIGlmICghY2hpbGQuaXNDb2x1bW5Db250cm9sKCkpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgbGV0IGNoaWxkVmFsdWU6IGJvb2xlYW4gPSBhd2FpdCBjaGlsZC5jaGVja1Byb3AocHJvcElkLCB0cnVlKSAmJiB2YWw7XHJcbiAgICAgICAgICBpZiAoY2hpbGRWYWx1ZSlcclxuICAgICAgICAgICAgY2hpbGRWYWx1ZSA9IGNoaWxkLmlzUGFyZW50UHJvcFZhbHVlKHByb3BJZCk7XHJcblxyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuX3N1YmZvcm1UYXNrLmlzU3RhcnRlZCgpKVxyXG4gICAgICAgICAgLy8gICBDb21tYW5kcy5hZGRBc3luYyhjb21tYW5kVHlwZSwgY2hpbGQsIGNoaWxkLmdldERpc3BsYXlMaW5lKGZhbHNlKSwgY2hpbGRWYWx1ZSk7XHJcbiAgICAgICAgICBhd2FpdCBjaGlsZC51cGRhdGVDaGlsZHJlblByb3BWYWx1ZShwcm9wSWQsIGNvbW1hbmRUeXBlLCBjaGlsZFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKChjb21tYW5kVHlwZSA9PT0gQ29tbWFuZFR5cGUuUFJPUF9TRVRfVklTSUJMRSAmJiB2YWwpICYmICF0aGlzLlN1YmZvcm1Mb2FkZWQpIHtcclxuICAgICAgdGhpcy5TdWJmb3JtTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgYXdhaXQgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuaGFuZGxlSW50ZXJuYWxFdmVudFdpdGhNZ0NvbnRyb2xCYXNlKHRoaXMsIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TVUJGT1JNX09QRU4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTZXQgc3ViZm9ybSB0YXNrIGlkIGZvciBhIHN1YmZvcm0gY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdFN1YmZvcm1UYXNrKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCB0aGUgYmVoYXZpb3VyIGZvciB0aGUgdGFibGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRUYWJsZUJlaGF2aW91cigpOiBUYWJsZUJlaGF2aW91ciB7XHJcbiAgICByZXR1cm4gVGFibGVCZWhhdmlvdXIuVW5saW1pdGVkSXRlbXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdmFsaWRhdGUgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGFuZCBzZXQgaXQncyB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJOZXdWYWx1ZVwiPnRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ1cGRhdGVDdHJsXCI+aWYgdHJ1ZSB0aGVuIHRoZSBjb250cm9sIHdpbGwgYmUgdXBkYXRlZCB1cG9uIHN1Y2Nlc3NmdWwgY2hlY2s8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5yZXR1cm5zIGlmIHZhbGlkYXRpb24gaXMgc3VjY2Vzc2Z1bDwvcmV0dXJucz5cclxuICBhc3luYyB2YWxpZGF0ZUFuZFNldFZhbHVlKE5ld1ZhbHVlOiBhbnksIHVwZGF0ZUN0cmw6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHN1cGVyLlVwZGF0ZU1vZGlmaWVkQnlVc2VyKE5ld1ZhbHVlKTtcclxuXHJcbiAgICAvLyBpZiB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wgaXMgbnVsbCBvciB3YXMgY2hhbmdlZFxyXG4gICAgLy8gY2hlY2sgdmFsaWRhdGlvbiBhbmQgdXBkYXRlIHRoZSBjb250cm9sIHZhbHVlXHJcbiAgICBpZiAodGhpcy5Nb2RpZmllZEJ5VXNlcikge1xyXG4gICAgICBsZXQgY3RybEN1cnJWYWx1ZTogYW55ID0gdGhpcy5WYWx1ZTtcclxuICAgICAgbGV0IHZkOiBWYWxpZGF0aW9uRGV0YWlscztcclxuXHJcbiAgICAgIGlmIChzdXBlci5nZXRQSUMoKSA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgdmQgPSBzdXBlci5idWlsZFBpY3R1cmUoY3RybEN1cnJWYWx1ZSwgTmV3VmFsdWUpO1xyXG5cclxuICAgICAgdmQuZXZhbHVhdGUoKTtcclxuXHJcbiAgICAgIC8vIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZHMgdmFsdWUgd2FzIHdyb25nXHJcbiAgICAgIGlmICh2ZC5WYWxpZGF0aW9uRmFpbGVkKSB7XHJcbiAgICAgICAgdGhpcy5Nb2RpZmllZEJ5VXNlciA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5Jc0ludGVyYWN0aXZlVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgIHN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkuc2V0RGF0YVN5bmNlZChmYWxzZSk7XHJcblxyXG4gICAgICAvLyBzZXQgdGhlIHZhbHVlIChoYW5kbGUgcmVjb21wdXRlLCBldGMuKVxyXG4gICAgICBpZiAodXBkYXRlQ3RybCkge1xyXG4gICAgICAgIC8vIFFDUiM0NDEwMjA6QWZ0ZXIgdmFsaWRhdGluZyBkaXNwbGF5IHZhbHVlLCB0YWtlIHRoZSBzYW1lIGN0cmwncyB2YWx1ZSBmb3IgbWcgdmFsdWUgY29udmVyc2lvbi5cclxuICAgICAgICAvLyBVc2luZyBkaXNwbGF5IHZhbHVlIGdlbmVyYXRlZCBmcm9tIE1nVmFsdWUsIG1pZ2h0IGhhdmUgcHJvYmxlbSB0byBjb252ZXJ0IGJhY2sgdG8gTWdWYWwgdXNpbmcgcGljdHVyZSBkdWUgdG8gYWxpZ25tZW50IChjaGFuZ2VkIGFsaWdubWVudCApLlxyXG4gICAgICAgIC8vIFRoaXMgcHJvYmxlbSBvY2N1cnMgZm9yIG51bWVyaWMuXHJcbiAgICAgICAgLy8gVGhlIGZpeCBzaG91bGQgYmUgYXBwbGljYWJsZSBmb3IgbnVtZXJpYyB0eXBlIG9ubHkuIEJlY2F1c2UgZGF0ZSBhbmQgdGltZSBmaWVsZCB3aXRoIGNvbXBsZXggbWFza2luZyBoYXZlIHByb2JsZW0gb24gdXNpbmcgY3RybCdzIHZhbHVlLlxyXG4gICAgICAgIC8vIFJlZmVyIGRhdGUgcWNyczogIzI5MTY2NiwgIzMwNzM1MywgIzQzNDI0MSBhbmQgZm9yIHRpbWUsIGNoZWNrIGRlZmF1bHQgdmFsdWUgd2hlbiBmb3JtYXQgaXMgJ0hILU1NLVNTIFBNWkAnXHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpZWxkICE9PSBudWxsICYmIHRoaXMuX2ZpZWxkLmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDICYmIHR5cGVvZiBOZXdWYWx1ZSA9PT0gJ3N0cmluZycgJiYgTmV3VmFsdWUudHJpbSgpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICB2ZC5zZXRWYWx1ZShOZXdWYWx1ZSk7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuc2V0VmFsdWUodmQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHZhbHVlIHJlY2VpdmVkIGZyb20gdGhlIHVzZXIgaW5wdXQgYWZ0ZXIgdmFsaWRhdGlvbiBhbmQgdXBkYXRlIHRoZSBmaWVsZCBjb25uZWN0ZWQgdG8gdGhpc1xyXG4gIC8vLyAgIGNvbnRyb2wgKGlmIGV4aXN0cylcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmRcIj50aGUgdmFsaWRhdGlvbiBkZXRhaWxzIG9iamVjdDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBzZXRWYWx1ZSh2ZDogVmFsaWRhdGlvbkRldGFpbHMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBpc051bGw6IGJvb2xlYW4gPSB2ZC5nZXRJc051bGwoKTtcclxuICAgIGxldCBuZXdWYWx1ZTogYW55ID0gdmQuZ2V0RGlzcFZhbHVlKCk7XHJcbiAgICBsZXQgbWdWYWw6IHN0cmluZztcclxuXHJcbiAgICBpZiAoIWlzTnVsbCB8fCAhdGhpcy5fZmllbGQuaGFzTnVsbERpc3BsYXlWYWx1ZSgpKVxyXG4gICAgICBtZ1ZhbCA9IGF3YWl0IHN1cGVyLmdldE1nVmFsdWUobmV3VmFsdWUpO1xyXG4gICAgLy8gaXQncyBpbm5lciB2YWx1ZSAtPiB0cmFuc2xhdGUgaXQgdG8gdGhlIGRpc3BsYXlcclxuICAgIGVsc2VcclxuICAgICAgbWdWYWwgPSAoKHRoaXMuX2ZpZWxkLmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikgPyB0aGlzLl9maWVsZC5nZXRDZWxsRGVmdWFsdFZhbHVlKCkgOiB0aGlzLl9maWVsZC5nZXREZWZhdWx0VmFsdWUoKSk7XHJcbiAgICBpZiAobWdWYWwgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuX2ZpZWxkICE9PSBudWxsICYmICghKG5ld1ZhbHVlID09PSB0aGlzLlZhbHVlKSB8fCB0aGlzLktleVN0cm9rZU9uIHx8IHRoaXMuSXNOdWxsICE9PSBpc051bGwpKSB7XHJcbiAgICAgICAgYXdhaXQgKDxGaWVsZD50aGlzLl9maWVsZCkuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZShtZ1ZhbCwgaXNOdWxsLCB0cnVlLCB0cnVlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIC8vIGRlZmVjdCAxMjc3MzQgOiB2YWx1ZSBvZiB0aGUgZmllbGQgbWlnaHQgYmUgY2hhbmdlZCBhbHJlYWR5IGluc2lkZSBhIGNvbnRyb2wgY2hhbmdlIGhhbmRsZXJcclxuICAgICAgICAvLyB0byBhdm9pZCB1cGRhdGluZyBvbGQgdmFsdWUgYW5kIG92ZXJydW5uaW5nIHRoZSB2YWx1ZSBmcjBtIHRoZSBjb250cm9sIGNoYW5nZVxyXG4gICAgICAgIC8vIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgZmllbGQuIChuZWVkIHRvIGJlIGRvbmUgZm9yIGNvbWJvIGFuZCBsaXN0IGJveCwgYnV0IGl0J3MgdG9vIHJpc2t5XHJcbiAgICAgICAgLy8gYW5kIHVubGlrZWx5IHRvIGhhcHBlbiwgc28gdGhlIGZpeCB3aWxsIGJlIGZvciBjaGVjayBib3ggb25seSlcclxuXHJcbiAgICAgICAgaWYgKHN1cGVyLmlzQ2hlY2tCb3goKSkge1xyXG4gICAgICAgICAgdGhpcy5mb3JjZVJlZnJlc2ggPSB0cnVlO1xyXG4gICAgICAgICAgbWdWYWwgPSAoPEZpZWxkPnRoaXMuX2ZpZWxkKS5nZXRWYWx1ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBpZiBmaWVsZCB2YWx1ZSBpcyBudWxsICYgaGFzIG51bGwgZGlzcGxheSB2YWx1ZSwgdGFrZSBldmFsdWF0ZWQgbnVsbCBkaXNwbGF5IHZhbHVlLlxyXG4gICAgICBpZiAoKHRoaXMuX2ZpZWxkICE9PSBudWxsICYmIGlzTnVsbCkgJiYgdGhpcy5fZmllbGQuaGFzTnVsbERpc3BsYXlWYWx1ZSgpKVxyXG4gICAgICAgIG1nVmFsID0gbmV3VmFsdWU7XHJcblxyXG4gICAgICBhd2FpdCBzdXBlci5TZXRBbmRSZWZyZXNoRGlzcGxheVZhbHVlKG1nVmFsLCBpc051bGwpO1xyXG4gICAgICB0aGlzLmZvcmNlUmVmcmVzaCA9IGZhbHNlO1xyXG4gICAgICAvLyBRQ1IgIzQzODc1My4gUHJldmVudCBSUCZSUyBjeWNsZSwgd2hlbiBpdCdzIG5vdCBuZWVkZWQuXHJcbiAgICAgIHRoaXMuS2V5U3Ryb2tlT24gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdWJmb3JtIHRhc2sgb2YgdGhpcyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFN1YmZvcm1UYXNrKCk6IFRhc2tCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl9zdWJmb3JtVGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdWJmb3JtIHRhc2sgb2YgdGhpcyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHJlc2V0U3ViZm9ybVRhc2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFzayA9IG51bGw7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFza0lkID0gXCIwXCI7XHJcbiAgfVxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJucyBNZ0Zvcm0gb2YgdGhlIHN1YmZvcm0gY29udHJvbCB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRTdWJmb3JtTWdGb3JtKCk6IE1nRm9ybUJhc2Uge1xyXG4gICAgbGV0IGZvcm06IE1nRm9ybUJhc2UgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuX3N1YmZvcm1UYXNrICE9PSBudWxsKVxyXG4gICAgICBmb3JtID0gdGhpcy5fc3ViZm9ybVRhc2suZ2V0Rm9ybSgpO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENoZWNrIHdoZXRoZXIgdGFibGUgYmVpbmcgdXNlZCB3aXRoIGFic29sdXRlIHNjcm9sbGJhciB0aHVtYi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIElzVGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXIoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIERlYnVnLkFzc2VydCh0aGlzLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RBQkxFLCBcIkluIE1nQ29udHJvbC5Jc1RhYmxlV2l0aEFic29sdXRlU2Nyb2xsYmFyKCk6IE5vdCBhIHRhYmxlIGNvbnRyb2wuXCIpO1xyXG4gICAgaWYgKHRoaXMuX3Byb3BUYWIucHJvcEV4aXN0cyhQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TQ1JPTExfQkFSX1RIVU1CKSlcclxuICAgICAgdGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXIgPSAodGhpcy5fcHJvcFRhYi5nZXRQcm9wQnlJZChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TQ1JPTExfQkFSX1RIVU1CKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpID09PSA8bnVtYmVyPlNjcm9sbEJhclRodW1iVHlwZS5BYnNvbHV0ZSk7XHJcblxyXG4gICAgcmV0dXJuIHRhYmxlV2l0aEFic29sdXRlU2Nyb2xsYmFyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2hlY2sgaWYgdGhlIHJldHVybi10by1jb250cm9sIHBvaW50cyB0byBhbiBleGlzdGluZyB0YXNrLjwvc3VtbWFyeT5cclxuICBzdGF0aWMgdmFsaWRSZXR1cm5Ub0N0cmwoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoTWdDb250cm9sLlJldHVyblRvQ3RybCAhPT0gbnVsbCAmJiBNZ0NvbnRyb2wuUmV0dXJuVG9DdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuaXNBYm9ydGluZygpKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGNoZWNrIGlmIG9uZSBtYXkgZGlyZWN0bHkgKG5vdCB2aWEgdGhlIGd1aSkgc2V0IGEgdmFsdWUgb24gdGhpcyBjb250cm9sLjwvc3VtbWFyeT5cclxuICBtYXlTZXRWYWx1ZSgpOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAodGhpcy5UeXBlKSB7XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQ0hFQ0tCT1g6XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfVEVYVDpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DT01CTzpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9MSVNUOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1JBRElPOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RBQjpcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByZXZlbnQgdmFsdWUgc2V0dGluZyBpZiB0aGUgY29udHJvbCBkb2Vzbid0IGhhdmUgYSBmaWVsZCwgb3IgaWYgaXQgZ2V0cyBpdHMgdmFsdWUgZnJvbSBhbiBleHByZXNzaW9uXHJcbiAgICBpZiAodGhpcy5fZmllbGQgPT09IG51bGwgfHwgdGhpcy5fdmFsRXhwSWQgPiAwKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaXNNb2RpZmlhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2tzIGlmIGEgdmFsdWUgbWF5IGJlIHNldCwgYW5kIHRyaWVzIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiTmV3VmFsdWVcIj50aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlQ3RybFwiPmlmIHRydWUgdGhlbiB0aGUgY29udHJvbCB3aWxsIGJlIHVwZGF0ZWQgdXBvbiBzdWNjZXNzZnVsIGNoZWNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+cmV0dXJucyBpZiB2YWx1ZSBzZXR0aW5nIHdhcyBzdWNjZXNzZnVsIDwvcmV0dXJucz5cclxuICBhc3luYyB2YWxpZGF0ZUFuZFNldFZhbHVlSWZBbGxvd2VkKE5ld1ZhbHVlOiBhbnksIHJlZnJlc2hEaXNwbGF5OiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIXRoaXMubWF5U2V0VmFsdWUoKSkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKE5TdHJpbmcuRm9ybWF0KFwiVW5hYmxlIHRvIGNoYW5nZSB2YWx1ZSBvZiBjb250cm9sIHswfTogVGhlIGNvbnRyb2wgaXMgcmVhZC1vbmx5LlwiLCB0aGlzLk5hbWUpKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXRWYWwgPSBhd2FpdCB0aGlzLnZhbGlkYXRlQW5kU2V0VmFsdWUoTmV3VmFsdWUsIHRydWUpO1xyXG4gICAgaWYgKCFyZXRWYWwpXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coTlN0cmluZy5Gb3JtYXQoXCJWYWx1ZSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgezB9LlwiLCB0aGlzLk5hbWUpKTtcclxuXHJcbiAgICBpZiAocmVmcmVzaERpc3BsYXkpIHtcclxuICAgICAgQ29tbWFuZHMuYWRkTm9QYXJhbWV0ZXJzKENvbW1hbmRUeXBlLlJFRlJFU0hfVEFTSywgdGhpcy5nZXRGb3JtKCkpO1xyXG4gICAgICBDb21tYW5kcy5pbnZva2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL3JlZnJlc2ggdGFza1xyXG4gICAgcmV0dXJuIHJldFZhbDtcclxuICB9XHJcbn1cclxuIl19