@kontur.candy/tools 2.154.0 → 2.156.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/distr/Common/AsyncUtils.js +1 -3
  3. package/distr/Common/CandyApiClient/CandyApiClient.js +25 -138
  4. package/distr/Common/CandyApiClient/CandyApiClientContext.js +1 -8
  5. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +1 -1
  6. package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +1 -1
  7. package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +1 -2
  8. package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +1 -1
  9. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +1 -16
  10. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +1 -12
  11. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +1 -12
  12. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +1 -1
  13. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +1 -13
  14. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +1 -3
  15. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +1 -1
  16. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +1 -8
  17. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +1 -7
  18. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +9 -12
  19. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +1 -1
  20. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +1 -1
  21. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +4 -72
  22. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
  23. package/distr/Common/CandyApiClient/IsBuffer.js +1 -2
  24. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +1 -1
  25. package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +1 -1
  26. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +1 -1
  27. package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +1 -1
  28. package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +1 -1
  29. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +12 -7
  30. package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +1 -1
  31. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
  32. package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +1 -3
  33. package/distr/Common/CandyApiClient/Types/DraftFullId.js +1 -1
  34. package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js +5 -6
  35. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +9 -12
  36. package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +5 -6
  37. package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +1 -1
  38. package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +1 -1
  39. package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +5 -6
  40. package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +1 -1
  41. package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +1 -3
  42. package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +1 -1
  43. package/distr/Common/CandyApiClient/Types/Guid.js +1 -1
  44. package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js +1 -1
  45. package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +1 -1
  46. package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js +6 -0
  47. package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +5 -6
  48. package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +1 -1
  49. package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +1 -1
  50. package/distr/Common/CandyApiClient/Types/Print/PrintType.js +5 -6
  51. package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js +1 -1
  52. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +1 -1
  53. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js +1 -1
  54. package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js +1 -1
  55. package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +1 -1
  56. package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +5 -6
  57. package/distr/Common/CandyApiClient/Types/TestClassification.js +1 -1
  58. package/distr/Common/CollectionUtils.js +1 -3
  59. package/distr/Common/CommonConstants/SectionNames.js +1 -3
  60. package/distr/Common/Comparers.js +2 -16
  61. package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +1 -5
  62. package/distr/Common/EndPoints.js +1 -2
  63. package/distr/Common/Enums/ButtonSettingsTypeEnum.js +5 -6
  64. package/distr/Common/Errors.js +1 -19
  65. package/distr/Common/FormActionHandlers/ContextualActionNames.js +1 -3
  66. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +1 -1
  67. package/distr/Common/Funcs.js +1 -5
  68. package/distr/Common/GFV.js +1 -1
  69. package/distr/Common/Hooks/UseLocalStorage.js +3 -10
  70. package/distr/Common/HttpClient/AuthenticationMode.js +3 -7
  71. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +1 -3
  72. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +1 -3
  73. package/distr/Common/HttpClient/FetchImplementation/Fetch.js +1 -1
  74. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +1 -1
  75. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +6 -11
  76. package/distr/Common/HttpClient/HttpClient.js +9 -80
  77. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +1 -1
  78. package/distr/Common/HttpClient/IHttpClient.js +1 -1
  79. package/distr/Common/IndentString.js +1 -3
  80. package/distr/Common/IntRangeUtils.js +3 -10
  81. package/distr/Common/IterableUtils.js +3 -76
  82. package/distr/Common/KCLangRuntimeUtils.js +1 -87
  83. package/distr/Common/ModelPath/BuildIterationSequence.js +1 -5
  84. package/distr/Common/ModelPath/EachCurrentCollision.js +5 -6
  85. package/distr/Common/ModelPath/IEquatable.js +1 -1
  86. package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +1 -8
  87. package/distr/Common/ModelPath/Map/Map2.js +2 -24
  88. package/distr/Common/ModelPath/Map/ModelPathMap.js +1 -8
  89. package/distr/Common/ModelPath/ModelPath.js +16 -140
  90. package/distr/Common/ModelPath/ModelPathBuilder.js +1 -14
  91. package/distr/Common/ModelPath/ModelPathHelper.js +1 -2
  92. package/distr/Common/ModelPath/PathMatcher.js +5 -24
  93. package/distr/Common/ModelPath/PathSplitHelper.js +1 -6
  94. package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +1 -10
  95. package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +1 -10
  96. package/distr/Common/ModelPath/Set/ModelPathSet.js +1 -10
  97. package/distr/Common/ModelPath/Set/Set2.js +1 -16
  98. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +1 -9
  99. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +1 -1
  100. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +1 -3
  101. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +1 -17
  102. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +1 -30
  103. package/distr/Common/NidusClient/INidusClient.js +1 -3
  104. package/distr/Common/NidusClient/NidusClientContext.js +1 -14
  105. package/distr/Common/NidusClient/NidusClientImpl.js +1 -18
  106. package/distr/Common/PathConstants.js +1 -3
  107. package/distr/Common/StringArrayKey.js +1 -8
  108. package/distr/Common/TypingUtils.js +7 -26
  109. package/distr/Common/UUID.js +1 -4
  110. package/distr/Common/UseAsyncEffect.js +3 -7
  111. package/distr/Common/UseShowOnce.js +1 -17
  112. package/distr/Common/UseTypedSelector.js +1 -3
  113. package/distr/Common/getRngSchemaFilename.js +21 -0
  114. package/distr/Common/hashUtils.js +1 -4
  115. package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +1 -23
  116. package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +3 -10
  117. package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +1 -10
  118. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +5 -23
  119. package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +1 -27
  120. package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +1 -2
  121. package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +3 -10
  122. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +1 -9
  123. package/distr/Tools/src/BuildTasks/FSTask.js +1 -19
  124. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +1 -19
  125. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +1 -16
  126. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +1 -11
  127. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +1 -10
  128. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +1 -10
  129. package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +1 -10
  130. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +5 -26
  131. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +1 -38
  132. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +2 -42
  133. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +4 -39
  134. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +4 -7
  135. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +4 -10
  136. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +9 -17
  137. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +3 -5
  138. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +1 -13
  139. package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +1 -20
  140. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +3 -48
  141. package/distr/Tools/src/BuildTasks/ReadFormSource.js +7 -32
  142. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +5 -32
  143. package/distr/Tools/src/BuildTasks/Version.js +1 -10
  144. package/distr/Tools/src/BuildTasks/WriteFormMeta.js +1 -10
  145. package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +5 -9
  146. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +1 -5
  147. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +34 -70
  148. package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +1 -12
  149. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +1 -5
  150. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +1 -67
  151. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +3 -28
  152. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +3 -41
  153. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +3 -23
  154. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +3 -20
  155. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +1 -23
  156. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +1 -37
  157. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +1 -13
  158. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +1 -40
  159. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +8 -49
  160. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +1 -13
  161. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +1 -17
  162. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +1 -4
  163. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +10 -19
  164. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +12 -26
  165. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +1 -5
  166. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +1 -1
  167. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +1 -1
  168. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +10 -44
  169. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +1 -17
  170. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -5
  171. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +1 -1
  172. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +1 -27
  173. package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +11 -16
  174. package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +1 -1
  175. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +1 -1
  176. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +1 -1
  177. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +1 -4
  178. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +23 -34
  179. package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +1 -4
  180. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +1 -15
  181. package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +3 -19
  182. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}.calc.js +1 -2
  183. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/setKppValue.js +1 -2
  184. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +1 -6
  185. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +1 -11
  186. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/kppValue.js +3 -4
  187. package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +1 -4
  188. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +1 -23
  189. package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +1 -4
  190. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +7 -23
  191. package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js +26 -0
  192. package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js +48 -0
  193. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +1 -37
  194. package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +1 -4
  195. package/distr/Tools/src/CandyCLI.js +7 -56
  196. package/distr/Tools/src/CheckNodeJsVersion.js +3 -10
  197. package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +1 -10
  198. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +4 -29
  199. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +1 -6
  200. package/distr/Tools/src/Commons/ErrorUntyped.js +1 -1
  201. package/distr/Tools/src/Commons/EventObject.js +10 -20
  202. package/distr/Tools/src/Commons/ExecUtils.js +3 -9
  203. package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +1 -7
  204. package/distr/Tools/src/Commons/FormGlobsUtils.js +1 -33
  205. package/distr/Tools/src/Commons/FsUtils.js +1 -12
  206. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +1 -8
  207. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +4 -15
  208. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +1 -4
  209. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +1 -5
  210. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +1 -1
  211. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +1 -4
  212. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +1 -5
  213. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +2 -5
  214. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +1 -5
  215. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +1 -14
  216. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +1 -4
  217. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +1 -5
  218. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +1 -4
  219. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +1 -4
  220. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +1 -1
  221. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +1 -4
  222. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +1 -4
  223. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +1 -36
  224. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +1 -9
  225. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +5 -35
  226. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +9 -11
  227. package/distr/Tools/src/Commons/Locks/Lock.js +1 -8
  228. package/distr/Tools/src/Commons/Locks/LockHandle.js +1 -5
  229. package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +1 -9
  230. package/distr/Tools/src/Commons/Logging/ELKLogger.js +17 -22
  231. package/distr/Tools/src/Commons/Logging/ILogger.js +1 -5
  232. package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +3 -21
  233. package/distr/Tools/src/Commons/Logging/Logger.js +9 -29
  234. package/distr/Tools/src/Commons/Logging/StaticLogger.js +11 -15
  235. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +1 -1
  236. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +3 -37
  237. package/distr/Tools/src/Commons/PathPattern.js +1 -13
  238. package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +1 -4
  239. package/distr/Tools/src/Commons/TasksCore/BuildTask.js +1 -1
  240. package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +13 -200
  241. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +1 -20
  242. package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +7 -10
  243. package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +1 -15
  244. package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +1 -15
  245. package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -13
  246. package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +5 -11
  247. package/distr/Tools/src/Commons/TimingUtils.js +1 -2
  248. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +13 -51
  249. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +4 -14
  250. package/distr/Tools/src/GenerateReadMe.js +1 -13
  251. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  252. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.LICENSE.txt +10 -1
  253. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  254. package/distr/Tools/src/LocalServerFrontEndDist/index.js.LICENSE.txt +10 -1
  255. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  256. package/distr/Tools/src/Options/CandyToolOptions.js +3 -11
  257. package/distr/Tools/src/ReadFarmConfig.js +1 -5
  258. package/distr/Tools/src/SelfUpdate.js +4 -28
  259. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1506 -1257
  260. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.LICENSE.txt +1 -0
  261. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  262. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +843 -623
  263. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.LICENSE.txt +1 -0
  264. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  265. package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +777 -1117
  266. package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +1665 -2015
  267. package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +9 -55
  268. package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +777 -1117
  269. package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +1665 -2015
  270. package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +9 -55
  271. package/package.json +10 -10
  272. /package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/schemas/{{gfv}.rng.xml → {gfv}.0.rng.xml} +0 -0
@@ -1,36 +1,22 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.BuildGeneratorFromSourcesTask = void 0;
9
-
10
8
  var _path = _interopRequireDefault(require("path"));
11
-
12
9
  var _chokidar = require("chokidar");
13
-
14
10
  var _lodash = _interopRequireDefault(require("lodash"));
15
-
16
11
  var _pLimit = _interopRequireDefault(require("p-limit"));
17
-
18
12
  var _ExecUtils = require("../../Commons/ExecUtils");
19
-
20
13
  var _ILogger = require("../../Commons/Logging/ILogger");
21
-
22
14
  var _StaticLogger = require("../../Commons/Logging/StaticLogger");
23
-
24
15
  var _ChainableValueProducer = require("../../Commons/TasksCore/ChainableValueProducer");
25
-
26
16
  var _EngineStructureUtils = require("../EngineStructureUtils");
27
-
28
17
  var _ProcessUtils = require("../ProcessUtils/ProcessUtils");
29
-
30
18
  var _CreateAsyncGenerator = require("./GeneratorWorker/CreateAsyncGenerator");
31
-
32
19
  const generatorBuildLimit = (0, _pLimit.default)(1);
33
-
34
20
  class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableValueProducerBase {
35
21
  constructor(pathToEngineSources, logger = (0, _StaticLogger.getLogger)()) {
36
22
  super();
@@ -40,22 +26,18 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
40
26
  this.currentGenerator = void 0;
41
27
  this.buildProcess = void 0;
42
28
  this.buildResultWatcher = void 0;
43
-
44
29
  this.handleUpdate = async () => {
45
30
  this.logger.log("Generator sources updated");
46
31
  await this.emitUpdate((0, _CreateAsyncGenerator.createAsyncGenerator)(_path.default.join(this.pathToEngineSources, "Generator"), this.useWatch, this.useWatch));
47
32
  };
48
-
49
33
  this.logger = logger.withPrefix("GENERATOR");
50
34
  this.pathToEngineSources = pathToEngineSources;
51
35
  }
52
-
53
36
  async getCurrentValue() {
54
37
  return generatorBuildLimit(async () => {
55
38
  if (this.currentGenerator != undefined) {
56
39
  return this.currentGenerator;
57
40
  }
58
-
59
41
  if (this.useWatch) {
60
42
  if (this.buildProcess == undefined) {
61
43
  this.buildProcess = await this.runWatchProcessStarted();
@@ -65,19 +47,15 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
65
47
  } else {
66
48
  this.currentGenerator = await this.acquireGeneratorFromSources();
67
49
  }
68
-
69
50
  if (this.currentGenerator == undefined) {
70
51
  throw new Error("InvalidProgramState");
71
52
  }
72
-
73
53
  return this.currentGenerator;
74
54
  });
75
55
  }
76
-
77
56
  async beginListening() {
78
57
  this.useWatch = true;
79
58
  }
80
-
81
59
  async stopListening() {
82
60
  if (this.buildProcess != undefined) {
83
61
  try {
@@ -88,14 +66,11 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
88
66
  this.logger.error(`Failed to stop process: ${error}`);
89
67
  }
90
68
  }
91
-
92
69
  if (this.buildResultWatcher != undefined) {
93
70
  this.buildResultWatcher.close();
94
71
  }
95
-
96
72
  this.useWatch = false;
97
73
  }
98
-
99
74
  async acquireGeneratorFromSources() {
100
75
  const action = (0, _ILogger.buildActionBegin)(this.logger, "Build generator");
101
76
  const buildDirectory = await this.getBuildDirectory();
@@ -106,17 +81,13 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
106
81
  action.complete();
107
82
  return result;
108
83
  }
109
-
110
84
  async getBuildDirectory() {
111
85
  return (await (0, _EngineStructureUtils.isNewEngineStructure)(this.pathToEngineSources)) ? _path.default.join(this.pathToEngineSources, "Generator") : this.pathToEngineSources;
112
86
  }
113
-
114
87
  async runWatchProcessStarted() {
115
88
  this.logger.log("Start watch");
116
89
  const buildDirectory = await this.getBuildDirectory();
117
-
118
90
  const result = _ProcessUtils.ProcessUtils.createShellProcess("npm", ["run", "generator:build", "--", "--watch"], buildDirectory);
119
-
120
91
  result.onStdOut.subscribe(data => {
121
92
  this.logger.verbose(data.toString());
122
93
  });
@@ -128,35 +99,27 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
128
99
  this.logger.log("Successfully complied");
129
100
  return result;
130
101
  }
131
-
132
102
  async waitFirstCompilationCompleted(result) {
133
103
  await result.waitOutputIncludesString("Successfully compiled");
134
104
  }
135
-
136
105
  async createBuildResultWatcher(pathToGeneratorOutputDir) {
137
106
  let maskToObserveGeneratorChanges;
138
-
139
107
  if (await (0, _EngineStructureUtils.isOldGeneratorSourcesStructure)(this.pathToEngineSources)) {
140
108
  maskToObserveGeneratorChanges = ["**/*.js"];
141
109
  } else {
142
110
  maskToObserveGeneratorChanges = ["Generator/src/**/*.js", "index.js"];
143
111
  }
144
-
145
112
  const watcher = (0, _chokidar.watch)(maskToObserveGeneratorChanges, {
146
113
  ignoreInitial: true,
147
114
  cwd: pathToGeneratorOutputDir,
148
115
  ignorePermissionErrors: false,
149
116
  usePolling: true
150
117
  });
151
-
152
118
  const handleAnyFsEventDebounced = _lodash.default.debounce(() => this.handleUpdate(), 500);
153
-
154
119
  watcher.on("all", handleAnyFsEventDebounced);
155
120
  watcher.on("error", handleAnyFsEventDebounced);
156
121
  return watcher;
157
122
  }
158
-
159
123
  }
160
-
161
124
  exports.BuildGeneratorFromSourcesTask = BuildGeneratorFromSourcesTask;
162
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL0dlbmVyYXRvci9CdWlsZEdlbmVyYXRvckZyb21Tb3VyY2VzVGFzay50cyJdLCJuYW1lcyI6WyJnZW5lcmF0b3JCdWlsZExpbWl0IiwiQnVpbGRHZW5lcmF0b3JGcm9tU291cmNlc1Rhc2siLCJPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2UiLCJjb25zdHJ1Y3RvciIsInBhdGhUb0VuZ2luZVNvdXJjZXMiLCJsb2dnZXIiLCJ1c2VXYXRjaCIsImN1cnJlbnRHZW5lcmF0b3IiLCJidWlsZFByb2Nlc3MiLCJidWlsZFJlc3VsdFdhdGNoZXIiLCJoYW5kbGVVcGRhdGUiLCJsb2ciLCJlbWl0VXBkYXRlIiwicGF0aCIsImpvaW4iLCJ3aXRoUHJlZml4IiwiZ2V0Q3VycmVudFZhbHVlIiwidW5kZWZpbmVkIiwicnVuV2F0Y2hQcm9jZXNzU3RhcnRlZCIsImNyZWF0ZUJ1aWxkUmVzdWx0V2F0Y2hlciIsImFjcXVpcmVHZW5lcmF0b3JGcm9tU291cmNlcyIsIkVycm9yIiwiYmVnaW5MaXN0ZW5pbmciLCJzdG9wTGlzdGVuaW5nIiwia2lsbCIsImVycm9yIiwiY2xvc2UiLCJhY3Rpb24iLCJidWlsZERpcmVjdG9yeSIsImdldEJ1aWxkRGlyZWN0b3J5IiwiY3dkIiwicmVzdWx0IiwiY29tcGxldGUiLCJQcm9jZXNzVXRpbHMiLCJjcmVhdGVTaGVsbFByb2Nlc3MiLCJvblN0ZE91dCIsInN1YnNjcmliZSIsImRhdGEiLCJ2ZXJib3NlIiwidG9TdHJpbmciLCJvblN0ZEVyciIsInN0YXJ0Iiwid2FpdEZpcnN0Q29tcGlsYXRpb25Db21wbGV0ZWQiLCJ3YWl0T3V0cHV0SW5jbHVkZXNTdHJpbmciLCJwYXRoVG9HZW5lcmF0b3JPdXRwdXREaXIiLCJtYXNrVG9PYnNlcnZlR2VuZXJhdG9yQ2hhbmdlcyIsIndhdGNoZXIiLCJpZ25vcmVJbml0aWFsIiwiaWdub3JlUGVybWlzc2lvbkVycm9ycyIsInVzZVBvbGxpbmci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QSxPQUFPLENBQUNPLEVBQVIsQ0FBVyxPQUFYLEVBQW9CSCx5QkFBcEI7QUFDQSxXQUFPSixPQUFQO0FBQ0g7O0FBbEl5RiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZTV2F0Y2hlciB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tIFwiY2hva2lkYXJcIjtcbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCBwTGltaXQgZnJvbSBcInAtbGltaXRcIjtcblxuaW1wb3J0IHsgZXhlY0NvbW1hbmRBc3luYyB9IGZyb20gXCIuLi8uLi9Db21tb25zL0V4ZWNVdGlsc1wiO1xuaW1wb3J0IHsgYnVpbGRBY3Rpb25CZWdpbiwgSUxvZ2dlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL0xvZ2dpbmcvSUxvZ2dlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcbmltcG9ydCB7IE9ic2VydmFibGVWYWx1ZVByb2R1Y2VyQmFzZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyXCI7XG5pbXBvcnQgeyBpc05ld0VuZ2luZVN0cnVjdHVyZSwgaXNPbGRHZW5lcmF0b3JTb3VyY2VzU3RydWN0dXJlIH0gZnJvbSBcIi4uL0VuZ2luZVN0cnVjdHVyZVV0aWxzXCI7XG5pbXBvcnQgeyBGb3JtR2VuZXJhdG9yIH0gZnJvbSBcIi4uL0Zvcm0vR2VuZXJhdGVGb3JtXCI7XG5pbXBvcnQgeyBQcm9jZXNzVXRpbHMgfSBmcm9tIFwiLi4vUHJvY2Vzc1V0aWxzL1Byb2Nlc3NVdGlsc1wiO1xuaW1wb3J0IHsgU2hlbGxQcm9jZXNzSGFuZGxlIH0gZnJvbSBcIi4uL1Byb2Nlc3NVdGlscy9TaGVsbFByb2Nlc3NIYW5kbGVcIjtcblxuaW1wb3J0IHsgY3JlYXRlQXN5bmNHZW5lcmF0b3IgfSBmcm9tIFwiLi9HZW5lcmF0b3JXb3JrZXIvQ3JlYXRlQXN5bmNHZW5lcmF0b3JcIjtcblxuY29uc3QgZ2VuZXJhdG9yQnVpbGRMaW1pdCA9IHBMaW1pdCgxKTtcblxuZXhwb3J0IGNsYXNzIEJ1aWxkR2VuZXJhdG9yRnJvbVNvdXJjZXNUYXNrIGV4dGVuZHMgT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlPEZvcm1HZW5lcmF0b3I+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhdGhUb0VuZ2luZVNvdXJjZXM6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogSUxvZ2dlcjtcbiAgICBwcml2YXRlIHVzZVdhdGNoID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjdXJyZW50R2VuZXJhdG9yPzogRm9ybUdlbmVyYXRvcjtcbiAgICBwcml2YXRlIGJ1aWxkUHJvY2Vzcz86IFNoZWxsUHJvY2Vzc0hhbmRsZTtcbiAgICBwcml2YXRlIGJ1aWxkUmVzdWx0V2F0Y2hlcj86IEZTV2F0Y2hlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXRoVG9FbmdpbmVTb3VyY2VzOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciA9IGdldExvZ2dlcigpKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyLndpdGhQcmVmaXgoXCJHRU5FUkFUT1JcIik7XG4gICAgICAgIHRoaXMucGF0aFRvRW5naW5lU291cmNlcyA9IHBhdGhUb0VuZ2luZVNvdXJjZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPEZvcm1HZW5lcmF0b3I+IHtcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRvckJ1aWxkTGltaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEdlbmVyYXRvciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50R2VuZXJhdG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudXNlV2F0Y2gpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5idWlsZFByb2Nlc3MgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRQcm9jZXNzID0gYXdhaXQgdGhpcy5ydW5XYXRjaFByb2Nlc3NTdGFydGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRSZXN1bHRXYXRjaGVyID0gYXdhaXQgdGhpcy5jcmVhdGVCdWlsZFJlc3VsdFdhdGNoZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5wYXRoVG9FbmdpbmVTb3VyY2VzLCBcIkdlbmVyYXRvclwiLCBcImRpc3RcIilcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50R2VuZXJhdG9yID0gY3JlYXRlQXN5bmNHZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5wYXRoVG9FbmdpbmVTb3VyY2VzLCBcIkdlbmVyYXRvclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlV2F0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZVdhdGNoXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRHZW5lcmF0b3IgPSBhd2FpdCB0aGlzLmFjcXVpcmVHZW5lcmF0b3JGcm9tU291cmNlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEdlbmVyYXRvciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkUHJvZ3JhbVN0YXRlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEdlbmVyYXRvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJlZ2luTGlzdGVuaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnVzZVdhdGNoID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgc3RvcExpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuYnVpbGRQcm9jZXNzICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWlsZFByb2Nlc3MgPSB0aGlzLmJ1aWxkUHJvY2VzcztcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkUHJvY2VzcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhd2FpdCBidWlsZFByb2Nlc3Mua2lsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHN0b3AgcHJvY2VzczogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5idWlsZFJlc3VsdFdhdGNoZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkUmVzdWx0V2F0Y2hlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlV2F0Y2ggPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVVwZGF0ZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwiR2VuZXJhdG9yIHNvdXJjZXMgdXBkYXRlZFwiKTtcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VXBkYXRlKFxuICAgICAgICAgICAgY3JlYXRlQXN5bmNHZW5lcmF0b3IocGF0aC5qb2luKHRoaXMucGF0aFRvRW5naW5lU291cmNlcywgXCJHZW5lcmF0b3JcIiksIHRoaXMudXNlV2F0Y2gsIHRoaXMudXNlV2F0Y2gpXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgYXN5bmMgYWNxdWlyZUdlbmVyYXRvckZyb21Tb3VyY2VzKCk6IFByb21pc2U8Rm9ybUdlbmVyYXRvcj4ge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBidWlsZEFjdGlvbkJlZ2luKHRoaXMubG9nZ2VyLCBcIkJ1aWxkIGdlbmVyYXRvclwiKTtcbiAgICAgICAgY29uc3QgYnVpbGREaXJlY3RvcnkgPSBhd2FpdCB0aGlzLmdldEJ1aWxkRGlyZWN0b3J5KCk7XG4gICAgICAgIGF3YWl0IGV4ZWNDb21tYW5kQXN5bmModGhpcy5sb2dnZXIsIGB5YXJuIGdlbmVyYXRvcjpidWlsZGAsIHtcbiAgICAgICAgICAgIGN3ZDogYnVpbGREaXJlY3RvcnksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVBc3luY0dlbmVyYXRvcihcbiAgICAgICAgICAgIHBhdGguam9pbih0aGlzLnBhdGhUb0VuZ2luZVNvdXJjZXMsIFwiR2VuZXJhdG9yXCIpLFxuICAgICAgICAgICAgdGhpcy51c2VXYXRjaCxcbiAgICAgICAgICAgIHRoaXMudXNlV2F0Y2hcbiAgICAgICAgKTtcbiAgICAgICAgYWN0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRCdWlsZERpcmVjdG9yeSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IGlzTmV3RW5naW5lU3RydWN0dXJlKHRoaXMucGF0aFRvRW5naW5lU291cmNlcykpXG4gICAgICAgICAgICA/IHBhdGguam9pbih0aGlzLnBhdGhUb0VuZ2luZVNvdXJjZXMsIFwiR2VuZXJhdG9yXCIpXG4gICAgICAgICAgICA6IHRoaXMucGF0aFRvRW5naW5lU291cmNlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJ1bldhdGNoUHJvY2Vzc1N0YXJ0ZWQoKTogUHJvbWlzZTxTaGVsbFByb2Nlc3NIYW5kbGU+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwiU3RhcnQgd2F0Y2hcIik7XG4gICAgICAgIGNvbnN0IGJ1aWxkRGlyZWN0b3J5ID0gYXdhaXQgdGhpcy5nZXRCdWlsZERpcmVjdG9yeSgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBQcm9jZXNzVXRpbHMuY3JlYXRlU2hlbGxQcm9jZXNzKFxuICAgICAgICAgICAgXCJucG1cIixcbiAgICAgICAgICAgIFtcInJ1blwiLCBcImdlbmVyYXRvcjpidWlsZFwiLCBcIi0tXCIsIFwiLS13YXRjaFwiXSxcbiAgICAgICAgICAgIGJ1aWxkRGlyZWN0b3J5XG4gICAgICAgICk7XG4gICAgICAgIHJlc3VsdC5vblN0ZE91dC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQub25TdGRFcnIuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0KCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZpcnN0Q29tcGlsYXRpb25Db21wbGV0ZWQocmVzdWx0KTtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwiU3VjY2Vzc2Z1bGx5IGNvbXBsaWVkXCIpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgd2FpdEZpcnN0Q29tcGlsYXRpb25Db21wbGV0ZWQocmVzdWx0OiBTaGVsbFByb2Nlc3NIYW5kbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgcmVzdWx0LndhaXRPdXRwdXRJbmNsdWRlc1N0cmluZyhcIlN1Y2Nlc3NmdWxseSBjb21waWxlZFwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZUJ1aWxkUmVzdWx0V2F0Y2hlcihwYXRoVG9HZW5lcmF0b3JPdXRwdXREaXI6IHN0cmluZyk6IFByb21pc2U8RlNXYXRjaGVyPiB7XG4gICAgICAgIGxldCBtYXNrVG9PYnNlcnZlR2VuZXJhdG9yQ2hhbmdlczogc3RyaW5nW107XG4gICAgICAgIGlmIChhd2FpdCBpc09sZEdlbmVyYXRvclNvdXJjZXNTdHJ1Y3R1cmUodGhpcy5wYXRoVG9FbmdpbmVTb3VyY2VzKSkge1xuICAgICAgICAgICAgbWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMgPSBbXCIqKi8qLmpzXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMgPSBbXCJHZW5lcmF0b3Ivc3JjLyoqLyouanNcIiwgXCJpbmRleC5qc1wiXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3YXRjaGVyID0gd2F0Y2gobWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMsIHtcbiAgICAgICAgICAgIGlnbm9yZUluaXRpYWw6IHRydWUsXG4gICAgICAgICAgICBjd2Q6IHBhdGhUb0dlbmVyYXRvck91dHB1dERpcixcbiAgICAgICAgICAgIGlnbm9yZVBlcm1pc3Npb25FcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgdXNlUG9sbGluZzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGhhbmRsZUFueUZzRXZlbnREZWJvdW5jZWQgPSBfLmRlYm91bmNlKCgpID0+IHRoaXMuaGFuZGxlVXBkYXRlKCksIDUwMCk7XG4gICAgICAgIHdhdGNoZXIub24oXCJhbGxcIiwgaGFuZGxlQW55RnNFdmVudERlYm91bmNlZCk7XG4gICAgICAgIHdhdGNoZXIub24oXCJlcnJvclwiLCBoYW5kbGVBbnlGc0V2ZW50RGVib3VuY2VkKTtcbiAgICAgICAgcmV0dXJuIHdhdGNoZXI7XG4gICAgfVxufVxuIl19
125
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2Nob2tpZGFyIiwiX2xvZGFzaCIsIl9wTGltaXQiLCJfRXhlY1V0aWxzIiwiX0lMb2dnZXIiLCJfU3RhdGljTG9nZ2VyIiwiX0NoYWluYWJsZVZhbHVlUHJvZHVjZXIiLCJfRW5naW5lU3RydWN0dXJlVXRpbHMiLCJfUHJvY2Vzc1V0aWxzIiwiX0NyZWF0ZUFzeW5jR2VuZXJhdG9yIiwiZ2VuZXJhdG9yQnVpbGRMaW1pdCIsInBMaW1pdCIsIkJ1aWxkR2VuZXJhdG9yRnJvbVNvdXJjZXNUYXNrIiwiT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlIiwiY29uc3RydWN0b3IiLCJwYXRoVG9FbmdpbmVTb3VyY2VzIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidXNlV2F0Y2giLCJjdXJyZW50R2VuZXJhdG9yIiwiYnVpbGRQcm9jZXNzIiwiYnVpbGRSZXN1bHRXYXRjaGVyIiwiaGFuZGxlVXBkYXRlIiwibG9nIiwiZW1pdFVwZGF0ZSIsImNyZWF0ZUFzeW5jR2VuZXJhdG9yIiwicGF0aCIsImpvaW4iLCJ3aXRoUHJlZml4IiwiZ2V0Q3VycmVudFZhbHVlIiwidW5kZWZpbmVkIiwicnVuV2F0Y2hQcm9jZXNzU3RhcnRlZCIsImNyZWF0ZUJ1aWxkUmVzdWx0V2F0Y2hlciIsImFjcXVpcmVHZW5lcmF0b3JGcm9tU291cmNlcyIsIkVycm9yIiwiYmVnaW5MaXN0ZW5pbmciLCJzdG9wTGlzdGVuaW5nIiwia2lsbCIsImVycm9yIiwiY2xvc2UiLCJhY3Rpb24iLCJidWlsZEFjdGlvbkJlZ2luIiwiYnVpbGREaXJlY3RvcnkiLCJnZXRCdWlsZERpcmVjdG9yeSIsImV4ZWNDb21tYW5kQXN5bmMiLCJjd2QiLCJyZXN1bHQiLCJjb21wbGV0ZSIsImlzTmV3RW5naW5lU3RydWN0dXJlIiwiUHJvY2Vzc1V0aWxzIiwiY3JlYXRlU2hlbGxQcm9jZXNzIiwib25TdGRPdXQiLCJzdWJzY3JpYmUiLCJkYXRhIiwidmVyYm9zZSIsInRvU3RyaW5nIiwib25TdGRFcnIiLCJzdGFydCIsIndhaXRGaXJzdENvbXBpbGF0aW9uQ29tcGxldGVkIiwid2FpdE91dHB1dEluY2x1ZGVzU3RyaW5nIiwicGF0aFRvR2VuZXJhdG9yT3V0cHV0RGlyIiwibWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMiLCJpc09sZEdlbmVyYXRvclNvdXJjZXNTdHJ1Y3R1cmUiLCJ3YXRjaGVyIiwid2F0Y2giLCJpZ25vcmVJbml0aWFsIiwiaWdub3JlUGVybWlzc2lvbkVycm9ycyIsInVzZVBvbGxpbmciLCJoYW5kbGVBbnlGc0V2ZW50RGVib3VuY2VkIiwiXyIsImRlYm91bmNlIiwib24iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL0J1aWxkVGFza3MvR2VuZXJhdG9yL0J1aWxkR2VuZXJhdG9yRnJvbVNvdXJjZXNUYXNrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZTV2F0Y2hlciB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tIFwiY2hva2lkYXJcIjtcbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCBwTGltaXQgZnJvbSBcInAtbGltaXRcIjtcblxuaW1wb3J0IHsgZXhlY0NvbW1hbmRBc3luYyB9IGZyb20gXCIuLi8uLi9Db21tb25zL0V4ZWNVdGlsc1wiO1xuaW1wb3J0IHsgYnVpbGRBY3Rpb25CZWdpbiwgSUxvZ2dlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL0xvZ2dpbmcvSUxvZ2dlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcbmltcG9ydCB7IE9ic2VydmFibGVWYWx1ZVByb2R1Y2VyQmFzZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyXCI7XG5pbXBvcnQgeyBpc05ld0VuZ2luZVN0cnVjdHVyZSwgaXNPbGRHZW5lcmF0b3JTb3VyY2VzU3RydWN0dXJlIH0gZnJvbSBcIi4uL0VuZ2luZVN0cnVjdHVyZVV0aWxzXCI7XG5pbXBvcnQgeyBGb3JtR2VuZXJhdG9yIH0gZnJvbSBcIi4uL0Zvcm0vR2VuZXJhdGVGb3JtXCI7XG5pbXBvcnQgeyBQcm9jZXNzVXRpbHMgfSBmcm9tIFwiLi4vUHJvY2Vzc1V0aWxzL1Byb2Nlc3NVdGlsc1wiO1xuaW1wb3J0IHsgU2hlbGxQcm9jZXNzSGFuZGxlIH0gZnJvbSBcIi4uL1Byb2Nlc3NVdGlscy9TaGVsbFByb2Nlc3NIYW5kbGVcIjtcblxuaW1wb3J0IHsgY3JlYXRlQXN5bmNHZW5lcmF0b3IgfSBmcm9tIFwiLi9HZW5lcmF0b3JXb3JrZXIvQ3JlYXRlQXN5bmNHZW5lcmF0b3JcIjtcblxuY29uc3QgZ2VuZXJhdG9yQnVpbGRMaW1pdCA9IHBMaW1pdCgxKTtcblxuZXhwb3J0IGNsYXNzIEJ1aWxkR2VuZXJhdG9yRnJvbVNvdXJjZXNUYXNrIGV4dGVuZHMgT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlPEZvcm1HZW5lcmF0b3I+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhdGhUb0VuZ2luZVNvdXJjZXM6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogSUxvZ2dlcjtcbiAgICBwcml2YXRlIHVzZVdhdGNoID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjdXJyZW50R2VuZXJhdG9yPzogRm9ybUdlbmVyYXRvcjtcbiAgICBwcml2YXRlIGJ1aWxkUHJvY2Vzcz86IFNoZWxsUHJvY2Vzc0hhbmRsZTtcbiAgICBwcml2YXRlIGJ1aWxkUmVzdWx0V2F0Y2hlcj86IEZTV2F0Y2hlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXRoVG9FbmdpbmVTb3VyY2VzOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciA9IGdldExvZ2dlcigpKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyLndpdGhQcmVmaXgoXCJHRU5FUkFUT1JcIik7XG4gICAgICAgIHRoaXMucGF0aFRvRW5naW5lU291cmNlcyA9IHBhdGhUb0VuZ2luZVNvdXJjZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPEZvcm1HZW5lcmF0b3I+IHtcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRvckJ1aWxkTGltaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEdlbmVyYXRvciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50R2VuZXJhdG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudXNlV2F0Y2gpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5idWlsZFByb2Nlc3MgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRQcm9jZXNzID0gYXdhaXQgdGhpcy5ydW5XYXRjaFByb2Nlc3NTdGFydGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRSZXN1bHRXYXRjaGVyID0gYXdhaXQgdGhpcy5jcmVhdGVCdWlsZFJlc3VsdFdhdGNoZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5wYXRoVG9FbmdpbmVTb3VyY2VzLCBcIkdlbmVyYXRvclwiLCBcImRpc3RcIilcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50R2VuZXJhdG9yID0gY3JlYXRlQXN5bmNHZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5wYXRoVG9FbmdpbmVTb3VyY2VzLCBcIkdlbmVyYXRvclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlV2F0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZVdhdGNoXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRHZW5lcmF0b3IgPSBhd2FpdCB0aGlzLmFjcXVpcmVHZW5lcmF0b3JGcm9tU291cmNlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEdlbmVyYXRvciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkUHJvZ3JhbVN0YXRlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEdlbmVyYXRvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJlZ2luTGlzdGVuaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnVzZVdhdGNoID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgc3RvcExpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuYnVpbGRQcm9jZXNzICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWlsZFByb2Nlc3MgPSB0aGlzLmJ1aWxkUHJvY2VzcztcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkUHJvY2VzcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhd2FpdCBidWlsZFByb2Nlc3Mua2lsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHN0b3AgcHJvY2VzczogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5idWlsZFJlc3VsdFdhdGNoZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkUmVzdWx0V2F0Y2hlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlV2F0Y2ggPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVVwZGF0ZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwiR2VuZXJhdG9yIHNvdXJjZXMgdXBkYXRlZFwiKTtcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VXBkYXRlKFxuICAgICAgICAgICAgY3JlYXRlQXN5bmNHZW5lcmF0b3IocGF0aC5qb2luKHRoaXMucGF0aFRvRW5naW5lU291cmNlcywgXCJHZW5lcmF0b3JcIiksIHRoaXMudXNlV2F0Y2gsIHRoaXMudXNlV2F0Y2gpXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgYXN5bmMgYWNxdWlyZUdlbmVyYXRvckZyb21Tb3VyY2VzKCk6IFByb21pc2U8Rm9ybUdlbmVyYXRvcj4ge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBidWlsZEFjdGlvbkJlZ2luKHRoaXMubG9nZ2VyLCBcIkJ1aWxkIGdlbmVyYXRvclwiKTtcbiAgICAgICAgY29uc3QgYnVpbGREaXJlY3RvcnkgPSBhd2FpdCB0aGlzLmdldEJ1aWxkRGlyZWN0b3J5KCk7XG4gICAgICAgIGF3YWl0IGV4ZWNDb21tYW5kQXN5bmModGhpcy5sb2dnZXIsIGB5YXJuIGdlbmVyYXRvcjpidWlsZGAsIHtcbiAgICAgICAgICAgIGN3ZDogYnVpbGREaXJlY3RvcnksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVBc3luY0dlbmVyYXRvcihcbiAgICAgICAgICAgIHBhdGguam9pbih0aGlzLnBhdGhUb0VuZ2luZVNvdXJjZXMsIFwiR2VuZXJhdG9yXCIpLFxuICAgICAgICAgICAgdGhpcy51c2VXYXRjaCxcbiAgICAgICAgICAgIHRoaXMudXNlV2F0Y2hcbiAgICAgICAgKTtcbiAgICAgICAgYWN0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRCdWlsZERpcmVjdG9yeSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IGlzTmV3RW5naW5lU3RydWN0dXJlKHRoaXMucGF0aFRvRW5naW5lU291cmNlcykpXG4gICAgICAgICAgICA/IHBhdGguam9pbih0aGlzLnBhdGhUb0VuZ2luZVNvdXJjZXMsIFwiR2VuZXJhdG9yXCIpXG4gICAgICAgICAgICA6IHRoaXMucGF0aFRvRW5naW5lU291cmNlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJ1bldhdGNoUHJvY2Vzc1N0YXJ0ZWQoKTogUHJvbWlzZTxTaGVsbFByb2Nlc3NIYW5kbGU+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwiU3RhcnQgd2F0Y2hcIik7XG4gICAgICAgIGNvbnN0IGJ1aWxkRGlyZWN0b3J5ID0gYXdhaXQgdGhpcy5nZXRCdWlsZERpcmVjdG9yeSgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBQcm9jZXNzVXRpbHMuY3JlYXRlU2hlbGxQcm9jZXNzKFxuICAgICAgICAgICAgXCJucG1cIixcbiAgICAgICAgICAgIFtcInJ1blwiLCBcImdlbmVyYXRvcjpidWlsZFwiLCBcIi0tXCIsIFwiLS13YXRjaFwiXSxcbiAgICAgICAgICAgIGJ1aWxkRGlyZWN0b3J5XG4gICAgICAgICk7XG4gICAgICAgIHJlc3VsdC5vblN0ZE91dC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQub25TdGRFcnIuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0KCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZpcnN0Q29tcGlsYXRpb25Db21wbGV0ZWQocmVzdWx0KTtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwiU3VjY2Vzc2Z1bGx5IGNvbXBsaWVkXCIpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgd2FpdEZpcnN0Q29tcGlsYXRpb25Db21wbGV0ZWQocmVzdWx0OiBTaGVsbFByb2Nlc3NIYW5kbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgcmVzdWx0LndhaXRPdXRwdXRJbmNsdWRlc1N0cmluZyhcIlN1Y2Nlc3NmdWxseSBjb21waWxlZFwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZUJ1aWxkUmVzdWx0V2F0Y2hlcihwYXRoVG9HZW5lcmF0b3JPdXRwdXREaXI6IHN0cmluZyk6IFByb21pc2U8RlNXYXRjaGVyPiB7XG4gICAgICAgIGxldCBtYXNrVG9PYnNlcnZlR2VuZXJhdG9yQ2hhbmdlczogc3RyaW5nW107XG4gICAgICAgIGlmIChhd2FpdCBpc09sZEdlbmVyYXRvclNvdXJjZXNTdHJ1Y3R1cmUodGhpcy5wYXRoVG9FbmdpbmVTb3VyY2VzKSkge1xuICAgICAgICAgICAgbWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMgPSBbXCIqKi8qLmpzXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMgPSBbXCJHZW5lcmF0b3Ivc3JjLyoqLyouanNcIiwgXCJpbmRleC5qc1wiXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3YXRjaGVyID0gd2F0Y2gobWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMsIHtcbiAgICAgICAgICAgIGlnbm9yZUluaXRpYWw6IHRydWUsXG4gICAgICAgICAgICBjd2Q6IHBhdGhUb0dlbmVyYXRvck91dHB1dERpcixcbiAgICAgICAgICAgIGlnbm9yZVBlcm1pc3Npb25FcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgdXNlUG9sbGluZzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGhhbmRsZUFueUZzRXZlbnREZWJvdW5jZWQgPSBfLmRlYm91bmNlKCgpID0+IHRoaXMuaGFuZGxlVXBkYXRlKCksIDUwMCk7XG4gICAgICAgIHdhdGNoZXIub24oXCJhbGxcIiwgaGFuZGxlQW55RnNFdmVudERlYm91bmNlZCk7XG4gICAgICAgIHdhdGNoZXIub24oXCJlcnJvclwiLCBoYW5kbGVBbnlGc0V2ZW50RGVib3VuY2VkKTtcbiAgICAgICAgcmV0dXJuIHdhdGNoZXI7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0EsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUksVUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sYUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sdUJBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLHFCQUFBLEdBQUFSLE9BQUE7QUFFQSxJQUFBUyxhQUFBLEdBQUFULE9BQUE7QUFHQSxJQUFBVSxxQkFBQSxHQUFBVixPQUFBO0FBRUEsTUFBTVcsbUJBQW1CLEdBQUcsSUFBQUMsZUFBTSxFQUFDLENBQUMsQ0FBQztBQUU5QixNQUFNQyw2QkFBNkIsU0FBU0MsbURBQTJCLENBQWdCO0VBUW5GQyxXQUFXQSxDQUFDQyxtQkFBMkIsRUFBRUMsTUFBZSxHQUFHLElBQUFDLHVCQUFTLEVBQUMsQ0FBQyxFQUFFO0lBQzNFLEtBQUssQ0FBQyxDQUFDO0lBQUMsS0FSS0YsbUJBQW1CO0lB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
@@ -4,16 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createAsyncGenerator = createAsyncGenerator;
7
-
8
7
  var _child_process = require("child_process");
9
-
10
8
  var _StaticLogger = require("../../../Commons/Logging/StaticLogger");
11
-
12
9
  var _IterableUtils = require("../../../../../Common/IterableUtils");
13
-
14
10
  var _GeneratorRequireUtils = require("./GeneratorRequireUtils");
15
-
16
11
  /* eslint-disable no-console */
12
+
17
13
  class GeneratorAsyncProxy {
18
14
  constructor(pathToGeneratorRootDir, purgeCache, useGeneratorRestarting, logger = (0, _StaticLogger.getLogger)()) {
19
15
  this.pathToGeneratorRootDir = void 0;
@@ -28,60 +24,45 @@ class GeneratorAsyncProxy {
28
24
  this.purgeCache = purgeCache;
29
25
  this.generatorSourcesImporter = new _GeneratorRequireUtils.GeneratorSourcesImporter(purgeCache);
30
26
  }
31
-
32
27
  async getLocalizedSugar(sugarFiles, resources) {
33
28
  const localizationEntryPoint = await this.generatorSourcesImporter.importLocalization(this.pathToGeneratorRootDir);
34
-
35
29
  if (localizationEntryPoint == undefined) {
36
30
  throw new Error("Данная версия генератора не поддерживает локализацию.");
37
31
  }
38
-
39
32
  return localizationEntryPoint.getLocalizedSugar(sugarFiles, resources);
40
33
  }
41
-
42
34
  async getDictionary(sugarFiles, resources) {
43
35
  const localizationEntryPoint = await this.generatorSourcesImporter.importLocalization(this.pathToGeneratorRootDir);
44
-
45
36
  if (localizationEntryPoint == undefined) {
46
37
  throw new Error("Данная версия генератора не поддерживает локализацию.");
47
38
  }
48
-
49
39
  return localizationEntryPoint.getDictionary(sugarFiles, resources);
50
40
  }
51
-
52
41
  async readSources(formSourcesPath, farmDirectory, hlFarmDirectoryPath) {
53
42
  const readSources = await this.generatorSourcesImporter.importReadSources(this.pathToGeneratorRootDir);
54
43
  const formSource = await readSources(formSourcesPath, farmDirectory, hlFarmDirectoryPath);
55
44
  return formSource;
56
45
  }
57
-
58
46
  async getAllDependencies(formSourcesPath, farmDirectory, hlFarmDirectoryPath) {
59
47
  const getAllDependencies = await this.generatorSourcesImporter.importGetAllDependencies(this.pathToGeneratorRootDir);
60
-
61
48
  if (getAllDependencies == undefined) {
62
49
  throw new Error("This version of generator does not support dependencies extraction");
63
50
  }
64
-
65
51
  const formSource = await getAllDependencies(formSourcesPath, farmDirectory, hlFarmDirectoryPath);
66
52
  return formSource;
67
53
  }
68
-
69
54
  async supportsDependenciesExtraction() {
70
55
  const getAllDependenciesHash = await this.generatorSourcesImporter.importGetAllDependenciesHash(this.pathToGeneratorRootDir);
71
56
  return getAllDependenciesHash != undefined;
72
57
  }
73
-
74
58
  async getAllDependenciesHash(formSourcesPath, farmDirectory, hlFarmDirectoryPath) {
75
59
  const getAllDependenciesHash = await this.generatorSourcesImporter.importGetAllDependenciesHash(this.pathToGeneratorRootDir);
76
-
77
60
  if (getAllDependenciesHash == undefined) {
78
61
  throw new Error("This version of generator does not support dependencies extraction");
79
62
  }
80
-
81
63
  const formSource = await getAllDependenciesHash(formSourcesPath, farmDirectory, hlFarmDirectoryPath);
82
64
  return formSource;
83
65
  }
84
-
85
66
  async readSourcesAndProcessSugar(formSourcesPath, farmDirectory, hlFarmDirectoryPath, generationOptions) {
86
67
  this.maxRequestNumber++;
87
68
  const currentRequestNumber = this.maxRequestNumber;
@@ -91,11 +72,9 @@ class GeneratorAsyncProxy {
91
72
  reject: reject
92
73
  });
93
74
  });
94
-
95
75
  if (!this.generatorProcess) {
96
76
  this.generatorProcess = this.forkReadSourcesAndProcessSugarWorker();
97
77
  }
98
-
99
78
  if (this.useGeneratorRestarting) {
100
79
  if (this.maxRequestNumber % 10 === 0) {
101
80
  console.log("Restarting generator");
@@ -105,13 +84,11 @@ class GeneratorAsyncProxy {
105
84
  console.log("Restarted generator");
106
85
  }
107
86
  }
108
-
109
87
  this.generatorProcess.send([this.pathToGeneratorRootDir, formSourcesPath, farmDirectory, hlFarmDirectoryPath, generationOptions, this.purgeCache, currentRequestNumber]);
110
88
  const result = await promise;
111
89
  this.processSugarDeferredMap.delete(currentRequestNumber);
112
90
  return result;
113
91
  }
114
-
115
92
  async processSugar(sugarFiles, resources, generationOptions) {
116
93
  this.maxRequestNumber++;
117
94
  const currentRequestNumber = this.maxRequestNumber;
@@ -121,38 +98,31 @@ class GeneratorAsyncProxy {
121
98
  reject: reject
122
99
  });
123
100
  });
124
-
125
101
  if (!this.generatorProcess) {
126
102
  this.generatorProcess = this.forkProcessSugarWorker();
127
103
  }
128
-
129
104
  this.generatorProcess.send([this.pathToGeneratorRootDir, sugarFiles, resources, generationOptions, this.purgeCache, currentRequestNumber]);
130
105
  const result = await promise;
131
106
  this.processSugarDeferredMap.delete(currentRequestNumber);
132
107
  return result;
133
108
  }
134
-
135
109
  forkProcessSugarWorker() {
136
110
  const processSugarWorker = (0, _child_process.fork)("./ProcessSugarWorker", [], {
137
111
  cwd: __dirname
138
112
  });
139
113
  processSugarWorker.on("message", response => {
140
114
  const currentDeferred = this.processSugarDeferredMap.get(response.requestNumber);
141
-
142
115
  if (currentDeferred == undefined) {
143
116
  return;
144
117
  }
145
-
146
118
  if (response.type === "Error") {
147
119
  currentDeferred.reject(new Error(response.errorText));
148
120
  } else {
149
121
  const formContent = response.generatedForm;
150
122
  const result = {};
151
-
152
123
  for (const [key, formContentItem] of (0, _IterableUtils.iterateEntries)(formContent)) {
153
124
  result[key] = typeof formContentItem === "string" ? formContentItem : Buffer.from(formContentItem.payload, formContentItem.encoding);
154
125
  }
155
-
156
126
  currentDeferred.resolve(result);
157
127
  }
158
128
  });
@@ -161,28 +131,23 @@ class GeneratorAsyncProxy {
161
131
  });
162
132
  return processSugarWorker;
163
133
  }
164
-
165
134
  forkReadSourcesAndProcessSugarWorker() {
166
135
  const processSugarWorker = (0, _child_process.fork)("./ReadSourcesAndProcessSugarWorker", [], {
167
136
  cwd: __dirname
168
137
  });
169
138
  processSugarWorker.on("message", response => {
170
139
  const currentDeferred = this.processSugarDeferredMap.get(response.requestNumber);
171
-
172
140
  if (currentDeferred == undefined) {
173
141
  return;
174
142
  }
175
-
176
143
  if (response.type === "Error") {
177
144
  currentDeferred.reject(new Error(response.errorText));
178
145
  } else {
179
146
  const formContent = response.generatedForm;
180
147
  const result = {};
181
-
182
148
  for (const [key, formContentItem] of (0, _IterableUtils.iterateEntries)(formContent)) {
183
149
  result[key] = typeof formContentItem === "string" ? formContentItem : Buffer.from(formContentItem.payload, formContentItem.encoding);
184
150
  }
185
-
186
151
  currentDeferred.resolve(result);
187
152
  }
188
153
  });
@@ -191,19 +156,14 @@ class GeneratorAsyncProxy {
191
156
  });
192
157
  return processSugarWorker;
193
158
  }
194
-
195
159
  }
196
-
197
160
  const generatorsCache = new Map();
198
-
199
161
  function createAsyncGenerator(pathToGeneratorRootDir, purgeCache, useGeneratorRestarting) {
200
162
  let result = generatorsCache.get(pathToGeneratorRootDir);
201
-
202
163
  if (result == undefined) {
203
164
  result = new GeneratorAsyncProxy(pathToGeneratorRootDir, purgeCache, useGeneratorRestarting);
204
165
  generatorsCache.set(pathToGeneratorRootDir, result);
205
166
  }
206
-
207
167
  return result;
208
168
  }
209
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL0dlbmVyYXRvci9HZW5lcmF0b3JXb3JrZXIvQ3JlYXRlQXN5bmNHZW5lcmF0b3IudHMiXSwibmFtZXMiOlsiR2VuZXJhdG9yQXN5bmNQcm94eSIsImNvbnN0cnVjdG9yIiwicGF0aFRvR2VuZXJhdG9yUm9vdERpciIsInB1cmdlQ2FjaGUiLCJ1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nIiwibG9nZ2VyIiwiZ2VuZXJhdG9yU291cmNlc0ltcG9ydGVyIiwiZ2VuZXJhdG9yUHJvY2VzcyIsIm1heFJlcXVlc3ROdW1iZXIiLCJwcm9jZXNzU3VnYXJEZWZlcnJlZE1hcCIsIk1hcCIsIkdlbmVyYXRvclNvdXJjZXNJbXBvcnRlciIsImdldExvY2FsaXplZFN1Z2FyIiwic3VnYXJGaWxlcyIsInJlc291cmNlcyIsImxvY2FsaXphdGlvbkVudHJ5UG9pbnQiLCJpbXBvcnRMb2NhbGl6YXRpb24iLCJ1bmRlZmluZWQiLCJFcnJvciIsImdldERpY3Rpb25hcnkiLCJyZWFkU291cmNlcyIsImZvcm1Tb3VyY2VzUGF0aCIsImZhcm1EaXJlY3RvcnkiLCJobEZhcm1EaXJlY3RvcnlQYXRoIiwiaW1wb3J0UmVhZFNvdXJjZXMiLCJmb3JtU291cmNlIiwiZ2V0QWxsRGVwZW5kZW5jaWVzIiwiaW1wb3J0R2V0QWxsRGVwZW5kZW5jaWVzIiwic3VwcG9ydHNEZXBlbmRlbmNpZXNFeHRyYWN0aW9uIiwiZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaCIsImltcG9ydEdldEFsbERlcGVuZGVuY2llc0hhc2giLCJyZWFkU291cmNlc0FuZFByb2Nlc3NTdWdhciIsImdlbmVyYXRpb25PcHRpb25zIiwiY3VycmVudFJlcXVlc3ROdW1iZXIiLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzZXQiLCJmb3JrUmVhZFNvdXJjZXNBbmRQcm9jZXNzU3VnYXJXb3JrZXIiLCJjb25zb2xlIiwibG9nIiwia2lsbCIsInNlbmQiLCJyZXN1bHQiLCJkZWxldGUiLCJwcm9jZXNzU3VnYXIiLCJmb3JrUHJvY2Vzc1N1Z2FyV29ya2VyIiwicHJvY2Vzc1N1Z2FyV29ya2VyIiwiY3dkIiwiX19kaXJuYW1lIiwib24iLCJyZXNwb25zZSIsImN1cnJlbnREZWZlcnJlZCIsImdldCIsInJlcXVlc3ROdW1iZXIiLCJ0eXBlIiwiZXJyb3JUZXh0IiwiZm9ybUNvbnRlbnQiLCJnZW5lcmF0ZWRGb3JtIiwia2V5IiwiZm9ybUNvbnRlbnRJdGVtIiwiQnVmZmVyIiwiZnJvbSIsInBheWxvYWQiLCJlbmNvZGluZyIsImVycm9yIiwiZ2VuZXJhdG9yc0NhY2hlIiwiY3JlYXRlQXN5bmNHZW5lcmF0b3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFHQTs7QUFRQTs7QUFFQTs7QUFkQTtBQXNCQSxNQUFNQSxtQkFBTixDQUFtRDtBQVN4Q0MsRUFBQUEsV0FBVyxDQUNkQyxzQkFEYyxFQUVkQyxVQUZjLEVBR2RDLHNCQUhjLEVBSWRDLE1BQWUsR0FBRyw4QkFKSixFQUtoQjtBQUFBLFNBYmVILHNCQWFmO0FBQUEsU0FaZUksd0JBWWY7QUFBQSxTQVhlSCxVQVdmO0FBQUEsU0FWZUMsc0JBVWY7QUFBQSxTQVRNRyxnQkFTTjtBQUFBLFNBUk1DLGdCQVFOLEdBUnlCLENBUXpCO0FBQUEsU0FQZUMsdUJBT2YsR0FQNEUsSUFBSUMsR0FBSixFQU81RTtBQUNFLFNBQUtOLHNCQUFMLEdBQThCQSxzQkFBOUI7QUFDQSxTQUFLRixzQkFBTCxHQUE4QkEsc0JBQTlCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQkEsVUFBbEI7QUFDQSxTQUFLRyx3QkFBTCxHQUFnQyxJQUFJSywrQ0FBSixDQUE2QlIsVUFBN0IsQ0FBaEM7QUFDSDs7QUFFNkIsUUFBakJTLGlCQUFpQixDQUFDQyxVQUFELEVBQTJCQyxTQUEzQixFQUE0RTtBQUN0RyxVQUFNQyxzQkFBc0IsR0FBRyxNQUFNLEtBQUtULHdCQUFMLENBQThCVSxrQkFBOUIsQ0FDakMsS0FBS2Qsc0JBRDRCLENB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QUFHLEVBQTlCOztBQUVBLGFBQUssTUFBTSxDQUFDZ0IsR0FBRCxFQUFNQyxlQUFOLENBQVgsSUFBcUMsbUNBQWVILFdBQWYsQ0FBckMsRUFBa0U7QUFDOURkLFVBQUFBLE1BQU0sQ0FBQ2dCLEdBQUQsQ0FBTixHQUNJLE9BQU9DLGVBQVAsS0FBMkIsUUFBM0IsR0FDTUEsZUFETixHQUVNQyxNQUFNLENBQUNDLElBQVAsQ0FBWUYsZUFBZSxDQUFDRyxPQUE1QixFQUFxQ0gsZUFBZSxDQUFDSSxRQUFyRCxDQUhWO0FBSUg7O0FBRURaLFFBQUFBLGVBQWUsQ0FBQ2pCLE9BQWhCLENBQXdCUSxNQUF4QjtBQUNIO0FBQ0osS0FwQkQ7QUFzQkFJLElBQUFBLGtCQUFrQixDQUFDRyxFQUFuQixDQUFzQixPQUF0QixFQUErQmUsS0FBSyxJQUFJO0FBQ3BDLFlBQU1BLEtBQU47QUFDSCxLQUZEO0FBSUEsV0FBT2xCLGtCQUFQO0FBQ0g7O0FBM084Qzs7QUE4T25ELE1BQU1tQixlQUFpRCxHQUFHLElBQUl6RCxHQUFKLEVBQTFEOztBQUVPLFNBQVMwRCxvQkFBVCxDQUNIbEUsc0JBREcsRUFFSEMsVUFGRyxFQUdIQyxzQkFIRyxFQUlVO0FBQ2IsTUFBSXdDLE1BQU0sR0FBR3VCLGVBQWUsQ0FBQ2IsR0FBaEIsQ0FBb0JwRCxzQkFBcEIsQ0FBYjs7QUFDQSxNQUFJMEMsTUFBTSxJQUFJM0IsU0FBZCxFQUF5QjtBQUNyQjJCLElBQUFBLE1BQU0sR0FBRyxJQUFJNUMsbUJBQUosQ0FBd0JFLHNCQUF4QixFQUFnREMsVUFBaEQsRUFBNERDLHNCQUE1RCxDQUFUO0FBQ0ErRCxJQUFBQSxlQUFlLENBQUM3QixHQUFoQixDQUFvQnBDLHNCQUFwQixFQUE0QzBDLE1BQTVDO0FBQ0g7O0FBQ0QsU0FBT0EsTUFBUDtBQUNIIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCBmb3JrIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcblxuaW1wb3J0IHsgSUxvZ2dlciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0xvZ2dpbmcvSUxvZ2dlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcbmltcG9ydCB7XG4gICAgRm9ybUdlbmVyYXRvcixcbiAgICBHZW5lcmF0ZWRGb3JtLFxuICAgIEdlbmVyYXRpb25PcHRpb25zLFxuICAgIExvY2FsaXphdGlvbkRpY3Rpb25hcnlDb250ZW50LFxufSBmcm9tIFwiLi4vLi4vRm9ybS9HZW5lcmF0ZUZvcm1cIjtcbmltcG9ydCB7IEZvcm1SZXNvdXJjZXMsIEZvcm1Tb3VyY2UsIFN1Z2FyQ29udGVudCB9IGZyb20gXCIuLi8uLi9SZWFkRm9ybVNvdXJjZVwiO1xuaW1wb3J0IHsgaXRlcmF0ZUVudHJpZXMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0l0ZXJhYmxlVXRpbHNcIjtcblxuaW1wb3J0IHsgR2VuZXJhdG9yU291cmNlc0ltcG9ydGVyIH0gZnJvbSBcIi4vR2VuZXJhdG9yUmVxdWlyZVV0aWxzXCI7XG5pbXBvcnQgeyBDYWxsUmVzcG9uc2UgfSBmcm9tIFwiLi9Qcm9jZXNzU3VnYXJXb3JrZXJcIjtcblxuaW50ZXJmYWNlIFByb2Nlc3NTdWdhckRlZmVycmVkIHtcbiAgICByZXNvbHZlOiAocmVzdWx0OiBHZW5lcmF0ZWRGb3JtKSA9PiB2b2lkO1xuICAgIHJlamVjdDogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkO1xufVxuXG5jbGFzcyBHZW5lcmF0b3JBc3luY1Byb3h5IGltcGxlbWVudHMgRm9ybUdlbmVyYXRvciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXRoVG9HZW5lcmF0b3JSb290RGlyOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBnZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXI6IEdlbmVyYXRvclNvdXJjZXNJbXBvcnRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHB1cmdlQ2FjaGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgZ2VuZXJhdG9yUHJvY2Vzcz86IENoaWxkUHJvY2VzcztcbiAgICBwcml2YXRlIG1heFJlcXVlc3ROdW1iZXIgPSAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc1N1Z2FyRGVmZXJyZWRNYXA6IE1hcDxudW1iZXIsIFByb2Nlc3NTdWdhckRlZmVycmVkPiA9IG5ldyBNYXAoKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGF0aFRvR2VuZXJhdG9yUm9vdERpcjogc3RyaW5nLFxuICAgICAgICBwdXJnZUNhY2hlOiBib29sZWFuLFxuICAgICAgICB1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nOiBib29sZWFuLFxuICAgICAgICBsb2dnZXI6IElMb2dnZXIgPSBnZXRMb2dnZXIoKVxuICAgICkge1xuICAgICAgICB0aGlzLnVzZUdlbmVyYXRvclJlc3RhcnRpbmcgPSB1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nO1xuICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXIgPSBwYXRoVG9HZW5lcmF0b3JSb290RGlyO1xuICAgICAgICB0aGlzLnB1cmdlQ2FjaGUgPSBwdXJnZUNhY2hlO1xuICAgICAgICB0aGlzLmdlbmVyYXRvclNvdXJjZXNJbXBvcnRlciA9IG5ldyBHZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXIocHVyZ2VDYWNoZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldExvY2FsaXplZFN1Z2FyKHN1Z2FyRmlsZXM6IFN1Z2FyQ29udGVudCwgcmVzb3VyY2VzOiBGb3JtUmVzb3VyY2VzKTogUHJvbWlzZTxTdWdhckNvbnRlbnQ+IHtcbiAgICAgICAgY29uc3QgbG9jYWxpemF0aW9uRW50cnlQb2ludCA9IGF3YWl0IHRoaXMuZ2VuZXJhdG9yU291cmNlc0ltcG9ydGVyLmltcG9ydExvY2FsaXphdGlvbihcbiAgICAgICAgICAgIHRoaXMucGF0aFRvR2VuZXJhdG9yUm9vdERpclxuICAgICAgICApO1xuICAgICAgICBpZiAobG9jYWxpemF0aW9uRW50cnlQb2ludCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcItCU0LDQvdC90LDRjyDQstC10YDRgdC40Y8g0LPQtdC90LXRgNCw0YLQvtGA0LAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LvQvtC60LDQu9C40LfQsNGG0LjRji5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsaXphdGlvbkVudHJ5UG9pbnQuZ2V0TG9jYWxpemVkU3VnYXIoc3VnYXJGaWxlcywgcmVzb3VyY2VzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RGljdGlvbmFyeShcbiAgICAgICAgc3VnYXJGaWxlczogU3VnYXJDb250ZW50LFxuICAgICAgICByZXNvdXJjZXM6IEZvcm1SZXNvdXJjZXNcbiAgICApOiBQcm9taXNlPExvY2FsaXphdGlvbkRpY3Rpb25hcnlDb250ZW50PiB7XG4gICAgICAgIGNvbnN0IGxvY2FsaXphdGlvbkVudHJ5UG9pbnQgPSBhd2FpdCB0aGlzLmdlbmVyYXRvclNvdXJjZXNJbXBvcnRlci5pbXBvcnRMb2NhbGl6YXRpb24oXG4gICAgICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGxvY2FsaXphdGlvbkVudHJ5UG9pbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLQlNCw0L3QvdCw0Y8g0LLQtdGA0YHQuNGPINCz0LXQvdC10YDQsNGC0L7RgNCwINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC70L7QutCw0LvQuNC30LDRhtC40Y4uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGl6YXRpb25FbnRyeVBvaW50LmdldERpY3Rpb25hcnkoc3VnYXJGaWxlcywgcmVzb3VyY2VzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVhZFNvdXJjZXMoXG4gICAgICAgIGZvcm1Tb3VyY2VzUGF0aDogc3RyaW5nLFxuICAgICAgICBmYXJtRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZ1xuICAgICk6IFByb21pc2U8Rm9ybVNvdXJjZT4ge1xuICAgICAgICBjb25zdCByZWFkU291cmNlczogRm9ybUdlbmVyYXRvcltcInJlYWRTb3VyY2VzXCJdID0gYXdhaXQgdGhpcy5nZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXIuaW1wb3J0UmVhZFNvdXJjZXMoXG4gICAgICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZm9ybVNvdXJjZSA9IGF3YWl0IHJlYWRTb3VyY2VzKGZvcm1Tb3VyY2VzUGF0aCwgZmFybURpcmVjdG9yeSwgaGxGYXJtRGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1Tb3VyY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbERlcGVuZGVuY2llcyhcbiAgICAgICAgZm9ybVNvdXJjZXNQYXRoOiBzdHJpbmcsXG4gICAgICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCBnZXRBbGxEZXBlbmRlbmNpZXMgPSBhd2FpdCB0aGlzLmdlbmVyYXRvclNvdXJjZXNJbXBvcnRlci5pbXBvcnRHZXRBbGxEZXBlbmRlbmNpZXMoXG4gICAgICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGdldEFsbERlcGVuZGVuY2llcyA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgdmVyc2lvbiBvZiBnZW5lcmF0b3IgZG9lcyBub3Qgc3VwcG9ydCBkZXBlbmRlbmNpZXMgZXh0cmFjdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtU291cmNlID0gYXdhaXQgZ2V0QWxsRGVwZW5kZW5jaWVzKGZvcm1Tb3VyY2VzUGF0aCwgZmFybURpcmVjdG9yeSwgaGxGYXJtRGlyZWN0b3J5UGF0aCk7XG4gICAgICAgIHJldHVybiBmb3JtU291cmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzdXBwb3J0c0RlcGVuZGVuY2llc0V4dHJhY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IGdldEFsbERlcGVuZGVuY2llc0hhc2ggPSBhd2FpdCB0aGlzLmdlbmVyYXRvclNvdXJjZXNJbXBvcnRlci5pbXBvcnRHZXRBbGxEZXBlbmRlbmNpZXNIYXNoKFxuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBnZXRBbGxEZXBlbmRlbmNpZXNIYXNoICE9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaChcbiAgICAgICAgZm9ybVNvdXJjZXNQYXRoOiBzdHJpbmcsXG4gICAgICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaCA9IGF3YWl0IHRoaXMuZ2VuZXJhdG9yU291cmNlc0ltcG9ydGVyLmltcG9ydEdldEFsbERlcGVuZGVuY2llc0hhc2goXG4gICAgICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGdldEFsbERlcGVuZGVuY2llc0hhc2ggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHZlcnNpb24gb2YgZ2VuZXJhdG9yIGRvZXMgbm90IHN1cHBvcnQgZGVwZW5kZW5jaWVzIGV4dHJhY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybVNvdXJjZSA9IGF3YWl0IGdldEFsbERlcGVuZGVuY2llc0hhc2goZm9ybVNvdXJjZXNQYXRoLCBmYXJtRGlyZWN0b3J5LCBobEZhcm1EaXJlY3RvcnlQYXRoKTtcbiAgICAgICAgcmV0dXJuIGZvcm1Tb3VyY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlYWRTb3VyY2VzQW5kUHJvY2Vzc1N1Z2FyKFxuICAgICAgICBmb3JtU291cmNlc1BhdGg6IHN0cmluZyxcbiAgICAgICAgZmFybURpcmVjdG9yeTogc3RyaW5nLFxuICAgICAgICBobEZhcm1EaXJlY3RvcnlQYXRoOiBzdHJpbmcsXG4gICAgICAgIGdlbmVyYXRpb25PcHRpb25zPzogR2VuZXJhdGlvbk9wdGlvbnNcbiAgICApOiBQcm9taXNlPEdlbmVyYXRlZEZvcm0+IHtcbiAgICAgICAgdGhpcy5tYXhSZXF1ZXN0TnVtYmVyKys7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZXF1ZXN0TnVtYmVyID0gdGhpcy5tYXhSZXF1ZXN0TnVtYmVyO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8R2VuZXJhdGVkRm9ybT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3VnYXJEZWZlcnJlZE1hcC5zZXQoY3VycmVudFJlcXVlc3ROdW1iZXIsIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgIHJlamVjdDogcmVqZWN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0b3JQcm9jZXNzKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRvclByb2Nlc3MgPSB0aGlzLmZvcmtSZWFkU291cmNlc0FuZFByb2Nlc3NTdWdhcldvcmtlcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVzZUdlbmVyYXRvclJlc3RhcnRpbmcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1heFJlcXVlc3ROdW1iZXIgJSAxMCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUmVzdGFydGluZyBnZW5lcmF0b3JcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3JQcm9jZXNzLmtpbGwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRvclByb2Nlc3MgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3JQcm9jZXNzID0gdGhpcy5mb3JrUmVhZFNvdXJjZXNBbmRQcm9jZXNzU3VnYXJXb3JrZXIoKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlc3RhcnRlZCBnZW5lcmF0b3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdlbmVyYXRvclByb2Nlc3Muc2VuZChbXG4gICAgICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXIsXG4gICAgICAgICAgICBmb3JtU291cmNlc1BhdGgsXG4gICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgIGdlbmVyYXRpb25PcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5wdXJnZUNhY2hlLFxuICAgICAgICAgICAgY3VycmVudFJlcXVlc3ROdW1iZXIsXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N1Z2FyRGVmZXJyZWRNYXAuZGVsZXRlKGN1cnJlbnRSZXF1ZXN0TnVtYmVyKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcHJvY2Vzc1N1Z2FyKFxuICAgICAgICBzdWdhckZpbGVzOiBTdWdhckNvbnRlbnQsXG4gICAgICAgIHJlc291cmNlczogRm9ybVJlc291cmNlcyxcbiAgICAgICAgZ2VuZXJhdGlvbk9wdGlvbnM/OiBHZW5lcmF0aW9uT3B0aW9uc1xuICAgICk6IFByb21pc2U8R2VuZXJhdGVkRm9ybT4ge1xuICAgICAgICB0aGlzLm1heFJlcXVlc3ROdW1iZXIrKztcbiAgICAgICAgY29uc3QgY3VycmVudFJlcXVlc3ROdW1iZXIgPSB0aGlzLm1heFJlcXVlc3ROdW1iZXI7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxHZW5lcmF0ZWRGb3JtPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdWdhckRlZmVycmVkTWFwLnNldChjdXJyZW50UmVxdWVzdE51bWJlciwge1xuICAgICAgICAgICAgICAgIHJlc29sdmU6IHJlc29sdmUsXG4gICAgICAgICAgICAgICAgcmVqZWN0OiByZWplY3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmdlbmVyYXRvclByb2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yUHJvY2VzcyA9IHRoaXMuZm9ya1Byb2Nlc3NTdWdhcldvcmtlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0b3JQcm9jZXNzLnNlbmQoW1xuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyLFxuICAgICAgICAgICAgc3VnYXJGaWxlcyxcbiAgICAgICAgICAgIHJlc291cmNlcyxcbiAgICAgICAgICAgIGdlbmVyYXRpb25PcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5wdXJnZUNhY2hlLFxuICAgICAgICAgICAgY3VycmVudFJlcXVlc3ROdW1iZXIsXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N1Z2FyRGVmZXJyZWRNYXAuZGVsZXRlKGN1cnJlbnRSZXF1ZXN0TnVtYmVyKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcmtQcm9jZXNzU3VnYXJXb3JrZXIoKTogQ2hpbGRQcm9jZXNzIHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc1N1Z2FyV29ya2VyID0gZm9yayhcIi4vUHJvY2Vzc1N1Z2FyV29ya2VyXCIsIFtdLCB7XG4gICAgICAgICAgICBjd2Q6IF9fZGlybmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvY2Vzc1N1Z2FyV29ya2VyLm9uKFwibWVzc2FnZVwiLCAocmVzcG9uc2U6IENhbGxSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERlZmVycmVkID0gdGhpcy5wcm9jZXNzU3VnYXJEZWZlcnJlZE1hcC5nZXQocmVzcG9uc2UucmVxdWVzdE51bWJlcik7XG4gICAgICAgICAgICBpZiAoY3VycmVudERlZmVycmVkID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSBcIkVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGVmZXJyZWQucmVqZWN0KG5ldyBFcnJvcihyZXNwb25zZS5lcnJvclRleHQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRlbnQgPSByZXNwb25zZS5nZW5lcmF0ZWRGb3JtO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogR2VuZXJhdGVkRm9ybSA9IHt9O1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBmb3JtQ29udGVudEl0ZW1dIG9mIGl0ZXJhdGVFbnRyaWVzKGZvcm1Db250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZm9ybUNvbnRlbnRJdGVtID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtQ29udGVudEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEJ1ZmZlci5mcm9tKGZvcm1Db250ZW50SXRlbS5wYXlsb2FkLCBmb3JtQ29udGVudEl0ZW0uZW5jb2RpbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnREZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb2Nlc3NTdWdhcldvcmtlci5vbihcImVycm9yXCIsIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcHJvY2Vzc1N1Z2FyV29ya2VyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ya1JlYWRTb3VyY2VzQW5kUHJvY2Vzc1N1Z2FyV29ya2VyKCk6IENoaWxkUHJvY2VzcyB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NTdWdhcldvcmtlciA9IGZvcmsoXCIuL1JlYWRTb3VyY2VzQW5kUHJvY2Vzc1N1Z2FyV29ya2VyXCIsIFtdLCB7XG4gICAgICAgICAgICBjd2Q6IF9fZGlybmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvY2Vzc1N1Z2FyV29ya2VyLm9uKFwibWVzc2FnZVwiLCAocmVzcG9uc2U6IENhbGxSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERlZmVycmVkID0gdGhpcy5wcm9jZXNzU3VnYXJEZWZlcnJlZE1hcC5nZXQocmVzcG9uc2UucmVxdWVzdE51bWJlcik7XG4gICAgICAgICAgICBpZiAoY3VycmVudERlZmVycmVkID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSBcIkVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGVmZXJyZWQucmVqZWN0KG5ldyBFcnJvcihyZXNwb25zZS5lcnJvclRleHQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRlbnQgPSByZXNwb25zZS5nZW5lcmF0ZWRGb3JtO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogR2VuZXJhdGVkRm9ybSA9IHt9O1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBmb3JtQ29udGVudEl0ZW1dIG9mIGl0ZXJhdGVFbnRyaWVzKGZvcm1Db250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZm9ybUNvbnRlbnRJdGVtID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtQ29udGVudEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEJ1ZmZlci5mcm9tKGZvcm1Db250ZW50SXRlbS5wYXlsb2FkLCBmb3JtQ29udGVudEl0ZW0uZW5jb2RpbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnREZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb2Nlc3NTdWdhcldvcmtlci5vbihcImVycm9yXCIsIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcHJvY2Vzc1N1Z2FyV29ya2VyO1xuICAgIH1cbn1cblxuY29uc3QgZ2VuZXJhdG9yc0NhY2hlOiBNYXA8c3RyaW5nLCBHZW5lcmF0b3JBc3luY1Byb3h5PiA9IG5ldyBNYXAoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFzeW5jR2VuZXJhdG9yKFxuICAgIHBhdGhUb0dlbmVyYXRvclJvb3REaXI6IHN0cmluZyxcbiAgICBwdXJnZUNhY2hlOiBib29sZWFuLFxuICAgIHVzZUdlbmVyYXRvclJlc3RhcnRpbmc6IGJvb2xlYW5cbik6IEZvcm1HZW5lcmF0b3Ige1xuICAgIGxldCByZXN1bHQgPSBnZW5lcmF0b3JzQ2FjaGUuZ2V0KHBhdGhUb0dlbmVyYXRvclJvb3REaXIpO1xuICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IG5ldyBHZW5lcmF0b3JBc3luY1Byb3h5KHBhdGhUb0dlbmVyYXRvclJvb3REaXIsIHB1cmdlQ2FjaGUsIHVzZUdlbmVyYXRvclJlc3RhcnRpbmcpO1xuICAgICAgICBnZW5lcmF0b3JzQ2FjaGUuc2V0KHBhdGhUb0dlbmVyYXRvclJvb3REaXIsIHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
169
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hpbGRfcHJvY2VzcyIsInJlcXVpcmUiLCJfU3RhdGljTG9nZ2VyIiwiX0l0ZXJhYmxlVXRpbHMiLCJfR2VuZXJhdG9yUmVxdWlyZVV0aWxzIiwiR2VuZXJhdG9yQXN5bmNQcm94eSIsImNvbnN0cnVjdG9yIiwicGF0aFRvR2VuZXJhdG9yUm9vdERpciIsInB1cmdlQ2FjaGUiLCJ1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiZ2VuZXJhdG9yU291cmNlc0ltcG9ydGVyIiwiZ2VuZXJhdG9yUHJvY2VzcyIsIm1heFJlcXVlc3ROdW1iZXIiLCJwcm9jZXNzU3VnYXJEZWZlcnJlZE1hcCIsIk1hcCIsIkdlbmVyYXRvclNvdXJjZXNJbXBvcnRlciIsImdldExvY2FsaXplZFN1Z2FyIiwic3VnYXJGaWxlcyIsInJlc291cmNlcyIsImxvY2FsaXphdGlvbkVudHJ5UG9pbnQiLCJpbXBvcnRMb2NhbGl6YXRpb24iLCJ1bmRlZmluZWQiLCJFcnJvciIsImdldERpY3Rpb25hcnkiLCJyZWFkU291cmNlcyIsImZvcm1Tb3VyY2VzUGF0aCIsImZhcm1EaXJlY3RvcnkiLCJobEZhcm1EaXJlY3RvcnlQYXRoIiwiaW1wb3J0UmVhZFNvdXJjZXMiLCJmb3JtU291cmNlIiwiZ2V0QWxsRGVwZW5kZW5jaWVzIiwiaW1wb3J0R2V0QWxsRGVwZW5kZW5jaWVzIiwic3VwcG9ydHNEZXBlbmRlbmNpZXNFeHRyYWN0aW9uIiwiZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaCIsImltcG9ydEdldEFsbERlcGVuZGVuY2llc0hhc2giLCJyZWFkU291cmNlc0FuZFByb2Nlc3NTdWdhciIsImdlbmVyYXRpb25PcHRpb25zIiwiY3VycmVudFJlcXVlc3ROdW1iZXIiLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzZXQiLCJmb3JrUmVhZFNvdXJjZXNBbmRQcm9jZXNzU3VnYXJXb3JrZXIiLCJjb25zb2xlIiwibG9nIiwia2lsbCIsInNlbmQiLCJyZXN1bHQiLCJkZWxldGUiLCJwcm9jZXNzU3VnYXIiLCJmb3JrUHJvY2Vzc1N1Z2FyV29ya2VyIiwicHJvY2Vzc1N1Z2FyV29ya2VyIiwiZm9yayIsImN3ZCIsIl9fZGlybmFtZSIsIm9uIiwicmVzcG9uc2UiLCJjdXJyZW50RGVmZXJyZWQiLCJnZXQiLCJyZXF1ZXN0TnVtYmVyIiwidHlwZSIsImVycm9yVGV4dCIsImZvcm1Db250ZW50IiwiZ2VuZXJhdGVkRm9ybSIsImtleSIsImZvcm1Db250ZW50SXRlbSIsIml0ZXJhdGVFbnRyaWVzIiwiQnVmZmVyIiwiZnJvbSIsInBheWxvYWQiLCJlbmNvZGluZyIsImVycm9yIiwiZ2VuZXJhdG9yc0NhY2hlIiwiY3JlYXRlQXN5bmNHZW5lcmF0b3IiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvQnVpbGRUYXNrcy9HZW5lcmF0b3IvR2VuZXJhdG9yV29ya2VyL0NyZWF0ZUFzeW5jR2VuZXJhdG9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB7IENoaWxkUHJvY2VzcywgZm9yayB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5cbmltcG9ydCB7IElMb2dnZXIgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9Mb2dnaW5nL0lMb2dnZXJcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0xvZ2dpbmcvU3RhdGljTG9nZ2VyXCI7XG5pbXBvcnQge1xuICAgIEZvcm1HZW5lcmF0b3IsXG4gICAgR2VuZXJhdGVkRm9ybSxcbiAgICBHZW5lcmF0aW9uT3B0aW9ucyxcbiAgICBMb2NhbGl6YXRpb25EaWN0aW9uYXJ5Q29udGVudCxcbn0gZnJvbSBcIi4uLy4uL0Zvcm0vR2VuZXJhdGVGb3JtXCI7XG5pbXBvcnQgeyBGb3JtUmVzb3VyY2VzLCBGb3JtU291cmNlLCBTdWdhckNvbnRlbnQgfSBmcm9tIFwiLi4vLi4vUmVhZEZvcm1Tb3VyY2VcIjtcbmltcG9ydCB7IGl0ZXJhdGVFbnRyaWVzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9JdGVyYWJsZVV0aWxzXCI7XG5cbmltcG9ydCB7IEdlbmVyYXRvclNvdXJjZXNJbXBvcnRlciB9IGZyb20gXCIuL0dlbmVyYXRvclJlcXVpcmVVdGlsc1wiO1xuaW1wb3J0IHsgQ2FsbFJlc3BvbnNlIH0gZnJvbSBcIi4vUHJvY2Vzc1N1Z2FyV29ya2VyXCI7XG5cbmludGVyZmFjZSBQcm9jZXNzU3VnYXJEZWZlcnJlZCB7XG4gICAgcmVzb2x2ZTogKHJlc3VsdDogR2VuZXJhdGVkRm9ybSkgPT4gdm9pZDtcbiAgICByZWplY3Q6IChlcnJvcjogdW5rbm93bikgPT4gdm9pZDtcbn1cblxuY2xhc3MgR2VuZXJhdG9yQXN5bmNQcm94eSBpbXBsZW1lbnRzIEZvcm1HZW5lcmF0b3Ige1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGF0aFRvR2VuZXJhdG9yUm9vdERpcjogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2VuZXJhdG9yU291cmNlc0ltcG9ydGVyOiBHZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwdXJnZUNhY2hlOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlR2VuZXJhdG9yUmVzdGFydGluZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIGdlbmVyYXRvclByb2Nlc3M/OiBDaGlsZFByb2Nlc3M7XG4gICAgcHJpdmF0ZSBtYXhSZXF1ZXN0TnVtYmVyID0gMDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NTdWdhckRlZmVycmVkTWFwOiBNYXA8bnVtYmVyLCBQcm9jZXNzU3VnYXJEZWZlcnJlZD4gPSBuZXcgTWFwKCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHBhdGhUb0dlbmVyYXRvclJvb3REaXI6IHN0cmluZyxcbiAgICAgICAgcHVyZ2VDYWNoZTogYm9vbGVhbixcbiAgICAgICAgdXNlR2VuZXJhdG9yUmVzdGFydGluZzogYm9vbGVhbixcbiAgICAgICAgbG9nZ2VyOiBJTG9nZ2VyID0gZ2V0TG9nZ2VyKClcbiAgICApIHtcbiAgICAgICAgdGhpcy51c2VHZW5lcmF0b3JSZXN0YXJ0aW5nID0gdXNlR2VuZXJhdG9yUmVzdGFydGluZztcbiAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyID0gcGF0aFRvR2VuZXJhdG9yUm9vdERpcjtcbiAgICAgICAgdGhpcy5wdXJnZUNhY2hlID0gcHVyZ2VDYWNoZTtcbiAgICAgICAgdGhpcy5nZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXIgPSBuZXcgR2VuZXJhdG9yU291cmNlc0ltcG9ydGVyKHB1cmdlQ2FjaGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRMb2NhbGl6ZWRTdWdhcihzdWdhckZpbGVzOiBTdWdhckNvbnRlbnQsIHJlc291cmNlczogRm9ybVJlc291cmNlcyk6IFByb21pc2U8U3VnYXJDb250ZW50PiB7XG4gICAgICAgIGNvbnN0IGxvY2FsaXphdGlvbkVudHJ5UG9pbnQgPSBhd2FpdCB0aGlzLmdlbmVyYXRvclNvdXJjZXNJbXBvcnRlci5pbXBvcnRMb2NhbGl6YXRpb24oXG4gICAgICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGxvY2FsaXphdGlvbkVudHJ5UG9pbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLQlNCw0L3QvdCw0Y8g0LLQtdGA0YHQuNGPINCz0LXQvdC10YDQsNGC0L7RgNCwINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC70L7QutCw0LvQuNC30LDRhtC40Y4uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGl6YXRpb25FbnRyeVBvaW50LmdldExvY2FsaXplZFN1Z2FyKHN1Z2FyRmlsZXMsIHJlc291cmNlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldERpY3Rpb25hcnkoXG4gICAgICAgIHN1Z2FyRmlsZXM6IFN1Z2FyQ29udGVudCxcbiAgICAgICAgcmVzb3VyY2VzOiBGb3JtUmVzb3VyY2VzXG4gICAgKTogUHJvbWlzZTxMb2NhbGl6YXRpb25EaWN0aW9uYXJ5Q29udGVudD4ge1xuICAgICAgICBjb25zdCBsb2NhbGl6YXRpb25FbnRyeVBvaW50ID0gYXdhaXQgdGhpcy5nZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXIuaW1wb3J0TG9jYWxpemF0aW9uKFxuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChsb2NhbGl6YXRpb25FbnRyeVBvaW50ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi0JTQsNC90L3QsNGPINCy0LXRgNGB0LjRjyDQs9C10L3QtdGA0LDRgtC+0YDQsCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQu9C+0LrQsNC70LjQt9Cw0YbQuNGOLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxpemF0aW9uRW50cnlQb2ludC5nZXREaWN0aW9uYXJ5KHN1Z2FyRmlsZXMsIHJlc291cmNlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlYWRTb3VyY2VzKFxuICAgICAgICBmb3JtU291cmNlc1BhdGg6IHN0cmluZyxcbiAgICAgICAgZmFybURpcmVjdG9yeTogc3RyaW5nLFxuICAgICAgICBobEZhcm1EaXJlY3RvcnlQYXRoOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPEZvcm1Tb3VyY2U+IHtcbiAgICAgICAgY29uc3QgcmVhZFNvdXJjZXM6IEZvcm1HZW5lcmF0b3JbXCJyZWFkU291cmNlc1wiXSA9IGF3YWl0IHRoaXMuZ2VuZXJhdG9yU291cmNlc0ltcG9ydGVyLmltcG9ydFJlYWRTb3VyY2VzKFxuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZvcm1Tb3VyY2UgPSBhd2FpdCByZWFkU291cmNlcyhmb3JtU291cmNlc1BhdGgsIGZhcm1EaXJlY3RvcnksIGhsRmFybURpcmVjdG9yeVBhdGgpO1xuXG4gICAgICAgIHJldHVybiBmb3JtU291cmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxEZXBlbmRlbmNpZXMoXG4gICAgICAgIGZvcm1Tb3VyY2VzUGF0aDogc3RyaW5nLFxuICAgICAgICBmYXJtRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZ1xuICAgICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgZ2V0QWxsRGVwZW5kZW5jaWVzID0gYXdhaXQgdGhpcy5nZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXIuaW1wb3J0R2V0QWxsRGVwZW5kZW5jaWVzKFxuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChnZXRBbGxEZXBlbmRlbmNpZXMgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHZlcnNpb24gb2YgZ2VuZXJhdG9yIGRvZXMgbm90IHN1cHBvcnQgZGVwZW5kZW5jaWVzIGV4dHJhY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybVNvdXJjZSA9IGF3YWl0IGdldEFsbERlcGVuZGVuY2llcyhmb3JtU291cmNlc1BhdGgsIGZhcm1EaXJlY3RvcnksIGhsRmFybURpcmVjdG9yeVBhdGgpO1xuICAgICAgICByZXR1cm4gZm9ybVNvdXJjZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc3VwcG9ydHNEZXBlbmRlbmNpZXNFeHRyYWN0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBnZXRBbGxEZXBlbmRlbmNpZXNIYXNoID0gYXdhaXQgdGhpcy5nZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXIuaW1wb3J0R2V0QWxsRGVwZW5kZW5jaWVzSGFzaChcbiAgICAgICAgICAgIHRoaXMucGF0aFRvR2VuZXJhdG9yUm9vdERpclxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaCAhPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbERlcGVuZGVuY2llc0hhc2goXG4gICAgICAgIGZvcm1Tb3VyY2VzUGF0aDogc3RyaW5nLFxuICAgICAgICBmYXJtRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZ1xuICAgICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGdldEFsbERlcGVuZGVuY2llc0hhc2ggPSBhd2FpdCB0aGlzLmdlbmVyYXRvclNvdXJjZXNJbXBvcnRlci5pbXBvcnRHZXRBbGxEZXBlbmRlbmNpZXNIYXNoKFxuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChnZXRBbGxEZXBlbmRlbmNpZXNIYXNoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyB2ZXJzaW9uIG9mIGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwb3J0IGRlcGVuZGVuY2llcyBleHRyYWN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvcm1Tb3VyY2UgPSBhd2FpdCBnZXRBbGxEZXBlbmRlbmNpZXNIYXNoKGZvcm1Tb3VyY2VzUGF0aCwgZmFybURpcmVjdG9yeSwgaGxGYXJtRGlyZWN0b3J5UGF0aCk7XG4gICAgICAgIHJldHVybiBmb3JtU291cmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWFkU291cmNlc0FuZFByb2Nlc3NTdWdhcihcbiAgICAgICAgZm9ybVNvdXJjZXNQYXRoOiBzdHJpbmcsXG4gICAgICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nLFxuICAgICAgICBnZW5lcmF0aW9uT3B0aW9ucz86IEdlbmVyYXRpb25PcHRpb25zXG4gICAgKTogUHJvbWlzZTxHZW5lcmF0ZWRGb3JtPiB7XG4gICAgICAgIHRoaXMubWF4UmVxdWVzdE51bWJlcisrO1xuICAgICAgICBjb25zdCBjdXJyZW50UmVxdWVzdE51bWJlciA9IHRoaXMubWF4UmVxdWVzdE51bWJlcjtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPEdlbmVyYXRlZEZvcm0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Z2FyRGVmZXJyZWRNYXAuc2V0KGN1cnJlbnRSZXF1ZXN0TnVtYmVyLCB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICByZWplY3Q6IHJlamVjdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuZ2VuZXJhdG9yUHJvY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3JQcm9jZXNzID0gdGhpcy5mb3JrUmVhZFNvdXJjZXNBbmRQcm9jZXNzU3VnYXJXb3JrZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51c2VHZW5lcmF0b3JSZXN0YXJ0aW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhSZXF1ZXN0TnVtYmVyICUgMTAgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlc3RhcnRpbmcgZ2VuZXJhdG9yXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yUHJvY2Vzcy5raWxsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3JQcm9jZXNzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yUHJvY2VzcyA9IHRoaXMuZm9ya1JlYWRTb3VyY2VzQW5kUHJvY2Vzc1N1Z2FyV29ya2VyKCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZXN0YXJ0ZWQgZ2VuZXJhdG9yXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0b3JQcm9jZXNzLnNlbmQoW1xuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyLFxuICAgICAgICAgICAgZm9ybVNvdXJjZXNQYXRoLFxuICAgICAgICAgICAgZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGgsXG4gICAgICAgICAgICBnZW5lcmF0aW9uT3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMucHVyZ2VDYWNoZSxcbiAgICAgICAgICAgIGN1cnJlbnRSZXF1ZXN0TnVtYmVyLFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuICAgICAgICB0aGlzLnByb2Nlc3NTdWdhckRlZmVycmVkTWFwLmRlbGV0ZShjdXJyZW50UmVxdWVzdE51bWJlcik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHByb2Nlc3NTdWdhcihcbiAgICAgICAgc3VnYXJGaWxlczogU3VnYXJDb250ZW50LFxuICAgICAgICByZXNvdXJjZXM6IEZvcm1SZXNvdXJjZXMsXG4gICAgICAgIGdlbmVyYXRpb25PcHRpb25zPzogR2VuZXJhdGlvbk9wdGlvbnNcbiAgICApOiBQcm9taXNlPEdlbmVyYXRlZEZvcm0+IHtcbiAgICAgICAgdGhpcy5tYXhSZXF1ZXN0TnVtYmVyKys7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZXF1ZXN0TnVtYmVyID0gdGhpcy5tYXhSZXF1ZXN0TnVtYmVyO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8R2VuZXJhdGVkRm9ybT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3VnYXJEZWZlcnJlZE1hcC5zZXQoY3VycmVudFJlcXVlc3ROdW1iZXIsIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgIHJlamVjdDogcmVqZWN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0b3JQcm9jZXNzKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRvclByb2Nlc3MgPSB0aGlzLmZvcmtQcm9jZXNzU3VnYXJXb3JrZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2VuZXJhdG9yUHJvY2Vzcy5zZW5kKFtcbiAgICAgICAgICAgIHRoaXMucGF0aFRvR2VuZXJhdG9yUm9vdERpcixcbiAgICAgICAgICAgIHN1Z2FyRmlsZXMsXG4gICAgICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgICAgICBnZW5lcmF0aW9uT3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMucHVyZ2VDYWNoZSxcbiAgICAgICAgICAgIGN1cnJlbnRSZXF1ZXN0TnVtYmVyLFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuICAgICAgICB0aGlzLnByb2Nlc3NTdWdhckRlZmVycmVkTWFwLmRlbGV0ZShjdXJyZW50UmVxdWVzdE51bWJlcik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JrUHJvY2Vzc1N1Z2FyV29ya2VyKCk6IENoaWxkUHJvY2VzcyB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NTdWdhcldvcmtlciA9IGZvcmsoXCIuL1Byb2Nlc3NTdWdhcldvcmtlclwiLCBbXSwge1xuICAgICAgICAgICAgY3dkOiBfX2Rpcm5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb2Nlc3NTdWdhcldvcmtlci5vbihcIm1lc3NhZ2VcIiwgKHJlc3BvbnNlOiBDYWxsUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZWZlcnJlZCA9IHRoaXMucHJvY2Vzc1N1Z2FyRGVmZXJyZWRNYXAuZ2V0KHJlc3BvbnNlLnJlcXVlc3ROdW1iZXIpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnREZWZlcnJlZCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gXCJFcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudERlZmVycmVkLnJlamVjdChuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3JUZXh0KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1Db250ZW50ID0gcmVzcG9uc2UuZ2VuZXJhdGVkRm9ybTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IEdlbmVyYXRlZEZvcm0gPSB7fTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgZm9ybUNvbnRlbnRJdGVtXSBvZiBpdGVyYXRlRW50cmllcyhmb3JtQ29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGZvcm1Db250ZW50SXRlbSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUNvbnRlbnRJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBCdWZmZXIuZnJvbShmb3JtQ29udGVudEl0ZW0ucGF5bG9hZCwgZm9ybUNvbnRlbnRJdGVtLmVuY29kaW5nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50RGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBwcm9jZXNzU3VnYXJXb3JrZXIub24oXCJlcnJvclwiLCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHByb2Nlc3NTdWdhcldvcmtlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcmtSZWFkU291cmNlc0FuZFByb2Nlc3NTdWdhcldvcmtlcigpOiBDaGlsZFByb2Nlc3Mge1xuICAgICAgICBjb25zdCBwcm9jZXNzU3VnYXJXb3JrZXIgPSBmb3JrKFwiLi9SZWFkU291cmNlc0FuZFByb2Nlc3NTdWdhcldvcmtlclwiLCBbXSwge1xuICAgICAgICAgICAgY3dkOiBfX2Rpcm5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb2Nlc3NTdWdhcldvcmtlci5vbihcIm1lc3NhZ2VcIiwgKHJlc3BvbnNlOiBDYWxsUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZWZlcnJlZCA9IHRoaXMucHJvY2Vzc1N1Z2FyRGVmZXJyZWRNYXAuZ2V0KHJlc3BvbnNlLnJlcXVlc3ROdW1iZXIpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnREZWZlcnJlZCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gXCJFcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudERlZmVycmVkLnJlamVjdChuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3JUZXh0KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1Db250ZW50ID0gcmVzcG9uc2UuZ2VuZXJhdGVkRm9ybTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IEdlbmVyYXRlZEZvcm0gPSB7fTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgZm9ybUNvbnRlbnRJdGVtXSBvZiBpdGVyYXRlRW50cmllcyhmb3JtQ29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGZvcm1Db250ZW50SXRlbSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUNvbnRlbnRJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBCdWZmZXIuZnJvbShmb3JtQ29udGVudEl0ZW0ucGF5bG9hZCwgZm9ybUNvbnRlbnRJdGVtLmVuY29kaW5nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50RGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBwcm9jZXNzU3VnYXJXb3JrZXIub24oXCJlcnJvclwiLCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHByb2Nlc3NTdWdhcldvcmtlcjtcbiAgICB9XG59XG5cbmNvbnN0IGdlbmVyYXRvcnNDYWNoZTogTWFwPHN0cmluZywgR2VuZXJhdG9yQXN5bmNQcm94eT4gPSBuZXcgTWFwKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBc3luY0dlbmVyYXRvcihcbiAgICBwYXRoVG9HZW5lcmF0b3JSb290RGlyOiBzdHJpbmcsXG4gICAgcHVyZ2VDYWNoZTogYm9vbGVhbixcbiAgICB1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nOiBib29sZWFuXG4pOiBGb3JtR2VuZXJhdG9yIHtcbiAgICBsZXQgcmVzdWx0ID0gZ2VuZXJhdG9yc0NhY2hlLmdldChwYXRoVG9HZW5lcmF0b3JSb290RGlyKTtcbiAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgPSBuZXcgR2VuZXJhdG9yQXN5bmNQcm94eShwYXRoVG9HZW5lcmF0b3JSb290RGlyLCBwdXJnZUNhY2hlLCB1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nKTtcbiAgICAgICAgZ2VuZXJhdG9yc0NhY2hlLnNldChwYXRoVG9HZW5lcmF0b3JSb290RGlyLCByZXN1bHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxjQUFBLEdBQUFDLE9BQUE7QUFHQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFRQSxJQUFBRSxjQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFBRyxzQkFBQSxHQUFBSCxPQUFBO0FBZEE7O0FBc0JBLE1BQU1JLG1CQUFtQixDQUEwQjtFQVN4Q0MsV0FBV0EsQ0FDZEMsc0JBQThCLEVBQzlCQyxVQUFtQixFQUNuQkMsc0JBQStCLEVBQy9CQyxNQUFlLEdBQUcsSUFBQUMsdUJBQVMsRUFBQyxDQUFDLEVBQy9CO0lBQUEsS0FiZUosc0JBQXNCO0lBQUEsS0FDdEJLLHdCQUF3QjtJQUFBLEtBQ3hCSixVQUFVO0lBQUEsS0FDVkMsc0JBQXNCO0lBQUEsS0FDL0JJLGdCQUFnQjtJQUFBLEtBQ2hCQyxnQkFBZ0IsR0FBRyxDQUFDO0lBQUEsS0FDWEMsdUJBQXVCLEdBQXNDLElBQUlDLEdBQUcsQ0FBQyxDQUFDO0lBUW5GLElBQUksQ0FBQ1Asc0JBQXNCLEdBQUdBLHNCQUFzQjtJQUNwRCxJQUFJLENBQUNGLHNCQUFzQixHQUFHQSxzQkFBc0I7SUFDcEQsSUFBSSxDQUFDQyxVQUFVLEdBQUdBLFVBQVU7SUFDNUIsSUFBSSxDQUFDSSx3QkFBd0IsR0FBRyxJQUFJSywrQ0FBd0IsQ0FBQ1QsVUFBVSxDQUFDO0VBQzVFO0VBRUEsTUFBYVUsaUJBQWlCQSxDQUFDQyxVQUF3QixFQUFFQyxTQUF3QixFQUF5QjtJQUN0RyxNQUFNQyxzQkFBc0IsR0FBRyxNQUFNLElBQUksQ0FBQ1Qsd0JBQXdCLENBQUNVLGtCQUFrQixDQUNqRixJQUFJLENBQUNmLHNCQUNULENBQUM7SUFDRCxJQUFJYyxzQkFBc0IsSUFBSUUsU0FBUyxFQUFFO01BQ3JD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