@kontur.candy/tools 2.126.0 → 2.130.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 (234) hide show
  1. package/CHANGELOG.md +27 -2
  2. package/distr/Common/AsyncUtils.js +1 -30
  3. package/distr/Common/CandyApiClient/CandyApiClient.js +9 -42
  4. package/distr/Common/CandyApiClient/CandyApiClientContext.js +1 -33
  5. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +0 -4
  6. package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +0 -4
  7. package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +1 -29
  8. package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +0 -4
  9. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +1 -35
  10. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +1 -35
  11. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +1 -37
  12. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +1 -29
  13. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +1 -34
  14. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +1 -28
  15. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +0 -4
  16. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +1 -33
  17. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +1 -29
  18. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +1 -6
  19. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +0 -4
  20. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +0 -4
  21. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +5 -41
  22. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -5
  23. package/distr/Common/CandyApiClient/IsBuffer.js +1 -29
  24. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +0 -4
  25. package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +0 -4
  26. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +0 -4
  27. package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +0 -4
  28. package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +0 -4
  29. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +1 -6
  30. package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +0 -4
  31. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +0 -4
  32. package/distr/Common/CandyApiClient/Types/DraftFullId.js +0 -4
  33. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +0 -4
  34. package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +1 -6
  35. package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +0 -4
  36. package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +0 -4
  37. package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +1 -6
  38. package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +0 -4
  39. package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +0 -4
  40. package/distr/Common/CandyApiClient/Types/Guid.js +0 -4
  41. package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +1 -6
  42. package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +0 -4
  43. package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +0 -4
  44. package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +1 -6
  45. package/distr/Common/CommonConstants/SectionNames.js +1 -28
  46. package/distr/Common/Comparers.js +8 -30
  47. package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +1 -29
  48. package/distr/Common/EndPoints.js +1 -34
  49. package/distr/Common/Errors.js +1 -69
  50. package/distr/Common/FormActionHandlers/ContextualActionNames.js +1 -30
  51. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +0 -4
  52. package/distr/Common/Funcs.js +1 -29
  53. package/distr/Common/GFV.js +0 -4
  54. package/distr/Common/Hooks/UseLocalStorage.js +42 -0
  55. package/distr/Common/HttpClient/AuthenticationMode.js +1 -32
  56. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +1 -28
  57. package/distr/Common/HttpClient/FetchImplementation/Fetch.js +0 -4
  58. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +1 -29
  59. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +3 -31
  60. package/distr/Common/HttpClient/HttpClient.js +1 -57
  61. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +0 -4
  62. package/distr/Common/HttpClient/IHttpClient.js +0 -4
  63. package/distr/Common/IntRangeUtils.js +1 -31
  64. package/distr/Common/IterableUtils.js +1 -38
  65. package/distr/Common/KCLangRuntimeUtils.js +3 -38
  66. package/distr/Common/ModelPath/AbsoluteModelPathSet.js +1 -34
  67. package/distr/Common/ModelPath/BuildIterationSequence.js +1 -29
  68. package/distr/Common/ModelPath/EachCurrentCollision.js +1 -6
  69. package/distr/Common/ModelPath/IEquatable.js +0 -4
  70. package/distr/Common/ModelPath/ModelPath.js +1 -54
  71. package/distr/Common/ModelPath/ModelPathBuilder.js +1 -34
  72. package/distr/Common/ModelPath/ModelPathMap.js +1 -41
  73. package/distr/Common/ModelPath/ModelPathSet.js +1 -34
  74. package/distr/Common/ModelPath/PathMatcher.js +1 -28
  75. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +1 -34
  76. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +0 -4
  77. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +1 -29
  78. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +1 -34
  79. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +1 -38
  80. package/distr/Common/NidusClient/INidusClient.js +1 -30
  81. package/distr/Common/NidusClient/NidusClientContext.js +1 -38
  82. package/distr/Common/NidusClient/NidusClientImpl.js +1 -34
  83. package/distr/Common/PathConstants.js +1 -29
  84. package/distr/Common/TypingUtils.js +6 -50
  85. package/distr/Common/UUID.js +1 -30
  86. package/distr/Common/UseAsyncEffect.js +1 -31
  87. package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +3 -36
  88. package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +1 -29
  89. package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +1 -30
  90. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +3 -36
  91. package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +3 -36
  92. package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +1 -29
  93. package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +3 -34
  94. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +1 -28
  95. package/distr/Tools/src/BuildTasks/FSTask.js +3 -30
  96. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +3 -32
  97. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +1 -37
  98. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +1 -34
  99. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +3 -31
  100. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +1 -29
  101. package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +1 -31
  102. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +3 -36
  103. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +3 -37
  104. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +2 -37
  105. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +2 -34
  106. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +1 -5
  107. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +1 -5
  108. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +3 -33
  109. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +1 -28
  110. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +3 -30
  111. package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +1 -34
  112. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +1 -45
  113. package/distr/Tools/src/BuildTasks/ReadFormSource.js +3 -39
  114. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +3 -33
  115. package/distr/Tools/src/BuildTasks/Version.js +1 -32
  116. package/distr/Tools/src/BuildTasks/WriteFormMeta.js +3 -31
  117. package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +1 -30
  118. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +1 -28
  119. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +3 -33
  120. package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +1 -34
  121. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +1 -29
  122. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +6 -37
  123. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +6 -47
  124. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +26 -43
  125. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +6 -40
  126. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +6 -38
  127. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +6 -37
  128. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +6 -39
  129. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +6 -37
  130. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +6 -39
  131. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +3 -36
  132. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +3 -36
  133. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +12 -37
  134. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +3 -31
  135. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +3 -31
  136. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +4 -36
  137. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +3 -31
  138. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +0 -4
  139. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +0 -4
  140. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +2 -42
  141. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +3 -36
  142. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -29
  143. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +0 -4
  144. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +1 -30
  145. package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +1 -29
  146. package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +1 -29
  147. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +1 -30
  148. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +0 -4
  149. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +1 -28
  150. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +3 -31
  151. package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +1 -28
  152. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +3 -31
  153. package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +6 -40
  154. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}.calc.js +1 -30
  155. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/setKppValue.js +1 -29
  156. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +1 -34
  157. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +6 -37
  158. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/kppValue.js +1 -29
  159. package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +1 -28
  160. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +1 -30
  161. package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +1 -28
  162. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +3 -32
  163. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +1 -32
  164. package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +1 -29
  165. package/distr/Tools/src/CandyCLI.js +3 -31
  166. package/distr/Tools/src/CheckNodeJsVersion.js +3 -33
  167. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +4 -35
  168. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +1 -34
  169. package/distr/Tools/src/Commons/ErrorUntyped.js +0 -4
  170. package/distr/Tools/src/Commons/EventObject.js +2 -44
  171. package/distr/Tools/src/Commons/ExecUtils.js +1 -29
  172. package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +1 -29
  173. package/distr/Tools/src/Commons/FormGlobsUtils.js +3 -36
  174. package/distr/Tools/src/Commons/FsUtils.js +3 -34
  175. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +1 -32
  176. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +2 -33
  177. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +1 -34
  178. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +1 -34
  179. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +0 -4
  180. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +1 -34
  181. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +1 -34
  182. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +2 -34
  183. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +1 -34
  184. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +1 -36
  185. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +1 -34
  186. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +1 -34
  187. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +1 -34
  188. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +1 -34
  189. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +0 -4
  190. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +1 -34
  191. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +1 -34
  192. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +3 -57
  193. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +1 -28
  194. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +3 -36
  195. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +1 -34
  196. package/distr/Tools/src/Commons/Locks/Lock.js +3 -36
  197. package/distr/Tools/src/Commons/Locks/LockHandle.js +1 -34
  198. package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +3 -36
  199. package/distr/Tools/src/Commons/Logging/ELKLogger.js +3 -33
  200. package/distr/Tools/src/Commons/Logging/ILogger.js +1 -36
  201. package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +1 -41
  202. package/distr/Tools/src/Commons/Logging/Logger.js +3 -36
  203. package/distr/Tools/src/Commons/Logging/StaticLogger.js +1 -38
  204. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +1 -30
  205. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +6 -53
  206. package/distr/Tools/src/Commons/PathPattern.js +1 -34
  207. package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +1 -34
  208. package/distr/Tools/src/Commons/TasksCore/BuildTask.js +0 -4
  209. package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +3 -89
  210. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +3 -36
  211. package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +1 -34
  212. package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +3 -36
  213. package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +3 -36
  214. package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -28
  215. package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +1 -34
  216. package/distr/Tools/src/Commons/TimingUtils.js +1 -29
  217. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +3 -44
  218. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +7 -33
  219. package/distr/Tools/src/GenerateReadMe.js +1 -31
  220. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  221. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  222. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  223. package/distr/Tools/src/Options/CandyToolOptions.js +1 -28
  224. package/distr/Tools/src/ReadFarmConfig.js +3 -31
  225. package/distr/Tools/src/SelfUpdate.js +4 -36
  226. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1 -5
  227. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +1 -5
  228. package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +1 -5
  229. package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +1 -5
  230. package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +1 -5
  231. package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +1 -5
  232. package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +1 -5
  233. package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +1 -5
  234. package/package.json +1 -1
@@ -1,9 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
4
- return a;
5
- };
6
-
7
3
  /******/
8
4
  (function () {
9
5
  // webpackBootstrap
@@ -2316,4 +2312,4 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
2316
2312
  }();
2317
2313
  /******/
2318
2314
  })();
2319
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9Db21tb24vRXJyb3JzLnRzIiwid2VicGFjazovL0NhbmR5RW5naW5lL0NvbW1vbi9UeXBpbmdVdGlscy50cyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnRTZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6L0NhbmR5RW5naW5lL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovQ2FuZHlFbmdpbmUvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6L0NhbmR5RW5naW5lL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50LnRzIl0sIm5hbWVzIjpbIkFwcGxpY2F0aW9uRXJyb3IiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiTm90U3VwcG9ydGVkRXJyb3IiLCJtZXNzYWdlIiwiSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJUeXBpbmdFcnJvciIsImlucHV0IiwiaXRlbXMiLCJpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbCIsImFycmF5SXNOb3RFbXB0eSIsImFycmF5SGFzTGVuZ3RoIiwidmFsdWUiLCJCb29sZWFuIiwiY2xpZW50U2V0dGluZ3MiLCJhdXRob3JpemVkIiwicGFyc2VCb29sIiwiY2F1bGRyb25BcGlVcmwiLCJhYm9uSWQiLCJvcmdJZCIsInVzZXJJZCIsImlzVGVzdFNlcnZlciIsInJlbmRlckNhY2hpbmdGb3JJRTgiLCJub3JtYWxpemF0aW9uT25TZXJ2ZXIiLCJub3JtYXRpdmVVcmwiLCJyZXNvdXJjZXNWZXJzaW9uIiwia29udHVyRG9tYWlucyIsImZpZWxkTmFtZSIsInBhdGgiLCJjaHVuayIsIk9iamVjdCIsInJlc3VsdCIsIkxlZ2FjeVB1YmxpY0Zvcm0iLCJmb3JtIiwiY29uc29sZSIsImtleXMiLCJlcnJvckNvdW50IiwibW9kZWxDaGFuZ2VFdmVudFBhdGgiLCJwYXRoT3JNb2RlbENodW5rIiwiQXJyYXkiLCJpbm5lckNodW5rIiwicmVkdWNlQ2h1bmtWYWx1ZXMiLCJtYXBDaHVua1ZhbHVlcyIsInBhdGhPckFycmF5IiwiTG9hZEludG9Eb2N1bWVudCIsInNjcmlwdExvYWRlZCIsImhlYWQiLCJkb2N1bWVudCIsInNjcmlwdCIsImNhbGxiYWNrIiwicmVzb2x2ZSIsInJlamVjdCIsImxpbmsiLCJnbG9iYWwiLCJzdXBwb3J0Iiwic2VhcmNoUGFyYW1zIiwiaXRlcmFibGUiLCJibG9iIiwiZm9ybURhdGEiLCJhcnJheUJ1ZmZlciIsIm9iaiIsIkRhdGFWaWV3Iiwidmlld0NsYXNzZXMiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwibmFtZSIsIlN0cmluZyIsIml0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJTeW1ib2wiLCJoZWFkZXJzIiwiaGVhZGVyIiwiSGVhZGVycyIsIm5vcm1hbGl6ZU5hbWUiLCJub3JtYWxpemVWYWx1ZSIsIm9sZFZhbHVlIiwiaXRlcmF0b3JGb3IiLCJib2R5IiwiUHJvbWlzZSIsInJlYWRlciIsInByb21pc2UiLCJmaWxlUmVhZGVyUmVhZHkiLCJ2aWV3IiwiY2hhcnMiLCJpIiwiYnVmIiwiQmxvYiIsIkZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiaXNEYXRhVmlldyIsImJ1ZmZlckNsb25lIiwicmVqZWN0ZWQiLCJjb25zdW1lZCIsImlzQ29uc3VtZWQiLCJyZWFkQmxvYkFzVGV4dCIsInJlYWRBcnJheUJ1ZmZlckFzVGV4dCIsIkpTT04iLCJtZXRob2RzIiwidXBjYXNlZCIsIm1ldGhvZCIsIm9wdGlvbnMiLCJub3JtYWxpemVNZXRob2QiLCJyZVBhcmFtU2VhcmNoIiwicmVRdWVyeVN0cmluZyIsIlJlcXVlc3QiLCJfYm9keUluaXQiLCJzcGxpdCIsImJ5dGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicHJlUHJvY2Vzc2VkSGVhZGVycyIsInJhd0hlYWRlcnMiLCJwYXJ0cyIsImxpbmUiLCJrZXkiLCJCb2R5IiwiUmVzcG9uc2UiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwidXJsIiwicmVzcG9uc2UiLCJyZWRpcmVjdFN0YXR1c2VzIiwibG9jYXRpb24iLCJET01FeGNlcHRpb24iLCJlcnJvciIsIkVycm9yIiwicmVxdWVzdCIsInhociIsInBhcnNlSGVhZGVycyIsInNldFRpbWVvdXQiLCJmaXhVcmwiLCJpbml0IiwiZmV0Y2giLCJyZWxhdGl2ZVVybCIsImJhc2VVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImRvbWFpbnMiLCJwYXJhbSIsImNvbXBsZXRlZCIsInRhc2tzIiwidGFzayIsImxlZnROdW1iZXJzIiwicGFyc2VJbnQiLCJyaWdodE51bWJlcnMiLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwidGhlbWUiLCJzZXR0aW5ncyIsImlzTmVlZEVuZ2luZSIsInVzZVNhbWVSZXNvdXJjZXNGb3JUaGVtZSIsImlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbCIsIm5vU3R5bGVzRm9yR2Z2IiwibmVlZExvYWRTdHlsZXNGb3JHZnYiLCJtaW4iLCJnZXRQYXJhbWV0ZXJCeU5hbWUiLCJ0aGVtZVBvc3RmaXgiLCJ2IiwicmVzb3VyY2Vab25lIiwiYnVpbGRVcmwiLCJydW5QYXJhbGxlbCIsImZvcm1FbnRyeVBvaW50IiwiZXh0ZW5kZWRTZXR0aW5ncyIsInB1YmxpY0Zvcm0iLCJjcmVhdGVMZWdhY3lQdWJsaWNGb3JtIiwiZGVmYXVsdENhbGxiYWNrIiwibnMiLCJkcmFmdElkIiwiaXNBbGxvd2VkIiwiY2xpZW50RHJhZnRVcmwiLCJyZXF1ZXN0T3B0aW9ucyIsImZldGNoSW1wbCIsIngiLCJjbGllbnREcmFmdEluZm8iLCJlbmdpbmVWZXJzaW9uUGFyYW0iLCJtb2RlbCIsImZlZWRiYWNrRW5hYmxlZCIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwiYXV0aGVudGljYXRpb24iLCJsb2FkRm9ybSIsImxvYWRFcnJvciIsInJlbmRlciIsImdldEVuZ2luZUVudHJ5UG9pbnQiLCJyZW5kZXJGb3JtIiwidGVtcGxhdGVzQXBpIiwiQ2FuZHlDbGllbnRFeHBvcnRzIiwic3RhcnQiLCJlbnRyeVBvaW50IiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCIsImtlZm9ybXNVcmwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTyxVQUFNQSxnQkFBYixHQUFBLGFBQUEsVUFBQSxNQUFBLEVBQUE7QUFBQSxRQUFBLFNBQUEsQ0FBQSxnQkFBQSxF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QSxHQUFBLHdCQUFBLENBQUEsUUFBQSxDQUFBO0FBQ0E7O0FBQUEsUUFBQSxZQUFBLEtBQUEsU0FBQSxFQUFBO0FBQ0E7QUFBQSxhQUFBLFlBQUEsQ0FBQSxPQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7O0FBQ0E7OztBQUFBLFFBQUEsTUFBQSxHQUFBLHdCQUFBLENBQUEsUUFBQSxDQUFBLEdBQUE7QUFDQTtBQUFBOztBQUNBO0FBQUE7O0FBQ0E7QUFBQSxNQUFBLE9BQUEsRUFBQTtBQUNBOztBQUpBLEtBQUE7OztBQU1BO0FBQUE7O0FBQ0E7O0FBQUEsSUFBQSxtQkFBQSxDQUFBLFFBQUEsQ0FBQSxDQUFBLE1BQUEsRUFBQSxNQUFBLENBQUEsT0FBQSxFQUFBLG1CQUFBOzs7QUFFQTtBQUFBOztBQUNBOzs7QUFBQSxXQUFBLE1BQUEsQ0FBQSxPQUFBO0FBQ0E7QUFBQTs7Ozs7Ozs7Ozs7Ozs7QUN0QkE7OztBQUNBLElBQUEsbUJBQUEsQ0FBQSxDQUFBLEdBQUEsVUFBQSxPQUFBLEVBQUEsVUFBQSxFQUFBO0FBQ0E7QUFBQSxXQUFBLElBQUEsR0FBQSxJQUFBLFVBQUEsRUFBQTtBQUNBO0FBQUEsWUFBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxVQUFBLEVBQUEsR0FBQSxLQUFBLENBQUEsbUJBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBO0FBQ0E7QUFBQSxVQUFBLE1BQUEsQ0FBQSxjQUFBLENBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQTtBQUF3QyxZQUFBLFVBQUEsRUFBQSxJQUF4QztBQUF3QyxZQUFBLEdBQUEsRUFBQSxVQUFBLENBQUEsR0FBQTtBQUF4QyxXQUFBO0FBQ0E7QUFBQTtBQUNBOztBQUFBO0FBQ0E7O0FBQUEsS0FOQTs7Ozs7Ozs7Ozs7Ozs7QUNEQSxJQUFBLG1CQUFBLENBQUEsQ0FBQSxHQUFBLFlBQUE7QUFDQTtBQUFBLFVBQUEsT0FBQSxVQUFBLEtBQUEsUUFBQSxFQUFBLE9BQUEsVUFBQTtBQUNBOztBQUFBLFVBQUE7QUFDQTtBQUFBLGVBQUEsUUFBQSxJQUFBLFFBQUEsQ0FBQSxhQUFBLEdBQUE7QUFDQTtBQUFFLE9BRkYsQ0FFRSxPQUFBLENBQUEsRUFBQTtBQUNGO0FBQUEsWUFBQSxPQUFBLE1BQUEsS0FBQSxRQUFBLEVBQUEsT0FBQSxNQUFBO0FBQ0E7QUFBQTtBQUNBOztBQUFDLEtBUEQsRUFBQTs7Ozs7Ozs7Ozs7Ozs7QUNBQSxJQUFBLG1CQUFBLENBQUEsQ0FBQSxHQUFBLFVBQUEsR0FBQSxFQUFBLElBQUEsRUFBQTtBQUE2QyxhQUFBLE1BQUEsQ0FBQSxTQUFBLENBQUEsY0FBQSxDQUFBLElBQUEsQ0FBQSxHQUFBLEVBQUEsSUFBQSxDQUFBO0tBQTdDOzs7Ozs7Ozs7Ozs7OztBQ0FBOzs7QUFDQSxJQUFBLG1CQUFBLENBQUEsQ0FBQSxHQUFBLFVBQUEsT0FBQSxFQUFBO0FBQ0E7QUFBQSxVQUFBLE9BQUEsTUFBQSxLQUFBLFdBQUEsSUFBQSxNQUFBLENBQUEsV0FBQSxFQUFBO0FBQ0E7QUFBQSxRQUFBLE1BQUEsQ0FBQSxjQUFBLENBQUEsT0FBQSxFQUFBLE1BQUEsQ0FBQSxXQUFBLEVBQUE7QUFBc0QsVUFBQSxLQUFBLEVBQUE7QUFBdEQsU0FBQTtBQUNBO0FBQUE7QUFDQTs7O0FBQUEsTUFBQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxZQUFBLEVBQUE7QUFBK0MsUUFBQSxLQUFBLEVBQUE7QUFBL0MsT0FBQTtBQUNBO0FBQUEsS0FMQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDREE7OztBQW1EQSxhQUFBLGVBQUEsR0FBaUM7QUFDN0I7QUFDSDs7QUFFRCxhQUFBLFNBQUEsQ0FBQSxLQUFBLEVBQTRDO0FBQ3hDLFVBQUksT0FBQSxLQUFBLEtBQUosUUFBQSxFQUErQjtBQUMzQixZQUFJekMsS0FBSyxLQUFULE9BQUEsRUFBdUI7QUFDbkIsaUJBQUEsS0FBQTtBQUNIOztBQUNELFlBQUlBLEtBQUssS0FBVCxNQUFBLEVBQXNCO0FBQ2xCLGlCQUFBLElBQUE7QUFDSDs7QUFDRCxlQUFBLEtBQUE7QUFDSDs7QUFDRCxhQUFPQyxPQUFPLENBQWQsS0FBYyxDQUFkO0FBQ0g7O0FBRUQsYUFBQSxHQUFBLEdBQStDO0FBQUEsVUFBbEN3SCxXQUFrQyxHQUFBLFNBQUEsQ0FBQSxNQUFBLEdBQUEsQ0FBQSxJQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxTQUFBLEdBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFaLEVBQVk7QUFDM0MsVUFBTUMsT0FBTyxHQUFHakYsbUJBQUFBLENBQUFBLENBQUFBLENBQUFBLEVBQUFBLENBQUFBLFVBQUFBLElBQWhCLEVBQUE7QUFFQSxhQUFPLEdBQUEsTUFBQSxDQUFBLE9BQUEsRUFBQSxHQUFBLEVBQUEsTUFBQSxDQUFBLFdBQUEsRUFBQSxPQUFBLENBQUEsZUFBQSxFQUFQLEtBQU8sQ0FBUDtBQUNIOztBQUVELGFBQUEsUUFBQSxDQUFBLElBQUEsRUFBQSxNQUFBLEVBQTZGO0FBQ3pGLFVBQUlrRixNQUFNLEtBQVYsU0FBQSxFQUEwQjtBQUN0QixlQUFBLElBQUE7QUFDSDs7QUFDRCxVQUFNQyxVQUFvQixHQUExQixFQUFBOztBQUNBLFdBQUEsSUFBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBLFlBQUEsR0FBd0IxRyxNQUFNLENBQU5BLElBQUFBLENBQXhCLE1BQXdCQSxDQUF4QixFQUFBLEVBQUEsR0FBQSxZQUFBLENBQUEsTUFBQSxFQUFBLEVBQUEsRUFBQSxFQUE2QztBQUF4QyxZQUFNMkcsVUFBUyxHQUFBLFlBQUEsQ0FBZixFQUFlLENBQWY7QUFDRCxZQUFNQyxVQUFVLEdBQUdILE1BQU0sQ0FBekIsVUFBeUIsQ0FBekI7O0FBQ0EsWUFBSUcsVUFBVSxJQUFkLFNBQUEsRUFBNkI7QUFDekJGLFVBQUFBLFVBQVUsQ0FBVkEsSUFBQUEsQ0FBQUEsR0FBQUEsTUFBQUEsQ0FBQUEsVUFBQUEsRUFBQUEsR0FBQUEsRUFBQUEsTUFBQUEsQ0FBZ0NHLGtCQUFrQixDQUFsREgsVUFBa0QsQ0FBbERBLENBQUFBO0FBQ0g7QUFDSjs7QUFDRCxVQUFJQSxVQUFVLENBQVZBLE1BQUFBLEtBQUosQ0FBQSxFQUE2QjtBQUN6QixlQUFBLElBQUE7QUFDSDs7QUFDRCxhQUFPNUcsSUFBSSxHQUFKQSxHQUFBQSxHQUFhNEcsVUFBVSxDQUFWQSxJQUFBQSxDQUFwQixHQUFvQkEsQ0FBcEI7QUFDSDs7QUFFRCxhQUFBLFNBQUEsQ0FBQSxPQUFBLEVBQTZDO0FBQ3pDLGFBQU8sSUFBQSxNQUFBLENBQUEsT0FBQSxNQUFBLENBQWtCSSxPQUFPLENBQVBBLE9BQUFBLENBQUFBLEtBQUFBLEVBQUFBLEtBQUFBLEVBQUFBLE9BQUFBLENBQUFBLEtBQUFBLEVBQWxCLGFBQWtCQSxDQUFsQixFQUFBLElBQUEsQ0FBQSxFQUFBLElBQUEsQ0FDSHZGLG1CQUFBQSxDQUFBQSxDQUFBQSxDQUFBQSxRQUFBQSxDQURKLElBQU8sQ0FBUDtBQUdIOztBQUVELGFBQUEsa0JBQUEsQ0FBQSxJQUFBLEVBQThEO0FBQzFELGFBQ0ksQ0FBQyxtQkFBQSxDQUFBLENBQUEsQ0FBQSxRQUFBLENBQUEsTUFBQSxDQUFBLElBQUEsR0FBQSxPQUFBLENBQUEsV0FBQSxFQUFBLEVBQUEsRUFBQSxLQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsQ0FJUSxVQUFBLEtBQUEsRUFBSztBQUFBLGVBQUl3RixLQUFLLENBQUxBLE9BQUFBLENBQUFBLEtBQUFBLEVBQUFBLEdBQUFBLEVBQUFBLEtBQUFBLENBQUFBLEdBQUFBLEVBQUFBLEdBQUFBLENBQUosa0JBQUlBLENBQUo7QUFKYixPQUFBLEVBS0c7QUFMSCxPQUFBLElBQUEsQ0FNUyxVQUFBLElBQUEsRUFBQTtBQUFBLFlBQUEsS0FBQSxHQUFBLGNBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBO0FBQUEsWUFBRTNCLEdBQUYsR0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBOztBQUFBLGVBQVdBLEdBQUcsSUFBZCxJQUFBO0FBTlQsT0FBQSxLQUFELEVBQUEsRUFESixDQUNJLENBREo7QUFTSDs7QUFJRCxhQUFBLFdBQUEsQ0FBQSxLQUFBLEVBQUEsUUFBQSxFQUE2RTtBQUN6RSxVQUFJNEIsU0FBUyxHQUFiLENBQUE7QUFFQUMsTUFBQUEsS0FBSyxDQUFMQSxPQUFBQSxDQUFjLFVBQUEsSUFBQSxFQUFRO0FBQ2xCQyxRQUFBQSxJQUFJLENBQUMsVUFBQSxLQUFBLEVBQVM7QUFDVixjQUFJRixTQUFTLEtBQUtDLEtBQUssQ0FBdkIsTUFBQSxFQUFnQztBQUM1QjtBQUNIOztBQUNELGNBQUEsS0FBQSxFQUFXO0FBQ1BELFlBQUFBLFNBQVMsR0FBR0MsS0FBSyxDQUFqQkQsTUFBQUE7QUFDQTdGLFlBQUFBLFFBQVEsQ0FBUkEsS0FBUSxDQUFSQTtBQUVBO0FBQ0g7O0FBQ0Q2RixVQUFBQSxTQUFTLElBQVRBLENBQUFBOztBQUNBLGNBQUlBLFNBQVMsS0FBS0MsS0FBSyxDQUF2QixNQUFBLEVBQWdDO0FBQzVCOUYsWUFBQUEsUUFBUTtBQUNYO0FBYkwrRixTQUFJLENBQUpBO0FBREpELE9BQUFBO0FBaUJIOztBQVVNLGFBQUEsaUNBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUFpRjtBQUNwRixVQUFJO0FBQUEsWUFBQSxhQUFBLEVBQUEsY0FBQSxFQUFBLGNBQUEsRUFBQSxlQUFBLEVBQUEsY0FBQSxFQUFBLGVBQUEsRUFBQSxjQUFBLEVBQUEsZUFBQSxFQUFBLGNBQUEsRUFBQSxlQUFBOztBQUNBLFlBQU1FLFdBQVcsR0FBRyxJQUFJLENBQUosS0FBQSxDQUFBLEdBQUEsRUFBQSxLQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsRUFBQSxHQUFBLENBR1gsVUFBQSxDQUFBLEVBQUM7QUFBQSxpQkFBSUMsUUFBUSxDQUFBLENBQUEsRUFBWixFQUFZLENBQVo7QUFIVixTQUFvQixDQUFwQjtBQUlBLFlBQU1DLFlBQVksR0FBRyxLQUFLLENBQUwsS0FBQSxDQUFBLEdBQUEsRUFBQSxLQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsRUFBQSxHQUFBLENBR1osVUFBQSxDQUFBLEVBQUM7QUFBQSxpQkFBSUQsUUFBUSxDQUFBLENBQUEsRUFBWixFQUFZLENBQVo7QUFIVixTQUFxQixDQUFyQjtBQUlBLGVBQ0ksQ0FBQSxDQUFBLGFBQUEsR0FBQ0QsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxhQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsYUFBQSxHQUFBLENBQUEsS0FBQSxDQUFBLGNBQUEsR0FBeUJFLFlBQVksQ0FBckMsQ0FBcUMsQ0FBckMsTUFBQSxJQUFBLElBQUEsY0FBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLGNBQUEsR0FBQSxDQUFBLEtBQ0MsQ0FBQSxDQUFBLGNBQUEsR0FBQ0YsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsY0FBQSxHQUFBLENBQUEsT0FBQSxDQUFBLGVBQUEsR0FBMkJFLFlBQVksQ0FBdkMsQ0FBdUMsQ0FBdkMsTUFBQSxJQUFBLElBQUEsZUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLGVBQUEsR0FBQSxDQUFBLE1BQ0ksQ0FBQSxDQUFBLGNBQUEsR0FBQ0YsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsY0FBQSxHQUFBLENBQUEsS0FBQSxDQUFBLGVBQUEsR0FBeUJFLFlBQVksQ0FBckMsQ0FBcUMsQ0FBckMsTUFBQSxJQUFBLElBQUEsZUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLGVBQUEsR0FBQSxDQUFBLEtBQ0ksQ0FBQSxDQUFBLGNBQUEsR0FBQ0YsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsY0FBQSxHQUFBLENBQUEsT0FBQSxDQUFBLGVBQUEsR0FBMkJFLFlBQVksQ0FBdkMsQ0FBdUMsQ0FBdkMsTUFBQSxJQUFBLElBQUEsZUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLGVBQUEsR0FBQSxDQUFBLEtBQ0csQ0FBQSxDQUFBLGNBQUEsR0FBQ0YsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsY0FBQSxHQUFBLENBQUEsTUFBQSxDQUFBLGVBQUEsR0FBMEJFLFlBQVksQ0FBdEMsQ0FBc0MsQ0FBdEMsTUFBQSxJQUFBLElBQUEsZUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLGVBQUEsR0FMaEIsQ0FLZ0IsQ0FIWCxDQUZMO0FBVEosT0FBQSxDQWdCRSxPQUFBLE9BQUEsRUFBTTtBQUNKLGVBQUEsS0FBQTtBQUNIO0FBQ0o7O0FBRUQsYUFBQSxRQUFBLENBQUEsUUFBQSxFQUFBLFFBQUEsRUFBMEc7QUFBQSxVQUM5RkMsR0FEOEYsR0FDOUNHLFFBRDhDLENBQUEsR0FBQTtBQUFBLFVBQ3pGRixhQUR5RixHQUM5Q0UsUUFEOEMsQ0FBQSxhQUFBO0FBQUEsVUFDMUU5SCxnQkFEMEUsR0FDOUM4SCxRQUQ4QyxDQUFBLGdCQUFBO0FBQUEsVUFDeERELEtBRHdELEdBQzlDQyxRQUQ4QyxDQUFBLEtBQUE7O0FBR3RHLFVBQUlsRyxtQkFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsRUFBQUEsQ0FBQUEsVUFBQUEsQ0FBSixHQUFJQSxDQUFKLEVBQStCO0FBQzNCSixRQUFBQSxRQUFRO0FBQ1I7QUFDSDs7QUFDRCxVQUFNdUcsWUFBWSxHQUFHSCxhQUFhLElBQUksQ0FBQ2hHLG1CQUFBQSxDQUFBQSxDQUFBQSxDQUF2QyxhQUF1Q0EsQ0FBdkM7QUFDQSxVQUFNb0csd0JBQXdCLEdBQzFCSixhQUFhLElBQWJBLFNBQUFBLEtBQ0NLLGlDQUFpQyxDQUFBLGFBQUEsRUFBakNBLFNBQWlDLENBQWpDQSxJQUErREwsYUFBYSxLQUZqRixPQUNJQSxDQURKO0FBR0EsVUFBTU0sY0FBYyxHQVhrRixLQVd0RyxDQVhzRyxDQVd4RTs7QUFDOUIsVUFBTUMsb0JBQW9CLEdBQUcsQ0FBN0IsY0FBQTtBQUNBLFVBQU1DLEdBQUcsR0FBR0Msa0JBQWtCLENBQWxCQSxPQUFrQixDQUFsQkEsS0FBQUEsTUFBQUEsR0FBQUEsRUFBQUEsR0FBWixNQUFBO0FBQ0EsVUFBTUMsWUFBWSxHQUFHLENBQUEsd0JBQUEsSUFBQSxLQUFBLEdBQUEsSUFBQSxNQUFBLENBQXlDcEIsa0JBQWtCLENBQTNELEtBQTJELENBQTNELENBQUEsR0FBckIsRUFBQTtBQUNBLFVBQU1JLEtBQWEsR0FBbkIsRUFBQTtBQUVBLFVBQU1SLE1BQU0sR0FBRztBQUFFeUIsUUFBQUEsQ0FBQyxFQUFILGdCQUFBO0FBQXVCQyxRQUFBQSxZQUFZLEVBQUVWLFFBQVEsQ0FBQ1U7QUFBOUMsT0FBZjs7QUFDQSxVQUFBLG9CQUFBLEVBQTBCO0FBQ3RCbEIsUUFBQUEsS0FBSyxDQUFMQSxJQUFBQSxDQUFXLFVBQUEsRUFBQSxFQUFFO0FBQUEsaUJBQ1RuRyxzREFBQUEsQ0FBQUEsZ0JBQUFBLENBQUFBLFVBQUFBLENBQ0kyRSxHQUFHLENBQUMyQyxRQUFRLENBQUEsd0JBQUEsTUFBQSxDQUFBLEdBQUEsRUFBQSxNQUFBLENBQUEsWUFBQSxFQUFBLE1BQUEsQ0FBQSxHQUFBLEVBQUEsTUFBQSxDQUFBLEVBRGhCdEgsTUFDZ0IsQ0FBVCxDQURQQSxFQUFBQSxJQUFBQSxFQURTLEVBQ1RBLENBRFM7QUFBYm1HLFNBQUFBO0FBT0g7O0FBQ0RBLE1BQUFBLEtBQUssQ0FBTEEsSUFBQUEsQ0FBVyxVQUFBLEVBQUEsRUFBRTtBQUFBLGVBQUluRyxzREFBQUEsQ0FBQUEsZ0JBQUFBLENBQUFBLE1BQUFBLENBQXdCMkUsR0FBRyxDQUFDMkMsUUFBUSxDQUFBLHlCQUFBLE1BQUEsQ0FBQSxHQUFBLEVBQUEsTUFBQSxDQUFBLEdBQUEsRUFBQSxLQUFBLENBQUEsRUFBcEN0SCxNQUFvQyxDQUFULENBQTNCQSxFQUFKLEVBQUlBLENBQUo7QUFBYm1HLE9BQUFBOztBQUVBLFVBQUEsWUFBQSxFQUFrQjtBQUNkQSxRQUFBQSxLQUFLLENBQUxBLElBQUFBLENBQ0ksVUFBQSxFQUFBLEVBQUU7QUFBQSxpQkFDRW5HLHNEQUFBQSxDQUFBQSxnQkFBQUEsQ0FBQUEsVUFBQUEsQ0FDSTJFLEdBQUcsQ0FBQzJDLFFBQVEsQ0FBQSw4QkFBQSxNQUFBLENBQUEsYUFBQSxFQUFBLE1BQUEsQ0FBQSxZQUFBLEVBQUEsTUFBQSxDQUFBLEdBQUEsRUFBQSxNQUFBLENBQUEsRUFEaEJ0SCxNQUNnQixDQUFULENBRFBBLEVBQUFBLEtBQUFBLEVBREYsRUFDRUEsQ0FERjtBQURObUcsU0FBQUEsRUFPSSxVQUFBLEVBQUEsRUFBRTtBQUFBLGlCQUNFbkcsc0RBQUFBLENBQUFBLGdCQUFBQSxDQUFBQSxNQUFBQSxDQUNJMkUsR0FBRyxDQUFDMkMsUUFBUSxDQUFBLCtCQUFBLE1BQUEsQ0FBQSxhQUFBLEVBQUEsTUFBQSxDQUFBLEdBQUEsRUFBQSxLQUFBLENBQUEsRUFEaEJ0SCxNQUNnQixDQUFULENBRFBBLEVBREYsRUFDRUEsQ0FERjtBQVBObUcsU0FBQUE7QUFhSDs7QUFFRG9CLE1BQUFBLFdBQVcsQ0FBQSxLQUFBLEVBQVhBLFFBQVcsQ0FBWEE7QUFDSDs7QUFFRCxhQUFBLFVBQUEsQ0FBQSxXQUFBLEVBQUEsZ0JBQUEsRUFBQSxRQUFBLEVBSVE7QUFBQSxVQUFBLHFCQUFBOztBQUNKLFVBQU1DLGNBQWMsR0FBQSxDQUFBLHFCQUFBLEdBQ2hCL0csbUJBQUFBLENBQUFBLENBQUFBLENBQUFBLEVBQUFBLENBQUFBLFVBQUFBLENBQXFCZ0gsZ0JBQWdCLENBRHJCLEdBQ2hCaEgsQ0FEZ0IsTUFBQSxJQUFBLElBQUEscUJBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxxQkFBQSxHQUM4QkYsQ0FBQUEsR0FBQUEsZ0RBQUFBLENBQUFBLE1BQUFBLEVBQU0sb0JBQUEsTUFBQSxDQUFxQmtILGdCQUFnQixDQUFyQyxHQUFBLEVBRHhELGFBQ3dELENBQU5sSCxDQURsRDtBQUVBaUgsTUFBQUEsY0FBYyxDQUFBLFdBQUEsRUFBZEEsZ0JBQWMsQ0FBZEEsQ0FBQUEsSUFBQUEsQ0FDVSxVQUFBLElBQUEsRUFBUTtBQUNWLFlBQU1FLFVBQVUsR0FBR3JJLElBQUksQ0FBSkEsVUFBQUEsSUFBbUJzSSxDQUFBQSxHQUFBQSxxRUFBQUEsQ0FBQUEsc0JBQUFBLEVBQXRDLElBQXNDQSxDQUF0QztBQUVBdEgsUUFBQUEsUUFBUSxDQUFBLElBQUEsRUFBUkEsVUFBUSxDQUFSQTtBQUpSbUgsT0FBQUEsRUFBQUEsT0FBQUEsRUFBQUEsUUFBQUE7QUFPSDs7QUFrQkQsYUFBQSxtQkFBQSxDQUFBLGFBQUEsRUFBcUc7QUFDakcsVUFBSWYsYUFBYSxJQUFqQixTQUFBLEVBQWdDO0FBQzVCLGVBQUEsU0FBQTtBQUY2RixPQUFBLENBSWpHOzs7QUFDQSxhQUFPaEcsbUJBQUFBLENBQUFBLENBQUFBLENBQUFBLGFBQUFBLEtBQXlCQSxtQkFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsYUFBQUEsRUFBaEMsU0FBZ0NBLENBQWhDO0FBQ0g7O0FBRUQsYUFBQSxLQUFBLENBQUEsV0FBQSxFQUFBLE9BQUEsRUFJUTtBQUFBLFVBQUEscUJBQUEsRUFBQSxjQUFBOztBQUFBLFVBREpKLFFBQ0ksR0FBQSxTQUFBLENBQUEsTUFBQSxHQUFBLENBQUEsSUFBQSxTQUFBLENBQUEsQ0FBQSxDQUFBLEtBQUEsU0FBQSxHQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsR0FEd0N1SCxlQUN4QztBQUNKLFVBQUk1QyxLQUFLLEdBQVQsSUFBQTtBQURJLFVBRUk2QyxFQUZKLEdBRW9CcEUsT0FGcEIsQ0FBQSxFQUFBO0FBQUEsVUFFUXFFLE9BRlIsR0FFb0JyRSxPQUZwQixDQUFBLE9BQUE7QUFHSixVQUFNa0QsUUFBUSxHQUFHekksNENBQUFBLENBQWpCLGNBQUE7O0FBRUEsVUFBSSxDQUFDNkosU0FBUyxDQUFDcEIsUUFBUSxDQUF2QixhQUFjLENBQWQsRUFBd0M7QUFDcEMzQixRQUFBQSxLQUFLLEdBQUcsSUFBQSxLQUFBLENBQVJBLGtCQUFRLENBQVJBO0FBREosT0FBQSxNQUVPLElBQUksQ0FBQzJCLFFBQVEsQ0FBYixVQUFBLEVBQTBCO0FBQzdCM0IsUUFBQUEsS0FBSyxHQUFHLElBQUEsS0FBQSxDQUFSQSxzQkFBUSxDQUFSQTtBQURHLE9BQUEsTUFFQSxJQUFJLENBQUosT0FBQSxFQUFjO0FBQ2pCQSxRQUFBQSxLQUFLLEdBQUcsSUFBQSxLQUFBLENBQVJBLDZCQUFRLENBQVJBO0FBREcsT0FBQSxNQUVBLElBQUksQ0FBSixFQUFBLEVBQVM7QUFDWkEsUUFBQUEsS0FBSyxHQUFHLElBQUEsS0FBQSxDQUFSQSx3QkFBUSxDQUFSQTtBQUNIOztBQUVELFVBQUEsS0FBQSxFQUFXO0FBQ1AzRSxRQUFBQSxRQUFRLENBQVJBLEtBQVEsQ0FBUkE7QUFDQTtBQUNIOztBQUVELFVBQU1nSCxZQUFZLEdBQUEsQ0FBQSxxQkFBQSxHQUFHNUQsT0FBTyxDQUFWLFlBQUEsTUFBQSxJQUFBLElBQUEscUJBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxxQkFBQSxHQUEyQnlELGtCQUFrQixDQUEvRCxjQUErRCxDQUEvRDtBQUNBLFVBQU1jLGNBQWMsR0FBR1YsUUFBUSxDQUFDM0MsR0FBRyxDQUFBLFNBQUEsTUFBQSxDQUFBLEVBQUEsRUFBQSxVQUFBLEVBQUEsTUFBQSxDQUFBLE9BQUEsRUFBSixvQkFBSSxDQUFBLENBQUosRUFBeUQ7QUFDcEYwQyxRQUFBQSxZQUFZLEVBQUVBO0FBRHNFLE9BQXpELENBQS9CO0FBSUEsVUFBTVksY0FBMkIsR0FBRztBQUFFekUsUUFBQUEsTUFBTSxFQUFFO0FBQVYsT0FBcEM7O0FBQ0EsVUFBSUMsT0FBTyxDQUFQQSxjQUFBQSxJQUFBQSxTQUFBQSxJQUF1Q0EsT0FBTyxDQUFQQSxjQUFBQSxLQUEzQyw2QkFBQSxFQUFxRztBQUNqR3dFLFFBQUFBLGNBQWMsQ0FBZEEsV0FBQUEsR0FBQUEsU0FBQUE7QUFESixPQUFBLE1BRU8sSUFBSSxhQUFheEUsT0FBTyxDQUFwQixjQUFBLElBQXVDQSxPQUFPLENBQVBBLGNBQUFBLENBQUFBLE9BQUFBLElBQTNDLFNBQUEsRUFBd0Y7QUFBQSxZQUFBLHFCQUFBOztBQUMzRndFLFFBQUFBLGNBQWMsQ0FBZEEsV0FBQUEsR0FBQUEsTUFBQUE7QUFDQUEsUUFBQUEsY0FBYyxDQUFkQSxPQUFBQSxHQUFBQSxDQUFBQSxxQkFBQUEsR0FBeUJBLGNBQWMsQ0FBdkNBLE9BQUFBLE1BQUFBLElBQUFBLElBQUFBLHFCQUFBQSxLQUFBQSxLQUFBQSxDQUFBQSxHQUFBQSxxQkFBQUEsR0FBQUEsRUFBQUE7QUFDQUEsUUFBQUEsY0FBYyxDQUFkQSxPQUFBQSxDQUFBQSxlQUFBQSxJQUFBQSxZQUFBQSxNQUFBQSxDQUFzRHhFLE9BQU8sQ0FBUEEsY0FBQUEsQ0FBdER3RSxPQUFBQSxDQUFBQTtBQUhHLE9BQUEsTUFJQTtBQUNIQSxRQUFBQSxjQUFjLENBQWRBLFdBQUFBLEdBQUFBLE1BQUFBO0FBQ0g7O0FBQ0QsVUFBTUMsU0FBUyxHQUFBLENBQUEsY0FBQSxHQUFHekUsT0FBTyxDQUFWLEtBQUEsTUFBQSxJQUFBLElBQUEsY0FBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLGNBQUEsR0FBb0IrQix5Q0FBQUEsQ0FBbkMsS0FBQTtBQUVBMEMsTUFBQUEsU0FBUyxDQUFBLGNBQUEsRUFBVEEsY0FBUyxDQUFUQSxDQUFBQSxJQUFBQSxDQUNVLFVBQUEsQ0FBQSxFQUFDO0FBQUEsZUFBSUMsQ0FBQyxDQUFMLElBQUlBLEVBQUo7QUFEWEQsT0FBQUEsRUFBQUEsSUFBQUEsQ0FFVSxVQUFBLGVBQUEsRUFBOEM7QUFBQSxZQUFBLHFCQUFBLEVBQUEscUJBQUEsRUFBQSxzQkFBQSxFQUFBLHNCQUFBOztBQUFBLFlBQ3hDMUIsR0FEd0MsR0FDaEM0QixlQURnQyxDQUFBLEdBQUE7QUFFaEQsWUFBTUMsa0JBQWtCLEdBQUduQixrQkFBa0IsQ0FBN0MsZUFBNkMsQ0FBN0M7QUFDQSxZQUFNVCxhQUFhLEdBQUcyQixlQUFlLENBQWZBLGFBQUFBLEdBQ2hCQyxrQkFBa0IsSUFBSUQsZUFBZSxDQURyQkEsYUFBQUEsR0FBdEIsSUFBQTs7QUFHQSxZQUFNWCxnQkFBZ0IsR0FBQSxhQUFBLENBQUEsYUFBQSxDQUFBLGFBQUEsQ0FBQSxhQUFBLENBQUEsRUFBQSxFQUFBLFFBQUEsQ0FBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLGVBQUEsQ0FBQSxFQUFBLEVBQUEsRUFBQTtBQUlsQmEsVUFBQUEsS0FBSyxFQUFFN0UsT0FBTyxDQUpJLEtBQUE7QUFLbEI4RSxVQUFBQSxlQUFlLEVBQUEsQ0FBQSxxQkFBQSxHQUFFOUUsT0FBTyxDQUFULGVBQUEsTUFBQSxJQUFBLElBQUEscUJBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxxQkFBQSxHQUE2QjJFLGVBQWUsQ0FMekMsZUFBQTtBQU1sQkksVUFBQUEsbUJBQW1CLEVBQUEsQ0FBQSxxQkFBQSxHQUFFL0UsT0FBTyxDQUFULG1CQUFBLE1BQUEsSUFBQSxJQUFBLHFCQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEscUJBQUEsR0FORCxLQUFBO0FBT2xCZ0YsVUFBQUEscUJBQXFCLEVBQUEsQ0FBQSxzQkFBQSxHQUFFaEYsT0FBTyxDQUFULHFCQUFBLE1BQUEsSUFBQSxJQUFBLHNCQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsc0JBQUEsR0FQSCxLQUFBO0FBUWxCaUYsVUFBQUEsNEJBQTRCLEVBQUEsQ0FBQSxzQkFBQSxHQUFFakYsT0FBTyxDQUFULDRCQUFBLE1BQUEsSUFBQSxJQUFBLHNCQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsc0JBQUEsR0FSVixLQUFBO0FBU2xCNEQsVUFBQUEsWUFBWSxFQVRNLFlBQUE7QUFVbEJaLFVBQUFBLGFBQWEsRUFWSyxhQUFBO0FBV2xCa0MsVUFBQUEsY0FBYyxFQUFFbEYsT0FBTyxDQUFDa0Y7QUFYTixTQUFBLENBQXRCOztBQWNBQyxRQUFBQSxRQUFRLENBQ0o7QUFDSXBDLFVBQUFBLEdBQUcsRUFBRWlCLGdCQUFnQixDQUR6QixHQUFBO0FBRUloQixVQUFBQSxhQUFhLEVBQUVnQixnQkFBZ0IsQ0FGbkMsYUFBQTtBQUdJSixVQUFBQSxZQUFZLEVBQUVJLGdCQUFnQixDQUhsQyxZQUFBO0FBSUk1SSxVQUFBQSxnQkFBZ0IsRUFBRTRJLGdCQUFnQixDQUp0QyxnQkFBQTtBQUtJZixVQUFBQSxLQUFLLEVBQUVlLGdCQUFnQixDQUFDZjtBQUw1QixTQURJLEVBUUosVUFBQSxTQUFBLEVBQWE7QUFDVCxjQUFJbUMsU0FBUyxJQUFJLENBQUNwSSxtQkFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsRUFBQUEsQ0FBQUEsVUFBQUEsQ0FBbEIsR0FBa0JBLENBQWxCLEVBQTZDO0FBQ3pDSixZQUFBQSxRQUFRLENBQUMsSUFBQSxLQUFBLENBQUEsNENBQUEsTUFBQSxDQUFUQSxHQUFTLENBQUEsQ0FBRCxDQUFSQTtBQUNBO0FBQ0g7O0FBQ0QsY0FBTXlJLE1BQU0sR0FBR0MsbUJBQW1CLENBQWxDLGFBQWtDLENBQWxDO0FBRUFDLFVBQUFBLFVBQVUsQ0FBQSxXQUFBLEVBQUEsYUFBQSxDQUFBLGFBQUEsQ0FBQSxFQUFBLEVBQUEsZ0JBQUEsQ0FBQSxFQUFBLEVBQUEsRUFBQTtBQUlGQyxZQUFBQSxZQUFZLEVBQUV4RixPQUFPLENBSm5CLFlBQUE7QUFLRnVGLFlBQUFBLFVBQVUsRUFBRUY7QUFMVixXQUFBLENBQUEsRUFBVkUsUUFBVSxDQUFWQTtBQWZSSixTQUFRLENBQVJBO0FBdEJSVixPQUFBQSxFQUFBQSxPQUFBQSxFQUFBQSxRQUFBQTtBQWtESDs7QUFFRCxRQUFNZ0Isa0JBQTBDLEdBQUc7QUFDL0NDLE1BQUFBLEtBQUssRUFEMEMsS0FBQTtBQUUvQ0MsTUFBQUEsVUFBVSxFQUZxQyxFQUFBO0FBRy9DQyxNQUFBQSxzQkFBc0IsRUFBRWpMLFNBQVMsQ0FIYywwQkFHZCxDQUhjO0FBSS9Da0wsTUFBQUEsVUFBVSxFQUFFO0FBSm1DLEtBQW5EO0FBT0E3SSxJQUFBQSxtQkFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsRUFBQUEsR0FBQUEsa0JBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUHJvZ3JhbVN0YXRlRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCBwcm9ncmFtIHN0YXRlXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGFyZ3VtZW50TmFtZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgbWVzc2FnZSAhPSB1bmRlZmluZWQgPyBgJHttZXNzYWdlfSAoYXJndW1lbnQ6ICR7YXJndW1lbnROYW1lfSlgIDogYEludmFsaWQgYXJndW1lbnQgdmFsdWU6ICR7YXJndW1lbnROYW1lfWBcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBpbmdFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHR5cGluZ1wiKTtcbiAgICB9XG59XG4iLCIvKioqXG4gKiDQodGC0YDQvtCz0L7RgtC40L/QuNC30LjRgNC+0LLQsNC90L3QsNGPINC30LDQvNC10L3QsCDQtNC70Y8gQm9vbGVhbiguLi4pXG4gKiDQntCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyBbLi4uXS5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogdW5kZWZpbmVkIHwgbnVsbCB8IFQpOiBpbnB1dCBpcyBUIHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nKTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOZXZlcihuZXZlckFyZ3VtZW50OiBuZXZlcik6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFuZEdldFN0cmluZyhuZXZlckFyZ3VtZW50OiBuZXZlcik6IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG4iLCJmdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGllbnRTZXR0aW5ncyA9IHtcbiAgICBhdXRob3JpemVkOiBwYXJzZUJvb2woXCJ7YXV0aG9yaXplZH1cIiksXG4gICAgY2F1bGRyb25BcGlVcmw6IFwie2NhdWxkcm9uQXBpVXJsfVwiLFxuICAgIGFib25JZDogXCJ7YWJvbklkfVwiLFxuICAgIG9yZ0lkOiBcIntvcmdJZH1cIixcbiAgICB1c2VySWQ6IFwie3VzZXJJZH1cIixcbiAgICBpc1Rlc3RTZXJ2ZXI6IHBhcnNlQm9vbChcIntpc1Rlc3RTZXJ2ZXJ9XCIpLFxuICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntyZW5kZXJDYWNoaW5nRm9ySUU4fVwiKSxcbiAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IHBhcnNlQm9vbChcIntub3JtYWxpemF0aW9uT25TZXJ2ZXJ9XCIpLFxuICAgIG5vcm1hdGl2ZVVybDogXCJ7bm9ybWF0aXZlVXJsfVwiLFxuICAgIHJlc291cmNlc1ZlcnNpb246IFwie3Jlc291cmNlc1ZlcnNpb259XCIsXG4gICAga29udHVyRG9tYWluczogXCJ7a29udHVyRG9tYWluc31cIixcbn07XG4iLCJpbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9FcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU3RlcCB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9Gb3JtUGFydHMvVG91ci9Ub3VyVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRXJyb3JMb2cgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0FwaS9DYW5keUFwaUNsaWVudC9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbFZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0NvcmVUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbEhvb2tGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvRXh0ZXJuYWxFdmVudHMvRXh0ZXJuYWxIb29rRnVuY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgUmVhZG9ubHlNb2RlbENodW5rIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGVsU3RvcmluZy9Nb2RlbENodW5rXCI7XG5pbXBvcnQgdHlwZSB7IFBpY2tsaXN0UXVlcnlGaWx0ZXIsIFBpY2tsaXN0UXVlcnlSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9QaWNrbGlzdHMvUGlja2xpc3RUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBJRm9ybSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi8uLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgeyBNb2RlbEV2ZW50c0xpc3RlbmVyIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9Nb2RlbEV2ZW50cy9Nb2RlbEV2ZW50XCI7XG5cbmltcG9ydCB7IElMZWdhY3lGb3JtIH0gZnJvbSBcIi4vSUxlZ2FjeUZvcm1cIjtcblxuZXhwb3J0IHR5cGUgTW9kZWxFdmVudFBhdGggPVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHBhdGg/OiBzdHJpbmcsIGZpZWxkTmFtZT86IHN0cmluZyk6IE1vZGVsRXZlbnRQYXRoIHtcbiAgICBpZiAoZmllbGROYW1lICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocGF0aCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBiZSBkZWZpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoLCBmaWVsZE5hbWVdO1xuICAgIH1cbiAgICBpZiAocGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGhdO1xuICAgIH1cbiAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl07XG59XG5cbmZ1bmN0aW9uIG1hcENodW5rVmFsdWVzKGNodW5rOiBSZWFkb25seU1vZGVsQ2h1bmspOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY2h1bmspXG4gICAgICAgIC5maWx0ZXIocGF0aCA9PiBjaHVua1twYXRoXSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2h1bmtbcGF0aF0sIFwidmFsdWVcIikpXG4gICAgICAgIC5tYXAocGF0aCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjaHVua1twYXRoXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgW3BhdGhdOiByZXN1bHQudmFsdWUgfTtcbiAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZHVjZUNodW5rVmFsdWVzKGNodW5rczogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pik6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgcmV0dXJuIGNodW5rcy5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIGNodW5rKSA9PiAoe1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgLi4uY2h1bmssXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICk7XG59XG5cbmNsYXNzIExlZ2FjeVB1YmxpY0Zvcm0gaW1wbGVtZW50cyBJUHVibGljRm9ybSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtOiBJTGVnYWN5Rm9ybTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihmb3JtOiBJTGVnYWN5Rm9ybSkge1xuICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBTZXJ2ZXJFcnJvckxvZyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlHSWQoZ0lkOiBzdHJpbmcsIGZpbHRlcj86IFBpY2tsaXN0UXVlcnlGaWx0ZXIpOiBQcm9taXNlPFBpY2tsaXN0UXVlcnlSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLnBpY2tsaXN0c1Byb3ZpZGVyLmdldEJ5R0lkKGdJZCwgZmlsdGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb24oZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmYoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb2RlbENoYW5nZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgbGlzdGVuZXI6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihcImZvcm0ub25Nb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZNb2RlbENoYW5nZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgbGlzdGVuZXI6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihcImZvcm0ub2ZmTW9kZWxDaGFuZ2UoKSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtLmNoYW5nZVNldC5zdG9wQXV0b3NlbmQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS51bm1vdW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0udW5tb3VudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb3VyU3RlcHMoKTogU3RlcFtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDYWNoZWRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSB0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIGVycm9yQ291bnQgIT0gdW5kZWZpbmVkICYmIGVycm9yQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZFcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYobW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogc3RyaW5nLCB2YWx1ZTogTW9kZWxWYWx1ZSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQoXG4gICAgICAgIHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZyB8IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuICAgICAgICB2YWx1ZT86IE1vZGVsVmFsdWVcbiAgICApOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhPck1vZGVsQ2h1bmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGF0aE9yTW9kZWxDaHVuaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckNodW5rID0gT2JqZWN0LmtleXMocGF0aE9yTW9kZWxDaHVuaykucmVkdWNlPFJlYWRvbmx5TW9kZWxDaHVuaz4oXG4gICAgICAgICAgICAgICAgKHJlc3VsdCwgcGF0aCkgPT4gKHsgW3BhdGhdOiB7IHZhbHVlOiBwYXRoT3JNb2RlbENodW5rW3BhdGhdIH0sIC4uLnJlc3VsdCB9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLmZpbGwoaW5uZXJDaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5zZXQocGF0aE9yTW9kZWxDaHVuaywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLnNldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3Igb2JqZWN0IHdpdGggcGF0aC12YWx1ZSBwYWlyc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhdGhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhPckFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBhdGhPckFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5tYXAocGF0aCA9PiBtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkQ2h1bmsocGF0aCkpKVxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2U8QXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pj4oKHJlc3VsdCwgYXJyYXkpID0+IHJlc3VsdC5jb25jYXQoYXJyYXkpLCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPckFycmF5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENhY2hlZENodW5rKHBhdGhPckFycmF5KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhPckFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkQ2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uZ2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBhcnJheSBvZiBwYXRoc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUocGF0aDogc3RyaW5nKTogTW9kZWxWYWx1ZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLm1vZGVsLmdldChwYXRoLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJbnN0YW5jZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlKHBhdGg6IHN0cmluZywgaW5zdGFuY2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybTogSUZvcm0pOiBJUHVibGljRm9ybSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBuZXcgTGVnYWN5UHVibGljRm9ybShmb3JtIGFzIElMZWdhY3lGb3JtKTtcbn1cbiIsIi8vIHRzbGludDpkaXNhYmxlIG5vLXVuc2FmZS1hbnlcbmV4cG9ydCBjbGFzcyBMb2FkSW50b0RvY3VtZW50IHtcbiAgICBwdWJsaWMgc3RhdGljIHNjcmlwdCh1cmk6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGxldCBzY3JpcHRMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IHNjcmlwdDogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblxuICAgICAgICBmdW5jdGlvbiBsb2FkSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChzY3JpcHRMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc2NyaXB0LnJlYWR5U3RhdGUgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgIHNjcmlwdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmcgdGhlIHVzZXIgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBjb21wbGV0ZXMgdG8gbG9hZC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbiBJRSBldmVuIHVwb24gZXJyb3IuIEluIGFueVxuICAgICAgICAvLyBjYXNlIGl0IGlzIHRoZSBjbGllbnQncyByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgc2NyaXB0IHJhblxuICAgICAgICAvLyBzdWNjZXNzZnVsbHkuXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBsb2FkSGFuZGxlcjtcbiAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGxvYWRIYW5kbGVyO1xuXG4gICAgICAgIC8vIEFkZCBhbiBlcnJvciBjYWxsYmFjay5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogTm90IHN1cHBvcnRlZCBpbiBJRS5cbiAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzY3JpcHQuXCIpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgdGhlIHNjcmlwdCBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogU2FmYXJpIG5ldmVyIGxvYWRzIHRoZSBzY3JpcHQgaWYgd2UgZG9uJ3Qgc2V0XG4gICAgICAgIC8vIHRoZSBzcmMgYXR0cmlidXRlIGJlZm9yZSBhcHBlbmRpbmcuXG4gICAgICAgIHNjcmlwdC5zcmMgPSB1cmk7XG4gICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiLCBcInVzZS1jcmVkZW50aWFsc1wiKTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc3R5bGVTaGVldCh1cmk6IHN0cmluZywgaWdub3JlRXJyb3I6IGJvb2xlYW4sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNvbHZlID0gKCkgPT4gY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlnbm9yZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzdHlsZXNoZWV0LlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSA/PyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcInN0eWxlc2hlZXRcIik7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdXJpKTtcbiAgICB9XG59XG4iLCJ2YXIgZ2xvYmFsID1cbiAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYpIHx8XG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpXG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGdsb2JhbCxcbiAgaXRlcmFibGU6ICdTeW1ib2wnIGluIGdsb2JhbCAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgYmxvYjpcbiAgICAnRmlsZVJlYWRlcicgaW4gZ2xvYmFsICYmXG4gICAgJ0Jsb2InIGluIGdsb2JhbCAmJlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSkoKSxcbiAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gZ2xvYmFsLFxuICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBnbG9iYWxcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgfSwgdGhpcylcbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICB9XG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKG5hbWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGl0ZW1zLnB1c2godmFsdWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbn1cblxuZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgfVxuICByZXR1cm4gY2hhcnMuam9pbignJylcbn1cblxuZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gIGlmIChidWYuc2xpY2UpIHtcbiAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gIH0gZWxzZSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICB9XG59XG5cbmZ1bmN0aW9uIEJvZHkoKSB7XG4gIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgIC8qXG4gICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICBwcm92aWRlIHVzZWZ1bCB0ZXN0IGhhcm5lc3MgZmVhdHVyZXMgc3VjaCBhcyBmbHVzaC4gSG93ZXZlciwgb25cbiAgICAgIEVTNSBicm93c2VycyB3aXRob3V0IGZldGNoIG9yIFByb3h5IHN1cHBvcnQgcG9sbHlmaWxscyBtdXN0IGJlIHVzZWQ7XG4gICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgb24gdGhlIG9iamVjdCBiZWZvcmUgdGhlIFByb3h5IGlzIGNyZWF0ZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXNcbiAgICAgIFJlc3BvbnNlLmJvZHlVc2VkIGV4aXN0cyBvbiB0aGUgaW5zdGFuY2UsIHdoaWxlIG1haW50YWluaW5nIHRoZVxuICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgIF9pbml0Qm9keSBpcyBjYWxsZWQuXG4gICAgKi9cbiAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZFxuICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgIGlmICghYm9keSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICB2YXIgaXNDb25zdW1lZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgICAgcmV0dXJuIGlzQ29uc3VtZWRcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0ICsgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICB9XG4gIH1cblxuICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG52YXIgbWV0aG9kcyA9IFsnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUE9TVCcsICdQVVQnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbFxuICB0aGlzLnJlZmVycmVyID0gbnVsbFxuXG4gIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gIH1cbiAgdGhpcy5faW5pdEJvZHkoYm9keSlcblxuICBpZiAodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICBpZiAob3B0aW9ucy5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBvcHRpb25zLmNhY2hlID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICB2YXIgcmVQYXJhbVNlYXJjaCA9IC8oWz8mXSlfPVteJl0qL1xuICAgICAgaWYgKHJlUGFyYW1TZWFyY2gudGVzdCh0aGlzLnVybCkpIHtcbiAgICAgICAgLy8gSWYgaXQgYWxyZWFkeSBleGlzdHMgdGhlbiBzZXQgdGhlIHZhbHVlIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGEgbmV3ICdfJyBwYXJhbWV0ZXIgdG8gdGhlIGVuZCB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdmFyIHJlUXVlcnlTdHJpbmcgPSAvXFw/L1xuICAgICAgICB0aGlzLnVybCArPSAocmVRdWVyeVN0cmluZy50ZXN0KHRoaXMudXJsKSA/ICcmJyA6ICc/JykgKyAnXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHtib2R5OiB0aGlzLl9ib2R5SW5pdH0pXG59XG5cbmZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgYm9keVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gZm9ybVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKVxuICAvLyBBdm9pZGluZyBzcGxpdCB2aWEgcmVnZXggdG8gd29yayBhcm91bmQgYSBjb21tb24gSUUxMSBidWcgd2l0aCB0aGUgY29yZS1qcyAzLjYuMCByZWdleCBwb2x5ZmlsbFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzc1MVxuICBwcmVQcm9jZXNzZWRIZWFkZXJzXG4gICAgLnNwbGl0KCdcXHInKVxuICAgIC5tYXAoZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLmluZGV4T2YoJ1xcbicpID09PSAwID8gaGVhZGVyLnN1YnN0cigxLCBoZWFkZXIubGVuZ3RoKSA6IGhlYWRlclxuICAgIH0pXG4gICAgLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbkJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMjAwIDogb3B0aW9ucy5zdGF0dXNcbiAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICB0aGlzLnN0YXR1c1RleHQgPSBvcHRpb25zLnN0YXR1c1RleHQgPT09IHVuZGVmaW5lZCA/ICcnIDogJycgKyBvcHRpb25zLnN0YXR1c1RleHRcbiAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxufVxuXG5Cb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG5SZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgdXJsOiB0aGlzLnVybFxuICB9KVxufVxuXG5SZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMCwgc3RhdHVzVGV4dDogJyd9KVxuICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxudmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cblJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxufVxuXG5leHBvcnQgdmFyIERPTUV4Y2VwdGlvbiA9IGdsb2JhbC5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIHx8ICcnKVxuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZ2xvYmFsLmxvY2F0aW9uLmhyZWYgPyBnbG9iYWwubG9jYXRpb24uaHJlZiA6IHVybFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpXG5cbiAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXIgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykuaW5kZXhPZignYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJykgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcidcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5pdCAmJiB0eXBlb2YgaW5pdC5oZWFkZXJzID09PSAnb2JqZWN0JyAmJiAhKGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbml0LmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcblxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICB9KVxufVxuXG5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcblxuaWYgKCFnbG9iYWwuZmV0Y2gpIHtcbiAgZ2xvYmFsLmZldGNoID0gZmV0Y2hcbiAgZ2xvYmFsLkhlYWRlcnMgPSBIZWFkZXJzXG4gIGdsb2JhbC5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnbG9iYWwuUmVzcG9uc2UgPSBSZXNwb25zZVxufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIGRlZmluaXRpb24pIHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9IiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvKiB0c2xpbnQ6ZGlzYWJsZTpuby1udWxsLWtleXdvcmQgbm8tYW55IG5vLXVuc2FmZS1hbnkgKi9cbmltcG9ydCB7IGZldGNoIH0gZnJvbSBcIndoYXR3Zy1mZXRjaFwiO1xuXG5pbXBvcnQgeyBFcnJvckZpcnN0Q2FsbGJhY2ssIHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB7IExvYWRJbnRvRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vSGVscGVycy9Mb2FkSW50b0RvY3VtZW50XCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50IH0gZnJvbSBcIi4uL1R5cGVzL0lLZVdlYlRlbXBsYXRlc0FwaUNsaWVudFwiO1xuXG5pbXBvcnQgdHlwZSB7IENsaWVudERyYWZ0SW5mb1Jlc3BvbnNlIH0gZnJvbSBcIi4vQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2VcIjtcbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBSZW5kZXJGb3JtU2V0dGluZ3Mge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlbmRlckZvcm06IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQ7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xufVxuXG50eXBlIFN0YXJ0Rm9ybUZ1bmMgPSAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncykgPT4gUHJvbWlzZTxJRm9ybT47XG5cbmludGVyZmFjZSBDYW5keUdsb2JhbEluamVjdGVkVmFyIHtcbiAgICBzdGFydDogKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLCBjYWxsYmFjaz86IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4pID0+IHZvaWQ7XG4gICAga2Vmb3Jtc1VybD86IHN0cmluZztcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBib29sZWFuO1xuICAgIGVudHJ5UG9pbnQ6IHsgW2tleTogc3RyaW5nXTogU3RhcnRGb3JtRnVuYyB9O1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gICAgbmFtZXNwYWNlIE5vZGVKUyB7XG4gICAgICAgIGludGVyZmFjZSBHbG9iYWwge1xuICAgICAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmRlY2xhcmUgY29uc3QgZ2xvYmFsOiBXaW5kb3c7XG5cbmZ1bmN0aW9uIGRlZmF1bHRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvKiBlbXB0eSAqL1xufVxuXG5mdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVybChyZWxhdGl2ZVVybDogc3RyaW5nID0gXCJcIik6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZVVybCA9IGdsb2JhbC5DRi5rZWZvcm1zVXJsIHx8IFwiXCI7XG5cbiAgICByZXR1cm4gYCR7YmFzZVVybH0vJHtyZWxhdGl2ZVVybH1gLnJlcGxhY2UoLyhbXjpdKVxcL3syLH0vZywgXCIkMS9cIik7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHVuZGVmaW5lZCB8IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgICBpZiAocGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5UGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBwYXJhbU5hbWUgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xuICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gcGFyYW1zW3BhcmFtTmFtZV07XG4gICAgICAgIGlmIChwYXJhbVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcXVlcnlQYXJ0cy5wdXNoKGAke3BhcmFtTmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSl9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHF1ZXJ5UGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aCArIFwiP1wiICsgcXVlcnlQYXJ0cy5qb2luKFwiJlwiKTtcbn1cblxuZnVuY3Rpb24gaXNBbGxvd2VkKGRvbWFpbnM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKD86JHtkb21haW5zLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuXCIpLnJlcGxhY2UoL1xcKi9nLCBcIlthLXowLTktLl0rXCIpfSkkYCkudGVzdChcbiAgICAgICAgZ2xvYmFsLmxvY2F0aW9uLmhvc3RcbiAgICApO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJCeU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoZ2xvYmFsLmxvY2F0aW9uLnNlYXJjaFxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLnJlcGxhY2UoL14oXFw/fCN8JikvLCBcIlwiKVxuICAgICAgICAgICAgLnNwbGl0KFwiJlwiKVxuICAgICAgICAgICAgLm1hcChwYXJhbSA9PiBwYXJhbS5yZXBsYWNlKC9cXCsvZywgXCIgXCIpLnNwbGl0KFwiPVwiKS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KSlcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgICAuZmluZCgoW2tleV0pID0+IGtleSA9PSBuYW1lKSB8fCBbXSlbMV1cbiAgICApO1xufVxuXG50eXBlIFRhc2sgPSAoY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBydW5QYXJhbGxlbCh0YXNrczogVGFza1tdLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBsZXQgY29tcGxldGVkID0gMDtcblxuICAgIHRhc2tzLmZvckVhY2godGFzayA9PiB7XG4gICAgICAgIHRhc2soZXJyb3IgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkID0gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmludGVyZmFjZSBTdGFydEZvcm1TZXR0aW5nIHtcbiAgICBnZnY6IHN0cmluZztcbiAgICBlbmdpbmVWZXJzaW9uPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbChsZWZ0OiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBsZWZ0TnVtYmVycyA9IGxlZnRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0TnVtYmVycyA9IHJpZ2h0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGxlZnROdW1iZXJzWzBdID8/IDApID4gKHJpZ2h0TnVtYmVyc1swXSA/PyAwKSB8fFxuICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1swXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1swXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICgobGVmdE51bWJlcnNbMV0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzFdID8/IDApIHx8XG4gICAgICAgICAgICAgICAgICAgICgobGVmdE51bWJlcnNbMV0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMV0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChsZWZ0TnVtYmVyc1syXSA/PyAwKSA+PSAocmlnaHROdW1iZXJzWzJdID8/IDApKSkpXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRGb3JtKHNldHRpbmdzOiBTdGFydEZvcm1TZXR0aW5nLCBjYWxsYmFjazogKGVycm9yPzogbnVsbCB8IHVuZGVmaW5lZCB8IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgeyBnZnYsIGVuZ2luZVZlcnNpb24sIHJlc291cmNlc1ZlcnNpb24sIHRoZW1lIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IHVzZVNhbWVSZXNvdXJjZXNGb3JUaGVtZSA9XG4gICAgICAgIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIwNi4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3Qgbm9TdHlsZXNGb3JHZnYgPSBmYWxzZTsgLy8gZW5naW5lVmVyc2lvbiAhPSB1bmRlZmluZWQgJiYgKGlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbChlbmdpbmVWZXJzaW9uLCBcIjQuMjE0LjBcIikgfHwgZW5naW5lVmVyc2lvbiA9PT0gXCJsb2NhbFwiKTtcbiAgICBjb25zdCBuZWVkTG9hZFN0eWxlc0ZvckdmdiA9ICFub1N0eWxlc0ZvckdmdjtcbiAgICBjb25zdCBtaW4gPSBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJkZWJ1Z1wiKSA9PT0gXCJ0cnVlXCIgPyBcIlwiIDogXCIubWluXCI7XG4gICAgY29uc3QgdGhlbWVQb3N0Zml4ID0gIXVzZVNhbWVSZXNvdXJjZXNGb3JUaGVtZSAmJiB0aGVtZSA/IGAuJHtlbmNvZGVVUklDb21wb25lbnQodGhlbWUpfWAgOiBcIlwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHt0aGVtZVBvc3RmaXh9JHttaW59LmNzc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke3RoZW1lUG9zdGZpeH0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyB7XG4gICAgbnM6IHN0cmluZztcbiAgICBkcmFmdElkOiBzdHJpbmc7XG4gICAgZ2Z2Pzogc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG4gICAgZmVlZGJhY2tFbmFibGVkPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VCdXR0b24/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbGVhbkZvcm0/OiBib29sZWFuO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICBhdXRoZW50aWNhdGlvbj86IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIgfCB7IGF1dGhTaWQ6IHN0cmluZyB9O1xuICAgIGZldGNoPzogdHlwZW9mIGZldGNoO1xuICAgIG1vZGVsPzogeyBbcGF0aDogc3RyaW5nXTogdW5rbm93biB9O1xufVxuXG5mdW5jdGlvbiBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb246IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmcpOiB1bmRlZmluZWQgfCBFbmdpbmVFbnRyeVBvaW50IHtcbiAgICBpZiAoZW5naW5lVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIGdsb2JhbFtlbmdpbmVWZXJzaW9uXSAmJiBnbG9iYWxbZW5naW5lVmVyc2lvbl0uZGVmYXVsdDtcbn1cblxuZnVuY3Rpb24gc3RhcnQoXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgb3B0aW9uczogU3RhcnRGb3JtT3B0aW9ucyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPiA9IGRlZmF1bHRDYWxsYmFja1xuKTogdm9pZCB7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICBjb25zdCB7IG5zLCBkcmFmdElkIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHNldHRpbmdzID0gY2xpZW50U2V0dGluZ3M7XG5cbiAgICBpZiAoIWlzQWxsb3dlZChzZXR0aW5ncy5rb250dXJEb21haW5zKSkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcImRvbWFpbi51bnRydXN0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghc2V0dGluZ3MuYXV0aG9yaXplZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcInVzZXIudW5hdXRoZW50aWNhdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWRyYWZ0SWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLmRyYWZ0SWQgaXMgcmVxdWlyZWRcIik7XG4gICAgfSBlbHNlIGlmICghbnMpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLm5zIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZVpvbmUgPSBvcHRpb25zLnJlc291cmNlWm9uZSA/PyBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJyZXNvdXJjZVpvbmVcIik7XG4gICAgY29uc3QgY2xpZW50RHJhZnRVcmwgPSBidWlsZFVybCh1cmwoYHYxL25zLyR7bnN9L2RyYWZ0cy8ke2RyYWZ0SWR9L2NsaWVudC1kcmFmdC1pbmZvYCksIHtcbiAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogUmVxdWVzdEluaXQgPSB7IG1ldGhvZDogXCJHRVRcIiB9O1xuICAgIGlmIChvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09PSBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJpbmNsdWRlXCI7XG4gICAgfSBlbHNlIGlmIChcImF1dGhTaWRcIiBpbiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uICYmIG9wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPz8ge307XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEFVVEguU0lEICR7b3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICB9XG4gICAgY29uc3QgZmV0Y2hJbXBsID0gb3B0aW9ucy5mZXRjaCA/PyBmZXRjaDtcblxuICAgIGZldGNoSW1wbChjbGllbnREcmFmdFVybCwgcmVxdWVzdE9wdGlvbnMpXG4gICAgICAgIC50aGVuKHggPT4geC5qc29uKCkpXG4gICAgICAgIC50aGVuKChjbGllbnREcmFmdEluZm86IENsaWVudERyYWZ0SW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGdmdiB9ID0gY2xpZW50RHJhZnRJbmZvO1xuICAgICAgICAgICAgY29uc3QgZW5naW5lVmVyc2lvblBhcmFtID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZW5naW5lVmVyc2lvblwiKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvblxuICAgICAgICAgICAgICAgID8gZW5naW5lVmVyc2lvblBhcmFtIHx8IGNsaWVudERyYWZ0SW5mby5lbmdpbmVWZXJzaW9uXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5kZWRTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIC4uLmNsaWVudERyYWZ0SW5mbyxcbiAgICAgICAgICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IG9wdGlvbnMuZmVlZGJhY2tFbmFibGVkID8/IGNsaWVudERyYWZ0SW5mby5mZWVkYmFja0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsZWFuRm9ybTogb3B0aW9ucy5pc0Rpc2FibGVkQ2xlYW5Gb3JtID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb246IG9wdGlvbnMuYXV0aGVudGljYXRpb24sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsb2FkRm9ybShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdmdjogZXh0ZW5kZWRTZXR0aW5ncy5nZnYsXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MuZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
2315
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9Db21tb24vRXJyb3JzLnRzIiwid2VicGFjazovL0NhbmR5RW5naW5lL0NvbW1vbi9UeXBpbmdVdGlscy50cyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnRTZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6L0NhbmR5RW5naW5lL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovQ2FuZHlFbmdpbmUvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6L0NhbmR5RW5naW5lL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50LnRzIl0sIm5hbWVzIjpbIkFwcGxpY2F0aW9uRXJyb3IiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiTm90U3VwcG9ydGVkRXJyb3IiLCJtZXNzYWdlIiwiSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJUeXBpbmdFcnJvciIsImlucHV0IiwiaXRlbXMiLCJpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbCIsImFycmF5SXNOb3RFbXB0eSIsImFycmF5SGFzTGVuZ3RoIiwidmFsdWUiLCJCb29sZWFuIiwiY2xpZW50U2V0dGluZ3MiLCJhdXRob3JpemVkIiwicGFyc2VCb29sIiwiY2F1bGRyb25BcGlVcmwiLCJhYm9uSWQiLCJvcmdJZCIsInVzZXJJZCIsImlzVGVzdFNlcnZlciIsInJlbmRlckNhY2hpbmdGb3JJRTgiLCJub3JtYWxpemF0aW9uT25TZXJ2ZXIiLCJub3JtYXRpdmVVcmwiLCJyZXNvdXJjZXNWZXJzaW9uIiwia29udHVyRG9tYWlucyIsImZpZWxkTmFtZSIsInBhdGgiLCJjaHVuayIsIk9iamVjdCIsInJlc3VsdCIsIkxlZ2FjeVB1YmxpY0Zvcm0iLCJmb3JtIiwiY29uc29sZSIsImtleXMiLCJlcnJvckNvdW50IiwibW9kZWxDaGFuZ2VFdmVudFBhdGgiLCJwYXRoT3JNb2RlbENodW5rIiwiQXJyYXkiLCJpbm5lckNodW5rIiwicmVkdWNlQ2h1bmtWYWx1ZXMiLCJtYXBDaHVua1ZhbHVlcyIsInBhdGhPckFycmF5IiwiTG9hZEludG9Eb2N1bWVudCIsInNjcmlwdExvYWRlZCIsImhlYWQiLCJkb2N1bWVudCIsInNjcmlwdCIsImNhbGxiYWNrIiwicmVzb2x2ZSIsInJlamVjdCIsImxpbmsiLCJnbG9iYWwiLCJzdXBwb3J0Iiwic2VhcmNoUGFyYW1zIiwiaXRlcmFibGUiLCJibG9iIiwiZm9ybURhdGEiLCJhcnJheUJ1ZmZlciIsIm9iaiIsIkRhdGFWaWV3Iiwidmlld0NsYXNzZXMiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwibmFtZSIsIlN0cmluZyIsIml0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJTeW1ib2wiLCJoZWFkZXJzIiwiaGVhZGVyIiwiSGVhZGVycyIsIm5vcm1hbGl6ZU5hbWUiLCJub3JtYWxpemVWYWx1ZSIsIm9sZFZhbHVlIiwiaXRlcmF0b3JGb3IiLCJib2R5IiwiUHJvbWlzZSIsInJlYWRlciIsInByb21pc2UiLCJmaWxlUmVhZGVyUmVhZHkiLCJ2aWV3IiwiY2hhcnMiLCJpIiwiYnVmIiwiQmxvYiIsIkZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiaXNEYXRhVmlldyIsImJ1ZmZlckNsb25lIiwicmVqZWN0ZWQiLCJjb25zdW1lZCIsImlzQ29uc3VtZWQiLCJyZWFkQmxvYkFzVGV4dCIsInJlYWRBcnJheUJ1ZmZlckFzVGV4dCIsIkpTT04iLCJtZXRob2RzIiwidXBjYXNlZCIsIm1ldGhvZCIsIm9wdGlvbnMiLCJub3JtYWxpemVNZXRob2QiLCJyZVBhcmFtU2VhcmNoIiwicmVRdWVyeVN0cmluZyIsIlJlcXVlc3QiLCJfYm9keUluaXQiLCJzcGxpdCIsImJ5dGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicHJlUHJvY2Vzc2VkSGVhZGVycyIsInJhd0hlYWRlcnMiLCJwYXJ0cyIsImxpbmUiLCJrZXkiLCJCb2R5IiwiUmVzcG9uc2UiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwidXJsIiwicmVzcG9uc2UiLCJyZWRpcmVjdFN0YXR1c2VzIiwibG9jYXRpb24iLCJET01FeGNlcHRpb24iLCJlcnJvciIsIkVycm9yIiwicmVxdWVzdCIsInhociIsInBhcnNlSGVhZGVycyIsInNldFRpbWVvdXQiLCJmaXhVcmwiLCJpbml0IiwiZmV0Y2giLCJyZWxhdGl2ZVVybCIsImJhc2VVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImRvbWFpbnMiLCJwYXJhbSIsImNvbXBsZXRlZCIsInRhc2tzIiwidGFzayIsImxlZnROdW1iZXJzIiwicGFyc2VJbnQiLCJyaWdodE51bWJlcnMiLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwidGhlbWUiLCJzZXR0aW5ncyIsImlzTmVlZEVuZ2luZSIsInVzZVNhbWVSZXNvdXJjZXNGb3JUaGVtZSIsImlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbCIsIm5vU3R5bGVzRm9yR2Z2IiwibmVlZExvYWRTdHlsZXNGb3JHZnYiLCJtaW4iLCJnZXRQYXJhbWV0ZXJCeU5hbWUiLCJ0aGVtZVBvc3RmaXgiLCJ2IiwicmVzb3VyY2Vab25lIiwiYnVpbGRVcmwiLCJydW5QYXJhbGxlbCIsImZvcm1FbnRyeVBvaW50IiwiZXh0ZW5kZWRTZXR0aW5ncyIsInB1YmxpY0Zvcm0iLCJjcmVhdGVMZWdhY3lQdWJsaWNGb3JtIiwiZGVmYXVsdENhbGxiYWNrIiwibnMiLCJkcmFmdElkIiwiaXNBbGxvd2VkIiwiY2xpZW50RHJhZnRVcmwiLCJyZXF1ZXN0T3B0aW9ucyIsImZldGNoSW1wbCIsIngiLCJjbGllbnREcmFmdEluZm8iLCJlbmdpbmVWZXJzaW9uUGFyYW0iLCJtb2RlbCIsImZlZWRiYWNrRW5hYmxlZCIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwiYXV0aGVudGljYXRpb24iLCJsb2FkRm9ybSIsImxvYWRFcnJvciIsInJlbmRlciIsImdldEVuZ2luZUVudHJ5UG9pbnQiLCJyZW5kZXJGb3JtIiwidGVtcGxhdGVzQXBpIiwiQ2FuZHlDbGllbnRFeHBvcnRzIiwic3RhcnQiLCJlbnRyeVBvaW50IiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCIsImtlZm9ybXNVcmwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFPLFVBQU1BLGdCQUFiLEdBQUEsYUFBQSxVQUFBLE1BQUEsRUFBQTtBQUFBLFFBQUEsU0FBQSxDQUFBLGdCQUFBLEVBQUEs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QUEsd0JBQUEsQ0FBQSxRQUFBLENBQUE7QUFDQTs7QUFBQSxRQUFBLFlBQUEsS0FBQSxTQUFBLEVBQUE7QUFDQTtBQUFBLGFBQUEsWUFBQSxDQUFBLE9BQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTs7QUFDQTs7O0FBQUEsUUFBQSxNQUFBLEdBQUEsd0JBQUEsQ0FBQSxRQUFBLENBQUEsR0FBQTtBQUNBO0FBQUE7O0FBQ0E7QUFBQTs7QUFDQTtBQUFBLE1BQUEsT0FBQSxFQUFBO0FBQ0E7O0FBSkEsS0FBQTs7O0FBTUE7QUFBQTs7QUFDQTs7QUFBQSxJQUFBLG1CQUFBLENBQUEsUUFBQSxDQUFBLENBQUEsTUFBQSxFQUFBLE1BQUEsQ0FBQSxPQUFBLEVBQUEsbUJBQUE7OztBQUVBO0FBQUE7O0FBQ0E7OztBQUFBLFdBQUEsTUFBQSxDQUFBLE9BQUE7QUFDQTtBQUFBOzs7Ozs7Ozs7Ozs7OztBQ3RCQTs7O0FBQ0EsSUFBQSxtQkFBQSxDQUFBLENBQUEsR0FBQSxVQUFBLE9BQUEsRUFBQSxVQUFBLEVBQUE7QUFDQTtBQUFBLFdBQUEsSUFBQSxHQUFBLElBQUEsVUFBQSxFQUFBO0FBQ0E7QUFBQSxZQUFBLG1CQUFBLENBQUEsQ0FBQSxDQUFBLFVBQUEsRUFBQSxHQUFBLEtBQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLEVBQUEsR0FBQSxDQUFBLEVBQUE7QUFDQTtBQUFBLFVBQUEsTUFBQSxDQUFBLGNBQUEsQ0FBQSxPQUFBLEVBQUEsR0FBQSxFQUFBO0FBQXdDLFlBQUEsVUFBQSxFQUFBLElBQXhDO0FBQXdDLFlBQUEsR0FBQSxFQUFBLFVBQUEsQ0FBQSxHQUFBO0FBQXhDLFdBQUE7QUFDQTtBQUFBO0FBQ0E7O0FBQUE7QUFDQTs7QUFBQSxLQU5BOzs7Ozs7Ozs7Ozs7OztBQ0RBLElBQUEsbUJBQUEsQ0FBQSxDQUFBLEdBQUEsWUFBQTtBQUNBO0FBQUEsVUFBQSxPQUFBLFVBQUEsS0FBQSxRQUFBLEVBQUEsT0FBQSxVQUFBO0FBQ0E7O0FBQUEsVUFBQTtBQUNBO0FBQUEsZUFBQSxRQUFBLElB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LENBQUEsR0FBQSxFQUFBLEtBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxFQUFBLEdBQUEsQ0FHWixVQUFBLENBQUEsRUFBQztBQUFBLGlCQUFJRCxRQUFRLENBQUEsQ0FBQSxFQUFaLEVBQVksQ0FBWjtBQUhWLFNBQXFCLENBQXJCO0FBSUEsZUFDSSxDQUFBLENBQUEsYUFBQSxHQUFDRCxXQUFXLENBQVosQ0FBWSxDQUFaLE1BQUEsSUFBQSxJQUFBLGFBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxhQUFBLEdBQUEsQ0FBQSxLQUFBLENBQUEsY0FBQSxHQUF5QkUsWUFBWSxDQUFyQyxDQUFxQyxDQUFyQyxNQUFBLElBQUEsSUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsY0FBQSxHQUFBLENBQUEsS0FDQyxDQUFBLENBQUEsY0FBQSxHQUFDRixXQUFXLENBQVosQ0FBWSxDQUFaLE1BQUEsSUFBQSxJQUFBLGNBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxjQUFBLEdBQUEsQ0FBQSxPQUFBLENBQUEsZUFBQSxHQUEyQkUsWUFBWSxDQUF2QyxDQUF1QyxDQUF2QyxNQUFBLElBQUEsSUFBQSxlQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsZUFBQSxHQUFBLENBQUEsTUFDSSxDQUFBLENBQUEsY0FBQSxHQUFDRixXQUFXLENBQVosQ0FBWSxDQUFaLE1BQUEsSUFBQSxJQUFBLGNBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxjQUFBLEdBQUEsQ0FBQSxLQUFBLENBQUEsZUFBQSxHQUF5QkUsWUFBWSxDQUFyQyxDQUFxQyxDQUFyQyxNQUFBLElBQUEsSUFBQSxlQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsZUFBQSxHQUFBLENBQUEsS0FDSSxDQUFBLENBQUEsY0FBQSxHQUFDRixXQUFXLENBQVosQ0FBWSxDQUFaLE1BQUEsSUFBQSxJQUFBLGNBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxjQUFBLEdBQUEsQ0FBQSxPQUFBLENBQUEsZUFBQSxHQUEyQkUsWUFBWSxDQUF2QyxDQUF1QyxDQUF2QyxNQUFBLElBQUEsSUFBQSxl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LFVBQUFBLEtBQUssRUFBRWUsZ0JBQWdCLENBQUNmO0FBTDVCLFNBREksRUFRSixVQUFBLFNBQUEsRUFBYTtBQUNULGNBQUltQyxTQUFTLElBQUksQ0FBQ3BJLG1CQUFBQSxDQUFBQSxDQUFBQSxDQUFBQSxFQUFBQSxDQUFBQSxVQUFBQSxDQUFsQixHQUFrQkEsQ0FBbEIsRUFBNkM7QUFDekNKLFlBQUFBLFFBQVEsQ0FBQyxJQUFBLEtBQUEsQ0FBQSw0Q0FBQSxNQUFBLENBQVRBLEdBQVMsQ0FBQSxDQUFELENBQVJBO0FBQ0E7QUFDSDs7QUFDRCxjQUFNeUksTUFBTSxHQUFHQyxtQkFBbUIsQ0FBbEMsYUFBa0MsQ0FBbEM7QUFFQUMsVUFBQUEsVUFBVSxDQUFBLFdBQUEsRUFBQSxhQUFBLENBQUEsYUFBQSxDQUFBLEVBQUEsRUFBQSxnQkFBQSxDQUFBLEVBQUEsRUFBQSxFQUFBO0FBSUZDLFlBQUFBLFlBQVksRUFBRXhGLE9BQU8sQ0FKbkIsWUFBQTtBQUtGdUYsWUFBQUEsVUFBVSxFQUFFRjtBQUxWLFdBQUEsQ0FBQSxFQUFWRSxRQUFVLENBQVZBO0FBZlJKLFNBQVEsQ0FBUkE7QUF0QlJWLE9BQUFBLEVBQUFBLE9BQUFBLEVBQUFBLFFBQUFBO0FBa0RIOztBQUVELFFBQU1nQixrQkFBMEMsR0FBRztBQUMvQ0MsTUFBQUEsS0FBSyxFQUQwQyxLQUFBO0FBRS9DQyxNQUFBQSxVQUFVLEVBRnFDLEVBQUE7QUFHL0NDLE1BQUFBLHNCQUFzQixFQUFFakwsU0FBUyxDQUhjLDBCQUdkLENBSGM7QUFJL0NrTCxNQUFBQSxVQUFVLEVBQUU7QUFKbUMsS0FBbkQ7QUFPQTdJLElBQUFBLG1CQUFBQSxDQUFBQSxDQUFBQSxDQUFBQSxFQUFBQSxHQUFBQSxrQkFBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQXBwbGljYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJPcGVyYXRpb24gbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSA/PyBcIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRQcm9ncmFtU3RhdGVFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHByb2dyYW0gc3RhdGVcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJndW1lbnROYW1lOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXNzYWdlICE9IHVuZGVmaW5lZCA/IGAke21lc3NhZ2V9IChhcmd1bWVudDogJHthcmd1bWVudE5hbWV9KWAgOiBgSW52YWxpZCBhcmd1bWVudCB2YWx1ZTogJHthcmd1bWVudE5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGluZ0Vycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgdHlwaW5nXCIpO1xuICAgIH1cbn1cbiIsIi8qKipcbiAqINCh0YLRgNC+0LPQvtGC0LjQv9C40LfQuNGA0L7QstCw0L3QvdCw0Y8g0LfQsNC80LXQvdCwINC00LvRjyBCb29sZWFuKC4uLilcbiAqINCe0LHRi9GH0L3QviDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LTQu9GPIFsuLi5dLmZpbHRlcihpc05vdE51bGxPclVuZGVmaW5lZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiB1bmRlZmluZWQgfCBudWxsIHwgVCk6IGlucHV0IGlzIFQge1xuICAgIHJldHVybiBpbnB1dCAhPSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JGaXJzdENhbGxiYWNrPFQ+ID0gKC4uLmFyZ3M6IFtFcnJvciwgbnVsbCB8IHVuZGVmaW5lZF0gfCBbbnVsbCB8IHVuZGVmaW5lZCwgVF0gfCBbRXJyb3JdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0KG1lc3NhZ2U/OiBzdHJpbmcpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJVbmRlZmluZWQgaXMgbm90IGFsbG93ZWRcIik7XG59XG5cbnR5cGUgQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7IGxlbmd0aDogVExlbmd0aCB9XG4gICAgPyBUUmVzdFxuICAgIDogQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCwgW1RJdGVtLCAuLi5UUmVzdF0+O1xuXG5leHBvcnQgdHlwZSBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7XG4gICAgbGVuZ3RoOiBUTGVuZ3RoO1xufVxuICAgID8gWy4uLlRSZXN0LCAuLi5USXRlbVtdXVxuICAgIDogTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGgsIFsuLi5UUmVzdCwgVEl0ZW1dPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5MZW5ndGhPclVuZGVmaW5lZDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogdW5kZWZpbmVkIHwgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIGlmIChpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbWluTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA9PT0gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0F0TGVhc3RPbmVJdGVtPFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGFzc2VydHMgaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIGlmICghYXJyYXlJc05vdEVtcHR5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgYmUgbm90IGVtcHR5YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFhcnJheUhhc0xlbmd0aChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IHNob3VsZCBoYXMgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5ldmVyKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQW5kR2V0U3RyaW5nKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogc3RyaW5nIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgcmV0dXJuIGAke25ldmVyQXJndW1lbnR9YDtcbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgYWJvbklkOiBcInthYm9uSWR9XCIsXG4gICAgb3JnSWQ6IFwie29yZ0lkfVwiLFxuICAgIHVzZXJJZDogXCJ7dXNlcklkfVwiLFxuICAgIGlzVGVzdFNlcnZlcjogcGFyc2VCb29sKFwie2lzVGVzdFNlcnZlcn1cIiksXG4gICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogcGFyc2VCb29sKFwie3JlbmRlckNhY2hpbmdGb3JJRTh9XCIpLFxuICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogcGFyc2VCb29sKFwie25vcm1hbGl6YXRpb25PblNlcnZlcn1cIiksXG4gICAgbm9ybWF0aXZlVXJsOiBcIntub3JtYXRpdmVVcmx9XCIsXG4gICAgcmVzb3VyY2VzVmVyc2lvbjogXCJ7cmVzb3VyY2VzVmVyc2lvbn1cIixcbiAgICBrb250dXJEb21haW5zOiBcIntrb250dXJEb21haW5zfVwiLFxufTtcbiIsImltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGVwIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0Zvcm1QYXJ0cy9Ub3VyL1RvdXJUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQXBpL0NhbmR5QXBpQ2xpZW50L1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgdHlwZSB7IE1vZGVsVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsSG9va0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9FeHRlcm5hbEV2ZW50cy9FeHRlcm5hbEhvb2tGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkb25seU1vZGVsQ2h1bmsgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kZWxTdG9yaW5nL01vZGVsQ2h1bmtcIjtcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RRdWVyeUZpbHRlciwgUGlja2xpc3RRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB7IE1vZGVsRXZlbnRzTGlzdGVuZXIgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L01vZGVsRXZlbnRzL01vZGVsRXZlbnRcIjtcblxuaW1wb3J0IHsgSUxlZ2FjeUZvcm0gfSBmcm9tIFwiLi9JTGVnYWN5Rm9ybVwiO1xuXG5leHBvcnQgdHlwZSBNb2RlbEV2ZW50UGF0aCA9XG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl1cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxDaGFuZ2VFdmVudFBhdGgocGF0aD86IHN0cmluZywgZmllbGROYW1lPzogc3RyaW5nKTogTW9kZWxFdmVudFBhdGgge1xuICAgIGlmIChmaWVsZE5hbWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXRoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGJlIGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGgsIGZpZWxkTmFtZV07XG4gICAgfVxuICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXTtcbn1cblxuZnVuY3Rpb24gbWFwQ2h1bmtWYWx1ZXMoY2h1bms6IFJlYWRvbmx5TW9kZWxDaHVuayk6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjaHVuaylcbiAgICAgICAgLmZpbHRlcihwYXRoID0+IGNodW5rW3BhdGhdICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaHVua1twYXRoXSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNodW5rW3BhdGhdO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBbcGF0aF06IHJlc3VsdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlQ2h1bmtWYWx1ZXMoY2h1bmtzOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+KTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICByZXR1cm4gY2h1bmtzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgY2h1bmspID0+ICh7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAuLi5jaHVuayxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgKTtcbn1cblxuY2xhc3MgTGVnYWN5UHVibGljRm9ybSBpbXBsZW1lbnRzIElQdWJsaWNGb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm06IElMZWdhY3lGb3JtO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZvcm06IElMZWdhY3lGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXJyb3JMb2coZXJyb3JMb2c6IFNlcnZlckVycm9yTG9nKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCeUdJZChnSWQ6IHN0cmluZywgZmlsdGVyPzogUGlja2xpc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0QnlHSWQoZ0lkLCBmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vZmZNb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZvcm0uY2hhbmdlU2V0LnN0b3BBdXRvc2VuZCgpO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnVubW91bnQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS51bm1vdW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRvdXJTdGVwcygpOiBTdGVwW10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtLm1vZGVsLmdldENhY2hlZENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpO1xuICAgICAgICAvLyBAdHMtaWdub3JlINCt0YLQviDQsiDRgdGC0LDRgNGL0YUg0LTQstC40LbQutCw0YUg0YLRg9GCINGC0LDQutC+0Lkg0LLRi9C30L7QslxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS52YWxpZGF0b3IudmFsaWRhdGVBbGwoa2V5cyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb3VudCA9IHRoaXMuZm9ybS5tb2RlbC5nZXRDYWNoZWQodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpO1xuICAgICAgICByZXR1cm4gZXJyb3JDb3VudCAhPSB1bmRlZmluZWQgJiYgZXJyb3JDb3VudCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24obW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9KTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcsIHZhbHVlOiBNb2RlbFZhbHVlKTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChcbiAgICAgICAgcGF0aE9yTW9kZWxDaHVuazogc3RyaW5nIHwgeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0sXG4gICAgICAgIHZhbHVlPzogTW9kZWxWYWx1ZVxuICAgICk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0aE9yTW9kZWxDaHVuayAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShwYXRoT3JNb2RlbENodW5rKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyQ2h1bmsgPSBPYmplY3Qua2V5cyhwYXRoT3JNb2RlbENodW5rKS5yZWR1Y2U8UmVhZG9ubHlNb2RlbENodW5rPihcbiAgICAgICAgICAgICAgICAocmVzdWx0LCBwYXRoKSA9PiAoeyBbcGF0aF06IHsgdmFsdWU6IHBhdGhPck1vZGVsQ2h1bmtbcGF0aF0gfSwgLi4ucmVzdWx0IH0pLFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuZmlsbChpbm5lckNodW5rKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLnNldChwYXRoT3JNb2RlbENodW5rLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uc2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBvYmplY3Qgd2l0aCBwYXRoLXZhbHVlIHBhaXJzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQocGF0aE9yQXJyYXk6IHN0cmluZyB8IHN0cmluZ1tdKTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aE9yQXJyYXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMoXG4gICAgICAgICAgICAgICAgcGF0aE9yQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChwYXRoID0+IG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDYWNoZWRDaHVuayhwYXRoKSkpXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZTxBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+PigocmVzdWx0LCBhcnJheSkgPT4gcmVzdWx0LmNvbmNhdChhcnJheSksIFtdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yQXJyYXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkQ2h1bmsocGF0aE9yQXJyYXkpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF0aE9yQXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDYWNoZWRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5nZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIGFycmF5IG9mIHBhdGhzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZShwYXRoOiBzdHJpbmcpOiBNb2RlbFZhbHVlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ubW9kZWwuZ2V0KHBhdGgsIFwidmFsdWVcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEluc3RhbmNlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENoaWxkcmVuKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtOiBJRm9ybSk6IElQdWJsaWNGb3JtIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5ldyBMZWdhY3lQdWJsaWNGb3JtKGZvcm0gYXMgSUxlZ2FjeUZvcm0pO1xufVxuIiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsInZhciBnbG9iYWwgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbClcblxudmFyIHN1cHBvcnQgPSB7XG4gIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gZ2xvYmFsLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnbG9iYWwgJiZcbiAgICAnQmxvYicgaW4gZ2xvYmFsICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnbG9iYWwsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxufVxuXG5mdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbn1cblxuaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gIF1cblxuICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgfVxuICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fiFdL2kudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiJylcbiAgfVxuICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG5mdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVyYXRvclxufVxuXG5leHBvcnQgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gIHRoaXMubWFwID0ge31cblxuICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICB9XG4gIGJvZHkuYm9keVVzZWQgPSB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICB9XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKGlzQ29uc3VtZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnVmZmVyLnNsaWNlKFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICB9XG4gICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWxcbiAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dClcbiAgfVxuXG4gIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJ1xuICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIH1cbiAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsXG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxudHJ5IHtcbiAgbmV3IERPTUV4Y2VwdGlvbigpXG59IGNhdGNoIChlcnIpIHtcbiAgRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSlcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgfVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBET01FeGNlcHRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgfVxuXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgIHhoci5hYm9ydCgpXG4gICAgfVxuXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaXhVcmwodXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXJsID09PSAnJyAmJiBnbG9iYWwubG9jYXRpb24uaHJlZiA/IGdsb2JhbC5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlciAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKS5pbmRleE9mKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIG5vcm1hbGl6ZVZhbHVlKGluaXQuaGVhZGVyc1tuYW1lXSkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWdsb2JhbC5mZXRjaCkge1xuICBnbG9iYWwuZmV0Y2ggPSBmZXRjaFxuICBnbG9iYWwuSGVhZGVycyA9IEhlYWRlcnNcbiAgZ2xvYmFsLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIGdsb2JhbC5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgZGVmaW5pdGlvbikge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iaiwgcHJvcCkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7IH0iLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8qIHRzbGludDpkaXNhYmxlOm5vLW51bGwta2V5d29yZCBuby1hbnkgbm8tdW5zYWZlLWFueSAqL1xuaW1wb3J0IHsgZmV0Y2ggfSBmcm9tIFwid2hhdHdnLWZldGNoXCI7XG5cbmltcG9ydCB7IEVycm9yRmlyc3RDYWxsYmFjaywgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBJRm9ybSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvRm9ybS9JRm9ybVwiO1xuaW1wb3J0IHsgTG9hZEludG9Eb2N1bWVudCB9IGZyb20gXCIuLi8uLi9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQgfSBmcm9tIFwiLi4vVHlwZXMvSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50XCI7XG5cbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgY2xpZW50U2V0dGluZ3MgfSBmcm9tIFwiLi9DbGllbnRTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGVnYWN5UHVibGljRm9ybSB9IGZyb20gXCIuL0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybVwiO1xuXG50eXBlIEZvcm1Db250YWluZXIgPSBzdHJpbmcgfCBIVE1MRWxlbWVudDtcblxudHlwZSBFbmdpbmVFbnRyeVBvaW50ID0gKCkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgICBuYW1lc3BhY2UgTm9kZUpTIHtcbiAgICAgICAgaW50ZXJmYWNlIEdsb2JhbCB7XG4gICAgICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZGVjbGFyZSBjb25zdCBnbG9iYWw6IFdpbmRvdztcblxuZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8qIGVtcHR5ICovXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdXJsKHJlbGF0aXZlVXJsOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2xvYmFsLkNGLmtlZm9ybXNVcmwgfHwgXCJcIjtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke3JlbGF0aXZlVXJsfWAucmVwbGFjZSgvKFteOl0pXFwvezIsfS9nLCBcIiQxL1wiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogdW5kZWZpbmVkIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtTmFtZSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgICAgaWYgKHBhcmFtVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeVBhcnRzLnB1c2goYCR7cGFyYW1OYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnlQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoICsgXCI/XCIgKyBxdWVyeVBhcnRzLmpvaW4oXCImXCIpO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWQoZG9tYWluczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke2RvbWFpbnMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIikucmVwbGFjZSgvXFwqL2csIFwiW2EtejAtOS0uXStcIil9KSRgKS50ZXN0KFxuICAgICAgICBnbG9iYWwubG9jYXRpb24uaG9zdFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAgIChnbG9iYWwubG9jYXRpb24uc2VhcmNoXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXD98I3wmKS8sIFwiXCIpXG4gICAgICAgICAgICAuc3BsaXQoXCImXCIpXG4gICAgICAgICAgICAubWFwKHBhcmFtID0+IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikuc3BsaXQoXCI9XCIpLm1hcChkZWNvZGVVUklDb21wb25lbnQpKVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIC5maW5kKChba2V5XSkgPT4ga2V5ID09IG5hbWUpIHx8IFtdKVsxXVxuICAgICk7XG59XG5cbnR5cGUgVGFzayA9IChjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHJ1blBhcmFsbGVsKHRhc2tzOiBUYXNrW10sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgdGFza3MuZm9yRWFjaCh0YXNrID0+IHtcbiAgICAgICAgdGFzayhlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaW50ZXJmYWNlIFN0YXJ0Rm9ybVNldHRpbmcge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxlZnROdW1iZXJzID0gbGVmdFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgY29uc3QgcmlnaHROdW1iZXJzID0gcmlnaHRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGVmdE51bWJlcnNbMF0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzBdID8/IDApIHx8XG4gICAgICAgICAgICAoKGxlZnROdW1iZXJzWzBdID8/IDApID09PSAocmlnaHROdW1iZXJzWzBdID8/IDApICYmXG4gICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMV0gPz8gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGxlZnROdW1iZXJzWzJdID8/IDApID49IChyaWdodE51bWJlcnNbMl0gPz8gMCkpKSlcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9hZEZvcm0oc2V0dGluZ3M6IFN0YXJ0Rm9ybVNldHRpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBudWxsIHwgdW5kZWZpbmVkIHwgRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB7IGdmdiwgZW5naW5lVmVyc2lvbiwgcmVzb3VyY2VzVmVyc2lvbiwgdGhlbWUgfSA9IHNldHRpbmdzO1xuXG4gICAgaWYgKGdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc05lZWRFbmdpbmUgPSBlbmdpbmVWZXJzaW9uICYmICFnbG9iYWxbZW5naW5lVmVyc2lvbl07XG4gICAgY29uc3QgdXNlU2FtZVJlc291cmNlc0ZvclRoZW1lID1cbiAgICAgICAgZW5naW5lVmVyc2lvbiAhPSB1bmRlZmluZWQgJiZcbiAgICAgICAgKGlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbChlbmdpbmVWZXJzaW9uLCBcIjQuMjA2LjBcIikgfHwgZW5naW5lVmVyc2lvbiA9PT0gXCJsb2NhbFwiKTtcbiAgICBjb25zdCBub1N0eWxlc0ZvckdmdiA9IGZhbHNlOyAvLyBlbmdpbmVWZXJzaW9uICE9IHVuZGVmaW5lZCAmJiAoaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGVuZ2luZVZlcnNpb24sIFwiNC4yMTQuMFwiKSB8fCBlbmdpbmVWZXJzaW9uID09PSBcImxvY2FsXCIpO1xuICAgIGNvbnN0IG5lZWRMb2FkU3R5bGVzRm9yR2Z2ID0gIW5vU3R5bGVzRm9yR2Z2O1xuICAgIGNvbnN0IG1pbiA9IGdldFBhcmFtZXRlckJ5TmFtZShcImRlYnVnXCIpID09PSBcInRydWVcIiA/IFwiXCIgOiBcIi5taW5cIjtcbiAgICBjb25zdCB0aGVtZVBvc3RmaXggPSAhdXNlU2FtZVJlc291cmNlc0ZvclRoZW1lICYmIHRoZW1lID8gYC4ke2VuY29kZVVSSUNvbXBvbmVudCh0aGVtZSl9YCA6IFwiXCI7XG4gICAgY29uc3QgdGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gICAgY29uc3QgcGFyYW1zID0geyB2OiByZXNvdXJjZXNWZXJzaW9uLCByZXNvdXJjZVpvbmU6IHNldHRpbmdzLnJlc291cmNlWm9uZSB9O1xuICAgIGlmIChuZWVkTG9hZFN0eWxlc0Zvckdmdikge1xuICAgICAgICB0YXNrcy5wdXNoKGNiID0+XG4gICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnN0eWxlU2hlZXQoXG4gICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3N0eWxlcy8ke2dmdn0ke3RoZW1lUG9zdGZpeH0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbiAgICB0YXNrcy5wdXNoKGNiID0+IExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zY3JpcHRzLyR7Z2Z2fSR7bWlufS5qc2AsIHBhcmFtcykpLCBjYikpO1xuXG4gICAgaWYgKGlzTmVlZEVuZ2luZSkge1xuICAgICAgICB0YXNrcy5wdXNoKFxuICAgICAgICAgICAgY2IgPT5cbiAgICAgICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnN0eWxlU2hlZXQoXG4gICAgICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvY2FuZHlfJHtlbmdpbmVWZXJzaW9ufSR7dGhlbWVQb3N0Zml4fSR7bWlufS5jc3NgLCBwYXJhbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zY3JpcHQoXG4gICAgICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zY3JpcHRzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uanNgLCBwYXJhbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcnVuUGFyYWxsZWwodGFza3MsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyRm9ybShcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBleHRlbmRlZFNldHRpbmdzOiBSZW5kZXJGb3JtU2V0dGluZ3MsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT5cbik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1FbnRyeVBvaW50ID1cbiAgICAgICAgZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZXh0ZW5kZWRTZXR0aW5ncy5nZnZdID8/IHJlamVjdChgRm9ybSBlbnRyeSBwb2ludCAke2V4dGVuZGVkU2V0dGluZ3MuZ2Z2fSBub3QgZm91bmQuYCk7XG4gICAgZm9ybUVudHJ5UG9pbnQocGFnZUNvbnRlbnQsIGV4dGVuZGVkU2V0dGluZ3MpXG4gICAgICAgIC50aGVuKGZvcm0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHVibGljRm9ybSA9IGZvcm0ucHVibGljRm9ybSB8fCBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm0pO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBwdWJsaWNGb3JtKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFydEZvcm1PcHRpb25zIHtcbiAgICBuczogc3RyaW5nO1xuICAgIGRyYWZ0SWQ6IHN0cmluZztcbiAgICBnZnY/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHRlbXBsYXRlc0FwaT86IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudDtcbiAgICBmZWVkYmFja0VuYWJsZWQ/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsZWFuRm9ybT86IGJvb2xlYW47XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIGF1dGhlbnRpY2F0aW9uPzogXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIiB8IHsgYXV0aFNpZDogc3RyaW5nIH07XG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XG4gICAgbW9kZWw/OiB7IFtwYXRoOiBzdHJpbmddOiB1bmtub3duIH07XG59XG5cbmZ1bmN0aW9uIGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbjogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZyk6IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQge1xuICAgIGlmIChlbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gZ2xvYmFsW2VuZ2luZVZlcnNpb25dICYmIGdsb2JhbFtlbmdpbmVWZXJzaW9uXS5kZWZhdWx0O1xufVxuXG5mdW5jdGlvbiBzdGFydChcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+ID0gZGVmYXVsdENhbGxiYWNrXG4pOiB2b2lkIHtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGNvbnN0IHsgbnMsIGRyYWZ0SWQgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBjbGllbnRTZXR0aW5ncztcblxuICAgIGlmICghaXNBbGxvd2VkKHNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFzZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChgdjEvbnMvJHtuc30vZHJhZnRzLyR7ZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gKSwge1xuICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHsgbWV0aG9kOiBcIkdFVFwiIH07XG4gICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT09IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcImluY2x1ZGVcIjtcbiAgICB9IGVsc2UgaWYgKFwiYXV0aFNpZFwiIGluIG9wdGlvbnMuYXV0aGVudGljYXRpb24gJiYgb3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQVVUSC5TSUQgJHtvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgIH1cbiAgICBjb25zdCBmZXRjaEltcGwgPSBvcHRpb25zLmZldGNoID8/IGZldGNoO1xuXG4gICAgZmV0Y2hJbXBsKGNsaWVudERyYWZ0VXJsLCByZXF1ZXN0T3B0aW9ucylcbiAgICAgICAgLnRoZW4oeCA9PiB4Lmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGNsaWVudERyYWZ0SW5mbzogQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZ2Z2IH0gPSBjbGllbnREcmFmdEluZm87XG4gICAgICAgICAgICBjb25zdCBlbmdpbmVWZXJzaW9uUGFyYW0gPSBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJlbmdpbmVWZXJzaW9uXCIpO1xuICAgICAgICAgICAgY29uc3QgZW5naW5lVmVyc2lvbiA9IGNsaWVudERyYWZ0SW5mby5lbmdpbmVWZXJzaW9uXG4gICAgICAgICAgICAgICAgPyBlbmdpbmVWZXJzaW9uUGFyYW0gfHwgY2xpZW50RHJhZnRJbmZvLmVuZ2luZVZlcnNpb25cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBleHRlbmRlZFNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgLi4uY2xpZW50RHJhZnRJbmZvLFxuICAgICAgICAgICAgICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgICAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogb3B0aW9ucy5mZWVkYmFja0VuYWJsZWQgPz8gY2xpZW50RHJhZnRJbmZvLmZlZWRiYWNrRW5hYmxlZCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbjogb3B0aW9ucy5hdXRoZW50aWNhdGlvbixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxvYWRGb3JtKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZ2Z2OiBleHRlbmRlZFNldHRpbmdzLmdmdixcbiAgICAgICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5lbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lOiBleHRlbmRlZFNldHRpbmdzLnRoZW1lLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbG9hZEVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRFcnJvciB8fCAhZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBkeW5hbWljIGxvYWRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgZ2Z2ICR7Z2Z2fWApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIgPSBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5leHRlbmRlZFNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlc0FwaTogb3B0aW9ucy50ZW1wbGF0ZXNBcGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybTogcmVuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuY29uc3QgQ2FuZHlDbGllbnRFeHBvcnRzOiBDYW5keUdsb2JhbEluamVjdGVkVmFyID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbnRyeVBvaW50OiB7fSxcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cGFydGlhbFJlbmRlcmluZ0ZvcklFOH1cIiksXG4gICAga2Vmb3Jtc1VybDogXCJ7a2Vmb3Jtc1VybH1cIixcbn07XG5cbmdsb2JhbC5DRiA9IENhbmR5Q2xpZW50RXhwb3J0cztcblxuZXhwb3J0IHsgQ2FuZHlDbGllbnRFeHBvcnRzIH07XG4iXSwic291cmNlUm9vdCI6IiJ9