@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
@@ -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=
@@ -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
  });
@@ -17,21 +19,10 @@ var _TypingUtils = require("../../../../Common/TypingUtils");
17
19
 
18
20
  var _AggregatedError = require("./AggregatedError");
19
21
 
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
22
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
23
 
24
24
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
25
 
26
- (function () {
27
- var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
28
- enterModule && enterModule(module);
29
- })();
30
-
31
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
32
- return a;
33
- };
34
-
35
26
  async function noop() {// empty function
36
27
  }
37
28
 
@@ -114,12 +105,6 @@ class ChainableValueProducer {
114
105
  }
115
106
  }
116
107
 
117
- // @ts-ignore
118
- __reactstandin__regenerateByEval(key, code) {
119
- // @ts-ignore
120
- this[key] = eval(code);
121
- }
122
-
123
108
  }
124
109
 
125
110
  exports.ChainableValueProducer = ChainableValueProducer;
@@ -175,12 +160,6 @@ class ObservableValueProducerBase extends ChainableValueProducer {
175
160
  }
176
161
  }
177
162
 
178
- // @ts-ignore
179
- __reactstandin__regenerateByEval(key, code) {
180
- // @ts-ignore
181
- this[key] = eval(code);
182
- }
183
-
184
163
  }
185
164
 
186
165
  exports.ObservableValueProducerBase = ObservableValueProducerBase;
@@ -363,12 +342,6 @@ class AttachValueProducer extends ChainableValueProducer {
363
342
  };
364
343
  }
365
344
 
366
- // @ts-ignore
367
- __reactstandin__regenerateByEval(key, code) {
368
- // @ts-ignore
369
- this[key] = eval(code);
370
- }
371
-
372
345
  }
373
346
 
374
347
  exports.AttachValueProducer = AttachValueProducer;
@@ -414,12 +387,6 @@ class ExecuteOnValueProducer extends ChainableValueProducer {
414
387
  });
415
388
  }
416
389
 
417
- // @ts-ignore
418
- __reactstandin__regenerateByEval(key, code) {
419
- // @ts-ignore
420
- this[key] = eval(code);
421
- }
422
-
423
390
  }
424
391
 
425
392
  exports.ExecuteOnValueProducer = ExecuteOnValueProducer;
@@ -453,12 +420,6 @@ class TransformValueProducer extends ChainableValueProducer {
453
420
  });
454
421
  }
455
422
 
456
- // @ts-ignore
457
- __reactstandin__regenerateByEval(key, code) {
458
- // @ts-ignore
459
- this[key] = eval(code);
460
- }
461
-
462
423
  }
463
424
 
464
425
  exports.TransformValueProducer = TransformValueProducer;
@@ -636,12 +597,6 @@ class SplitToChainsValueProducer extends ChainableValueProducer {
636
597
  return result;
637
598
  }
638
599
 
639
- // @ts-ignore
640
- __reactstandin__regenerateByEval(key, code) {
641
- // @ts-ignore
642
- this[key] = eval(code);
643
- }
644
-
645
600
  }
646
601
 
647
602
  exports.SplitToChainsValueProducer = SplitToChainsValueProducer;
@@ -821,12 +776,6 @@ class ParallelSplitToChainsValueProducer extends ChainableValueProducer {
821
776
  return result;
822
777
  }
823
778
 
824
- // @ts-ignore
825
- __reactstandin__regenerateByEval(key, code) {
826
- // @ts-ignore
827
- this[key] = eval(code);
828
- }
829
-
830
779
  }
831
780
 
832
781
  exports.ParallelSplitToChainsValueProducer = ParallelSplitToChainsValueProducer;
@@ -887,12 +836,6 @@ class SkipUpdatesUntilNextCompletedProducer extends ObservableValueProducerBase
887
836
  this.currentlyProcessingEmit = undefined;
888
837
  }
889
838
 
890
- // @ts-ignore
891
- __reactstandin__regenerateByEval(key, code) {
892
- // @ts-ignore
893
- this[key] = eval(code);
894
- }
895
-
896
839
  }
897
840
 
898
841
  exports.SkipUpdatesUntilNextCompletedProducer = SkipUpdatesUntilNextCompletedProducer;
@@ -908,33 +851,4 @@ function delay(timeout) {
908
851
  function isNotNullOrUndefined(input) {
909
852
  return input != undefined;
910
853
  }
911
-
912
- ;
913
-
914
- (function () {
915
- var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
916
-
917
- if (!reactHotLoader) {
918
- return;
919
- }
920
-
921
- reactHotLoader.register(noop, "noop", "C:\\buildAgent\\work\\8df8f1edd755969c\\Tools\\src\\Commons\\TasksCore\\ChainableValueProducer.ts");
922
- reactHotLoader.register(ChainableValueProducer, "ChainableValueProducer", "C:\\buildAgent\\work\\8df8f1edd755969c\\Tools\\src\\Commons\\TasksCore\\ChainableValueProducer.ts");
923
- reactHotLoader.register(ObservableValueProducerBase, "ObservableValueProducerBase", "C:\\buildAgent\\work\\8df8f1edd755969c\\Tools\\src\\Commons\\TasksCore\\ChainableValueProducer.ts");
924
- reactHotLoader.register(AttachValueProducer, "AttachValueProducer", "C:\\buildAgent\\work\\8df8f1edd755969c\\Tools\\src\\Commons\\TasksCore\\ChainableValueProducer.ts");
925
- reactHotLoader.register(ExecuteOnValueProducer, "ExecuteOnValueProducer", "C:\\buildAgent\\work\\8df8f1edd755969c\\Tools\\src\\Commons\\TasksCore\\ChainableValueProducer.ts");
926
- reactHotLoader.register(TransformValueProducer, "TransformValueProducer", "C:\\buildAgent\\work\\8df8f1edd755969c\\Tools\\src\\Commons\\TasksCore\\ChainableValueProducer.ts");
927
- reactHotLoader.register(SplitToChainsValueProducer, "SplitToChainsValueProducer", "C:\\buildAgent\\work\\8df8f1edd755969c\\Tools\\src\\Commons\\TasksCore\\ChainableValueProducer.ts");
928
- reactHotLoader.register(ParallelSplitToChainsValueProducer, "ParallelSplitToChainsValueProducer", "C:\\buildAgent\\work\\8df8f1edd755969c\\Tools\\src\\Commons\\TasksCore\\ChainableValueProducer.ts");
929
- reactHotLoader.register(SkipUpdatesUntilNextCompletedProducer, "SkipUpdatesUntilNextCompletedProducer", "C:\\buildAgent\\work\\8df8f1edd755969c\\Tools\\src\\Commons\\TasksCore\\ChainableValueProducer.ts");
930
- reactHotLoader.register(delay, "delay", "C:\\buildAgent\\work\\8df8f1edd755969c\\Tools\\src\\Commons\\TasksCore\\ChainableValueProducer.ts");
931
- reactHotLoader.register(isNotNullOrUndefined, "isNotNullOrUndefined", "C:\\buildAgent\\work\\8df8f1edd755969c\\Tools\\src\\Commons\\TasksCore\\ChainableValueProducer.ts");
932
- })();
933
-
934
- ;
935
-
936
- (function () {
937
- var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
938
- leaveModule && leaveModule(module);
939
- })();
940
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9Db21tb25zL1Rhc2tzQ29yZS9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyLnRzIl0sIm5hbWVzIjpbIm5vb3AiLCJDaGFpbmFibGVWYWx1ZVByb2R1Y2VyIiwiZXJyb3JMaXN0ZW5lcnMiLCJvbk5leHQiLCJfbGlzdGVuZXIiLCJFcnJvciIsIm9uRXJyb3IiLCJsaXN0ZW5lciIsInB1c2giLCJpbmRleCIsImluZGV4T2YiLCJzcGxpY2UiLCJjdXJyZW50VmFsdWUiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1GdW5jdGlvbiIsIlRyYW5zZm9ybVZhbHVlUHJvZHVjZXIiLCJkbyIsImFjdGlvbiIsIkV4ZWN1dGVPblZhbHVlUHJvZHVjZXIiLCJjaGFpbldpdGgiLCJuZXh0SXRlbUZhY3RvcnkiLCJhdHRhY2giLCJhdHRhY2hGYWN0b3J5Iiwiam9pblZhbHVlcyIsImV2YWx1YXRlQXR0YWNoS2V5IiwiQXR0YWNoVmFsdWVQcm9kdWNlciIsInNraXBVcGRhdGVzVW50aWxOZXh0Q29tcGxldGVkIiwiU2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWRQcm9kdWNlciIsInNwbGl0VG9DaGFpbnMiLCJzcGxpdEZ1bmN0aW9uIiwiZ2V0S2V5IiwiZmFjdG9yeSIsIlNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyIiwic3BsaXRUb1BhcmFsbGVsQ2hhaW5zIiwiUGFyYWxsZWxTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlciIsIm9ic2VydmUiLCJiZWdpbk9ic2VydmUiLCJkZXRhY2hMaXN0ZW5lciIsImVuZE9ic2VydmUiLCJlbWl0RXJyb3IiLCJlcnJvciIsImVycm9yT2JqZWN0IiwiZXJyb3JMaXN0ZW5lciIsIk9ic2VydmFibGVWYWx1ZVByb2R1Y2VyQmFzZSIsImxpc3RlbmVycyIsImdldEN1cnJlbnRWYWx1ZSIsImJlZ2luTGlzdGVuaW5nIiwic3RvcExpc3RlbmluZyIsImVtaXRVcGRhdGUiLCJ2YWx1ZSIsIm5vdGlmeUFsbExpc3RlbmVyc0FuZFdhaXRGb3JDb21wbGV0ZSIsIm5leHRWYWx1ZSIsImNvbnN0cnVjdG9yIiwicGFyZW50IiwibGFzdEF0dGFjaEtleSIsImF0dGFjaGVkUHJvZHVjZXIiLCJkZXRhY2hQYXJlbnRMaXN0ZW5lciIsImRldGFjaEF0dGFjaGVkTGlzdGVuZXIiLCJsYXN0QXR0YWNoZWRWYWx1ZSIsImxhc3RQYXJlbnRWYWx1ZSIsImF3YWl0aW5nTGFzdEF0dGFjaGVkVmFsdWUiLCJpc0luT2JzZXJ2ZVN0YXRlIiwiaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSIsImF0dGFjaGVkVmFsdWUiLCJ1bmRlZmluZWQiLCJlbWl0TmV4dFZhbHVlIiwiaGFuZGxlQ2hhbmdlUGFyZW50VmFsdWUiLCJwYXJlbnRWYWx1ZSIsImF0dGFjaEtleSIsImRlbGF5IiwieCIsImxlbmd0aCIsImUiLCJjb25zb2xlIiwibG9nIiwiY2hhaW5zIiwiaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4iLCJrZXkiLCJjaGFpblZhbHVlIiwibGFzdFZhbHVlIiwiZW1pdFZhbHVlIiwiT2JqZWN0IiwidmFsdWVzIiwibWFwIiwiZmlsdGVyIiwiaXNOb3ROdWxsT3JVbmRlZmluZWQiLCJoYW5kbGVDaGFuZ2VQYXJlbnQiLCJpbnB1dCIsIm5leHRWYWx1ZXNNYXAiLCJ0b01hcCIsIm5ld0tleXMiLCJfIiwiZGlmZmVyZW5jZSIsImtleXMiLCJyZW1vdmVkS2V5cyIsIm5ld0tleSIsIm5ld0NoYWluIiwibmV3Q2hhaW5WYWx1ZSIsInZhbHVlUHJvZHVjZXIiLCJyZW1vdmVkS2V5IiwicmVtb3ZlZENoYWluIiwicmVzdWx0IiwiZXJyb3JzIiwiY2hpbGRWYWx1ZVByb2R1Y2VyIiwiY2hpbGRWYWx1ZSIsIkFnZ3JlZ2F0ZWRFcnJvciIsImNvbmN1cnJlbmN5TGltaXQiLCJvcyIsImNwdXMiLCJQcm9taXNlIiwiYWxsIiwiZGV0YWNoRnJvbVBhcmVudCIsIm5leHRFbWl0VG9Qcm9jZXNzIiwiY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQiLCJvbmNlIiwidGltZW91dCIsInJlc29sdmUiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUE7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsZUFBZUEsSUFBZixHQUFxQyxDQUNqQztBQUNIOztBQUVNLE1BQU1DLHNCQUFOLENBQTZEO0FBQUE7QUFBQSxTQUMvQ0MsY0FEK0MsR0FDRCxFQURDO0FBQUE7O0FBR3pEQyxFQUFBQSxNQUFNLENBQUNDLFNBQUQsRUFBNkQ7QUFDdEUsVUFBTSxJQUFJQyxLQUFKLENBQVUsZUFBVixDQUFOO0FBQ0g7O0FBRU1DLEVBQUFBLE9BQU8sQ0FBQ0MsUUFBRCxFQUE0RDtBQUN0RSxTQUFLTCxjQUFMLENBQW9CTSxJQUFwQixDQUF5QkQsUUFBekI7QUFDQSxXQUFPLE1BQU07QUFDVCxZQUFNRSxLQUFLLEdBQUcsS0FBS1AsY0FBTCxDQUFvQlEsT0FBcEIsQ0FBNEJILFFBQTVCLENBQWQ7O0FBQ0EsVUFBSUUsS0FBSyxJQUFJLENBQWIsRUFBZ0I7QUFDWixhQUFLUCxjQUFMLENBQW9CUyxNQUFwQixDQUEyQkYsS0FBM0IsRUFBa0MsQ0FBbEM7QUFDSDtBQUNKLEtBTEQ7QUFNSDs7QUFFc0IsTUFBWkcsWUFBWSxHQUFlO0FBQ2xDLFVBQU0sSUFBSVAsS0FBSixDQUFVLGVBQVYsQ0FBTjtBQUNIOztBQUVNUSxFQUFBQSxTQUFTLENBQUtDLGlCQUFMLEVBQWtGO0FBQzlGLFdBQU8sSUFBSUMsc0JBQUosQ0FBMkIsSUFBM0IsRUFBaUNELGlCQUFqQyxDQUFQO0FBQ0g7O0FBRU1FLEVBQUFBLEVBQUUsQ0FBQ0MsTUFBRCxFQUFpRTtBQUN0RSxXQUFPLElBQUlDLHNCQUFKLENBQTJCLElBQTNCLEVBQWlDRCxNQUFqQyxDQUFQO0FBQ0g7O0FBRU1FLEVBQUFBLFNBQVMsQ0FBcUNDLGVBQXJDLEVBQWlHO0FBQzdHLFdBQU9BLGVBQWUsQ0FBQyxJQUFELENBQXRCO0FBQ0g7O0FBRU1DLEVBQUFBLE1BQU0sQ0FDVEMsYUFEUyxFQUVUQyxVQUZTLEVBR1RDLGlCQUhTLEVBSXFCO0FBQzlCLFdBQU8sSUFBSUMsbUJBQUosQ0FBd0IsSUFBeEIsRUFBOEJILGFBQTlCLEVBQTZDQyxVQUE3QyxFQUF5REMsaUJBQXpELENBQVA7QUFDSDs7QUFFTUUsRUFBQUEsNkJBQTZCLEdBQTZDO0FBQzdFLFdBQU8sSUFBSUMscUNBQUosQ0FBMEMsSUFBMUMsQ0FBUDtBQUNIOztBQUVNQyxFQUFBQSxhQUFhLENBQ2hCQyxhQURnQixFQUVoQkMsTUFGZ0IsRUFHaEJDLE9BSGdCLEVBSXFCO0FBQ3JDLFdBQU8sSUFBSUMsMEJBQUosQ0FBK0IsSUFBL0IsRUFBcUNILGFBQXJDLEVBQW9EQyxNQUFwRCxFQUE0REMsT0FBNUQsQ0FBUDtBQUNIOztBQUVNRSxFQUFBQSxxQkFBcUIsQ0FDeEJKLGFBRHdCLEVBRXhCQyxNQUZ3QixFQUd4QkMsT0FId0IsRUFJcUI7QUFDN0MsV0FBTyxJQUFJRyxrQ0FBSixDQUF1QyxJQUF2QyxFQUE2Q0wsYUFBN0MsRUFBNERDLE1BQTVELEVBQW9FQyxPQUFwRSxDQUFQO0FBQ0g7O0FBRW1CLFFBQVBJLE9BQU8sQ0FBQzVCLFFBQTBCLEdBQUdQLElBQTlCLEVBQWtFO0FBQ2xGLFVBQU0sS0FBS29DLFlBQUwsRUFBTjtBQUNBLFVBQU03QixRQUFRLENBQUMsTUFBTSxLQUFLSyxZQUFaLENBQWQ7QUFDQSxVQUFNeUIsY0FBYyxHQUFHLEtBQUtsQyxNQUFMLENBQVlJLFFBQVosQ0FBdkI7QUFDQSxXQUFPLFlBQVk7QUFDZjhCLE1BQUFBLGNBQWM7QUFDZCxZQUFNLEtBQUtDLFVBQUwsRUFBTjtBQUNILEtBSEQ7QUFJSDs7QUFFd0IsUUFBWkYsWUFBWSxHQUFrQjtBQUN2QyxVQUFNLElBQUkvQixLQUFKLENBQVUsZUFBVixDQUFOO0FBQ0g7O0FBRXNCLFFBQVZpQyxVQUFVLEdBQWtCO0FBQ3JDLFVBQU0sSUFBSWpDLEtBQUosQ0FBVSxlQUFWLENBQU47QUFDSCxHQTdFK0QsQ0ErRWhFOzs7QUFDeUIsUUFBVGtDLFNBQVMsQ0FBQ0MsS0FBRCxFQUE0QjtBQUNqRCxVQUFNQyxXQUFXLEdBQUdELEtBQUssWUFBWW5DLEtBQWpCLEdBQXlCbUMsS0FBekIsR0FBaUMsSUFBSW5DLEtBQUosQ0FBVyxHQUFFbUMsS0FBTSxFQUFuQixDQUFyRDs7QUFDQSxTQUFLLE1BQU1FLGFBQVgsSUFBNEIsS0FBS3hDLGNBQWpDLEVBQWlEO0FBQzdDLFlBQU13QyxhQUFhLENBQUNELFdBQUQsQ0FBbkI7QUFDSDtBQUNKOztBQXJGK0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTs7OztBQXdGN0QsTUFBTUUsMkJBQU4sU0FBNkMxQyxzQkFBN0MsQ0FBdUU7QUFBQTtBQUFBO0FBQUEsU0FLekQyQyxTQUx5RCxHQUtwQixFQUxvQjtBQUFBOztBQUNuRCxNQUFaaEMsWUFBWSxHQUFlO0FBQ2xDLFdBQU8sS0FBS2lDLGVBQUwsRUFBUDtBQUNIOztBQUk4QixRQUFmQSxlQUFlLEdBQWU7QUFDMUMsVUFBTSxJQUFJeEMsS0FBSixDQUFVLGVBQVYsQ0FBTjtBQUNIOztBQUV3QixRQUFaK0IsWUFBWSxHQUFrQjtBQUN2QyxVQUFNLEtBQUtVLGNBQUwsRUFBTjtBQUNIOztBQUVzQixRQUFWUixVQUFVLEdBQWtCO0FBQ3JDLFVBQU0sS0FBS1MsYUFBTCxFQUFOO0FBQ0g7O0FBRTZCLFFBQWRELGNBQWMsR0FBa0I7QUFDNUMsVUFBTSxJQUFJekMsS0FBSixDQUFVLGVBQVYsQ0FBTjtBQUNIOztBQUU0QixRQUFiMEMsYUFBYSxHQUFrQjtBQUMzQyxVQUFNLElBQUkxQyxLQUFKLENBQVUsZUFBVixDQUFOO0FBQ0g7O0FBRXlCLFFBQVYyQyxVQUFVLENBQUNDLEtBQUQsRUFBMEI7QUFDaEQsVUFBTSxLQUFLQyxvQ0FBTCxDQUEwQ0QsS0FBMUMsQ0FBTjtBQUNIOztBQUVNOUMsRUFBQUEsTUFBTSxDQUFDSSxRQUFELEVBQTREO0FBQ3JFLFNBQUtxQyxTQUFMLENBQWVwQyxJQUFmLENBQW9CRCxRQUFwQjtBQUNBLFdBQU8sTUFBTTtBQUNULFlBQU1FLEtBQUssR0FBRyxLQUFLbUMsU0FBTCxDQUFlbEMsT0FBZixDQUF1QkgsUUFBdkIsQ0FBZDs7QUFDQSxVQUFJRSxLQUFLLElBQUksQ0FBYixFQUFnQjtBQUNaLGFBQUttQyxTQUFMLENBQWVqQyxNQUFmLENBQXNCRixLQUF0QixFQUE2QixDQUE3QjtBQUNIO0FBQ0osS0FMRDtBQU1IOztBQUVpRCxRQUFwQ3lDLG9DQUFvQyxDQUFDQyxTQUFELEVBQThCO0FBQzVFLFNBQUssTUFBTTVDLFFBQVgsSUFBdUIsS0FBS3FDLFNBQTVCLEVBQXVDO0FBQ25DLFlBQU1yQyxRQUFRLENBQUM0QyxTQUFELENBQWQ7QUFDSDtBQUNKOztBQTdDeUU7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTs7OztBQWdEdkUsTUFBTTFCLG1CQUFOLFNBQThDeEIsc0JBQTlDLENBQXlFO0FBZXJFbUQsRUFBQUEsV0FBVyxDQUNkQyxNQURjLEVBRWQvQixhQUZjLEVBR2RDLFVBSGMsRUFJZEMsaUJBSmMsRUFLaEI7QUFDRTtBQURGLFNBbkJlNkIsTUFtQmY7QUFBQSxTQWxCZS9CLGFBa0JmO0FBQUEsU0FqQmVDLFVBaUJmO0FBQUEsU0FoQk0rQixhQWdCTjtBQUFBLFNBZk1DLGdCQWVOO0FBQUEsU0FkZS9CLGlCQWNmO0FBQUEsU0FiZW9CLFNBYWYsR0FicUQsRUFhckQ7QUFBQSxTQVpNWSxvQkFZTjtBQUFBLFNBWE1DLHNCQVdOO0FBQUEsU0FWTUMsaUJBVU47QUFBQSxTQVRNQyxlQVNOO0FBQUEsU0FSTUMseUJBUU4sR0FSa0MsS0FRbEM7QUFBQSxTQVBNQyxnQkFPTixHQVB5QixLQU96Qjs7QUFBQSxTQXVGZUMseUJBdkZmLEdBdUYyQyxNQUFPQyxhQUFQLElBQTRDO0FBQ3JGLFdBQUtMLGlCQUFMLEdBQXlCSyxhQUF6Qjs7QUFDQSxVQUFJLENBQUMsS0FBS0gseUJBQVYsRUFBcUM7QUFDakMsWUFBSSxLQUFLRCxlQUFMLElBQXdCSyxTQUE1QixFQUF1QztBQUNuQyxnQkFBTSxJQUFJM0QsS0FBSixDQUFVLHFCQUFWLENBQU47QUFDSDs7QUFDRCxjQUFNLEtBQUs0RCxhQUFMLENBQW1CLE1BQU0sS0FBSzFDLFVBQUwsQ0FBZ0IsS0FBS29DLGVBQXJCLEVBQXNDSSxhQUF0QyxDQUF6QixDQUFOO0FBQ0g7QUFDSixLQS9GQzs7QUFBQSxTQWlHZUcsdUJBakdmLEdBaUd5QyxNQUFPQyxXQUFQLElBQTBDO0FBQ2pGLFdBQUtSLGVBQUwsR0FBdUJRLFdBQXZCO0FBQ0EsWUFBTUMsU0FBUyxHQUFHLE1BQU0sS0FBSzVDLGlCQUFMLENBQXVCMkMsV0FBdkIsQ0FBeEI7O0FBQ0EsVUFBSSxLQUFLWixnQkFBTCxJQUF5QlMsU0FBekIsSUFBc0MsS0FBS1Asc0JBQUwsSUFBK0JPLFNBQXpFLEVBQW9GO0FBQ2hGLGFBQUtQLHNCQUFMLEdBQThCLEtBQUtGLGdCQUFMLENBQXNCcEQsTUFBdEIsQ0FBNkIsS0FBSzJELHlCQUFsQyxDQUE5QjtBQUNIOztBQUNELFVBQUksS0FBS1IsYUFBTCxJQUFzQlUsU0FBdEIsSUFBbUMsS0FBS1YsYUFBTCxLQUF1QmMsU0FBOUQsRUFBeUU7QUFDckUsYUFBS2QsYUFBTCxHQUFxQmMsU0FBckI7O0FBQ0EsWUFBSSxLQUFLWCxzQkFBTCxJQUErQk8sU0FBbkMsRUFBOEM7QUFDMUMsZUFBS1Asc0JBQUw7QUFDSDs7QUFDRCxZQUFJLEtBQUtGLGdCQUFMLElBQXlCUyxTQUF6QixJQUFzQyxLQUFLSCxnQkFBL0MsRUFBaUU7QUFDN0QsZ0JBQU0sS0FBS04sZ0JBQUwsQ0FBc0JqQixVQUF0QixFQUFOO0FBQ0g7O0FBQ0QsYUFBS2lCLGdCQUFMLEdBQXdCLE1BQU0sS0FBS2pDLGFBQUwsQ0FBbUI2QyxXQUFuQixDQUE5Qjs7QUFDQSxZQUFJLEtBQUtOLGdCQUFULEVBQTJCO0FBQ3ZCLGdCQUFNLEtBQUtOLGdCQUFMLENBQXNCbkIsWUFBdEIsRUFBTjtBQUNIOztBQUNELGFBQUtxQixzQkFBTCxHQUE4QixLQUFLRixnQkFBTCxDQUFzQnBELE1BQXRCLENBQTZCLEtBQUsyRCx5QkFBbEMsQ0FBOUI7QUFDSDs7QUFDRCxVQUFJLEtBQUtQLGdCQUFMLElBQXlCUyxTQUE3QixFQUF3QztBQUNwQyxjQUFNLElBQUkzRCxLQUFKLENBQVUscUJBQVYsQ0FBTjtBQUNILE9BdEJnRixDQXVCakY7OztBQUNBLFdBQUt1RCx5QkFBTCxHQUFpQyxJQUFqQztBQUNBLFlBQU1TLEtBQUssQ0FBQyxHQUFELENBQVg7QUFDQSxXQUFLVCx5QkFBTCxHQUFpQyxLQUFqQztBQUNBLFVBQUlHLGFBQWEsR0FBRyxLQUFLTCxpQkFBekI7O0FBQ0EsVUFBSUssYUFBYSxJQUFJQyxTQUFyQixFQUFnQztBQUM1QkQsUUFBQUEsYUFBYSxHQUFHLE1BQU0sS0FBS1IsZ0JBQUwsQ0FBc0IzQyxZQUE1QztBQUNIOztBQUNELFlBQU0sS0FBS3FELGFBQUwsQ0FBbUIsTUFBTSxLQUFLMUMsVUFBTCxDQUFnQjRDLFdBQWhCLEVBQTZCSixhQUE3QixDQUF6QixDQUFOO0FBQ0gsS0FqSUM7O0FBRUUsU0FBS1YsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBSy9CLGFBQUwsR0FBcUJBLGFBQXJCLENBSEYsQ0FJRTtBQUNBOztBQUNBLFNBQUtDLFVBQUwsR0FBa0JBLFVBQVUsS0FBSyxNQUFNK0MsQ0FBTixJQUFXQSxDQUFoQixDQUE1Qjs7QUFDQSxTQUFLOUMsaUJBQUwsR0FBeUJBLGlCQUFpQixLQUFLLFlBQVksbUJBQWpCLENBQTFDO0FBQ0g7O0FBRXdCLFFBQVpZLFlBQVksR0FBa0I7QUFDdkMsU0FBS3lCLGdCQUFMLEdBQXdCLElBQXhCO0FBQ0EsVUFBTSxLQUFLUixNQUFMLENBQVlqQixZQUFaLEVBQU47QUFDSDs7QUFFc0IsUUFBVkUsVUFBVSxHQUFrQjtBQUNyQyxVQUFNLEtBQUtlLE1BQUwsQ0FBWWYsVUFBWixFQUFOOztBQUNBLFFBQUksS0FBS2lCLGdCQUFMLElBQXlCUyxTQUE3QixFQUF3QztBQUNwQyxZQUFNLEtBQUtULGdCQUFMLENBQXNCakIsVUFBdEIsRUFBTjtBQUNIOztBQUNELFNBQUt1QixnQkFBTCxHQUF3QixLQUF4QjtBQUNIOztBQUVzQixNQUFaakQsWUFBWSxHQUFnQjtBQUNuQyxVQUFNaUMsZUFBZSxHQUFHLFlBQXlCO0FBQzdDLFlBQU1zQixXQUFXLEdBQUcsTUFBTSxLQUFLZCxNQUFMLENBQVl6QyxZQUF0QztBQUNBLFdBQUsrQyxlQUFMLEdBQXVCUSxXQUF2QjtBQUNBLFlBQU1DLFNBQVMsR0FBRyxNQUFNLEtBQUs1QyxpQkFBTCxDQUF1QjJDLFdBQXZCLENBQXhCOztBQUNBLFVBQUksS0FBS1osZ0JBQUwsSUFBeUJTLFNBQXpCLElBQXNDLEtBQUtQLHNCQUFMLElBQStCTyxTQUF6RSxFQUFvRjtBQUNoRixhQUFLUCxzQkFBTCxHQUE4QixLQUFLRixnQkFBTCxDQUFzQnBELE1BQXRCLENBQTZCLEtBQUsyRCx5QkFBbEMsQ0FBOUI7QUFDSDs7QUFDRCxVQUFJLEtBQUtSLGFBQUwsSUFBc0JVLFNBQXRCLElBQW1DLEtBQUtWLGFBQUwsS0FBdUJjLFNBQTlELEVBQXlFO0FBQ3JFLGFBQUtkLGFBQUwsR0FBcUJjLFNBQXJCOztBQUNBLFlBQUksS0FBS1gsc0JBQUwsSUFBK0JPLFNBQW5DLEVBQThDO0FBQzFDLGVBQUtQLHNCQUFMO0FBQ0g7O0FBQ0QsWUFBSSxLQUFLRixnQkFBTCxJQUF5QlMsU0FBekIsSUFBc0MsS0FBS0gsZ0JBQS9DLEVBQWlFO0FBQzdELGdCQUFNLEtBQUtOLGdCQUFMLENBQXNCakIsVUFBdEIsRUFBTjtBQUNIOztBQUNELGFBQUtpQixnQkFBTCxHQUF3QixNQUFNLEtBQUtqQyxhQUFMLENBQW1CNkMsV0FBbkIsQ0FBOUI7O0FBQ0EsWUFBSSxLQUFLTixnQkFBVCxFQUEyQjtBQUN2QixnQkFBTSxLQUFLTixnQkFBTCxDQUFzQm5CLFlBQXRCLEVBQU47QUFDSDs7QUFDRCxhQUFLcUIsc0JBQUwsR0FBOEIsS0FBS0YsZ0JBQUwsQ0FBc0JwRCxNQUF0QixDQUE2QixLQUFLMkQseUJBQWxDLENBQTlCO0FBQ0g7O0FBQ0QsVUFBSSxLQUFLUCxnQkFBTCxJQUF5QlMsU0FBN0IsRUFBd0M7QUFDcEMsY0FBTSxJQUFJM0QsS0FBSixDQUFVLHFCQUFWLENBQU47QUFDSDs7QUFDRCxZQUFNMEQsYUFBYSxHQUFHLE1BQU0sS0FBS1IsZ0JBQUwsQ0FBc0IzQyxZQUFsRDtBQUNBLFdBQUs4QyxpQkFBTCxHQUF5QkssYUFBekI7QUFDQSxhQUFPLEtBQUt4QyxVQUFMLENBQWdCNEMsV0FBaEIsRUFBNkJKLGFBQTdCLENBQVA7QUFDSCxLQTNCRDs7QUE0QkEsV0FBT2xCLGVBQWUsRUFBdEI7QUFDSDs7QUFFeUIsUUFBYm9CLGFBQWEsQ0FBQ2hCLEtBQUQsRUFBMkI7QUFDakQsU0FBSyxNQUFNMUMsUUFBWCxJQUF1QixLQUFLcUMsU0FBNUIsRUFBdUM7QUFDbkMsWUFBTXJDLFFBQVEsQ0FBQzBDLEtBQUQsQ0FBZDtBQUNIO0FBQ0o7O0FBRU05QyxFQUFBQSxNQUFNLENBQUNJLFFBQUQsRUFBNkQ7QUFDdEUsU0FBS3FDLFNBQUwsQ0FBZXBDLElBQWYsQ0FBb0JELFFBQXBCOztBQUNBLFFBQUksS0FBS3FDLFNBQUwsQ0FBZTJCLE1BQWYsS0FBMEIsQ0FBOUIsRUFBaUM7QUFDN0IsVUFBSSxLQUFLZixvQkFBTCxJQUE2QlEsU0FBakMsRUFBNEM7QUFDeEMsYUFBS1Isb0JBQUwsR0FBNEIsS0FBS0gsTUFBTCxDQUFZbEQsTUFBWixDQUFtQixLQUFLK0QsdUJBQXhCLENBQTVCO0FBQ0g7O0FBQ0QsVUFBSSxLQUFLWCxnQkFBTCxJQUF5QlMsU0FBekIsSUFBc0MsS0FBS1Isb0JBQUwsSUFBNkJRLFNBQXZFLEVBQWtGO0FBQzlFLGFBQUtSLG9CQUFMLEdBQTRCLEtBQUtELGdCQUFMLENBQXNCcEQsTUFBdEIsQ0FBNkIsS0FBSzJELHlCQUFsQyxDQUE1QjtBQUNIO0FBQ0o7O0FBQ0QsV0FBTyxNQUFNO0FBQ1QsWUFBTXJELEtBQUssR0FBRyxLQUFLbUMsU0FBTCxDQUFlbEMsT0FBZixDQUF1QkgsUUFBdkIsQ0FBZDs7QUFDQSxVQUFJRSxLQUFLLElBQUksQ0FBYixFQUFnQjtBQUNaLGFBQUttQyxTQUFMLENBQWVqQyxNQUFmLENBQXNCRixLQUF0QixFQUE2QixDQUE3QjtBQUNIOztBQUNELFVBQUksS0FBS21DLFNBQUwsQ0FBZTJCLE1BQWYsS0FBMEIsQ0FBOUIsRUFBaUM7QUFDN0IsWUFBSSxLQUFLZixvQkFBTCxJQUE2QlEsU0FBakMsRUFBNEM7QUFDeEMsZUFBS1Isb0JBQUw7QUFDSDs7QUFDRCxZQUFJLEtBQUtDLHNCQUFMLElBQStCTyxTQUFuQyxFQUE4QztBQUMxQyxlQUFLUCxzQkFBTDtBQUNIO0FBQ0o7QUFDSixLQWJEO0FBY0g7O0FBekcyRTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBOzs7O0FBd0p6RSxNQUFNdkMsc0JBQU4sU0FBd0NqQixzQkFBeEMsQ0FBa0U7QUFJOURtRCxFQUFBQSxXQUFXLENBQUNDLE1BQUQsRUFBNEJwQyxNQUE1QixFQUFpRTtBQUMvRTtBQUQrRSxTQUhsRW9DLE1BR2tFO0FBQUEsU0FGbEVwQyxNQUVrRTtBQUUvRSxTQUFLb0MsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS3BDLE1BQUwsR0FBY0EsTUFBZDtBQUNIOztBQUV3QixRQUFabUIsWUFBWSxHQUFrQjtBQUN2QyxVQUFNLEtBQUtpQixNQUFMLENBQVlqQixZQUFaLEVBQU47QUFDSDs7QUFFc0IsUUFBVkUsVUFBVSxHQUFrQjtBQUNyQyxVQUFNLEtBQUtlLE1BQUwsQ0FBWWYsVUFBWixFQUFOO0FBQ0g7O0FBRXNCLE1BQVoxQixZQUFZLEdBQWU7QUFDbEMsVUFBTWlDLGVBQWUsR0FBRyxZQUF3QjtBQUM1QyxZQUFNSSxLQUFLLEdBQUcsTUFBTSxLQUFLSSxNQUFMLENBQVl6QyxZQUFoQztBQUNBLFlBQU0sS0FBS0ssTUFBTCxDQUFZZ0MsS0FBWixDQUFOO0FBQ0EsYUFBT0EsS0FBUDtBQUNILEtBSkQ7O0FBS0EsV0FBT0osZUFBZSxFQUF0QjtBQUNIOztBQUVNMUMsRUFBQUEsTUFBTSxDQUFDSSxRQUFELEVBQTREO0FBQ3JFLFdBQU8sS0FBSzhDLE1BQUwsQ0FBWWxELE1BQVosQ0FBbUIsTUFBTWdFLFdBQU4sSUFBcUI7QUFDM0MsVUFBSTtBQUNBLGNBQU1sQixLQUFLLEdBQUdrQixXQUFkO0FBQ0EsY0FBTSxLQUFLbEQsTUFBTCxDQUFZZ0MsS0FBWixDQUFOO0FBQ0EsY0FBTTFDLFFBQVEsQ0FBQzBDLEtBQUQsQ0FBZDtBQUNILE9BSkQsQ0FJRSxPQUFPdUIsQ0FBUCxFQUFVO0FBQ1I7QUFDQUMsUUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVlGLENBQVo7QUFDQSxjQUFNLEtBQUtqQyxTQUFMLENBQWVpQyxDQUFmLENBQU47QUFDSDtBQUNKLEtBVk0sQ0FBUDtBQVdIOztBQXZDb0U7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTs7OztBQTBDbEUsTUFBTXpELHNCQUFOLFNBQTZDZCxzQkFBN0MsQ0FBd0U7QUFJcEVtRCxFQUFBQSxXQUFXLENBQUNDLE1BQUQsRUFBNkJ2QyxpQkFBN0IsRUFBNEU7QUFDMUY7QUFEMEYsU0FIN0V1QyxNQUc2RTtBQUFBLFNBRjdFdkMsaUJBRTZFO0FBRTFGLFNBQUt1QyxNQUFMLEdBQWNBLE1BQWQ7QUFDQSxTQUFLdkMsaUJBQUwsR0FBeUJBLGlCQUF6QjtBQUNIOztBQUV3QixRQUFac0IsWUFBWSxHQUFrQjtBQUN2QyxVQUFNLEtBQUtpQixNQUFMLENBQVlqQixZQUFaLEVBQU47QUFDSDs7QUFFc0IsUUFBVkUsVUFBVSxHQUFrQjtBQUNyQyxVQUFNLEtBQUtlLE1BQUwsQ0FBWWYsVUFBWixFQUFOO0FBQ0g7O0FBRXNCLE1BQVoxQixZQUFZLEdBQWdCO0FBQ25DLFVBQU1pQyxlQUFlLEdBQUcsWUFBeUIsS0FBSy9CLGlCQUFMLENBQXVCLE1BQU0sS0FBS3VDLE1BQUwsQ0FBWXpDLFlBQXpDLENBQWpEOztBQUNBLFdBQU9pQyxlQUFlLEVBQXRCO0FBQ0g7O0FBRU0xQyxFQUFBQSxNQUFNLENBQUNJLFFBQUQsRUFBNkQ7QUFDdEUsV0FBTyxLQUFLOEMsTUFBTCxDQUFZbEQsTUFBWixDQUFtQixNQUFNZ0UsV0FBTixJQUFxQjtBQUMzQyxZQUFNNUQsUUFBUSxDQUFDLE1BQU0sS0FBS08saUJBQUwsQ0FBdUJxRCxXQUF2QixDQUFQLENBQWQ7QUFDSCxLQUZNLENBQVA7QUFHSDs7QUEzQjBFO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7Ozs7QUE4QnhFLE1BQU1uQywwQkFBTixTQUFvRC9CLHNCQUFwRCxDQUFpRjtBQWU3RW1ELEVBQUFBLFdBQVcsQ0FDZEMsTUFEYyxFQUVkeEIsYUFGYyxFQUdkQyxNQUhjLEVBSWRDLE9BSmMsRUFLaEI7QUFDRTtBQURGLFNBbkJlc0IsTUFtQmY7QUFBQSxTQWxCZXhCLGFBa0JmO0FBQUEsU0FqQmVDLE1BaUJmO0FBQUEsU0FoQmVDLE9BZ0JmO0FBQUEsU0FmZWEsU0FlZixHQWZ1RCxFQWV2RDtBQUFBLFNBZGUrQixNQWNmLEdBUkUsRUFRRjtBQUFBLFNBUE1kLGdCQU9OLEdBUHlCLEtBT3pCOztBQUFBLFNBMkZlZSx1QkEzRmYsR0EyRnlDLE9BQU96QixTQUFQLEVBQXNCMEIsR0FBdEIsS0FBcUQ7QUFDNUYsWUFBTUMsVUFBVSxHQUFHLEtBQUtILE1BQUwsQ0FBWUUsR0FBWixDQUFuQjs7QUFDQSxVQUFJQyxVQUFVLElBQUlkLFNBQWxCLEVBQTZCO0FBQ3pCYyxRQUFBQSxVQUFVLENBQUNDLFNBQVgsR0FBdUI1QixTQUF2QjtBQUNIOztBQUNELFlBQU0sS0FBSzZCLFNBQUwsQ0FDRkMsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS1AsTUFBbkIsRUFDS1EsR0FETCxDQUNTYixDQUFDLElBQUlBLENBQUMsQ0FBQ1MsU0FEaEIsRUFFS0ssTUFGTCxDQUVZQyxvQkFGWixDQURFLENBQU47QUFLSCxLQXJHQzs7QUFBQSxTQXVHZUMsa0JBdkdmLEdBdUdvQyxNQUFPQyxLQUFQLElBQW1DO0FBQ3JFLFlBQU1MLE1BQU0sR0FBRyxLQUFLckQsYUFBTCxDQUFtQjBELEtBQW5CLENBQWY7QUFDQSxZQUFNQyxhQUFhLEdBQUcsS0FBS0MsS0FBTCxDQUFXUCxNQUFYLENBQXRCOztBQUVBLFlBQU1RLE9BQU8sR0FBR0MsZ0JBQUVDLFVBQUYsQ0FBYVgsTUFBTSxDQUFDWSxJQUFQLENBQVlMLGFBQVosQ0FBYixFQUF5Q1AsTUFBTSxDQUFDWSxJQUFQLENBQVksS0FBS2xCLE1BQWpCLENBQXpDLENBQWhCOztBQUNBLFlBQU1tQixXQUFXLEdBQUdILGdCQUFFQyxVQUFGLENBQWFYLE1BQU0sQ0FBQ1ksSUFBUCxDQUFZLEtBQUtsQixNQUFqQixDQUFiLEVBQXVDTSxNQUFNLENBQUNZLElBQVAsQ0FBWUwsYUFBWixDQUF2QyxDQUFwQjs7QUFDQSxXQUFLLE1BQU1PLE1BQVgsSUFBcUJMLE9BQXJCLEVBQThCO0FBQUE7O0FBQzFCLGNBQU1NLFFBQVEsR0FBRyxLQUFLakUsT0FBTCwwQkFBYXlELGFBQWEsQ0FBQ08sTUFBRCxDQUExQix5RUFBc0MsMEJBQXRDLENBQWpCOztBQUNBLFlBQUksS0FBS2xDLGdCQUFULEVBQTJCO0FBQ3ZCLGdCQUFNbUMsUUFBUSxDQUFDNUQsWUFBVCxFQUFOO0FBQ0g7O0FBQ0QsWUFBSTtBQUNBLGdCQUFNNkQsYUFBYSxHQUFHLE1BQU1ELFFBQVEsQ0FBQ3BGLFlBQXJDO0FBQ0EsZUFBSytELE1BQUwsQ0FBWW9CLE1BQVosSUFBc0I7QUFDbEJoQixZQUFBQSxTQUFTLEVBQUVrQixhQURPO0FBRWxCQyxZQUFBQSxhQUFhLEVBQUVGLFFBRkc7QUFHbEIzRCxZQUFBQSxjQUFjLEVBQUUyRCxRQUFRLENBQUM3RixNQUFULENBQWdCZ0QsU0FBUyxJQUFJLEtBQUt5Qix1QkFBTCxDQUE2QnpCLFNBQTdCLEVBQXdDNEMsTUFBeEMsQ0FBN0I7QUFIRSxXQUF0QjtBQUtILFNBUEQsQ0FPRSxPQUFPdkIsQ0FBUCxFQUFVO0FBQ1I7QUFDQUMsVUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVlGLENBQVo7QUFDQSxlQUFLRyxNQUFMLENBQVlvQixNQUFaLElBQXNCO0FBQ2xCaEIsWUFBQUEsU0FBUyxFQUFFZixTQURPO0FBRWxCa0MsWUFBQUEsYUFBYSxFQUFFRixRQUZHO0FBR2xCM0QsWUFBQUEsY0FBYyxFQUFFMkQsUUFBUSxDQUFDN0YsTUFBVCxDQUFnQmdELFNBQVMsSUFBSSxLQUFLeUIsdUJBQUwsQ0FBNkJ6QixTQUE3QixFQUF3QzRDLE1BQXhDLENBQTdCO0FBSEUsV0FBdEI7QUFLSDtBQUNKOztBQUNELFdBQUssTUFBTUksVUFBWCxJQUF5QkwsV0FBekIsRUFBc0M7QUFDbEMsY0FBTU0sWUFBWSxHQUFHLEtBQUt6QixNQUFMLENBQVl3QixVQUFaLENBQXJCO0FBQ0FDLFFBQUFBLFlBQVksU0FBWixJQUFBQSxZQUFZLFdBQVosWUFBQUEsWUFBWSxDQUFFL0QsY0FBZDs7QUFDQSxZQUFJLEtBQUt3QixnQkFBVCxFQUEyQjtBQUN2QixpQkFBTXVDLFlBQU4sYUFBTUEsWUFBTix1QkFBTUEsWUFBWSxDQUFFRixhQUFkLENBQTRCNUQsVUFBNUIsRUFBTjtBQUNILFNBTGlDLENBTWxDO0FBQ0E7OztBQUNBLGVBQU8sS0FBS3FDLE1BQUwsQ0FBWXdCLFVBQVosQ0FBUDtBQUNIOztBQUNELFlBQU0sS0FBS25CLFNBQUwsQ0FDRkMsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS1AsTUFBbkIsRUFDS1EsR0FETCxDQUNTYixDQUFDLElBQUlBLENBQUMsQ0FBQ1MsU0FEaEIsRUFFS0ssTUFGTCxDQUVZQyxvQkFGWixDQURFLENBQU47QUFLSCxLQWxKQzs7QUFFRSxTQUFLaEMsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS3hCLGFBQUwsR0FBcUJBLGFBQXJCO0FBQ0EsU0FBS0MsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0MsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS3NCLE1BQUwsQ0FBWWxELE1BQVosQ0FBbUIsS0FBS21GLGtCQUF4QjtBQUNIOztBQUVzQixNQUFaMUUsWUFBWSxHQUFrQjtBQUNyQyxVQUFNaUMsZUFBZSxHQUFHLFlBQTJCO0FBQy9DLFlBQU1xQyxNQUFNLEdBQUcsS0FBS3JELGFBQUwsQ0FBbUIsTUFBTSxLQUFLd0IsTUFBTCxDQUFZekMsWUFBckMsQ0FBZjtBQUNBLFlBQU15RixNQUFZLEdBQUcsRUFBckI7QUFDQSxZQUFNQyxNQUF1QixHQUFHLEVBQWhDOztBQUNBLFdBQUssTUFBTXJELEtBQVgsSUFBb0JpQyxNQUFwQixFQUE0QjtBQUN4QixjQUFNcUIsa0JBQWtCLEdBQUcsS0FBS3hFLE9BQUwsQ0FBYWtCLEtBQWIsQ0FBM0I7O0FBQ0EsWUFBSSxLQUFLWSxnQkFBVCxFQUEyQjtBQUN2QixnQkFBTTBDLGtCQUFrQixDQUFDbkUsWUFBbkIsRUFBTjtBQUNIOztBQUNELFlBQUk7QUFDQSxnQkFBTW9FLFVBQVUsR0FBRyxNQUFNRCxrQkFBa0IsQ0FBQzNGLFlBQTVDO0FBQ0F5RixVQUFBQSxNQUFNLENBQUM3RixJQUFQLENBQVlnRyxVQUFaO0FBQ0EsZ0JBQU0zQixHQUFHLEdBQUcsS0FBSy9DLE1BQUwsQ0FBWW1CLEtBQVosQ0FBWjtBQUNBLGVBQUswQixNQUFMLENBQVlFLEdBQVosSUFBbUI7QUFDZkUsWUFBQUEsU0FBUyxFQUFFeUIsVUFESTtBQUVmTixZQUFBQSxhQUFhLEVBQUVLLGtCQUZBO0FBR2ZsRSxZQUFBQSxjQUFjLEVBQUVrRSxrQkFBa0IsQ0FBQ3BHLE1BQW5CLENBQTBCbUUsQ0FBQyxJQUFJLEtBQUtNLHVCQUFMLENBQTZCTixDQUE3QixFQUFnQ08sR0FBaEMsQ0FBL0I7QUFIRCxXQUFuQjtBQUtILFNBVEQsQ0FTRSxPQUFPTCxDQUFQLEVBQVU7QUFDUixjQUFJLEtBQUtYLGdCQUFULEVBQTJCO0FBQ3ZCO0FBQ0FZLFlBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZRixDQUFaO0FBQ0gsV0FIRCxNQUdPO0FBQ0g4QixZQUFBQSxNQUFNLENBQUM5RixJQUFQLENBQVlnRSxDQUFaO0FBQ0g7O0FBQ0QsZ0JBQU1LLEdBQUcsR0FBRyxLQUFLL0MsTUFBTCxDQUFZbUIsS0FBWixDQUFaO0FBQ0EsZUFBSzBCLE1BQUwsQ0FBWUUsR0FBWixJQUFtQjtBQUNmRSxZQUFBQSxTQUFTLEVBQUVmLFNBREk7QUFFZmtDLFlBQUFBLGFBQWEsRUFBRUssa0JBRkE7QUFHZmxFLFlBQUFBLGNBQWMsRUFBRWtFLGtCQUFrQixDQUFDcEcsTUFBbkIsQ0FBMEJtRSxDQUFDLElBQUksS0FBS00sdUJBQUwsQ0FBNkJOLENBQTdCLEVBQWdDTyxHQUFoQyxDQUEvQjtBQUhELFdBQW5CO0FBS0g7QUFDSjs7QUFDRCxVQUFJeUIsTUFBTSxDQUFDL0IsTUFBUCxLQUFrQixDQUF0QixFQUF5QjtBQUNyQixjQUFNK0IsTUFBTSxDQUFDLENBQUQsQ0FBWjtBQUNILE9BRkQsTUFFTyxJQUFJQSxNQUFNLENBQUMvQixNQUFQLEdBQWdCLENBQXBCLEVBQXVCO0FBQzFCO0FBQ0EsY0FBTSxJQUFJa0MsZ0NBQUosQ0FBb0Isa0JBQXBCLEVBQXdDLEdBQUdILE1BQTNDLENBQU47QUFDSDs7QUFDRCxhQUFPRCxNQUFQO0FBQ0gsS0F4Q0Q7O0FBeUNBLFdBQU94RCxlQUFlLEVBQXRCO0FBQ0g7O0FBRXdCLFFBQVpULFlBQVksR0FBa0I7QUFDdkMsU0FBS3lCLGdCQUFMLEdBQXdCLElBQXhCO0FBQ0EsVUFBTSxLQUFLUixNQUFMLENBQVlqQixZQUFaLEVBQU47QUFDSDs7QUFFc0IsUUFBVkUsVUFBVSxHQUFrQjtBQUNyQyxVQUFNLEtBQUtlLE1BQUwsQ0FBWWYsVUFBWixFQUFOOztBQUNBLFNBQUssTUFBTVcsS0FBWCxJQUFvQixrQ0FBYyxLQUFLMEIsTUFBbkIsQ0FBcEIsRUFBZ0Q7QUFDNUMsWUFBTTFCLEtBQUssQ0FBQ2lELGFBQU4sQ0FBb0I1RCxVQUFwQixFQUFOO0FBQ0g7O0FBQ0QsU0FBS3VCLGdCQUFMLEdBQXdCLEtBQXhCO0FBQ0g7O0FBRU0xRCxFQUFBQSxNQUFNLENBQUNJLFFBQUQsRUFBK0Q7QUFDeEUsU0FBS3FDLFNBQUwsQ0FBZXBDLElBQWYsQ0FBb0JELFFBQXBCO0FBQ0EsV0FBTyxNQUFNO0FBQ1QsWUFBTUUsS0FBSyxHQUFHLEtBQUttQyxTQUFMLENBQWVsQyxPQUFmLENBQXVCSCxRQUF2QixDQUFkOztBQUNBLFVBQUlFLEtBQUssSUFBSSxDQUFiLEVBQWdCO0FBQ1osYUFBS21DLFNBQUwsQ0FBZWpDLE1BQWYsQ0FBc0JGLEtBQXRCLEVBQTZCLENBQTdCO0FBQ0g7QUFDSixLQUxEO0FBTUg7O0FBRXNCLFFBQVR1RSxTQUFTLENBQUMvQixLQUFELEVBQTZCO0FBQ2hELFNBQUssTUFBTTFDLFFBQVgsSUFBdUIsS0FBS3FDLFNBQTVCLEVBQXVDO0FBQ25DLFlBQU1yQyxRQUFRLENBQUMwQyxLQUFELENBQWQ7QUFDSDtBQUNKOztBQUVPd0MsRUFBQUEsS0FBSyxDQUFDUCxNQUFELEVBQXNDO0FBQy9DLFVBQU1tQixNQUE2QixHQUFHLEVBQXRDOztBQUNBLFNBQUssTUFBTXBELEtBQVgsSUFBb0JpQyxNQUFwQixFQUE0QjtBQUN4Qm1CLE1BQUFBLE1BQU0sQ0FBQyxLQUFLdkUsTUFBTCxDQUFZbUIsS0FBWixDQUFELENBQU4sR0FBNkJBLEtBQTdCO0FBQ0g7O0FBQ0QsV0FBT29ELE1BQVA7QUFDSDs7QUE3R21GO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7Ozs7QUF5S2pGLE1BQU1uRSxrQ0FBTixTQUE0RGpDLHNCQUE1RCxDQUF5RjtBQWVyRm1ELEVBQUFBLFdBQVcsQ0FDZEMsTUFEYyxFQUVkeEIsYUFGYyxFQUdkQyxNQUhjLEVBSWRDLE9BSmMsRUFLaEI7QUFDRTtBQURGLFNBbkJlc0IsTUFtQmY7QUFBQSxTQWxCZXhCLGFBa0JmO0FBQUEsU0FqQmVDLE1BaUJmO0FBQUEsU0FoQmVDLE9BZ0JmO0FBQUEsU0FmZWEsU0FlZixHQWZ1RCxFQWV2RDtBQUFBLFNBZGUrQixNQWNmLEdBUkUsRUFRRjtBQUFBLFNBUE1kLGdCQU9OLEdBUHlCLEtBT3pCOztBQUFBLFNBZ0dlZSx1QkFoR2YsR0FnR3lDLE9BQU96QixTQUFQLEVBQXNCMEIsR0FBdEIsS0FBcUQ7QUFDNUYsWUFBTUMsVUFBVSxHQUFHLEtBQUtILE1BQUwsQ0FBWUUsR0FBWixDQUFuQjs7QUFDQSxVQUFJQyxVQUFVLElBQUlkLFNBQWxCLEVBQTZCO0FBQ3pCYyxRQUFBQSxVQUFVLENBQUNDLFNBQVgsR0FBdUI1QixTQUF2QjtBQUNIOztBQUNELFlBQU0sS0FBSzZCLFNBQUwsQ0FDRkMsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBS1AsTUFBbkIsRUFDS1EsR0FETCxDQUNTYixDQUFDLElBQUlBLENBQUMsQ0FBQ1MsU0FEaEIsRUFFS0ssTUFGTCxDQUVZQyxvQkFGWixDQURFLENBQU47QUFLSCxLQTFHQzs7QUFBQSxTQTRHZUMsa0JBNUdmLEdBNEdvQyxNQUFPQyxLQUFQLElBQW1DO0FBQ3JFLFlBQU1MLE1BQU0sR0FBRyxLQUFLckQsYUFBTCxDQUFtQjBELEtBQW5CLENBQWY7QUFDQSxZQUFNQyxhQUFhLEdBQUcsS0FBS0MsS0FBTCxDQUFXUCxNQUFYLENBQXRCOztBQUVBLFlBQU1RLE9BQU8sR0FBR0MsZ0JBQUVDLFVBQUYsQ0FBYVgsTUFBTSxDQUFDWSxJQUFQLENBQVlMLGFBQVosQ0FBYixFQUF5Q1AsTUFBTSxDQUFDWSxJQUFQLENBQVksS0FBS2xCLE1BQWpCLENBQXpDLENBQWhCOztBQUNBLFlBQU1tQixXQUFXLEdBQUdILGdCQUFFQyxVQUFGLENBQWFYLE1BQU0sQ0FBQ1ksSUFBUCxDQUFZLEtBQUtsQixNQUFqQixDQUFiLEVBQXVDTSxNQUFNLENBQUNZLElBQVAsQ0FBWUwsYUFBWixDQUF2QyxDQUFwQjs7QUFDQSxXQUFLLE1BQU1PLE1BQVgsSUFBcUJMLE9BQXJCLEVBQThCO0FBQUE7O0FBQzFCLGNBQU1NLFFBQVEsR0FBRyxNQUFNLEtBQUtqRSxPQUFMLDJCQUFheUQsYUFBYSxDQUFDTyxNQUFELENBQTFCLDJFQUFzQywwQkFBdEMsQ0FBdkI7O0FBQ0EsWUFBSSxLQUFLbEMsZ0JBQVQsRUFBMkI7QUFDdkIsZ0JBQU1tQyxRQUFRLENBQUM1RCxZQUFULEVBQU47QUFDSDs7QUFDRCxZQUFJO0FBQ0EsZ0JBQU02RCxhQUFhLEdBQUcsTUFBTUQsUUFBUSxDQUFDcEYsWUFBckM7QUFDQSxlQUFLK0QsTUFBTCxDQUFZb0IsTUFBWixJQUFzQjtBQUNsQmhCLFlBQUFBLFNBQVMsRUFBRWtCLGFBRE87QUFFbEJDLFlBQUFBLGFBQWEsRUFBRUYsUUFGRztBQUdsQjNELFlBQUFBLGNBQWMsRUFBRTJELFFBQVEsQ0FBQzdGLE1BQVQsQ0FBZ0JnRCxTQUFTLElBQUksS0FBS3lCLHVCQUFMLENBQTZCekIsU0FBN0IsRUFBd0M0QyxNQUF4QyxDQUE3QjtBQUhFLFdBQXRCO0FBS0gsU0FQRCxDQU9FLE9BQU92QixDQUFQLEVBQVU7QUFDUjtBQUNBQyxVQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsQ0FBWjtBQUNBLGVBQUtHLE1BQUwsQ0FBWW9CLE1BQVosSUFBc0I7QUFDbEJoQixZQUFBQSxTQUFTLEVBQUVmLFNBRE87QUFFbEJrQyxZQUFBQSxhQUFhLEVBQUVGLFFBRkc7QUFHbEIzRCxZQUFBQSxjQUFjLEVBQUUyRCxRQUFRLENBQUM3RixNQUFULENBQWdCZ0QsU0FBUyxJQUFJLEtBQUt5Qix1QkFBTCxDQUE2QnpCLFNBQTdCLEVBQXdDNEMsTUFBeEMsQ0FBN0I7QUFIRSxXQUF0QjtBQUtIO0FBQ0o7O0FBQ0QsV0FBSyxNQUFNSSxVQUFYLElBQXlCTCxXQUF6QixFQUFzQztBQUNsQyxjQUFNTSxZQUFZLEdBQUcsS0FBS3pCLE1BQUwsQ0FBWXdCLFVBQVosQ0FBckI7QUFDQUMsUUFBQUEsWUFBWSxTQUFaLElBQUFBLFlBQVksV0FBWixZQUFBQSxZQUFZLENBQUUvRCxjQUFkOztBQUNBLFlBQUksS0FBS3dCLGdCQUFULEVBQTJCO0FBQ3ZCLGlCQUFNdUMsWUFBTixhQUFNQSxZQUFOLHVCQUFNQSxZQUFZLENBQUVGLGFBQWQsQ0FBNEI1RCxVQUE1QixFQUFOO0FBQ0gsU0FMaUMsQ0FNbEM7QUFDQTs7O0FBQ0EsZUFBTyxLQUFLcUMsTUFBTCxDQUFZd0IsVUFBWixDQUFQO0FBQ0g7O0FBQ0QsWUFBTSxLQUFLbkIsU0FBTCxDQUNGQyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxLQUFLUCxNQUFuQixFQUNLUSxHQURMLENBQ1NiLENBQUMsSUFBSUEsQ0FBQyxDQUFDUyxTQURoQixFQUVLSyxNQUZMLENBRVlDLG9CQUZaLENBREUsQ0FBTjtBQUtILEtBdkpDOztBQUVFLFNBQUtoQyxNQUFMLEdBQWNBLE1BQWQ7QUFDQSxTQUFLeEIsYUFBTCxHQUFxQkEsYUFBckI7QUFDQSxTQUFLQyxNQUFMLEdBQWNBLE1BQWQ7QUFDQSxTQUFLQyxPQUFMLEdBQWVBLE9BQWY7QUFDQSxTQUFLc0IsTUFBTCxDQUFZbEQsTUFBWixDQUFtQixLQUFLbUYsa0JBQXhCO0FBQ0g7O0FBRXNCLE1BQVoxRSxZQUFZLEdBQWtCO0FBQ3JDLFVBQU1pQyxlQUFlLEdBQUcsWUFBMkI7QUFDL0MsWUFBTXFDLE1BQU0sR0FBRyxLQUFLckQsYUFBTCxDQUFtQixNQUFNLEtBQUt3QixNQUFMLENBQVl6QyxZQUFyQyxDQUFmO0FBQ0EsWUFBTXlGLE1BQVksR0FBRyxFQUFyQjtBQUNBLFlBQU1DLE1BQXVCLEdBQUcsRUFBaEM7QUFDQSxZQUFNSSxnQkFBZ0IsR0FBRyxxQkFBT0MsRUFBRSxDQUFDQyxJQUFILEdBQVVyQyxNQUFqQixDQUF6QjtBQUNBLFlBQU1zQyxPQUFPLENBQUNDLEdBQVIsQ0FDRjVCLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLENBQUNsQyxLQUFELEVBQVF4QyxLQUFSLEtBQ1BpRyxnQkFBZ0IsQ0FBQyxZQUFZO0FBQ3pCLGNBQU1ILGtCQUFrQixHQUFHLE1BQU0sS0FBS3hFLE9BQUwsQ0FBYWtCLEtBQWIsQ0FBakM7O0FBQ0EsWUFBSSxLQUFLWSxnQkFBVCxFQUEyQjtBQUN2QixnQkFBTTBDLGtCQUFrQixDQUFDbkUsWUFBbkIsRUFBTjtBQUNIOztBQUNELFlBQUk7QUFDQSxnQkFBTW9FLFVBQVUsR0FBRyxNQUFNRCxrQkFBa0IsQ0FBQzNGLFlBQTVDO0FBQ0F5RixVQUFBQSxNQUFNLENBQUM1RixLQUFELENBQU4sR0FBZ0IrRixVQUFoQjtBQUNBLGdCQUFNM0IsR0FBRyxHQUFHLEtBQUsvQyxNQUFMLENBQVltQixLQUFaLENBQVo7QUFDQSxlQUFLMEIsTUFBTCxDQUFZRSxHQUFaLElBQW1CO0FBQ2ZFLFlBQUFBLFNBQVMsRUFBRXlCLFVBREk7QUFFZk4sWUFBQUEsYUFBYSxFQUFFSyxrQkFGQTtBQUdmbEUsWUFBQUEsY0FBYyxFQUFFa0Usa0JBQWtCLENBQUNwRyxNQUFuQixDQUEwQm1FLENBQUMsSUFBSSxLQUFLTSx1QkFBTCxDQUE2Qk4sQ0FBN0IsRUFBZ0NPLEdBQWhDLENBQS9CO0FBSEQsV0FBbkI7QUFLSCxTQVRELENBU0UsT0FBT0wsQ0FBUCxFQUFVO0FBQ1IsY0FBSSxLQUFLWCxnQkFBVCxFQUEyQjtBQUN2QjtBQUNBWSxZQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsQ0FBWjtBQUNILFdBSEQsTUFHTztBQUNIOEIsWUFBQUEsTUFBTSxDQUFDOUYsSUFBUCxDQUFZZ0UsQ0FBWjtBQUNIOztBQUNELGdCQUFNSyxHQUFHLEdBQUcsS0FBSy9DLE1BQUwsQ0FBWW1CLEtBQVosQ0FBWjtBQUNBLGVBQUswQixNQUFMLENBQVlFLEdBQVosSUFBbUI7QUFDZkUsWUFBQUEsU0FBUyxFQUFFZixTQURJO0FBRWZrQyxZQUFBQSxhQUFhLEVBQUVLLGtCQUZBO0FBR2ZsRSxZQUFBQSxjQUFjLEVBQUVrRSxrQkFBa0IsQ0FBQ3BHLE1BQW5CLENBQTBCbUUsQ0FBQyxJQUFJLEtBQUtNLHVCQUFMLENBQTZCTixDQUE3QixFQUFnQ08sR0FBaEMsQ0FBL0I7QUFIRCxXQUFuQjtBQUtIO0FBQ0osT0E1QmUsQ0FEcEIsQ0FERSxDQUFOOztBQWlDQSxVQUFJeUIsTUFBTSxDQUFDL0IsTUFBUCxLQUFrQixDQUF0QixFQUF5QjtBQUNyQixjQUFNK0IsTUFBTSxDQUFDLENBQUQsQ0FBWjtBQUNILE9BRkQsTUFFTyxJQUFJQSxNQUFNLENBQUMvQixNQUFQLEdBQWdCLENBQXBCLEVBQXVCO0FBQzFCO0FBQ0EsY0FBTSxJQUFJa0MsZ0NBQUosQ0FBb0Isa0JBQXBCLEVBQXdDLEdBQUdILE1BQTNDLENBQU47QUFDSDs7QUFDRCxhQUFPRCxNQUFQO0FBQ0gsS0E3Q0Q7O0FBOENBLFdBQU94RCxlQUFlLEVBQXRCO0FBQ0g7O0FBRXdCLFFBQVpULFlBQVksR0FBa0I7QUFDdkMsU0FBS3lCLGdCQUFMLEdBQXdCLElBQXhCO0FBQ0EsVUFBTSxLQUFLUixNQUFMLENBQVlqQixZQUFaLEVBQU47QUFDSDs7QUFFc0IsUUFBVkUsVUFBVSxHQUFrQjtBQUNyQyxVQUFNLEtBQUtlLE1BQUwsQ0FBWWYsVUFBWixFQUFOOztBQUNBLFNBQUssTUFBTXVDLEdBQVgsSUFBa0JJLE1BQU0sQ0FBQ1ksSUFBUCxDQUFZLEtBQUtsQixNQUFqQixDQUFsQixFQUE0QztBQUFBOztBQUN4QyxpQ0FBTSxLQUFLQSxNQUFMLENBQVlFLEdBQVosQ0FBTixxREFBTSxpQkFBa0JxQixhQUFsQixDQUFnQzVELFVBQWhDLEVBQU47QUFDSDs7QUFDRCxTQUFLdUIsZ0JBQUwsR0FBd0IsS0FBeEI7QUFDSDs7QUFFTTFELEVBQUFBLE1BQU0sQ0FBQ0ksUUFBRCxFQUErRDtBQUN4RSxTQUFLcUMsU0FBTCxDQUFlcEMsSUFBZixDQUFvQkQsUUFBcEI7QUFDQSxXQUFPLE1BQU07QUFDVCxZQUFNRSxLQUFLLEdBQUcsS0FBS21DLFNBQUwsQ0FBZWxDLE9BQWYsQ0FBdUJILFFBQXZCLENBQWQ7O0FBQ0EsVUFBSUUsS0FBSyxJQUFJLENBQWIsRUFBZ0I7QUFDWixhQUFLbUMsU0FBTCxDQUFlakMsTUFBZixDQUFzQkYsS0FBdEIsRUFBNkIsQ0FBN0I7QUFDSDtBQUNKLEtBTEQ7QUFNSDs7QUFFc0IsUUFBVHVFLFNBQVMsQ0FBQy9CLEtBQUQsRUFBNkI7QUFDaEQsU0FBSyxNQUFNMUMsUUFBWCxJQUF1QixLQUFLcUMsU0FBNUIsRUFBdUM7QUFDbkMsWUFBTXJDLFFBQVEsQ0FBQzBDLEtBQUQsQ0FBZDtBQUNIO0FBQ0o7O0FBRU93QyxFQUFBQSxLQUFLLENBQUNQLE1BQUQsRUFBc0M7QUFDL0MsVUFBTW1CLE1BQTZCLEdBQUcsRUFBdEM7O0FBQ0EsU0FBSyxNQUFNcEQsS0FBWCxJQUFvQmlDLE1BQXBCLEVBQTRCO0FBQ3hCbUIsTUFBQUEsTUFBTSxDQUFDLEtBQUt2RSxNQUFMLENBQVltQixLQUFaLENBQUQsQ0FBTixHQUE2QkEsS0FBN0I7QUFDSDs7QUFDRCxXQUFPb0QsTUFBUDtBQUNIOztBQWxIMkY7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTs7OztBQThLekYsTUFBTTFFLHFDQUFOLFNBQXVEZ0IsMkJBQXZELENBQXNGO0FBUWxGUyxFQUFBQSxXQUFXLENBQUNDLE1BQUQsRUFBNEI7QUFDMUM7QUFEMEMsU0FQN0JBLE1BTzZCO0FBQUEsU0FOdEMwRCxnQkFNc0M7QUFBQSxTQUx0Q3BELGVBS3NDO0FBQUEsU0FIdENxRCxpQkFHc0M7QUFBQSxTQUZ0Q0MsdUJBRXNDO0FBRTFDLFNBQUs1RCxNQUFMLEdBQWNBLE1BQWQ7QUFDSDs7QUFFOEIsUUFBZlIsZUFBZSxHQUFlO0FBQzFDLFFBQUksS0FBS2MsZUFBTCxJQUF3QkssU0FBNUIsRUFBdUM7QUFDbkMsV0FBS2lELHVCQUFMLEdBQStCLENBQUMsWUFBWTtBQUN4QyxhQUFLdEQsZUFBTCxHQUF1QixNQUFNLEtBQUtOLE1BQUwsQ0FBWXpDLFlBQXpDO0FBQ0gsT0FGOEIsR0FBL0I7O0FBR0EsWUFBTSxLQUFLcUcsdUJBQVg7QUFDSDs7QUFDRCxRQUFJLEtBQUt0RCxlQUFMLElBQXdCSyxTQUE1QixFQUF1QztBQUNuQyxZQUFNLElBQUkzRCxLQUFKLENBQVUscUJBQVYsQ0FBTjtBQUNIOztBQUNELFdBQU8sS0FBS3NELGVBQVo7QUFDSDs7QUFFNkIsUUFBZGIsY0FBYyxHQUFrQjtBQUM1QyxVQUFNLEtBQUtPLE1BQUwsQ0FBWWpCLFlBQVosRUFBTjs7QUFDQSxRQUFJLEtBQUsyRSxnQkFBTCxJQUF5Qi9DLFNBQTdCLEVBQXdDO0FBQ3BDLFdBQUsrQyxnQkFBTCxHQUF3QixLQUFLMUQsTUFBTCxDQUFZbEQsTUFBWixDQUFtQmdELFNBQVMsSUFBSSxLQUFLZSx1QkFBTCxDQUE2QmYsU0FBN0IsQ0FBaEMsQ0FBeEI7QUFDSDtBQUNKOztBQUU0QixRQUFiSixhQUFhLEdBQWtCO0FBQzNDLFFBQUksS0FBS2dFLGdCQUFMLElBQXlCL0MsU0FBN0IsRUFBd0M7QUFDcEMsV0FBSytDLGdCQUFMO0FBQ0g7O0FBQ0QsVUFBTSxLQUFLMUQsTUFBTCxDQUFZZixVQUFaLEVBQU47QUFDSDs7QUFFb0MsUUFBdkI0Qix1QkFBdUIsQ0FBQ2YsU0FBRCxFQUE4QjtBQUMvRCxTQUFLUSxlQUFMLEdBQXVCUixTQUF2QjtBQUNBLFNBQUs2RCxpQkFBTCxHQUF5QnJCLGdCQUFFdUIsSUFBRixDQUFPLE1BQU0sS0FBS2xFLFVBQUwsQ0FBZ0JHLFNBQWhCLENBQWIsQ0FBekI7O0FBQ0EsUUFBSSxLQUFLOEQsdUJBQUwsSUFBZ0NqRCxTQUFwQyxFQUErQztBQUMzQyxZQUFNLEtBQUtpRCx1QkFBWDtBQUNIOztBQUNELFNBQUtBLHVCQUFMLEdBQStCLEtBQUtELGlCQUFMLEVBQS9CO0FBQ0EsVUFBTSxLQUFLQyx1QkFBWDtBQUNBLFNBQUtBLHVCQUFMLEdBQStCakQsU0FBL0I7QUFDSDs7QUFqRHdGO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7Ozs7QUFvRDdGLFNBQVNLLEtBQVQsQ0FBZThDLE9BQWYsRUFBK0M7QUFDM0MsU0FBTyxJQUFJTixPQUFKLENBQWtCTyxPQUFPLElBQUk7QUFDaENDLElBQUFBLFVBQVUsQ0FBQyxNQUFNO0FBQ2JELE1BQUFBLE9BQU87QUFDVixLQUZTLEVBRVBELE9BRk8sQ0FBVjtBQUdILEdBSk0sQ0FBUDtBQUtIOztBQUVELFNBQVM5QixvQkFBVCxDQUFpQ0UsS0FBakMsRUFBMEU7QUFDdEUsU0FBT0EsS0FBSyxJQUFJdkIsU0FBaEI7QUFDSDs7Ozs7Ozs7Ozs7MEJBandCY2hFLEk7MEJBSUZDLHNCOzBCQXdGQTBDLDJCOzBCQWdEQWxCLG1COzBCQXdKQVAsc0I7MEJBMENBSCxzQjswQkE4QkFpQiwwQjswQkF5S0FFLGtDOzBCQThLQVAscUM7MEJBb0RKMEMsSzswQkFRQWdCLG9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5cbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCBwTGltaXQgZnJvbSBcInAtbGltaXRcIjtcblxuaW1wb3J0IHsgUmVhc29uT3JFcnJvciB9IGZyb20gXCIuLi9FcnJvclVudHlwZWRcIjtcbmltcG9ydCB7IGl0ZXJhdGVWYWx1ZXMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0l0ZXJhYmxlVXRpbHNcIjtcbmltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcblxuaW1wb3J0IHsgQWdncmVnYXRlZEVycm9yIH0gZnJvbSBcIi4vQWdncmVnYXRlZEVycm9yXCI7XG5pbXBvcnQgeyBEZXRhY2hMaXN0ZW5lciwgSVZhbHVlUHJvZHVjZXIsIFZhbHVlTGlzdGVuZXIgfSBmcm9tIFwiLi9CdWlsZFRhc2tcIjtcblxuYXN5bmMgZnVuY3Rpb24gbm9vcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBlbXB0eSBmdW5jdGlvblxufVxuXG5leHBvcnQgY2xhc3MgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUPiBpbXBsZW1lbnRzIElWYWx1ZVByb2R1Y2VyPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVycm9yTGlzdGVuZXJzOiBBcnJheTxWYWx1ZUxpc3RlbmVyPEVycm9yPj4gPSBbXTtcblxuICAgIHB1YmxpYyBvbk5leHQoX2xpc3RlbmVyOiAobmV4dFZhbHVlOiBUKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBYnN0cmFjdEVycm9yXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yKGxpc3RlbmVyOiAoZXJyb3I6IEVycm9yKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICB0aGlzLmVycm9yTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmVycm9yTGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFic3RyYWN0RXJyb3JcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybTxUTz4odHJhbnNmb3JtRnVuY3Rpb246IChpbnB1dDogVCkgPT4gUHJvbWlzZTxUTz4pOiBUcmFuc2Zvcm1WYWx1ZVByb2R1Y2VyPFQsIFRPPiB7XG4gICAgICAgIHJldHVybiBuZXcgVHJhbnNmb3JtVmFsdWVQcm9kdWNlcih0aGlzLCB0cmFuc2Zvcm1GdW5jdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGRvKGFjdGlvbjogKGlucHV0OiBUKSA9PiBQcm9taXNlPHZvaWQ+KTogRXhlY3V0ZU9uVmFsdWVQcm9kdWNlcjxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgRXhlY3V0ZU9uVmFsdWVQcm9kdWNlcih0aGlzLCBhY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGFpbldpdGg8VE8sIFRWUCBleHRlbmRzIElWYWx1ZVByb2R1Y2VyPFRPPj4obmV4dEl0ZW1GYWN0b3J5OiAocHJldkl0ZW06IElWYWx1ZVByb2R1Y2VyPFQ+KSA9PiBUVlApOiBUVlAge1xuICAgICAgICByZXR1cm4gbmV4dEl0ZW1GYWN0b3J5KHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhdHRhY2g8VEEsIFRPID0gVD4oXG4gICAgICAgIGF0dGFjaEZhY3Rvcnk6ICh2YWx1ZTogVCkgPT4gUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUQT4+LFxuICAgICAgICBqb2luVmFsdWVzPzogKG9yaWdpbmFsOiBULCBhdHRhY2hlZDogVEEpID0+IFByb21pc2U8VE8+LFxuICAgICAgICBldmFsdWF0ZUF0dGFjaEtleT86ICh2YWx1ZTogVCkgPT4gUHJvbWlzZTxzdHJpbmc+XG4gICAgKTogQXR0YWNoVmFsdWVQcm9kdWNlcjxULCBUQSwgVE8+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBBdHRhY2hWYWx1ZVByb2R1Y2VyKHRoaXMsIGF0dGFjaEZhY3RvcnksIGpvaW5WYWx1ZXMsIGV2YWx1YXRlQXR0YWNoS2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWQoKTogU2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWRQcm9kdWNlcjxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgU2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWRQcm9kdWNlcih0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3BsaXRUb0NoYWluczxUSSwgVE8+KFxuICAgICAgICBzcGxpdEZ1bmN0aW9uOiAoaW5wdXQ6IFQpID0+IFRJW10sXG4gICAgICAgIGdldEtleTogKGlucHV0OiBUSSkgPT4gc3RyaW5nLFxuICAgICAgICBmYWN0b3J5OiAoaW5wdXQ6IFRJKSA9PiBJVmFsdWVQcm9kdWNlcjxUTz5cbiAgICApOiBTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcjxULCBUSSwgVE8+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcih0aGlzLCBzcGxpdEZ1bmN0aW9uLCBnZXRLZXksIGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzcGxpdFRvUGFyYWxsZWxDaGFpbnM8VEksIFRPPihcbiAgICAgICAgc3BsaXRGdW5jdGlvbjogKGlucHV0OiBUKSA9PiBUSVtdLFxuICAgICAgICBnZXRLZXk6IChpbnB1dDogVEkpID0+IHN0cmluZyxcbiAgICAgICAgZmFjdG9yeTogKGlucHV0OiBUSSkgPT4gSVZhbHVlUHJvZHVjZXI8VE8+IHwgUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUTz4+XG4gICAgKTogUGFyYWxsZWxTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcjxULCBUSSwgVE8+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJhbGxlbFNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyKHRoaXMsIHNwbGl0RnVuY3Rpb24sIGdldEtleSwgZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9ic2VydmUobGlzdGVuZXI6IFZhbHVlTGlzdGVuZXI8VD4gPSBub29wKTogUHJvbWlzZTwoKSA9PiBQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgIGF3YWl0IGxpc3RlbmVyKGF3YWl0IHRoaXMuY3VycmVudFZhbHVlKTtcbiAgICAgICAgY29uc3QgZGV0YWNoTGlzdGVuZXIgPSB0aGlzLm9uTmV4dChsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcigpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbmRPYnNlcnZlKCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJlZ2luT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByb3RlY3RlZCBhc3luYyBlbWl0RXJyb3IoZXJyb3I6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBlcnJvck9iamVjdCA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihgJHtlcnJvcn1gKTtcbiAgICAgICAgZm9yIChjb25zdCBlcnJvckxpc3RlbmVyIG9mIHRoaXMuZXJyb3JMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGF3YWl0IGVycm9yTGlzdGVuZXIoZXJyb3JPYmplY3QpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlPFQ+IGV4dGVuZHMgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUPiB7XG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlzdGVuZXJzOiBBcnJheTxWYWx1ZUxpc3RlbmVyPFQ+PiA9IFtdO1xuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldEN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmJlZ2luTGlzdGVuaW5nKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGVuZE9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcExpc3RlbmluZygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBiZWdpbkxpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgc3RvcExpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZW1pdFVwZGF0ZSh2YWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLm5vdGlmeUFsbExpc3RlbmVyc0FuZFdhaXRGb3JDb21wbGV0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChsaXN0ZW5lcjogKG5leHRWYWx1ZTogVCkgPT4gUHJvbWlzZTx2b2lkPik6IERldGFjaExpc3RlbmVyIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbm90aWZ5QWxsTGlzdGVuZXJzQW5kV2FpdEZvckNvbXBsZXRlKG5leHRWYWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBhd2FpdCBsaXN0ZW5lcihuZXh0VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXR0YWNoVmFsdWVQcm9kdWNlcjxUSSwgVEEsIFRPPiBleHRlbmRzIENoYWluYWJsZVZhbHVlUHJvZHVjZXI8VE8+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VEk+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXR0YWNoRmFjdG9yeTogKHZhbHVlOiBUSSkgPT4gUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUQT4+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgam9pblZhbHVlczogKG9yaWdpbmFsOiBUSSwgYXR0YWNoZWQ6IFRBKSA9PiBQcm9taXNlPFRPPjtcbiAgICBwcml2YXRlIGxhc3RBdHRhY2hLZXk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBhdHRhY2hlZFByb2R1Y2VyPzogSVZhbHVlUHJvZHVjZXI8VEE+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZhbHVhdGVBdHRhY2hLZXk6ICh2YWx1ZTogVEkpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVyczogQXJyYXk8VmFsdWVMaXN0ZW5lcjxUTz4+ID0gW107XG4gICAgcHJpdmF0ZSBkZXRhY2hQYXJlbnRMaXN0ZW5lcj86IERldGFjaExpc3RlbmVyO1xuICAgIHByaXZhdGUgZGV0YWNoQXR0YWNoZWRMaXN0ZW5lcj86IERldGFjaExpc3RlbmVyO1xuICAgIHByaXZhdGUgbGFzdEF0dGFjaGVkVmFsdWU/OiBUQTtcbiAgICBwcml2YXRlIGxhc3RQYXJlbnRWYWx1ZT86IFRJO1xuICAgIHByaXZhdGUgYXdhaXRpbmdMYXN0QXR0YWNoZWRWYWx1ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNJbk9ic2VydmVTdGF0ZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFRJPixcbiAgICAgICAgYXR0YWNoRmFjdG9yeTogKHZhbHVlOiBUSSkgPT4gUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUQT4+LFxuICAgICAgICBqb2luVmFsdWVzPzogKG9yaWdpbmFsOiBUSSwgYXR0YWNoZWQ6IFRBKSA9PiBQcm9taXNlPFRPPixcbiAgICAgICAgZXZhbHVhdGVBdHRhY2hLZXk/OiAodmFsdWU6IFRJKSA9PiBQcm9taXNlPHN0cmluZz5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuYXR0YWNoRmFjdG9yeSA9IGF0dGFjaEZhY3Rvcnk7XG4gICAgICAgIC8vINCvINC90LUg0LzQvtCz0YMg0L/QvtCx0LXQtNC40YLRjCDRgtC40L/QuNC30LDRhtC40Y4g0LIg0Y3RgtC+0Lwg0LzQtdGB0YLQtSwg0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDRgyDQvNC10L3RjyDQutC+0LTQsCDQv9C+0LvRg9GH0LDQtdGC0YHRj1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuam9pblZhbHVlcyA9IGpvaW5WYWx1ZXMgfHwgKGFzeW5jIHggPT4geCk7XG4gICAgICAgIHRoaXMuZXZhbHVhdGVBdHRhY2hLZXkgPSBldmFsdWF0ZUF0dGFjaEtleSB8fCAoYXN5bmMgKCkgPT4gXCJTVEFUSUMtQVRUQUNILUtFWVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hdHRhY2hlZFByb2R1Y2VyLmVuZE9ic2VydmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFRPPiB7XG4gICAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9IGFzeW5jICgpOiBQcm9taXNlPFRPPiA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IGF3YWl0IHRoaXMucGFyZW50LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMubGFzdFBhcmVudFZhbHVlID0gcGFyZW50VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBhdHRhY2hLZXkgPSBhd2FpdCB0aGlzLmV2YWx1YXRlQXR0YWNoS2V5KHBhcmVudFZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkUHJvZHVjZXIgIT0gdW5kZWZpbmVkICYmIHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPSB0aGlzLmF0dGFjaGVkUHJvZHVjZXIub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5sYXN0QXR0YWNoS2V5ID09IHVuZGVmaW5lZCB8fCB0aGlzLmxhc3RBdHRhY2hLZXkgIT09IGF0dGFjaEtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdEF0dGFjaEtleSA9IGF0dGFjaEtleTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRQcm9kdWNlciAhPSB1bmRlZmluZWQgJiYgdGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5lbmRPYnNlcnZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRQcm9kdWNlciA9IGF3YWl0IHRoaXMuYXR0YWNoRmFjdG9yeShwYXJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciA9IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5vbk5leHQodGhpcy5oYW5kbGVDaGFuZ2VBdHRhY2hlZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkUHJvZHVjZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZFByb2dyYW1TdGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaGVkVmFsdWUgPSBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5sYXN0QXR0YWNoZWRWYWx1ZSA9IGF0dGFjaGVkVmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5qb2luVmFsdWVzKHBhcmVudFZhbHVlLCBhdHRhY2hlZFZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbWl0TmV4dFZhbHVlKHZhbHVlOiBUTyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBhd2FpdCBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25OZXh0KGxpc3RlbmVyOiAobmV4dFZhbHVlOiBUTykgPT4gUHJvbWlzZTx2b2lkPik6IERldGFjaExpc3RlbmVyIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRldGFjaFBhcmVudExpc3RlbmVyID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIgPSB0aGlzLnBhcmVudC5vbk5leHQodGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCAmJiB0aGlzLmRldGFjaFBhcmVudExpc3RlbmVyID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIgPSB0aGlzLmF0dGFjaGVkUHJvZHVjZXIub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSA9IGFzeW5jIChhdHRhY2hlZFZhbHVlOiBUQSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0aGlzLmxhc3RBdHRhY2hlZFZhbHVlID0gYXR0YWNoZWRWYWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmF3YWl0aW5nTGFzdEF0dGFjaGVkVmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxhc3RQYXJlbnRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkUHJvZ3JhbVN0YXRlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0TmV4dFZhbHVlKGF3YWl0IHRoaXMuam9pblZhbHVlcyh0aGlzLmxhc3RQYXJlbnRWYWx1ZSwgYXR0YWNoZWRWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlQ2hhbmdlUGFyZW50VmFsdWUgPSBhc3luYyAocGFyZW50VmFsdWU6IFRJKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIHRoaXMubGFzdFBhcmVudFZhbHVlID0gcGFyZW50VmFsdWU7XG4gICAgICAgIGNvbnN0IGF0dGFjaEtleSA9IGF3YWl0IHRoaXMuZXZhbHVhdGVBdHRhY2hLZXkocGFyZW50VmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCAmJiB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPSB0aGlzLmF0dGFjaGVkUHJvZHVjZXIub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGFzdEF0dGFjaEtleSA9PSB1bmRlZmluZWQgfHwgdGhpcy5sYXN0QXR0YWNoS2V5ICE9PSBhdHRhY2hLZXkpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdEF0dGFjaEtleSA9IGF0dGFjaEtleTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCAmJiB0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hdHRhY2hlZFByb2R1Y2VyID0gYXdhaXQgdGhpcy5hdHRhY2hGYWN0b3J5KHBhcmVudFZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPSB0aGlzLmF0dGFjaGVkUHJvZHVjZXIub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRQcm9kdWNlciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWRQcm9ncmFtU3RhdGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8g0J/RgNC+0YHRgtC+INC90LXQvNC90L7Qs9C+INC+0LHQvtC20LTQtdC8LCDQstC00YDRg9CzINC/0YDQuNC00ZHRgiDQtNGA0YPQs9C+0LUgYXR0YWNoZWRWYWx1ZVxuICAgICAgICB0aGlzLmF3YWl0aW5nTGFzdEF0dGFjaGVkVmFsdWUgPSB0cnVlO1xuICAgICAgICBhd2FpdCBkZWxheSg3MDApO1xuICAgICAgICB0aGlzLmF3YWl0aW5nTGFzdEF0dGFjaGVkVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGF0dGFjaGVkVmFsdWUgPSB0aGlzLmxhc3RBdHRhY2hlZFZhbHVlO1xuICAgICAgICBpZiAoYXR0YWNoZWRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF0dGFjaGVkVmFsdWUgPSBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdE5leHRWYWx1ZShhd2FpdCB0aGlzLmpvaW5WYWx1ZXMocGFyZW50VmFsdWUsIGF0dGFjaGVkVmFsdWUpKTtcbiAgICB9O1xufVxuXG5leHBvcnQgY2xhc3MgRXhlY3V0ZU9uVmFsdWVQcm9kdWNlcjxUPiBleHRlbmRzIENoYWluYWJsZVZhbHVlUHJvZHVjZXI8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbjogKHZhbHVlOiBUKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD4sIGFjdGlvbjogKHZhbHVlOiBUKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVudFZhbHVlKCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCBnZXRDdXJyZW50VmFsdWUgPSBhc3luYyAoKTogUHJvbWlzZTxUPiA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMucGFyZW50LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5leHQobGlzdGVuZXI6IChuZXh0VmFsdWU6IFQpID0+IFByb21pc2U8dm9pZD4pOiBEZXRhY2hMaXN0ZW5lciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5vbk5leHQoYXN5bmMgcGFyZW50VmFsdWUgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmVudFZhbHVlO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRFcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNmb3JtVmFsdWVQcm9kdWNlcjxUSSwgVE8+IGV4dGVuZHMgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUTz4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUST47XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2Zvcm1GdW5jdGlvbjogKHZhbHVlOiBUSSkgPT4gUHJvbWlzZTxUTz47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUST4sIHRyYW5zZm9ybUZ1bmN0aW9uOiAodmFsdWU6IFRJKSA9PiBQcm9taXNlPFRPPikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1GdW5jdGlvbiA9IHRyYW5zZm9ybUZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBiZWdpbk9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmJlZ2luT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbmRPYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5lbmRPYnNlcnZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUTz4ge1xuICAgICAgICBjb25zdCBnZXRDdXJyZW50VmFsdWUgPSBhc3luYyAoKTogUHJvbWlzZTxUTz4gPT4gdGhpcy50cmFuc2Zvcm1GdW5jdGlvbihhd2FpdCB0aGlzLnBhcmVudC5jdXJyZW50VmFsdWUpO1xuICAgICAgICByZXR1cm4gZ2V0Q3VycmVudFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChsaXN0ZW5lcjogKG5leHRWYWx1ZTogVE8pID0+IFByb21pc2U8dm9pZD4pOiBEZXRhY2hMaXN0ZW5lciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5vbk5leHQoYXN5bmMgcGFyZW50VmFsdWUgPT4ge1xuICAgICAgICAgICAgYXdhaXQgbGlzdGVuZXIoYXdhaXQgdGhpcy50cmFuc2Zvcm1GdW5jdGlvbihwYXJlbnRWYWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcjxULCBUSSwgVE8+IGV4dGVuZHMgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUT1tdPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFQ+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3BsaXRGdW5jdGlvbjogKGlucHV0OiBUKSA9PiBUSVtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2V0S2V5OiAoaW5wdXQ6IFRJKSA9PiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYWN0b3J5OiAoaW5wdXQ6IFRJKSA9PiBJVmFsdWVQcm9kdWNlcjxUTz47XG4gICAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnM6IEFycmF5PFZhbHVlTGlzdGVuZXI8VE9bXT4+ID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFpbnM6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogSVZhbHVlUHJvZHVjZXI8VE8+O1xuICAgICAgICAgICAgbGFzdFZhbHVlOiB1bmRlZmluZWQgfCBUTztcbiAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBEZXRhY2hMaXN0ZW5lcjtcbiAgICAgICAgfTtcbiAgICB9ID0ge307XG4gICAgcHJpdmF0ZSBpc0luT2JzZXJ2ZVN0YXRlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD4sXG4gICAgICAgIHNwbGl0RnVuY3Rpb246IChpbnB1dDogVCkgPT4gVElbXSxcbiAgICAgICAgZ2V0S2V5OiAoaW5wdXQ6IFRJKSA9PiBzdHJpbmcsXG4gICAgICAgIGZhY3Rvcnk6IChpbnB1dDogVEkpID0+IElWYWx1ZVByb2R1Y2VyPFRPPlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5zcGxpdEZ1bmN0aW9uID0gc3BsaXRGdW5jdGlvbjtcbiAgICAgICAgdGhpcy5nZXRLZXkgPSBnZXRLZXk7XG4gICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7XG4gICAgICAgIHRoaXMucGFyZW50Lm9uTmV4dCh0aGlzLmhhbmRsZUNoYW5nZVBhcmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUT1tdPiB7XG4gICAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9IGFzeW5jICgpOiBQcm9taXNlPFRPW10+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuc3BsaXRGdW5jdGlvbihhd2FpdCB0aGlzLnBhcmVudC5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBUT1tdID0gW107XG4gICAgICAgICAgICBjb25zdCBlcnJvcnM6IFJlYXNvbk9yRXJyb3JbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFZhbHVlUHJvZHVjZXIgPSB0aGlzLmZhY3RvcnkodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2hpbGRWYWx1ZVByb2R1Y2VyLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFZhbHVlID0gYXdhaXQgY2hpbGRWYWx1ZVByb2R1Y2VyLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogY2hpbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IGNoaWxkVmFsdWVQcm9kdWNlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBjaGlsZFZhbHVlUHJvZHVjZXIub25OZXh0KHggPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbih4LCBrZXkpKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogY2hpbGRWYWx1ZVByb2R1Y2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IGNoaWxkVmFsdWVQcm9kdWNlci5vbk5leHQoeCA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKHgsIGtleSkpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JzWzBdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvcnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZWRFcnJvcihcIlRoZXJlIGFyZSBlcnJvcnNcIiwgLi4uZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBnZXRDdXJyZW50VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhdGVWYWx1ZXModGhpcy5jaGFpbnMpKSB7XG4gICAgICAgICAgICBhd2FpdCB2YWx1ZS52YWx1ZVByb2R1Y2VyLmVuZE9ic2VydmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25OZXh0KGxpc3RlbmVyOiAobmV4dFZhbHVlOiBUT1tdKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBlbWl0VmFsdWUodmFsdWU6IFRPW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgICAgICAgYXdhaXQgbGlzdGVuZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b01hcCh2YWx1ZXM6IFRJW10pOiB7IFtrZXk6IHN0cmluZ106IFRJIH0ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogVEkgfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgcmVzdWx0W3RoaXMuZ2V0S2V5KHZhbHVlKV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4gPSBhc3luYyAobmV4dFZhbHVlOiBUTywga2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgY29uc3QgY2hhaW5WYWx1ZSA9IHRoaXMuY2hhaW5zW2tleV07XG4gICAgICAgIGlmIChjaGFpblZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2hhaW5WYWx1ZS5sYXN0VmFsdWUgPSBuZXh0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VmFsdWUoXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuY2hhaW5zKVxuICAgICAgICAgICAgICAgIC5tYXAoeCA9PiB4Lmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZUNoYW5nZVBhcmVudCA9IGFzeW5jIChpbnB1dDogVCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnNwbGl0RnVuY3Rpb24oaW5wdXQpO1xuICAgICAgICBjb25zdCBuZXh0VmFsdWVzTWFwID0gdGhpcy50b01hcCh2YWx1ZXMpO1xuXG4gICAgICAgIGNvbnN0IG5ld0tleXMgPSBfLmRpZmZlcmVuY2UoT2JqZWN0LmtleXMobmV4dFZhbHVlc01hcCksIE9iamVjdC5rZXlzKHRoaXMuY2hhaW5zKSk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRLZXlzID0gXy5kaWZmZXJlbmNlKE9iamVjdC5rZXlzKHRoaXMuY2hhaW5zKSwgT2JqZWN0LmtleXMobmV4dFZhbHVlc01hcCkpO1xuICAgICAgICBmb3IgKGNvbnN0IG5ld0tleSBvZiBuZXdLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDaGFpbiA9IHRoaXMuZmFjdG9yeShuZXh0VmFsdWVzTWFwW25ld0tleV0gPz8gcmVqZWN0KCkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ld0NoYWluLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDaGFpblZhbHVlID0gYXdhaXQgbmV3Q2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5zW25ld0tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbmV3Q2hhaW5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogbmV3Q2hhaW4sXG4gICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBuZXdDaGFpbi5vbk5leHQobmV4dFZhbHVlID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4obmV4dFZhbHVlLCBuZXdLZXkpKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNbbmV3S2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IG5ld0NoYWluLFxuICAgICAgICAgICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogbmV3Q2hhaW4ub25OZXh0KG5leHRWYWx1ZSA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKG5leHRWYWx1ZSwgbmV3S2V5KSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHJlbW92ZWRLZXkgb2YgcmVtb3ZlZEtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRDaGFpbiA9IHRoaXMuY2hhaW5zW3JlbW92ZWRLZXldO1xuICAgICAgICAgICAgcmVtb3ZlZENoYWluPy5kZXRhY2hMaXN0ZW5lcigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlbW92ZWRDaGFpbj8udmFsdWVQcm9kdWNlci5lbmRPYnNlcnZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyDQryDQvdC1INC30L3QsNGOLCDQutCw0Log0YLRg9GCINC/0YDQsNCy0LjQu9GM0L3QvlxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWR5bmFtaWMtZGVsZXRlXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jaGFpbnNbcmVtb3ZlZEtleV07XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VmFsdWUoXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuY2hhaW5zKVxuICAgICAgICAgICAgICAgIC5tYXAoeCA9PiB4Lmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICAgICAgICApO1xuICAgIH07XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhbGxlbFNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyPFQsIFRJLCBUTz4gZXh0ZW5kcyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPFRPW10+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBzcGxpdEZ1bmN0aW9uOiAoaW5wdXQ6IFQpID0+IFRJW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXRLZXk6IChpbnB1dDogVEkpID0+IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZhY3Rvcnk6IChpbnB1dDogVEkpID0+IElWYWx1ZVByb2R1Y2VyPFRPPiB8IFByb21pc2U8SVZhbHVlUHJvZHVjZXI8VE8+PjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVyczogQXJyYXk8VmFsdWVMaXN0ZW5lcjxUT1tdPj4gPSBbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYWluczoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBJVmFsdWVQcm9kdWNlcjxUTz47XG4gICAgICAgICAgICBsYXN0VmFsdWU6IHVuZGVmaW5lZCB8IFRPO1xuICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IERldGFjaExpc3RlbmVyO1xuICAgICAgICB9O1xuICAgIH0gPSB7fTtcbiAgICBwcml2YXRlIGlzSW5PYnNlcnZlU3RhdGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUPixcbiAgICAgICAgc3BsaXRGdW5jdGlvbjogKGlucHV0OiBUKSA9PiBUSVtdLFxuICAgICAgICBnZXRLZXk6IChpbnB1dDogVEkpID0+IHN0cmluZyxcbiAgICAgICAgZmFjdG9yeTogKGlucHV0OiBUSSkgPT4gSVZhbHVlUHJvZHVjZXI8VE8+IHwgUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUTz4+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLnNwbGl0RnVuY3Rpb24gPSBzcGxpdEZ1bmN0aW9uO1xuICAgICAgICB0aGlzLmdldEtleSA9IGdldEtleTtcbiAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTtcbiAgICAgICAgdGhpcy5wYXJlbnQub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFRPW10+IHtcbiAgICAgICAgY29uc3QgZ2V0Q3VycmVudFZhbHVlID0gYXN5bmMgKCk6IFByb21pc2U8VE9bXT4gPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5zcGxpdEZ1bmN0aW9uKGF3YWl0IHRoaXMucGFyZW50LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFRPW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yczogUmVhc29uT3JFcnJvcltdID0gW107XG4gICAgICAgICAgICBjb25zdCBjb25jdXJyZW5jeUxpbWl0ID0gcExpbWl0KG9zLmNwdXMoKS5sZW5ndGgpO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgdmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PlxuICAgICAgICAgICAgICAgICAgICBjb25jdXJyZW5jeUxpbWl0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkVmFsdWVQcm9kdWNlciA9IGF3YWl0IHRoaXMuZmFjdG9yeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2hpbGRWYWx1ZVByb2R1Y2VyLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFZhbHVlID0gYXdhaXQgY2hpbGRWYWx1ZVByb2R1Y2VyLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gY2hpbGRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBjaGlsZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBjaGlsZFZhbHVlUHJvZHVjZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBjaGlsZFZhbHVlUHJvZHVjZXIub25OZXh0KHggPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbih4LCBrZXkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYWluc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogY2hpbGRWYWx1ZVByb2R1Y2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogY2hpbGRWYWx1ZVByb2R1Y2VyLm9uTmV4dCh4ID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4oeCwga2V5KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcnNbMF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9ycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQWdncmVnYXRlZEVycm9yKFwiVGhlcmUgYXJlIGVycm9yc1wiLCAuLi5lcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBiZWdpbk9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuaXNJbk9ic2VydmVTdGF0ZSA9IHRydWU7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmJlZ2luT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbmRPYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5lbmRPYnNlcnZlKCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuY2hhaW5zKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGFpbnNba2V5XT8udmFsdWVQcm9kdWNlci5lbmRPYnNlcnZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0luT2JzZXJ2ZVN0YXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChsaXN0ZW5lcjogKG5leHRWYWx1ZTogVE9bXSkgPT4gUHJvbWlzZTx2b2lkPik6IERldGFjaExpc3RlbmVyIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZW1pdFZhbHVlKHZhbHVlOiBUT1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGF3YWl0IGxpc3RlbmVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdG9NYXAodmFsdWVzOiBUSVtdKTogeyBba2V5OiBzdHJpbmddOiBUSSB9IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IFRJIH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJlc3VsdFt0aGlzLmdldEtleSh2YWx1ZSldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZUNoYW5nZVBhcmVudENoYWluID0gYXN5bmMgKG5leHRWYWx1ZTogVE8sIGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGNvbnN0IGNoYWluVmFsdWUgPSB0aGlzLmNoYWluc1trZXldO1xuICAgICAgICBpZiAoY2hhaW5WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNoYWluVmFsdWUubGFzdFZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdFZhbHVlKFxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmNoYWlucylcbiAgICAgICAgICAgICAgICAubWFwKHggPT4geC5sYXN0VmFsdWUpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpc05vdE51bGxPclVuZGVmaW5lZClcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVDaGFuZ2VQYXJlbnQgPSBhc3luYyAoaW5wdXQ6IFQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5zcGxpdEZ1bmN0aW9uKGlucHV0KTtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlc01hcCA9IHRoaXMudG9NYXAodmFsdWVzKTtcblxuICAgICAgICBjb25zdCBuZXdLZXlzID0gXy5kaWZmZXJlbmNlKE9iamVjdC5rZXlzKG5leHRWYWx1ZXNNYXApLCBPYmplY3Qua2V5cyh0aGlzLmNoYWlucykpO1xuICAgICAgICBjb25zdCByZW1vdmVkS2V5cyA9IF8uZGlmZmVyZW5jZShPYmplY3Qua2V5cyh0aGlzLmNoYWlucyksIE9iamVjdC5rZXlzKG5leHRWYWx1ZXNNYXApKTtcbiAgICAgICAgZm9yIChjb25zdCBuZXdLZXkgb2YgbmV3S2V5cykge1xuICAgICAgICAgICAgY29uc3QgbmV3Q2hhaW4gPSBhd2FpdCB0aGlzLmZhY3RvcnkobmV4dFZhbHVlc01hcFtuZXdLZXldID8/IHJlamVjdCgpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXdDaGFpbi5iZWdpbk9ic2VydmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2hhaW5WYWx1ZSA9IGF3YWl0IG5ld0NoYWluLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYWluc1tuZXdLZXldID0ge1xuICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IG5ld0NoYWluVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IG5ld0NoYWluLFxuICAgICAgICAgICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogbmV3Q2hhaW4ub25OZXh0KG5leHRWYWx1ZSA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKG5leHRWYWx1ZSwgbmV3S2V5KSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5zW25ld0tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBuZXdDaGFpbixcbiAgICAgICAgICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IG5ld0NoYWluLm9uTmV4dChuZXh0VmFsdWUgPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbihuZXh0VmFsdWUsIG5ld0tleSkpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByZW1vdmVkS2V5IG9mIHJlbW92ZWRLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkQ2hhaW4gPSB0aGlzLmNoYWluc1tyZW1vdmVkS2V5XTtcbiAgICAgICAgICAgIHJlbW92ZWRDaGFpbj8uZGV0YWNoTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCByZW1vdmVkQ2hhaW4/LnZhbHVlUHJvZHVjZXIuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g0K8g0L3QtSDQt9C90LDRjiwg0LrQsNC6INGC0YPRgiDQv9GA0LDQstC40LvRjNC90L5cbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1keW5hbWljLWRlbGV0ZVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2hhaW5zW3JlbW92ZWRLZXldO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdFZhbHVlKFxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmNoYWlucylcbiAgICAgICAgICAgICAgICAubWFwKHggPT4geC5sYXN0VmFsdWUpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpc05vdE51bGxPclVuZGVmaW5lZClcbiAgICAgICAgKTtcbiAgICB9O1xufVxuXG5leHBvcnQgY2xhc3MgU2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWRQcm9kdWNlcjxUPiBleHRlbmRzIE9ic2VydmFibGVWYWx1ZVByb2R1Y2VyQmFzZTxUPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFQ+O1xuICAgIHByaXZhdGUgZGV0YWNoRnJvbVBhcmVudD86IERldGFjaExpc3RlbmVyO1xuICAgIHByaXZhdGUgbGFzdFBhcmVudFZhbHVlPzogVDtcblxuICAgIHByaXZhdGUgbmV4dEVtaXRUb1Byb2Nlc3M/OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIHByaXZhdGUgY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQ/OiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD4pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldEN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgaWYgKHRoaXMubGFzdFBhcmVudFZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlQcm9jZXNzaW5nRW1pdCA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0UGFyZW50VmFsdWUgPSBhd2FpdCB0aGlzLnBhcmVudC5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jdXJyZW50bHlQcm9jZXNzaW5nRW1pdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sYXN0UGFyZW50VmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkUHJvZ3JhbVN0YXRlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RQYXJlbnRWYWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgYmVnaW5MaXN0ZW5pbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICBpZiAodGhpcy5kZXRhY2hGcm9tUGFyZW50ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2hGcm9tUGFyZW50ID0gdGhpcy5wYXJlbnQub25OZXh0KG5leHRWYWx1ZSA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudFZhbHVlKG5leHRWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHN0b3BMaXN0ZW5pbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmRldGFjaEZyb21QYXJlbnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaEZyb21QYXJlbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5lbmRPYnNlcnZlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVDaGFuZ2VQYXJlbnRWYWx1ZShuZXh0VmFsdWU6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5sYXN0UGFyZW50VmFsdWUgPSBuZXh0VmFsdWU7XG4gICAgICAgIHRoaXMubmV4dEVtaXRUb1Byb2Nlc3MgPSBfLm9uY2UoKCkgPT4gdGhpcy5lbWl0VXBkYXRlKG5leHRWYWx1ZSkpO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50bHlQcm9jZXNzaW5nRW1pdCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50bHlQcm9jZXNzaW5nRW1pdCA9IHRoaXMubmV4dEVtaXRUb1Byb2Nlc3MoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jdXJyZW50bHlQcm9jZXNzaW5nRW1pdDtcbiAgICAgICAgdGhpcy5jdXJyZW50bHlQcm9jZXNzaW5nRW1pdCA9IHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRlbGF5KHRpbWVvdXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCB8IHVuZGVmaW5lZCB8IG51bGwpOiBpbnB1dCBpcyBUIHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuIl19
854
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9Db21tb25zL1Rhc2tzQ29yZS9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyLnRzIl0sIm5hbWVzIjpbIm5vb3AiLCJDaGFpbmFibGVWYWx1ZVByb2R1Y2VyIiwiZXJyb3JMaXN0ZW5lcnMiLCJvbk5leHQiLCJfbGlzdGVuZXIiLCJFcnJvciIsIm9uRXJyb3IiLCJsaXN0ZW5lciIsInB1c2giLCJpbmRleCIsImluZGV4T2YiLCJzcGxpY2UiLCJjdXJyZW50VmFsdWUiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1GdW5jdGlvbiIsIlRyYW5zZm9ybVZhbHVlUHJvZHVjZXIiLCJkbyIsImFjdGlvbiIsIkV4ZWN1dGVPblZhbHVlUHJvZHVjZXIiLCJjaGFpbldpdGgiLCJuZXh0SXRlbUZhY3RvcnkiLCJhdHRhY2giLCJhdHRhY2hGYWN0b3J5Iiwiam9pblZhbHVlcyIsImV2YWx1YXRlQXR0YWNoS2V5IiwiQXR0YWNoVmFsdWVQcm9kdWNlciIsInNraXBVcGRhdGVzVW50aWxOZXh0Q29tcGxldGVkIiwiU2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWRQcm9kdWNlciIsInNwbGl0VG9DaGFpbnMiLCJzcGxpdEZ1bmN0aW9uIiwiZ2V0S2V5IiwiZmFjdG9yeSIsIlNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyIiwic3BsaXRUb1BhcmFsbGVsQ2hhaW5zIiwiUGFyYWxsZWxTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlciIsIm9ic2VydmUiLCJiZWdpbk9ic2VydmUiLCJkZXRhY2hMaXN0ZW5lciIsImVuZE9ic2VydmUiLCJlbWl0RXJyb3IiLCJlcnJvciIsImVycm9yT2JqZWN0IiwiZXJyb3JMaXN0ZW5lciIsIk9ic2VydmFibGVWYWx1ZVByb2R1Y2VyQmFzZSIsImxpc3RlbmVycyIsImdldEN1cnJlbnRWYWx1ZSIsImJlZ2luTGlzdGVuaW5nIiwic3RvcExpc3RlbmluZyIsImVtaXRVcGRhdGUiLCJ2YWx1ZSIsIm5vdGlmeUFsbExpc3RlbmVyc0FuZFdhaXRGb3JDb21wbGV0ZSIsIm5leHRWYWx1ZSIsImNvbnN0cnVjdG9yIiwicGFyZW50IiwibGFzdEF0dGFjaEtleSIsImF0dGFjaGVkUHJvZHVjZXIiLCJkZXRhY2hQYXJlbnRMaXN0ZW5lciIsImRldGFjaEF0dGFjaGVkTGlzdGVuZXIiLCJsYXN0QXR0YWNoZWRWYWx1ZSIsImxhc3RQYXJlbnRWYWx1ZSIsImF3YWl0aW5nTGFzdEF0dGFjaGVkVmFsdWUiLCJpc0luT2JzZXJ2ZVN0YXRlIiwiaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSIsImF0dGFjaGVkVmFsdWUiLCJ1bmRlZmluZWQiLCJlbWl0TmV4dFZhbHVlIiwiaGFuZGxlQ2hhbmdlUGFyZW50VmFsdWUiLCJwYXJlbnRWYWx1ZSIsImF0dGFjaEtleSIsImRlbGF5IiwieCIsImxlbmd0aCIsImUiLCJjb25zb2xlIiwibG9nIiwiY2hhaW5zIiwiaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4iLCJrZXkiLCJjaGFpblZhbHVlIiwibGFzdFZhbHVlIiwiZW1pdFZhbHVlIiwiT2JqZWN0IiwidmFsdWVzIiwibWFwIiwiZmlsdGVyIiwiaXNOb3ROdWxsT3JVbmRlZmluZWQiLCJoYW5kbGVDaGFuZ2VQYXJlbnQiLCJpbnB1dCIsIm5leHRWYWx1ZXNNYXAiLCJ0b01hcCIsIm5ld0tleXMiLCJfIiwiZGlmZmVyZW5jZSIsImtleXMiLCJyZW1vdmVkS2V5cyIsIm5ld0tleSIsIm5ld0NoYWluIiwibmV3Q2hhaW5WYWx1ZSIsInZhbHVlUHJvZHVjZXIiLCJyZW1vdmVkS2V5IiwicmVtb3ZlZENoYWluIiwicmVzdWx0IiwiZXJyb3JzIiwiY2hpbGRWYWx1ZVByb2R1Y2VyIiwiY2hpbGRWYWx1ZSIsIkFnZ3JlZ2F0ZWRFcnJvciIsImNvbmN1cnJlbmN5TGltaXQiLCJvcyIsImNwdXMiLCJQcm9taXNlIiwiYWxsIiwiZGV0YWNoRnJvbVBhcmVudCIsIm5leHRFbWl0VG9Qcm9jZXNzIiwiY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQiLCJvbmNlIiwidGlt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QkFBTCxHQUErQixLQUFLRCxpQkFBTCxFQUEvQjtBQUNBLFVBQU0sS0FBS0MsdUJBQVg7QUFDQSxTQUFLQSx1QkFBTCxHQUErQmpELFNBQS9CO0FBQ0g7O0FBakR3Rjs7OztBQW9EN0YsU0FBU0ssS0FBVCxDQUFlOEMsT0FBZixFQUErQztBQUMzQyxTQUFPLElBQUlOLE9BQUosQ0FBa0JPLE9BQU8sSUFBSTtBQUNoQ0MsSUFBQUEsVUFBVSxDQUFDLE1BQU07QUFDYkQsTUFBQUEsT0FBTztBQUNWLEtBRlMsRUFFUEQsT0FGTyxDQUFWO0FBR0gsR0FKTSxDQUFQO0FBS0g7O0FBRUQsU0FBUzlCLG9CQUFULENBQWlDRSxLQUFqQyxFQUEwRTtBQUN0RSxTQUFPQSxLQUFLLElBQUl2QixTQUFoQjtBQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5cbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCBwTGltaXQgZnJvbSBcInAtbGltaXRcIjtcblxuaW1wb3J0IHsgUmVhc29uT3JFcnJvciB9IGZyb20gXCIuLi9FcnJvclVudHlwZWRcIjtcbmltcG9ydCB7IGl0ZXJhdGVWYWx1ZXMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0l0ZXJhYmxlVXRpbHNcIjtcbmltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcblxuaW1wb3J0IHsgQWdncmVnYXRlZEVycm9yIH0gZnJvbSBcIi4vQWdncmVnYXRlZEVycm9yXCI7XG5pbXBvcnQgeyBEZXRhY2hMaXN0ZW5lciwgSVZhbHVlUHJvZHVjZXIsIFZhbHVlTGlzdGVuZXIgfSBmcm9tIFwiLi9CdWlsZFRhc2tcIjtcblxuYXN5bmMgZnVuY3Rpb24gbm9vcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBlbXB0eSBmdW5jdGlvblxufVxuXG5leHBvcnQgY2xhc3MgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUPiBpbXBsZW1lbnRzIElWYWx1ZVByb2R1Y2VyPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVycm9yTGlzdGVuZXJzOiBBcnJheTxWYWx1ZUxpc3RlbmVyPEVycm9yPj4gPSBbXTtcblxuICAgIHB1YmxpYyBvbk5leHQoX2xpc3RlbmVyOiAobmV4dFZhbHVlOiBUKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBYnN0cmFjdEVycm9yXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yKGxpc3RlbmVyOiAoZXJyb3I6IEVycm9yKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICB0aGlzLmVycm9yTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmVycm9yTGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFic3RyYWN0RXJyb3JcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybTxUTz4odHJhbnNmb3JtRnVuY3Rpb246IChpbnB1dDogVCkgPT4gUHJvbWlzZTxUTz4pOiBUcmFuc2Zvcm1WYWx1ZVByb2R1Y2VyPFQsIFRPPiB7XG4gICAgICAgIHJldHVybiBuZXcgVHJhbnNmb3JtVmFsdWVQcm9kdWNlcih0aGlzLCB0cmFuc2Zvcm1GdW5jdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGRvKGFjdGlvbjogKGlucHV0OiBUKSA9PiBQcm9taXNlPHZvaWQ+KTogRXhlY3V0ZU9uVmFsdWVQcm9kdWNlcjxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgRXhlY3V0ZU9uVmFsdWVQcm9kdWNlcih0aGlzLCBhY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGFpbldpdGg8VE8sIFRWUCBleHRlbmRzIElWYWx1ZVByb2R1Y2VyPFRPPj4obmV4dEl0ZW1GYWN0b3J5OiAocHJldkl0ZW06IElWYWx1ZVByb2R1Y2VyPFQ+KSA9PiBUVlApOiBUVlAge1xuICAgICAgICByZXR1cm4gbmV4dEl0ZW1GYWN0b3J5KHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhdHRhY2g8VEEsIFRPID0gVD4oXG4gICAgICAgIGF0dGFjaEZhY3Rvcnk6ICh2YWx1ZTogVCkgPT4gUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUQT4+LFxuICAgICAgICBqb2luVmFsdWVzPzogKG9yaWdpbmFsOiBULCBhdHRhY2hlZDogVEEpID0+IFByb21pc2U8VE8+LFxuICAgICAgICBldmFsdWF0ZUF0dGFjaEtleT86ICh2YWx1ZTogVCkgPT4gUHJvbWlzZTxzdHJpbmc+XG4gICAgKTogQXR0YWNoVmFsdWVQcm9kdWNlcjxULCBUQSwgVE8+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBBdHRhY2hWYWx1ZVByb2R1Y2VyKHRoaXMsIGF0dGFjaEZhY3RvcnksIGpvaW5WYWx1ZXMsIGV2YWx1YXRlQXR0YWNoS2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWQoKTogU2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWRQcm9kdWNlcjxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgU2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWRQcm9kdWNlcih0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3BsaXRUb0NoYWluczxUSSwgVE8+KFxuICAgICAgICBzcGxpdEZ1bmN0aW9uOiAoaW5wdXQ6IFQpID0+IFRJW10sXG4gICAgICAgIGdldEtleTogKGlucHV0OiBUSSkgPT4gc3RyaW5nLFxuICAgICAgICBmYWN0b3J5OiAoaW5wdXQ6IFRJKSA9PiBJVmFsdWVQcm9kdWNlcjxUTz5cbiAgICApOiBTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcjxULCBUSSwgVE8+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcih0aGlzLCBzcGxpdEZ1bmN0aW9uLCBnZXRLZXksIGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzcGxpdFRvUGFyYWxsZWxDaGFpbnM8VEksIFRPPihcbiAgICAgICAgc3BsaXRGdW5jdGlvbjogKGlucHV0OiBUKSA9PiBUSVtdLFxuICAgICAgICBnZXRLZXk6IChpbnB1dDogVEkpID0+IHN0cmluZyxcbiAgICAgICAgZmFjdG9yeTogKGlucHV0OiBUSSkgPT4gSVZhbHVlUHJvZHVjZXI8VE8+IHwgUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUTz4+XG4gICAgKTogUGFyYWxsZWxTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcjxULCBUSSwgVE8+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJhbGxlbFNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyKHRoaXMsIHNwbGl0RnVuY3Rpb24sIGdldEtleSwgZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9ic2VydmUobGlzdGVuZXI6IFZhbHVlTGlzdGVuZXI8VD4gPSBub29wKTogUHJvbWlzZTwoKSA9PiBQcm9taXNlPHZvaWQ+PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgIGF3YWl0IGxpc3RlbmVyKGF3YWl0IHRoaXMuY3VycmVudFZhbHVlKTtcbiAgICAgICAgY29uc3QgZGV0YWNoTGlzdGVuZXIgPSB0aGlzLm9uTmV4dChsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcigpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbmRPYnNlcnZlKCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJlZ2luT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByb3RlY3RlZCBhc3luYyBlbWl0RXJyb3IoZXJyb3I6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBlcnJvck9iamVjdCA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihgJHtlcnJvcn1gKTtcbiAgICAgICAgZm9yIChjb25zdCBlcnJvckxpc3RlbmVyIG9mIHRoaXMuZXJyb3JMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGF3YWl0IGVycm9yTGlzdGVuZXIoZXJyb3JPYmplY3QpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlPFQ+IGV4dGVuZHMgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUPiB7XG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlzdGVuZXJzOiBBcnJheTxWYWx1ZUxpc3RlbmVyPFQ+PiA9IFtdO1xuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldEN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmJlZ2luTGlzdGVuaW5nKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGVuZE9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcExpc3RlbmluZygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBiZWdpbkxpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgc3RvcExpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZW1pdFVwZGF0ZSh2YWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLm5vdGlmeUFsbExpc3RlbmVyc0FuZFdhaXRGb3JDb21wbGV0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChsaXN0ZW5lcjogKG5leHRWYWx1ZTogVCkgPT4gUHJvbWlzZTx2b2lkPik6IERldGFjaExpc3RlbmVyIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbm90aWZ5QWxsTGlzdGVuZXJzQW5kV2FpdEZvckNvbXBsZXRlKG5leHRWYWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBhd2FpdCBsaXN0ZW5lcihuZXh0VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXR0YWNoVmFsdWVQcm9kdWNlcjxUSSwgVEEsIFRPPiBleHRlbmRzIENoYWluYWJsZVZhbHVlUHJvZHVjZXI8VE8+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VEk+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXR0YWNoRmFjdG9yeTogKHZhbHVlOiBUSSkgPT4gUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUQT4+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgam9pblZhbHVlczogKG9yaWdpbmFsOiBUSSwgYXR0YWNoZWQ6IFRBKSA9PiBQcm9taXNlPFRPPjtcbiAgICBwcml2YXRlIGxhc3RBdHRhY2hLZXk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBhdHRhY2hlZFByb2R1Y2VyPzogSVZhbHVlUHJvZHVjZXI8VEE+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZhbHVhdGVBdHRhY2hLZXk6ICh2YWx1ZTogVEkpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVyczogQXJyYXk8VmFsdWVMaXN0ZW5lcjxUTz4+ID0gW107XG4gICAgcHJpdmF0ZSBkZXRhY2hQYXJlbnRMaXN0ZW5lcj86IERldGFjaExpc3RlbmVyO1xuICAgIHByaXZhdGUgZGV0YWNoQXR0YWNoZWRMaXN0ZW5lcj86IERldGFjaExpc3RlbmVyO1xuICAgIHByaXZhdGUgbGFzdEF0dGFjaGVkVmFsdWU/OiBUQTtcbiAgICBwcml2YXRlIGxhc3RQYXJlbnRWYWx1ZT86IFRJO1xuICAgIHByaXZhdGUgYXdhaXRpbmdMYXN0QXR0YWNoZWRWYWx1ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNJbk9ic2VydmVTdGF0ZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFRJPixcbiAgICAgICAgYXR0YWNoRmFjdG9yeTogKHZhbHVlOiBUSSkgPT4gUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUQT4+LFxuICAgICAgICBqb2luVmFsdWVzPzogKG9yaWdpbmFsOiBUSSwgYXR0YWNoZWQ6IFRBKSA9PiBQcm9taXNlPFRPPixcbiAgICAgICAgZXZhbHVhdGVBdHRhY2hLZXk/OiAodmFsdWU6IFRJKSA9PiBQcm9taXNlPHN0cmluZz5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuYXR0YWNoRmFjdG9yeSA9IGF0dGFjaEZhY3Rvcnk7XG4gICAgICAgIC8vINCvINC90LUg0LzQvtCz0YMg0L/QvtCx0LXQtNC40YLRjCDRgtC40L/QuNC30LDRhtC40Y4g0LIg0Y3RgtC+0Lwg0LzQtdGB0YLQtSwg0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDRgyDQvNC10L3RjyDQutC+0LTQsCDQv9C+0LvRg9GH0LDQtdGC0YHRj1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuam9pblZhbHVlcyA9IGpvaW5WYWx1ZXMgfHwgKGFzeW5jIHggPT4geCk7XG4gICAgICAgIHRoaXMuZXZhbHVhdGVBdHRhY2hLZXkgPSBldmFsdWF0ZUF0dGFjaEtleSB8fCAoYXN5bmMgKCkgPT4gXCJTVEFUSUMtQVRUQUNILUtFWVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hdHRhY2hlZFByb2R1Y2VyLmVuZE9ic2VydmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFRPPiB7XG4gICAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9IGFzeW5jICgpOiBQcm9taXNlPFRPPiA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IGF3YWl0IHRoaXMucGFyZW50LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMubGFzdFBhcmVudFZhbHVlID0gcGFyZW50VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBhdHRhY2hLZXkgPSBhd2FpdCB0aGlzLmV2YWx1YXRlQXR0YWNoS2V5KHBhcmVudFZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkUHJvZHVjZXIgIT0gdW5kZWZpbmVkICYmIHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPSB0aGlzLmF0dGFjaGVkUHJvZHVjZXIub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5sYXN0QXR0YWNoS2V5ID09IHVuZGVmaW5lZCB8fCB0aGlzLmxhc3RBdHRhY2hLZXkgIT09IGF0dGFjaEtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdEF0dGFjaEtleSA9IGF0dGFjaEtleTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRQcm9kdWNlciAhPSB1bmRlZmluZWQgJiYgdGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5lbmRPYnNlcnZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRQcm9kdWNlciA9IGF3YWl0IHRoaXMuYXR0YWNoRmFjdG9yeShwYXJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciA9IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5vbk5leHQodGhpcy5oYW5kbGVDaGFuZ2VBdHRhY2hlZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkUHJvZHVjZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZFByb2dyYW1TdGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaGVkVmFsdWUgPSBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5sYXN0QXR0YWNoZWRWYWx1ZSA9IGF0dGFjaGVkVmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5qb2luVmFsdWVzKHBhcmVudFZhbHVlLCBhdHRhY2hlZFZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbWl0TmV4dFZhbHVlKHZhbHVlOiBUTyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBhd2FpdCBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25OZXh0KGxpc3RlbmVyOiAobmV4dFZhbHVlOiBUTykgPT4gUHJvbWlzZTx2b2lkPik6IERldGFjaExpc3RlbmVyIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRldGFjaFBhcmVudExpc3RlbmVyID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIgPSB0aGlzLnBhcmVudC5vbk5leHQodGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCAmJiB0aGlzLmRldGFjaFBhcmVudExpc3RlbmVyID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIgPSB0aGlzLmF0dGFjaGVkUHJvZHVjZXIub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSA9IGFzeW5jIChhdHRhY2hlZFZhbHVlOiBUQSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0aGlzLmxhc3RBdHRhY2hlZFZhbHVlID0gYXR0YWNoZWRWYWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmF3YWl0aW5nTGFzdEF0dGFjaGVkVmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxhc3RQYXJlbnRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkUHJvZ3JhbVN0YXRlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0TmV4dFZhbHVlKGF3YWl0IHRoaXMuam9pblZhbHVlcyh0aGlzLmxhc3RQYXJlbnRWYWx1ZSwgYXR0YWNoZWRWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlQ2hhbmdlUGFyZW50VmFsdWUgPSBhc3luYyAocGFyZW50VmFsdWU6IFRJKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIHRoaXMubGFzdFBhcmVudFZhbHVlID0gcGFyZW50VmFsdWU7XG4gICAgICAgIGNvbnN0IGF0dGFjaEtleSA9IGF3YWl0IHRoaXMuZXZhbHVhdGVBdHRhY2hLZXkocGFyZW50VmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCAmJiB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPSB0aGlzLmF0dGFjaGVkUHJvZHVjZXIub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGFzdEF0dGFjaEtleSA9PSB1bmRlZmluZWQgfHwgdGhpcy5sYXN0QXR0YWNoS2V5ICE9PSBhdHRhY2hLZXkpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdEF0dGFjaEtleSA9IGF0dGFjaEtleTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCAmJiB0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hdHRhY2hlZFByb2R1Y2VyID0gYXdhaXQgdGhpcy5hdHRhY2hGYWN0b3J5KHBhcmVudFZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPSB0aGlzLmF0dGFjaGVkUHJvZHVjZXIub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRQcm9kdWNlciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWRQcm9ncmFtU3RhdGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8g0J/RgNC+0YHRgtC+INC90LXQvNC90L7Qs9C+INC+0LHQvtC20LTQtdC8LCDQstC00YDRg9CzINC/0YDQuNC00ZHRgiDQtNGA0YPQs9C+0LUgYXR0YWNoZWRWYWx1ZVxuICAgICAgICB0aGlzLmF3YWl0aW5nTGFzdEF0dGFjaGVkVmFsdWUgPSB0cnVlO1xuICAgICAgICBhd2FpdCBkZWxheSg3MDApO1xuICAgICAgICB0aGlzLmF3YWl0aW5nTGFzdEF0dGFjaGVkVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGF0dGFjaGVkVmFsdWUgPSB0aGlzLmxhc3RBdHRhY2hlZFZhbHVlO1xuICAgICAgICBpZiAoYXR0YWNoZWRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF0dGFjaGVkVmFsdWUgPSBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdE5leHRWYWx1ZShhd2FpdCB0aGlzLmpvaW5WYWx1ZXMocGFyZW50VmFsdWUsIGF0dGFjaGVkVmFsdWUpKTtcbiAgICB9O1xufVxuXG5leHBvcnQgY2xhc3MgRXhlY3V0ZU9uVmFsdWVQcm9kdWNlcjxUPiBleHRlbmRzIENoYWluYWJsZVZhbHVlUHJvZHVjZXI8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbjogKHZhbHVlOiBUKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD4sIGFjdGlvbjogKHZhbHVlOiBUKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVudFZhbHVlKCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCBnZXRDdXJyZW50VmFsdWUgPSBhc3luYyAoKTogUHJvbWlzZTxUPiA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMucGFyZW50LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5leHQobGlzdGVuZXI6IChuZXh0VmFsdWU6IFQpID0+IFByb21pc2U8dm9pZD4pOiBEZXRhY2hMaXN0ZW5lciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5vbk5leHQoYXN5bmMgcGFyZW50VmFsdWUgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmVudFZhbHVlO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRFcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNmb3JtVmFsdWVQcm9kdWNlcjxUSSwgVE8+IGV4dGVuZHMgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUTz4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUST47XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2Zvcm1GdW5jdGlvbjogKHZhbHVlOiBUSSkgPT4gUHJvbWlzZTxUTz47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUST4sIHRyYW5zZm9ybUZ1bmN0aW9uOiAodmFsdWU6IFRJKSA9PiBQcm9taXNlPFRPPikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1GdW5jdGlvbiA9IHRyYW5zZm9ybUZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBiZWdpbk9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmJlZ2luT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbmRPYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5lbmRPYnNlcnZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUTz4ge1xuICAgICAgICBjb25zdCBnZXRDdXJyZW50VmFsdWUgPSBhc3luYyAoKTogUHJvbWlzZTxUTz4gPT4gdGhpcy50cmFuc2Zvcm1GdW5jdGlvbihhd2FpdCB0aGlzLnBhcmVudC5jdXJyZW50VmFsdWUpO1xuICAgICAgICByZXR1cm4gZ2V0Q3VycmVudFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChsaXN0ZW5lcjogKG5leHRWYWx1ZTogVE8pID0+IFByb21pc2U8dm9pZD4pOiBEZXRhY2hMaXN0ZW5lciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5vbk5leHQoYXN5bmMgcGFyZW50VmFsdWUgPT4ge1xuICAgICAgICAgICAgYXdhaXQgbGlzdGVuZXIoYXdhaXQgdGhpcy50cmFuc2Zvcm1GdW5jdGlvbihwYXJlbnRWYWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcjxULCBUSSwgVE8+IGV4dGVuZHMgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUT1tdPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFQ+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3BsaXRGdW5jdGlvbjogKGlucHV0OiBUKSA9PiBUSVtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2V0S2V5OiAoaW5wdXQ6IFRJKSA9PiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYWN0b3J5OiAoaW5wdXQ6IFRJKSA9PiBJVmFsdWVQcm9kdWNlcjxUTz47XG4gICAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnM6IEFycmF5PFZhbHVlTGlzdGVuZXI8VE9bXT4+ID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFpbnM6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogSVZhbHVlUHJvZHVjZXI8VE8+O1xuICAgICAgICAgICAgbGFzdFZhbHVlOiB1bmRlZmluZWQgfCBUTztcbiAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBEZXRhY2hMaXN0ZW5lcjtcbiAgICAgICAgfTtcbiAgICB9ID0ge307XG4gICAgcHJpdmF0ZSBpc0luT2JzZXJ2ZVN0YXRlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD4sXG4gICAgICAgIHNwbGl0RnVuY3Rpb246IChpbnB1dDogVCkgPT4gVElbXSxcbiAgICAgICAgZ2V0S2V5OiAoaW5wdXQ6IFRJKSA9PiBzdHJpbmcsXG4gICAgICAgIGZhY3Rvcnk6IChpbnB1dDogVEkpID0+IElWYWx1ZVByb2R1Y2VyPFRPPlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5zcGxpdEZ1bmN0aW9uID0gc3BsaXRGdW5jdGlvbjtcbiAgICAgICAgdGhpcy5nZXRLZXkgPSBnZXRLZXk7XG4gICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7XG4gICAgICAgIHRoaXMucGFyZW50Lm9uTmV4dCh0aGlzLmhhbmRsZUNoYW5nZVBhcmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUT1tdPiB7XG4gICAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9IGFzeW5jICgpOiBQcm9taXNlPFRPW10+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuc3BsaXRGdW5jdGlvbihhd2FpdCB0aGlzLnBhcmVudC5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBUT1tdID0gW107XG4gICAgICAgICAgICBjb25zdCBlcnJvcnM6IFJlYXNvbk9yRXJyb3JbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFZhbHVlUHJvZHVjZXIgPSB0aGlzLmZhY3RvcnkodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2hpbGRWYWx1ZVByb2R1Y2VyLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFZhbHVlID0gYXdhaXQgY2hpbGRWYWx1ZVByb2R1Y2VyLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogY2hpbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IGNoaWxkVmFsdWVQcm9kdWNlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBjaGlsZFZhbHVlUHJvZHVjZXIub25OZXh0KHggPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbih4LCBrZXkpKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogY2hpbGRWYWx1ZVByb2R1Y2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IGNoaWxkVmFsdWVQcm9kdWNlci5vbk5leHQoeCA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKHgsIGtleSkpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JzWzBdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvcnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZWRFcnJvcihcIlRoZXJlIGFyZSBlcnJvcnNcIiwgLi4uZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBnZXRDdXJyZW50VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhdGVWYWx1ZXModGhpcy5jaGFpbnMpKSB7XG4gICAgICAgICAgICBhd2FpdCB2YWx1ZS52YWx1ZVByb2R1Y2VyLmVuZE9ic2VydmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25OZXh0KGxpc3RlbmVyOiAobmV4dFZhbHVlOiBUT1tdKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBlbWl0VmFsdWUodmFsdWU6IFRPW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgICAgICAgYXdhaXQgbGlzdGVuZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b01hcCh2YWx1ZXM6IFRJW10pOiB7IFtrZXk6IHN0cmluZ106IFRJIH0ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogVEkgfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgcmVzdWx0W3RoaXMuZ2V0S2V5KHZhbHVlKV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4gPSBhc3luYyAobmV4dFZhbHVlOiBUTywga2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgY29uc3QgY2hhaW5WYWx1ZSA9IHRoaXMuY2hhaW5zW2tleV07XG4gICAgICAgIGlmIChjaGFpblZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2hhaW5WYWx1ZS5sYXN0VmFsdWUgPSBuZXh0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VmFsdWUoXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuY2hhaW5zKVxuICAgICAgICAgICAgICAgIC5tYXAoeCA9PiB4Lmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZUNoYW5nZVBhcmVudCA9IGFzeW5jIChpbnB1dDogVCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnNwbGl0RnVuY3Rpb24oaW5wdXQpO1xuICAgICAgICBjb25zdCBuZXh0VmFsdWVzTWFwID0gdGhpcy50b01hcCh2YWx1ZXMpO1xuXG4gICAgICAgIGNvbnN0IG5ld0tleXMgPSBfLmRpZmZlcmVuY2UoT2JqZWN0LmtleXMobmV4dFZhbHVlc01hcCksIE9iamVjdC5rZXlzKHRoaXMuY2hhaW5zKSk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRLZXlzID0gXy5kaWZmZXJlbmNlKE9iamVjdC5rZXlzKHRoaXMuY2hhaW5zKSwgT2JqZWN0LmtleXMobmV4dFZhbHVlc01hcCkpO1xuICAgICAgICBmb3IgKGNvbnN0IG5ld0tleSBvZiBuZXdLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDaGFpbiA9IHRoaXMuZmFjdG9yeShuZXh0VmFsdWVzTWFwW25ld0tleV0gPz8gcmVqZWN0KCkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ld0NoYWluLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDaGFpblZhbHVlID0gYXdhaXQgbmV3Q2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5zW25ld0tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbmV3Q2hhaW5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogbmV3Q2hhaW4sXG4gICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBuZXdDaGFpbi5vbk5leHQobmV4dFZhbHVlID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4obmV4dFZhbHVlLCBuZXdLZXkpKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNbbmV3S2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IG5ld0NoYWluLFxuICAgICAgICAgICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogbmV3Q2hhaW4ub25OZXh0KG5leHRWYWx1ZSA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKG5leHRWYWx1ZSwgbmV3S2V5KSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHJlbW92ZWRLZXkgb2YgcmVtb3ZlZEtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRDaGFpbiA9IHRoaXMuY2hhaW5zW3JlbW92ZWRLZXldO1xuICAgICAgICAgICAgcmVtb3ZlZENoYWluPy5kZXRhY2hMaXN0ZW5lcigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlbW92ZWRDaGFpbj8udmFsdWVQcm9kdWNlci5lbmRPYnNlcnZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyDQryDQvdC1INC30L3QsNGOLCDQutCw0Log0YLRg9GCINC/0YDQsNCy0LjQu9GM0L3QvlxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWR5bmFtaWMtZGVsZXRlXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jaGFpbnNbcmVtb3ZlZEtleV07XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VmFsdWUoXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuY2hhaW5zKVxuICAgICAgICAgICAgICAgIC5tYXAoeCA9PiB4Lmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICAgICAgICApO1xuICAgIH07XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhbGxlbFNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyPFQsIFRJLCBUTz4gZXh0ZW5kcyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPFRPW10+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBzcGxpdEZ1bmN0aW9uOiAoaW5wdXQ6IFQpID0+IFRJW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXRLZXk6IChpbnB1dDogVEkpID0+IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZhY3Rvcnk6IChpbnB1dDogVEkpID0+IElWYWx1ZVByb2R1Y2VyPFRPPiB8IFByb21pc2U8SVZhbHVlUHJvZHVjZXI8VE8+PjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVyczogQXJyYXk8VmFsdWVMaXN0ZW5lcjxUT1tdPj4gPSBbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYWluczoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBJVmFsdWVQcm9kdWNlcjxUTz47XG4gICAgICAgICAgICBsYXN0VmFsdWU6IHVuZGVmaW5lZCB8IFRPO1xuICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IERldGFjaExpc3RlbmVyO1xuICAgICAgICB9O1xuICAgIH0gPSB7fTtcbiAgICBwcml2YXRlIGlzSW5PYnNlcnZlU3RhdGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUPixcbiAgICAgICAgc3BsaXRGdW5jdGlvbjogKGlucHV0OiBUKSA9PiBUSVtdLFxuICAgICAgICBnZXRLZXk6IChpbnB1dDogVEkpID0+IHN0cmluZyxcbiAgICAgICAgZmFjdG9yeTogKGlucHV0OiBUSSkgPT4gSVZhbHVlUHJvZHVjZXI8VE8+IHwgUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUTz4+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLnNwbGl0RnVuY3Rpb24gPSBzcGxpdEZ1bmN0aW9uO1xuICAgICAgICB0aGlzLmdldEtleSA9IGdldEtleTtcbiAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTtcbiAgICAgICAgdGhpcy5wYXJlbnQub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFRPW10+IHtcbiAgICAgICAgY29uc3QgZ2V0Q3VycmVudFZhbHVlID0gYXN5bmMgKCk6IFByb21pc2U8VE9bXT4gPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5zcGxpdEZ1bmN0aW9uKGF3YWl0IHRoaXMucGFyZW50LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFRPW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yczogUmVhc29uT3JFcnJvcltdID0gW107XG4gICAgICAgICAgICBjb25zdCBjb25jdXJyZW5jeUxpbWl0ID0gcExpbWl0KG9zLmNwdXMoKS5sZW5ndGgpO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgdmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PlxuICAgICAgICAgICAgICAgICAgICBjb25jdXJyZW5jeUxpbWl0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkVmFsdWVQcm9kdWNlciA9IGF3YWl0IHRoaXMuZmFjdG9yeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2hpbGRWYWx1ZVByb2R1Y2VyLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFZhbHVlID0gYXdhaXQgY2hpbGRWYWx1ZVByb2R1Y2VyLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gY2hpbGRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBjaGlsZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBjaGlsZFZhbHVlUHJvZHVjZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBjaGlsZFZhbHVlUHJvZHVjZXIub25OZXh0KHggPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbih4LCBrZXkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYWluc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogY2hpbGRWYWx1ZVByb2R1Y2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogY2hpbGRWYWx1ZVByb2R1Y2VyLm9uTmV4dCh4ID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4oeCwga2V5KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcnNbMF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9ycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQWdncmVnYXRlZEVycm9yKFwiVGhlcmUgYXJlIGVycm9yc1wiLCAuLi5lcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBiZWdpbk9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuaXNJbk9ic2VydmVTdGF0ZSA9IHRydWU7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmJlZ2luT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbmRPYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5lbmRPYnNlcnZlKCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuY2hhaW5zKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGFpbnNba2V5XT8udmFsdWVQcm9kdWNlci5lbmRPYnNlcnZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0luT2JzZXJ2ZVN0YXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChsaXN0ZW5lcjogKG5leHRWYWx1ZTogVE9bXSkgPT4gUHJvbWlzZTx2b2lkPik6IERldGFjaExpc3RlbmVyIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZW1pdFZhbHVlKHZhbHVlOiBUT1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGF3YWl0IGxpc3RlbmVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdG9NYXAodmFsdWVzOiBUSVtdKTogeyBba2V5OiBzdHJpbmddOiBUSSB9IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IFRJIH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJlc3VsdFt0aGlzLmdldEtleSh2YWx1ZSldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZUNoYW5nZVBhcmVudENoYWluID0gYXN5bmMgKG5leHRWYWx1ZTogVE8sIGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGNvbnN0IGNoYWluVmFsdWUgPSB0aGlzLmNoYWluc1trZXldO1xuICAgICAgICBpZiAoY2hhaW5WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNoYWluVmFsdWUubGFzdFZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdFZhbHVlKFxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmNoYWlucylcbiAgICAgICAgICAgICAgICAubWFwKHggPT4geC5sYXN0VmFsdWUpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpc05vdE51bGxPclVuZGVmaW5lZClcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVDaGFuZ2VQYXJlbnQgPSBhc3luYyAoaW5wdXQ6IFQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5zcGxpdEZ1bmN0aW9uKGlucHV0KTtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlc01hcCA9IHRoaXMudG9NYXAodmFsdWVzKTtcblxuICAgICAgICBjb25zdCBuZXdLZXlzID0gXy5kaWZmZXJlbmNlKE9iamVjdC5rZXlzKG5leHRWYWx1ZXNNYXApLCBPYmplY3Qua2V5cyh0aGlzLmNoYWlucykpO1xuICAgICAgICBjb25zdCByZW1vdmVkS2V5cyA9IF8uZGlmZmVyZW5jZShPYmplY3Qua2V5cyh0aGlzLmNoYWlucyksIE9iamVjdC5rZXlzKG5leHRWYWx1ZXNNYXApKTtcbiAgICAgICAgZm9yIChjb25zdCBuZXdLZXkgb2YgbmV3S2V5cykge1xuICAgICAgICAgICAgY29uc3QgbmV3Q2hhaW4gPSBhd2FpdCB0aGlzLmZhY3RvcnkobmV4dFZhbHVlc01hcFtuZXdLZXldID8/IHJlamVjdCgpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXdDaGFpbi5iZWdpbk9ic2VydmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2hhaW5WYWx1ZSA9IGF3YWl0IG5ld0NoYWluLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYWluc1tuZXdLZXldID0ge1xuICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IG5ld0NoYWluVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IG5ld0NoYWluLFxuICAgICAgICAgICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogbmV3Q2hhaW4ub25OZXh0KG5leHRWYWx1ZSA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKG5leHRWYWx1ZSwgbmV3S2V5KSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5zW25ld0tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBuZXdDaGFpbixcbiAgICAgICAgICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IG5ld0NoYWluLm9uTmV4dChuZXh0VmFsdWUgPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbihuZXh0VmFsdWUsIG5ld0tleSkpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByZW1vdmVkS2V5IG9mIHJlbW92ZWRLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkQ2hhaW4gPSB0aGlzLmNoYWluc1tyZW1vdmVkS2V5XTtcbiAgICAgICAgICAgIHJlbW92ZWRDaGFpbj8uZGV0YWNoTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCByZW1vdmVkQ2hhaW4/LnZhbHVlUHJvZHVjZXIuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g0K8g0L3QtSDQt9C90LDRjiwg0LrQsNC6INGC0YPRgiDQv9GA0LDQstC40LvRjNC90L5cbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1keW5hbWljLWRlbGV0ZVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2hhaW5zW3JlbW92ZWRLZXldO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdFZhbHVlKFxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmNoYWlucylcbiAgICAgICAgICAgICAgICAubWFwKHggPT4geC5sYXN0VmFsdWUpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpc05vdE51bGxPclVuZGVmaW5lZClcbiAgICAgICAgKTtcbiAgICB9O1xufVxuXG5leHBvcnQgY2xhc3MgU2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWRQcm9kdWNlcjxUPiBleHRlbmRzIE9ic2VydmFibGVWYWx1ZVByb2R1Y2VyQmFzZTxUPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFQ+O1xuICAgIHByaXZhdGUgZGV0YWNoRnJvbVBhcmVudD86IERldGFjaExpc3RlbmVyO1xuICAgIHByaXZhdGUgbGFzdFBhcmVudFZhbHVlPzogVDtcblxuICAgIHByaXZhdGUgbmV4dEVtaXRUb1Byb2Nlc3M/OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIHByaXZhdGUgY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQ/OiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD4pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldEN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgaWYgKHRoaXMubGFzdFBhcmVudFZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlQcm9jZXNzaW5nRW1pdCA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0UGFyZW50VmFsdWUgPSBhd2FpdCB0aGlzLnBhcmVudC5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jdXJyZW50bHlQcm9jZXNzaW5nRW1pdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sYXN0UGFyZW50VmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkUHJvZ3JhbVN0YXRlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RQYXJlbnRWYWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgYmVnaW5MaXN0ZW5pbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICBpZiAodGhpcy5kZXRhY2hGcm9tUGFyZW50ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2hGcm9tUGFyZW50ID0gdGhpcy5wYXJlbnQub25OZXh0KG5leHRWYWx1ZSA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudFZhbHVlKG5leHRWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHN0b3BMaXN0ZW5pbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmRldGFjaEZyb21QYXJlbnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaEZyb21QYXJlbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5lbmRPYnNlcnZlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVDaGFuZ2VQYXJlbnRWYWx1ZShuZXh0VmFsdWU6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5sYXN0UGFyZW50VmFsdWUgPSBuZXh0VmFsdWU7XG4gICAgICAgIHRoaXMubmV4dEVtaXRUb1Byb2Nlc3MgPSBfLm9uY2UoKCkgPT4gdGhpcy5lbWl0VXBkYXRlKG5leHRWYWx1ZSkpO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50bHlQcm9jZXNzaW5nRW1pdCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50bHlQcm9jZXNzaW5nRW1pdCA9IHRoaXMubmV4dEVtaXRUb1Byb2Nlc3MoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jdXJyZW50bHlQcm9jZXNzaW5nRW1pdDtcbiAgICAgICAgdGhpcy5jdXJyZW50bHlQcm9jZXNzaW5nRW1pdCA9IHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRlbGF5KHRpbWVvdXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCB8IHVuZGVmaW5lZCB8IG51bGwpOiBpbnB1dCBpcyBUIHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuIl19
@@ -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
  });
@@ -13,17 +15,6 @@ var _FsUtils = require("../FsUtils");
13
15
 
14
16
  var _ChainableValueProducer = require("./ChainableValueProducer");
15
17
 
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- (function () {
19
- var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
20
- enterModule && enterModule(module);
21
- })();
22
-
23
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
24
- return a;
25
- };
26
-
27
18
  class DirectoryEntriesProducer extends _ChainableValueProducer.ObservableValueProducerBase {
28
19
  constructor(pathToDir, masks) {
29
20
  super();
@@ -87,31 +78,7 @@ class DirectoryEntriesProducer extends _ChainableValueProducer.ObservableValuePr
87
78
  }
88
79
  }
89
80
 
90
- // @ts-ignore
91
- __reactstandin__regenerateByEval(key, code) {
92
- // @ts-ignore
93
- this[key] = eval(code);
94
- }
95
-
96
81
  }
97
82
 
98
83
  exports.DirectoryEntriesProducer = DirectoryEntriesProducer;
99
- ;
100
-
101
- (function () {
102
- var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
103
-
104
- if (!reactHotLoader) {
105
- return;
106
- }
107
-
108
- reactHotLoader.register(DirectoryEntriesProducer, "DirectoryEntriesProducer", "C:\\buildAgent\\work\\8df8f1edd755969c\\Tools\\src\\Commons\\TasksCore\\DirectoryEntriesProducer.ts");
109
- })();
110
-
111
- ;
112
-
113
- (function () {
114
- var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
115
- leaveModule && leaveModule(module);
116
- })();
117
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9Db21tb25zL1Rhc2tzQ29yZS9EaXJlY3RvcnlFbnRyaWVzUHJvZHVjZXIudHMiXSwibmFtZXMiOlsiRGlyZWN0b3J5RW50cmllc1Byb2R1Y2VyIiwiT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlIiwiY29uc3RydWN0b3IiLCJwYXRoVG9EaXIiLCJtYXNrcyIsImxhc3RWYWx1ZSIsIndhdGNoZXIiLCJiZWdpbkxpc3RlbmluZyIsInVuZGVmaW5lZCIsImlnbm9yZUluaXRpYWwiLCJjd2QiLCJpZ25vcmVQZXJtaXNzaW9uRXJyb3JzIiwidXNlUG9sbGluZyIsImRlcHRoIiwiaGFuZGxlQW55RnNFdmVudERlYm91bmNlZCIsIl8iLCJkZWJvdW5jZSIsImhhbmRsZUFueUZzRXZlbnQiLCJvbiIsInN0b3BMaXN0ZW5pbmciLCJjbG9zZSIsImdldEN1cnJlbnRWYWx1ZSIsInJlc29sdmVEaXJlY3RvcnlDb250ZW50IiwicmVzdWx0IiwibWFzayIsImNvbmNhdCIsInVuaXEiLCJuZXh0VmFsdWUiLCJpc0VxdWFsIiwiZW1pdFVwZGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUVBOztBQUVBOzs7Ozs7Ozs7Ozs7O0FBRU8sTUFBTUEsd0JBQU4sU0FBdUNDLG1EQUF2QyxDQUE2RTtBQU16RUMsRUFBQUEsV0FBVyxDQUFDQyxTQUFELEVBQW9CQyxLQUFwQixFQUFxQztBQUNuRDtBQURtRCxTQUx0Q0QsU0FLc0M7QUFBQSxTQUp0Q0MsS0FJc0M7QUFBQSxTQUgvQ0MsU0FHK0M7QUFBQSxTQUYvQ0MsT0FFK0M7QUFFbkQsU0FBS0gsU0FBTCxHQUFpQkEsU0FBakI7QUFDQSxTQUFLQyxLQUFMLEdBQWFBLEtBQWI7QUFDSDs7QUFFNkIsUUFBZEcsY0FBYyxHQUFrQjtBQUM1QyxRQUFJLEtBQUtELE9BQUwsSUFBZ0JFLFNBQXBCLEVBQStCO0FBQzNCO0FBQ0g7O0FBQ0QsU0FBS0YsT0FBTCxHQUFlLHFCQUFNLEtBQUtGLEtBQVgsRUFBa0I7QUFDN0JLLE1BQUFBLGFBQWEsRUFBRSxJQURjO0FBRTdCQyxNQUFBQSxHQUFHLEVBQUUsS0FBS1AsU0FGbUI7QUFHN0JRLE1BQUFBLHNCQUFzQixFQUFFLEtBSEs7QUFJN0JDLE1BQUFBLFVBQVUsRUFBRSxJQUppQjtBQUs3QkMsTUFBQUEsS0FBSyxFQUFFO0FBTHNCLEtBQWxCLENBQWY7O0FBT0EsVUFBTUMseUJBQXlCLEdBQUdDLGdCQUFFQyxRQUFGLENBQVcsTUFBTSxLQUFLQyxnQkFBTCxFQUFqQixFQUEwQyxJQUExQyxDQUFsQzs7QUFDQSxTQUFLWCxPQUFMLENBQWFZLEVBQWIsQ0FBZ0IsS0FBaEIsRUFBdUJKLHlCQUF2QjtBQUNBLFNBQUtSLE9BQUwsQ0FBYVksRUFBYixDQUFnQixPQUFoQixFQUF5QkoseUJBQXpCO0FBQ0g7O0FBRTRCLFFBQWJLLGFBQWEsR0FBa0I7QUFDM0MsUUFBSSxLQUFLYixPQUFMLElBQWdCRSxTQUFwQixFQUErQjtBQUMzQjtBQUNBLFdBQUtGLE9BQUwsQ0FBYWMsS0FBYjtBQUNIO0FBQ0o7O0FBRThCLFFBQWZDLGVBQWUsR0FBc0I7QUFDakQsU0FBS2hCLFNBQUwsR0FBaUIsTUFBTSxLQUFLaUIsdUJBQUwsRUFBdkI7QUFDQSxXQUFPLEtBQUtqQixTQUFaO0FBQ0g7O0FBRW9DLFFBQXZCaUIsdUJBQXVCLEdBQXNCO0FBQ3ZELFFBQUlDLE1BQWdCLEdBQUcsRUFBdkI7O0FBQ0EsU0FBSyxNQUFNQyxJQUFYLElBQW1CLEtBQUtwQixLQUF4QixFQUErQjtBQUMzQm1CLE1BQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDRSxNQUFQLENBQWMsTUFBTSx3QkFBVUQsSUFBVixFQUFnQjtBQUFFZCxRQUFBQSxHQUFHLEVBQUUsS0FBS1A7QUFBWixPQUFoQixDQUFwQixDQUFUO0FBQ0g7O0FBQ0QsV0FBT1ksZ0JBQUVXLElBQUYsQ0FBT0gsTUFBUCxDQUFQO0FBQ0g7O0FBRTZCLFFBQWhCTixnQkFBZ0IsR0FBa0I7QUFDNUMsVUFBTVUsU0FBUyxHQUFHLE1BQU0sS0FBS0wsdUJBQUwsRUFBeEI7O0FBQ0EsUUFBSSxDQUFDUCxnQkFBRWEsT0FBRixDQUFVLEtBQUt2QixTQUFmLEVBQTBCc0IsU0FBMUIsQ0FBTCxFQUEyQztBQUN2QyxXQUFLdEIsU0FBTCxHQUFpQnNCLFNBQWpCO0FBQ0EsWUFBTSxLQUFLRSxVQUFMLENBQWdCLEtBQUt4QixTQUFyQixDQUFOO0FBQ0g7QUFDSjs7QUF0RCtFO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7Ozs7Ozs7Ozs7OzswQkFBdkVMLHdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRlNXYXRjaGVyLCB3YXRjaCB9IGZyb20gXCJjaG9raWRhclwiO1xuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuXG5pbXBvcnQgeyBnbG9iQXN5bmMgfSBmcm9tIFwiLi4vRnNVdGlsc1wiO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2UgfSBmcm9tIFwiLi9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyXCI7XG5cbmV4cG9ydCBjbGFzcyBEaXJlY3RvcnlFbnRyaWVzUHJvZHVjZXIgZXh0ZW5kcyBPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2U8c3RyaW5nW10+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhdGhUb0Rpcjogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWFza3M6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgbGFzdFZhbHVlPzogc3RyaW5nW107XG4gICAgcHJpdmF0ZSB3YXRjaGVyPzogRlNXYXRjaGVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhdGhUb0Rpcjogc3RyaW5nLCBtYXNrczogc3RyaW5nW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXRoVG9EaXIgPSBwYXRoVG9EaXI7XG4gICAgICAgIHRoaXMubWFza3MgPSBtYXNrcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgYmVnaW5MaXN0ZW5pbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLndhdGNoZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53YXRjaGVyID0gd2F0Y2godGhpcy5tYXNrcywge1xuICAgICAgICAgICAgaWdub3JlSW5pdGlhbDogdHJ1ZSxcbiAgICAgICAgICAgIGN3ZDogdGhpcy5wYXRoVG9EaXIsXG4gICAgICAgICAgICBpZ25vcmVQZXJtaXNzaW9uRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgIHVzZVBvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBkZXB0aDogMSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGhhbmRsZUFueUZzRXZlbnREZWJvdW5jZWQgPSBfLmRlYm91bmNlKCgpID0+IHRoaXMuaGFuZGxlQW55RnNFdmVudCgpLCAxMDAwKTtcbiAgICAgICAgdGhpcy53YXRjaGVyLm9uKFwiYWxsXCIsIGhhbmRsZUFueUZzRXZlbnREZWJvdW5jZWQpO1xuICAgICAgICB0aGlzLndhdGNoZXIub24oXCJlcnJvclwiLCBoYW5kbGVBbnlGc0V2ZW50RGVib3VuY2VkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgc3RvcExpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgICAgICAgIHRoaXMud2F0Y2hlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldEN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHRoaXMubGFzdFZhbHVlID0gYXdhaXQgdGhpcy5yZXNvbHZlRGlyZWN0b3J5Q29udGVudCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5sYXN0VmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlRGlyZWN0b3J5Q29udGVudCgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGxldCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbWFzayBvZiB0aGlzLm1hc2tzKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGF3YWl0IGdsb2JBc3luYyhtYXNrLCB7IGN3ZDogdGhpcy5wYXRoVG9EaXIgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfLnVuaXEocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZUFueUZzRXZlbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IGF3YWl0IHRoaXMucmVzb2x2ZURpcmVjdG9yeUNvbnRlbnQoKTtcbiAgICAgICAgaWYgKCFfLmlzRXF1YWwodGhpcy5sYXN0VmFsdWUsIG5leHRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0VXBkYXRlKHRoaXMubGFzdFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
84
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9Db21tb25zL1Rhc2tzQ29yZS9EaXJlY3RvcnlFbnRyaWVzUHJvZHVjZXIudHMiXSwibmFtZXMiOlsiRGlyZWN0b3J5RW50cmllc1Byb2R1Y2VyIiwiT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlIiwiY29uc3RydWN0b3IiLCJwYXRoVG9EaXIiLCJtYXNrcyIsImxhc3RWYWx1ZSIsIndhdGNoZXIiLCJiZWdpbkxpc3RlbmluZyIsInVuZGVmaW5lZCIsImlnbm9yZUluaXRpYWwiLCJjd2QiLCJpZ25vcmVQZXJtaXNzaW9uRXJyb3JzIiwidXNlUG9sbGluZyIsImRlcHRoIiwiaGFuZGxlQW55RnNFdmVudERlYm91bmNlZCIsIl8iLCJkZWJvdW5jZSIsImhhbmRsZUFueUZzRXZlbnQiLCJvbiIsInN0b3BMaXN0ZW5pbmciLCJjbG9zZSIsImdldEN1cnJlbnRWYWx1ZSIsInJlc29sdmVEaXJlY3RvcnlDb250ZW50IiwicmVzdWx0IiwibWFzayIsImNvbmNhdCIsInVuaXEiLCJuZXh0VmFsdWUiLCJpc0VxdWFsIiwiZW1pdFVwZGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUE7O0FBRUE7O0FBRU8sTUFBTUEsd0JBQU4sU0FBdUNDLG1EQUF2QyxDQUE2RTtBQU16RUMsRUFBQUEsV0FBVyxDQUFDQyxTQUFELEVBQW9CQyxLQUFwQixFQUFxQztBQUNuRDtBQURtRCxTQUx0Q0QsU0FLc0M7QUFBQSxTQUp0Q0MsS0FJc0M7QUFBQSxTQUgvQ0MsU0FHK0M7QUFBQSxTQUYvQ0MsT0FFK0M7QUFFbkQsU0FBS0gsU0FBTCxHQUFpQkEsU0FBakI7QUFDQSxTQUFLQyxLQUFMLEdBQWFBLEtBQWI7QUFDSDs7QUFFNkIsUUFBZEcsY0FBYyxHQUFrQjtBQUM1QyxRQUFJLEtBQUtELE9BQUwsSUFBZ0JFLFNBQXBCLEVBQStCO0FBQzNCO0FBQ0g7O0FBQ0QsU0FBS0YsT0FBTCxHQUFlLHFCQUFNLEtBQUtGLEtBQVgsRUFBa0I7QUFDN0JLLE1BQUFBLGFBQWEsRUFBRSxJQURjO0FBRTdCQyxNQUFBQSxHQUFHLEVBQUUsS0FBS1AsU0FGbUI7QUFHN0JRLE1BQUFBLHNCQUFzQixFQUFFLEtBSEs7QUFJN0JDLE1BQUFBLFVBQVUsRUFBRSxJQUppQjtBQUs3QkMsTUFBQUEsS0FBSyxFQUFFO0FBTHNCLEtBQWxCLENBQWY7O0FBT0EsVUFBTUMseUJBQXlCLEdBQUdDLGdCQUFFQyxRQUFGLENBQVcsTUFBTSxLQUFLQyxnQkFBTCxFQUFqQixFQUEwQyxJQUExQyxDQUFsQzs7QUFDQSxTQUFLWCxPQUFMLENBQWFZLEVBQWIsQ0FBZ0IsS0FBaEIsRUFBdUJKLHlCQUF2QjtBQUNBLFNBQUtSLE9BQUwsQ0FBYVksRUFBYixDQUFnQixPQUFoQixFQUF5QkoseUJBQXpCO0FBQ0g7O0FBRTRCLFFBQWJLLGFBQWEsR0FBa0I7QUFDM0MsUUFBSSxLQUFLYixPQUFMLElBQWdCRSxTQUFwQixFQUErQjtBQUMzQjtBQUNBLFdBQUtGLE9BQUwsQ0FBYWMsS0FBYjtBQUNIO0FBQ0o7O0FBRThCLFFBQWZDLGVBQWUsR0FBc0I7QUFDakQsU0FBS2hCLFNBQUwsR0FBaUIsTUFBTSxLQUFLaUIsdUJBQUwsRUFBdkI7QUFDQSxXQUFPLEtBQUtqQixTQUFaO0FBQ0g7O0FBRW9DLFFBQXZCaUIsdUJBQXVCLEdBQXNCO0FBQ3ZELFFBQUlDLE1BQWdCLEdBQUcsRUFBdkI7O0FBQ0EsU0FBSyxNQUFNQyxJQUFYLElBQW1CLEtBQUtwQixLQUF4QixFQUErQjtBQUMzQm1CLE1BQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDRSxNQUFQLENBQWMsTUFBTSx3QkFBVUQsSUFBVixFQUFnQjtBQUFFZCxRQUFBQSxHQUFHLEVBQUUsS0FBS1A7QUFBWixPQUFoQixDQUFwQixDQUFUO0FBQ0g7O0FBQ0QsV0FBT1ksZ0JBQUVXLElBQUYsQ0FBT0gsTUFBUCxDQUFQO0FBQ0g7O0FBRTZCLFFBQWhCTixnQkFBZ0IsR0FBa0I7QUFDNUMsVUFBTVUsU0FBUyxHQUFHLE1BQU0sS0FBS0wsdUJBQUwsRUFBeEI7O0FBQ0EsUUFBSSxDQUFDUCxnQkFBRWEsT0FBRixDQUFVLEtBQUt2QixTQUFmLEVBQTBCc0IsU0FBMUIsQ0FBTCxFQUEyQztBQUN2QyxXQUFLdEIsU0FBTCxHQUFpQnNCLFNBQWpCO0FBQ0EsWUFBTSxLQUFLRSxVQUFMLENBQWdCLEtBQUt4QixTQUFyQixDQUFOO0FBQ0g7QUFDSjs7QUF0RCtFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRlNXYXRjaGVyLCB3YXRjaCB9IGZyb20gXCJjaG9raWRhclwiO1xuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuXG5pbXBvcnQgeyBnbG9iQXN5bmMgfSBmcm9tIFwiLi4vRnNVdGlsc1wiO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2UgfSBmcm9tIFwiLi9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyXCI7XG5cbmV4cG9ydCBjbGFzcyBEaXJlY3RvcnlFbnRyaWVzUHJvZHVjZXIgZXh0ZW5kcyBPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2U8c3RyaW5nW10+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhdGhUb0Rpcjogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWFza3M6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgbGFzdFZhbHVlPzogc3RyaW5nW107XG4gICAgcHJpdmF0ZSB3YXRjaGVyPzogRlNXYXRjaGVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhdGhUb0Rpcjogc3RyaW5nLCBtYXNrczogc3RyaW5nW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXRoVG9EaXIgPSBwYXRoVG9EaXI7XG4gICAgICAgIHRoaXMubWFza3MgPSBtYXNrcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgYmVnaW5MaXN0ZW5pbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLndhdGNoZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53YXRjaGVyID0gd2F0Y2godGhpcy5tYXNrcywge1xuICAgICAgICAgICAgaWdub3JlSW5pdGlhbDogdHJ1ZSxcbiAgICAgICAgICAgIGN3ZDogdGhpcy5wYXRoVG9EaXIsXG4gICAgICAgICAgICBpZ25vcmVQZXJtaXNzaW9uRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgICAgIHVzZVBvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBkZXB0aDogMSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGhhbmRsZUFueUZzRXZlbnREZWJvdW5jZWQgPSBfLmRlYm91bmNlKCgpID0+IHRoaXMuaGFuZGxlQW55RnNFdmVudCgpLCAxMDAwKTtcbiAgICAgICAgdGhpcy53YXRjaGVyLm9uKFwiYWxsXCIsIGhhbmRsZUFueUZzRXZlbnREZWJvdW5jZWQpO1xuICAgICAgICB0aGlzLndhdGNoZXIub24oXCJlcnJvclwiLCBoYW5kbGVBbnlGc0V2ZW50RGVib3VuY2VkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgc3RvcExpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgICAgICAgIHRoaXMud2F0Y2hlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldEN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHRoaXMubGFzdFZhbHVlID0gYXdhaXQgdGhpcy5yZXNvbHZlRGlyZWN0b3J5Q29udGVudCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5sYXN0VmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlRGlyZWN0b3J5Q29udGVudCgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGxldCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbWFzayBvZiB0aGlzLm1hc2tzKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGF3YWl0IGdsb2JBc3luYyhtYXNrLCB7IGN3ZDogdGhpcy5wYXRoVG9EaXIgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfLnVuaXEocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZUFueUZzRXZlbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IGF3YWl0IHRoaXMucmVzb2x2ZURpcmVjdG9yeUNvbnRlbnQoKTtcbiAgICAgICAgaWYgKCFfLmlzRXF1YWwodGhpcy5sYXN0VmFsdWUsIG5leHRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0VXBkYXRlKHRoaXMubGFzdFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -7,15 +7,6 @@ exports.EmptyProducer = void 0;
7
7
 
8
8
  var _ChainableValueProducer = require("./ChainableValueProducer");
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
  class EmptyProducer extends _ChainableValueProducer.ObservableValueProducerBase {
20
11
  async beginListening() {// noop
21
12
  }
@@ -26,31 +17,7 @@ class EmptyProducer extends _ChainableValueProducer.ObservableValueProducerBase
26
17
  async getCurrentValue() {// noop
27
18
  }
28
19
 
29
- // @ts-ignore
30
- __reactstandin__regenerateByEval(key, code) {
31
- // @ts-ignore
32
- this[key] = eval(code);
33
- }
34
-
35
20
  }
36
21
 
37
22
  exports.EmptyProducer = EmptyProducer;
38
- ;
39
-
40
- (function () {
41
- var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
42
-
43
- if (!reactHotLoader) {
44
- return;
45
- }
46
-
47
- reactHotLoader.register(EmptyProducer, "EmptyProducer", "C:\\buildAgent\\work\\8df8f1edd755969c\\Tools\\src\\Commons\\TasksCore\\EmptyProducer.ts");
48
- })();
49
-
50
- ;
51
-
52
- (function () {
53
- var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
54
- leaveModule && leaveModule(module);
55
- })();
56
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9Db21tb25zL1Rhc2tzQ29yZS9FbXB0eVByb2R1Y2VyLnRzIl0sIm5hbWVzIjpbIkVtcHR5UHJvZHVjZXIiLCJPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2UiLCJiZWdpbkxpc3RlbmluZyIsInN0b3BMaXN0ZW5pbmciLCJnZXRDdXJyZW50VmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7QUFFTyxNQUFNQSxhQUFOLFNBQTRCQyxtREFBNUIsQ0FBOEQ7QUFDbkMsUUFBZEMsY0FBYyxHQUFrQixDQUM1QztBQUNIOztBQUU0QixRQUFiQyxhQUFhLEdBQWtCLENBQzNDO0FBQ0g7O0FBRThCLFFBQWZDLGVBQWUsR0FBa0IsQ0FDN0M7QUFDSDs7QUFYZ0U7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTs7Ozs7Ozs7Ozs7OzBCQUF4REosYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGVWYWx1ZVByb2R1Y2VyQmFzZSB9IGZyb20gXCIuL0NoYWluYWJsZVZhbHVlUHJvZHVjZXJcIjtcblxuZXhwb3J0IGNsYXNzIEVtcHR5UHJvZHVjZXIgZXh0ZW5kcyBPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2U8dm9pZD4ge1xuICAgIHByb3RlY3RlZCBhc3luYyBiZWdpbkxpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gbm9vcFxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBzdG9wTGlzdGVuaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBub29wXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldEN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gbm9vcFxuICAgIH1cbn1cbiJdfQ==
23
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9Db21tb25zL1Rhc2tzQ29yZS9FbXB0eVByb2R1Y2VyLnRzIl0sIm5hbWVzIjpbIkVtcHR5UHJvZHVjZXIiLCJPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2UiLCJiZWdpbkxpc3RlbmluZyIsInN0b3BMaXN0ZW5pbmciLCJnZXRDdXJyZW50VmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFTyxNQUFNQSxhQUFOLFNBQTRCQyxtREFBNUIsQ0FBOEQ7QUFDbkMsUUFBZEMsY0FBYyxHQUFrQixDQUM1QztBQUNIOztBQUU0QixRQUFiQyxhQUFhLEdBQWtCLENBQzNDO0FBQ0g7O0FBRThCLFFBQWZDLGVBQWUsR0FBa0IsQ0FDN0M7QUFDSDs7QUFYZ0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2UgfSBmcm9tIFwiLi9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyXCI7XG5cbmV4cG9ydCBjbGFzcyBFbXB0eVByb2R1Y2VyIGV4dGVuZHMgT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlPHZvaWQ+IHtcbiAgICBwcm90ZWN0ZWQgYXN5bmMgYmVnaW5MaXN0ZW5pbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIG5vb3BcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgc3RvcExpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gbm9vcFxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBnZXRDdXJyZW50VmFsdWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIG5vb3BcbiAgICB9XG59XG4iXX0=