@kontur.candy/tools 2.129.0 → 2.131.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 (249) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +6 -6
  3. package/distr/Common/AsyncUtils.js +1 -30
  4. package/distr/Common/CandyApiClient/CandyApiClient.js +56 -39
  5. package/distr/Common/CandyApiClient/CandyApiClientContext.js +1 -33
  6. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +0 -4
  7. package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +0 -4
  8. package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +1 -29
  9. package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +0 -4
  10. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +1 -35
  11. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +1 -35
  12. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +1 -37
  13. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +1 -29
  14. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +1 -34
  15. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +1 -28
  16. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +0 -4
  17. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +1 -33
  18. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +1 -29
  19. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +1 -6
  20. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +0 -4
  21. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +0 -4
  22. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +22 -38
  23. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -5
  24. package/distr/Common/CandyApiClient/IsBuffer.js +1 -29
  25. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +0 -4
  26. package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +0 -4
  27. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +0 -4
  28. package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +0 -4
  29. package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +0 -4
  30. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +1 -6
  31. package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +0 -4
  32. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +0 -4
  33. package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +11 -0
  34. package/distr/Common/CandyApiClient/Types/DraftFullId.js +0 -4
  35. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +0 -4
  36. package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +1 -6
  37. package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +0 -4
  38. package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +0 -4
  39. package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +1 -6
  40. package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +0 -4
  41. package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +0 -4
  42. package/distr/Common/CandyApiClient/Types/Guid.js +0 -4
  43. package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +1 -6
  44. package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +0 -4
  45. package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +0 -4
  46. package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +1 -6
  47. package/distr/Common/CommonConstants/SectionNames.js +1 -28
  48. package/distr/Common/Comparers.js +8 -30
  49. package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +1 -29
  50. package/distr/Common/EndPoints.js +1 -34
  51. package/distr/Common/Errors.js +3 -71
  52. package/distr/Common/FormActionHandlers/ContextualActionNames.js +1 -30
  53. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +0 -4
  54. package/distr/Common/Funcs.js +1 -29
  55. package/distr/Common/GFV.js +0 -4
  56. package/distr/Common/Hooks/UseLocalStorage.js +42 -0
  57. package/distr/Common/HttpClient/AuthenticationMode.js +1 -32
  58. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +12 -0
  59. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +1 -29
  60. package/distr/Common/HttpClient/FetchImplementation/Fetch.js +0 -4
  61. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +1 -30
  62. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +3 -31
  63. package/distr/Common/HttpClient/HttpClient.js +12 -56
  64. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +0 -4
  65. package/distr/Common/HttpClient/IHttpClient.js +0 -4
  66. package/distr/Common/IndentString.js +18 -0
  67. package/distr/Common/IntRangeUtils.js +1 -31
  68. package/distr/Common/IterableUtils.js +23 -38
  69. package/distr/Common/KCLangRuntimeUtils.js +3 -38
  70. package/distr/Common/ModelPath/BuildIterationSequence.js +3 -31
  71. package/distr/Common/ModelPath/EachCurrentCollision.js +1 -6
  72. package/distr/Common/ModelPath/IEquatable.js +0 -4
  73. package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +30 -0
  74. package/distr/Common/ModelPath/Map/Map2.js +103 -0
  75. package/distr/Common/ModelPath/Map/ModelPathMap.js +30 -0
  76. package/distr/Common/ModelPath/ModelPath.js +206 -206
  77. package/distr/Common/ModelPath/ModelPathBuilder.js +11 -40
  78. package/distr/Common/ModelPath/ModelPathHelper.js +13 -0
  79. package/distr/Common/ModelPath/PathMatcher.js +8 -37
  80. package/distr/Common/ModelPath/PathSplitHelper.js +26 -0
  81. package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +40 -0
  82. package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +40 -0
  83. package/distr/Common/ModelPath/Set/ModelPathSet.js +40 -0
  84. package/distr/Common/ModelPath/Set/Set2.js +60 -0
  85. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +1 -34
  86. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +0 -4
  87. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +1 -29
  88. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +1 -34
  89. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +1 -38
  90. package/distr/Common/NidusClient/INidusClient.js +1 -30
  91. package/distr/Common/NidusClient/NidusClientContext.js +1 -38
  92. package/distr/Common/NidusClient/NidusClientImpl.js +1 -34
  93. package/distr/Common/PathConstants.js +3 -31
  94. package/distr/Common/TypingUtils.js +6 -50
  95. package/distr/Common/UUID.js +1 -30
  96. package/distr/Common/UseAsyncEffect.js +1 -31
  97. package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +3 -36
  98. package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +1 -29
  99. package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +1 -30
  100. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +3 -36
  101. package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +3 -36
  102. package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +1 -29
  103. package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +3 -34
  104. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +1 -28
  105. package/distr/Tools/src/BuildTasks/FSTask.js +3 -30
  106. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +3 -32
  107. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +1 -37
  108. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +1 -34
  109. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +3 -31
  110. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +1 -29
  111. package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +1 -31
  112. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +3 -36
  113. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +3 -37
  114. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +2 -37
  115. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +2 -34
  116. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +1 -5
  117. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +1 -5
  118. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +3 -33
  119. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +1 -28
  120. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +3 -30
  121. package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +1 -34
  122. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +1 -45
  123. package/distr/Tools/src/BuildTasks/ReadFormSource.js +4 -39
  124. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +3 -33
  125. package/distr/Tools/src/BuildTasks/Version.js +1 -32
  126. package/distr/Tools/src/BuildTasks/WriteFormMeta.js +3 -31
  127. package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +1 -30
  128. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +7 -34
  129. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +3 -33
  130. package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +1 -34
  131. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +1 -29
  132. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +6 -37
  133. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +6 -47
  134. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +26 -43
  135. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +6 -40
  136. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +6 -38
  137. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +6 -37
  138. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +6 -39
  139. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +6 -37
  140. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +6 -39
  141. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +3 -36
  142. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +3 -36
  143. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +12 -37
  144. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +3 -31
  145. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +5 -35
  146. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +4 -36
  147. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +3 -31
  148. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +0 -4
  149. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +0 -4
  150. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +2 -42
  151. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +3 -36
  152. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -29
  153. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +0 -4
  154. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +1 -30
  155. package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +1 -29
  156. package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +1 -29
  157. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +1 -30
  158. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +0 -4
  159. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +1 -28
  160. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +3 -31
  161. package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +1 -28
  162. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +3 -31
  163. package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +6 -40
  164. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}.calc.js +1 -30
  165. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/setKppValue.js +1 -29
  166. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +1 -34
  167. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +6 -37
  168. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/kppValue.js +1 -29
  169. package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +1 -28
  170. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +1 -30
  171. package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +1 -28
  172. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +3 -32
  173. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +1 -32
  174. package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +1 -29
  175. package/distr/Tools/src/CandyCLI.js +3 -31
  176. package/distr/Tools/src/CheckNodeJsVersion.js +3 -33
  177. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +4 -35
  178. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +1 -34
  179. package/distr/Tools/src/Commons/ErrorUntyped.js +0 -4
  180. package/distr/Tools/src/Commons/EventObject.js +2 -44
  181. package/distr/Tools/src/Commons/ExecUtils.js +1 -29
  182. package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +1 -29
  183. package/distr/Tools/src/Commons/FormGlobsUtils.js +3 -36
  184. package/distr/Tools/src/Commons/FsUtils.js +3 -34
  185. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +1 -32
  186. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +2 -33
  187. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +1 -34
  188. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +1 -34
  189. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +0 -4
  190. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +1 -34
  191. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +1 -34
  192. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +2 -34
  193. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +1 -34
  194. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +1 -36
  195. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +1 -34
  196. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +1 -34
  197. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +1 -34
  198. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +1 -34
  199. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +0 -4
  200. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +1 -34
  201. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +1 -34
  202. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +3 -57
  203. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +1 -28
  204. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +3 -36
  205. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +1 -34
  206. package/distr/Tools/src/Commons/Locks/Lock.js +3 -36
  207. package/distr/Tools/src/Commons/Locks/LockHandle.js +1 -34
  208. package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +3 -36
  209. package/distr/Tools/src/Commons/Logging/ELKLogger.js +3 -33
  210. package/distr/Tools/src/Commons/Logging/ILogger.js +1 -36
  211. package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +1 -41
  212. package/distr/Tools/src/Commons/Logging/Logger.js +3 -36
  213. package/distr/Tools/src/Commons/Logging/StaticLogger.js +1 -38
  214. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +1 -30
  215. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +6 -53
  216. package/distr/Tools/src/Commons/PathPattern.js +1 -34
  217. package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +1 -34
  218. package/distr/Tools/src/Commons/TasksCore/BuildTask.js +0 -4
  219. package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +3 -89
  220. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +3 -36
  221. package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +1 -34
  222. package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +3 -36
  223. package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +3 -36
  224. package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -28
  225. package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +1 -34
  226. package/distr/Tools/src/Commons/TimingUtils.js +1 -29
  227. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +55 -48
  228. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +8 -36
  229. package/distr/Tools/src/GenerateReadMe.js +1 -31
  230. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  231. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  232. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  233. package/distr/Tools/src/Options/CandyToolOptions.js +1 -28
  234. package/distr/Tools/src/ReadFarmConfig.js +3 -31
  235. package/distr/Tools/src/SelfUpdate.js +4 -36
  236. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1000 -2036
  237. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  238. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +366 -361
  239. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  240. package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +1 -5
  241. package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +1 -5
  242. package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +1 -5
  243. package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +1 -5
  244. package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +1 -5
  245. package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +1 -5
  246. package/package.json +9 -8
  247. package/distr/Common/ModelPath/AbsoluteModelPathSet.js +0 -95
  248. package/distr/Common/ModelPath/ModelPathMap.js +0 -160
  249. package/distr/Common/ModelPath/ModelPathSet.js +0 -99
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
@@ -11,17 +13,6 @@ var _nodeFetch = _interopRequireDefault(require("node-fetch"));
11
13
 
12
14
  var _Errors = require("../../Errors");
13
15
 
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- (function () {
17
- var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
18
- enterModule && enterModule(module);
19
- })();
20
-
21
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
22
- return a;
23
- };
24
-
25
16
  const agent = new _https.Agent({
26
17
  rejectUnauthorized: false
27
18
  });
@@ -47,23 +38,4 @@ const nodeFetch = (input, init) => {
47
38
 
48
39
 
49
40
  exports.nodeFetch = nodeFetch;
50
- ;
51
-
52
- (function () {
53
- var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
54
-
55
- if (!reactHotLoader) {
56
- return;
57
- }
58
-
59
- reactHotLoader.register(agent, "agent", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\FetchImplementation\\NodeFetch.ts");
60
- reactHotLoader.register(nodeFetch, "nodeFetch", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\FetchImplementation\\NodeFetch.ts");
61
- })();
62
-
63
- ;
64
-
65
- (function () {
66
- var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
67
- leaveModule && leaveModule(module);
68
- })();
69
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9IdHRwQ2xpZW50L0ZldGNoSW1wbGVtZW50YXRpb24vTm9kZUZldGNoLnRzIl0sIm5hbWVzIjpbImFnZW50IiwiQWdlbnQiLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJub2RlRmV0Y2giLCJpbnB1dCIsImluaXQiLCJzdGFydHNXaXRoIiwiTm90U3VwcG9ydGVkRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFFQTs7Ozs7Ozs7Ozs7OztBQUlBLE1BQU1BLEtBQUssR0FBRyxJQUFJQyxZQUFKLENBQVU7QUFBRUMsRUFBQUEsa0JBQWtCLEVBQUU7QUFBdEIsQ0FBVixDQUFkO0FBRUE7O0FBQ08sTUFBTUMsU0FBZ0IsR0FBRyxDQUFDQyxLQUFELEVBQXFCQyxJQUFyQixLQUErRDtBQUMzRixNQUFJLE9BQU9ELEtBQVAsS0FBaUIsUUFBckIsRUFBK0I7QUFDM0IsUUFBSUEsS0FBSyxDQUFDRSxVQUFOLENBQWlCLE9BQWpCLENBQUosRUFBK0I7QUFDM0I7QUFDQSxhQUFPLHdCQUFNRixLQUFOLEVBQWEsRUFBRSxHQUFHQyxJQUFMO0FBQVdMLFFBQUFBLEtBQUssRUFBRUE7QUFBbEIsT0FBYixDQUFQO0FBQ0gsS0FIRCxNQUdPO0FBQ0g7QUFDQSxhQUFPLHdCQUFNSSxLQUFOLEVBQWEsRUFBRSxHQUFHQztBQUFMLE9BQWIsQ0FBUDtBQUNIO0FBQ0osR0FSRCxNQVFPO0FBQ0gsVUFBTSxJQUFJRSx5QkFBSixFQUFOO0FBQ0g7QUFDSixDQVpNO0FBYVA7Ozs7Ozs7Ozs7Ozs7MEJBaEJNUCxLOzBCQUdPRyxTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWdlbnQgfSBmcm9tIFwiaHR0cHNcIjtcblxuaW1wb3J0IGZldGNoIGZyb20gXCJub2RlLWZldGNoXCI7XG5cbmltcG9ydCB7IE5vdFN1cHBvcnRlZEVycm9yIH0gZnJvbSBcIi4uLy4uL0Vycm9yc1wiO1xuXG5pbXBvcnQgeyBGZXRjaCB9IGZyb20gXCIuL0ZldGNoXCI7XG5cbmNvbnN0IGFnZW50ID0gbmV3IEFnZW50KHsgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSB9KTtcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVybiAqL1xuZXhwb3J0IGNvbnN0IG5vZGVGZXRjaDogRmV0Y2ggPSAoaW5wdXQ6IFJlcXVlc3RJbmZvLCBpbml0PzogUmVxdWVzdEluaXQpOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcImh0dHBzXCIpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgICAgICAgICAgcmV0dXJuIGZldGNoKGlucHV0LCB7IC4uLmluaXQsIGFnZW50OiBhZ2VudCB9IGFzIGFueSkgYXMgYW55O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgIHJldHVybiBmZXRjaChpbnB1dCwgeyAuLi5pbml0IH0gYXMgYW55KSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoKTtcbiAgICB9XG59O1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuICovXG4iXX0=
41
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9IdHRwQ2xpZW50L0ZldGNoSW1wbGVtZW50YXRpb24vTm9kZUZldGNoLnRzIl0sIm5hbWVzIjpbImFnZW50IiwiQWdlbnQiLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJub2RlRmV0Y2giLCJpbnB1dCIsImluaXQiLCJzdGFydHNXaXRoIiwiTm90U3VwcG9ydGVkRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVBOztBQUVBOztBQUlBLE1BQU1BLEtBQUssR0FBRyxJQUFJQyxZQUFKLENBQVU7QUFBRUMsRUFBQUEsa0JBQWtCLEVBQUU7QUFBdEIsQ0FBVixDQUFkO0FBRUE7O0FBQ08sTUFBTUMsU0FBZ0IsR0FBRyxDQUFDQyxLQUFELEVBQXFCQyxJQUFyQixLQUErRDtBQUMzRixNQUFJLE9BQU9ELEtBQVAsS0FBaUIsUUFBckIsRUFBK0I7QUFDM0IsUUFBSUEsS0FBSyxDQUFDRSxVQUFOLENBQWlCLE9BQWpCLENBQUosRUFBK0I7QUFDM0I7QUFDQSxhQUFPLHdCQUFNRixLQUFOLEVBQWEsRUFBRSxHQUFHQyxJQUFMO0FBQVdMLFFBQUFBLEtBQUssRUFBRUE7QUFBbEIsT0FBYixDQUFQO0FBQ0gsS0FIRCxNQUdPO0FBQ0g7QUFDQSxhQUFPLHdCQUFNSSxLQUFOLEVBQWEsRUFBRSxHQUFHQztBQUFMLE9BQWIsQ0FBUDtBQUNIO0FBQ0osR0FSRCxNQVFPO0FBQ0gsVUFBTSxJQUFJRSx5QkFBSixFQUFOO0FBQ0g7QUFDSixDQVpNO0FBYVAiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZ2VudCB9IGZyb20gXCJodHRwc1wiO1xuXG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIjtcblxuaW1wb3J0IHsgTm90U3VwcG9ydGVkRXJyb3IgfSBmcm9tIFwiLi4vLi4vRXJyb3JzXCI7XG5cbmltcG9ydCB7IEZldGNoIH0gZnJvbSBcIi4vRmV0Y2hcIjtcblxuY29uc3QgYWdlbnQgPSBuZXcgQWdlbnQoeyByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlIH0pO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuICovXG5leHBvcnQgY29uc3Qgbm9kZUZldGNoOiBGZXRjaCA9IChpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+ID0+IHtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFwiaHR0cHNcIikpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICByZXR1cm4gZmV0Y2goaW5wdXQsIHsgLi4uaW5pdCwgYWdlbnQ6IGFnZW50IH0gYXMgYW55KSBhcyBhbnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgICAgICAgICAgcmV0dXJuIGZldGNoKGlucHV0LCB7IC4uLmluaXQgfSBhcyBhbnkpIGFzIGFueTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpO1xuICAgIH1cbn07XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm4gKi9cbiJdfQ==
@@ -7,15 +7,6 @@ exports.HttpError = exports.HttpClientResponse = exports.HttpClientRequestWrappe
7
7
 
8
8
  var _Errors = require("../Errors");
9
9
 
10
- (function () {
11
- var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
12
- enterModule && enterModule(module);
13
- })();
14
-
15
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
16
- return a;
17
- };
18
-
19
10
  function trimTrailingSlash(url) {
20
11
  return url.slice(-1) === "/" ? url.slice(0, -1) : url;
21
12
  }
@@ -40,12 +31,6 @@ class HttpClientResponse {
40
31
  return responseData;
41
32
  }
42
33
 
43
- // @ts-ignore
44
- __reactstandin__regenerateByEval(key, code) {
45
- // @ts-ignore
46
- this[key] = eval(code);
47
- }
48
-
49
34
  }
50
35
 
51
36
  exports.HttpClientResponse = HttpClientResponse;
@@ -146,12 +131,6 @@ class HttpClientRequestWrapper {
146
131
  return new HttpClientRequestWrapper(fn);
147
132
  }
148
133
 
149
- // @ts-ignore
150
- __reactstandin__regenerateByEval(key, code) {
151
- // @ts-ignore
152
- this[key] = eval(code);
153
- }
154
-
155
134
  }
156
135
 
157
136
  exports.HttpClientRequestWrapper = HttpClientRequestWrapper;
@@ -245,7 +224,10 @@ class HttpClient {
245
224
  }
246
225
 
247
226
  async checkStatus(response, acceptCodes) {
248
- if (!(response.status >= 200 && response.status < 300) || (acceptCodes !== null && acceptCodes !== void 0 ? acceptCodes : []).includes(response.status)) {
227
+ const isSuccessResponseStatus = response.status >= 200 && response.status < 300;
228
+ const isAcceptCodesIncludesResponseStatus = (acceptCodes !== null && acceptCodes !== void 0 ? acceptCodes : []).includes(response.status);
229
+
230
+ if (!isSuccessResponseStatus && !isAcceptCodesIncludesResponseStatus || response.status === 400) {
249
231
  const errorText = await response.text();
250
232
  let serverResponse;
251
233
 
@@ -258,6 +240,11 @@ class HttpClient {
258
240
  if (serverResponse != undefined) {
259
241
  var _ref, _serverResponse$Messa;
260
242
 
243
+ if ("error" in serverResponse && typeof serverResponse.error === "object") {
244
+ throw new HttpError( // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
245
+ JSON.stringify(serverResponse.error), response.status);
246
+ }
247
+
261
248
  throw new HttpError( // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
262
249
  (_ref = (_serverResponse$Messa = serverResponse.Message) !== null && _serverResponse$Messa !== void 0 ? _serverResponse$Messa : serverResponse.message) !== null && _ref !== void 0 ? _ref : serverResponse.Error, response.status);
263
250
  }
@@ -357,12 +344,6 @@ class HttpClient {
357
344
  return fetchWithOptions;
358
345
  }
359
346
 
360
- // @ts-ignore
361
- __reactstandin__regenerateByEval(key, code) {
362
- // @ts-ignore
363
- this[key] = eval(code);
364
- }
365
-
366
347
  }
367
348
 
368
349
  exports.HttpClient = HttpClient;
@@ -375,36 +356,11 @@ class HttpError extends Error {
375
356
  this.statusCode = statusCode;
376
357
  }
377
358
 
378
- // @ts-ignore
379
- __reactstandin__regenerateByEval(key, code) {
380
- // @ts-ignore
381
- this[key] = eval(code);
359
+ get message() {
360
+ return super.message + `. StatusCode: ${this.statusCode}`;
382
361
  }
383
362
 
384
363
  }
385
364
 
386
365
  exports.HttpError = HttpError;
387
- ;
388
-
389
- (function () {
390
- var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
391
-
392
- if (!reactHotLoader) {
393
- return;
394
- }
395
-
396
- reactHotLoader.register(trimTrailingSlash, "trimTrailingSlash", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\HttpClient.ts");
397
- reactHotLoader.register(trimLeadingSlash, "trimLeadingSlash", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\HttpClient.ts");
398
- reactHotLoader.register(HttpClientResponse, "HttpClientResponse", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\HttpClient.ts");
399
- reactHotLoader.register(HttpClientRequestWrapper, "HttpClientRequestWrapper", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\HttpClient.ts");
400
- reactHotLoader.register(HttpClient, "HttpClient", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\HttpClient.ts");
401
- reactHotLoader.register(HttpError, "HttpError", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\HttpClient.ts");
402
- })();
403
-
404
- ;
405
-
406
- (function () {
407
- var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
408
- leaveModule && leaveModule(module);
409
- })();
410
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9IdHRwQ2xpZW50L0h0dHBDbGllbnQudHMiXSwibmFtZXMiOlsidHJpbVRyYWlsaW5nU2xhc2giLCJ1cmwiLCJzbGljZSIsInRyaW1MZWFkaW5nU2xhc2giLCJIdHRwQ2xpZW50UmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsImZldGNoUmVzcG9uc2UiLCJzdGF0dXMiLCJqc29uIiwicmVzcG9uc2VEYXRhIiwiSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIiwiZXhlY3V0ZSIsImV4ZWN1dGVSZXF1ZXN0IiwiYWNjZXB0Q29kZXMiLCJxdWVyeVBhcmFtcyIsInNpZ25hbCIsImJvZHlGYWN0b3J5IiwiY29udGVudFR5cGUiLCJ0aGVuIiwiYXJncyIsInJlc3VsdFByb21pc2UiLCJyZXN1bHQiLCJjcmVhdGVDb25maWciLCJ3aXRoQWJvcnRTaWduYWwiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJib2R5IiwidW5kZWZpbmVkIiwid2l0aEpzb25Cb2R5Iiwic2VyaWFsaXphYmxlQm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3aXRoUXVlcnlQYXJhbXMiLCJ3aXRoUmF3Qm9keSIsImFjY2VwdENvZGUiLCJjb2RlIiwicHVzaCIsImNyZWF0ZSIsImZuIiwiSHR0cENsaWVudCIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJhdXRoZW50aWNhdGlvblByb3ZpZGVyIiwiZGVmYXVsdFF1ZXJ5UGFyYW1zIiwiZGVmYXVsdFBhcmFtcyIsImdldCIsIm1ldGhvZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImRlbGV0ZSIsImNvbmZpZyIsImZldGNoVXJsIiwicmVxdWVzdCIsImFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicmVzcG9uc2UiLCJjaGVja1N0YXR1cyIsIm9wdGlvbnMiLCJoZWFkZXJzIiwicGF0aCIsInBhcmFtcyIsInJlc3VsdFBhcmFtcyIsImluY2x1ZGVzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIk5vdFN1cHBvcnRlZEVycm9yIiwiY3JlYXRlUXVlcnlTdHJpbmciLCJlcnJvclRleHQiLCJ0ZXh0Iiwic2VydmVyUmVzcG9uc2UiLCJwYXJzZSIsImUiLCJIdHRwRXJyb3IiLCJNZXNzYWdlIiwibWVzc2FnZSIsIkVycm9yIiwicG9zdFN5bmMiLCJkYXRhIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwid2l0aENyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJtYWtlUGFyYW1WYWx1ZVN0cmluZyIsInBhcmFtIiwidmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwYXJhbXMyIiwibWFwIiwia2V5IiwidG9TdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJpdGVtIiwiZmlsdGVyIiwieCIsImpvaW4iLCJjcmVhdGVGZXRjaEltcGwiLCJmZXRjaFdpdGhPcHRpb25zIiwiaW5wdXQiLCJpbml0IiwicmVxdWVzdEluaXQiLCJjYWNoZSIsImNyZWRlbnRpYWxzIiwiaW50ZWdyaXR5Iiwia2VlcGFsaXZlIiwibW9kZSIsInJlZGlyZWN0IiwicmVmZXJyZXIiLCJyZWZlcnJlclBvbGljeSIsInN0YXR1c0NvZGUiLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7O0FBWUEsU0FBU0EsaUJBQVQsQ0FBMkJDLEdBQTNCLEVBQWdEO0FBQzVDLFNBQU9BLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLENBQUMsQ0FBWCxNQUFrQixHQUFsQixHQUF3QkQsR0FBRyxDQUFDQyxLQUFKLENBQVUsQ0FBVixFQUFhLENBQUMsQ0FBZCxDQUF4QixHQUEyQ0QsR0FBbEQ7QUFDSDs7QUFFRCxTQUFTRSxnQkFBVCxDQUEwQkYsR0FBMUIsRUFBK0M7QUFDM0MsU0FBT0EsR0FBRyxDQUFDLENBQUQsQ0FBSCxLQUFXLEdBQVgsR0FBaUJBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLENBQVYsQ0FBakIsR0FBZ0NELEdBQXZDO0FBQ0g7O0FBWU0sTUFB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VlU7QUFXM0JDLFVBQUFBLFNBQVMsRUFBRU4sS0FBSyxDQUFDTSxTQVhVO0FBWTNCN0QsVUFBQUEsTUFBTSxFQUFFdUQsS0FBSyxDQUFDdkQsTUFaYTtBQWEzQjhELFVBQUFBLElBQUksRUFBRVAsS0FBSyxDQUFDTyxJQWJlO0FBYzNCQyxVQUFBQSxRQUFRLEVBQUVSLEtBQUssQ0FBQ1EsUUFkVztBQWUzQkMsVUFBQUEsUUFBUSxFQUFFVCxLQUFLLENBQUNTLFFBZlc7QUFnQjNCQyxVQUFBQSxjQUFjLEVBQUVWLEtBQUssQ0FBQ1U7QUFoQkssU0FBL0I7QUFrQkFSLFFBQUFBLFdBQVcsR0FBRyxLQUFLN0Qsc0JBQUwsQ0FBNEI2RCxXQUE1QixDQUFkO0FBQ0EsZUFBTyxLQUFLL0QsU0FBTCxDQUFlWSxRQUFmLEVBQXlCbUQsV0FBekIsQ0FBUDtBQUNIO0FBQ0osS0FqQ0Q7O0FBa0NBLFdBQU9ILGdCQUFQO0FBQ0g7O0FBMUwwQztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBOzs7O0FBNkx4QyxNQUFNMUIsU0FBTixTQUF3QkcsS0FBeEIsQ0FBOEI7QUFHMUJ4RSxFQUFBQSxXQUFXLENBQUN1RSxPQUFELEVBQWtCb0MsVUFBbEIsRUFBc0M7QUFDcEQsVUFBTXBDLE9BQU47QUFEb0QsU0FGeENvQyxVQUV3QztBQUVwRCxTQUFLQyxJQUFMLEdBQVksV0FBWjtBQUNBLFNBQUtELFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0g7O0FBUGdDO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7Ozs7Ozs7Ozs7OzswQkE5VDVCaEgsaUI7MEJBSUFHLGdCOzBCQWNJQyxrQjswQkFvQkFNLHdCOzBCQTJGQTZCLFU7MEJBNkxBbUMsUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBOb3RTdXBwb3J0ZWRFcnJvciB9IGZyb20gXCIuLi9FcnJvcnNcIjtcblxuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5pbXBvcnQge1xuICAgIEh0dHBTdGF0dXNDb2RlLFxuICAgIElIdHRwQ2xpZW50LFxuICAgIElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIsXG4gICAgSUh0dHBDbGllbnRSZXNwb25zZSxcbiAgICBRdWVyeVBhcmFtc09iamVjdCxcbn0gZnJvbSBcIi4vSUh0dHBDbGllbnRcIjtcbmltcG9ydCB7IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyIH0gZnJvbSBcIi4vSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJcIjtcblxuZnVuY3Rpb24gdHJpbVRyYWlsaW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmZ1bmN0aW9uIHRyaW1MZWFkaW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmxbMF0gPT09IFwiL1wiID8gdXJsLnNsaWNlKDEpIDogdXJsO1xufVxuXG50eXBlIEJvZHlGYWN0b3J5ID0gKCkgPT4gQm9keUluaXQgfCBudWxsO1xuXG5pbnRlcmZhY2UgSUh0dHBDbGllbnRSZXF1ZXN0Q29uZmlnIHtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgICBib2R5RmFjdG9yeT86IEJvZHlGYWN0b3J5O1xuICAgIGFjY2VwdENvZGVzOiBIdHRwU3RhdHVzQ29kZVtdO1xuICAgIHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdDtcbiAgICBjb250ZW50VHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSBpbXBsZW1lbnRzIElIdHRwQ2xpZW50UmVzcG9uc2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2hSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZmV0Y2hSZXNwb25zZTogUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5mZXRjaFJlc3BvbnNlID0gZmV0Y2hSZXNwb25zZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN0YXR1cygpOiBIdHRwU3RhdHVzQ29kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoUmVzcG9uc2Uuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBqc29uPFQ+KCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmZldGNoUmVzcG9uc2UuanNvbigpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YTtcbiAgICB9XG59XG5cbnR5cGUgUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uID0gKGNvbmZpZzogSUh0dHBDbGllbnRSZXF1ZXN0Q29uZmlnKSA9PiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZSB8IFJlc3BvbnNlPjtcblxuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciBpbXBsZW1lbnRzIElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0ZVJlcXVlc3Q6IFJlcXVlc3RFeGVjdXRpb25GdW5jdGlvbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjY2VwdENvZGVzOiBIdHRwU3RhdHVzQ29kZVtdID0gW107XG4gICAgcHJpdmF0ZSBxdWVyeVBhcmFtczogUXVlcnlQYXJhbXNPYmplY3QgPSB7fTtcbiAgICBwcml2YXRlIHNpZ25hbDogdW5kZWZpbmVkIHwgQWJvcnRTaWduYWw7XG4gICAgcHJpdmF0ZSBib2R5RmFjdG9yeT86IEJvZHlGYWN0b3J5O1xuICAgIHByaXZhdGUgY29udGVudFR5cGU/OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZXhlY3V0ZTogUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZVJlcXVlc3QgPSBleGVjdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWJvcnRTaWduYWwoc2lnbmFsOiB1bmRlZmluZWQgfCBBYm9ydFNpZ25hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLnNpZ25hbCA9IHNpZ25hbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb250ZW50VHlwZShjb250ZW50VHlwZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhCb2R5RnJvbUJ1ZmZlcihib2R5OiBmYWxzZSB8IEJ1ZmZlciB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoYm9keSA9PT0gZmFsc2UgfHwgYm9keSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBib2R5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEpzb25Cb2R5KHNlcmlhbGl6YWJsZUJvZHk6IHVua25vd24gfCB7fSB8IHVua25vd25bXSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoc2VyaWFsaXphYmxlQm9keSAhPT0gZmFsc2UgJiYgc2VyaWFsaXphYmxlQm9keSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBKU09OLnN0cmluZ2lmeShzZXJpYWxpemFibGVCb2R5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdCB8IGZhbHNlIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChxdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJhd0JvZHkoYm9keTogQnVmZmVyIHwgc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgaWYgKGJvZHkgIT09IGZhbHNlICYmIGJvZHkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHlGYWN0b3J5ID0gKCkgPT4gYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMganNvbjxUPigpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcztcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qc29uPFQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjY2VwdENvZGUoY29kZTogSHR0cFN0YXR1c0NvZGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5hY2NlcHRDb2Rlcy5wdXNoKGNvZGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdGhlbjogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U+W1widGhlblwiXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdCh0aGlzLmNyZWF0ZUNvbmZpZygpKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBIdHRwQ2xpZW50UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEh0dHBDbGllbnRSZXNwb25zZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0UHJvbWlzZS50aGVuKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbmZpZygpOiBJSHR0cENsaWVudFJlcXVlc3RDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2lnbmFsOiB0aGlzLnNpZ25hbCxcbiAgICAgICAgICAgIGJvZHlGYWN0b3J5OiB0aGlzLmJvZHlGYWN0b3J5LFxuICAgICAgICAgICAgYWNjZXB0Q29kZXM6IHRoaXMuYWNjZXB0Q29kZXMsXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLmNvbnRlbnRUeXBlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlKGZuOiBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24pOiBIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlcihmbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudCBpbXBsZW1lbnRzIElIdHRwQ2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZldGNoSW1wbDogRmV0Y2g7XG4gICAgcHJpdmF0ZSByZWFkb25seSBiYXNlVXJsOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoZW50aWNhdGlvblByb3ZpZGVyOiBIdHRwQ2xpZW50QXV0aGVudGljYXRpb25Qcm92aWRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdCA9IHt9O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBmZXRjaEltcGw6IEZldGNoLFxuICAgICAgICBiYXNlVXJsOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uUHJvdmlkZXI6IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyLFxuICAgICAgICBkZWZhdWx0UXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdFxuICAgICkge1xuICAgICAgICB0aGlzLmZldGNoSW1wbCA9IGZldGNoSW1wbDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA9PSB1bmRlZmluZWQgPyBiYXNlVXJsIDogdHJpbVRyYWlsaW5nU2xhc2goYmFzZVVybCk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFBhcmFtcyA9IGRlZmF1bHRRdWVyeVBhcmFtcztcbiAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyID0gYXV0aGVudGljYXRpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIkdFVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb3N0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBPU1RcIikodXJsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHV0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBVVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaCh1cmw6IHN0cmluZyk6IElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QoXCJQQVRDSFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiREVMRVRFXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZXRob2QobWV0aG9kOiBcIkdFVFwiIHwgXCJQT1NUXCIgfCBcIlBVVFwiIHwgXCJQQVRDSFwiIHwgXCJERUxFVEVcIik6ICh1cmw6IHN0cmluZykgPT4gSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiAodXJsOiBzdHJpbmcpID0+XG4gICAgICAgICAgICBIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIuY3JlYXRlKGFzeW5jIGNvbmZpZyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybCh1cmwsIGNvbmZpZy5xdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyh7IG1ldGhvZDogbWV0aG9kIH0sIGNvbmZpZy5jb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcihyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNpZ25hbCA9IGNvbmZpZy5zaWduYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuYm9keUZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibWV0aG9kXCIsIFwiQm9keSBpcyBub3QgYWxsb3dlZCBmb3IgR0VUIHJlcXVlc3RzXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IGNvbmZpZy5ib2R5RmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCByZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrU3RhdHVzKHJlc3BvbnNlLCBjb25maWcuYWNjZXB0Q29kZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kRGVmYXVsdFJlcXVlc3RIZWFkZXJzKG9wdGlvbnM6IFJlcXVlc3RJbml0LCBjb250ZW50VHlwZT86IHVuZGVmaW5lZCB8IHN0cmluZyk6IFJlcXVlc3RJbml0IHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBjb250ZW50VHlwZSA/PyBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IFwibm8tY2FjaGUsIG5vLXN0b3JlXCI7XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1tcIlByYWdtYVwiXSA9IFwibm8tY2FjaGVcIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiRXhwaXJlc1wiXSA9IFwiMFwiO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB1bmRlZmluZWQgfCBRdWVyeVBhcmFtc09iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSBwYXRoO1xuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5iYXNlVXJsICsgXCIvXCIgKyB0cmltTGVhZGluZ1NsYXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0UGFyYW1zID0geyAuLi50aGlzLmRlZmF1bHRQYXJhbXMsIC4uLnBhcmFtcyB9O1xuICAgICAgICBpZiAocGF0aC5pbmNsdWRlcyhcIj9cIikgJiYgcGFyYW1zICE9IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhyZXN1bHRQYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcihgUGFzc2luZyBzZWFyY2ggcGFyYW1zIGluIHVybCBhbmQgdmlhIHBhcmFtcyBvYmplY3QgaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHRoaXMuY3JlYXRlUXVlcnlTdHJpbmcocmVzdWx0UGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSwgYWNjZXB0Q29kZXM/OiBIdHRwU3RhdHVzQ29kZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSB8fCAoYWNjZXB0Q29kZXMgPz8gW10pLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgIGxldCBzZXJ2ZXJSZXNwb25zZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc2VydmVyUmVzcG9uc2UgPSBKU09OLnBhcnNlKGVycm9yVGV4dCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgc2VydmVyUmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VydmVyUmVzcG9uc2UgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyUmVzcG9uc2UuTWVzc2FnZSA/PyBzZXJ2ZXJSZXNwb25zZS5tZXNzYWdlID8/IHNlcnZlclJlc3BvbnNlLkVycm9yLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zdGF0dXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcihlcnJvclRleHQsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcG9zdFN5bmModXJsOiBzdHJpbmcsIHBhcmFtczogdW5kZWZpbmVkIHwgUXVlcnlQYXJhbXNPYmplY3QsIGRhdGE6IHt9KTogSHR0cFN0YXR1c0NvZGUge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHJlcXVlc3Qub3BlbihcIlBPU1RcIiwgdGhpcy51cmwodXJsLCBwYXJhbXMpLCBmYWxzZSk7XG4gICAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOFwiKTtcbiAgICAgICAgcmVxdWVzdC5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3Quc3RhdHVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZVBhcmFtVmFsdWVTdHJpbmcocGFyYW06IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtlbmNvZGVVUklDb21wb25lbnQocGFyYW0pfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVF1ZXJ5U3RyaW5nKHBhcmFtcz86IFF1ZXJ5UGFyYW1zT2JqZWN0KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHBhcmFtcyA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtczIgPSBwYXJhbXM7XG4gICAgICAgIGxldCByZXN1bHQgPSBPYmplY3Qua2V5cyhwYXJhbXMpXG4gICAgICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbXMyW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlUGFyYW1WYWx1ZVN0cmluZyhrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VQYXJhbVZhbHVlU3RyaW5nKGtleSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VQYXJhbVZhbHVlU3RyaW5nKGtleSwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlUGFyYW1WYWx1ZVN0cmluZyhrZXksIGl0ZW0udG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih4ID0+IHggIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4ICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgIC5qb2luKFwiJlwiKTtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ID8gXCI/XCIgKyByZXN1bHQgOiBcIlwiO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVGZXRjaEltcGwoKTogRmV0Y2gge1xuICAgICAgICBjb25zdCBmZXRjaFdpdGhPcHRpb25zID0gKGlucHV0OiBSZXF1ZXN0SW5mbywgaW5pdD86IFJlcXVlc3RJbml0KTogUHJvbWlzZTxSZXNwb25zZT4gPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZldGNoVXJsID0gdGhpcy51cmwoaW5wdXQsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgaW5pdCA9IGluaXQgPz8ge307XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzID0gaW5pdC5oZWFkZXJzID8/IHt9O1xuICAgICAgICAgICAgICAgIGluaXQuaGVhZGVyc1tcIkNhY2hlLUNvbnRyb2xcIl0gPSBcIm5vLWNhY2hlLCBuby1zdG9yZVwiO1xuICAgICAgICAgICAgICAgIGluaXQuaGVhZGVyc1tcIlByYWdtYVwiXSA9IFwibm8tY2FjaGVcIjtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnNbXCJFeHBpcmVzXCJdID0gXCIwXCI7XG4gICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcihpbml0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mZXRjaEltcGwoZmV0Y2hVcmwsIGluaXQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZXRjaFVybCA9IHRoaXMudXJsKGlucHV0LnVybCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdEluaXQ6IFJlcXVlc3RJbml0ID0ge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbXCJDYWNoZS1Db250cm9sXCJdOiBcIm5vLWNhY2hlLCBuby1zdG9yZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1wiUHJhZ21hXCJdOiBcIm5vLWNhY2hlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbXCJFeHBpcmVzXCJdOiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmlucHV0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbDogaW5wdXQuc2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICBjYWNoZTogaW5wdXQuY2FjaGUsXG4gICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBpbnB1dC5jcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdyaXR5OiBpbnB1dC5pbnRlZ3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGtlZXBhbGl2ZTogaW5wdXQua2VlcGFsaXZlLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IGlucHV0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogaW5wdXQubW9kZSxcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGlucHV0LnJlZGlyZWN0LFxuICAgICAgICAgICAgICAgICAgICByZWZlcnJlcjogaW5wdXQucmVmZXJyZXIsXG4gICAgICAgICAgICAgICAgICAgIHJlZmVycmVyUG9saWN5OiBpbnB1dC5yZWZlcnJlclBvbGljeSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlcXVlc3RJbml0ID0gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyKHJlcXVlc3RJbml0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mZXRjaEltcGwoZmV0Y2hVcmwsIHJlcXVlc3RJbml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZldGNoV2l0aE9wdGlvbnM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSHR0cEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXNDb2RlOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzdGF0dXNDb2RlOiBudW1iZXIpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gICAgfVxufVxuIl19
366
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9IdHRwQ2xpZW50L0h0dHBDbGllbnQudHMiXSwibmFtZXMiOlsidHJpbVRyYWlsaW5nU2xhc2giLCJ1cmwiLCJzbGljZSIsInRyaW1MZWFkaW5nU2xhc2giLCJIdHRwQ2xpZW50UmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsImZldGNoUmVzcG9uc2UiLCJzdGF0dXMiLCJqc29uIiwicmVzcG9uc2VEYXRhIiwiSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIiwiZXhlY3V0ZSIsImV4ZWN1dGVSZXF1ZXN0IiwiYWNjZXB0Q29kZXMiLCJxdWVyeVBhcmFtcyIsInNpZ25hbCIsImJvZHlGYWN0b3J5IiwiY29udGVudFR5cGUiLCJ0aGVuIiwiYXJncyIsInJlc3VsdFByb21pc2UiLCJyZXN1bHQiLCJjcmVhdGVDb25maWciLCJ3aXRoQWJvcnRTaWduYWwiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJib2R5IiwidW5kZWZpbmVkIiwid2l0aEpzb25Cb2R5Iiwic2VyaWFsaXphYmxlQm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3aXRoUXVlcnlQYXJhbXMiLCJ3aXRoUmF3Qm9keSIsImFjY2VwdENvZGUiLCJjb2RlIiwicHVzaCIsImNyZWF0ZSIsImZuIiwiSHR0cENsaWVudCIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJhdXRoZW50aWNhdGlvblByb3ZpZGVyIiwiZGVmYXVsdFF1ZXJ5UGFyYW1zIiwiZGVmYXVsdFBhcmFtcyIsImdldCIsIm1ldGhvZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImRlbGV0ZSIsImNvbmZpZyIsImZldGNoVXJsIiwicmVxdWVzdCIsImFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicmVzcG9uc2UiLCJjaGVja1N0YXR1cyIsIm9wdGlvbnMiLCJoZWFkZXJzIiwicGF0aCIsInBhcmFtcyIsInJlc3VsdFBhcmFtcyIsImluY2x1ZGVzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIk5vdFN1cHBvcnRlZEVycm9yIiwiY3JlYXRlUXVlcnlTdHJpbmciLCJpc1N1Y2Nlc3NSZXNwb25zZVN0YXR1cyIsImlzQWNjZXB0Q29kZXNJbmNsdWRlc1Jlc3BvbnNlU3RhdHVzIiwiZXJyb3JUZXh0IiwidGV4dCIsInNlcnZlclJlc3BvbnNlIiwicGFyc2UiLCJlIiwiZXJyb3IiLCJIdHRwRXJyb3IiLCJNZXNzYWdlIiwibWVzc2FnZSIsIkVycm9yIiwicG9zdFN5bmMiLCJkYXRhIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwid2l0aENyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJtYWtlUGFyYW1WYWx1ZVN0cmluZyIsInBhcmFtIiwidmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwYXJhbXMyIiwibWFwIiwia2V5IiwidG9TdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJpdGVtIiwiZmlsdGVyIiwieCIsImpvaW4iLCJjcmVhdGVGZXRjaEltcGwiLCJmZXRjaFdpdGhPcHRpb25zIiwiaW5wdXQiLCJpbml0IiwicmVxdWVzdEluaXQiLCJjYWNoZSIsImNyZWRlbnRpYWxzIiwiaW50ZWdyaXR5Iiwia2VlcGFsaXZlIiwibW9kZSIsInJlZGlyZWN0IiwicmVmZXJyZXIiLCJyZWZlcnJlclBvbGljeSIsInN0YXR1c0NvZGUiLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBWUEsU0FBU0EsaUJBQVQsQ0FBMkJDLEdBQTNCLEVBQWdEO0FBQzVDLFNBQU9BLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLENBQUMsQ0FBWCxNQUFrQixHQUFsQixHQUF3QkQsR0FBRyxDQUFDQyxLQUFKLENBQVUsQ0FBVixFQUFhLENBQUMsQ0FBZCxDQUF4QixHQUEyQ0QsR0FBbEQ7QUFDSDs7QUFFRCxTQUFTRSxnQkFBVCxDQUEwQkYsR0FBMUIsRUFBK0M7QUFDM0MsU0FBT0EsR0FBRyxDQUFDLENBQUQsQ0FBSCxLQUFXLEdBQVgsR0FB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QWxCO0FBQ0g7O0FBRTBCLE1BQVBwQyxPQUFPLEdBQVc7QUFDbEMsV0FBTyxNQUFNQSxPQUFOLEdBQWlCLGlCQUFnQixLQUFLb0MsVUFBVyxFQUF4RDtBQUNIOztBQVhnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBOb3RTdXBwb3J0ZWRFcnJvciB9IGZyb20gXCIuLi9FcnJvcnNcIjtcblxuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5pbXBvcnQge1xuICAgIEh0dHBTdGF0dXNDb2RlLFxuICAgIElIdHRwQ2xpZW50LFxuICAgIElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIsXG4gICAgSUh0dHBDbGllbnRSZXNwb25zZSxcbiAgICBRdWVyeVBhcmFtc09iamVjdCxcbn0gZnJvbSBcIi4vSUh0dHBDbGllbnRcIjtcbmltcG9ydCB7IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyIH0gZnJvbSBcIi4vSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJcIjtcblxuZnVuY3Rpb24gdHJpbVRyYWlsaW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmZ1bmN0aW9uIHRyaW1MZWFkaW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmxbMF0gPT09IFwiL1wiID8gdXJsLnNsaWNlKDEpIDogdXJsO1xufVxuXG50eXBlIEJvZHlGYWN0b3J5ID0gKCkgPT4gQm9keUluaXQgfCBudWxsO1xuXG5pbnRlcmZhY2UgSUh0dHBDbGllbnRSZXF1ZXN0Q29uZmlnIHtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgICBib2R5RmFjdG9yeT86IEJvZHlGYWN0b3J5O1xuICAgIGFjY2VwdENvZGVzOiBIdHRwU3RhdHVzQ29kZVtdO1xuICAgIHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdDtcbiAgICBjb250ZW50VHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSBpbXBsZW1lbnRzIElIdHRwQ2xpZW50UmVzcG9uc2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2hSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZmV0Y2hSZXNwb25zZTogUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5mZXRjaFJlc3BvbnNlID0gZmV0Y2hSZXNwb25zZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN0YXR1cygpOiBIdHRwU3RhdHVzQ29kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoUmVzcG9uc2Uuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBqc29uPFQ+KCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmZldGNoUmVzcG9uc2UuanNvbigpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YTtcbiAgICB9XG59XG5cbnR5cGUgUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uID0gKGNvbmZpZzogSUh0dHBDbGllbnRSZXF1ZXN0Q29uZmlnKSA9PiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZSB8IFJlc3BvbnNlPjtcblxuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciBpbXBsZW1lbnRzIElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0ZVJlcXVlc3Q6IFJlcXVlc3RFeGVjdXRpb25GdW5jdGlvbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjY2VwdENvZGVzOiBIdHRwU3RhdHVzQ29kZVtdID0gW107XG4gICAgcHJpdmF0ZSBxdWVyeVBhcmFtczogUXVlcnlQYXJhbXNPYmplY3QgPSB7fTtcbiAgICBwcml2YXRlIHNpZ25hbDogdW5kZWZpbmVkIHwgQWJvcnRTaWduYWw7XG4gICAgcHJpdmF0ZSBib2R5RmFjdG9yeT86IEJvZHlGYWN0b3J5O1xuICAgIHByaXZhdGUgY29udGVudFR5cGU/OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZXhlY3V0ZTogUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZVJlcXVlc3QgPSBleGVjdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWJvcnRTaWduYWwoc2lnbmFsOiB1bmRlZmluZWQgfCBBYm9ydFNpZ25hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLnNpZ25hbCA9IHNpZ25hbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb250ZW50VHlwZShjb250ZW50VHlwZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhCb2R5RnJvbUJ1ZmZlcihib2R5OiBmYWxzZSB8IEJ1ZmZlciB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoYm9keSA9PT0gZmFsc2UgfHwgYm9keSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBib2R5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEpzb25Cb2R5KHNlcmlhbGl6YWJsZUJvZHk6IHVua25vd24gfCB7fSB8IHVua25vd25bXSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoc2VyaWFsaXphYmxlQm9keSAhPT0gZmFsc2UgJiYgc2VyaWFsaXphYmxlQm9keSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBKU09OLnN0cmluZ2lmeShzZXJpYWxpemFibGVCb2R5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdCB8IGZhbHNlIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChxdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJhd0JvZHkoYm9keTogQnVmZmVyIHwgc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgaWYgKGJvZHkgIT09IGZhbHNlICYmIGJvZHkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHlGYWN0b3J5ID0gKCkgPT4gYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMganNvbjxUPigpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcztcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qc29uPFQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjY2VwdENvZGUoY29kZTogSHR0cFN0YXR1c0NvZGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5hY2NlcHRDb2Rlcy5wdXNoKGNvZGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdGhlbjogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U+W1widGhlblwiXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdCh0aGlzLmNyZWF0ZUNvbmZpZygpKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBIdHRwQ2xpZW50UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEh0dHBDbGllbnRSZXNwb25zZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0UHJvbWlzZS50aGVuKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbmZpZygpOiBJSHR0cENsaWVudFJlcXVlc3RDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2lnbmFsOiB0aGlzLnNpZ25hbCxcbiAgICAgICAgICAgIGJvZHlGYWN0b3J5OiB0aGlzLmJvZHlGYWN0b3J5LFxuICAgICAgICAgICAgYWNjZXB0Q29kZXM6IHRoaXMuYWNjZXB0Q29kZXMsXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLmNvbnRlbnRUeXBlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlKGZuOiBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24pOiBIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlcihmbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudCBpbXBsZW1lbnRzIElIdHRwQ2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZldGNoSW1wbDogRmV0Y2g7XG4gICAgcHJpdmF0ZSByZWFkb25seSBiYXNlVXJsOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoZW50aWNhdGlvblByb3ZpZGVyOiBIdHRwQ2xpZW50QXV0aGVudGljYXRpb25Qcm92aWRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdCA9IHt9O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBmZXRjaEltcGw6IEZldGNoLFxuICAgICAgICBiYXNlVXJsOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uUHJvdmlkZXI6IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyLFxuICAgICAgICBkZWZhdWx0UXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdFxuICAgICkge1xuICAgICAgICB0aGlzLmZldGNoSW1wbCA9IGZldGNoSW1wbDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA9PSB1bmRlZmluZWQgPyBiYXNlVXJsIDogdHJpbVRyYWlsaW5nU2xhc2goYmFzZVVybCk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFBhcmFtcyA9IGRlZmF1bHRRdWVyeVBhcmFtcztcbiAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyID0gYXV0aGVudGljYXRpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIkdFVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb3N0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBPU1RcIikodXJsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHV0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBVVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaCh1cmw6IHN0cmluZyk6IElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QoXCJQQVRDSFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiREVMRVRFXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZXRob2QobWV0aG9kOiBcIkdFVFwiIHwgXCJQT1NUXCIgfCBcIlBVVFwiIHwgXCJQQVRDSFwiIHwgXCJERUxFVEVcIik6ICh1cmw6IHN0cmluZykgPT4gSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiAodXJsOiBzdHJpbmcpID0+XG4gICAgICAgICAgICBIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIuY3JlYXRlKGFzeW5jIGNvbmZpZyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybCh1cmwsIGNvbmZpZy5xdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyh7IG1ldGhvZDogbWV0aG9kIH0sIGNvbmZpZy5jb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcihyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNpZ25hbCA9IGNvbmZpZy5zaWduYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuYm9keUZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibWV0aG9kXCIsIFwiQm9keSBpcyBub3QgYWxsb3dlZCBmb3IgR0VUIHJlcXVlc3RzXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IGNvbmZpZy5ib2R5RmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCByZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrU3RhdHVzKHJlc3BvbnNlLCBjb25maWcuYWNjZXB0Q29kZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kRGVmYXVsdFJlcXVlc3RIZWFkZXJzKG9wdGlvbnM6IFJlcXVlc3RJbml0LCBjb250ZW50VHlwZT86IHVuZGVmaW5lZCB8IHN0cmluZyk6IFJlcXVlc3RJbml0IHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBjb250ZW50VHlwZSA/PyBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IFwibm8tY2FjaGUsIG5vLXN0b3JlXCI7XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1tcIlByYWdtYVwiXSA9IFwibm8tY2FjaGVcIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiRXhwaXJlc1wiXSA9IFwiMFwiO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB1bmRlZmluZWQgfCBRdWVyeVBhcmFtc09iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSBwYXRoO1xuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5iYXNlVXJsICsgXCIvXCIgKyB0cmltTGVhZGluZ1NsYXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0UGFyYW1zID0geyAuLi50aGlzLmRlZmF1bHRQYXJhbXMsIC4uLnBhcmFtcyB9O1xuICAgICAgICBpZiAocGF0aC5pbmNsdWRlcyhcIj9cIikgJiYgcGFyYW1zICE9IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhyZXN1bHRQYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcihgUGFzc2luZyBzZWFyY2ggcGFyYW1zIGluIHVybCBhbmQgdmlhIHBhcmFtcyBvYmplY3QgaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHRoaXMuY3JlYXRlUXVlcnlTdHJpbmcocmVzdWx0UGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSwgYWNjZXB0Q29kZXM/OiBIdHRwU3RhdHVzQ29kZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGlzU3VjY2Vzc1Jlc3BvbnNlU3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDA7XG4gICAgICAgIGNvbnN0IGlzQWNjZXB0Q29kZXNJbmNsdWRlc1Jlc3BvbnNlU3RhdHVzID0gKGFjY2VwdENvZGVzID8/IFtdKS5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICBpZiAoKCFpc1N1Y2Nlc3NSZXNwb25zZVN0YXR1cyAmJiAhaXNBY2NlcHRDb2Rlc0luY2x1ZGVzUmVzcG9uc2VTdGF0dXMpIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICBsZXQgc2VydmVyUmVzcG9uc2U7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlID0gSlNPTi5wYXJzZShlcnJvclRleHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlcnZlclJlc3BvbnNlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChcImVycm9yXCIgaW4gc2VydmVyUmVzcG9uc2UgJiYgdHlwZW9mIHNlcnZlclJlc3BvbnNlLmVycm9yID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoc2VydmVyUmVzcG9uc2UuZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlLk1lc3NhZ2UgPz8gc2VydmVyUmVzcG9uc2UubWVzc2FnZSA/PyBzZXJ2ZXJSZXNwb25zZS5FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JUZXh0LCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHBvc3RTeW5jKHVybDogc3RyaW5nLCBwYXJhbXM6IHVuZGVmaW5lZCB8IFF1ZXJ5UGFyYW1zT2JqZWN0LCBkYXRhOiB7fSk6IEh0dHBTdGF0dXNDb2RlIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICByZXF1ZXN0Lm9wZW4oXCJQT1NUXCIsIHRoaXMudXJsKHVybCwgcGFyYW1zKSwgZmFsc2UpO1xuICAgICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLThcIik7XG4gICAgICAgIHJlcXVlc3Quc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIHJldHVybiByZXF1ZXN0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VQYXJhbVZhbHVlU3RyaW5nKHBhcmFtOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtKX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVRdWVyeVN0cmluZyhwYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChwYXJhbXMgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbXMyID0gcGFyYW1zO1xuICAgICAgICBsZXQgcmVzdWx0ID0gT2JqZWN0LmtleXMocGFyYW1zKVxuICAgICAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zMltrZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlUGFyYW1WYWx1ZVN0cmluZyhrZXksIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlUGFyYW1WYWx1ZVN0cmluZyhrZXksIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCBpdGVtLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4ICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiJlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHggPT4geCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAuam9pbihcIiZcIik7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCA/IFwiP1wiICsgcmVzdWx0IDogXCJcIjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRmV0Y2hJbXBsKCk6IEZldGNoIHtcbiAgICAgICAgY29uc3QgZmV0Y2hXaXRoT3B0aW9ucyA9IChpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZXRjaFVybCA9IHRoaXMudXJsKGlucHV0LCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGluaXQgPSBpbml0ID8/IHt9O1xuICAgICAgICAgICAgICAgIGluaXQuaGVhZGVycyA9IGluaXQuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnNbXCJDYWNoZS1Db250cm9sXCJdID0gXCJuby1jYWNoZSwgbm8tc3RvcmVcIjtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnNbXCJQcmFnbWFcIl0gPSBcIm5vLWNhY2hlXCI7XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzW1wiRXhwaXJlc1wiXSA9IFwiMFwiO1xuICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIoaW5pdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCBpbml0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybChpbnB1dC51cmwsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVlc3RJbml0OiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgW1wiQ2FjaGUtQ29udHJvbFwiXTogXCJuby1jYWNoZSwgbm8tc3RvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcIlByYWdtYVwiXTogXCJuby1jYWNoZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1wiRXhwaXJlc1wiXTogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pbnB1dC5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGlucHV0LnNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGU6IGlucHV0LmNhY2hlLFxuICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogaW5wdXQuY3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgICAgIGludGVncml0eTogaW5wdXQuaW50ZWdyaXR5LFxuICAgICAgICAgICAgICAgICAgICBrZWVwYWxpdmU6IGlucHV0LmtlZXBhbGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBpbnB1dC5tZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IGlucHV0Lm1vZGUsXG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBpbnB1dC5yZWRpcmVjdCxcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJyZXI6IGlucHV0LnJlZmVycmVyLFxuICAgICAgICAgICAgICAgICAgICByZWZlcnJlclBvbGljeTogaW5wdXQucmVmZXJyZXJQb2xpY3ksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0SW5pdCA9IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcihyZXF1ZXN0SW5pdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCByZXF1ZXN0SW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmZXRjaFdpdGhPcHRpb25zO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzQ29kZTogbnVtYmVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzQ29kZTogbnVtYmVyKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkh0dHBFcnJvclwiO1xuICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3VwZXIubWVzc2FnZSArIGAuIFN0YXR1c0NvZGU6ICR7dGhpcy5zdGF0dXNDb2RlfWA7XG4gICAgfVxufVxuIl19
@@ -3,8 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
-
7
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
8
- return a;
9
- };
10
6
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbXX0=
@@ -3,8 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
-
7
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
8
- return a;
9
- };
10
6
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbXX0=
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.indent = indent;
7
+
8
+ function indent(str, count) {
9
+ const indentStr = new Array(count * 2).fill(" ").join("");
10
+ return str.split("\n").map(x => {
11
+ if (x === "") {
12
+ return x;
13
+ }
14
+
15
+ return indentStr + x;
16
+ }).join("\n");
17
+ }
18
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JbmRlbnRTdHJpbmcudHMiXSwibmFtZXMiOlsiaW5kZW50Iiwic3RyIiwiY291bnQiLCJpbmRlbnRTdHIiLCJBcnJheSIsImZpbGwiLCJqb2luIiwic3BsaXQiLCJtYXAiLCJ4Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQU8sU0FBU0EsTUFBVCxDQUFnQkMsR0FBaEIsRUFBNkJDLEtBQTdCLEVBQW9EO0FBQ3ZELFFBQU1DLFNBQVMsR0FBRyxJQUFJQyxLQUFKLENBQVVGLEtBQUssR0FBRyxDQUFsQixFQUFxQkcsSUFBckIsQ0FBMEIsR0FBMUIsRUFBK0JDLElBQS9CLENBQW9DLEVBQXBDLENBQWxCO0FBQ0EsU0FBT0wsR0FBRyxDQUNMTSxLQURFLENBQ0ksSUFESixFQUVGQyxHQUZFLENBRUVDLENBQUMsSUFBSTtBQUNOLFFBQUlBLENBQUMsS0FBSyxFQUFWLEVBQWM7QUFDVixhQUFPQSxDQUFQO0FBQ0g7O0FBQ0QsV0FBT04sU0FBUyxHQUFHTSxDQUFuQjtBQUNILEdBUEUsRUFRRkgsSUFSRSxDQVFHLElBUkgsQ0FBUDtBQVNIIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGluZGVudChzdHI6IHN0cmluZywgY291bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgaW5kZW50U3RyID0gbmV3IEFycmF5KGNvdW50ICogMikuZmlsbChcIiBcIikuam9pbihcIlwiKTtcbiAgICByZXR1cm4gc3RyXG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAubWFwKHggPT4ge1xuICAgICAgICAgICAgaWYgKHggPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbmRlbnRTdHIgKyB4O1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIlxcblwiKTtcbn1cbiJdfQ==
@@ -7,15 +7,6 @@ exports.clamp = clamp;
7
7
  exports.clampUInt = clampUInt;
8
8
  exports.sign = sign;
9
9
 
10
- (function () {
11
- var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
12
- enterModule && enterModule(module);
13
- })();
14
-
15
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
16
- return a;
17
- };
18
-
19
10
  function clamp(value, min, max) {
20
11
  if (value > max) {
21
12
  return max;
@@ -45,25 +36,4 @@ function sign(value) {
45
36
 
46
37
  return 0;
47
38
  }
48
-
49
- ;
50
-
51
- (function () {
52
- var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
53
-
54
- if (!reactHotLoader) {
55
- return;
56
- }
57
-
58
- reactHotLoader.register(clamp, "clamp", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IntRangeUtils.ts");
59
- reactHotLoader.register(clampUInt, "clampUInt", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IntRangeUtils.ts");
60
- reactHotLoader.register(sign, "sign", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IntRangeUtils.ts");
61
- })();
62
-
63
- ;
64
-
65
- (function () {
66
- var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
67
- leaveModule && leaveModule(module);
68
- })();
69
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JbnRSYW5nZVV0aWxzLnRzIl0sIm5hbWVzIjpbImNsYW1wIiwidmFsdWUiLCJtaW4iLCJtYXgiLCJjbGFtcFVJbnQiLCJyZXN1bHQiLCJzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZTyxTQUFTQSxLQUFULENBQWVDLEtBQWYsRUFBOEJDLEdBQTlCLEVBQTJDQyxHQUEzQyxFQUFnRTtBQUNuRSxNQUFJRixLQUFLLEdBQUdFLEdBQVosRUFBaUI7QUFDYixXQUFPQSxHQUFQO0FBQ0g7O0FBQ0QsTUFBSUYsS0FBSyxHQUFHQyxHQUFaLEVBQWlCO0FBQ2IsV0FBT0EsR0FBUDtBQUNIOztBQUNELFNBQU9ELEtBQVA7QUFDSDs7QUFFTSxTQUFTRyxTQUFULENBQ0hILEtBREcsRUFFSEMsR0FGRyxFQUdIQyxHQUhHLEVBSW9CO0FBQ3ZCLFFBQU1FLE1BQWMsR0FBR0wsS0FBSyxDQUFDQyxLQUFELEVBQVFDLEdBQVIsRUFBYUMsR0FBYixDQUE1QixDQUR1QixDQUV2Qjs7QUFDQSxTQUFPRSxNQUFQO0FBQ0g7O0FBRU0sU0FBU0MsSUFBVCxDQUFjTCxLQUFkLEVBQXlDO0FBQzVDLE1BQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWCxXQUFPLENBQUMsQ0FBUjtBQUNIOztBQUNELE1BQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWCxXQUFPLENBQVA7QUFDSDs7QUFDRCxTQUFPLENBQVA7QUFDSDs7Ozs7Ozs7Ozs7MEJBNUJlRCxLOzBCQVVBSSxTOzBCQVVBRSxJIiwic291cmNlc0NvbnRlbnQiOlsidHlwZSBMZW5ndGg8VCBleHRlbmRzIHVua25vd25bXT4gPSBUIGV4dGVuZHMgeyBsZW5ndGg6IGluZmVyIEwgfSA/IChMIGV4dGVuZHMgbnVtYmVyID8gTCA6IG5ldmVyKSA6IG5ldmVyO1xuXG50eXBlIEJ1aWxkVHVwbGU8TCBleHRlbmRzIG51bWJlciwgVCBleHRlbmRzIHVua25vd25bXSA9IFtdPiA9IFQgZXh0ZW5kcyB7IGxlbmd0aDogTCB9XG4gICAgPyBUXG4gICAgOiBCdWlsZFR1cGxlPEwsIFsuLi5ULCB1bmtub3duXT47XG5cbnR5cGUgQWRkPEEgZXh0ZW5kcyBudW1iZXIsIEIgZXh0ZW5kcyBudW1iZXI+ID0gTGVuZ3RoPFsuLi5CdWlsZFR1cGxlPEE+LCAuLi5CdWlsZFR1cGxlPEI+XT47XG5cbmV4cG9ydCB0eXBlIEludFJhbmdlPFRNaW4gZXh0ZW5kcyBudW1iZXIsIFRNYXggZXh0ZW5kcyBudW1iZXI+ID0gVE1pbiBleHRlbmRzIFRNYXhcbiAgICA/IFRNaW5cbiAgICA6IFRNaW4gfCBJbnRSYW5nZTxBZGQ8VE1pbiwgMT4sIFRNYXg+O1xuXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodmFsdWUgPiBtYXgpIHtcbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG4gICAgaWYgKHZhbHVlIDwgbWluKSB7XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wVUludDxUTGVmdCBleHRlbmRzIG51bWJlciwgVFJpZ2h0IGV4dGVuZHMgbnVtYmVyPihcbiAgICB2YWx1ZTogbnVtYmVyLFxuICAgIG1pbjogVExlZnQsXG4gICAgbWF4OiBUUmlnaHRcbik6IEludFJhbmdlPFRMZWZ0LCBUUmlnaHQ+IHtcbiAgICBjb25zdCByZXN1bHQ6IG51bWJlciA9IGNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduKHZhbHVlOiBudW1iZXIpOiAtMSB8IDAgfCAxIHtcbiAgICBpZiAodmFsdWUgPCAwKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID4gMCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG4iXX0=
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JbnRSYW5nZVV0aWxzLnRzIl0sIm5hbWVzIjpbImNsYW1wIiwidmFsdWUiLCJtaW4iLCJtYXgiLCJjbGFtcFVJbnQiLCJyZXN1bHQiLCJzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZTyxTQUFTQSxLQUFULENBQWVDLEtBQWYsRUFBOEJDLEdBQTlCLEVBQTJDQyxHQUEzQyxFQUFnRTtBQUNuRSxNQUFJRixLQUFLLEdBQUdFLEdBQVosRUFBaUI7QUFDYixXQUFPQSxHQUFQO0FBQ0g7O0FBQ0QsTUFBSUYsS0FBSyxHQUFHQyxHQUFaLEVBQWlCO0FBQ2IsV0FBT0EsR0FBUDtBQUNIOztBQUNELFNBQU9ELEtBQVA7QUFDSDs7QUFFTSxTQUFTRyxTQUFULENBQ0hILEtBREcsRUFFSEMsR0FGRyxFQUdIQyxHQUhHLEVBSW9CO0FBQ3ZCLFFBQU1FLE1BQWMsR0FBR0wsS0FBSyxDQUFDQyxLQUFELEVBQVFDLEdBQVIsRUFBYUMsR0FBYixDQUE1QixDQUR1QixDQUV2Qjs7QUFDQSxTQUFPRSxNQUFQO0FBQ0g7O0FBRU0sU0FBU0MsSUFBVCxDQUFjTCxLQUFkLEVBQXlDO0FBQzVDLE1BQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWCxXQUFPLENBQUMsQ0FBUjtBQUNIOztBQUNELE1BQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWCxXQUFPLENBQVA7QUFDSDs7QUFDRCxTQUFPLENBQVA7QUFDSCIsInNvdXJjZXNDb250ZW50IjpbInR5cGUgTGVuZ3RoPFQgZXh0ZW5kcyB1bmtub3duW10+ID0gVCBleHRlbmRzIHsgbGVuZ3RoOiBpbmZlciBMIH0gPyAoTCBleHRlbmRzIG51bWJlciA/IEwgOiBuZXZlcikgOiBuZXZlcjtcblxudHlwZSBCdWlsZFR1cGxlPEwgZXh0ZW5kcyBudW1iZXIsIFQgZXh0ZW5kcyB1bmtub3duW10gPSBbXT4gPSBUIGV4dGVuZHMgeyBsZW5ndGg6IEwgfVxuICAgID8gVFxuICAgIDogQnVpbGRUdXBsZTxMLCBbLi4uVCwgdW5rbm93bl0+O1xuXG50eXBlIEFkZDxBIGV4dGVuZHMgbnVtYmVyLCBCIGV4dGVuZHMgbnVtYmVyPiA9IExlbmd0aDxbLi4uQnVpbGRUdXBsZTxBPiwgLi4uQnVpbGRUdXBsZTxCPl0+O1xuXG5leHBvcnQgdHlwZSBJbnRSYW5nZTxUTWluIGV4dGVuZHMgbnVtYmVyLCBUTWF4IGV4dGVuZHMgbnVtYmVyPiA9IFRNaW4gZXh0ZW5kcyBUTWF4XG4gICAgPyBUTWluXG4gICAgOiBUTWluIHwgSW50UmFuZ2U8QWRkPFRNaW4sIDE+LCBUTWF4PjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHZhbHVlID4gbWF4KSB7XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA8IG1pbikge1xuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcFVJbnQ8VExlZnQgZXh0ZW5kcyBudW1iZXIsIFRSaWdodCBleHRlbmRzIG51bWJlcj4oXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBtaW46IFRMZWZ0LFxuICAgIG1heDogVFJpZ2h0XG4pOiBJbnRSYW5nZTxUTGVmdCwgVFJpZ2h0PiB7XG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXIgPSBjbGFtcCh2YWx1ZSwgbWluLCBtYXgpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbih2YWx1ZTogbnVtYmVyKTogLTEgfCAwIHwgMSB7XG4gICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA+IDApIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAwO1xufVxuIl19
@@ -17,15 +17,6 @@ var _TypingUtils = require("./TypingUtils");
17
17
 
18
18
  var _Errors = require("./Errors");
19
19
 
20
- (function () {
21
- var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
22
- enterModule && enterModule(module);
23
- })();
24
-
25
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
26
- return a;
27
- };
28
-
29
20
  function* reverseArray(array) {
30
21
  for (let i = array.length - 1; i >= 0; i--) {
31
22
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -102,6 +93,23 @@ class IterUtils {
102
93
  return true;
103
94
  }
104
95
 
96
+ static groupBy(iterable, selectKey) {
97
+ const result = new Map();
98
+
99
+ for (const item of iterable) {
100
+ const key = selectKey(item);
101
+ const keyList = result.get(key);
102
+
103
+ if (keyList == undefined) {
104
+ result.set(key, [item]);
105
+ } else {
106
+ keyList.push(item);
107
+ }
108
+ }
109
+
110
+ return result;
111
+ }
112
+
105
113
  static sortBy(items, selector) {
106
114
  const result = [...items];
107
115
  result.sort((aItem, bItem) => {
@@ -315,37 +323,14 @@ class IterUtils {
315
323
  }
316
324
  }
317
325
 
326
+ static reduce(items, reducer, initialValue) {
327
+ let index = 0;
328
+ return Iterator.from(items).reduce((acc, item) => reducer(acc, item, index++), initialValue);
329
+ }
330
+
318
331
  }
319
332
 
320
333
  exports.IterUtils = IterUtils;
321
334
  IterUtils.count = count;
322
335
  IterUtils.concat = concat;
323
- ;
324
-
325
- (function () {
326
- var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
327
-
328
- if (!reactHotLoader) {
329
- return;
330
- }
331
-
332
- reactHotLoader.register(reverseArray, "reverseArray", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
333
- reactHotLoader.register(toAsyncIterator, "toAsyncIterator", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
334
- reactHotLoader.register(findLast, "findLast", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
335
- reactHotLoader.register(concat, "concat", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
336
- reactHotLoader.register(iterateValues, "iterateValues", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
337
- reactHotLoader.register(iterateKeys, "iterateKeys", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
338
- reactHotLoader.register(iterateEntries, "iterateEntries", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
339
- reactHotLoader.register(count, "count", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
340
- reactHotLoader.register(EmptySingleElement, "EmptySingleElement", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
341
- reactHotLoader.register(NoValueMarker, "NoValueMarker", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
342
- reactHotLoader.register(IterUtils, "IterUtils", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
343
- })();
344
-
345
- ;
346
-
347
- (function () {
348
- var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
349
- leaveModule && leaveModule(module);
350
- })();
351
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JdGVyYWJsZVV0aWxzLnRzIl0sIm5hbWVzIjpbInJldmVyc2VBcnJheSIsImFycmF5IiwiaSIsImxlbmd0aCIsInRvQXN5bmNJdGVyYXRvciIsImdlbmVyYXRvciIsIkFzeW5jSXRlcmF0b3IiLCJmcm9tIiwiZmluZExhc3QiLCJpdGVtcyIsImNvbmRpdGlvbiIsInJlc3VsdCIsIml0ZW0iLCJjb25jYXQiLCJpdGVyYWJsZXMiLCJpdGVyYWJsZUl0ZW0iLCJpdGVyYXRlVmFsdWVzIiwib2JqIiwia2V5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaXRlcmF0ZUtleXMiLCJpdGVyYXRlRW50cmllcyIsImNvdW50IiwiX2l0ZW0iLCJFbXB0eVNpbmdsZUVsZW1lbnQiLCJTeW1ib2wiLCJmb3IiLCJOb1ZhbHVlTWFya2VyIiwiSXRlclV0aWxzIiwiaXNFbXB0eSIsIml0ZXJhYmxlIiwic29ydEJ5Iiwic2VsZWN0b3IiLCJzb3J0IiwiYUl0ZW0iLCJiSXRlbSIsImxlZnRWYWx1ZSIsInJpZ2h0VmFsdWUiLCJsYXN0IiwiQXJyYXkiLCJpc0FycmF5IiwibGFzdEl0ZW0iLCJmaXJzdCIsImZpcnN0SXRlbSIsInNpbmdsZSIsInNpbmdsZUFzc2VydE1lc3NhZ2UiLCJFcnJvciIsInNpbmdsZUVsZW1lbnQiLCJpbmRleCIsInNraXBMYXN0Iiwic2tpcENvdW50IiwicHJldkl0ZW1zIiwiZmlsbCIsInJlc3VsdEl0ZW0iLCJjdXJyZW50SW5kZXgiLCJtaW5CeSIsImNvbXBhcmVGdW5jIiwibWluVmFsdWUiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1pbkJ5T3JVbmRlZmluZWQiLCJ1bmRlZmluZWQiLCJyYW5nZSIsImluU3RhcnRPckNvdW50IiwiaW5JdGVtQ291bnQiLCJzdGFydCIsIml0ZW1Db3VudCIsImludGVyc3BlcnNlIiwiaW50ZXJzcGVyc2VGbiIsImZsYXRNYXAiLCJ4IiwiemlwIiwiaXRlcmF0b3JzIiwibWFwIiwiaXQiLCJJdGVyYXRvciIsImhhc1VuZG9uZUl0ZXJhdG9ycyIsInJlc3VsdEVudHJ5IiwiaXRlcmF0b3IiLCJwdXNoIiwicmVzdWx0VmFsdWUiLCJuZXh0IiwiZG9uZSIsInZhbHVlIiwiZGlzdGluY3RCeSIsImlkU2VsZWN0b3IiLCJzZXQiLCJTZXQiLCJpZCIsImhhcyIsImFkZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUE7Ozs7Ozs7Ozs7O0FBRU8sVUFBVUEsWUFBVixDQUEwQkMsS0FBMUIsRUFBb0U7QUFDdkUsT0FBSyxJQUFJQyxDQUFDLEdBQUdELEtBQUssQ0FBQ0UsTUFBTixHQUFlLENBQTVCLEVBQStCRCxDQUFDLElBQUksQ0FBcEMsRUFBdUNBLENBQUMsRUFBeEMsRUFBNEM7QUFDeEM7QUFDQSxVQUFNRCxLQUFLLENBQUNDLENBQUQsQ0FBWDtBQUNIO0FBQ0o7O0FBRU0sU0FBU0UsZUFBVCxDQUE0QkMsU0FBNUIsRUFBMEY7QUFDN0YsU0FBT0MsYUFBYSxDQUFDQyxJQUFkLENBQW1CRixTQUFTLEVBQTVCLENBQVA7QUFDSDs7QUFFTSxTQUFTRyxRQUFULENBQXFCQyxLQUFyQixFQUF5Q0MsU0FBekMsRUFBeUY7QUFDNUYsTUFBSUMsTUFBSjs7QUFDQSxPQUFLLE1BQU1DLElBQVgsSUFBbUJILEtBQW5CLEVBQTBCO0FBQ3RCLFFBQUlDLFNBQVMsQ0FBQ0UsSUFBRCxDQUFiLEVBQXFCO0FBQ2pCRCxNQUFBQSxNQUFNLEdBQUdDLElBQVQ7QUFDSDtBQUNKOztBQUNELFNBQU9ELE1BQVA7QUFDSDs7QUFFTSxVQUFVRSxNQUFWLENBQW9CLEdBQUdDLFNBQXZCLEVBQTJFO0FBQzlFLE9BQUssTUFBTUMsWUFBWCxJQUEyQkQsU0FBM0IsRUFBc0M7QUFDbEMsV0FBT0MsWUFBUDtBQUNIO0FBQ0o7O0FBRU0sVUFBVUMsYUFBVixDQUFpRUMsR0FBakUsRUFBeUc7QUFDNUcsT0FBSyxNQUFNQyxHQUFYLElBQWtCRCxHQUFsQixFQUF1QjtBQUNu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QUlELFdBQVcsQ0FBQ0UsSUFBaEIsRUFBc0I7QUFDbEJMLFlBQUFBLFdBQVcsQ0FBQ0UsSUFBWixDQUFpQmxCLFNBQWpCO0FBQ0FXLFlBQUFBLFNBQVMsQ0FBQ3hFLENBQUQsQ0FBVCxHQUFlNEIsYUFBZjtBQUNILFdBSEQsTUFHTztBQUNIaUQsWUFBQUEsV0FBVyxDQUFDRSxJQUFaLENBQWlCQyxXQUFXLENBQUNHLEtBQTdCO0FBQ0FQLFlBQUFBLGtCQUFrQixHQUFHLElBQXJCO0FBQ0g7QUFDSjtBQUNKOztBQUNELFVBQUlBLGtCQUFKLEVBQXdCO0FBQ3BCLGNBQU1DLFdBQU47QUFDSDtBQUNKO0FBQ0o7O0FBRXdCLFVBQVZPLFVBQVUsQ0FBSTdFLEtBQUosRUFBd0I4RSxVQUF4QixFQUFzRTtBQUMzRixVQUFNQyxHQUFHLEdBQUcsSUFBSUMsR0FBSixFQUFaOztBQUNBLFNBQUssTUFBTTdFLElBQVgsSUFBbUJILEtBQW5CLEVBQTBCO0FBQ3RCLFlBQU1pRixFQUFFLEdBQUdILFVBQVUsQ0FBQzNFLElBQUQsQ0FBckI7O0FBQ0EsVUFBSSxDQUFDNEUsR0FBRyxDQUFDRyxHQUFKLENBQVFELEVBQVIsQ0FBTCxFQUFrQjtBQUNkRixRQUFBQSxHQUFHLENBQUNJLEdBQUosQ0FBUUYsRUFBUjtBQUNBLGNBQU05RSxJQUFOO0FBQ0g7QUFDSjtBQUNKOztBQTFNa0I7OztBQUFWbUIsUyxDQUNLTixLLEdBQVFBLEs7QUFEYk0sUyxDQUVLbEIsTSxHQUFTQSxNOzs7Ozs7Ozs7OzBCQXZFVmIsWTswQkFPREksZTswQkFJQUksUTswQkFVQ0ssTTswQkFNQUcsYTswQkFXQU8sVzswQkFXQUMsYzswQkFTREMsSzswQkFRVkUsa0I7MEJBQ0FHLGE7MEJBRU9DLFMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNaW5MZW5ndGhBcnJheSwgcmVqZWN0IH0gZnJvbSBcIi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IENvbXBhcmVGdW5jIH0gZnJvbSBcIi4vQ29tcGFyZXJzXCI7XG5pbXBvcnQgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9IGZyb20gXCIuL0Vycm9yc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24qIHJldmVyc2VBcnJheTxUPihhcnJheTogcmVhZG9ubHkgVFtdKTogSXRlcmFibGVJdGVyYXRvcjxUPiB7XG4gICAgZm9yIChsZXQgaSA9IGFycmF5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIHlpZWxkIGFycmF5W2ldITtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0FzeW5jSXRlcmF0b3I8VD4oZ2VuZXJhdG9yOiAoKSA9PiBBc3luY0dlbmVyYXRvcjxUPik6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxUPiB7XG4gICAgcmV0dXJuIEFzeW5jSXRlcmF0b3IuZnJvbShnZW5lcmF0b3IoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTGFzdDxUPihpdGVtczogSXRlcmFibGU8VD4sIGNvbmRpdGlvbjogKGl0ZW06IFQpID0+IGJvb2xlYW4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgcmVzdWx0OiBUIHwgdW5kZWZpbmVkO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICBpZiAoY29uZGl0aW9uKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBpdGVtO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogY29uY2F0PFQ+KC4uLml0ZXJhYmxlczogQXJyYXk8SXRlcmFibGU8VD4+KTogSXRlcmFibGVJdGVyYXRvcjxUPiB7XG4gICAgZm9yIChjb25zdCBpdGVyYWJsZUl0ZW0gb2YgaXRlcmFibGVzKSB7XG4gICAgICAgIHlpZWxkKiBpdGVyYWJsZUl0ZW07XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJhdGVWYWx1ZXM8VEsgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgfCBudW1iZXIsIFRWPihvYmo6IHsgW2tleSBpbiBUS106IFRWIH0pOiBJdGVyYWJsZTxUVj4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgeWllbGQgb2JqW2tleV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlS2V5czxUTz4ob2JqOiBSZWFkb25seTxUTz4pOiBJdGVyYWJsZTxFeHRyYWN0PGtleW9mIFRPLCBzdHJpbmc+PjtcbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlS2V5czxUVj4ob2JqOiBSZWFkb25seTx7IFtrZXk6IHN0cmluZ106IFRWIH0+KTogSXRlcmFibGU8c3RyaW5nPjtcbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlS2V5cyhvYmo6IFJlYWRvbmx5PHt9Pik6IEl0ZXJhYmxlPHN0cmluZz47XG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJhdGVLZXlzPFRLIGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sIHwgbnVtYmVyPihvYmo6IHsgW2tleSBpbiBUS106IHVua25vd24gfSk6IEl0ZXJhYmxlPFRLPiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICB5aWVsZCBrZXk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlRW50cmllczxUTz4ob2JqOiBSZWFkb25seTxUTz4pOiBJdGVyYWJsZTxbRXh0cmFjdDxrZXlvZiBUTywgc3RyaW5nPiwgVE9ba2V5b2YgVE9dXT47XG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZUVudHJpZXM8VFY+KG9iajogUmVhZG9ubHk8eyBba2V5OiBzdHJpbmddOiBUViB9Pik6IEl0ZXJhYmxlPFtzdHJpbmcsIFRWXT47XG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZUVudHJpZXMob2JqOiBSZWFkb25seTx7fT4pOiBJdGVyYWJsZTxbc3RyaW5nLCB1bmtub3duXT47XG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJhdGVFbnRyaWVzPFRWPihvYmo6IFJlYWRvbmx5PHsgW2tleTogc3RyaW5nXTogVFYgfT4pOiBJdGVyYWJsZTxbc3RyaW5nLCBUVl0+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICB5aWVsZCBba2V5LCBvYmpba2V5XSFdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY291bnQ8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+KTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBmb3IgKGNvbnN0IF9pdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIHJlc3VsdCsrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCBFbXB0eVNpbmdsZUVsZW1lbnQgPSBTeW1ib2wuZm9yKFwiRW1wdHlTaW5nbGVFbGVtZW50XCIpO1xuY29uc3QgTm9WYWx1ZU1hcmtlciA9IFN5bWJvbC5mb3IoXCJOb1ZhbHVlTWFya2VyXCIpO1xuXG5leHBvcnQgY2xhc3MgSXRlclV0aWxzIHtcbiAgICBwdWJsaWMgc3RhdGljIGNvdW50ID0gY291bnQ7XG4gICAgcHVibGljIHN0YXRpYyBjb25jYXQgPSBjb25jYXQ7XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzRW1wdHk8VD4oaXRlcmFibGU6IEl0ZXJhYmxlPFQ+KTogYm9vbGVhbiB7XG4gICAgICAgIGZvciAoY29uc3QgX2l0ZW0gb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNvcnRCeTxUPihpdGVtczogcmVhZG9ubHkgVFtdLCBzZWxlY3RvcjogKGl0ZW06IFQpID0+IHN0cmluZyk6IFRbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5pdGVtc107XG4gICAgICAgIHJlc3VsdC5zb3J0KChhSXRlbSwgYkl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRWYWx1ZSA9IHNlbGVjdG9yKGFJdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0VmFsdWUgPSBzZWxlY3RvcihiSXRlbSk7XG4gICAgICAgICAgICBpZiAobGVmdFZhbHVlID09PSByaWdodFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnRWYWx1ZSA8IHJpZ2h0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IE1pbkxlbmd0aEFycmF5PFQsIDE+KTogVDtcbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVDtcbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsYXN0SXRlbTogVCB8IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBsYXN0SXRlbSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhc3RJdGVtO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZmlyc3Q8VD4oaXRlbXM6IE1pbkxlbmd0aEFycmF5PFQsIDE+KTogVDtcbiAgICBwdWJsaWMgc3RhdGljIGZpcnN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiB8IHJlYWRvbmx5IFRbXSk6IHVuZGVmaW5lZCB8IFQ7XG4gICAgcHVibGljIHN0YXRpYyBmaXJzdDxUPihpdGVtczogSXRlcmFibGU8VD4gfCByZWFkb25seSBUW10pOiB1bmRlZmluZWQgfCBUIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpcnN0SXRlbTogVCB8IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBmaXJzdEl0ZW0gPSBpdGVtO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0SXRlbTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNpbmdsZTxUPihpdGVtczogcmVhZG9ubHkgVFtdIHwgSXRlcmFibGU8VD4sIHNpbmdsZUFzc2VydE1lc3NhZ2U/OiBzdHJpbmcpOiBUIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBc3NlcnRNZXNzYWdlID8/IGBTZXF1ZW5jZSBtdXN0IGNvbnRhaW4gZXhhY3RseSBzaW5nbGUgZWxlbWVudCwgYnV0IGdvdCAke2l0ZW1zLmxlbmd0aH1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtc1swXSA/PyByZWplY3QoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBzaW5nbGVFbGVtZW50OiBUIHwgdHlwZW9mIEVtcHR5U2luZ2xlRWxlbWVudCA9IEVtcHR5U2luZ2xlRWxlbWVudDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgICAgIGlmIChzaW5nbGVFbGVtZW50ICE9PSBFbXB0eVNpbmdsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlQXNzZXJ0TWVzc2FnZSA/PyBgU2VxdWVuY2UgbXVzdCBjb250YWluIGV4YWN0bHkgc2luZ2xlIGVsZW1lbnQsIGJ1dCBnb3QgYXQgbGVhc3QgMmBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2luZ2xlRWxlbWVudCA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2luZ2xlRWxlbWVudCA9PT0gRW1wdHlTaW5nbGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNpbmdsZUFzc2VydE1lc3NhZ2UgPz8gXCJTZXF1ZW5jZSBtdXN0IGNvbnRhaW4gZXhhY3RseSBzaW5nbGUgZWxlbWVudCwgYnV0IGdvdCAwXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNpbmdsZUVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljICppdGVyYXRlRW50cmllczxUPihpdGVtczogcmVhZG9ubHkgVFtdIHwgVFtdIHwgSXRlcmFibGU8VD4pOiBJdGVyYWJsZTxbbnVtYmVyLCBUXT4ge1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIHlpZWxkIFtpbmRleCwgaXRlbV07XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyAqc2tpcExhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+LCBza2lwQ291bnQ6IG51bWJlcik6IEl0ZXJhYmxlPFQ+IHtcbiAgICAgICAgaWYgKHNraXBDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgeWllbGQqIGl0ZW1zO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZJdGVtczogQXJyYXk8VCB8IHR5cGVvZiBFbXB0eVNpbmdsZUVsZW1lbnQ+ID0gbmV3IEFycmF5KHNraXBDb3VudCkuZmlsbChFbXB0eVNpbmdsZUVsZW1lbnQpO1xuICAgICAgICBsZXQgcmVzdWx0SXRlbTogVCB8IHR5cGVvZiBFbXB0eVNpbmdsZUVsZW1lbnQgPSBFbXB0eVNpbmdsZUVsZW1lbnQ7XG4gICAgICAgIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3Ig0JIg0L7QsdGJ0LXQvCwg0YHRgtGA0L7QutCwINCy0YvRiNC1INCz0LDRgNCw0L3RgtC40YDRg9C10YIg0LTQu9C40L3RgyDQvNCw0YHRgdC40LLQsFxuICAgICAgICAgICAgcmVzdWx0SXRlbSA9IHByZXZJdGVtc1tjdXJyZW50SW5kZXhdO1xuICAgICAgICAgICAgcHJldkl0ZW1zW2N1cnJlbnRJbmRleF0gPSBpdGVtO1xuICAgICAgICAgICAgY3VycmVudEluZGV4ID0gKGN1cnJlbnRJbmRleCArIDEpICUgc2tpcENvdW50O1xuICAgICAgICAgICAgaWYgKHJlc3VsdEl0ZW0gIT0gRW1wdHlTaW5nbGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0SXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbWluQnk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSB8IFRbXSB8IEl0ZXJhYmxlPFQ+LCBjb21wYXJlRnVuYzogQ29tcGFyZUZ1bmM8VD4pOiBUIHtcbiAgICAgICAgbGV0IG1pblZhbHVlOiB0eXBlb2YgTm9WYWx1ZU1hcmtlciB8IFQgPSBOb1ZhbHVlTWFya2VyO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChtaW5WYWx1ZSA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgICAgIG1pblZhbHVlID0gaXRlbTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZUZ1bmMoaXRlbSwgbWluVmFsdWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG1pblZhbHVlID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWluVmFsdWUgPT09IE5vVmFsdWVNYXJrZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIml0ZW1zXCIsIFwiSXRlbXMgc2hvdWxkIGJlIG5vdCBlbXB0eSBsaXN0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5WYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1pbkJ5T3JVbmRlZmluZWQ8VD4oXG4gICAgICAgIGl0ZW1zOiByZWFkb25seSBUW10gfCBUW10gfCBJdGVyYWJsZTxUPixcbiAgICAgICAgY29tcGFyZUZ1bmM6IENvbXBhcmVGdW5jPFQ+XG4gICAgKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGxldCBtaW5WYWx1ZTogdHlwZW9mIE5vVmFsdWVNYXJrZXIgfCBUID0gTm9WYWx1ZU1hcmtlcjtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAobWluVmFsdWUgPT09IE5vVmFsdWVNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IGl0ZW07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVGdW5jKGl0ZW0sIG1pblZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pblZhbHVlID09PSBOb1ZhbHVlTWFya2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5WYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJhbmdlKGl0ZW1Db3VudDogbnVtYmVyKTogSXRlcmFibGU8bnVtYmVyPjtcbiAgICBwdWJsaWMgc3RhdGljIHJhbmdlKHN0YXJ0OiBudW1iZXIsIGl0ZW1Db3VudDogbnVtYmVyKTogSXRlcmFibGU8bnVtYmVyPjtcbiAgICBwdWJsaWMgc3RhdGljICpyYW5nZShpblN0YXJ0T3JDb3VudDogbnVtYmVyLCBpbkl0ZW1Db3VudD86IG51bWJlcik6IEl0ZXJhYmxlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IGluSXRlbUNvdW50ID09PSB1bmRlZmluZWQgPyAwIDogaW5TdGFydE9yQ291bnQ7XG4gICAgICAgIGNvbnN0IGl0ZW1Db3VudCA9IGluSXRlbUNvdW50ID09PSB1bmRlZmluZWQgPyBpblN0YXJ0T3JDb3VudCA6IGluSXRlbUNvdW50O1xuICAgICAgICBpZiAoaXRlbUNvdW50IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwiaXRlbUNvdW50XCIsIFwiaXRlbUNvdW50IG11c3QgYmUgYSBub24gbmVnYXRpdmUgbnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgaXRlbUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHlpZWxkIGk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSDQktGB0YLQsNCy0LvRj9C10YIg0LzQtdC20LTRgyDRjdC70LXQvNC10L3RgtCw0LzQuCDQvNCw0YHRgdC40LLQsCDQt9Cw0LTQsNC90L3Ri9C5INGN0LvQtdC80LXQvdGCINC4INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINC90L7QstGL0Lkg0LzQsNGB0YHQuNCyXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBpbnRlcnNwZXJzZTxUSSwgVFM+KGl0ZW1zOiBUSVtdLCBpdGVtOiBUUyk6IEFycmF5PFRJIHwgVFM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJzcGVyc2VGbihpdGVtcywgKCkgPT4gaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkg0JLRgdGC0LDQstC70Y/QtdGCINC80LXQttC00YMg0Y3Qu9C10LzQtdC90YLQsNC80Lgg0LzQsNGB0YHQuNCy0LAg0Y3Qu9C10LzQtdC90YIsINGB0L7Qt9C00LDQstCw0LXQvNGL0Lkg0YTRg9C90LrRhtC40LXQuSwg0Lgg0LLQvtC30LLRgNCw0YnQsNC10YIg0L3QvtCy0YvQuSDQvNCw0YHRgdC40LJcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGludGVyc3BlcnNlRm48VEksIFRTPihpdGVtczogVElbXSwgaXRlbTogKG5leHRJdGVtOiBUSSwgaW5kZXg6IG51bWJlcikgPT4gVFMpOiBBcnJheTxUSSB8IFRTPiB7XG4gICAgICAgIHJldHVybiBpdGVtcy5mbGF0TWFwKCh4LCBpbmRleCkgPT4gKGluZGV4ID09PSAwID8gW3hdIDogW2l0ZW0oeCwgaW5kZXgpLCB4XSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgemlwPFQxLCBUMj4oaXRlbXMxOiBJdGVyYWJsZTxUMT4sIGl0ZW1zMjogSXRlcmFibGU8VDI+KTogSXRlcmFibGU8W1QxIHwgdW5kZWZpbmVkLCBUMiB8IHVuZGVmaW5lZF0+O1xuICAgIHB1YmxpYyBzdGF0aWMgKnppcCguLi5pdGVyYWJsZXM6IEFycmF5PEl0ZXJhYmxlPHVua25vd24+Pik6IEl0ZXJhYmxlPHVua25vd25bXT4ge1xuICAgICAgICBjb25zdCBpdGVyYXRvcnM6IEFycmF5PEl0ZXJhdG9yPHVua25vd24+IHwgdHlwZW9mIE5vVmFsdWVNYXJrZXI+ID0gaXRlcmFibGVzLm1hcChpdCA9PiBJdGVyYXRvci5mcm9tKGl0KSk7XG4gICAgICAgIGxldCBoYXNVbmRvbmVJdGVyYXRvcnMgPSB0cnVlO1xuICAgICAgICB3aGlsZSAoaGFzVW5kb25lSXRlcmF0b3JzKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRFbnRyeSA9IFtdO1xuICAgICAgICAgICAgaGFzVW5kb25lSXRlcmF0b3JzID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtpLCBpdGVyYXRvcl0gb2YgdGhpcy5pdGVyYXRlRW50cmllcyhpdGVyYXRvcnMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yID09PSBOb1ZhbHVlTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdEVudHJ5LnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRWYWx1ZSA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFZhbHVlLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEVudHJ5LnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yc1tpXSA9IE5vVmFsdWVNYXJrZXI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRFbnRyeS5wdXNoKHJlc3VsdFZhbHVlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc1VuZG9uZUl0ZXJhdG9ycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzVW5kb25lSXRlcmF0b3JzKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0RW50cnk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljICpkaXN0aW5jdEJ5PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiwgaWRTZWxlY3RvcjogKGl0ZW06IFQpID0+IHN0cmluZyk6IEl0ZXJhYmxlPFQ+IHtcbiAgICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBpZFNlbGVjdG9yKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKCFzZXQuaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgIHNldC5hZGQoaWQpO1xuICAgICAgICAgICAgICAgIHlpZWxkIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
336
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JdGVyYWJsZVV0aWxzLnRzIl0sIm5hbWVzIjpbInJldmVyc2VBcnJheSIsImFycmF5IiwiaSIsImxlbmd0aCIsInRvQXN5bmNJdGVyYXRvciIsImdlbmVyYXRvciIsIkFzeW5jSXRlcmF0b3IiLCJmcm9tIiwiZmluZExhc3QiLCJpdGVtcyIsImNvbmRpdGlvbiIsInJlc3VsdCIsIml0ZW0iLCJjb25jYXQiLCJpdGVyYWJsZXMiLCJpdGVyYWJsZUl0ZW0iLCJpdGVyYXRlVmFsdWVzIiwib2JqIiwia2V5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaXRlcmF0ZUtleXMiLCJpdGVyYXRlRW50cmllcyIsImNvdW50IiwiX2l0ZW0iLCJFbXB0eVNpbmdsZUVsZW1lbnQiLCJTeW1ib2wiLCJmb3IiLCJOb1ZhbHVlTWFya2VyIiwiSXRlclV0aWxzIiwiaXNFbXB0eSIsIml0ZXJhYmxlIiwiZ3JvdXBCeSIsInNlbGVjdEtleSIsIk1hcCIsImtleUxpc3QiLCJnZXQiLCJ1bmRlZmluZWQiLCJzZXQiLCJwdXNoIiwic29ydEJ5Iiwic2VsZWN0b3IiLCJzb3J0IiwiYUl0ZW0iLCJiSXRlbSIsImxlZnRWYWx1ZSIsInJpZ2h0VmFsdWUiLCJsYXN0IiwiQXJyYXkiLCJpc0FycmF5IiwibGFzdEl0ZW0iLCJmaXJzdCIsImZpcnN0SXRlbSIsInNpbmdsZSIsInNpbmdsZUFzc2VydE1lc3NhZ2UiLCJFcnJvciIsInNpbmdsZUVsZW1lbnQiLCJpbmRleCIsInNraXBMYXN0Iiwic2tpcENvdW50IiwicHJldkl0ZW1zIiwiZmlsbCIsInJlc3VsdEl0ZW0iLCJjdXJyZW50SW5kZXgiLCJtaW5CeSIsImNvbXBhcmVGdW5jIiwibWluVmFsdWUiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1pbkJ5T3JVbmRlZmluZWQiLCJyYW5nZSIsImluU3RhcnRPckNvdW50IiwiaW5JdGVtQ291bnQiLCJzdGFydCIsIml0ZW1Db3VudCIsImludGVyc3BlcnNlIiwiaW50ZXJzcGVyc2VGbiIsImZsYXRNYXAiLCJ4IiwiemlwIiwiaXRlcmF0b3JzIiwibWFwIiwiaXQiLCJJdGVyYXRvciIsImhhc1VuZG9uZUl0ZXJhdG9ycyIsInJlc3VsdEVudHJ5IiwiaXRlcmF0b3IiLCJyZXN1bHRWYWx1ZSIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJkaXN0aW5jdEJ5IiwiaWRTZWxlY3RvciIsIlNldCIsImlkIiwiaGFzIiwiYWRkIiwicmVkdWNlIiwicmVkdWNlciIsImluaXRpYWxWYWx1ZSIsImFjYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBRU8sVUFBVUEsWUFBVixDQUEwQkMsS0FBMUIsRUFBb0U7QUFDdkUsT0FBSyxJQUFJQyxDQUFDLEdBQUdELEtBQUssQ0FBQ0UsTUFBTixHQUFlLENBQTVCLEVBQStCRCxDQUFDLElBQUksQ0FBcEMsRUFBdUNBLENBQUMsRUFBeEMsRUFBNEM7QUFDeEM7QUFDQSxVQUFNRCxLQUFLLENBQUNDLENBQUQsQ0FBWDtBQUNIO0FBQ0o7O0FBRU0sU0FBU0UsZUFBVCxDQUE0QkMsU0FBNUIsRUFBMEY7QUFDN0YsU0FBT0MsYUFBYSxDQUFDQyxJQUFkLENBQW1CRixTQUFTLEVBQTVCLENBQVA7QUFDSDs7QUFFTSxTQUFTRyxRQUFULENBQXFCQyxLQUFyQixFQUF5Q0MsU0FBekMsRUFBeUY7QUFDNUYsTUFBSUMsTUFBSjs7QUFDQSxPQUFLLE1BQU1DLElBQVgsSUFBbUJILEtBQW5CLEVBQTBCO0FBQ3RCLFFBQUlDLFNBQVMsQ0FBQ0UsSUFBRCxDQUFiLEVBQXFCO0FBQ2pCRCxNQUFBQSxNQUFNLEdBQUdDLElBQVQ7QUFDSDtBQUNKOztBQUNELFNBQU9ELE1BQVA7QUFDSDs7QUFFTSxVQUFVRSxNQUFWLENBQW9CLEdBQUdDLFNBQXZCLEVBQTJFO0FBQzlFLE9BQUssTUFBTUMsWUFBWCxJQUEyQkQsU0FBM0IsRUFBc0M7QUFDbEMsV0FBT0MsWUFBUDtBQUNIO0FBQ0o7O0FBRU0s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RixJQUFYLElBQW1CSCxLQUFuQixFQUEwQjtBQUN0QixZQUFNc0YsRUFBRSxHQUFHRixVQUFVLENBQUNqRixJQUFELENBQXJCOztBQUNBLFVBQUksQ0FBQzRCLEdBQUcsQ0FBQ3dELEdBQUosQ0FBUUQsRUFBUixDQUFMLEVBQWtCO0FBQ2R2RCxRQUFBQSxHQUFHLENBQUN5RCxHQUFKLENBQVFGLEVBQVI7QUFDQSxjQUFNbkYsSUFBTjtBQUNIO0FBQ0o7QUFDSjs7QUFFbUIsU0FBTnNGLE1BQU0sQ0FDaEJ6RixLQURnQixFQUVoQjBGLE9BRmdCLEVBR2hCQyxZQUhnQixFQUlmO0FBQ0QsUUFBSXpDLEtBQUssR0FBRyxDQUFaO0FBQ0EsV0FBT3lCLFFBQVEsQ0FBQzdFLElBQVQsQ0FBY0UsS0FBZCxFQUFxQnlGLE1BQXJCLENBQTRCLENBQUNHLEdBQUQsRUFBTXpGLElBQU4sS0FBZXVGLE9BQU8sQ0FBQ0UsR0FBRCxFQUFNekYsSUFBTixFQUFZK0MsS0FBSyxFQUFqQixDQUFsRCxFQUF3RXlDLFlBQXhFLENBQVA7QUFDSDs7QUFsT2tCOzs7QUFBVnJFLFMsQ0FDS04sSyxHQUFRQSxLO0FBRGJNLFMsQ0FFS2xCLE0sR0FBU0EsTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1pbkxlbmd0aEFycmF5LCByZWplY3QgfSBmcm9tIFwiLi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgQ29tcGFyZUZ1bmMgfSBmcm9tIFwiLi9Db21wYXJlcnNcIjtcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gZnJvbSBcIi4vRXJyb3JzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiogcmV2ZXJzZUFycmF5PFQ+KGFycmF5OiByZWFkb25seSBUW10pOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcbiAgICBmb3IgKGxldCBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgeWllbGQgYXJyYXlbaV0hO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQXN5bmNJdGVyYXRvcjxUPihnZW5lcmF0b3I6ICgpID0+IEFzeW5jR2VuZXJhdG9yPFQ+KTogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcbiAgICByZXR1cm4gQXN5bmNJdGVyYXRvci5mcm9tKGdlbmVyYXRvcigpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMYXN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiwgY29uZGl0aW9uOiAoaXRlbTogVCkgPT4gYm9vbGVhbik6IFQgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXN1bHQ6IFQgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIGlmIChjb25kaXRpb24oaXRlbSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGl0ZW07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBjb25jYXQ8VD4oLi4uaXRlcmFibGVzOiBBcnJheTxJdGVyYWJsZTxUPj4pOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcbiAgICBmb3IgKGNvbnN0IGl0ZXJhYmxlSXRlbSBvZiBpdGVyYWJsZXMpIHtcbiAgICAgICAgeWllbGQqIGl0ZXJhYmxlSXRlbTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlcmF0ZVZhbHVlczxUSyBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCB8IG51bWJlciwgVFY+KG9iajogeyBba2V5IGluIFRLXTogVFYgfSk6IEl0ZXJhYmxlPFRWPiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICB5aWVsZCBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVLZXlzPFRPPihvYmo6IFJlYWRvbmx5PFRPPik6IEl0ZXJhYmxlPEV4dHJhY3Q8a2V5b2YgVE8sIHN0cmluZz4+O1xuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVLZXlzPFRWPihvYmo6IFJlYWRvbmx5PHsgW2tleTogc3RyaW5nXTogVFYgfT4pOiBJdGVyYWJsZTxzdHJpbmc+O1xuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVLZXlzKG9iajogUmVhZG9ubHk8e30+KTogSXRlcmFibGU8c3RyaW5nPjtcbmV4cG9ydCBmdW5jdGlvbiogaXRlcmF0ZUtleXM8VEsgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgfCBudW1iZXI+KG9iajogeyBba2V5IGluIFRLXTogdW5rbm93biB9KTogSXRlcmFibGU8VEs+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIHlpZWxkIGtleTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVFbnRyaWVzPFRPPihvYmo6IFJlYWRvbmx5PFRPPik6IEl0ZXJhYmxlPFtFeHRyYWN0PGtleW9mIFRPLCBzdHJpbmc+LCBUT1trZXlvZiBUT11dPjtcbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlRW50cmllczxUVj4ob2JqOiBSZWFkb25seTx7IFtrZXk6IHN0cmluZ106IFRWIH0+KTogSXRlcmFibGU8W3N0cmluZywgVFZdPjtcbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlRW50cmllcyhvYmo6IFJlYWRvbmx5PHt9Pik6IEl0ZXJhYmxlPFtzdHJpbmcsIHVua25vd25dPjtcbmV4cG9ydCBmdW5jdGlvbiogaXRlcmF0ZUVudHJpZXM8VFY+KG9iajogUmVhZG9ubHk8eyBba2V5OiBzdHJpbmddOiBUViB9Pik6IEl0ZXJhYmxlPFtzdHJpbmcsIFRWXT4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIHlpZWxkIFtrZXksIG9ialtrZXldIV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3VudDxUPihpdGVtczogSXRlcmFibGU8VD4pOiBudW1iZXIge1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGZvciAoY29uc3QgX2l0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgcmVzdWx0Kys7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IEVtcHR5U2luZ2xlRWxlbWVudCA9IFN5bWJvbC5mb3IoXCJFbXB0eVNpbmdsZUVsZW1lbnRcIik7XG5jb25zdCBOb1ZhbHVlTWFya2VyID0gU3ltYm9sLmZvcihcIk5vVmFsdWVNYXJrZXJcIik7XG5cbmV4cG9ydCBjbGFzcyBJdGVyVXRpbHMge1xuICAgIHB1YmxpYyBzdGF0aWMgY291bnQgPSBjb3VudDtcbiAgICBwdWJsaWMgc3RhdGljIGNvbmNhdCA9IGNvbmNhdDtcblxuICAgIHB1YmxpYyBzdGF0aWMgaXNFbXB0eTxUPihpdGVyYWJsZTogSXRlcmFibGU8VD4pOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChjb25zdCBfaXRlbSBvZiBpdGVyYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ3JvdXBCeTxULCBUS2V5PihpdGVyYWJsZTogSXRlcmFibGU8VD4sIHNlbGVjdEtleTogKGl0ZW06IFQpID0+IFRLZXkpOiBNYXA8VEtleSwgVFtdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8VEtleSwgVFtdPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNlbGVjdEtleShpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGtleUxpc3QgPSByZXN1bHQuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoa2V5TGlzdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGtleSwgW2l0ZW1dKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAga2V5TGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzb3J0Qnk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSwgc2VsZWN0b3I6IChpdGVtOiBUKSA9PiBzdHJpbmcpOiBUW10ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uaXRlbXNdO1xuICAgICAgICByZXN1bHQuc29ydCgoYUl0ZW0sIGJJdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0VmFsdWUgPSBzZWxlY3RvcihhSXRlbSk7XG4gICAgICAgICAgICBjb25zdCByaWdodFZhbHVlID0gc2VsZWN0b3IoYkl0ZW0pO1xuICAgICAgICAgICAgaWYgKGxlZnRWYWx1ZSA9PT0gcmlnaHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0VmFsdWUgPCByaWdodFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBsYXN0PFQ+KGl0ZW1zOiBNaW5MZW5ndGhBcnJheTxULCAxPik6IFQ7XG4gICAgcHVibGljIHN0YXRpYyBsYXN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiB8IHJlYWRvbmx5IFRbXSk6IHVuZGVmaW5lZCB8IFQ7XG4gICAgcHVibGljIHN0YXRpYyBsYXN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiB8IHJlYWRvbmx5IFRbXSk6IHVuZGVmaW5lZCB8IFQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGFzdEl0ZW06IFQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgbGFzdEl0ZW0gPSBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYXN0SXRlbTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZpcnN0PFQ+KGl0ZW1zOiBbVCwgLi4udW5rbm93bltdXSk6IFQ7XG4gICAgcHVibGljIHN0YXRpYyBmaXJzdDxUPihpdGVtczogTWluTGVuZ3RoQXJyYXk8VCwgMT4pOiBUO1xuICAgIHB1YmxpYyBzdGF0aWMgZmlyc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVDtcbiAgICBwdWJsaWMgc3RhdGljIGZpcnN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiB8IHJlYWRvbmx5IFRbXSk6IHVuZGVmaW5lZCB8IFQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtc1swXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlyc3RJdGVtOiBUIHwgdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGZpcnN0SXRlbSA9IGl0ZW07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RJdGVtO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2luZ2xlPFQ+KGl0ZW1zOiByZWFkb25seSBUW10gfCBJdGVyYWJsZTxUPiwgc2luZ2xlQXNzZXJ0TWVzc2FnZT86IHN0cmluZyk6IFQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFzc2VydE1lc3NhZ2UgPz8gYFNlcXVlbmNlIG11c3QgY29udGFpbiBleGFjdGx5IHNpbmdsZSBlbGVtZW50LCBidXQgZ290ICR7aXRlbXMubGVuZ3RofWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zWzBdID8/IHJlamVjdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHNpbmdsZUVsZW1lbnQ6IFQgfCB0eXBlb2YgRW1wdHlTaW5nbGVFbGVtZW50ID0gRW1wdHlTaW5nbGVFbGVtZW50O1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNpbmdsZUVsZW1lbnQgIT09IEVtcHR5U2luZ2xlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVBc3NlcnRNZXNzYWdlID8/IGBTZXF1ZW5jZSBtdXN0IGNvbnRhaW4gZXhhY3RseSBzaW5nbGUgZWxlbWVudCwgYnV0IGdvdCBhdCBsZWFzdCAyYFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzaW5nbGVFbGVtZW50ID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaW5nbGVFbGVtZW50ID09PSBFbXB0eVNpbmdsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc2luZ2xlQXNzZXJ0TWVzc2FnZSA/PyBcIlNlcXVlbmNlIG11c3QgY29udGFpbiBleGFjdGx5IHNpbmdsZSBlbGVtZW50LCBidXQgZ290IDBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2luZ2xlRWxlbWVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgKml0ZXJhdGVFbnRyaWVzPFQ+KGl0ZW1zOiByZWFkb25seSBUW10gfCBUW10gfCBJdGVyYWJsZTxUPik6IEl0ZXJhYmxlPFtudW1iZXIsIFRdPiB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgeWllbGQgW2luZGV4LCBpdGVtXTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljICpza2lwTGFzdDxUPihpdGVtczogSXRlcmFibGU8VD4sIHNraXBDb3VudDogbnVtYmVyKTogSXRlcmFibGU8VD4ge1xuICAgICAgICBpZiAoc2tpcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICB5aWVsZCogaXRlbXM7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldkl0ZW1zOiBBcnJheTxUIHwgdHlwZW9mIEVtcHR5U2luZ2xlRWxlbWVudD4gPSBuZXcgQXJyYXkoc2tpcENvdW50KS5maWxsKEVtcHR5U2luZ2xlRWxlbWVudCk7XG4gICAgICAgIGxldCByZXN1bHRJdGVtOiBUIHwgdHlwZW9mIEVtcHR5U2luZ2xlRWxlbWVudCA9IEVtcHR5U2luZ2xlRWxlbWVudDtcbiAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciDQkiDQvtCx0YnQtdC8LCDRgdGC0YDQvtC60LAg0LLRi9GI0LUg0LPQsNGA0LDQvdGC0LjRgNGD0LXRgiDQtNC70LjQvdGDINC80LDRgdGB0LjQstCwXG4gICAgICAgICAgICByZXN1bHRJdGVtID0gcHJldkl0ZW1zW2N1cnJlbnRJbmRleF07XG4gICAgICAgICAgICBwcmV2SXRlbXNbY3VycmVudEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICBjdXJyZW50SW5kZXggPSAoY3VycmVudEluZGV4ICsgMSkgJSBza2lwQ291bnQ7XG4gICAgICAgICAgICBpZiAocmVzdWx0SXRlbSAhPSBFbXB0eVNpbmdsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCByZXN1bHRJdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBtaW5CeTxUPihpdGVtczogcmVhZG9ubHkgVFtdIHwgVFtdIHwgSXRlcmFibGU8VD4sIGNvbXBhcmVGdW5jOiBDb21wYXJlRnVuYzxUPik6IFQge1xuICAgICAgICBsZXQgbWluVmFsdWU6IHR5cGVvZiBOb1ZhbHVlTWFya2VyIHwgVCA9IE5vVmFsdWVNYXJrZXI7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgaWYgKG1pblZhbHVlID09PSBOb1ZhbHVlTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBpdGVtO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wYXJlRnVuYyhpdGVtLCBtaW5WYWx1ZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaW5WYWx1ZSA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwiaXRlbXNcIiwgXCJJdGVtcyBzaG91bGQgYmUgbm90IGVtcHR5IGxpc3RcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pblZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbWluQnlPclVuZGVmaW5lZDxUPihcbiAgICAgICAgaXRlbXM6IHJlYWRvbmx5IFRbXSB8IFRbXSB8IEl0ZXJhYmxlPFQ+LFxuICAgICAgICBjb21wYXJlRnVuYzogQ29tcGFyZUZ1bmM8VD5cbiAgICApOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IG1pblZhbHVlOiB0eXBlb2YgTm9WYWx1ZU1hcmtlciB8IFQgPSBOb1ZhbHVlTWFya2VyO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChtaW5WYWx1ZSA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgICAgIG1pblZhbHVlID0gaXRlbTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZUZ1bmMoaXRlbSwgbWluVmFsdWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG1pblZhbHVlID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWluVmFsdWUgPT09IE5vVmFsdWVNYXJrZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pblZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmFuZ2UoaXRlbUNvdW50OiBudW1iZXIpOiBJdGVyYWJsZTxudW1iZXI+O1xuICAgIHB1YmxpYyBzdGF0aWMgcmFuZ2Uoc3RhcnQ6IG51bWJlciwgaXRlbUNvdW50OiBudW1iZXIpOiBJdGVyYWJsZTxudW1iZXI+O1xuICAgIHB1YmxpYyBzdGF0aWMgKnJhbmdlKGluU3RhcnRPckNvdW50OiBudW1iZXIsIGluSXRlbUNvdW50PzogbnVtYmVyKTogSXRlcmFibGU8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5JdGVtQ291bnQgPT09IHVuZGVmaW5lZCA/IDAgOiBpblN0YXJ0T3JDb3VudDtcbiAgICAgICAgY29uc3QgaXRlbUNvdW50ID0gaW5JdGVtQ291bnQgPT09IHVuZGVmaW5lZCA/IGluU3RhcnRPckNvdW50IDogaW5JdGVtQ291bnQ7XG4gICAgICAgIGlmIChpdGVtQ291bnQgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJpdGVtQ291bnRcIiwgXCJpdGVtQ291bnQgbXVzdCBiZSBhIG5vbiBuZWdhdGl2ZSBudW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBpdGVtQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgeWllbGQgaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCS0YHRgtCw0LLQu9GP0LXRgiDQvNC10LbQtNGDINGN0LvQtdC80LXQvdGC0LDQvNC4INC80LDRgdGB0LjQstCwINC30LDQtNCw0L3QvdGL0Lkg0Y3Qu9C10LzQtdC90YIg0Lgg0LLQvtC30LLRgNCw0YnQsNC10YIg0L3QvtCy0YvQuSDQvNCw0YHRgdC40LJcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGludGVyc3BlcnNlPFRJLCBUUz4oaXRlbXM6IFRJW10sIGl0ZW06IFRTKTogQXJyYXk8VEkgfCBUUz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnNwZXJzZUZuKGl0ZW1zLCAoKSA9PiBpdGVtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSDQktGB0YLQsNCy0LvRj9C10YIg0LzQtdC20LTRgyDRjdC70LXQvNC10L3RgtCw0LzQuCDQvNCw0YHRgdC40LLQsCDRjdC70LXQvNC10L3Rgiwg0YHQvtC30LTQsNCy0LDQtdC80YvQuSDRhNGD0L3QutGG0LjQtdC5LCDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDQvdC+0LLRi9C5INC80LDRgdGB0LjQslxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJzcGVyc2VGbjxUSSwgVFM+KGl0ZW1zOiBUSVtdLCBpdGVtOiAobmV4dEl0ZW06IFRJLCBpbmRleDogbnVtYmVyKSA9PiBUUyk6IEFycmF5PFRJIHwgVFM+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZsYXRNYXAoKHgsIGluZGV4KSA9PiAoaW5kZXggPT09IDAgPyBbeF0gOiBbaXRlbSh4LCBpbmRleCksIHhdKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyB6aXA8VDEsIFQyPihpdGVtczE6IEl0ZXJhYmxlPFQxPiwgaXRlbXMyOiBJdGVyYWJsZTxUMj4pOiBJdGVyYWJsZTxbVDEgfCB1bmRlZmluZWQsIFQyIHwgdW5kZWZpbmVkXT47XG4gICAgcHVibGljIHN0YXRpYyAqemlwKC4uLml0ZXJhYmxlczogQXJyYXk8SXRlcmFibGU8dW5rbm93bj4+KTogSXRlcmFibGU8dW5rbm93bltdPiB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yczogQXJyYXk8SXRlcmF0b3I8dW5rbm93bj4gfCB0eXBlb2YgTm9WYWx1ZU1hcmtlcj4gPSBpdGVyYWJsZXMubWFwKGl0ID0+IEl0ZXJhdG9yLmZyb20oaXQpKTtcbiAgICAgICAgbGV0IGhhc1VuZG9uZUl0ZXJhdG9ycyA9IHRydWU7XG4gICAgICAgIHdoaWxlIChoYXNVbmRvbmVJdGVyYXRvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdEVudHJ5ID0gW107XG4gICAgICAgICAgICBoYXNVbmRvbmVJdGVyYXRvcnMgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ksIGl0ZXJhdG9yXSBvZiB0aGlzLml0ZXJhdGVFbnRyaWVzKGl0ZXJhdG9ycykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgPT09IE5vVmFsdWVNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RW50cnkucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdFZhbHVlID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0VmFsdWUuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0RW50cnkucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JzW2ldID0gTm9WYWx1ZU1hcmtlcjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEVudHJ5LnB1c2gocmVzdWx0VmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzVW5kb25lSXRlcmF0b3JzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNVbmRvbmVJdGVyYXRvcnMpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCByZXN1bHRFbnRyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgKmRpc3RpbmN0Qnk8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+LCBpZFNlbGVjdG9yOiAoaXRlbTogVCkgPT4gc3RyaW5nKTogSXRlcmFibGU8VD4ge1xuICAgICAgICBjb25zdCBzZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGlkU2VsZWN0b3IoaXRlbSk7XG4gICAgICAgICAgICBpZiAoIXNldC5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgICAgc2V0LmFkZChpZCk7XG4gICAgICAgICAgICAgICAgeWllbGQgaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVkdWNlPFQsIFU+KFxuICAgICAgICBpdGVtczogSXRlcmFibGU8VD4sXG4gICAgICAgIHJlZHVjZXI6IChhY2N1bXVsYXRvcjogVSwgaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4gVSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBVXG4gICAgKTogVSB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIHJldHVybiBJdGVyYXRvci5mcm9tKGl0ZW1zKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gcmVkdWNlcihhY2MsIGl0ZW0sIGluZGV4KyspLCBpbml0aWFsVmFsdWUpO1xuICAgIH1cbn1cbiJdfQ==