@kontur.candy/tools 2.154.0 → 2.155.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/distr/Common/AsyncUtils.js +1 -3
  3. package/distr/Common/CandyApiClient/CandyApiClient.js +25 -138
  4. package/distr/Common/CandyApiClient/CandyApiClientContext.js +1 -8
  5. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +1 -1
  6. package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +1 -1
  7. package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +1 -2
  8. package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +1 -1
  9. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +1 -16
  10. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +1 -12
  11. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +1 -12
  12. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +1 -1
  13. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +1 -13
  14. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +1 -3
  15. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +1 -1
  16. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +1 -8
  17. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +1 -7
  18. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +9 -12
  19. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +1 -1
  20. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +1 -1
  21. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +4 -72
  22. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
  23. package/distr/Common/CandyApiClient/IsBuffer.js +1 -2
  24. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +1 -1
  25. package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +1 -1
  26. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +1 -1
  27. package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +1 -1
  28. package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +1 -1
  29. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +12 -7
  30. package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +1 -1
  31. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
  32. package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +1 -3
  33. package/distr/Common/CandyApiClient/Types/DraftFullId.js +1 -1
  34. package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js +5 -6
  35. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +9 -12
  36. package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +5 -6
  37. package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +1 -1
  38. package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +1 -1
  39. package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +5 -6
  40. package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +1 -1
  41. package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +1 -3
  42. package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +1 -1
  43. package/distr/Common/CandyApiClient/Types/Guid.js +1 -1
  44. package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js +1 -1
  45. package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +1 -1
  46. package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js +6 -0
  47. package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +5 -6
  48. package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +1 -1
  49. package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +1 -1
  50. package/distr/Common/CandyApiClient/Types/Print/PrintType.js +5 -6
  51. package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js +1 -1
  52. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +1 -1
  53. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js +1 -1
  54. package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js +1 -1
  55. package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +1 -1
  56. package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +5 -6
  57. package/distr/Common/CandyApiClient/Types/TestClassification.js +1 -1
  58. package/distr/Common/CollectionUtils.js +1 -3
  59. package/distr/Common/CommonConstants/SectionNames.js +1 -3
  60. package/distr/Common/Comparers.js +2 -16
  61. package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +1 -5
  62. package/distr/Common/EndPoints.js +1 -2
  63. package/distr/Common/Enums/ButtonSettingsTypeEnum.js +5 -6
  64. package/distr/Common/Errors.js +1 -19
  65. package/distr/Common/FormActionHandlers/ContextualActionNames.js +1 -3
  66. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +1 -1
  67. package/distr/Common/Funcs.js +1 -5
  68. package/distr/Common/GFV.js +1 -1
  69. package/distr/Common/Hooks/UseLocalStorage.js +3 -10
  70. package/distr/Common/HttpClient/AuthenticationMode.js +3 -7
  71. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +1 -3
  72. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +1 -3
  73. package/distr/Common/HttpClient/FetchImplementation/Fetch.js +1 -1
  74. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +1 -1
  75. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +6 -11
  76. package/distr/Common/HttpClient/HttpClient.js +9 -80
  77. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +1 -1
  78. package/distr/Common/HttpClient/IHttpClient.js +1 -1
  79. package/distr/Common/IndentString.js +1 -3
  80. package/distr/Common/IntRangeUtils.js +3 -10
  81. package/distr/Common/IterableUtils.js +3 -76
  82. package/distr/Common/KCLangRuntimeUtils.js +1 -87
  83. package/distr/Common/ModelPath/BuildIterationSequence.js +1 -5
  84. package/distr/Common/ModelPath/EachCurrentCollision.js +5 -6
  85. package/distr/Common/ModelPath/IEquatable.js +1 -1
  86. package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +1 -8
  87. package/distr/Common/ModelPath/Map/Map2.js +2 -24
  88. package/distr/Common/ModelPath/Map/ModelPathMap.js +1 -8
  89. package/distr/Common/ModelPath/ModelPath.js +16 -140
  90. package/distr/Common/ModelPath/ModelPathBuilder.js +1 -14
  91. package/distr/Common/ModelPath/ModelPathHelper.js +1 -2
  92. package/distr/Common/ModelPath/PathMatcher.js +5 -24
  93. package/distr/Common/ModelPath/PathSplitHelper.js +1 -6
  94. package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +1 -10
  95. package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +1 -10
  96. package/distr/Common/ModelPath/Set/ModelPathSet.js +1 -10
  97. package/distr/Common/ModelPath/Set/Set2.js +1 -16
  98. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +1 -9
  99. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +1 -1
  100. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +1 -3
  101. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +1 -17
  102. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +1 -30
  103. package/distr/Common/NidusClient/INidusClient.js +1 -3
  104. package/distr/Common/NidusClient/NidusClientContext.js +1 -14
  105. package/distr/Common/NidusClient/NidusClientImpl.js +1 -18
  106. package/distr/Common/PathConstants.js +1 -3
  107. package/distr/Common/StringArrayKey.js +1 -8
  108. package/distr/Common/TypingUtils.js +7 -26
  109. package/distr/Common/UUID.js +1 -4
  110. package/distr/Common/UseAsyncEffect.js +3 -7
  111. package/distr/Common/UseShowOnce.js +1 -17
  112. package/distr/Common/UseTypedSelector.js +1 -3
  113. package/distr/Common/getRngSchemaFilename.js +18 -0
  114. package/distr/Common/hashUtils.js +1 -4
  115. package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +1 -23
  116. package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +3 -10
  117. package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +1 -10
  118. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +5 -23
  119. package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +1 -27
  120. package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +1 -2
  121. package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +3 -10
  122. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +1 -9
  123. package/distr/Tools/src/BuildTasks/FSTask.js +1 -19
  124. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +1 -19
  125. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +1 -16
  126. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +1 -11
  127. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +1 -10
  128. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +1 -10
  129. package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +1 -10
  130. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +5 -26
  131. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +1 -38
  132. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +2 -42
  133. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +4 -39
  134. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +4 -7
  135. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +4 -10
  136. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +9 -17
  137. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +3 -5
  138. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +1 -13
  139. package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +1 -20
  140. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +3 -48
  141. package/distr/Tools/src/BuildTasks/ReadFormSource.js +7 -32
  142. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +5 -32
  143. package/distr/Tools/src/BuildTasks/Version.js +1 -10
  144. package/distr/Tools/src/BuildTasks/WriteFormMeta.js +1 -10
  145. package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +5 -9
  146. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +1 -5
  147. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +22 -71
  148. package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +1 -12
  149. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +1 -5
  150. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +1 -67
  151. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +3 -28
  152. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +3 -41
  153. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +3 -23
  154. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +3 -20
  155. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +1 -23
  156. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +1 -37
  157. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +1 -13
  158. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +1 -40
  159. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +8 -49
  160. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +1 -13
  161. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +1 -17
  162. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +1 -4
  163. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +10 -19
  164. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +12 -26
  165. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +1 -5
  166. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +1 -1
  167. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +1 -1
  168. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +10 -44
  169. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +1 -17
  170. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -5
  171. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +1 -1
  172. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +1 -27
  173. package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +11 -16
  174. package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +1 -1
  175. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +1 -1
  176. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +1 -1
  177. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +1 -4
  178. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +13 -34
  179. package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +1 -4
  180. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +1 -15
  181. package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +3 -19
  182. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}.calc.js +1 -2
  183. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/setKppValue.js +1 -2
  184. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +1 -6
  185. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +1 -11
  186. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/kppValue.js +3 -4
  187. package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +1 -4
  188. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +1 -23
  189. package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +1 -4
  190. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +7 -23
  191. package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js +26 -0
  192. package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js +48 -0
  193. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +1 -37
  194. package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +1 -4
  195. package/distr/Tools/src/CandyCLI.js +7 -56
  196. package/distr/Tools/src/CheckNodeJsVersion.js +3 -10
  197. package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +1 -10
  198. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +4 -29
  199. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +1 -6
  200. package/distr/Tools/src/Commons/ErrorUntyped.js +1 -1
  201. package/distr/Tools/src/Commons/EventObject.js +10 -20
  202. package/distr/Tools/src/Commons/ExecUtils.js +3 -9
  203. package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +1 -7
  204. package/distr/Tools/src/Commons/FormGlobsUtils.js +1 -33
  205. package/distr/Tools/src/Commons/FsUtils.js +1 -12
  206. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +1 -8
  207. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +4 -15
  208. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +1 -4
  209. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +1 -5
  210. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +1 -1
  211. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +1 -4
  212. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +1 -5
  213. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +2 -5
  214. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +1 -5
  215. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +1 -14
  216. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +1 -4
  217. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +1 -5
  218. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +1 -4
  219. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +1 -4
  220. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +1 -1
  221. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +1 -4
  222. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +1 -4
  223. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +1 -36
  224. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +1 -9
  225. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +5 -35
  226. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +9 -11
  227. package/distr/Tools/src/Commons/Locks/Lock.js +1 -8
  228. package/distr/Tools/src/Commons/Locks/LockHandle.js +1 -5
  229. package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +1 -9
  230. package/distr/Tools/src/Commons/Logging/ELKLogger.js +17 -22
  231. package/distr/Tools/src/Commons/Logging/ILogger.js +1 -5
  232. package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +3 -21
  233. package/distr/Tools/src/Commons/Logging/Logger.js +9 -29
  234. package/distr/Tools/src/Commons/Logging/StaticLogger.js +11 -15
  235. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +1 -1
  236. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +3 -37
  237. package/distr/Tools/src/Commons/PathPattern.js +1 -13
  238. package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +1 -4
  239. package/distr/Tools/src/Commons/TasksCore/BuildTask.js +1 -1
  240. package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +13 -200
  241. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +1 -20
  242. package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +7 -10
  243. package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +1 -15
  244. package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +1 -15
  245. package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -13
  246. package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +5 -11
  247. package/distr/Tools/src/Commons/TimingUtils.js +1 -2
  248. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +13 -51
  249. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +4 -14
  250. package/distr/Tools/src/GenerateReadMe.js +1 -13
  251. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  252. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.LICENSE.txt +10 -1
  253. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  254. package/distr/Tools/src/LocalServerFrontEndDist/index.js.LICENSE.txt +10 -1
  255. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  256. package/distr/Tools/src/Options/CandyToolOptions.js +3 -11
  257. package/distr/Tools/src/ReadFarmConfig.js +1 -5
  258. package/distr/Tools/src/SelfUpdate.js +4 -28
  259. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1506 -1257
  260. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.LICENSE.txt +1 -0
  261. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  262. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +843 -623
  263. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.LICENSE.txt +1 -0
  264. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  265. package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +777 -1117
  266. package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +1665 -2015
  267. package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +9 -55
  268. package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +777 -1117
  269. package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +1665 -2015
  270. package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +9 -55
  271. package/package.json +10 -10
  272. /package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/schemas/{{gfv}.rng.xml → {gfv}.0.rng.xml} +0 -0
@@ -4,37 +4,28 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.HttpError = exports.HttpClientResponse = exports.HttpClientRequestWrapper = exports.HttpClient = void 0;
7
-
8
7
  var _Errors = require("../Errors");
9
-
10
8
  function trimTrailingSlash(url) {
11
9
  return url.slice(-1) === "/" ? url.slice(0, -1) : url;
12
10
  }
13
-
14
11
  function trimLeadingSlash(url) {
15
12
  return url[0] === "/" ? url.slice(1) : url;
16
13
  }
17
-
18
14
  class HttpClientResponse {
19
15
  constructor(fetchResponse) {
20
16
  this.fetchResponse = void 0;
21
17
  this.fetchResponse = fetchResponse;
22
18
  }
23
-
24
19
  get status() {
25
20
  return this.fetchResponse.status;
26
21
  }
27
-
28
22
  async json() {
29
- const responseData = await this.fetchResponse.json(); // eslint-disable-next-line @typescript-eslint/no-unsafe-return
30
-
23
+ const responseData = await this.fetchResponse.json();
24
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
31
25
  return responseData;
32
26
  }
33
-
34
27
  }
35
-
36
28
  exports.HttpClientResponse = HttpClientResponse;
37
-
38
29
  class HttpClientRequestWrapper {
39
30
  constructor(execute) {
40
31
  this.executeRequest = void 0;
@@ -43,80 +34,63 @@ class HttpClientRequestWrapper {
43
34
  this.signal = void 0;
44
35
  this.bodyFactory = void 0;
45
36
  this.contentType = void 0;
46
-
47
37
  this.then = (...args) => {
48
38
  const resultPromise = (async () => {
49
39
  const result = await this.executeRequest(this.createConfig());
50
-
51
40
  if (result instanceof HttpClientResponse) {
52
41
  return result;
53
42
  } else {
54
43
  return new HttpClientResponse(result);
55
44
  }
56
45
  })();
57
-
58
46
  return resultPromise.then(...args);
59
47
  };
60
-
61
48
  this.executeRequest = execute;
62
49
  }
63
-
64
50
  withAbortSignal(signal) {
65
51
  this.signal = signal;
66
52
  return this;
67
53
  }
68
-
69
54
  withContentType(contentType) {
70
55
  this.contentType = contentType;
71
56
  return this;
72
57
  }
73
-
74
58
  withBodyFromBuffer(body) {
75
59
  if (body === false || body == undefined) {
76
60
  return this;
77
61
  }
78
-
79
62
  this.bodyFactory = () => body;
80
-
81
63
  return this;
82
64
  }
83
-
84
65
  withJsonBody(serializableBody) {
85
66
  if (serializableBody !== false && serializableBody != undefined) {
86
67
  this.bodyFactory = () => JSON.stringify(serializableBody);
87
68
  }
88
-
89
69
  return this;
90
70
  }
91
-
92
71
  withQueryParams(queryParams) {
93
72
  if (queryParams) {
94
- this.queryParams = { ...this.queryParams,
73
+ this.queryParams = {
74
+ ...this.queryParams,
95
75
  ...queryParams
96
76
  };
97
77
  }
98
-
99
78
  return this;
100
79
  }
101
-
102
80
  withRawBody(body) {
103
81
  if (body !== false && body != undefined) {
104
82
  this.bodyFactory = () => body;
105
83
  }
106
-
107
84
  return this;
108
85
  }
109
-
110
86
  async json() {
111
87
  const result = await this;
112
88
  return result.json();
113
89
  }
114
-
115
90
  acceptCode(code) {
116
91
  this.acceptCodes.push(code);
117
92
  return this;
118
93
  }
119
-
120
94
  createConfig() {
121
95
  return {
122
96
  signal: this.signal,
@@ -126,15 +100,11 @@ class HttpClientRequestWrapper {
126
100
  contentType: this.contentType
127
101
  };
128
102
  }
129
-
130
103
  static create(fn) {
131
104
  return new HttpClientRequestWrapper(fn);
132
105
  }
133
-
134
106
  }
135
-
136
107
  exports.HttpClientRequestWrapper = HttpClientRequestWrapper;
137
-
138
108
  class HttpClient {
139
109
  constructor(fetchImpl, baseUrl, authenticationProvider, defaultQueryParams) {
140
110
  this.fetchImpl = void 0;
@@ -146,27 +116,21 @@ class HttpClient {
146
116
  this.defaultParams = defaultQueryParams;
147
117
  this.authenticationProvider = authenticationProvider;
148
118
  }
149
-
150
119
  get(url) {
151
120
  return this.method("GET")(url);
152
121
  }
153
-
154
122
  post(url) {
155
123
  return this.method("POST")(url);
156
124
  }
157
-
158
125
  put(url) {
159
126
  return this.method("PUT")(url);
160
127
  }
161
-
162
128
  patch(url) {
163
129
  return this.method("PATCH")(url);
164
130
  }
165
-
166
131
  delete(url) {
167
132
  return this.method("DELETE")(url);
168
133
  }
169
-
170
134
  method(method) {
171
135
  return url => HttpClientRequestWrapper.create(async config => {
172
136
  const fetchUrl = this.url(url, config.queryParams);
@@ -174,28 +138,22 @@ class HttpClient {
174
138
  method: method
175
139
  }, config.contentType);
176
140
  request = this.authenticationProvider(request);
177
-
178
141
  if (config.signal) {
179
142
  request.signal = config.signal;
180
143
  }
181
-
182
144
  if (config.bodyFactory) {
183
145
  if (method === "GET") {
184
146
  throw new _Errors.InvalidArgumentError("method", "Body is not allowed for GET requests");
185
147
  }
186
-
187
148
  request.body = config.bodyFactory();
188
149
  }
189
-
190
150
  const response = await this.fetchImpl(fetchUrl, request);
191
151
  await this.checkStatus(response, config.acceptCodes);
192
152
  return response;
193
153
  });
194
154
  }
195
-
196
155
  appendDefaultRequestHeaders(options, contentType) {
197
156
  var _options$headers;
198
-
199
157
  options.headers = (_options$headers = options.headers) !== null && _options$headers !== void 0 ? _options$headers : {};
200
158
  options.headers["Content-Type"] = contentType !== null && contentType !== void 0 ? contentType : "application/json";
201
159
  options.headers["Cache-Control"] = "no-cache, no-store";
@@ -203,56 +161,45 @@ class HttpClient {
203
161
  options.headers["Expires"] = "0";
204
162
  return options;
205
163
  }
206
-
207
164
  url(path, params) {
208
165
  let result = path;
209
-
210
166
  if (this.baseUrl != undefined) {
211
167
  result = this.baseUrl + "/" + trimLeadingSlash(result);
212
168
  }
213
-
214
- const resultParams = { ...this.defaultParams,
169
+ const resultParams = {
170
+ ...this.defaultParams,
215
171
  ...params
216
172
  };
217
-
218
173
  if (path.includes("?") && params != undefined && Object.keys(resultParams).length > 0) {
219
174
  throw new _Errors.NotSupportedError(`Passing search params in url and via params object is not supported`);
220
175
  }
221
-
222
176
  result = result + this.createQueryString(resultParams);
223
177
  return result;
224
178
  }
225
-
226
179
  async checkStatus(response, acceptCodes) {
227
180
  const isSuccessResponseStatus = response.status >= 200 && response.status < 300;
228
181
  const isAcceptCodesIncludesResponseStatus = (acceptCodes !== null && acceptCodes !== void 0 ? acceptCodes : []).includes(response.status);
229
-
230
182
  if (!isSuccessResponseStatus && !isAcceptCodesIncludesResponseStatus) {
231
183
  const errorText = await response.text();
232
184
  let serverResponse;
233
-
234
185
  try {
235
186
  serverResponse = JSON.parse(errorText);
236
187
  } catch (e) {
237
188
  serverResponse = undefined;
238
189
  }
239
-
240
190
  if (serverResponse != undefined) {
241
191
  var _ref, _serverResponse$Messa;
242
-
243
192
  if ("error" in serverResponse && typeof serverResponse.error === "object") {
244
- throw new HttpError( // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
193
+ throw new HttpError(
194
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
245
195
  JSON.stringify(serverResponse.error), response.status);
246
196
  }
247
-
248
197
  throw new HttpError( // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
249
198
  (_ref = (_serverResponse$Messa = serverResponse.Message) !== null && _serverResponse$Messa !== void 0 ? _serverResponse$Messa : serverResponse.message) !== null && _ref !== void 0 ? _ref : serverResponse.Error, response.status);
250
199
  }
251
-
252
200
  throw new HttpError(errorText, response.status);
253
201
  }
254
202
  }
255
-
256
203
  postSync(url, params, data) {
257
204
  const request = new XMLHttpRequest();
258
205
  request.open("POST", this.url(url, params), false);
@@ -264,53 +211,42 @@ class HttpClient {
264
211
  json: () => JSON.parse(request.responseText)
265
212
  };
266
213
  }
267
-
268
214
  makeParamValueString(param, value) {
269
215
  return `${encodeURIComponent(param)}=${encodeURIComponent(value)}`;
270
216
  }
271
-
272
217
  createQueryString(params) {
273
218
  if (params == undefined) {
274
219
  return "";
275
220
  }
276
-
277
221
  const params2 = params;
278
222
  let result = Object.keys(params).map(key => {
279
223
  const value = params2[key];
280
-
281
224
  if (typeof value === "string") {
282
225
  return this.makeParamValueString(key, value);
283
226
  }
284
-
285
227
  if (typeof value === "number" || typeof value === "boolean") {
286
228
  return this.makeParamValueString(key, value.toString());
287
229
  }
288
-
289
230
  if (Array.isArray(value)) {
290
231
  return value.map(item => {
291
232
  if (typeof item === "string") {
292
233
  return this.makeParamValueString(key, item);
293
234
  }
294
-
295
235
  if (typeof item === "number") {
296
236
  return this.makeParamValueString(key, item.toString());
297
237
  }
298
-
299
238
  return undefined;
300
239
  }).filter(x => x != undefined).join("&");
301
240
  }
302
-
303
241
  return undefined;
304
242
  }).filter(x => x != undefined).join("&");
305
243
  result = result ? "?" + result : "";
306
244
  return result;
307
245
  }
308
-
309
246
  createFetchImpl() {
310
247
  const fetchWithOptions = (input, init) => {
311
248
  if (typeof input === "string") {
312
249
  var _init, _init$headers;
313
-
314
250
  const fetchUrl = this.url(input, undefined);
315
251
  init = (_init = init) !== null && _init !== void 0 ? _init : {};
316
252
  init.headers = (_init$headers = init.headers) !== null && _init$headers !== void 0 ? _init$headers : {};
@@ -343,14 +279,10 @@ class HttpClient {
343
279
  return this.fetchImpl(fetchUrl, requestInit);
344
280
  }
345
281
  };
346
-
347
282
  return fetchWithOptions;
348
283
  }
349
-
350
284
  }
351
-
352
285
  exports.HttpClient = HttpClient;
353
-
354
286
  class HttpError extends Error {
355
287
  constructor(message, statusCode) {
356
288
  super(message);
@@ -358,12 +290,9 @@ class HttpError extends Error {
358
290
  this.name = "HttpError";
359
291
  this.statusCode = statusCode;
360
292
  }
361
-
362
293
  get message() {
363
294
  return super.message + `. StatusCode: ${this.statusCode}`;
364
295
  }
365
-
366
296
  }
367
-
368
297
  exports.HttpError = HttpError;
369
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9IdHRwQ2xpZW50L0h0dHBDbGllbnQudHMiXSwibmFtZXMiOlsidHJpbVRyYWlsaW5nU2xhc2giLCJ1cmwiLCJzbGljZSIsInRyaW1MZWFkaW5nU2xhc2giLCJIdHRwQ2xpZW50UmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsImZldGNoUmVzcG9uc2UiLCJzdGF0dXMiLCJqc29uIiwicmVzcG9uc2VEYXRhIiwiSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIiwiZXhlY3V0ZSIsImV4ZWN1dGVSZXF1ZXN0IiwiYWNjZXB0Q29kZXMiLCJxdWVyeVBhcmFtcyIsInNpZ25hbCIsImJvZHlGYWN0b3J5IiwiY29udGVudFR5cGUiLCJ0aGVuIiwiYXJncyIsInJlc3VsdFByb21pc2UiLCJyZXN1bHQiLCJjcmVhdGVDb25maWciLCJ3aXRoQWJvcnRTaWduYWwiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJib2R5IiwidW5kZWZpbmVkIiwid2l0aEpzb25Cb2R5Iiwic2VyaWFsaXphYmxlQm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3aXRoUXVlcnlQYXJhbXMiLCJ3aXRoUmF3Qm9keSIsImFjY2VwdENvZGUiLCJjb2RlIiwicHVzaCIsImNyZWF0ZSIsImZuIiwiSHR0cENsaWVudCIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJhdXRoZW50aWNhdGlvblByb3ZpZGVyIiwiZGVmYXVsdFF1ZXJ5UGFyYW1zIiwiZGVmYXVsdFBhcmFtcyIsImdldCIsIm1ldGhvZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImRlbGV0ZSIsImNvbmZpZyIsImZldGNoVXJsIiwicmVxdWVzdCIsImFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicmVzcG9uc2UiLCJjaGVja1N0YXR1cyIsIm9wdGlvbnMiLCJoZWFkZXJzIiwicGF0aCIsInBhcmFtcyIsInJlc3VsdFBhcmFtcyIsImluY2x1ZGVzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIk5vdFN1cHBvcnRlZEVycm9yIiwiY3JlYXRlUXVlcnlTdHJpbmciLCJpc1N1Y2Nlc3NSZXNwb25zZVN0YXR1cyIsImlzQWNjZXB0Q29kZXNJbmNsdWRlc1Jlc3BvbnNlU3RhdHVzIiwiZXJyb3JUZXh0IiwidGV4dCIsInNlcnZlclJlc3BvbnNlIiwicGFyc2UiLCJlIiwiZXJyb3IiLCJIdHRwRXJyb3IiLCJNZXNzYWdlIiwibWVzc2FnZSIsIkVycm9yIiwicG9zdFN5bmMiLCJkYXRhIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwid2l0aENyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJyZXNwb25zZVRleHQiLCJtYWtlUGFyYW1WYWx1ZVN0cmluZyIsInBhcmFtIiwidmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwYXJhbXMyIiwibWFwIiwia2V5IiwidG9TdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJpdGVtIiwiZmlsdGVyIiwieCIsImpvaW4iLCJjcmVhdGVGZXRjaEltcGwiLCJmZXRjaFdpdGhPcHRpb25zIiwiaW5wdXQiLCJpbml0IiwicmVxdWVzdEluaXQiLCJjYWNoZSIsImNyZWRlbnRpYWxzIiwiaW50ZWdyaXR5Iiwia2VlcGFsaXZlIiwibW9kZSIsInJlZGlyZWN0IiwicmVmZXJyZXIiLCJyZWZlcnJlclBvbGljeSIsInN0YXR1c0NvZGUiLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBYUEsU0FBU0EsaUJBQVQsQ0FBMkJDLEdBQTNCLEVBQWdEO0FBQzVDLFNBQU9BLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLENBQUMsQ0FBWCxNQUFrQixHQUFsQixHQUF3QkQsR0FBRyxDQUFDQyxLQUFKLENBQVUsQ0FBVixFQUFhLENBQUMsQ0FBZCxDQUF4QixHQUEyQ0QsR0FBbEQ7QUFDSDs7QUFFRCxTQUFTRSxnQkFBVCxDQUEwQkYsR0FBMUIsRUFBK0M7QUFDM0MsU0FBT0EsR0FBRyxDQUFDLENBQUQsQ0FB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TXJDLE9BQU47QUFEb0QsU0FGeENxQyxVQUV3QztBQUVwRCxTQUFLQyxJQUFMLEdBQVksV0FBWjtBQUNBLFNBQUtELFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0g7O0FBRTBCLE1BQVByQyxPQUFPLEdBQVc7QUFDbEMsV0FBTyxNQUFNQSxPQUFOLEdBQWlCLGlCQUFnQixLQUFLcUMsVUFBVyxFQUF4RDtBQUNIOztBQVhnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBOb3RTdXBwb3J0ZWRFcnJvciB9IGZyb20gXCIuLi9FcnJvcnNcIjtcblxuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5pbXBvcnQge1xuICAgIEh0dHBTdGF0dXNDb2RlLFxuICAgIElIdHRwQ2xpZW50LFxuICAgIElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIsXG4gICAgSUh0dHBDbGllbnRSZXNwb25zZSxcbiAgICBJSHR0cENsaWVudFJlc3BvbnNlU3luYyxcbiAgICBRdWVyeVBhcmFtc09iamVjdCxcbn0gZnJvbSBcIi4vSUh0dHBDbGllbnRcIjtcbmltcG9ydCB7IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyIH0gZnJvbSBcIi4vSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJcIjtcblxuZnVuY3Rpb24gdHJpbVRyYWlsaW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmZ1bmN0aW9uIHRyaW1MZWFkaW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmxbMF0gPT09IFwiL1wiID8gdXJsLnNsaWNlKDEpIDogdXJsO1xufVxuXG50eXBlIEJvZHlGYWN0b3J5ID0gKCkgPT4gQm9keUluaXQgfCBudWxsO1xuXG5pbnRlcmZhY2UgSUh0dHBDbGllbnRSZXF1ZXN0Q29uZmlnIHtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgICBib2R5RmFjdG9yeT86IEJvZHlGYWN0b3J5O1xuICAgIGFjY2VwdENvZGVzOiBIdHRwU3RhdHVzQ29kZVtdO1xuICAgIHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdDtcbiAgICBjb250ZW50VHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSBpbXBsZW1lbnRzIElIdHRwQ2xpZW50UmVzcG9uc2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2hSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZmV0Y2hSZXNwb25zZTogUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5mZXRjaFJlc3BvbnNlID0gZmV0Y2hSZXNwb25zZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN0YXR1cygpOiBIdHRwU3RhdHVzQ29kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoUmVzcG9uc2Uuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBqc29uPFQ+KCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmZldGNoUmVzcG9uc2UuanNvbigpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YTtcbiAgICB9XG59XG5cbnR5cGUgUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uID0gKGNvbmZpZzogSUh0dHBDbGllbnRSZXF1ZXN0Q29uZmlnKSA9PiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZSB8IFJlc3BvbnNlPjtcblxuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciBpbXBsZW1lbnRzIElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0ZVJlcXVlc3Q6IFJlcXVlc3RFeGVjdXRpb25GdW5jdGlvbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjY2VwdENvZGVzOiBIdHRwU3RhdHVzQ29kZVtdID0gW107XG4gICAgcHJpdmF0ZSBxdWVyeVBhcmFtczogUXVlcnlQYXJhbXNPYmplY3QgPSB7fTtcbiAgICBwcml2YXRlIHNpZ25hbDogdW5kZWZpbmVkIHwgQWJvcnRTaWduYWw7XG4gICAgcHJpdmF0ZSBib2R5RmFjdG9yeT86IEJvZHlGYWN0b3J5O1xuICAgIHByaXZhdGUgY29udGVudFR5cGU/OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZXhlY3V0ZTogUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZVJlcXVlc3QgPSBleGVjdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWJvcnRTaWduYWwoc2lnbmFsOiB1bmRlZmluZWQgfCBBYm9ydFNpZ25hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLnNpZ25hbCA9IHNpZ25hbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb250ZW50VHlwZShjb250ZW50VHlwZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhCb2R5RnJvbUJ1ZmZlcihib2R5OiBmYWxzZSB8IEJ1ZmZlciB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoYm9keSA9PT0gZmFsc2UgfHwgYm9keSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBib2R5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEpzb25Cb2R5KHNlcmlhbGl6YWJsZUJvZHk6IHVua25vd24gfCB7fSB8IHVua25vd25bXSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoc2VyaWFsaXphYmxlQm9keSAhPT0gZmFsc2UgJiYgc2VyaWFsaXphYmxlQm9keSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBKU09OLnN0cmluZ2lmeShzZXJpYWxpemFibGVCb2R5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdCB8IGZhbHNlIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChxdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJhd0JvZHkoYm9keTogQnVmZmVyIHwgc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgaWYgKGJvZHkgIT09IGZhbHNlICYmIGJvZHkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHlGYWN0b3J5ID0gKCkgPT4gYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMganNvbjxUPigpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcztcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qc29uPFQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjY2VwdENvZGUoY29kZTogSHR0cFN0YXR1c0NvZGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5hY2NlcHRDb2Rlcy5wdXNoKGNvZGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdGhlbjogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U+W1widGhlblwiXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdCh0aGlzLmNyZWF0ZUNvbmZpZygpKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBIdHRwQ2xpZW50UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEh0dHBDbGllbnRSZXNwb25zZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0UHJvbWlzZS50aGVuKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbmZpZygpOiBJSHR0cENsaWVudFJlcXVlc3RDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2lnbmFsOiB0aGlzLnNpZ25hbCxcbiAgICAgICAgICAgIGJvZHlGYWN0b3J5OiB0aGlzLmJvZHlGYWN0b3J5LFxuICAgICAgICAgICAgYWNjZXB0Q29kZXM6IHRoaXMuYWNjZXB0Q29kZXMsXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLmNvbnRlbnRUeXBlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlKGZuOiBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24pOiBIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlcihmbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudCBpbXBsZW1lbnRzIElIdHRwQ2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZldGNoSW1wbDogRmV0Y2g7XG4gICAgcHJpdmF0ZSByZWFkb25seSBiYXNlVXJsOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoZW50aWNhdGlvblByb3ZpZGVyOiBIdHRwQ2xpZW50QXV0aGVudGljYXRpb25Qcm92aWRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdCA9IHt9O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBmZXRjaEltcGw6IEZldGNoLFxuICAgICAgICBiYXNlVXJsOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uUHJvdmlkZXI6IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyLFxuICAgICAgICBkZWZhdWx0UXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdFxuICAgICkge1xuICAgICAgICB0aGlzLmZldGNoSW1wbCA9IGZldGNoSW1wbDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA9PSB1bmRlZmluZWQgPyBiYXNlVXJsIDogdHJpbVRyYWlsaW5nU2xhc2goYmFzZVVybCk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFBhcmFtcyA9IGRlZmF1bHRRdWVyeVBhcmFtcztcbiAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyID0gYXV0aGVudGljYXRpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIkdFVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb3N0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBPU1RcIikodXJsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHV0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBVVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaCh1cmw6IHN0cmluZyk6IElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QoXCJQQVRDSFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiREVMRVRFXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZXRob2QobWV0aG9kOiBcIkdFVFwiIHwgXCJQT1NUXCIgfCBcIlBVVFwiIHwgXCJQQVRDSFwiIHwgXCJERUxFVEVcIik6ICh1cmw6IHN0cmluZykgPT4gSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiAodXJsOiBzdHJpbmcpID0+XG4gICAgICAgICAgICBIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIuY3JlYXRlKGFzeW5jIGNvbmZpZyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybCh1cmwsIGNvbmZpZy5xdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyh7IG1ldGhvZDogbWV0aG9kIH0sIGNvbmZpZy5jb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcihyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNpZ25hbCA9IGNvbmZpZy5zaWduYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuYm9keUZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibWV0aG9kXCIsIFwiQm9keSBpcyBub3QgYWxsb3dlZCBmb3IgR0VUIHJlcXVlc3RzXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IGNvbmZpZy5ib2R5RmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCByZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrU3RhdHVzKHJlc3BvbnNlLCBjb25maWcuYWNjZXB0Q29kZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kRGVmYXVsdFJlcXVlc3RIZWFkZXJzKG9wdGlvbnM6IFJlcXVlc3RJbml0LCBjb250ZW50VHlwZT86IHVuZGVmaW5lZCB8IHN0cmluZyk6IFJlcXVlc3RJbml0IHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBjb250ZW50VHlwZSA/PyBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IFwibm8tY2FjaGUsIG5vLXN0b3JlXCI7XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1tcIlByYWdtYVwiXSA9IFwibm8tY2FjaGVcIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiRXhwaXJlc1wiXSA9IFwiMFwiO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB1bmRlZmluZWQgfCBRdWVyeVBhcmFtc09iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSBwYXRoO1xuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5iYXNlVXJsICsgXCIvXCIgKyB0cmltTGVhZGluZ1NsYXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0UGFyYW1zID0geyAuLi50aGlzLmRlZmF1bHRQYXJhbXMsIC4uLnBhcmFtcyB9O1xuICAgICAgICBpZiAocGF0aC5pbmNsdWRlcyhcIj9cIikgJiYgcGFyYW1zICE9IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhyZXN1bHRQYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcihgUGFzc2luZyBzZWFyY2ggcGFyYW1zIGluIHVybCBhbmQgdmlhIHBhcmFtcyBvYmplY3QgaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHRoaXMuY3JlYXRlUXVlcnlTdHJpbmcocmVzdWx0UGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSwgYWNjZXB0Q29kZXM/OiBIdHRwU3RhdHVzQ29kZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGlzU3VjY2Vzc1Jlc3BvbnNlU3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDA7XG4gICAgICAgIGNvbnN0IGlzQWNjZXB0Q29kZXNJbmNsdWRlc1Jlc3BvbnNlU3RhdHVzID0gKGFjY2VwdENvZGVzID8/IFtdKS5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICBpZiAoIWlzU3VjY2Vzc1Jlc3BvbnNlU3RhdHVzICYmICFpc0FjY2VwdENvZGVzSW5jbHVkZXNSZXNwb25zZVN0YXR1cykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgbGV0IHNlcnZlclJlc3BvbnNlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZSA9IEpTT04ucGFyc2UoZXJyb3JUZXh0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZXJ2ZXJSZXNwb25zZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXCJlcnJvclwiIGluIHNlcnZlclJlc3BvbnNlICYmIHR5cGVvZiBzZXJ2ZXJSZXNwb25zZS5lcnJvciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHNlcnZlclJlc3BvbnNlLmVycm9yKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZS5NZXNzYWdlID8/IHNlcnZlclJlc3BvbnNlLm1lc3NhZ2UgPz8gc2VydmVyUmVzcG9uc2UuRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKGVycm9yVGV4dCwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwb3N0U3luYyh1cmw6IHN0cmluZywgcGFyYW1zOiB1bmRlZmluZWQgfCBRdWVyeVBhcmFtc09iamVjdCwgZGF0YToge30pOiBJSHR0cENsaWVudFJlc3BvbnNlU3luYyB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgcmVxdWVzdC5vcGVuKFwiUE9TVFwiLCB0aGlzLnVybCh1cmwsIHBhcmFtcyksIGZhbHNlKTtcbiAgICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04XCIpO1xuICAgICAgICByZXF1ZXN0LnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgICAgIGpzb246IDxUPigpID0+IEpTT04ucGFyc2UocmVxdWVzdC5yZXNwb25zZVRleHQpIGFzIFQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlUGFyYW1WYWx1ZVN0cmluZyhwYXJhbTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUXVlcnlTdHJpbmcocGFyYW1zPzogUXVlcnlQYXJhbXNPYmplY3QpOiBzdHJpbmcge1xuICAgICAgICBpZiAocGFyYW1zID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zMiA9IHBhcmFtcztcbiAgICAgICAgbGV0IHJlc3VsdCA9IE9iamVjdC5rZXlzKHBhcmFtcylcbiAgICAgICAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtczJba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VQYXJhbVZhbHVlU3RyaW5nKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VQYXJhbVZhbHVlU3RyaW5nKGtleSwgaXRlbS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHggPT4geCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbihcIiZcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcih4ID0+IHggIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgPyBcIj9cIiArIHJlc3VsdCA6IFwiXCI7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZldGNoSW1wbCgpOiBGZXRjaCB7XG4gICAgICAgIGNvbnN0IGZldGNoV2l0aE9wdGlvbnMgPSAoaW5wdXQ6IFJlcXVlc3RJbmZvLCBpbml0PzogUmVxdWVzdEluaXQpOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybChpbnB1dCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBpbml0ID0gaW5pdCA/PyB7fTtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnMgPSBpbml0LmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IFwibm8tY2FjaGUsIG5vLXN0b3JlXCI7XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzW1wiUHJhZ21hXCJdID0gXCJuby1jYWNoZVwiO1xuICAgICAgICAgICAgICAgIGluaXQuaGVhZGVyc1tcIkV4cGlyZXNcIl0gPSBcIjBcIjtcbiAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyKGluaXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoSW1wbChmZXRjaFVybCwgaW5pdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZldGNoVXJsID0gdGhpcy51cmwoaW5wdXQudXJsLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0SW5pdDogUmVxdWVzdEluaXQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcIkNhY2hlLUNvbnRyb2xcIl06IFwibm8tY2FjaGUsIG5vLXN0b3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbXCJQcmFnbWFcIl06IFwibm8tY2FjaGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcIkV4cGlyZXNcIl06IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaW5wdXQuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBpbnB1dC5zaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlOiBpbnB1dC5jYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IGlucHV0LmNyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IGlucHV0LmludGVncml0eSxcbiAgICAgICAgICAgICAgICAgICAga2VlcGFsaXZlOiBpbnB1dC5rZWVwYWxpdmUsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogaW5wdXQubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBpbnB1dC5tb2RlLFxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogaW5wdXQucmVkaXJlY3QsXG4gICAgICAgICAgICAgICAgICAgIHJlZmVycmVyOiBpbnB1dC5yZWZlcnJlcixcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJyZXJQb2xpY3k6IGlucHV0LnJlZmVycmVyUG9saWN5LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxdWVzdEluaXQgPSB0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIocmVxdWVzdEluaXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoSW1wbChmZXRjaFVybCwgcmVxdWVzdEluaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZmV0Y2hXaXRoT3B0aW9ucztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIdHRwRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0NvZGU6IG51bWJlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1c0NvZGU6IG51bWJlcikge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJIdHRwRXJyb3JcIjtcbiAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IG1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLm1lc3NhZ2UgKyBgLiBTdGF0dXNDb2RlOiAke3RoaXMuc3RhdHVzQ29kZX1gO1xuICAgIH1cbn1cbiJdfQ==
298
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRXJyb3JzIiwicmVxdWlyZSIsInRyaW1UcmFpbGluZ1NsYXNoIiwidXJsIiwic2xpY2UiLCJ0cmltTGVhZGluZ1NsYXNoIiwiSHR0cENsaWVudFJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJmZXRjaFJlc3BvbnNlIiwic3RhdHVzIiwianNvbiIsInJlc3BvbnNlRGF0YSIsImV4cG9ydHMiLCJIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIiLCJleGVjdXRlIiwiZXhlY3V0ZVJlcXVlc3QiLCJhY2NlcHRDb2RlcyIsInF1ZXJ5UGFyYW1zIiwic2lnbmFsIiwiYm9keUZhY3RvcnkiLCJjb250ZW50VHlwZSIsInRoZW4iLCJhcmdzIiwicmVzdWx0UHJvbWlzZSIsInJlc3VsdCIsImNyZWF0ZUNvbmZpZyIsIndpdGhBYm9ydFNpZ25hbCIsIndpdGhDb250ZW50VHlwZSIsIndpdGhCb2R5RnJvbUJ1ZmZlciIsImJvZHkiLCJ1bmRlZmluZWQiLCJ3aXRoSnNvbkJvZHkiLCJzZXJpYWxpemFibGVCb2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsIndpdGhRdWVyeVBhcmFtcyIsIndpdGhSYXdCb2R5IiwiYWNjZXB0Q29kZSIsImNvZGUiLCJwdXNoIiwiY3JlYXRlIiwiZm4iLCJIdHRwQ2xpZW50IiwiZmV0Y2hJbXBsIiwiYmFzZVVybCIsImF1dGhlbnRpY2F0aW9uUHJvdmlkZXIiLCJkZWZhdWx0UXVlcnlQYXJhbXMiLCJkZWZhdWx0UGFyYW1zIiwiZ2V0IiwibWV0aG9kIiwicG9zdCIsInB1dCIsInBhdGNoIiwiZGVsZXRlIiwiY29uZmlnIiwiZmV0Y2hVcmwiLCJyZXF1ZXN0IiwiYXBwZW5kRGVmYXVsdFJlcXVlc3RIZWFkZXJzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJyZXNwb25zZSIsImNoZWNrU3RhdHVzIiwib3B0aW9ucyIsIl9vcHRpb25zJGhlYWRlcnMiLCJoZWFkZXJzIiwicGF0aCIsInBhcmFtcyIsInJlc3VsdFBhcmFtcyIsImluY2x1ZGVzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIk5vdFN1cHBvcnRlZEVycm9yIiwiY3JlYXRlUXVlcnlTdHJpbmciLCJpc1N1Y2Nlc3NSZXNwb25zZVN0YXR1cyIsImlzQWNjZXB0Q29kZXNJbmNsdWRlc1Jlc3BvbnNlU3RhdHVzIiwiZXJyb3JUZXh0IiwidGV4dCIsInNlcnZlclJlc3BvbnNlIiwicGFyc2UiLCJlIiwiX3JlZiIsIl9zZXJ2ZXJSZXNwb25zZSRNZXNzYSIsImVycm9yIiwiSHR0cEVycm9yIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJFcnJvciIsInBvc3RTeW5jIiwiZGF0YSIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIndpdGhDcmVkZW50aWFscyIsInNldFJlcXVlc3RIZWFkZXIiLCJzZW5kIiwicmVzcG9uc2VUZXh0IiwibWFrZVBhcmFtVmFsdWVTdHJpbmciLCJwYXJhbSIsInZhbHVlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicGFyYW1zMiIsIm1hcCIsImtleSIsInRvU3RyaW5nIiwiQXJyYXkiLCJpc0FycmF5IiwiaXRlbSIsImZpbHRlciIsIngiLCJqb2luIiwiY3JlYXRlRmV0Y2hJbXBsIiwiZmV0Y2hXaXRoT3B0aW9ucyIsImlucHV0IiwiaW5pdCIsIl9pbml0IiwiX2luaXQkaGVhZGVycyIsInJlcXVlc3RJbml0IiwiY2FjaGUiLCJjcmVkZW50aWFscyIsImludGVncml0eSIsImtlZXBhbGl2ZSIsIm1vZGUiLCJyZWRpcmVjdCIsInJlZmVycmVyIiwicmVmZXJyZXJQb2xpY3kiLCJzdGF0dXNDb2RlIiwibmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9IdHRwQ2xpZW50L0h0dHBDbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIE5vdFN1cHBvcnRlZEVycm9yIH0gZnJvbSBcIi4uL0Vycm9yc1wiO1xuXG5pbXBvcnQgeyBGZXRjaCB9IGZyb20gXCIuL0ZldGNoSW1wbGVtZW50YXRpb24vRmV0Y2hcIjtcbmltcG9ydCB7XG4gICAgSHR0cFN0YXR1c0NvZGUsXG4gICAgSUh0dHBDbGllbnQsXG4gICAgSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlcixcbiAgICBJSHR0cENsaWVudFJlc3BvbnNlLFxuICAgIElIdHRwQ2xpZW50UmVzcG9uc2VTeW5jLFxuICAgIFF1ZXJ5UGFyYW1zT2JqZWN0LFxufSBmcm9tIFwiLi9JSHR0cENsaWVudFwiO1xuaW1wb3J0IHsgSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi9IdHRwQ2xpZW50QXV0aGVudGljYXRpb25Qcm92aWRlclwiO1xuXG5mdW5jdGlvbiB0cmltVHJhaWxpbmdTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5zbGljZSgtMSkgPT09IFwiL1wiID8gdXJsLnNsaWNlKDAsIC0xKSA6IHVybDtcbn1cblxuZnVuY3Rpb24gdHJpbUxlYWRpbmdTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybFswXSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMSkgOiB1cmw7XG59XG5cbnR5cGUgQm9keUZhY3RvcnkgPSAoKSA9PiBCb2R5SW5pdCB8IG51bGw7XG5cbmludGVyZmFjZSBJSHR0cENsaWVudFJlcXVlc3RDb25maWcge1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAgIGJvZHlGYWN0b3J5PzogQm9keUZhY3Rvcnk7XG4gICAgYWNjZXB0Q29kZXM6IEh0dHBTdGF0dXNDb2RlW107XG4gICAgcXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zT2JqZWN0O1xuICAgIGNvbnRlbnRUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudFJlc3BvbnNlIGltcGxlbWVudHMgSUh0dHBDbGllbnRSZXNwb25zZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmZXRjaFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihmZXRjaFJlc3BvbnNlOiBSZXNwb25zZSkge1xuICAgICAgICB0aGlzLmZldGNoUmVzcG9uc2UgPSBmZXRjaFJlc3BvbnNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3RhdHVzKCk6IEh0dHBTdGF0dXNDb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hSZXNwb25zZS5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGpzb248VD4oKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2hSZXNwb25zZS5qc29uKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhO1xuICAgIH1cbn1cblxudHlwZSBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24gPSAoY29uZmlnOiBJSHR0cENsaWVudFJlcXVlc3RDb25maWcpID0+IFByb21pc2U8SHR0cENsaWVudFJlc3BvbnNlIHwgUmVzcG9uc2U+O1xuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIGltcGxlbWVudHMgSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRlUmVxdWVzdDogUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWNjZXB0Q29kZXM6IEh0dHBTdGF0dXNDb2RlW10gPSBbXTtcbiAgICBwcml2YXRlIHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdCA9IHt9O1xuICAgIHByaXZhdGUgc2lnbmFsOiB1bmRlZmluZWQgfCBBYm9ydFNpZ25hbDtcbiAgICBwcml2YXRlIGJvZHlGYWN0b3J5PzogQm9keUZhY3Rvcnk7XG4gICAgcHJpdmF0ZSBjb250ZW50VHlwZT86IHN0cmluZztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihleGVjdXRlOiBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5leGVjdXRlUmVxdWVzdCA9IGV4ZWN1dGU7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBYm9ydFNpZ25hbChzaWduYWw6IHVuZGVmaW5lZCB8IEFib3J0U2lnbmFsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuc2lnbmFsID0gc2lnbmFsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEJvZHlGcm9tQnVmZmVyKGJvZHk6IGZhbHNlIHwgQnVmZmVyIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChib2R5ID09PSBmYWxzZSB8fCBib2R5ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib2R5RmFjdG9yeSA9ICgpID0+IGJvZHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSnNvbkJvZHkoc2VyaWFsaXphYmxlQm9keTogdW5rbm93biB8IHt9IHwgdW5rbm93bltdIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChzZXJpYWxpemFibGVCb2R5ICE9PSBmYWxzZSAmJiBzZXJpYWxpemFibGVCb2R5ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5ib2R5RmFjdG9yeSA9ICgpID0+IEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6YWJsZUJvZHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zT2JqZWN0IHwgZmFsc2UgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgLi4ucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmF3Qm9keShib2R5OiBCdWZmZXIgfCBzdHJpbmcgfCBmYWxzZSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoYm9keSAhPT0gZmFsc2UgJiYgYm9keSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBib2R5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBqc29uPFQ+KCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzO1xuICAgICAgICByZXR1cm4gcmVzdWx0Lmpzb248VD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWNjZXB0Q29kZShjb2RlOiBIdHRwU3RhdHVzQ29kZSk6IHRoaXMge1xuICAgICAgICB0aGlzLmFjY2VwdENvZGVzLnB1c2goY29kZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkb25seSB0aGVuOiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZT5bXCJ0aGVuXCJdID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVSZXF1ZXN0KHRoaXMuY3JlYXRlQ29uZmlnKCkpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEh0dHBDbGllbnRSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSHR0cENsaWVudFJlc3BvbnNlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHJldHVybiByZXN1bHRQcm9taXNlLnRoZW4oLi4uYXJncyk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgY3JlYXRlQ29uZmlnKCk6IElIdHRwQ2xpZW50UmVxdWVzdENvbmZpZyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuc2lnbmFsLFxuICAgICAgICAgICAgYm9keUZhY3Rvcnk6IHRoaXMuYm9keUZhY3RvcnksXG4gICAgICAgICAgICBhY2NlcHRDb2RlczogdGhpcy5hY2NlcHRDb2RlcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHRoaXMuY29udGVudFR5cGUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoZm46IFJlcXVlc3RFeGVjdXRpb25GdW5jdGlvbik6IEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiBuZXcgSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyKGZuKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIdHRwQ2xpZW50IGltcGxlbWVudHMgSUh0dHBDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2hJbXBsOiBGZXRjaDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmw6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXI6IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFBhcmFtcz86IFF1ZXJ5UGFyYW1zT2JqZWN0ID0ge307XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGZldGNoSW1wbDogRmV0Y2gsXG4gICAgICAgIGJhc2VVcmw6IHVuZGVmaW5lZCB8IHN0cmluZyxcbiAgICAgICAgYXV0aGVudGljYXRpb25Qcm92aWRlcjogSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIsXG4gICAgICAgIGRlZmF1bHRRdWVyeVBhcmFtcz86IFF1ZXJ5UGFyYW1zT2JqZWN0XG4gICAgKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hJbXBsID0gZmV0Y2hJbXBsO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID09IHVuZGVmaW5lZCA/IGJhc2VVcmwgOiB0cmltVHJhaWxpbmdTbGFzaChiYXNlVXJsKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0UGFyYW1zID0gZGVmYXVsdFF1ZXJ5UGFyYW1zO1xuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgPSBhdXRoZW50aWNhdGlvblByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiR0VUXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBvc3QodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiUE9TVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwdXQodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiUFVUXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBhdGNoKHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBBVENIXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZSh1cmw6IHN0cmluZyk6IElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QoXCJERUxFVEVcIikodXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ldGhvZChtZXRob2Q6IFwiR0VUXCIgfCBcIlBPU1RcIiB8IFwiUFVUXCIgfCBcIlBBVENIXCIgfCBcIkRFTEVURVwiKTogKHVybDogc3RyaW5nKSA9PiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuICh1cmw6IHN0cmluZykgPT5cbiAgICAgICAgICAgIEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlci5jcmVhdGUoYXN5bmMgY29uZmlnID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZXRjaFVybCA9IHRoaXMudXJsKHVybCwgY29uZmlnLnF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuYXBwZW5kRGVmYXVsdFJlcXVlc3RIZWFkZXJzKHsgbWV0aG9kOiBtZXRob2QgfSwgY29uZmlnLmNvbnRlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyKHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2lnbmFsID0gY29uZmlnLnNpZ25hbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5ib2R5RmFjdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kID09PSBcIkdFVFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJtZXRob2RcIiwgXCJCb2R5IGlzIG5vdCBhbGxvd2VkIGZvciBHRVQgcmVxdWVzdHNcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gY29uZmlnLmJvZHlGYWN0b3J5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaEltcGwoZmV0Y2hVcmwsIHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tTdGF0dXMocmVzcG9uc2UsIGNvbmZpZy5hY2NlcHRDb2Rlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmREZWZhdWx0UmVxdWVzdEhlYWRlcnMob3B0aW9uczogUmVxdWVzdEluaXQsIGNvbnRlbnRUeXBlPzogdW5kZWZpbmVkIHwgc3RyaW5nKTogUmVxdWVzdEluaXQge1xuICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgPz8ge307XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IGNvbnRlbnRUeXBlID8/IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJDYWNoZS1Db250cm9sXCJdID0gXCJuby1jYWNoZSwgbm8tc3RvcmVcIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiUHJhZ21hXCJdID0gXCJuby1jYWNoZVwiO1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJFeHBpcmVzXCJdID0gXCIwXCI7XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHVuZGVmaW5lZCB8IFF1ZXJ5UGFyYW1zT2JqZWN0KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHBhdGg7XG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmJhc2VVcmwgKyBcIi9cIiArIHRyaW1MZWFkaW5nU2xhc2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRQYXJhbXMgPSB7IC4uLnRoaXMuZGVmYXVsdFBhcmFtcywgLi4ucGFyYW1zIH07XG4gICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKFwiP1wiKSAmJiBwYXJhbXMgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKHJlc3VsdFBhcmFtcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEVycm9yKGBQYXNzaW5nIHNlYXJjaCBwYXJhbXMgaW4gdXJsIGFuZCB2aWEgcGFyYW1zIG9iamVjdCBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgdGhpcy5jcmVhdGVRdWVyeVN0cmluZyhyZXN1bHRQYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlLCBhY2NlcHRDb2Rlcz86IEh0dHBTdGF0dXNDb2RlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgaXNTdWNjZXNzUmVzcG9uc2VTdGF0dXMgPSByZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMDtcbiAgICAgICAgY29uc3QgaXNBY2NlcHRDb2Rlc0luY2x1ZGVzUmVzcG9uc2VTdGF0dXMgPSAoYWNjZXB0Q29kZXMgPz8gW10pLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIGlmICghaXNTdWNjZXNzUmVzcG9uc2VTdGF0dXMgJiYgIWlzQWNjZXB0Q29kZXNJbmNsdWRlc1Jlc3BvbnNlU3RhdHVzKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICBsZXQgc2VydmVyUmVzcG9uc2U7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlID0gSlNPTi5wYXJzZShlcnJvclRleHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlcnZlclJlc3BvbnNlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChcImVycm9yXCIgaW4gc2VydmVyUmVzcG9uc2UgJiYgdHlwZW9mIHNlcnZlclJlc3BvbnNlLmVycm9yID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoc2VydmVyUmVzcG9uc2UuZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlLk1lc3NhZ2UgPz8gc2VydmVyUmVzcG9uc2UubWVzc2FnZSA/PyBzZXJ2ZXJSZXNwb25zZS5FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JUZXh0LCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHBvc3RTeW5jKHVybDogc3RyaW5nLCBwYXJhbXM6IHVuZGVmaW5lZCB8IFF1ZXJ5UGFyYW1zT2JqZWN0LCBkYXRhOiB7fSk6IElIdHRwQ2xpZW50UmVzcG9uc2VTeW5jIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICByZXF1ZXN0Lm9wZW4oXCJQT1NUXCIsIHRoaXMudXJsKHVybCwgcGFyYW1zKSwgZmFsc2UpO1xuICAgICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLThcIik7XG4gICAgICAgIHJlcXVlc3Quc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICAgICAganNvbjogPFQ+KCkgPT4gSlNPTi5wYXJzZShyZXF1ZXN0LnJlc3BvbnNlVGV4dCkgYXMgVCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VQYXJhbVZhbHVlU3RyaW5nKHBhcmFtOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtKX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVRdWVyeVN0cmluZyhwYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChwYXJhbXMgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbXMyID0gcGFyYW1zO1xuICAgICAgICBsZXQgcmVzdWx0ID0gT2JqZWN0LmtleXMocGFyYW1zKVxuICAgICAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zMltrZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlUGFyYW1WYWx1ZVN0cmluZyhrZXksIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlUGFyYW1WYWx1ZVN0cmluZyhrZXksIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCBpdGVtLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4ICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiJlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHggPT4geCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAuam9pbihcIiZcIik7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCA/IFwiP1wiICsgcmVzdWx0IDogXCJcIjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRmV0Y2hJbXBsKCk6IEZldGNoIHtcbiAgICAgICAgY29uc3QgZmV0Y2hXaXRoT3B0aW9ucyA9IChpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZXRjaFVybCA9IHRoaXMudXJsKGlucHV0LCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGluaXQgPSBpbml0ID8/IHt9O1xuICAgICAgICAgICAgICAgIGluaXQuaGVhZGVycyA9IGluaXQuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnNbXCJDYWNoZS1Db250cm9sXCJdID0gXCJuby1jYWNoZSwgbm8tc3RvcmVcIjtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnNbXCJQcmFnbWFcIl0gPSBcIm5vLWNhY2hlXCI7XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzW1wiRXhwaXJlc1wiXSA9IFwiMFwiO1xuICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIoaW5pdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCBpbml0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybChpbnB1dC51cmwsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVlc3RJbml0OiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgW1wiQ2FjaGUtQ29udHJvbFwiXTogXCJuby1jYWNoZSwgbm8tc3RvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcIlByYWdtYVwiXTogXCJuby1jYWNoZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1wiRXhwaXJlc1wiXTogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pbnB1dC5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGlucHV0LnNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGU6IGlucHV0LmNhY2hlLFxuICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogaW5wdXQuY3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgICAgIGludGVncml0eTogaW5wdXQuaW50ZWdyaXR5LFxuICAgICAgICAgICAgICAgICAgICBrZWVwYWxpdmU6IGlucHV0LmtlZXBhbGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBpbnB1dC5tZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IGlucHV0Lm1vZGUsXG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBpbnB1dC5yZWRpcmVjdCxcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJyZXI6IGlucHV0LnJlZmVycmVyLFxuICAgICAgICAgICAgICAgICAgICByZWZlcnJlclBvbGljeTogaW5wdXQucmVmZXJyZXJQb2xpY3ksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0SW5pdCA9IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcihyZXF1ZXN0SW5pdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCByZXF1ZXN0SW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmZXRjaFdpdGhPcHRpb25zO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzQ29kZTogbnVtYmVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzQ29kZTogbnVtYmVyKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkh0dHBFcnJvclwiO1xuICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3VwZXIubWVzc2FnZSArIGAuIFN0YXR1c0NvZGU6ICR7dGhpcy5zdGF0dXNDb2RlfWA7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdB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
@@ -3,4 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbXX0=
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vQ29tbW9uL0h0dHBDbGllbnQvSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgPSAocmVxdWVzdDogUmVxdWVzdEluaXQpID0+IFJlcXVlc3RJbml0O1xuIl0sIm1hcHBpbmdzIjoiIn0=
@@ -3,4 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbXX0=
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vQ29tbW9uL0h0dHBDbGllbnQvSUh0dHBDbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5cbmV4cG9ydCB0eXBlIEh0dHBTdGF0dXNDb2RlID0gbnVtYmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIElIdHRwQ2xpZW50UmVzcG9uc2Uge1xuICAgIGpzb248VD4oKTogUHJvbWlzZTxUPjtcbiAgICBzdGF0dXM6IEh0dHBTdGF0dXNDb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElIdHRwQ2xpZW50UmVzcG9uc2VTeW5jIHtcbiAgICBqc29uPFQ+KCk6IFQ7XG4gICAgc3RhdHVzOiBIdHRwU3RhdHVzQ29kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIGV4dGVuZHMgUHJvbWlzZUxpa2U8SUh0dHBDbGllbnRSZXNwb25zZT4ge1xuICAgIGpzb248VD4oKTogUHJvbWlzZTxUPjtcbiAgICB3aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zT2JqZWN0IHwgZmFsc2UgfCB1bmRlZmluZWQpOiB0aGlzO1xuICAgIHdpdGhKc29uQm9keShzZXJpYWxpemFibGVCb2R5OiB1bmtub3duIHwgdW5kZWZpbmVkIHwge30gfCB1bmtub3duW10pOiB0aGlzO1xuICAgIHdpdGhSYXdCb2R5KGJvZHk6IEJ1ZmZlciB8IHN0cmluZyB8IGZhbHNlIHwgdW5kZWZpbmVkKTogdGhpcztcbiAgICB3aXRoQ29udGVudFR5cGUoY29udGVudFR5cGU6IHN0cmluZyk6IHRoaXM7XG4gICAgd2l0aEJvZHlGcm9tQnVmZmVyKGJvZHk6IHVuZGVmaW5lZCB8IGZhbHNlIHwgQnVmZmVyKTogdGhpcztcbiAgICB3aXRoQWJvcnRTaWduYWwoc2lnbmFsPzogQWJvcnRTaWduYWwpOiB0aGlzO1xuICAgIGFjY2VwdENvZGUoY29kZTogSHR0cFN0YXR1c0NvZGUpOiB0aGlzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElIdHRwQ2xpZW50IHtcbiAgICBnZXQodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyO1xuICAgIHBvc3QodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyO1xuICAgIHB1dCh1cmw6IHN0cmluZyk6IElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXI7XG4gICAgcGF0Y2godXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyO1xuICAgIGRlbGV0ZSh1cmw6IHN0cmluZyk6IElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXI7XG4gICAgdXJsKHBhdGg6IHN0cmluZywgcGFyYW1zPzogdW5kZWZpbmVkIHwgUXVlcnlQYXJhbXNPYmplY3QpOiBzdHJpbmc7XG4gICAgcG9zdFN5bmModXJsOiBzdHJpbmcsIHBhcmFtczogdW5kZWZpbmVkIHwgUXVlcnlQYXJhbXNPYmplY3QsIGRhdGE6IHt9KTogSUh0dHBDbGllbnRSZXNwb25zZVN5bmM7XG4gICAgY3JlYXRlRmV0Y2hJbXBsKCk6IEZldGNoO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5UGFyYW1zT2JqZWN0IHtcbiAgICBba2V5OiBzdHJpbmddOiBudWxsIHwgdW5kZWZpbmVkIHwgbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IEFycmF5PHN0cmluZyB8IG51bWJlcj47XG59XG4iXSwibWFwcGluZ3MiOiIifQ==
@@ -4,15 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.indent = indent;
7
-
8
7
  function indent(str, count) {
9
8
  const indentStr = new Array(count * 2).fill(" ").join("");
10
9
  return str.split("\n").map(x => {
11
10
  if (x === "") {
12
11
  return x;
13
12
  }
14
-
15
13
  return indentStr + x;
16
14
  }).join("\n");
17
15
  }
18
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JbmRlbnRTdHJpbmcudHMiXSwibmFtZXMiOlsiaW5kZW50Iiwic3RyIiwiY291bnQiLCJpbmRlbnRTdHIiLCJBcnJheSIsImZpbGwiLCJqb2luIiwic3BsaXQiLCJtYXAiLCJ4Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQU8sU0FBU0EsTUFBVCxDQUFnQkMsR0FBaEIsRUFBNkJDLEtBQTdCLEVBQW9EO0FBQ3ZELFFBQU1DLFNBQVMsR0FBRyxJQUFJQyxLQUFKLENBQVVGLEtBQUssR0FBRyxDQUFsQixFQUFxQkcsSUFBckIsQ0FBMEIsR0FBMUIsRUFBK0JDLElBQS9CLENBQW9DLEVBQXBDLENBQWxCO0FBQ0EsU0FBT0wsR0FBRyxDQUNMTSxLQURFLENBQ0ksSUFESixFQUVGQyxHQUZFLENBRUVDLENBQUMsSUFBSTtBQUNOLFFBQUlBLENBQUMsS0FBSyxFQUFWLEVBQWM7QUFDVixhQUFPQSxDQUFQO0FBQ0g7O0FBQ0QsV0FBT04sU0FBUyxHQUFHTSxDQUFuQjtBQUNILEdBUEUsRUFRRkgsSUFSRSxDQVFHLElBUkgsQ0FBUDtBQVNIIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGluZGVudChzdHI6IHN0cmluZywgY291bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgaW5kZW50U3RyID0gbmV3IEFycmF5KGNvdW50ICogMikuZmlsbChcIiBcIikuam9pbihcIlwiKTtcbiAgICByZXR1cm4gc3RyXG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAubWFwKHggPT4ge1xuICAgICAgICAgICAgaWYgKHggPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbmRlbnRTdHIgKyB4O1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIlxcblwiKTtcbn1cbiJdfQ==
16
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbmRlbnQiLCJzdHIiLCJjb3VudCIsImluZGVudFN0ciIsIkFycmF5IiwiZmlsbCIsImpvaW4iLCJzcGxpdCIsIm1hcCIsIngiXSwic291cmNlcyI6WyIuLi8uLi8uLi9Db21tb24vSW5kZW50U3RyaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpbmRlbnQoc3RyOiBzdHJpbmcsIGNvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGluZGVudFN0ciA9IG5ldyBBcnJheShjb3VudCAqIDIpLmZpbGwoXCIgXCIpLmpvaW4oXCJcIik7XG4gICAgcmV0dXJuIHN0clxuICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgLm1hcCh4ID0+IHtcbiAgICAgICAgICAgIGlmICh4ID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5kZW50U3RyICsgeDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIik7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFPLFNBQVNBLE1BQU1BLENBQUNDLEdBQVcsRUFBRUMsS0FBYSxFQUFVO0VBQ3ZELE1BQU1DLFNBQVMsR0FBRyxJQUFJQyxLQUFLLENBQUNGLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQ0csSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUMsRUFBRSxDQUFDO0VBQ3pELE9BQU9MLEdBQUcsQ0FDTE0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUNYQyxHQUFHLENBQUNDLENBQUMsSUFBSTtJQUNOLElBQUlBLENBQUMsS0FBSyxFQUFFLEVBQUU7TUFDVixPQUFPQSxDQUFDO0lBQ1o7SUFDQSxPQUFPTixTQUFTLEdBQUdNLENBQUM7RUFDeEIsQ0FBQyxDQUFDLENBQ0RILElBQUksQ0FBQyxJQUFJLENBQUM7QUFDbkIifQ==
@@ -6,34 +6,27 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.clamp = clamp;
7
7
  exports.clampUInt = clampUInt;
8
8
  exports.sign = sign;
9
-
10
9
  function clamp(value, min, max) {
11
10
  if (value > max) {
12
11
  return max;
13
12
  }
14
-
15
13
  if (value < min) {
16
14
  return min;
17
15
  }
18
-
19
16
  return value;
20
17
  }
21
-
22
18
  function clampUInt(value, min, max) {
23
- const result = clamp(value, min, max); // @ts-ignore
24
-
19
+ const result = clamp(value, min, max);
20
+ // @ts-ignore
25
21
  return result;
26
22
  }
27
-
28
23
  function sign(value) {
29
24
  if (value < 0) {
30
25
  return -1;
31
26
  }
32
-
33
27
  if (value > 0) {
34
28
  return 1;
35
29
  }
36
-
37
30
  return 0;
38
31
  }
39
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JbnRSYW5nZVV0aWxzLnRzIl0sIm5hbWVzIjpbImNsYW1wIiwidmFsdWUiLCJtaW4iLCJtYXgiLCJjbGFtcFVJbnQiLCJyZXN1bHQiLCJzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZTyxTQUFTQSxLQUFULENBQWVDLEtBQWYsRUFBOEJDLEdBQTlCLEVBQTJDQyxHQUEzQyxFQUFnRTtBQUNuRSxNQUFJRixLQUFLLEdBQUdFLEdBQVosRUFBaUI7QUFDYixXQUFPQSxHQUFQO0FBQ0g7O0FBQ0QsTUFBSUYsS0FBSyxHQUFHQyxHQUFaLEVBQWlCO0FBQ2IsV0FBT0EsR0FBUDtBQUNIOztBQUNELFNBQU9ELEtBQVA7QUFDSDs7QUFFTSxTQUFTRyxTQUFULENBQ0hILEtBREcsRUFFSEMsR0FGRyxFQUdIQyxHQUhHLEVBSW9CO0FBQ3ZCLFFBQU1FLE1BQWMsR0FBR0wsS0FBSyxDQUFDQyxLQUFELEVBQVFDLEdBQVIsRUFBYUMsR0FBYixDQUE1QixDQUR1QixDQUV2Qjs7QUFDQSxTQUFPRSxNQUFQO0FBQ0g7O0FBRU0sU0FBU0MsSUFBVCxDQUFjTCxLQUFkLEVBQXlDO0FBQzVDLE1BQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWCxXQUFPLENBQUMsQ0FBUjtBQUNIOztBQUNELE1BQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWCxXQUFPLENBQVA7QUFDSDs7QUFDRCxTQUFPLENBQVA7QUFDSCIsInNvdXJjZXNDb250ZW50IjpbInR5cGUgTGVuZ3RoPFQgZXh0ZW5kcyB1bmtub3duW10+ID0gVCBleHRlbmRzIHsgbGVuZ3RoOiBpbmZlciBMIH0gPyAoTCBleHRlbmRzIG51bWJlciA/IEwgOiBuZXZlcikgOiBuZXZlcjtcblxudHlwZSBCdWlsZFR1cGxlPEwgZXh0ZW5kcyBudW1iZXIsIFQgZXh0ZW5kcyB1bmtub3duW10gPSBbXT4gPSBUIGV4dGVuZHMgeyBsZW5ndGg6IEwgfVxuICAgID8gVFxuICAgIDogQnVpbGRUdXBsZTxMLCBbLi4uVCwgdW5rbm93bl0+O1xuXG50eXBlIEFkZDxBIGV4dGVuZHMgbnVtYmVyLCBCIGV4dGVuZHMgbnVtYmVyPiA9IExlbmd0aDxbLi4uQnVpbGRUdXBsZTxBPiwgLi4uQnVpbGRUdXBsZTxCPl0+O1xuXG5leHBvcnQgdHlwZSBJbnRSYW5nZTxUTWluIGV4dGVuZHMgbnVtYmVyLCBUTWF4IGV4dGVuZHMgbnVtYmVyPiA9IFRNaW4gZXh0ZW5kcyBUTWF4XG4gICAgPyBUTWluXG4gICAgOiBUTWluIHwgSW50UmFuZ2U8QWRkPFRNaW4sIDE+LCBUTWF4PjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHZhbHVlID4gbWF4KSB7XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA8IG1pbikge1xuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcFVJbnQ8VExlZnQgZXh0ZW5kcyBudW1iZXIsIFRSaWdodCBleHRlbmRzIG51bWJlcj4oXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBtaW46IFRMZWZ0LFxuICAgIG1heDogVFJpZ2h0XG4pOiBJbnRSYW5nZTxUTGVmdCwgVFJpZ2h0PiB7XG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXIgPSBjbGFtcCh2YWx1ZSwgbWluLCBtYXgpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbih2YWx1ZTogbnVtYmVyKTogLTEgfCAwIHwgMSB7XG4gICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA+IDApIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAwO1xufVxuIl19
32
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbGFtcCIsInZhbHVlIiwibWluIiwibWF4IiwiY2xhbXBVSW50IiwicmVzdWx0Iiwic2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JbnRSYW5nZVV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInR5cGUgTGVuZ3RoPFQgZXh0ZW5kcyB1bmtub3duW10+ID0gVCBleHRlbmRzIHsgbGVuZ3RoOiBpbmZlciBMIH0gPyAoTCBleHRlbmRzIG51bWJlciA/IEwgOiBuZXZlcikgOiBuZXZlcjtcblxudHlwZSBCdWlsZFR1cGxlPEwgZXh0ZW5kcyBudW1iZXIsIFQgZXh0ZW5kcyB1bmtub3duW10gPSBbXT4gPSBUIGV4dGVuZHMgeyBsZW5ndGg6IEwgfVxuICAgID8gVFxuICAgIDogQnVpbGRUdXBsZTxMLCBbLi4uVCwgdW5rbm93bl0+O1xuXG50eXBlIEFkZDxBIGV4dGVuZHMgbnVtYmVyLCBCIGV4dGVuZHMgbnVtYmVyPiA9IExlbmd0aDxbLi4uQnVpbGRUdXBsZTxBPiwgLi4uQnVpbGRUdXBsZTxCPl0+O1xuXG5leHBvcnQgdHlwZSBJbnRSYW5nZTxUTWluIGV4dGVuZHMgbnVtYmVyLCBUTWF4IGV4dGVuZHMgbnVtYmVyPiA9IFRNaW4gZXh0ZW5kcyBUTWF4XG4gICAgPyBUTWluXG4gICAgOiBUTWluIHwgSW50UmFuZ2U8QWRkPFRNaW4sIDE+LCBUTWF4PjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHZhbHVlID4gbWF4KSB7XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA8IG1pbikge1xuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcFVJbnQ8VExlZnQgZXh0ZW5kcyBudW1iZXIsIFRSaWdodCBleHRlbmRzIG51bWJlcj4oXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBtaW46IFRMZWZ0LFxuICAgIG1heDogVFJpZ2h0XG4pOiBJbnRSYW5nZTxUTGVmdCwgVFJpZ2h0PiB7XG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXIgPSBjbGFtcCh2YWx1ZSwgbWluLCBtYXgpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbih2YWx1ZTogbnVtYmVyKTogLTEgfCAwIHwgMSB7XG4gICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA+IDApIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAwO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVlPLFNBQVNBLEtBQUtBLENBQUNDLEtBQWEsRUFBRUMsR0FBVyxFQUFFQyxHQUFXLEVBQVU7RUFDbkUsSUFBSUYsS0FBSyxHQUFHRSxHQUFHLEVBQUU7SUFDYixPQUFPQSxHQUFHO0VBQ2Q7RUFDQSxJQUFJRixLQUFLLEdBQUdDLEdBQUcsRUFBRTtJQUNiLE9BQU9BLEdBQUc7RUFDZDtFQUNBLE9BQU9ELEtBQUs7QUFDaEI7QUFFTyxTQUFTRyxTQUFTQSxDQUNyQkgsS0FBYSxFQUNiQyxHQUFVLEVBQ1ZDLEdBQVcsRUFDWTtFQUN2QixNQUFNRSxNQUFjLEdBQUdMLEtBQUssQ0FBQ0MsS0FBSyxFQUFFQyxHQUFHLEVBQUVDLEdBQUcsQ0FBQztFQUM3QztFQUNBLE9BQU9FLE1BQU07QUFDakI7QUFFTyxTQUFTQyxJQUFJQSxDQUFDTCxLQUFhLEVBQWM7RUFDNUMsSUFBSUEsS0FBSyxHQUFHLENBQUMsRUFBRTtJQUNYLE9BQU8sQ0FBQyxDQUFDO0VBQ2I7RUFDQSxJQUFJQSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0lBQ1gsT0FBTyxDQUFDO0VBQ1o7RUFDQSxPQUFPLENBQUM7QUFDWiJ9