@kontur.candy/tools 2.154.0 → 2.156.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/distr/Common/AsyncUtils.js +1 -3
- package/distr/Common/CandyApiClient/CandyApiClient.js +25 -138
- package/distr/Common/CandyApiClient/CandyApiClientContext.js +1 -8
- package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +1 -1
- package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +1 -1
- package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +1 -2
- package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +1 -16
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +1 -12
- package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +1 -12
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +1 -13
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +1 -3
- package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +1 -8
- package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +1 -7
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +9 -12
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +1 -1
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +4 -72
- package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
- package/distr/Common/CandyApiClient/IsBuffer.js +1 -2
- package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +1 -1
- package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +1 -1
- package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +12 -7
- package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +1 -3
- package/distr/Common/CandyApiClient/Types/DraftFullId.js +1 -1
- package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js +5 -6
- package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +9 -12
- package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +5 -6
- package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +5 -6
- package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +1 -3
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Guid.js +1 -1
- package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js +1 -1
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +1 -1
- package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js +6 -0
- package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +5 -6
- package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +1 -1
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js +5 -6
- package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js +1 -1
- package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +5 -6
- package/distr/Common/CandyApiClient/Types/TestClassification.js +1 -1
- package/distr/Common/CollectionUtils.js +1 -3
- package/distr/Common/CommonConstants/SectionNames.js +1 -3
- package/distr/Common/Comparers.js +2 -16
- package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +1 -5
- package/distr/Common/EndPoints.js +1 -2
- package/distr/Common/Enums/ButtonSettingsTypeEnum.js +5 -6
- package/distr/Common/Errors.js +1 -19
- package/distr/Common/FormActionHandlers/ContextualActionNames.js +1 -3
- package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +1 -1
- package/distr/Common/Funcs.js +1 -5
- package/distr/Common/GFV.js +1 -1
- package/distr/Common/Hooks/UseLocalStorage.js +3 -10
- package/distr/Common/HttpClient/AuthenticationMode.js +3 -7
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +1 -3
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +1 -3
- package/distr/Common/HttpClient/FetchImplementation/Fetch.js +1 -1
- package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +1 -1
- package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +6 -11
- package/distr/Common/HttpClient/HttpClient.js +9 -80
- package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +1 -1
- package/distr/Common/HttpClient/IHttpClient.js +1 -1
- package/distr/Common/IndentString.js +1 -3
- package/distr/Common/IntRangeUtils.js +3 -10
- package/distr/Common/IterableUtils.js +3 -76
- package/distr/Common/KCLangRuntimeUtils.js +1 -87
- package/distr/Common/ModelPath/BuildIterationSequence.js +1 -5
- package/distr/Common/ModelPath/EachCurrentCollision.js +5 -6
- package/distr/Common/ModelPath/IEquatable.js +1 -1
- package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +1 -8
- package/distr/Common/ModelPath/Map/Map2.js +2 -24
- package/distr/Common/ModelPath/Map/ModelPathMap.js +1 -8
- package/distr/Common/ModelPath/ModelPath.js +16 -140
- package/distr/Common/ModelPath/ModelPathBuilder.js +1 -14
- package/distr/Common/ModelPath/ModelPathHelper.js +1 -2
- package/distr/Common/ModelPath/PathMatcher.js +5 -24
- package/distr/Common/ModelPath/PathSplitHelper.js +1 -6
- package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +1 -10
- package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +1 -10
- package/distr/Common/ModelPath/Set/ModelPathSet.js +1 -10
- package/distr/Common/ModelPath/Set/Set2.js +1 -16
- package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +1 -9
- package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +1 -1
- package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +1 -3
- package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +1 -17
- package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +1 -30
- package/distr/Common/NidusClient/INidusClient.js +1 -3
- package/distr/Common/NidusClient/NidusClientContext.js +1 -14
- package/distr/Common/NidusClient/NidusClientImpl.js +1 -18
- package/distr/Common/PathConstants.js +1 -3
- package/distr/Common/StringArrayKey.js +1 -8
- package/distr/Common/TypingUtils.js +7 -26
- package/distr/Common/UUID.js +1 -4
- package/distr/Common/UseAsyncEffect.js +3 -7
- package/distr/Common/UseShowOnce.js +1 -17
- package/distr/Common/UseTypedSelector.js +1 -3
- package/distr/Common/getRngSchemaFilename.js +21 -0
- package/distr/Common/hashUtils.js +1 -4
- package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +1 -23
- package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +3 -10
- package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +1 -10
- package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +5 -23
- package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +1 -27
- package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +1 -2
- package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +3 -10
- package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +1 -9
- package/distr/Tools/src/BuildTasks/FSTask.js +1 -19
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js +1 -19
- package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +1 -16
- package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +1 -11
- package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +1 -10
- package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +1 -10
- package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +1 -10
- package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +5 -26
- package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +1 -38
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +2 -42
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +4 -39
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +4 -7
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +4 -10
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +9 -17
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +3 -5
- package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +1 -13
- package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +1 -20
- package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +3 -48
- package/distr/Tools/src/BuildTasks/ReadFormSource.js +7 -32
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +5 -32
- package/distr/Tools/src/BuildTasks/Version.js +1 -10
- package/distr/Tools/src/BuildTasks/WriteFormMeta.js +1 -10
- package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +5 -9
- package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +1 -5
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +34 -70
- package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +1 -12
- package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +1 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +1 -67
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +3 -28
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +3 -41
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +3 -23
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +3 -20
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +1 -23
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +1 -37
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +1 -13
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +1 -40
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +8 -49
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +1 -13
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +1 -17
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +1 -4
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +10 -19
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +12 -26
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +1 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +10 -44
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +1 -17
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +1 -27
- package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +11 -16
- package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +1 -1
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +1 -1
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +1 -1
- package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +1 -4
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +23 -34
- package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +1 -4
- package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +1 -15
- package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +3 -19
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}.calc.js +1 -2
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/setKppValue.js +1 -2
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +1 -6
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +1 -11
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/kppValue.js +3 -4
- package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +1 -4
- package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +1 -23
- package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +1 -4
- package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +7 -23
- package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js +26 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js +48 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +1 -37
- package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +1 -4
- package/distr/Tools/src/CandyCLI.js +7 -56
- package/distr/Tools/src/CheckNodeJsVersion.js +3 -10
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +1 -10
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +4 -29
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +1 -6
- package/distr/Tools/src/Commons/ErrorUntyped.js +1 -1
- package/distr/Tools/src/Commons/EventObject.js +10 -20
- package/distr/Tools/src/Commons/ExecUtils.js +3 -9
- package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +1 -7
- package/distr/Tools/src/Commons/FormGlobsUtils.js +1 -33
- package/distr/Tools/src/Commons/FsUtils.js +1 -12
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +1 -8
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +4 -15
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +1 -5
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +1 -5
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +2 -5
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +1 -5
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +1 -14
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +1 -5
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +1 -36
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +1 -9
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +5 -35
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +9 -11
- package/distr/Tools/src/Commons/Locks/Lock.js +1 -8
- package/distr/Tools/src/Commons/Locks/LockHandle.js +1 -5
- package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +1 -9
- package/distr/Tools/src/Commons/Logging/ELKLogger.js +17 -22
- package/distr/Tools/src/Commons/Logging/ILogger.js +1 -5
- package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +3 -21
- package/distr/Tools/src/Commons/Logging/Logger.js +9 -29
- package/distr/Tools/src/Commons/Logging/StaticLogger.js +11 -15
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +1 -1
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +3 -37
- package/distr/Tools/src/Commons/PathPattern.js +1 -13
- package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +1 -4
- package/distr/Tools/src/Commons/TasksCore/BuildTask.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +13 -200
- package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +1 -20
- package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +7 -10
- package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +1 -15
- package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +1 -15
- package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -13
- package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +5 -11
- package/distr/Tools/src/Commons/TimingUtils.js +1 -2
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +13 -51
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +4 -14
- package/distr/Tools/src/GenerateReadMe.js +1 -13
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.LICENSE.txt +10 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.LICENSE.txt +10 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/distr/Tools/src/Options/CandyToolOptions.js +3 -11
- package/distr/Tools/src/ReadFarmConfig.js +1 -5
- package/distr/Tools/src/SelfUpdate.js +4 -28
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1506 -1257
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.LICENSE.txt +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +843 -623
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.LICENSE.txt +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +777 -1117
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +1665 -2015
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +9 -55
- package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +777 -1117
- package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +1665 -2015
- package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +9 -55
- package/package.json +10 -10
- /package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/schemas/{{gfv}.rng.xml → {gfv}.0.rng.xml} +0 -0
|
@@ -1,601 +1,843 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
/*! For license information please see client.min.js.LICENSE.txt */
|
|
3
4
|
!function () {
|
|
4
5
|
"use strict";
|
|
5
6
|
|
|
6
|
-
var
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return t in e ? Object.defineProperty(e, t, {
|
|
7
|
+
var t = {};
|
|
8
|
+
function e(t, e, r) {
|
|
9
|
+
return e in t ? Object.defineProperty(t, e, {
|
|
10
10
|
value: r,
|
|
11
11
|
enumerable: !0,
|
|
12
12
|
configurable: !0,
|
|
13
13
|
writable: !0
|
|
14
|
-
}) : e
|
|
14
|
+
}) : t[e] = r, t;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
(
|
|
19
|
-
|
|
20
|
-
for (var r = 0, n = new Array(t); r < t; r++) n[r] = e[r];
|
|
21
|
-
|
|
16
|
+
function r(t, e) {
|
|
17
|
+
(null == e || e > t.length) && (e = t.length);
|
|
18
|
+
for (var r = 0, n = new Array(e); r < e; r++) n[r] = t[r];
|
|
22
19
|
return n;
|
|
23
20
|
}
|
|
24
|
-
|
|
25
|
-
e.g = function () {
|
|
21
|
+
t.g = function () {
|
|
26
22
|
if ("object" == typeof globalThis) return globalThis;
|
|
27
|
-
|
|
28
23
|
try {
|
|
29
24
|
return this || new Function("return this")();
|
|
30
|
-
} catch (
|
|
25
|
+
} catch (t) {
|
|
31
26
|
if ("object" == typeof window) return window;
|
|
32
27
|
}
|
|
33
28
|
}();
|
|
34
|
-
|
|
35
29
|
var n = "undefined" != typeof globalThis && globalThis || "undefined" != typeof self && self || void 0 !== n && n,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if ("string" != typeof e && (e = String(e)), /[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e) || "" === e) throw new TypeError('Invalid character in header field name: "' + e + '"');
|
|
55
|
-
return e.toLowerCase();
|
|
30
|
+
o = ("URLSearchParams" in n),
|
|
31
|
+
i = "Symbol" in n && "iterator" in Symbol,
|
|
32
|
+
a = "FileReader" in n && "Blob" in n && function () {
|
|
33
|
+
try {
|
|
34
|
+
return new Blob(), !0;
|
|
35
|
+
} catch (t) {
|
|
36
|
+
return !1;
|
|
37
|
+
}
|
|
38
|
+
}(),
|
|
39
|
+
u = ("FormData" in n),
|
|
40
|
+
s = ("ArrayBuffer" in n);
|
|
41
|
+
if (s) var c = ["[object Int8Array]", "[object Uint8Array]", "[object Uint8ClampedArray]", "[object Int16Array]", "[object Uint16Array]", "[object Int32Array]", "[object Uint32Array]", "[object Float32Array]", "[object Float64Array]"],
|
|
42
|
+
l = ArrayBuffer.isView || function (t) {
|
|
43
|
+
return t && c.indexOf(Object.prototype.toString.call(t)) > -1;
|
|
44
|
+
};
|
|
45
|
+
function f(t) {
|
|
46
|
+
if ("string" != typeof t && (t = String(t)), /[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(t) || "" === t) throw new TypeError('Invalid character in header field name: "' + t + '"');
|
|
47
|
+
return t.toLowerCase();
|
|
56
48
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return "string" != typeof e && (e = String(e)), e;
|
|
49
|
+
function h(t) {
|
|
50
|
+
return "string" != typeof t && (t = String(t)), t;
|
|
60
51
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
var t = {
|
|
52
|
+
function d(t) {
|
|
53
|
+
var e = {
|
|
64
54
|
next: function () {
|
|
65
|
-
var
|
|
55
|
+
var e = t.shift();
|
|
66
56
|
return {
|
|
67
|
-
done: void 0 ===
|
|
68
|
-
value:
|
|
57
|
+
done: void 0 === e,
|
|
58
|
+
value: e
|
|
69
59
|
};
|
|
70
60
|
}
|
|
71
61
|
};
|
|
72
|
-
return i && (
|
|
73
|
-
return
|
|
74
|
-
}),
|
|
62
|
+
return i && (e[Symbol.iterator] = function () {
|
|
63
|
+
return e;
|
|
64
|
+
}), e;
|
|
75
65
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
this.append(t, e[t]);
|
|
66
|
+
function p(t) {
|
|
67
|
+
this.map = {}, t instanceof p ? t.forEach(function (t, e) {
|
|
68
|
+
this.append(e, t);
|
|
69
|
+
}, this) : Array.isArray(t) ? t.forEach(function (t) {
|
|
70
|
+
this.append(t[0], t[1]);
|
|
71
|
+
}, this) : t && Object.getOwnPropertyNames(t).forEach(function (e) {
|
|
72
|
+
this.append(e, t[e]);
|
|
84
73
|
}, this);
|
|
85
74
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
e.bodyUsed = !0;
|
|
75
|
+
function y(t) {
|
|
76
|
+
if (t.bodyUsed) return Promise.reject(new TypeError("Already read"));
|
|
77
|
+
t.bodyUsed = !0;
|
|
90
78
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
r(e.error);
|
|
79
|
+
function v(t) {
|
|
80
|
+
return new Promise(function (e, r) {
|
|
81
|
+
t.onload = function () {
|
|
82
|
+
e(t.result);
|
|
83
|
+
}, t.onerror = function () {
|
|
84
|
+
r(t.error);
|
|
98
85
|
};
|
|
99
86
|
});
|
|
100
87
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
return t.readAsArrayBuffer(e), r;
|
|
88
|
+
function m(t) {
|
|
89
|
+
var e = new FileReader(),
|
|
90
|
+
r = v(e);
|
|
91
|
+
return e.readAsArrayBuffer(t), r;
|
|
106
92
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
return t.set(new Uint8Array(e)), t.buffer;
|
|
93
|
+
function b(t) {
|
|
94
|
+
if (t.slice) return t.slice(0);
|
|
95
|
+
var e = new Uint8Array(t.byteLength);
|
|
96
|
+
return e.set(new Uint8Array(t)), e.buffer;
|
|
112
97
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
this.bodyUsed = this.bodyUsed, this._bodyInit = e, e ? "string" == typeof e ? this._bodyText = e : a && Blob.prototype.isPrototypeOf(e) ? this._bodyBlob = e : s && FormData.prototype.isPrototypeOf(e) ? this._bodyFormData = e : o && URLSearchParams.prototype.isPrototypeOf(e) ? this._bodyText = e.toString() : u && a && (t = e) && DataView.prototype.isPrototypeOf(t) ? (this._bodyArrayBuffer = b(e.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : u && (ArrayBuffer.prototype.isPrototypeOf(e) || l(e)) ? this._bodyArrayBuffer = b(e) : this._bodyText = e = Object.prototype.toString.call(e) : this._bodyText = "", this.headers.get("content-type") || ("string" == typeof e ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : o && URLSearchParams.prototype.isPrototypeOf(e) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
|
|
98
|
+
function g() {
|
|
99
|
+
return this.bodyUsed = !1, this._initBody = function (t) {
|
|
100
|
+
var e;
|
|
101
|
+
this.bodyUsed = this.bodyUsed, this._bodyInit = t, t ? "string" == typeof t ? this._bodyText = t : a && Blob.prototype.isPrototypeOf(t) ? this._bodyBlob = t : u && FormData.prototype.isPrototypeOf(t) ? this._bodyFormData = t : o && URLSearchParams.prototype.isPrototypeOf(t) ? this._bodyText = t.toString() : s && a && (e = t) && DataView.prototype.isPrototypeOf(e) ? (this._bodyArrayBuffer = b(t.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : s && (ArrayBuffer.prototype.isPrototypeOf(t) || l(t)) ? this._bodyArrayBuffer = b(t) : this._bodyText = t = Object.prototype.toString.call(t) : this._bodyText = "", this.headers.get("content-type") || ("string" == typeof t ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : o && URLSearchParams.prototype.isPrototypeOf(t) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
|
|
118
102
|
}, a && (this.blob = function () {
|
|
119
|
-
var
|
|
120
|
-
if (
|
|
103
|
+
var t = y(this);
|
|
104
|
+
if (t) return t;
|
|
121
105
|
if (this._bodyBlob) return Promise.resolve(this._bodyBlob);
|
|
122
106
|
if (this._bodyArrayBuffer) return Promise.resolve(new Blob([this._bodyArrayBuffer]));
|
|
123
107
|
if (this._bodyFormData) throw new Error("could not read FormData body as blob");
|
|
124
108
|
return Promise.resolve(new Blob([this._bodyText]));
|
|
125
109
|
}, this.arrayBuffer = function () {
|
|
126
|
-
return this._bodyArrayBuffer ? y(this) || (ArrayBuffer.isView(this._bodyArrayBuffer) ? Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset, this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength)) : Promise.resolve(this._bodyArrayBuffer)) : this.blob().then(
|
|
110
|
+
return this._bodyArrayBuffer ? y(this) || (ArrayBuffer.isView(this._bodyArrayBuffer) ? Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset, this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength)) : Promise.resolve(this._bodyArrayBuffer)) : this.blob().then(m);
|
|
127
111
|
}), this.text = function () {
|
|
128
|
-
var
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
112
|
+
var t,
|
|
113
|
+
e,
|
|
114
|
+
r,
|
|
115
|
+
n = y(this);
|
|
132
116
|
if (n) return n;
|
|
133
|
-
if (this._bodyBlob) return
|
|
134
|
-
if (this._bodyArrayBuffer) return Promise.resolve(function (
|
|
135
|
-
for (var
|
|
136
|
-
|
|
117
|
+
if (this._bodyBlob) return t = this._bodyBlob, r = v(e = new FileReader()), e.readAsText(t), r;
|
|
118
|
+
if (this._bodyArrayBuffer) return Promise.resolve(function (t) {
|
|
119
|
+
for (var e = new Uint8Array(t), r = new Array(e.length), n = 0; n < e.length; n++) r[n] = String.fromCharCode(e[n]);
|
|
137
120
|
return r.join("");
|
|
138
121
|
}(this._bodyArrayBuffer));
|
|
139
122
|
if (this._bodyFormData) throw new Error("could not read FormData body as text");
|
|
140
123
|
return Promise.resolve(this._bodyText);
|
|
141
|
-
},
|
|
124
|
+
}, u && (this.formData = function () {
|
|
142
125
|
return this.text().then(O);
|
|
143
126
|
}), this.json = function () {
|
|
144
127
|
return this.text().then(JSON.parse);
|
|
145
128
|
}, this;
|
|
146
129
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
for (var r in this.map) this.map.hasOwnProperty(r) && e.call(t, this.map[r], r, this);
|
|
130
|
+
p.prototype.append = function (t, e) {
|
|
131
|
+
t = f(t), e = h(e);
|
|
132
|
+
var r = this.map[t];
|
|
133
|
+
this.map[t] = r ? r + ", " + e : e;
|
|
134
|
+
}, p.prototype.delete = function (t) {
|
|
135
|
+
delete this.map[f(t)];
|
|
136
|
+
}, p.prototype.get = function (t) {
|
|
137
|
+
return t = f(t), this.has(t) ? this.map[t] : null;
|
|
138
|
+
}, p.prototype.has = function (t) {
|
|
139
|
+
return this.map.hasOwnProperty(f(t));
|
|
140
|
+
}, p.prototype.set = function (t, e) {
|
|
141
|
+
this.map[f(t)] = h(e);
|
|
142
|
+
}, p.prototype.forEach = function (t, e) {
|
|
143
|
+
for (var r in this.map) this.map.hasOwnProperty(r) && t.call(e, this.map[r], r, this);
|
|
162
144
|
}, p.prototype.keys = function () {
|
|
163
|
-
var
|
|
164
|
-
return this.forEach(function (
|
|
165
|
-
|
|
166
|
-
}), d(
|
|
145
|
+
var t = [];
|
|
146
|
+
return this.forEach(function (e, r) {
|
|
147
|
+
t.push(r);
|
|
148
|
+
}), d(t);
|
|
167
149
|
}, p.prototype.values = function () {
|
|
168
|
-
var
|
|
169
|
-
return this.forEach(function (
|
|
170
|
-
|
|
171
|
-
}), d(
|
|
150
|
+
var t = [];
|
|
151
|
+
return this.forEach(function (e) {
|
|
152
|
+
t.push(e);
|
|
153
|
+
}), d(t);
|
|
172
154
|
}, p.prototype.entries = function () {
|
|
173
|
-
var
|
|
174
|
-
return this.forEach(function (
|
|
175
|
-
|
|
176
|
-
}), d(
|
|
155
|
+
var t = [];
|
|
156
|
+
return this.forEach(function (e, r) {
|
|
157
|
+
t.push([r, e]);
|
|
158
|
+
}), d(t);
|
|
177
159
|
}, i && (p.prototype[Symbol.iterator] = p.prototype.entries);
|
|
178
|
-
var
|
|
179
|
-
|
|
180
|
-
function E(e, t) {
|
|
160
|
+
var w = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
|
|
161
|
+
function E(t, e) {
|
|
181
162
|
if (!(this instanceof E)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
|
|
182
163
|
var r,
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
if (this.credentials = t.credentials || this.credentials || "same-origin", !t.headers && this.headers || (this.headers = new p(t.headers)), this.method = (n = (r = t.method || this.method || "GET").toUpperCase(), g.indexOf(n) > -1 ? n : r), this.mode = t.mode || this.mode || null, this.signal = t.signal || this.signal, this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && o) throw new TypeError("Body not allowed for GET or HEAD requests");
|
|
192
|
-
|
|
193
|
-
if (this._initBody(o), !("GET" !== this.method && "HEAD" !== this.method || "no-store" !== t.cache && "no-cache" !== t.cache)) {
|
|
164
|
+
n,
|
|
165
|
+
o = (e = e || {}).body;
|
|
166
|
+
if (t instanceof E) {
|
|
167
|
+
if (t.bodyUsed) throw new TypeError("Already read");
|
|
168
|
+
this.url = t.url, this.credentials = t.credentials, e.headers || (this.headers = new p(t.headers)), this.method = t.method, this.mode = t.mode, this.signal = t.signal, o || null == t._bodyInit || (o = t._bodyInit, t.bodyUsed = !0);
|
|
169
|
+
} else this.url = String(t);
|
|
170
|
+
if (this.credentials = e.credentials || this.credentials || "same-origin", !e.headers && this.headers || (this.headers = new p(e.headers)), this.method = (n = (r = e.method || this.method || "GET").toUpperCase(), w.indexOf(n) > -1 ? n : r), this.mode = e.mode || this.mode || null, this.signal = e.signal || this.signal, this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && o) throw new TypeError("Body not allowed for GET or HEAD requests");
|
|
171
|
+
if (this._initBody(o), !("GET" !== this.method && "HEAD" !== this.method || "no-store" !== e.cache && "no-cache" !== e.cache)) {
|
|
194
172
|
var i = /([?&])_=[^&]*/;
|
|
195
173
|
i.test(this.url) ? this.url = this.url.replace(i, "$1_=" + new Date().getTime()) : this.url += (/\?/.test(this.url) ? "&" : "?") + "_=" + new Date().getTime();
|
|
196
174
|
}
|
|
197
175
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
t.append(decodeURIComponent(n), decodeURIComponent(o));
|
|
176
|
+
function O(t) {
|
|
177
|
+
var e = new FormData();
|
|
178
|
+
return t.trim().split("&").forEach(function (t) {
|
|
179
|
+
if (t) {
|
|
180
|
+
var r = t.split("="),
|
|
181
|
+
n = r.shift().replace(/\+/g, " "),
|
|
182
|
+
o = r.join("=").replace(/\+/g, " ");
|
|
183
|
+
e.append(decodeURIComponent(n), decodeURIComponent(o));
|
|
207
184
|
}
|
|
208
|
-
}),
|
|
185
|
+
}), e;
|
|
209
186
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
t || (t = {}), this.type = "default", this.status = void 0 === t.status ? 200 : t.status, this.ok = this.status >= 200 && this.status < 300, this.statusText = void 0 === t.statusText ? "" : "" + t.statusText, this.headers = new p(t.headers), this.url = t.url || "", this._initBody(e);
|
|
187
|
+
function k(t, e) {
|
|
188
|
+
if (!(this instanceof k)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
|
|
189
|
+
e || (e = {}), this.type = "default", this.status = void 0 === e.status ? 200 : e.status, this.ok = this.status >= 200 && this.status < 300, this.statusText = void 0 === e.statusText ? "" : "" + e.statusText, this.headers = new p(e.headers), this.url = e.url || "", this._initBody(t);
|
|
214
190
|
}
|
|
215
|
-
|
|
216
191
|
E.prototype.clone = function () {
|
|
217
192
|
return new E(this, {
|
|
218
193
|
body: this._bodyInit
|
|
219
194
|
});
|
|
220
|
-
},
|
|
221
|
-
return new
|
|
195
|
+
}, g.call(E.prototype), g.call(k.prototype), k.prototype.clone = function () {
|
|
196
|
+
return new k(this._bodyInit, {
|
|
222
197
|
status: this.status,
|
|
223
198
|
statusText: this.statusText,
|
|
224
199
|
headers: new p(this.headers),
|
|
225
200
|
url: this.url
|
|
226
201
|
});
|
|
227
|
-
},
|
|
228
|
-
var
|
|
202
|
+
}, k.error = function () {
|
|
203
|
+
var t = new k(null, {
|
|
229
204
|
status: 0,
|
|
230
205
|
statusText: ""
|
|
231
206
|
});
|
|
232
|
-
return
|
|
207
|
+
return t.type = "error", t;
|
|
233
208
|
};
|
|
234
|
-
var
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
status: t,
|
|
209
|
+
var j = [301, 302, 303, 307, 308];
|
|
210
|
+
k.redirect = function (t, e) {
|
|
211
|
+
if (-1 === j.indexOf(e)) throw new RangeError("Invalid status code");
|
|
212
|
+
return new k(null, {
|
|
213
|
+
status: e,
|
|
240
214
|
headers: {
|
|
241
|
-
location:
|
|
215
|
+
location: t
|
|
242
216
|
}
|
|
243
217
|
});
|
|
244
218
|
};
|
|
245
|
-
|
|
246
|
-
var j = n.DOMException;
|
|
247
|
-
|
|
219
|
+
var A = n.DOMException;
|
|
248
220
|
try {
|
|
249
|
-
new
|
|
250
|
-
} catch (
|
|
251
|
-
(
|
|
252
|
-
this.message =
|
|
253
|
-
var r = Error(
|
|
221
|
+
new A();
|
|
222
|
+
} catch (t) {
|
|
223
|
+
(A = function (t, e) {
|
|
224
|
+
this.message = t, this.name = e;
|
|
225
|
+
var r = Error(t);
|
|
254
226
|
this.stack = r.stack;
|
|
255
|
-
}).prototype = Object.create(Error.prototype),
|
|
227
|
+
}).prototype = Object.create(Error.prototype), A.prototype.constructor = A;
|
|
256
228
|
}
|
|
257
|
-
|
|
258
|
-
function P(e, t) {
|
|
229
|
+
function _(t, e) {
|
|
259
230
|
return new Promise(function (r, o) {
|
|
260
|
-
var i = new E(
|
|
261
|
-
if (i.signal && i.signal.aborted) return o(new
|
|
262
|
-
var
|
|
263
|
-
|
|
231
|
+
var i = new E(t, e);
|
|
232
|
+
if (i.signal && i.signal.aborted) return o(new A("Aborted", "AbortError"));
|
|
233
|
+
var u = new XMLHttpRequest();
|
|
264
234
|
function c() {
|
|
265
|
-
|
|
235
|
+
u.abort();
|
|
266
236
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
var r = e.split(":"),
|
|
237
|
+
u.onload = function () {
|
|
238
|
+
var t,
|
|
239
|
+
e,
|
|
240
|
+
n = {
|
|
241
|
+
status: u.status,
|
|
242
|
+
statusText: u.statusText,
|
|
243
|
+
headers: (t = u.getAllResponseHeaders() || "", e = new p(), t.replace(/\r?\n[\t ]+/g, " ").split("\r").map(function (t) {
|
|
244
|
+
return 0 === t.indexOf("\n") ? t.substr(1, t.length) : t;
|
|
245
|
+
}).forEach(function (t) {
|
|
246
|
+
var r = t.split(":"),
|
|
278
247
|
n = r.shift().trim();
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
var o = "response" in s ? s.response : s.responseText;
|
|
248
|
+
if (n) {
|
|
249
|
+
var o = r.join(":").trim();
|
|
250
|
+
e.append(n, o);
|
|
251
|
+
}
|
|
252
|
+
}), e)
|
|
253
|
+
};
|
|
254
|
+
n.url = "responseURL" in u ? u.responseURL : n.headers.get("X-Request-URL");
|
|
255
|
+
var o = "response" in u ? u.response : u.responseText;
|
|
288
256
|
setTimeout(function () {
|
|
289
|
-
r(new
|
|
257
|
+
r(new k(o, n));
|
|
290
258
|
}, 0);
|
|
291
|
-
},
|
|
259
|
+
}, u.onerror = function () {
|
|
292
260
|
setTimeout(function () {
|
|
293
261
|
o(new TypeError("Network request failed"));
|
|
294
262
|
}, 0);
|
|
295
|
-
},
|
|
263
|
+
}, u.ontimeout = function () {
|
|
296
264
|
setTimeout(function () {
|
|
297
265
|
o(new TypeError("Network request failed"));
|
|
298
266
|
}, 0);
|
|
299
|
-
},
|
|
267
|
+
}, u.onabort = function () {
|
|
300
268
|
setTimeout(function () {
|
|
301
|
-
o(new
|
|
269
|
+
o(new A("Aborted", "AbortError"));
|
|
302
270
|
}, 0);
|
|
303
|
-
},
|
|
271
|
+
}, u.open(i.method, function (t) {
|
|
304
272
|
try {
|
|
305
|
-
return "" ===
|
|
306
|
-
} catch (
|
|
307
|
-
return
|
|
273
|
+
return "" === t && n.location.href ? n.location.href : t;
|
|
274
|
+
} catch (e) {
|
|
275
|
+
return t;
|
|
308
276
|
}
|
|
309
|
-
}(i.url), !0), "include" === i.credentials ?
|
|
310
|
-
|
|
311
|
-
}) : Object.getOwnPropertyNames(
|
|
312
|
-
|
|
313
|
-
}), i.signal && (i.signal.addEventListener("abort", c),
|
|
314
|
-
4 ===
|
|
315
|
-
}),
|
|
277
|
+
}(i.url), !0), "include" === i.credentials ? u.withCredentials = !0 : "omit" === i.credentials && (u.withCredentials = !1), "responseType" in u && (a ? u.responseType = "blob" : s && i.headers.get("Content-Type") && -1 !== i.headers.get("Content-Type").indexOf("application/octet-stream") && (u.responseType = "arraybuffer")), !e || "object" != typeof e.headers || e.headers instanceof p ? i.headers.forEach(function (t, e) {
|
|
278
|
+
u.setRequestHeader(e, t);
|
|
279
|
+
}) : Object.getOwnPropertyNames(e.headers).forEach(function (t) {
|
|
280
|
+
u.setRequestHeader(t, h(e.headers[t]));
|
|
281
|
+
}), i.signal && (i.signal.addEventListener("abort", c), u.onreadystatechange = function () {
|
|
282
|
+
4 === u.readyState && i.signal.removeEventListener("abort", c);
|
|
283
|
+
}), u.send(void 0 === i._bodyInit ? null : i._bodyInit);
|
|
316
284
|
});
|
|
317
285
|
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
|
|
286
|
+
function P(t, e) {
|
|
287
|
+
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function");
|
|
321
288
|
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);
|
|
289
|
+
function T(t, e) {
|
|
290
|
+
for (var r = 0; r < e.length; r++) {
|
|
291
|
+
var n = e[r];
|
|
292
|
+
n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);
|
|
327
293
|
}
|
|
328
294
|
}
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
return t && S(e.prototype, t), r && S(e, r), Object.defineProperty(e, "prototype", {
|
|
295
|
+
function S(t, e, r) {
|
|
296
|
+
return e && T(t.prototype, e), r && T(t, r), Object.defineProperty(t, "prototype", {
|
|
332
297
|
writable: !1
|
|
333
|
-
}),
|
|
298
|
+
}), t;
|
|
334
299
|
}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
function e() {
|
|
340
|
-
T(this, e);
|
|
300
|
+
_.polyfill = !0, n.fetch || (n.fetch = _, n.Headers = p, n.Request = E, n.Response = k);
|
|
301
|
+
var x = function () {
|
|
302
|
+
function t() {
|
|
303
|
+
P(this, t);
|
|
341
304
|
}
|
|
342
|
-
|
|
343
|
-
return _(e, null, [{
|
|
305
|
+
return S(t, null, [{
|
|
344
306
|
key: "script",
|
|
345
|
-
value: function (
|
|
307
|
+
value: function (t, e) {
|
|
346
308
|
var r = !1,
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
309
|
+
n = document.getElementsByTagName("head")[0] || document.documentElement,
|
|
310
|
+
o = document.createElement("script");
|
|
350
311
|
function i() {
|
|
351
|
-
r || o.readyState && "loaded" !== o.readyState && "complete" !== o.readyState || (r = !0,
|
|
312
|
+
r || o.readyState && "loaded" !== o.readyState && "complete" !== o.readyState || (r = !0, e());
|
|
352
313
|
}
|
|
353
|
-
|
|
354
314
|
o.onload = i, o.onreadystatechange = i, o.onerror = function () {
|
|
355
|
-
o.parentNode && o.parentNode.removeChild(o),
|
|
356
|
-
}, o.src =
|
|
315
|
+
o.parentNode && o.parentNode.removeChild(o), e(new Error("Error while loading script."));
|
|
316
|
+
}, o.src = t, o.setAttribute("crossorigin", "use-credentials"), n.appendChild(o);
|
|
357
317
|
}
|
|
358
318
|
}, {
|
|
359
319
|
key: "styleSheet",
|
|
360
|
-
value: function (
|
|
320
|
+
value: function (t, e, r) {
|
|
361
321
|
var n,
|
|
362
|
-
|
|
363
|
-
|
|
322
|
+
o = null !== (n = document.getElementsByTagName("head")[0]) && void 0 !== n ? n : document.documentElement,
|
|
323
|
+
i = document.createElement("link");
|
|
364
324
|
i.setAttribute("rel", "stylesheet"), i.setAttribute("type", "text/css"), i.addEventListener("load", function () {
|
|
365
325
|
return r(void 0);
|
|
366
326
|
}), i.addEventListener("error", function () {
|
|
367
|
-
r(
|
|
368
|
-
}), o.appendChild(i), i.setAttribute("href",
|
|
327
|
+
r(e ? void 0 : new Error("Error while loading stylesheet."));
|
|
328
|
+
}), o.appendChild(i), i.setAttribute("href", t);
|
|
369
329
|
}
|
|
370
|
-
}]),
|
|
330
|
+
}]), t;
|
|
371
331
|
}();
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
return "v1/ns/".concat(e.ns, "/drafts/").concat(e.draftId, "/client-draft-info");
|
|
332
|
+
function B(t) {
|
|
333
|
+
return "v1/ns/".concat(t.ns, "/drafts/").concat(t.draftId, "/client-draft-info");
|
|
375
334
|
}
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
return "string" == typeof e ? "false" !== e && "true" === e : Boolean(e);
|
|
335
|
+
function C(t) {
|
|
336
|
+
return "string" == typeof t ? "false" !== t && "true" === t : Boolean(t);
|
|
379
337
|
}
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
authorized: R("{authorized}"),
|
|
338
|
+
var I = {
|
|
339
|
+
authorized: C("{authorized}"),
|
|
383
340
|
cauldronApiUrl: "{cauldronApiUrl}",
|
|
384
|
-
isTestServer:
|
|
385
|
-
renderCachingForIE8:
|
|
386
|
-
normalizationOnServer:
|
|
341
|
+
isTestServer: C("{isTestServer}"),
|
|
342
|
+
renderCachingForIE8: C("{renderCachingForIE8}"),
|
|
343
|
+
normalizationOnServer: C("{normalizationOnServer}"),
|
|
387
344
|
normativeUrl: "{normativeUrl}",
|
|
388
345
|
resourcesVersion: "{resourcesVersion}",
|
|
389
346
|
konturDomains: "{konturDomains}"
|
|
390
347
|
};
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
}, D(e);
|
|
348
|
+
function L(t) {
|
|
349
|
+
return L = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) {
|
|
350
|
+
return typeof t;
|
|
351
|
+
} : function (t) {
|
|
352
|
+
return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t;
|
|
353
|
+
}, L(t);
|
|
398
354
|
}
|
|
399
|
-
|
|
400
|
-
function I(e, t, r, n, o, i, a) {
|
|
355
|
+
function F(t, e, r, n, o, i, a) {
|
|
401
356
|
try {
|
|
402
|
-
var
|
|
403
|
-
|
|
404
|
-
} catch (
|
|
405
|
-
return void r(
|
|
357
|
+
var u = t[i](a),
|
|
358
|
+
s = u.value;
|
|
359
|
+
} catch (t) {
|
|
360
|
+
return void r(t);
|
|
406
361
|
}
|
|
407
|
-
|
|
408
|
-
s.done ? t(u) : Promise.resolve(u).then(n, o);
|
|
362
|
+
u.done ? e(s) : Promise.resolve(s).then(n, o);
|
|
409
363
|
}
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
364
|
+
function U(t) {
|
|
365
|
+
return function () {
|
|
366
|
+
var e = this,
|
|
367
|
+
r = arguments;
|
|
368
|
+
return new Promise(function (n, o) {
|
|
369
|
+
var i = t.apply(e, r);
|
|
370
|
+
function a(t) {
|
|
371
|
+
F(i, n, o, a, u, "next", t);
|
|
372
|
+
}
|
|
373
|
+
function u(t) {
|
|
374
|
+
F(i, n, o, a, u, "throw", t);
|
|
375
|
+
}
|
|
376
|
+
a(void 0);
|
|
377
|
+
});
|
|
378
|
+
};
|
|
415
379
|
}
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
380
|
+
function D(t, e) {
|
|
381
|
+
return D = Object.setPrototypeOf || function (t, e) {
|
|
382
|
+
return t.__proto__ = e, t;
|
|
383
|
+
}, D(t, e);
|
|
384
|
+
}
|
|
385
|
+
function R(t, e) {
|
|
386
|
+
if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
|
|
387
|
+
t.prototype = Object.create(e && e.prototype, {
|
|
420
388
|
constructor: {
|
|
421
|
-
value:
|
|
389
|
+
value: t,
|
|
422
390
|
writable: !0,
|
|
423
391
|
configurable: !0
|
|
424
392
|
}
|
|
425
|
-
}), Object.defineProperty(
|
|
393
|
+
}), Object.defineProperty(t, "prototype", {
|
|
426
394
|
writable: !1
|
|
427
|
-
}),
|
|
395
|
+
}), e && D(t, e);
|
|
428
396
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
if (
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
}(e);
|
|
397
|
+
function M(t, e) {
|
|
398
|
+
if (e && ("object" === L(e) || "function" == typeof e)) return e;
|
|
399
|
+
if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
|
|
400
|
+
return function (t) {
|
|
401
|
+
if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
402
|
+
return t;
|
|
403
|
+
}(t);
|
|
437
404
|
}
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
}, L(e);
|
|
405
|
+
function N(t) {
|
|
406
|
+
return N = Object.setPrototypeOf ? Object.getPrototypeOf : function (t) {
|
|
407
|
+
return t.__proto__ || Object.getPrototypeOf(t);
|
|
408
|
+
}, N(t);
|
|
443
409
|
}
|
|
444
|
-
|
|
445
410
|
function V() {
|
|
446
411
|
if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
|
|
447
412
|
if (Reflect.construct.sham) return !1;
|
|
448
413
|
if ("function" == typeof Proxy) return !0;
|
|
449
|
-
|
|
450
414
|
try {
|
|
451
415
|
return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;
|
|
452
|
-
} catch (
|
|
416
|
+
} catch (t) {
|
|
453
417
|
return !1;
|
|
454
418
|
}
|
|
455
419
|
}
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
return z = V() ? Reflect.construct : function (e, t, r) {
|
|
420
|
+
function G(t, e, r) {
|
|
421
|
+
return G = V() ? Reflect.construct : function (t, e, r) {
|
|
459
422
|
var n = [null];
|
|
460
|
-
n.push.apply(n,
|
|
461
|
-
var o = new (Function.bind.apply(
|
|
462
|
-
return r &&
|
|
463
|
-
},
|
|
423
|
+
n.push.apply(n, e);
|
|
424
|
+
var o = new (Function.bind.apply(t, n))();
|
|
425
|
+
return r && D(o, r.prototype), o;
|
|
426
|
+
}, G.apply(null, arguments);
|
|
464
427
|
}
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
if (null === e || (r = e, -1 === Function.toString.call(r).indexOf("[native code]"))) return e;
|
|
428
|
+
function z(t) {
|
|
429
|
+
var e = "function" == typeof Map ? new Map() : void 0;
|
|
430
|
+
return z = function (t) {
|
|
431
|
+
if (null === t || (r = t, -1 === Function.toString.call(r).indexOf("[native code]"))) return t;
|
|
470
432
|
var r;
|
|
471
|
-
if ("function" != typeof
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
t.set(e, n);
|
|
433
|
+
if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
|
|
434
|
+
if (void 0 !== e) {
|
|
435
|
+
if (e.has(t)) return e.get(t);
|
|
436
|
+
e.set(t, n);
|
|
476
437
|
}
|
|
477
|
-
|
|
478
438
|
function n() {
|
|
479
|
-
return
|
|
439
|
+
return G(t, arguments, N(this).constructor);
|
|
480
440
|
}
|
|
481
|
-
|
|
482
|
-
return n.prototype = Object.create(e.prototype, {
|
|
441
|
+
return n.prototype = Object.create(t.prototype, {
|
|
483
442
|
constructor: {
|
|
484
443
|
value: n,
|
|
485
444
|
enumerable: !1,
|
|
486
445
|
writable: !0,
|
|
487
446
|
configurable: !0
|
|
488
447
|
}
|
|
489
|
-
}),
|
|
490
|
-
},
|
|
448
|
+
}), D(n, t);
|
|
449
|
+
}, z(t);
|
|
491
450
|
}
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
var t = function () {
|
|
451
|
+
function q(t) {
|
|
452
|
+
var e = function () {
|
|
495
453
|
if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
|
|
496
454
|
if (Reflect.construct.sham) return !1;
|
|
497
455
|
if ("function" == typeof Proxy) return !0;
|
|
498
|
-
|
|
499
456
|
try {
|
|
500
457
|
return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;
|
|
501
|
-
} catch (
|
|
458
|
+
} catch (t) {
|
|
502
459
|
return !1;
|
|
503
460
|
}
|
|
504
461
|
}();
|
|
505
|
-
|
|
506
462
|
return function () {
|
|
507
463
|
var r,
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
var o = L(this).constructor;
|
|
464
|
+
n = N(t);
|
|
465
|
+
if (e) {
|
|
466
|
+
var o = N(this).constructor;
|
|
512
467
|
r = Reflect.construct(n, arguments, o);
|
|
513
468
|
} else r = n.apply(this, arguments);
|
|
514
|
-
|
|
515
469
|
return M(this, r);
|
|
516
470
|
};
|
|
517
471
|
}
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
var t = q(r);
|
|
522
|
-
|
|
472
|
+
var H = function (t) {
|
|
473
|
+
R(r, t);
|
|
474
|
+
var e = q(r);
|
|
523
475
|
function r() {
|
|
524
|
-
return
|
|
476
|
+
return P(this, r), e.call(this, "Operation not implemented");
|
|
525
477
|
}
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
function r(e) {
|
|
478
|
+
return S(r);
|
|
479
|
+
}(function (t) {
|
|
480
|
+
R(r, t);
|
|
481
|
+
var e = q(r);
|
|
482
|
+
function r(t) {
|
|
533
483
|
var n;
|
|
534
|
-
return
|
|
484
|
+
return P(this, r), (n = e.call(this, t)).name = n.constructor.name, n;
|
|
535
485
|
}
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
486
|
+
return S(r);
|
|
487
|
+
}(z(Error)));
|
|
488
|
+
function Z() {
|
|
489
|
+
Z = function () {
|
|
490
|
+
return t;
|
|
491
|
+
};
|
|
492
|
+
var t = {},
|
|
493
|
+
e = Object.prototype,
|
|
494
|
+
r = e.hasOwnProperty,
|
|
495
|
+
n = Object.defineProperty || function (t, e, r) {
|
|
496
|
+
t[e] = r.value;
|
|
497
|
+
},
|
|
498
|
+
o = "function" == typeof Symbol ? Symbol : {},
|
|
499
|
+
i = o.iterator || "@@iterator",
|
|
500
|
+
a = o.asyncIterator || "@@asyncIterator",
|
|
501
|
+
u = o.toStringTag || "@@toStringTag";
|
|
502
|
+
function s(t, e, r) {
|
|
503
|
+
return Object.defineProperty(t, e, {
|
|
504
|
+
value: r,
|
|
505
|
+
enumerable: !0,
|
|
506
|
+
configurable: !0,
|
|
507
|
+
writable: !0
|
|
508
|
+
}), t[e];
|
|
509
|
+
}
|
|
510
|
+
try {
|
|
511
|
+
s({}, "");
|
|
512
|
+
} catch (t) {
|
|
513
|
+
s = function (t, e, r) {
|
|
514
|
+
return t[e] = r;
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
function c(t, e, r, o) {
|
|
518
|
+
var i = e && e.prototype instanceof h ? e : h,
|
|
519
|
+
a = Object.create(i.prototype),
|
|
520
|
+
u = new A(o || []);
|
|
521
|
+
return n(a, "_invoke", {
|
|
522
|
+
value: E(t, r, u)
|
|
523
|
+
}), a;
|
|
524
|
+
}
|
|
525
|
+
function l(t, e, r) {
|
|
526
|
+
try {
|
|
527
|
+
return {
|
|
528
|
+
type: "normal",
|
|
529
|
+
arg: t.call(e, r)
|
|
530
|
+
};
|
|
531
|
+
} catch (t) {
|
|
532
|
+
return {
|
|
533
|
+
type: "throw",
|
|
534
|
+
arg: t
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
t.wrap = c;
|
|
539
|
+
var f = {};
|
|
540
|
+
function h() {}
|
|
541
|
+
function d() {}
|
|
542
|
+
function p() {}
|
|
543
|
+
var y = {};
|
|
544
|
+
s(y, i, function () {
|
|
545
|
+
return this;
|
|
546
|
+
});
|
|
547
|
+
var v = Object.getPrototypeOf,
|
|
548
|
+
m = v && v(v(_([])));
|
|
549
|
+
m && m !== e && r.call(m, i) && (y = m);
|
|
550
|
+
var b = p.prototype = h.prototype = Object.create(y);
|
|
551
|
+
function g(t) {
|
|
552
|
+
["next", "throw", "return"].forEach(function (e) {
|
|
553
|
+
s(t, e, function (t) {
|
|
554
|
+
return this._invoke(e, t);
|
|
555
|
+
});
|
|
556
|
+
});
|
|
557
|
+
}
|
|
558
|
+
function w(t, e) {
|
|
559
|
+
function o(n, i, a, u) {
|
|
560
|
+
var s = l(t[n], t, i);
|
|
561
|
+
if ("throw" !== s.type) {
|
|
562
|
+
var c = s.arg,
|
|
563
|
+
f = c.value;
|
|
564
|
+
return f && "object" == L(f) && r.call(f, "__await") ? e.resolve(f.__await).then(function (t) {
|
|
565
|
+
o("next", t, a, u);
|
|
566
|
+
}, function (t) {
|
|
567
|
+
o("throw", t, a, u);
|
|
568
|
+
}) : e.resolve(f).then(function (t) {
|
|
569
|
+
c.value = t, a(c);
|
|
570
|
+
}, function (t) {
|
|
571
|
+
return o("throw", t, a, u);
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
u(s.arg);
|
|
575
|
+
}
|
|
576
|
+
var i;
|
|
577
|
+
n(this, "_invoke", {
|
|
578
|
+
value: function (t, r) {
|
|
579
|
+
function n() {
|
|
580
|
+
return new e(function (e, n) {
|
|
581
|
+
o(t, r, e, n);
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
return i = i ? i.then(n, n) : n();
|
|
585
|
+
}
|
|
586
|
+
});
|
|
587
|
+
}
|
|
588
|
+
function E(t, e, r) {
|
|
589
|
+
var n = "suspendedStart";
|
|
590
|
+
return function (o, i) {
|
|
591
|
+
if ("executing" === n) throw new Error("Generator is already running");
|
|
592
|
+
if ("completed" === n) {
|
|
593
|
+
if ("throw" === o) throw i;
|
|
594
|
+
return {
|
|
595
|
+
value: void 0,
|
|
596
|
+
done: !0
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
for (r.method = o, r.arg = i;;) {
|
|
600
|
+
var a = r.delegate;
|
|
601
|
+
if (a) {
|
|
602
|
+
var u = O(a, r);
|
|
603
|
+
if (u) {
|
|
604
|
+
if (u === f) continue;
|
|
605
|
+
return u;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
if ("next" === r.method) r.sent = r._sent = r.arg;else if ("throw" === r.method) {
|
|
609
|
+
if ("suspendedStart" === n) throw n = "completed", r.arg;
|
|
610
|
+
r.dispatchException(r.arg);
|
|
611
|
+
} else "return" === r.method && r.abrupt("return", r.arg);
|
|
612
|
+
n = "executing";
|
|
613
|
+
var s = l(t, e, r);
|
|
614
|
+
if ("normal" === s.type) {
|
|
615
|
+
if (n = r.done ? "completed" : "suspendedYield", s.arg === f) continue;
|
|
616
|
+
return {
|
|
617
|
+
value: s.arg,
|
|
618
|
+
done: r.done
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
"throw" === s.type && (n = "completed", r.method = "throw", r.arg = s.arg);
|
|
622
|
+
}
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
function O(t, e) {
|
|
626
|
+
var r = e.method,
|
|
627
|
+
n = t.iterator[r];
|
|
628
|
+
if (void 0 === n) return e.delegate = null, "throw" === r && t.iterator.return && (e.method = "return", e.arg = void 0, O(t, e), "throw" === e.method) || "return" !== r && (e.method = "throw", e.arg = new TypeError("The iterator does not provide a '" + r + "' method")), f;
|
|
629
|
+
var o = l(n, t.iterator, e.arg);
|
|
630
|
+
if ("throw" === o.type) return e.method = "throw", e.arg = o.arg, e.delegate = null, f;
|
|
631
|
+
var i = o.arg;
|
|
632
|
+
return i ? i.done ? (e[t.resultName] = i.value, e.next = t.nextLoc, "return" !== e.method && (e.method = "next", e.arg = void 0), e.delegate = null, f) : i : (e.method = "throw", e.arg = new TypeError("iterator result is not an object"), e.delegate = null, f);
|
|
633
|
+
}
|
|
634
|
+
function k(t) {
|
|
635
|
+
var e = {
|
|
636
|
+
tryLoc: t[0]
|
|
637
|
+
};
|
|
638
|
+
1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
|
|
639
|
+
}
|
|
640
|
+
function j(t) {
|
|
641
|
+
var e = t.completion || {};
|
|
642
|
+
e.type = "normal", delete e.arg, t.completion = e;
|
|
643
|
+
}
|
|
644
|
+
function A(t) {
|
|
645
|
+
this.tryEntries = [{
|
|
646
|
+
tryLoc: "root"
|
|
647
|
+
}], t.forEach(k, this), this.reset(!0);
|
|
648
|
+
}
|
|
649
|
+
function _(t) {
|
|
650
|
+
if (t) {
|
|
651
|
+
var e = t[i];
|
|
652
|
+
if (e) return e.call(t);
|
|
653
|
+
if ("function" == typeof t.next) return t;
|
|
654
|
+
if (!isNaN(t.length)) {
|
|
655
|
+
var n = -1,
|
|
656
|
+
o = function e() {
|
|
657
|
+
for (; ++n < t.length;) if (r.call(t, n)) return e.value = t[n], e.done = !1, e;
|
|
658
|
+
return e.value = void 0, e.done = !0, e;
|
|
659
|
+
};
|
|
660
|
+
return o.next = o;
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
return {
|
|
664
|
+
next: P
|
|
665
|
+
};
|
|
666
|
+
}
|
|
667
|
+
function P() {
|
|
668
|
+
return {
|
|
669
|
+
value: void 0,
|
|
670
|
+
done: !0
|
|
671
|
+
};
|
|
672
|
+
}
|
|
673
|
+
return d.prototype = p, n(b, "constructor", {
|
|
674
|
+
value: p,
|
|
675
|
+
configurable: !0
|
|
676
|
+
}), n(p, "constructor", {
|
|
677
|
+
value: d,
|
|
678
|
+
configurable: !0
|
|
679
|
+
}), d.displayName = s(p, u, "GeneratorFunction"), t.isGeneratorFunction = function (t) {
|
|
680
|
+
var e = "function" == typeof t && t.constructor;
|
|
681
|
+
return !!e && (e === d || "GeneratorFunction" === (e.displayName || e.name));
|
|
682
|
+
}, t.mark = function (t) {
|
|
683
|
+
return Object.setPrototypeOf ? Object.setPrototypeOf(t, p) : (t.__proto__ = p, s(t, u, "GeneratorFunction")), t.prototype = Object.create(b), t;
|
|
684
|
+
}, t.awrap = function (t) {
|
|
685
|
+
return {
|
|
686
|
+
__await: t
|
|
687
|
+
};
|
|
688
|
+
}, g(w.prototype), s(w.prototype, a, function () {
|
|
689
|
+
return this;
|
|
690
|
+
}), t.AsyncIterator = w, t.async = function (e, r, n, o, i) {
|
|
691
|
+
void 0 === i && (i = Promise);
|
|
692
|
+
var a = new w(c(e, r, n, o), i);
|
|
693
|
+
return t.isGeneratorFunction(r) ? a : a.next().then(function (t) {
|
|
694
|
+
return t.done ? t.value : a.next();
|
|
695
|
+
});
|
|
696
|
+
}, g(b), s(b, u, "Generator"), s(b, i, function () {
|
|
697
|
+
return this;
|
|
698
|
+
}), s(b, "toString", function () {
|
|
699
|
+
return "[object Generator]";
|
|
700
|
+
}), t.keys = function (t) {
|
|
701
|
+
var e = Object(t),
|
|
702
|
+
r = [];
|
|
703
|
+
for (var n in e) r.push(n);
|
|
704
|
+
return r.reverse(), function t() {
|
|
705
|
+
for (; r.length;) {
|
|
706
|
+
var n = r.pop();
|
|
707
|
+
if (n in e) return t.value = n, t.done = !1, t;
|
|
708
|
+
}
|
|
709
|
+
return t.done = !0, t;
|
|
710
|
+
};
|
|
711
|
+
}, t.values = _, A.prototype = {
|
|
712
|
+
constructor: A,
|
|
713
|
+
reset: function (t) {
|
|
714
|
+
if (this.prev = 0, this.next = 0, this.sent = this._sent = void 0, this.done = !1, this.delegate = null, this.method = "next", this.arg = void 0, this.tryEntries.forEach(j), !t) for (var e in this) "t" === e.charAt(0) && r.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = void 0);
|
|
715
|
+
},
|
|
716
|
+
stop: function () {
|
|
717
|
+
this.done = !0;
|
|
718
|
+
var t = this.tryEntries[0].completion;
|
|
719
|
+
if ("throw" === t.type) throw t.arg;
|
|
720
|
+
return this.rval;
|
|
721
|
+
},
|
|
722
|
+
dispatchException: function (t) {
|
|
723
|
+
if (this.done) throw t;
|
|
724
|
+
var e = this;
|
|
725
|
+
function n(r, n) {
|
|
726
|
+
return a.type = "throw", a.arg = t, e.next = r, n && (e.method = "next", e.arg = void 0), !!n;
|
|
727
|
+
}
|
|
728
|
+
for (var o = this.tryEntries.length - 1; o >= 0; --o) {
|
|
729
|
+
var i = this.tryEntries[o],
|
|
730
|
+
a = i.completion;
|
|
731
|
+
if ("root" === i.tryLoc) return n("end");
|
|
732
|
+
if (i.tryLoc <= this.prev) {
|
|
733
|
+
var u = r.call(i, "catchLoc"),
|
|
734
|
+
s = r.call(i, "finallyLoc");
|
|
735
|
+
if (u && s) {
|
|
736
|
+
if (this.prev < i.catchLoc) return n(i.catchLoc, !0);
|
|
737
|
+
if (this.prev < i.finallyLoc) return n(i.finallyLoc);
|
|
738
|
+
} else if (u) {
|
|
739
|
+
if (this.prev < i.catchLoc) return n(i.catchLoc, !0);
|
|
740
|
+
} else {
|
|
741
|
+
if (!s) throw new Error("try statement without catch or finally");
|
|
742
|
+
if (this.prev < i.finallyLoc) return n(i.finallyLoc);
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
},
|
|
747
|
+
abrupt: function (t, e) {
|
|
748
|
+
for (var n = this.tryEntries.length - 1; n >= 0; --n) {
|
|
749
|
+
var o = this.tryEntries[n];
|
|
750
|
+
if (o.tryLoc <= this.prev && r.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
|
|
751
|
+
var i = o;
|
|
752
|
+
break;
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
|
|
756
|
+
var a = i ? i.completion : {};
|
|
757
|
+
return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, f) : this.complete(a);
|
|
758
|
+
},
|
|
759
|
+
complete: function (t, e) {
|
|
760
|
+
if ("throw" === t.type) throw t.arg;
|
|
761
|
+
return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), f;
|
|
762
|
+
},
|
|
763
|
+
finish: function (t) {
|
|
764
|
+
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
|
|
765
|
+
var r = this.tryEntries[e];
|
|
766
|
+
if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), j(r), f;
|
|
767
|
+
}
|
|
768
|
+
},
|
|
769
|
+
catch: function (t) {
|
|
770
|
+
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
|
|
771
|
+
var r = this.tryEntries[e];
|
|
772
|
+
if (r.tryLoc === t) {
|
|
773
|
+
var n = r.completion;
|
|
774
|
+
if ("throw" === n.type) {
|
|
775
|
+
var o = n.arg;
|
|
776
|
+
j(r);
|
|
777
|
+
}
|
|
778
|
+
return o;
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
throw new Error("illegal catch attempt");
|
|
782
|
+
},
|
|
783
|
+
delegateYield: function (t, e, r) {
|
|
784
|
+
return this.delegate = {
|
|
785
|
+
iterator: _(t),
|
|
786
|
+
resultName: e,
|
|
787
|
+
nextLoc: r
|
|
788
|
+
}, "next" === this.method && (this.arg = void 0), f;
|
|
789
|
+
}
|
|
790
|
+
}, t;
|
|
791
|
+
}
|
|
792
|
+
function $(t, e) {
|
|
793
|
+
var r = Object.keys(t);
|
|
543
794
|
if (Object.getOwnPropertySymbols) {
|
|
544
|
-
var n = Object.getOwnPropertySymbols(
|
|
545
|
-
|
|
546
|
-
return Object.getOwnPropertyDescriptor(
|
|
795
|
+
var n = Object.getOwnPropertySymbols(t);
|
|
796
|
+
e && (n = n.filter(function (e) {
|
|
797
|
+
return Object.getOwnPropertyDescriptor(t, e).enumerable;
|
|
547
798
|
})), r.push.apply(r, n);
|
|
548
799
|
}
|
|
549
|
-
|
|
550
800
|
return r;
|
|
551
801
|
}
|
|
552
|
-
|
|
553
|
-
function Z(e) {
|
|
802
|
+
function X(t) {
|
|
554
803
|
for (var r = 1; r < arguments.length; r++) {
|
|
555
804
|
var n = null != arguments[r] ? arguments[r] : {};
|
|
556
|
-
r % 2 ?
|
|
557
|
-
t
|
|
558
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(
|
|
559
|
-
Object.defineProperty(
|
|
805
|
+
r % 2 ? $(Object(n), !0).forEach(function (r) {
|
|
806
|
+
e(t, r, n[r]);
|
|
807
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : $(Object(n)).forEach(function (e) {
|
|
808
|
+
Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e));
|
|
560
809
|
});
|
|
561
810
|
}
|
|
562
|
-
|
|
563
|
-
return e;
|
|
811
|
+
return t;
|
|
564
812
|
}
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
return ["model", "change", e, t];
|
|
813
|
+
function Y(t, e) {
|
|
814
|
+
if (null != e) {
|
|
815
|
+
if (null == t) throw new Error("Path must be defined");
|
|
816
|
+
return ["model", "change", t, e];
|
|
570
817
|
}
|
|
571
|
-
|
|
572
|
-
return null != e ? ["model", "change", e] : ["model", "change"];
|
|
818
|
+
return null != t ? ["model", "change", t] : ["model", "change"];
|
|
573
819
|
}
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
return e[t] && Object.prototype.hasOwnProperty.call(e[t], "value");
|
|
820
|
+
function J(t) {
|
|
821
|
+
return Object.keys(t).filter(function (e) {
|
|
822
|
+
return t[e] && Object.prototype.hasOwnProperty.call(t[e], "value");
|
|
578
823
|
}).map(function (r) {
|
|
579
|
-
var n =
|
|
580
|
-
return null == n ? {} :
|
|
824
|
+
var n = t[r];
|
|
825
|
+
return null == n ? {} : e({}, r, n.value);
|
|
581
826
|
});
|
|
582
827
|
}
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
return Z(Z({}, e), t);
|
|
828
|
+
function W(t) {
|
|
829
|
+
return t.reduce(function (t, e) {
|
|
830
|
+
return X(X({}, t), e);
|
|
587
831
|
}, {});
|
|
588
832
|
}
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
T(this, e), this.form = void 0, this.form = t;
|
|
833
|
+
var K = function () {
|
|
834
|
+
function t(e) {
|
|
835
|
+
P(this, t), this.form = void 0, this.form = e;
|
|
593
836
|
}
|
|
594
|
-
|
|
595
837
|
var r, n;
|
|
596
|
-
return
|
|
838
|
+
return S(t, [{
|
|
597
839
|
key: "batchUpdate",
|
|
598
|
-
value: function (
|
|
840
|
+
value: function (t) {
|
|
599
841
|
throw new Error("Method not implemented.");
|
|
600
842
|
}
|
|
601
843
|
}, {
|
|
@@ -605,39 +847,22 @@
|
|
|
605
847
|
}
|
|
606
848
|
}, {
|
|
607
849
|
key: "setErrorLog",
|
|
608
|
-
value: function (
|
|
850
|
+
value: function (t) {
|
|
609
851
|
throw new Error("Method not implemented.");
|
|
610
852
|
}
|
|
611
853
|
}, {
|
|
612
854
|
key: "validateChildrenByPath",
|
|
613
|
-
value: (
|
|
614
|
-
return
|
|
615
|
-
for (;;) switch (
|
|
855
|
+
value: (n = U(Z().mark(function t(e) {
|
|
856
|
+
return Z().wrap(function (t) {
|
|
857
|
+
for (;;) switch (t.prev = t.next) {
|
|
616
858
|
case 0:
|
|
617
859
|
throw new Error("Method not implemented.");
|
|
618
|
-
|
|
619
860
|
case 1:
|
|
620
861
|
case "end":
|
|
621
|
-
return
|
|
622
|
-
}
|
|
623
|
-
}, e);
|
|
624
|
-
}), n = function () {
|
|
625
|
-
var e = this,
|
|
626
|
-
t = arguments;
|
|
627
|
-
return new Promise(function (n, o) {
|
|
628
|
-
var i = r.apply(e, t);
|
|
629
|
-
|
|
630
|
-
function a(e) {
|
|
631
|
-
I(i, n, o, a, s, "next", e);
|
|
862
|
+
return t.stop();
|
|
632
863
|
}
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
I(i, n, o, a, s, "throw", e);
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
a(void 0);
|
|
639
|
-
});
|
|
640
|
-
}, function (e) {
|
|
864
|
+
}, t);
|
|
865
|
+
})), function (t) {
|
|
641
866
|
return n.apply(this, arguments);
|
|
642
867
|
})
|
|
643
868
|
}, {
|
|
@@ -647,37 +872,37 @@
|
|
|
647
872
|
}
|
|
648
873
|
}, {
|
|
649
874
|
key: "importEmployees",
|
|
650
|
-
value: function (
|
|
875
|
+
value: function (t, e) {
|
|
651
876
|
throw new Error("Method not implemented.");
|
|
652
877
|
}
|
|
653
878
|
}, {
|
|
654
879
|
key: "print",
|
|
655
|
-
value: function (
|
|
880
|
+
value: function (t, e) {
|
|
656
881
|
throw new Error("Method not implemented.");
|
|
657
882
|
}
|
|
658
883
|
}, {
|
|
659
884
|
key: "runMassAction",
|
|
660
|
-
value: function (
|
|
885
|
+
value: function (t, e) {
|
|
661
886
|
throw new Error("Method not implemented.");
|
|
662
887
|
}
|
|
663
888
|
}, {
|
|
664
889
|
key: "getByGId",
|
|
665
|
-
value: function (
|
|
666
|
-
return this.form.picklistsProvider.getDigestApiPicklist(
|
|
890
|
+
value: function (t, e) {
|
|
891
|
+
return this.form.picklistsProvider.getDigestApiPicklist(t).query(e);
|
|
667
892
|
}
|
|
668
893
|
}, {
|
|
669
894
|
key: "on",
|
|
670
|
-
value: function (
|
|
671
|
-
this.form.eventManager.on(["form",
|
|
895
|
+
value: function (t, e) {
|
|
896
|
+
this.form.eventManager.on(["form", t], e);
|
|
672
897
|
}
|
|
673
898
|
}, {
|
|
674
899
|
key: "off",
|
|
675
|
-
value: function (
|
|
676
|
-
this.form.eventManager.off(["form",
|
|
900
|
+
value: function (t, e) {
|
|
901
|
+
this.form.eventManager.off(["form", t], e);
|
|
677
902
|
}
|
|
678
903
|
}, {
|
|
679
904
|
key: "onModelChange",
|
|
680
|
-
value: function (
|
|
905
|
+
value: function (t, e) {
|
|
681
906
|
throw Error("form.onModelChange() is not supported yet");
|
|
682
907
|
}
|
|
683
908
|
}, {
|
|
@@ -698,45 +923,60 @@
|
|
|
698
923
|
}, {
|
|
699
924
|
key: "validate",
|
|
700
925
|
value: function () {
|
|
701
|
-
var
|
|
702
|
-
return this.form.validator.validateAll(
|
|
926
|
+
var t = Object.keys(this.form.model.getChunk(this.form.settings.formRoot));
|
|
927
|
+
return this.form.validator.validateAll(t);
|
|
703
928
|
}
|
|
704
929
|
}, {
|
|
705
930
|
key: "getAdditionalEmployeeInfo",
|
|
706
|
-
value: function (
|
|
931
|
+
value: function (t) {
|
|
707
932
|
throw new Error("not implemented");
|
|
708
933
|
}
|
|
934
|
+
}, {
|
|
935
|
+
key: "reloadInner",
|
|
936
|
+
value: (r = U(Z().mark(function t() {
|
|
937
|
+
return Z().wrap(function (t) {
|
|
938
|
+
for (;;) switch (t.prev = t.next) {
|
|
939
|
+
case 0:
|
|
940
|
+
throw new Error("not implemented");
|
|
941
|
+
case 1:
|
|
942
|
+
case "end":
|
|
943
|
+
return t.stop();
|
|
944
|
+
}
|
|
945
|
+
}, t);
|
|
946
|
+
})), function () {
|
|
947
|
+
return r.apply(this, arguments);
|
|
948
|
+
})
|
|
709
949
|
}, {
|
|
710
950
|
key: "getWorkingEventsForEmployee",
|
|
711
|
-
value: function (
|
|
951
|
+
value: function (t) {
|
|
712
952
|
throw new Error("not implemented");
|
|
713
953
|
}
|
|
714
954
|
}, {
|
|
715
955
|
key: "hasErrors",
|
|
716
956
|
value: function () {
|
|
717
|
-
var
|
|
718
|
-
return null !=
|
|
957
|
+
var t = this.form.model.get(this.form.settings.formRoot, "errorsCount");
|
|
958
|
+
return null != t && t > 0;
|
|
719
959
|
}
|
|
720
960
|
}, {
|
|
721
961
|
key: "onErrorsCountChanged",
|
|
722
|
-
value: function (
|
|
723
|
-
this.form.eventManager.on(
|
|
962
|
+
value: function (t) {
|
|
963
|
+
this.form.eventManager.on(Y(this.form.settings.formRoot, "errorsCount"), t);
|
|
724
964
|
}
|
|
725
965
|
}, {
|
|
726
966
|
key: "offErrorsCountChanged",
|
|
727
|
-
value: function (
|
|
728
|
-
this.form.eventManager.off(
|
|
967
|
+
value: function (t) {
|
|
968
|
+
this.form.eventManager.off(Y(this.form.settings.formRoot, "errorsCount"), t);
|
|
729
969
|
}
|
|
730
970
|
}, {
|
|
731
971
|
key: "set",
|
|
732
|
-
value: function (
|
|
733
|
-
if (null ===
|
|
734
|
-
if ("string" != typeof
|
|
735
|
-
this.form.model.set(
|
|
972
|
+
value: function (t, r) {
|
|
973
|
+
if (null === t || "string" == typeof t || "object" !== L(t) || Array.isArray(t)) {
|
|
974
|
+
if ("string" != typeof t) throw new Error("form.set() parameter should be string path or object with path-value pairs");
|
|
975
|
+
this.form.model.set(t, "value", r);
|
|
736
976
|
} else {
|
|
737
|
-
var n = Object.keys(
|
|
738
|
-
return
|
|
739
|
-
value:
|
|
977
|
+
var n = Object.keys(t).reduce(function (r, n) {
|
|
978
|
+
return X(e({}, n, {
|
|
979
|
+
value: t[n]
|
|
740
980
|
}), r);
|
|
741
981
|
}, {});
|
|
742
982
|
this.form.model.fill(n);
|
|
@@ -744,35 +984,35 @@
|
|
|
744
984
|
}
|
|
745
985
|
}, {
|
|
746
986
|
key: "get",
|
|
747
|
-
value: function (
|
|
748
|
-
var
|
|
749
|
-
if (Array.isArray(
|
|
750
|
-
return
|
|
751
|
-
}).reduce(function (
|
|
752
|
-
return
|
|
987
|
+
value: function (t) {
|
|
988
|
+
var e = this;
|
|
989
|
+
if (Array.isArray(t)) return W(t.map(function (t) {
|
|
990
|
+
return J(e.form.model.getChunk(t));
|
|
991
|
+
}).reduce(function (t, e) {
|
|
992
|
+
return t.concat(e);
|
|
753
993
|
}, []));
|
|
754
|
-
if ("string" == typeof
|
|
755
|
-
if (void 0 ===
|
|
994
|
+
if ("string" == typeof t) return W(J(this.form.model.getChunk(t)));
|
|
995
|
+
if (void 0 === t) return W(J(this.form.model.getChunk(this.form.settings.formRoot)));
|
|
756
996
|
throw new Error("form.get() parameter should be string path or array of paths");
|
|
757
997
|
}
|
|
758
998
|
}, {
|
|
759
999
|
key: "getValue",
|
|
760
|
-
value: function (
|
|
761
|
-
return this.form.model.get(
|
|
1000
|
+
value: function (t) {
|
|
1001
|
+
return this.form.model.get(t, "value");
|
|
762
1002
|
}
|
|
763
1003
|
}, {
|
|
764
1004
|
key: "copySubtree",
|
|
765
|
-
value: function (
|
|
1005
|
+
value: function (t, e, r) {
|
|
766
1006
|
throw new H();
|
|
767
1007
|
}
|
|
768
1008
|
}, {
|
|
769
1009
|
key: "addInstance",
|
|
770
|
-
value: function (
|
|
1010
|
+
value: function (t) {
|
|
771
1011
|
throw new H();
|
|
772
1012
|
}
|
|
773
1013
|
}, {
|
|
774
1014
|
key: "getChildren",
|
|
775
|
-
value: function (
|
|
1015
|
+
value: function (t) {
|
|
776
1016
|
throw new H();
|
|
777
1017
|
}
|
|
778
1018
|
}, {
|
|
@@ -782,277 +1022,257 @@
|
|
|
782
1022
|
}
|
|
783
1023
|
}, {
|
|
784
1024
|
key: "showModal",
|
|
785
|
-
value: function (
|
|
1025
|
+
value: function (t) {
|
|
786
1026
|
throw new H();
|
|
787
1027
|
}
|
|
788
1028
|
}, {
|
|
789
1029
|
key: "addSection",
|
|
790
|
-
value: function (
|
|
1030
|
+
value: function (t) {
|
|
791
1031
|
throw new H();
|
|
792
1032
|
}
|
|
793
1033
|
}, {
|
|
794
1034
|
key: "callInitSection",
|
|
795
|
-
value: function (
|
|
1035
|
+
value: function (t) {
|
|
796
1036
|
throw new H();
|
|
797
1037
|
}
|
|
798
1038
|
}, {
|
|
799
1039
|
key: "createFiasApiClient",
|
|
800
|
-
value: function (
|
|
1040
|
+
value: function (t) {
|
|
801
1041
|
throw new H();
|
|
802
1042
|
}
|
|
803
1043
|
}, {
|
|
804
1044
|
key: "openEmployeeEditor",
|
|
805
|
-
value: function (
|
|
1045
|
+
value: function (t) {
|
|
806
1046
|
throw new H();
|
|
807
1047
|
}
|
|
808
1048
|
}, {
|
|
809
1049
|
key: "removeInstance",
|
|
810
|
-
value: function (
|
|
1050
|
+
value: function (t, e) {
|
|
811
1051
|
throw new H();
|
|
812
1052
|
}
|
|
813
1053
|
}, {
|
|
814
1054
|
key: "removeInstances",
|
|
815
|
-
value: function (
|
|
1055
|
+
value: function (t, e) {
|
|
816
1056
|
throw new H();
|
|
817
1057
|
}
|
|
818
1058
|
}, {
|
|
819
1059
|
key: "focusOnControlIfExist",
|
|
820
|
-
value: function (
|
|
1060
|
+
value: function (t) {
|
|
821
1061
|
throw new H();
|
|
822
1062
|
}
|
|
823
1063
|
}, {
|
|
824
1064
|
key: "setAllCheckboxesFor113103",
|
|
825
|
-
value: function (
|
|
1065
|
+
value: function (t) {
|
|
826
1066
|
return Promise.resolve(void 0);
|
|
827
1067
|
}
|
|
828
1068
|
}, {
|
|
829
1069
|
key: "setAutoFieldsToAutoValue",
|
|
830
|
-
value: function (
|
|
1070
|
+
value: function (t) {
|
|
831
1071
|
return Promise.resolve(void 0);
|
|
832
1072
|
}
|
|
833
1073
|
}, {
|
|
834
1074
|
key: "ensureInstanceFullyLoaded",
|
|
835
|
-
value: function (
|
|
1075
|
+
value: function (t) {
|
|
836
1076
|
throw new Error("Method not implemented.");
|
|
837
1077
|
}
|
|
838
1078
|
}, {
|
|
839
1079
|
key: "customNormalize",
|
|
840
|
-
value: function (
|
|
1080
|
+
value: function (t, e) {
|
|
841
1081
|
throw new H();
|
|
842
1082
|
}
|
|
843
1083
|
}, {
|
|
844
1084
|
key: "removeInstancesByRules",
|
|
845
|
-
value: function (
|
|
1085
|
+
value: function (t) {
|
|
846
1086
|
throw new H();
|
|
847
1087
|
}
|
|
848
|
-
}]),
|
|
1088
|
+
}]), t;
|
|
849
1089
|
}();
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
var r = Object.keys(e);
|
|
853
|
-
|
|
1090
|
+
function Q(t, e) {
|
|
1091
|
+
var r = Object.keys(t);
|
|
854
1092
|
if (Object.getOwnPropertySymbols) {
|
|
855
|
-
var n = Object.getOwnPropertySymbols(
|
|
856
|
-
|
|
857
|
-
return Object.getOwnPropertyDescriptor(
|
|
1093
|
+
var n = Object.getOwnPropertySymbols(t);
|
|
1094
|
+
e && (n = n.filter(function (e) {
|
|
1095
|
+
return Object.getOwnPropertyDescriptor(t, e).enumerable;
|
|
858
1096
|
})), r.push.apply(r, n);
|
|
859
1097
|
}
|
|
860
|
-
|
|
861
1098
|
return r;
|
|
862
1099
|
}
|
|
863
|
-
|
|
864
|
-
function Q(e) {
|
|
1100
|
+
function tt(t) {
|
|
865
1101
|
for (var r = 1; r < arguments.length; r++) {
|
|
866
1102
|
var n = null != arguments[r] ? arguments[r] : {};
|
|
867
|
-
r % 2 ?
|
|
868
|
-
t
|
|
869
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(
|
|
870
|
-
Object.defineProperty(
|
|
1103
|
+
r % 2 ? Q(Object(n), !0).forEach(function (r) {
|
|
1104
|
+
e(t, r, n[r]);
|
|
1105
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : Q(Object(n)).forEach(function (e) {
|
|
1106
|
+
Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e));
|
|
871
1107
|
});
|
|
872
1108
|
}
|
|
873
|
-
|
|
874
|
-
return e;
|
|
1109
|
+
return t;
|
|
875
1110
|
}
|
|
876
|
-
|
|
877
|
-
function
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
r = e.g.CF.keformsUrl || "";
|
|
882
|
-
return "".concat(r, "/").concat(t).replace(/([^:])\/{2,}/g, "$1/");
|
|
1111
|
+
function et() {}
|
|
1112
|
+
function rt() {
|
|
1113
|
+
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
|
|
1114
|
+
r = t.g.CF.keformsUrl || "";
|
|
1115
|
+
return "".concat(r, "/").concat(e).replace(/([^:])\/{2,}/g, "$1/");
|
|
883
1116
|
}
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
for (var r = [], n = 0, o = Object.keys(t); n < o.length; n++) {
|
|
1117
|
+
function nt(t, e) {
|
|
1118
|
+
if (void 0 === e) return t;
|
|
1119
|
+
for (var r = [], n = 0, o = Object.keys(e); n < o.length; n++) {
|
|
889
1120
|
var i = o[n],
|
|
890
|
-
|
|
1121
|
+
a = e[i];
|
|
891
1122
|
null != a && r.push("".concat(i, "=").concat(encodeURIComponent(a)));
|
|
892
1123
|
}
|
|
893
|
-
|
|
894
|
-
return 0 === r.length ? e : e + "?" + r.join("&");
|
|
1124
|
+
return 0 === r.length ? t : t + "?" + r.join("&");
|
|
895
1125
|
}
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
return new RegExp("^(?:".concat(t.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-.]+"), ")$")).test(e.g.location.host);
|
|
1126
|
+
function ot(e) {
|
|
1127
|
+
return new RegExp("^(?:".concat(e.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-.]+"), ")$")).test(t.g.location.host);
|
|
899
1128
|
}
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
var r = null == e ? null : "undefined" != typeof Symbol && e[Symbol.iterator] || e["@@iterator"];
|
|
909
|
-
|
|
1129
|
+
function it(e) {
|
|
1130
|
+
return (t.g.location.search.trim().replace(/^(\?|#|&)/, "").split("&").map(function (t) {
|
|
1131
|
+
return t.replace(/\+/g, " ").split("=").map(decodeURIComponent);
|
|
1132
|
+
}).find(function (t) {
|
|
1133
|
+
return (n = t, o = 1, function (t) {
|
|
1134
|
+
if (Array.isArray(t)) return t;
|
|
1135
|
+
}(n) || function (t, e) {
|
|
1136
|
+
var r = null == t ? null : "undefined" != typeof Symbol && t[Symbol.iterator] || t["@@iterator"];
|
|
910
1137
|
if (null != r) {
|
|
911
1138
|
var n,
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
1139
|
+
o,
|
|
1140
|
+
i = [],
|
|
1141
|
+
a = !0,
|
|
1142
|
+
u = !1;
|
|
917
1143
|
try {
|
|
918
|
-
for (r = r.call(
|
|
919
|
-
} catch (
|
|
920
|
-
|
|
1144
|
+
for (r = r.call(t); !(a = (n = r.next()).done) && (i.push(n.value), !e || i.length !== e); a = !0);
|
|
1145
|
+
} catch (t) {
|
|
1146
|
+
u = !0, o = t;
|
|
921
1147
|
} finally {
|
|
922
1148
|
try {
|
|
923
1149
|
a || null == r.return || r.return();
|
|
924
1150
|
} finally {
|
|
925
|
-
if (
|
|
1151
|
+
if (u) throw o;
|
|
926
1152
|
}
|
|
927
1153
|
}
|
|
928
|
-
|
|
929
1154
|
return i;
|
|
930
1155
|
}
|
|
931
|
-
}(n, o) || function (
|
|
932
|
-
if (
|
|
933
|
-
if ("string" == typeof
|
|
934
|
-
var n = Object.prototype.toString.call(
|
|
935
|
-
return "Object" === n &&
|
|
1156
|
+
}(n, o) || function (t, e) {
|
|
1157
|
+
if (t) {
|
|
1158
|
+
if ("string" == typeof t) return r(t, e);
|
|
1159
|
+
var n = Object.prototype.toString.call(t).slice(8, -1);
|
|
1160
|
+
return "Object" === n && t.constructor && (n = t.constructor.name), "Map" === n || "Set" === n ? Array.from(t) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? r(t, e) : void 0;
|
|
936
1161
|
}
|
|
937
1162
|
}(n, o) || function () {
|
|
938
1163
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
939
|
-
}())[0] ==
|
|
1164
|
+
}())[0] == e;
|
|
940
1165
|
var n, o;
|
|
941
1166
|
}) || [])[1];
|
|
942
1167
|
}
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
}), function (e, t) {
|
|
1168
|
+
function at(e, r) {
|
|
1169
|
+
var n = e.gfv,
|
|
1170
|
+
o = e.engineVersion,
|
|
1171
|
+
i = e.resourcesVersion;
|
|
1172
|
+
if (t.g.CF.entryPoint[n]) r();else {
|
|
1173
|
+
var a = o && !t.g[o],
|
|
1174
|
+
u = "true" === it("debug") ? "" : ".min",
|
|
1175
|
+
s = [],
|
|
1176
|
+
c = {
|
|
1177
|
+
v: i,
|
|
1178
|
+
resourceZone: e.resourceZone
|
|
1179
|
+
};
|
|
1180
|
+
s.push(function (t) {
|
|
1181
|
+
return x.styleSheet(rt(nt("static/public/styles/".concat(n).concat(u, ".css"), c)), !0, t);
|
|
1182
|
+
}), s.push(function (t) {
|
|
1183
|
+
return x.script(rt(nt("static/public/scripts/".concat(n).concat(u, ".js"), c)), t);
|
|
1184
|
+
}), a && s.push(function (t) {
|
|
1185
|
+
return x.styleSheet(rt(nt("static/public/styles/candy_".concat(o).concat(u, ".css"), c)), !1, t);
|
|
1186
|
+
}, function (t) {
|
|
1187
|
+
return x.script(rt(nt("static/public/scripts/candy_".concat(o).concat(u, ".js"), c)), t);
|
|
1188
|
+
}), function (t, e) {
|
|
965
1189
|
var r = 0;
|
|
966
|
-
|
|
1190
|
+
t.forEach(function (n) {
|
|
967
1191
|
n(function (n) {
|
|
968
|
-
if (r !==
|
|
969
|
-
if (n) return r =
|
|
970
|
-
(r += 1) ===
|
|
1192
|
+
if (r !== t.length) {
|
|
1193
|
+
if (n) return r = t.length, void e(n);
|
|
1194
|
+
(r += 1) === t.length && e();
|
|
971
1195
|
}
|
|
972
1196
|
});
|
|
973
1197
|
});
|
|
974
|
-
}(
|
|
1198
|
+
}(s, r);
|
|
975
1199
|
}
|
|
976
1200
|
}
|
|
977
|
-
|
|
978
|
-
function ie(t, r, n) {
|
|
1201
|
+
function ut(e, r, n) {
|
|
979
1202
|
var o;
|
|
980
|
-
(null !== (o =
|
|
981
|
-
throw "string" == typeof
|
|
982
|
-
}("Form entry point ".concat(r.gfv, " not found.")))(
|
|
983
|
-
var
|
|
984
|
-
return new
|
|
985
|
-
}(
|
|
986
|
-
|
|
987
|
-
n(null, t);
|
|
1203
|
+
(null !== (o = t.g.CF.entryPoint[r.gfv]) && void 0 !== o ? o : function (t) {
|
|
1204
|
+
throw "string" == typeof t || null == t ? new Error(null != t ? t : "Undefined is not allowed") : t;
|
|
1205
|
+
}("Form entry point ".concat(r.gfv, " not found.")))(e, r).then(function (t) {
|
|
1206
|
+
var e = t.publicForm || function (t) {
|
|
1207
|
+
return new K(t);
|
|
1208
|
+
}(t);
|
|
1209
|
+
n(null, e);
|
|
988
1210
|
}).catch(n);
|
|
989
1211
|
}
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
if (null != t) return e.g[t] && e.g[t].default;
|
|
1212
|
+
function st(e) {
|
|
1213
|
+
if (null != e) return t.g[e] && t.g[e].default;
|
|
993
1214
|
}
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
start: function (t, r) {
|
|
1215
|
+
var ct = {
|
|
1216
|
+
start: function (e, r) {
|
|
997
1217
|
var n,
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
if (
|
|
1004
|
-
var c = null !== (n = r.resourceZone) && void 0 !== n ? n :
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1218
|
+
o,
|
|
1219
|
+
i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : et,
|
|
1220
|
+
a = null,
|
|
1221
|
+
u = r.ns,
|
|
1222
|
+
s = r.draftId;
|
|
1223
|
+
if (ot(I.konturDomains) ? I.authorized ? s ? u || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
|
|
1224
|
+
var c = null !== (n = r.resourceZone) && void 0 !== n ? n : it("resourceZone"),
|
|
1225
|
+
l = nt(rt(B({
|
|
1226
|
+
ns: u,
|
|
1227
|
+
draftId: s
|
|
1228
|
+
})), {
|
|
1229
|
+
resourceZone: c
|
|
1230
|
+
}),
|
|
1231
|
+
f = {
|
|
1232
|
+
method: "GET"
|
|
1233
|
+
};
|
|
1014
1234
|
if (null == r.authentication || "browser-credentials-include" === r.authentication) f.credentials = "include";else if ("authSid" in r.authentication && null != r.authentication.authSid) {
|
|
1015
1235
|
var h;
|
|
1016
1236
|
f.credentials = "omit", f.headers = null !== (h = f.headers) && void 0 !== h ? h : {}, f.headers.Authorization = "AUTH.SID ".concat(r.authentication.authSid);
|
|
1017
1237
|
} else f.credentials = "omit";
|
|
1018
|
-
var d = null !== (o = r.fetch) && void 0 !== o ? o :
|
|
1019
|
-
d(l, f).then(function (
|
|
1020
|
-
return
|
|
1238
|
+
var d = null !== (o = r.fetch) && void 0 !== o ? o : _;
|
|
1239
|
+
d(l, f).then(function (t) {
|
|
1240
|
+
return t.json();
|
|
1021
1241
|
}).then(function (n) {
|
|
1022
1242
|
var o,
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1243
|
+
a,
|
|
1244
|
+
u,
|
|
1245
|
+
s,
|
|
1246
|
+
l = n.gfv,
|
|
1247
|
+
f = n.engineVersion,
|
|
1248
|
+
h = tt(tt(tt({
|
|
1249
|
+
authorized: I.authorized,
|
|
1250
|
+
cauldronApiUrl: I.cauldronApiUrl,
|
|
1251
|
+
isTestServer: I.isTestServer,
|
|
1252
|
+
renderCachingForIE8: I.renderCachingForIE8,
|
|
1253
|
+
normalizationOnServer: I.normalizationOnServer,
|
|
1254
|
+
normativeUrl: I.normativeUrl,
|
|
1255
|
+
resourcesVersion: I.resourcesVersion,
|
|
1256
|
+
konturDomains: I.konturDomains
|
|
1257
|
+
}, r), n), {}, {
|
|
1258
|
+
gfv: l,
|
|
1259
|
+
engineVersion: f,
|
|
1260
|
+
feedbackEnabled: null !== (o = r.feedbackEnabled) && void 0 !== o ? o : n.feedbackEnabled,
|
|
1261
|
+
isDisabledCleanForm: null !== (a = r.isDisabledCleanForm) && void 0 !== a && a,
|
|
1262
|
+
isDisabledCloseButton: null !== (u = r.isDisabledCloseButton) && void 0 !== u && u,
|
|
1263
|
+
isDisabledCloseAndSaveButton: null !== (s = r.isDisabledCloseAndSaveButton) && void 0 !== s && s,
|
|
1264
|
+
resourceZone: c
|
|
1265
|
+
});
|
|
1266
|
+
at({
|
|
1047
1267
|
gfv: h.gfv,
|
|
1048
1268
|
engineVersion: h.engineVersion,
|
|
1049
1269
|
resourceZone: h.resourceZone,
|
|
1050
1270
|
resourcesVersion: h.resourcesVersion,
|
|
1051
1271
|
theme: h.theme
|
|
1052
1272
|
}, function (n) {
|
|
1053
|
-
if (!n &&
|
|
1054
|
-
var o =
|
|
1055
|
-
|
|
1273
|
+
if (!n && t.g.CF.entryPoint[l]) {
|
|
1274
|
+
var o = st(f);
|
|
1275
|
+
ut(e, tt(tt({}, h), {}, {
|
|
1056
1276
|
templatesApi: r.templatesApi,
|
|
1057
1277
|
renderForm: o
|
|
1058
1278
|
}), i);
|
|
@@ -1065,6 +1285,6 @@
|
|
|
1065
1285
|
partialRenderingForIE8: ("{partialRenderingForIE8}", !1),
|
|
1066
1286
|
keformsUrl: "{keformsUrl}"
|
|
1067
1287
|
};
|
|
1068
|
-
|
|
1288
|
+
t.g.CF = ct;
|
|
1069
1289
|
}();
|
|
1070
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmwudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vd3JhcE5hdGl2ZVN1cGVyLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZUZ1bmN0aW9uLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9FcnJvcnMudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJuYW1lcyI6WyJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiX2RlZmluZVByb3BlcnR5Iiwib2JqIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyIiwibGVuIiwibGVuZ3RoIiwiaSIsImFycjIiLCJBcnJheSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwiZSIsIndpbmRvdyIsImdsb2JhbCIsInNlbGYiLCJzdXBwb3J0IiwiU3ltYm9sIiwiQmxvYiIsIkRhdGFWaWV3IiwicHJvdG90eXBlIiwiaXNQcm90b3R5cGVPZiIsInZpZXdDbGFzc2VzIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImluZGV4T2YiLCJ0b1N0cmluZyIsImNhbGwiLCJub3JtYWxpemVOYW1lIiwibmFtZSIsIlN0cmluZyIsInRlc3QiLCJUeXBlRXJyb3IiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVZhbHVlIiwiaXRlcmF0b3JGb3IiLCJpdGVtcyIsIml0ZXJhdG9yIiwibmV4dCIsInNoaWZ0IiwiZG9uZSIsInVuZGVmaW5lZCIsIkhlYWRlcnMiLCJoZWFkZXJzIiwibWFwIiwiZm9yRWFjaCIsImFwcGVuZCIsImlzQXJyYXkiLCJoZWFkZXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwib2xkVmFsdWUiLCJnZXQiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsInNldCIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsInJlYWRBc1RleHQiLCJidWYiLCJ2aWV3IiwiVWludDhBcnJheSIsImNoYXJzIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImJ1ZmZlckNsb25lIiwic2xpY2UiLCJieXRlTGVuZ3RoIiwiYnVmZmVyIiwiQm9keSIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJ0eXBlIiwicmVqZWN0ZWQiLCJFcnJvciIsImFycmF5QnVmZmVyIiwiYnl0ZU9mZnNldCIsInRoZW4iLCJ0ZXh0IiwicmVhZEFycmF5QnVmZmVyQXNUZXh0IiwiZm9ybURhdGEiLCJkZWNvZGUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwibWV0aG9kcyIsIm1ldGhvZCIsInVwY2FzZWQiLCJ0b1VwcGVyQ2FzZSIsIlJlcXVlc3QiLCJpbnB1dCIsIm9wdGlvbnMiLCJ1cmwiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJzaWduYWwiLCJyZWZlcnJlciIsImNhY2hlIiwicmVQYXJhbVNlYXJjaCIsInJlcGxhY2UiLCJEYXRlIiwiZ2V0VGltZSIsImNsb25lIiwiZm9ybSIsInRyaW0iLCJzcGxpdCIsImJ5dGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmF3SGVhZGVycyIsInN1YnN0ciIsImxpbmUiLCJwYXJ0cyIsIlJlc3BvbnNlIiwiYm9keUluaXQiLCJzdGF0dXMiLCJvayIsInN0YXR1c1RleHQiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVjdCIsIlJhbmdlRXJyb3IiLCJsb2NhdGlvbiIsIkRPTUV4Y2VwdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJzdGFjayIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwiZmV0Y2giLCJpbml0IiwicmVxdWVzdCIsImFib3J0ZWQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsImFib3J0WGhyIiwiYWJvcnQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsInNldFRpbWVvdXQiLCJvbnRpbWVvdXQiLCJvbmFib3J0IiwiaHJlZiIsIm9wZW4iLCJmaXhVcmwiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiX2NyZWF0ZUNsYXNzIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiTG9hZEludG9Eb2N1bWVudCIsInVyaSIsInNjcmlwdExvYWRlZCIsImhlYWQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50Iiwic2NyaXB0IiwiY3JlYXRlRWxlbWVudCIsImxvYWRIYW5kbGVyIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic3JjIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJpZ25vcmVFcnJvciIsImxpbmsiLCJnZXRDbGllbnREcmFmdEluZm9VcmwiLCJkcmFmdElkIiwibnMiLCJwYXJzZUJvb2wiLCJCb29sZWFuIiwiY2xpZW50U2V0dGluZ3MiLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwicmVzb3VyY2VzVmVyc2lvbiIsImtvbnR1ckRvbWFpbnMiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJfbmV4dCIsIl90aHJvdyIsImFyZyIsImluZm8iLCJmbiIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9zZXRQcm90b3R5cGVPZiIsIm8iLCJwIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIlJlZmVyZW5jZUVycm9yIiwiX2dldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsInNoYW0iLCJQcm94eSIsInZhbHVlT2YiLCJfY29uc3RydWN0IiwiUGFyZW50IiwiQ2xhc3MiLCJhIiwiYmluZCIsIl93cmFwTmF0aXZlU3VwZXIiLCJfY2FjaGUiLCJNYXAiLCJXcmFwcGVyIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIm1vZGVsQ2hhbmdlRXZlbnRQYXRoIiwicGF0aCIsImZpZWxkTmFtZSIsIm1hcENodW5rVmFsdWVzIiwiY2h1bmsiLCJmaWx0ZXIiLCJyZWR1Y2VDaHVua1ZhbHVlcyIsImNodW5rcyIsInJlZHVjZSIsIkxlZ2FjeVB1YmxpY0Zvcm0iLCJ1cGRhdGVQcm9jIiwiZXJyb3JMb2ciLCJlbXBsb3llZXMiLCJwcmludFR5cGUiLCJhY3Rpb25JZCIsInBhcmFtZXRlcnMiLCJnSWQiLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE5hbWUiLCJsaXN0ZW5lciIsImV2ZW50TWFuYWdlciIsIm9uIiwib2ZmIiwiY2hhbmdlU2V0Iiwic3RvcEF1dG9zZW5kIiwidW5tb3VudCIsIm1vZGVsIiwiZ2V0Q2h1bmsiLCJzZXR0aW5ncyIsImZvcm1Sb290IiwidmFsaWRhdG9yIiwidmFsaWRhdGVBbGwiLCJmaWx0ZXJzIiwiZXJyb3JDb3VudCIsInBhdGhPck1vZGVsQ2h1bmsiLCJpbm5lckNodW5rIiwiZmlsbCIsInBhdGhPckFycmF5IiwiYXJyYXkiLCJjb25jYXQiLCJzb3VyY2VCaW5kaW5nUGF0aCIsInRhcmdldEJpbmRpbmdQYXRoIiwiZG9Ob3RDb3B5UGF0aHMiLCJlbXBsb3llZUlkIiwiaW5zdGFuY2VzIiwiZW5hYmxlZCIsInBhdGhQcmVmaXhlcyIsImJpbmRpbmdQYXRoIiwibm9ybWFsaXplcklkIiwicnVsZXMiLCJkZWZhdWx0Q2FsbGJhY2siLCJyZWxhdGl2ZVVybCIsImJhc2VVcmwiLCJDRiIsImtlZm9ybXNVcmwiLCJidWlsZFVybCIsInBhcmFtcyIsInF1ZXJ5UGFydHMiLCJwYXJhbU5hbWUiLCJwYXJhbVZhbHVlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaXNBbGxvd2VkIiwiZG9tYWlucyIsIlJlZ0V4cCIsImhvc3QiLCJnZXRQYXJhbWV0ZXJCeU5hbWUiLCJzZWFyY2giLCJwYXJhbSIsImZpbmQiLCJ0YXNrcyIsImNvbXBsZXRlZCIsInRhc2siLCJsb2FkRm9ybSIsImdmdiIsImVuZ2luZVZlcnNpb24iLCJlbnRyeVBvaW50IiwiaXNOZWVkRW5naW5lIiwibWluIiwidiIsInJlc291cmNlWm9uZSIsInN0eWxlU2hlZXQiLCJjYiIsInJ1blBhcmFsbGVsIiwicmVuZGVyRm9ybSIsInBhZ2VDb250ZW50IiwiZXh0ZW5kZWRTZXR0aW5ncyIsInB1YmxpY0Zvcm0iLCJjcmVhdGVMZWdhY3lQdWJsaWNGb3JtIiwiZ2V0RW5naW5lRW50cnlQb2ludCIsImNsaWVudERyYWZ0VXJsIiwicmVxdWVzdE9wdGlvbnMiLCJhdXRoZW50aWNhdGlvbiIsImF1dGhTaWQiLCJmZXRjaEltcGwiLCJ4IiwiY2xpZW50RHJhZnRJbmZvIiwiZmVlZGJhY2tFbmFibGVkIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJ0aGVtZSIsImxvYWRFcnJvciIsInJlbmRlciIsInRlbXBsYXRlc0FwaSIsIkNhbmR5Q2xpZW50RXhwb3J0cyIsInN0YXJ0IiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCIsIl9pIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwibWluTGVuIiwibiIsImZyb20iXSwibWFwcGluZ3MiOiI7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QUosSUFBa0IzVixDQUFBQSxDQUFBQSxDQUFBQSxDQUFPMlMsRUFBUDNTLENBQVVpVSxVQUFWalUsQ0FBcUIrVCxDQUFyQi9ULENBQWxCLEVBQUE7QUFJQSxrQkFBTTRWLENBQUFBLEdBQVNkLEVBQUFBLENBQW9CZCxDQUFwQmMsQ0FBZjtBQUVBTCxjQUFBQSxFQUFBQSxDQUNJQyxDQURKRCxFQUFVLENBQUEsQ0FBQyxDQUFBLENBQUEsRUFBQSxFQUdBRSxDQUhBLENBQUQsRUFBQSxFQUFBLEVBQUE7QUFJRmtCLGdCQUFBQSxZQUFBQSxFQUFjclAsQ0FBQUEsQ0FBUXFQLFlBSnBCO0FBS0ZwQixnQkFBQUEsVUFBQUEsRUFBWW1CO0FBTFYsZUFBQSxDQUFWbkIsRUFPSS9SLENBUEorUixDQUFBQTtBQU9JL1IsYUFiSixNQUNJQSxDQUFBQSxDQUFTLElBQUk2QyxLQUFKLENBQUEsNENBQUEsTUFBQSxDQUFzRHdPLENBQXRELENBQUEsQ0FBVHJSLENBQUFBO0FBQStEcVIsV0FWM0VELENBQUFBO0FBVTJFQyxTQW5DbkZvQixFQUFBQSxLQUFBQSxDQW9EV3pTLENBcERYeVM7QUFvRFd6UztBQUFBQSxLQUdvQztBQUUvQ3VSLElBQUFBLFVBQUFBLEVBQVksRUFGbUM7QUFHL0MrQixJQUFBQSxzQkFBQUEsR0FBa0MsNEJBQUEsQ0EzUjFCblgsQ0EyUlJtWCxDQUgrQztBQUkvQ3BELElBQUFBLFVBQUFBLEVBQVk7QUFKbUMsR0FBbkQ7QUFPQTVTLEVBQUFBLENBQUFBLENBQUFBLENBQUFBLENBQU8yUyxFQUFQM1MsR0FBWThWLEVBQVo5ViIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSByZXF1aXJlIHNjb3BlXG52YXIgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHt9O1xuXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJ2YXIgZ2xvYmFsID1cbiAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYpIHx8XG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpXG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGdsb2JhbCxcbiAgaXRlcmFibGU6ICdTeW1ib2wnIGluIGdsb2JhbCAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgYmxvYjpcbiAgICAnRmlsZVJlYWRlcicgaW4gZ2xvYmFsICYmXG4gICAgJ0Jsb2InIGluIGdsb2JhbCAmJlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSkoKSxcbiAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gZ2xvYmFsLFxuICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBnbG9iYWxcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgfSwgdGhpcylcbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICB9XG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKG5hbWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGl0ZW1zLnB1c2godmFsdWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbn1cblxuZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgfVxuICByZXR1cm4gY2hhcnMuam9pbignJylcbn1cblxuZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gIGlmIChidWYuc2xpY2UpIHtcbiAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gIH0gZWxzZSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICB9XG59XG5cbmZ1bmN0aW9uIEJvZHkoKSB7XG4gIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgIC8qXG4gICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICBwcm92aWRlIHVzZWZ1bCB0ZXN0IGhhcm5lc3MgZmVhdHVyZXMgc3VjaCBhcyBmbHVzaC4gSG93ZXZlciwgb25cbiAgICAgIEVTNSBicm93c2VycyB3aXRob3V0IGZldGNoIG9yIFByb3h5IHN1cHBvcnQgcG9sbHlmaWxscyBtdXN0IGJlIHVzZWQ7XG4gICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgb24gdGhlIG9iamVjdCBiZWZvcmUgdGhlIFByb3h5IGlzIGNyZWF0ZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXNcbiAgICAgIFJlc3BvbnNlLmJvZHlVc2VkIGV4aXN0cyBvbiB0aGUgaW5zdGFuY2UsIHdoaWxlIG1haW50YWluaW5nIHRoZVxuICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgIF9pbml0Qm9keSBpcyBjYWxsZWQuXG4gICAgKi9cbiAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZFxuICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgIGlmICghYm9keSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICB2YXIgaXNDb25zdW1lZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgICAgcmV0dXJuIGlzQ29uc3VtZWRcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0ICsgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICB9XG4gIH1cblxuICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG52YXIgbWV0aG9kcyA9IFsnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUE9TVCcsICdQVVQnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbFxuICB0aGlzLnJlZmVycmVyID0gbnVsbFxuXG4gIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gIH1cbiAgdGhpcy5faW5pdEJvZHkoYm9keSlcblxuICBpZiAodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICBpZiAob3B0aW9ucy5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBvcHRpb25zLmNhY2hlID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICB2YXIgcmVQYXJhbVNlYXJjaCA9IC8oWz8mXSlfPVteJl0qL1xuICAgICAgaWYgKHJlUGFyYW1TZWFyY2gudGVzdCh0aGlzLnVybCkpIHtcbiAgICAgICAgLy8gSWYgaXQgYWxyZWFkeSBleGlzdHMgdGhlbiBzZXQgdGhlIHZhbHVlIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGEgbmV3ICdfJyBwYXJhbWV0ZXIgdG8gdGhlIGVuZCB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdmFyIHJlUXVlcnlTdHJpbmcgPSAvXFw/L1xuICAgICAgICB0aGlzLnVybCArPSAocmVRdWVyeVN0cmluZy50ZXN0KHRoaXMudXJsKSA/ICcmJyA6ICc/JykgKyAnXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHtib2R5OiB0aGlzLl9ib2R5SW5pdH0pXG59XG5cbmZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgYm9keVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gZm9ybVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKVxuICAvLyBBdm9pZGluZyBzcGxpdCB2aWEgcmVnZXggdG8gd29yayBhcm91bmQgYSBjb21tb24gSUUxMSBidWcgd2l0aCB0aGUgY29yZS1qcyAzLjYuMCByZWdleCBwb2x5ZmlsbFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzc1MVxuICBwcmVQcm9jZXNzZWRIZWFkZXJzXG4gICAgLnNwbGl0KCdcXHInKVxuICAgIC5tYXAoZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLmluZGV4T2YoJ1xcbicpID09PSAwID8gaGVhZGVyLnN1YnN0cigxLCBoZWFkZXIubGVuZ3RoKSA6IGhlYWRlclxuICAgIH0pXG4gICAgLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbkJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMjAwIDogb3B0aW9ucy5zdGF0dXNcbiAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICB0aGlzLnN0YXR1c1RleHQgPSBvcHRpb25zLnN0YXR1c1RleHQgPT09IHVuZGVmaW5lZCA/ICcnIDogJycgKyBvcHRpb25zLnN0YXR1c1RleHRcbiAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxufVxuXG5Cb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG5SZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgdXJsOiB0aGlzLnVybFxuICB9KVxufVxuXG5SZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMCwgc3RhdHVzVGV4dDogJyd9KVxuICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxudmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cblJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxufVxuXG5leHBvcnQgdmFyIERPTUV4Y2VwdGlvbiA9IGdsb2JhbC5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIHx8ICcnKVxuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZ2xvYmFsLmxvY2F0aW9uLmhyZWYgPyBnbG9iYWwubG9jYXRpb24uaHJlZiA6IHVybFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpXG5cbiAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXIgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykuaW5kZXhPZignYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJykgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcidcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5pdCAmJiB0eXBlb2YgaW5pdC5oZWFkZXJzID09PSAnb2JqZWN0JyAmJiAhKGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbml0LmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcblxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICB9KVxufVxuXG5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcblxuaWYgKCFnbG9iYWwuZmV0Y2gpIHtcbiAgZ2xvYmFsLmZldGNoID0gZmV0Y2hcbiAgZ2xvYmFsLkhlYWRlcnMgPSBIZWFkZXJzXG4gIGdsb2JhbC5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnbG9iYWwuUmVzcG9uc2UgPSBSZXNwb25zZVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn0iLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCIvLyB0c2xpbnQ6ZGlzYWJsZSBuby11bnNhZmUtYW55XG5leHBvcnQgY2xhc3MgTG9hZEludG9Eb2N1bWVudCB7XG4gICAgcHVibGljIHN0YXRpYyBzY3JpcHQodXJpOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBsZXQgc2NyaXB0TG9hZGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBzY3JpcHQ6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG5cbiAgICAgICAgZnVuY3Rpb24gbG9hZEhhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0TG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXNjcmlwdC5yZWFkeVN0YXRlIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImxvYWRlZFwiIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHRMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5nIHRoZSB1c2VyIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzY3JpcHQgY29tcGxldGVzIHRvIGxvYWQuXG4gICAgICAgIC8vIE5PVEUodXNlcik6IFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgaW4gSUUgZXZlbiB1cG9uIGVycm9yLiBJbiBhbnlcbiAgICAgICAgLy8gY2FzZSBpdCBpcyB0aGUgY2xpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gdmVyaWZ5IHRoYXQgdGhlIHNjcmlwdCByYW5cbiAgICAgICAgLy8gc3VjY2Vzc2Z1bGx5LlxuICAgICAgICBzY3JpcHQub25sb2FkID0gbG9hZEhhbmRsZXI7XG4gICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBsb2FkSGFuZGxlcjtcblxuICAgICAgICAvLyBBZGQgYW4gZXJyb3IgY2FsbGJhY2suXG4gICAgICAgIC8vIE5PVEUodXNlcik6IE5vdCBzdXBwb3J0ZWQgaW4gSUUuXG4gICAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNjcmlwdC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIkVycm9yIHdoaWxlIGxvYWRpbmcgc2NyaXB0LlwiKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQWRkIHRoZSBzY3JpcHQgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuXG4gICAgICAgIC8vIE5PVEUodXNlcik6IFNhZmFyaSBuZXZlciBsb2FkcyB0aGUgc2NyaXB0IGlmIHdlIGRvbid0IHNldFxuICAgICAgICAvLyB0aGUgc3JjIGF0dHJpYnV0ZSBiZWZvcmUgYXBwZW5kaW5nLlxuICAgICAgICBzY3JpcHQuc3JjID0gdXJpO1xuICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIiwgXCJ1c2UtY3JlZGVudGlhbHNcIik7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHN0eWxlU2hlZXQodXJpOiBzdHJpbmcsIGlnbm9yZUVycm9yOiBib29sZWFuLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZSA9ICgpID0+IGNhbGxiYWNrKHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHJlamVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpZ25vcmVFcnJvcikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIkVycm9yIHdoaWxlIGxvYWRpbmcgc3R5bGVzaGVldC5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0gPz8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJzdHlsZXNoZWV0XCIpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJ0ZXh0L2Nzc1wiKTtcbiAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCByZXNvbHZlKTtcbiAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHVyaSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRHJhZnRGdWxsSWQgfSBmcm9tIFwiLi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudERyYWZ0SW5mb1VybChkcmFmdElkOiBEcmFmdEZ1bGxJZCkge1xuICAgIC8vIE5PVEUg0K3RgtCwINGE0YPQvdC60YbQuNGPINC+0LHRitGP0LLQu9C10L3QsCDQvtGC0LTQtdC70YzQvdC+LCDQuNCx0L4g0L7QvdCwINCy0YXQvtC00LjRgiDQsiDRgdC+0YHRgtCw0LIgY2xpZW50LmpzINC4XG4gICAgLy8g0L3QtSDQtNC+0LvQttC90L4g0L/RgNC+0LjRgdGF0L7QtNC40YLRjCDRg9GC0LXQttC10LvQtdC90LjRjyBjbGllbnQuanMt0LBcbiAgICByZXR1cm4gYHYxL25zLyR7ZHJhZnRJZC5uc30vZHJhZnRzLyR7ZHJhZnRJZC5kcmFmdElkfS9jbGllbnQtZHJhZnQtaW5mb2A7XG59XG4iLCJmdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGllbnRTZXR0aW5ncyA9IHtcbiAgICBhdXRob3JpemVkOiBwYXJzZUJvb2woXCJ7YXV0aG9yaXplZH1cIiksXG4gICAgY2F1bGRyb25BcGlVcmw6IFwie2NhdWxkcm9uQXBpVXJsfVwiLFxuICAgIGlzVGVzdFNlcnZlcjogcGFyc2VCb29sKFwie2lzVGVzdFNlcnZlcn1cIiksXG4gICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogcGFyc2VCb29sKFwie3JlbmRlckNhY2hpbmdGb3JJRTh9XCIpLFxuICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogcGFyc2VCb29sKFwie25vcm1hbGl6YXRpb25PblNlcnZlcn1cIiksXG4gICAgbm9ybWF0aXZlVXJsOiBcIntub3JtYXRpdmVVcmx9XCIsXG4gICAgcmVzb3VyY2VzVmVyc2lvbjogXCJ7cmVzb3VyY2VzVmVyc2lvbn1cIixcbiAgICBrb250dXJEb21haW5zOiBcIntrb250dXJEb21haW5zfVwiLFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG5cbiAgdHJ5IHtcbiAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgZnJvbSBcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICB9IGVsc2Uge1xuICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgIHZhciBhID0gW251bGxdO1xuICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgICBpZiAoQ2xhc3MpIHNldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufSIsImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVGdW5jdGlvbiBmcm9tIFwiLi9pc05hdGl2ZUZ1bmN0aW9uLmpzXCI7XG5pbXBvcnQgY29uc3RydWN0IGZyb20gXCIuL2NvbnN0cnVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICB2YXIgX2NhY2hlID0gdHlwZW9mIE1hcCA9PT0gXCJmdW5jdGlvblwiID8gbmV3IE1hcCgpIDogdW5kZWZpbmVkO1xuXG4gIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFpc05hdGl2ZUZ1bmN0aW9uKENsYXNzKSkgcmV0dXJuIENsYXNzO1xuXG4gICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBfY2FjaGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpO1xuXG4gICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBXcmFwcGVyKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IFdyYXBwZXIsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgfTtcblxuICByZXR1cm4gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHtcbiAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpICE9PSAtMTtcbn0iLCJleHBvcnQgY2xhc3MgQXBwbGljYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJPcGVyYXRpb24gbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSA/PyBcIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRQcm9ncmFtU3RhdGVFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCBwcm9ncmFtIHN0YXRlXCIgKyAobWVzc2FnZSAhPSB1bmRlZmluZWQgPyBcIjogXCIgKyBtZXNzYWdlIDogXCJcIikpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGFyZ3VtZW50TmFtZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgbWVzc2FnZSAhPSB1bmRlZmluZWQgPyBgJHttZXNzYWdlfSAoYXJndW1lbnQ6ICR7YXJndW1lbnROYW1lfSlgIDogYEludmFsaWQgYXJndW1lbnQgdmFsdWU6ICR7YXJndW1lbnROYW1lfWBcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBpbmdFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHR5cGluZ1wiKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBFbXBsb3llZSB9IGZyb20gXCJAc2tia29udHVyL3N0YWZmLXNlbGVjdG9yLXdpZGdldFwiO1xuaW1wb3J0IHtcbiAgICBFbXBsb3llZUxpc3QsXG4gICAgR2V0RW1wbG95ZWVMaXN0UmVxdWVzdCxcbiAgICBHZXRXb3JraW5nRXZlbnRMaXN0UmVxdWVzdCxcbiAgICBXb3JraW5nRXZlbnRMaXN0LFxufSBmcm9tIFwiQHNrYmtvbnR1ci9zdGFmZi1jb21tb24vc3JjL0NsaWVudC9UeXBlc1wiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcIkVuZ2luZS9zcmMvRW5naW5lL0Zvcm0vTW9kZWxDaGFuZ2VFdmVudExpc3RlbmVyXCI7XG5cbmltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGVwIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0Zvcm1QYXJ0cy9Ub3VyL1RvdXJUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1BhdGgsIE1vZGVsVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsSG9va0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9FeHRlcm5hbEV2ZW50cy9FeHRlcm5hbEhvb2tGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkb25seU1vZGVsQ2h1bmsgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kZWxTdG9yaW5nL01vZGVsQ2h1bmtcIjtcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB7IE1vZGVsRXZlbnRzTGlzdGVuZXIgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L01vZGVsRXZlbnRzL01vZGVsRXZlbnRcIjtcbmltcG9ydCB7IERpZ2VzdFF1ZXJ5RmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvVHlwZXMvRGlnZXN0UXVlcnlGaWx0ZXJcIjtcbmltcG9ydCB7IElVcGRhdGVGb3JtTW9kZWxBY2Nlc3NvciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybU1vZGVsQWNjZXNzb3JcIjtcbmltcG9ydCB7IE1vZGFsT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RhbE1hbmFnZXIvSU1vZGFsU3RhdGVcIjtcbmltcG9ydCB7IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL01vZGVsUGF0aC9Nb2RlbFBhdGhcIjtcbmltcG9ydCB7IENhbGxJbml0U2VjdGlvbkxpZ2h0Ym94UHJvcHMsIEluaXRTZWN0aW9uRm9ybUxpZ2h0Ym94T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9QdWJsaWNGb3JtL0luaXRTZWN0aW9uTGlnaHRib3hcIjtcbmltcG9ydCB7IE1hc3NBY3Rpb25QYXJhbWV0ZXJzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9NYXNzQWN0aW9ucy9NYXNzQWN0aW9uUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgUHJpbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9QcmludC9QcmludFR5cGVcIjtcbmltcG9ydCB7IEZpYXNDbGllbnRJbml0T3B0aW9ucywgRmlhc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9WYWx1ZUVkaXRvcnMvRmlhcy9GaWFzSW5wdXQvRmlhc0FwaVwiO1xuaW1wb3J0IHsgSW5zdGFuY2VzRGVsZXRpbmdSdWxlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9JbnN0YW5jZXNEZWxldGluZy9JbnN0YW5jZXNEZWxldGluZ1J1bGVcIjtcblxuaW1wb3J0IHsgSUxlZ2FjeUZvcm0gfSBmcm9tIFwiLi9JTGVnYWN5Rm9ybVwiO1xuXG5leHBvcnQgdHlwZSBNb2RlbEV2ZW50UGF0aCA9XG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl1cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxDaGFuZ2VFdmVudFBhdGgocGF0aD86IHN0cmluZywgZmllbGROYW1lPzogc3RyaW5nKTogTW9kZWxFdmVudFBhdGgge1xuICAgIGlmIChmaWVsZE5hbWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXRoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGJlIGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGgsIGZpZWxkTmFtZV07XG4gICAgfVxuICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXTtcbn1cblxuZnVuY3Rpb24gbWFwQ2h1bmtWYWx1ZXMoY2h1bms6IFJlYWRvbmx5TW9kZWxDaHVuayk6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjaHVuaylcbiAgICAgICAgLmZpbHRlcihwYXRoID0+IGNodW5rW3BhdGhdICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaHVua1twYXRoXSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNodW5rW3BhdGhdO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBbcGF0aF06IHJlc3VsdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlQ2h1bmtWYWx1ZXMoY2h1bmtzOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+KTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICByZXR1cm4gY2h1bmtzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgY2h1bmspID0+ICh7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAuLi5jaHVuayxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgKTtcbn1cblxuY2xhc3MgTGVnYWN5UHVibGljRm9ybSBpbXBsZW1lbnRzIElQdWJsaWNGb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm06IElMZWdhY3lGb3JtO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZvcm06IElMZWdhY3lGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIGJhdGNoVXBkYXRlKHVwZGF0ZVByb2M6ICh1cGRhdGVBY2Nlc3NvcjogSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yKSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBQYXJ0aWFsPFNlcnZlckVycm9yTG9nPik6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgdmFsaWRhdGVDaGlsZHJlbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIF9fSU5URVJOQUxfX2ltcG9ydEZyb21FbXBsb3llZVNlcnZpY2UoKTogUHJvbWlzZTxFbXBsb3llZVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llZXMoZW1wbG95ZWVzOiBFbXBsb3llZVtdLCBvcHRpb25zPzogeyBzY2VuYXJpbz86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludChwcmludFR5cGU6IFByaW50VHlwZSwgYm9keT86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBwdWJsaWMgcnVuTWFzc0FjdGlvbihhY3Rpb25JZDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogTWFzc0FjdGlvblBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5R0lkKGdJZDogc3RyaW5nLCBmaWx0ZXI/OiBEaWdlc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0RGlnZXN0QXBpUGlja2xpc3QoZ0lkKS5xdWVyeShmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIHRocm93IEVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc3RvcEF1dG9zZW5kKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udW5tb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnVubW91bnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG91clN0ZXBzKCk6IFN0ZXBbXSB7XG4gICAgICAgIC8vIEZvciBvbGQga2V3ZWJcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0QWRkaXRpb25hbEVtcGxveWVlSW5mbyhmaWx0ZXJzOiBHZXRFbXBsb3llZUxpc3RSZXF1ZXN0KTogUHJvbWlzZTxFbXBsb3llZUxpc3QgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXb3JraW5nRXZlbnRzRm9yRW1wbG95ZWUoZmlsdGVyczogR2V0V29ya2luZ0V2ZW50TGlzdFJlcXVlc3QpOiBQcm9taXNlPFdvcmtpbmdFdmVudExpc3QgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSB0aGlzLmZvcm0ubW9kZWwuZ2V0KHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIGVycm9yQ291bnQgIT0gdW5kZWZpbmVkICYmIGVycm9yQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZFcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYobW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogc3RyaW5nLCB2YWx1ZTogTW9kZWxWYWx1ZSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQoXG4gICAgICAgIHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZyB8IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuICAgICAgICB2YWx1ZT86IE1vZGVsVmFsdWVcbiAgICApOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhPck1vZGVsQ2h1bmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGF0aE9yTW9kZWxDaHVuaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckNodW5rID0gT2JqZWN0LmtleXMocGF0aE9yTW9kZWxDaHVuaykucmVkdWNlPFJlYWRvbmx5TW9kZWxDaHVuaz4oXG4gICAgICAgICAgICAgICAgKHJlc3VsdCwgcGF0aCkgPT4gKHsgW3BhdGhdOiB7IHZhbHVlOiBwYXRoT3JNb2RlbENodW5rW3BhdGhdIH0sIC4uLnJlc3VsdCB9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLmZpbGwoaW5uZXJDaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5zZXQocGF0aE9yTW9kZWxDaHVuaywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLnNldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3Igb2JqZWN0IHdpdGggcGF0aC12YWx1ZSBwYWlyc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhdGhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhPckFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBhdGhPckFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5tYXAocGF0aCA9PiBtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aCkpKVxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2U8QXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pj4oKHJlc3VsdCwgYXJyYXkpID0+IHJlc3VsdC5jb25jYXQoYXJyYXkpLCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPckFycmF5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGhPckFycmF5KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhPckFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uZ2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBhcnJheSBvZiBwYXRoc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUocGF0aDogc3RyaW5nKTogTW9kZWxWYWx1ZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLm1vZGVsLmdldChwYXRoLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5U3VidHJlZShcbiAgICAgICAgc291cmNlQmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgdGFyZ2V0QmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgZG9Ob3RDb3B5UGF0aHM/OiBzdHJpbmdbXVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJbnN0YW5jZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHV1aWRHZW5lcmF0ZSgpOiBzdHJpbmcge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93TW9kYWwob3B0aW9uczogTW9kYWxPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNlY3Rpb24ob3B0aW9uczogSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGxJbml0U2VjdGlvbihvcHRpb25zOiBDYWxsSW5pdFNlY3Rpb25MaWdodGJveFByb3BzKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZpYXNBcGlDbGllbnQob3B0aW9uczogRmlhc0NsaWVudEluaXRPcHRpb25zKTogRmlhc0FwaSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5FbXBsb3llZUVkaXRvcihlbXBsb3llZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlcyhwYXRoOiBzdHJpbmcsIGluc3RhbmNlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNPbkNvbnRyb2xJZkV4aXN0KHBhdGg6IEJpbmRpbmdQYXRoKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1dG9GaWVsZHNUb0F1dG9WYWx1ZShwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5zdXJlSW5zdGFuY2VGdWxseUxvYWRlZChcbiAgICAgICAgYmluZGluZ1BhdGg6IHN0cmluZyB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIC4uLmluc3RhbmNlczogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzQnlSdWxlcyhydWxlczogSW5zdGFuY2VzRGVsZXRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm06IElGb3JtKTogSVB1YmxpY0Zvcm0ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbmV3IExlZ2FjeVB1YmxpY0Zvcm0oZm9ybSBhcyBJTGVnYWN5Rm9ybSk7XG59XG4iLCIvKiB0c2xpbnQ6ZGlzYWJsZTpuby1udWxsLWtleXdvcmQgbm8tYW55IG5vLXVuc2FmZS1hbnkgKi9cbmltcG9ydCB7IGZldGNoIH0gZnJvbSBcIndoYXR3Zy1mZXRjaFwiO1xuXG5pbXBvcnQgeyBFcnJvckZpcnN0Q2FsbGJhY2ssIHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB7IExvYWRJbnRvRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vSGVscGVycy9Mb2FkSW50b0RvY3VtZW50XCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50IH0gZnJvbSBcIi4uL1R5cGVzL0lLZVdlYlRlbXBsYXRlc0FwaUNsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDbGllbnREcmFmdEluZm9SZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0NsaWVudERyYWZ0SW5mb1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBnZXRDbGllbnREcmFmdEluZm9VcmwgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmxcIjtcbmltcG9ydCB7IEFVT09wdGlvbnMgfSBmcm9tIFwiLi4vVHlwZXMvQVVPT3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRFdmVudHNTdGF0aWMgfSBmcm9tIFwiLi4vLi4vQ29udHJvbHMvSW50ZXJuYWxzL0xheW91dEV2ZW50cy9MYXlvdXRFdmVudHNcIjtcblxuaW1wb3J0IHsgY2xpZW50U2V0dGluZ3MgfSBmcm9tIFwiLi9DbGllbnRTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGVnYWN5UHVibGljRm9ybSB9IGZyb20gXCIuL0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybVwiO1xuXG50eXBlIEZvcm1Db250YWluZXIgPSBzdHJpbmcgfCBIVE1MRWxlbWVudDtcblxudHlwZSBFbmdpbmVFbnRyeVBvaW50ID0gKCkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG4gICAgbG9hZEVycm9yPzogdW5rbm93bjtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICAgIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgICAgICBpbnRlcmZhY2UgR2xvYmFsIHtcbiAgICAgICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IGdsb2JhbDogV2luZG93O1xuXG5mdW5jdGlvbiBkZWZhdWx0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgLyogZW1wdHkgKi9cbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1cmwocmVsYXRpdmVVcmw6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBnbG9iYWwuQ0Yua2Vmb3Jtc1VybCB8fCBcIlwiO1xuXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7cmVsYXRpdmVVcmx9YC5yZXBsYWNlKC8oW146XSlcXC97Mix9L2csIFwiJDEvXCIpO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiB1bmRlZmluZWQgfCBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgaWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgICBpZiAocGFyYW1WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFydHMucHVzaChgJHtwYXJhbU5hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChxdWVyeVBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGggKyBcIj9cIiArIHF1ZXJ5UGFydHMuam9pbihcIiZcIik7XG59XG5cbmZ1bmN0aW9uIGlzQWxsb3dlZChkb21haW5zOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXig/OiR7ZG9tYWlucy5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKS5yZXBsYWNlKC9cXCovZywgXCJbYS16MC05LS5dK1wiKX0pJGApLnRlc3QoXG4gICAgICAgIGdsb2JhbC5sb2NhdGlvbi5ob3N0XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGdsb2JhbC5sb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcP3wjfCYpLywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgIC5tYXAocGFyYW0gPT4gcGFyYW0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKS5zcGxpdChcIj1cIikubWFwKGRlY29kZVVSSUNvbXBvbmVudCkpXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgLmZpbmQoKFtrZXldKSA9PiBrZXkgPT0gbmFtZSkgfHwgW10pWzFdXG4gICAgKTtcbn1cblxudHlwZSBUYXNrID0gKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwodGFza3M6IFRhc2tbXSwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGNvbXBsZXRlZCA9IDA7XG5cbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICB0YXNrKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgU3RhcnRGb3JtU2V0dGluZyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uLCByZXNvdXJjZXNWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBldmVudEVtaXR0ZXI/OiBMYXlvdXRFdmVudHNTdGF0aWM7XG4gICAgZW1wbG95ZXJJZD86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nKTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludCB7XG4gICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBnbG9iYWxbZW5naW5lVmVyc2lvbl0gJiYgZ2xvYmFsW2VuZ2luZVZlcnNpb25dLmRlZmF1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0KFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4gPSBkZWZhdWx0Q2FsbGJhY2tcbik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgY29uc3QgeyBucywgZHJhZnRJZCB9ID0gb3B0aW9ucztcblxuICAgIGlmICghaXNBbGxvd2VkKGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChnZXRDbGllbnREcmFmdEluZm9VcmwoeyBuczogbnMsIGRyYWZ0SWQ6IGRyYWZ0SWQgfSkpLCB7XG4gICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0geyBtZXRob2Q6IFwiR0VUXCIgfTtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gb3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBBVVRILlNJRCAke29wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgfVxuICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG5cbiAgICBmZXRjaEltcGwoY2xpZW50RHJhZnRVcmwsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAudGhlbih4ID0+IHguanNvbigpKVxuICAgICAgICAudGhlbigoY2xpZW50RHJhZnRJbmZvOiBDbGllbnREcmFmdEluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gY2xpZW50RHJhZnRJbmZvLmdmdjtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXplZDogY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCxcbiAgICAgICAgICAgICAgICBjYXVsZHJvbkFwaVVybDogY2xpZW50U2V0dGluZ3MuY2F1bGRyb25BcGlVcmwsXG4gICAgICAgICAgICAgICAgaXNUZXN0U2VydmVyOiBjbGllbnRTZXR0aW5ncy5pc1Rlc3RTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogY2xpZW50U2V0dGluZ3MucmVuZGVyQ2FjaGluZ0ZvcklFOCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IGNsaWVudFNldHRpbmdzLm5vcm1hbGl6YXRpb25PblNlcnZlcixcbiAgICAgICAgICAgICAgICBub3JtYXRpdmVVcmw6IGNsaWVudFNldHRpbmdzLm5vcm1hdGl2ZVVybCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBjbGllbnRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGtvbnR1ckRvbWFpbnM6IGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAuLi5jbGllbnREcmFmdEluZm8sXG4gICAgICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IG9wdGlvbnMuZmVlZGJhY2tFbmFibGVkID8/IGNsaWVudERyYWZ0SW5mby5mZWVkYmFja0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsZWFuRm9ybTogb3B0aW9ucy5pc0Rpc2FibGVkQ2xlYW5Gb3JtID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbG9hZEZvcm0oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBnZnY6IGV4dGVuZGVkU2V0dGluZ3MuZ2Z2LFxuICAgICAgICAgICAgICAgICAgICBlbmdpbmVWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLmVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1ZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2VzVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgdGhlbWU6IGV4dGVuZGVkU2V0dGluZ3MudGhlbWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2FkRXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEVycm9yIHx8ICFnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoYGR5bmFtaWMgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciBnZnYgJHtnZnZ9YCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlciA9IGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmV4dGVuZGVkU2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzQXBpOiBvcHRpb25zLnRlbXBsYXRlc0FwaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtOiByZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spO1xufVxuXG5jb25zdCBDYW5keUNsaWVudEV4cG9ydHM6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIgPSB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVudHJ5UG9pbnQ6IHt9LFxuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4fVwiKSxcbiAgICBrZWZvcm1zVXJsOiBcIntrZWZvcm1zVXJsfVwiLFxufTtcblxuZ2xvYmFsLkNGID0gQ2FuZHlDbGllbnRFeHBvcnRzO1xuXG5leHBvcnQgeyBDYW5keUNsaWVudEV4cG9ydHMgfTtcbiIsImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcblxuICBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcblxuICB2YXIgX3MsIF9lO1xuXG4gIHRyeSB7XG4gICAgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsIi8qKipcbiAqINCh0YLRgNC+0LPQvtGC0LjQv9C40LfQuNGA0L7QstCw0L3QvdCw0Y8g0LfQsNC80LXQvdCwINC00LvRjyBCb29sZWFuKC4uLilcbiAqINCe0LHRi9GH0L3QviDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LTQu9GPIFsuLi5dLmZpbHRlcihpc05vdE51bGxPclVuZGVmaW5lZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiBUKTogaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIHJldHVybiBpbnB1dCAhPSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlVbmtub3duRXJyb3IoZXJyb3I6IHVua25vd24pOiB1bmRlZmluZWQgfCBzdHJpbmcge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgZXJyb3I/LltcIm1lc3NhZ2VcIl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBhc3NlcnRzIGlucHV0IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgICBpZiAoIWlzTm90TnVsbE9yVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlIG11c3QgYmUgZGVmaW5lZGApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgdHlwZSBFcnJvckZpcnN0Q2FsbGJhY2s8VD4gPSAoLi4uYXJnczogW0Vycm9yLCBudWxsIHwgdW5kZWZpbmVkXSB8IFtudWxsIHwgdW5kZWZpbmVkLCBUXSB8IFtFcnJvcl0pID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWplY3QobWVzc2FnZT86IHN0cmluZyB8IEVycm9yKTogbmV2ZXIge1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiB8fCBtZXNzYWdlID09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSA/PyBcIlVuZGVmaW5lZCBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBtZXNzYWdlO1xuICAgIH1cbn1cblxudHlwZSBBcnJheU9mTGVuZ3RoPFRJdGVtLCBUTGVuZ3RoIGV4dGVuZHMgbnVtYmVyLCBUUmVzdCBleHRlbmRzIFRJdGVtW10gPSBbXT4gPSBUUmVzdCBleHRlbmRzIHsgbGVuZ3RoOiBUTGVuZ3RoIH1cbiAgICA/IFRSZXN0XG4gICAgOiBBcnJheU9mTGVuZ3RoPFRJdGVtLCBUTGVuZ3RoLCBbVEl0ZW0sIC4uLlRSZXN0XT47XG5cbmV4cG9ydCB0eXBlIE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoIGV4dGVuZHMgbnVtYmVyLCBUUmVzdCBleHRlbmRzIFRJdGVtW10gPSBbXT4gPSBUUmVzdCBleHRlbmRzIHtcbiAgICBsZW5ndGg6IFRMZW5ndGg7XG59XG4gICAgPyBbLi4uVFJlc3QsIC4uLlRJdGVtW11dXG4gICAgOiBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCwgWy4uLlRSZXN0LCBUSXRlbV0+O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWw8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID49IG1pbkxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbkxlbmd0aE9yVW5kZWZpbmVkPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiB1bmRlZmluZWQgfCBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgaWYgKGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBtaW5MZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID09PSBsZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SGFzQXRMZWFzdE9uZUl0ZW08VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogYXNzZXJ0cyBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgaWYgKCFhcnJheUlzTm90RW1wdHkoaXRlbXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBiZSBub3QgZW1wdHlgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWFycmF5SGFzTGVuZ3RoKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgc2hvdWxkIGhhcyBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWw8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgaGF2ZSBtaW5pbWFsIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOZXZlcihuZXZlckFyZ3VtZW50OiBuZXZlcik6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFuZEdldFN0cmluZyhuZXZlckFyZ3VtZW50OiBuZXZlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke25ldmVyQXJndW1lbnR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkFzeW5jQWN0aW9uKGFjdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICBhY3Rpb24oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yRW1wdHkoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGlucHV0IGlzIHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dCA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TnVsbE9yRW1wdHkoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGlucHV0IGlzIHN0cmluZyB7XG4gICAgcmV0dXJuICFpc051bGxPckVtcHR5KGlucHV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yV2hpdGVTcGFjZShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IGlucHV0IGlzIHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQudHJpbSgpID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJpbUxhc3RTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5zbGljZSgtMSkgPT09IFwiL1wiID8gdXJsLnNsaWNlKDAsIC0xKSA6IHVybDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydElzPFQ+KHZhbHVlOiBUKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
1290
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0IiwiZSIsInIiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwibGVuZ3RoIiwibiIsIkFycmF5IiwiZyIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIndpbmRvdyIsInNlbGYiLCJvIiwiaSIsIlN5bWJvbCIsImEiLCJCbG9iIiwidSIsInMiLCJjIiwibCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImYiLCJTdHJpbmciLCJ0ZXN0IiwiVHlwZUVycm9yIiwidG9Mb3dlckNhc2UiLCJoIiwiZCIsIm5leHQiLCJzaGlmdCIsImRvbmUiLCJpdGVyYXRvciIsInAiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiaXNBcnJheSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ5IiwiYm9keVVzZWQiLCJQcm9taXNlIiwicmVqZWN0IiwidiIsIm9ubG9hZCIsInJlc3VsdCIsIm9uZXJyb3IiLCJlcnJvciIsIm0iLCJGaWxlUmVhZGVyIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJiIiwic2xpY2UiLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsInNldCIsImJ1ZmZlciIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsImlzUHJvdG90eXBlT2YiLCJfYm9keUJsb2IiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJEYXRhVmlldyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJoZWFkZXJzIiwiZ2V0IiwidHlwZSIsImJsb2IiLCJyZXNvbHZlIiwiRXJyb3IiLCJhcnJheUJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJ0aGVuIiwidGV4dCIsInJlYWRBc1RleHQiLCJmcm9tQ2hhckNvZGUiLCJqb2luIiwiZm9ybURhdGEiLCJPIiwianNvbiIsIkpTT04iLCJwYXJzZSIsImRlbGV0ZSIsImhhcyIsImhhc093blByb3BlcnR5Iiwia2V5cyIsInB1c2giLCJ2YWx1ZXMiLCJlbnRyaWVzIiwidyIsIkUiLCJib2R5IiwidXJsIiwiY3JlZGVudGlhbHMiLCJtZXRob2QiLCJtb2RlIiwic2lnbmFsIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImNhY2hlIiwicmVwbGFjZSIsIkRhdGUiLCJnZXRUaW1lIiwidHJpbSIsInNwbGl0IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiayIsInN0YXR1cyIsIm9rIiwic3RhdHVzVGV4dCIsImNsb25lIiwiaiIsInJlZGlyZWN0IiwiUmFuZ2VFcnJvciIsImxvY2F0aW9uIiwiQSIsIkRPTUV4Y2VwdGlvbiIsIm1lc3NhZ2UiLCJuYW1lIiwic3RhY2siLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIl8iLCJhYm9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInN1YnN0ciIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2UiLCJyZXNwb25zZVRleHQiLCJzZXRUaW1lb3V0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsIm9wZW4iLCJocmVmIiwid2l0aENyZWRlbnRpYWxzIiwicmVzcG9uc2VUeXBlIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJQIiwiVCIsImtleSIsIlMiLCJwb2x5ZmlsbCIsImZldGNoIiwiSGVhZGVycyIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIngiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInNyYyIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiQiIsImNvbmNhdCIsIm5zIiwiZHJhZnRJZCIsIkMiLCJCb29sZWFuIiwiSSIsImF1dGhvcml6ZWQiLCJjYXVsZHJvbkFwaVVybCIsImlzVGVzdFNlcnZlciIsInJlbmRlckNhY2hpbmdGb3JJRTgiLCJub3JtYWxpemF0aW9uT25TZXJ2ZXIiLCJub3JtYXRpdmVVcmwiLCJyZXNvdXJjZXNWZXJzaW9uIiwia29udHVyRG9tYWlucyIsIkwiLCJGIiwiVSIsImFyZ3VtZW50cyIsImFwcGx5IiwiRCIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiUiIsIk0iLCJSZWZlcmVuY2VFcnJvciIsIk4iLCJnZXRQcm90b3R5cGVPZiIsIlYiLCJSZWZsZWN0IiwiY29uc3RydWN0Iiwic2hhbSIsIlByb3h5IiwidmFsdWVPZiIsIkciLCJiaW5kIiwieiIsIk1hcCIsIl93cmFwTmF0aXZlU3VwZXIiLCJxIiwiSCIsIloiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiYXJnIiwid3JhcCIsIl9pbnZva2UiLCJfX2F3YWl0IiwiZGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsInJldHVybiIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwiYXdyYXAiLCJBc3luY0l0ZXJhdG9yIiwiYXN5bmMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInN0b3AiLCJydmFsIiwiY29tcGxldGUiLCJmaW5pc2giLCJjYXRjaCIsImRlbGVnYXRlWWllbGQiLCIkIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiWCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiWSIsIkoiLCJXIiwicmVkdWNlIiwiSyIsImZvcm0iLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE1hbmFnZXIiLCJvbiIsIm9mZiIsImNoYW5nZVNldCIsInN0b3BBdXRvc2VuZCIsInVubW91bnQiLCJtb2RlbCIsImdldENodW5rIiwic2V0dGluZ3MiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZmlsbCIsIlEiLCJ0dCIsImV0IiwicnQiLCJDRiIsImtlZm9ybXNVcmwiLCJudCIsImVuY29kZVVSSUNvbXBvbmVudCIsIm90IiwiUmVnRXhwIiwiaG9zdCIsIml0Iiwic2VhcmNoIiwiZmluZCIsImZyb20iLCJhdCIsImdmdiIsImVuZ2luZVZlcnNpb24iLCJlbnRyeVBvaW50IiwicmVzb3VyY2Vab25lIiwic3R5bGVTaGVldCIsInNjcmlwdCIsInV0IiwicHVibGljRm9ybSIsInN0IiwiZGVmYXVsdCIsImN0Iiwic3RhcnQiLCJhdXRoZW50aWNhdGlvbiIsImF1dGhTaWQiLCJBdXRob3JpemF0aW9uIiwiZmVlZGJhY2tFbmFibGVkIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJ0aGVtZSIsInRlbXBsYXRlc0FwaSIsInJlbmRlckZvcm0iLCJwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4Il0sInNvdXJjZXMiOlsid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy93aGF0d2ctZmV0Y2gvZmV0Y2guanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0dldENsaWVudERyYWZ0SW5mb1VybC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnRTZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY29uc3RydWN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS93cmFwTmF0aXZlU3VwZXIuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2lzTmF0aXZlRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0Vycm9ycy50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50LnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL1R5cGluZ1V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSByZXF1aXJlIHNjb3BlXG52YXIgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHt9O1xuXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJ2YXIgZ2xvYmFsID1cbiAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYpIHx8XG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpXG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGdsb2JhbCxcbiAgaXRlcmFibGU6ICdTeW1ib2wnIGluIGdsb2JhbCAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgYmxvYjpcbiAgICAnRmlsZVJlYWRlcicgaW4gZ2xvYmFsICYmXG4gICAgJ0Jsb2InIGluIGdsb2JhbCAmJlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSkoKSxcbiAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gZ2xvYmFsLFxuICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBnbG9iYWxcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgfSwgdGhpcylcbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICB9XG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKG5hbWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGl0ZW1zLnB1c2godmFsdWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbn1cblxuZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgfVxuICByZXR1cm4gY2hhcnMuam9pbignJylcbn1cblxuZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gIGlmIChidWYuc2xpY2UpIHtcbiAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gIH0gZWxzZSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICB9XG59XG5cbmZ1bmN0aW9uIEJvZHkoKSB7XG4gIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgIC8qXG4gICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICBwcm92aWRlIHVzZWZ1bCB0ZXN0IGhhcm5lc3MgZmVhdHVyZXMgc3VjaCBhcyBmbHVzaC4gSG93ZXZlciwgb25cbiAgICAgIEVTNSBicm93c2VycyB3aXRob3V0IGZldGNoIG9yIFByb3h5IHN1cHBvcnQgcG9sbHlmaWxscyBtdXN0IGJlIHVzZWQ7XG4gICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgb24gdGhlIG9iamVjdCBiZWZvcmUgdGhlIFByb3h5IGlzIGNyZWF0ZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXNcbiAgICAgIFJlc3BvbnNlLmJvZHlVc2VkIGV4aXN0cyBvbiB0aGUgaW5zdGFuY2UsIHdoaWxlIG1haW50YWluaW5nIHRoZVxuICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgIF9pbml0Qm9keSBpcyBjYWxsZWQuXG4gICAgKi9cbiAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZFxuICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgIGlmICghYm9keSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICB2YXIgaXNDb25zdW1lZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgICAgcmV0dXJuIGlzQ29uc3VtZWRcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0ICsgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICB9XG4gIH1cblxuICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG52YXIgbWV0aG9kcyA9IFsnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUE9TVCcsICdQVVQnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbFxuICB0aGlzLnJlZmVycmVyID0gbnVsbFxuXG4gIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gIH1cbiAgdGhpcy5faW5pdEJvZHkoYm9keSlcblxuICBpZiAodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICBpZiAob3B0aW9ucy5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBvcHRpb25zLmNhY2hlID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICB2YXIgcmVQYXJhbVNlYXJjaCA9IC8oWz8mXSlfPVteJl0qL1xuICAgICAgaWYgKHJlUGFyYW1TZWFyY2gudGVzdCh0aGlzLnVybCkpIHtcbiAgICAgICAgLy8gSWYgaXQgYWxyZWFkeSBleGlzdHMgdGhlbiBzZXQgdGhlIHZhbHVlIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGEgbmV3ICdfJyBwYXJhbWV0ZXIgdG8gdGhlIGVuZCB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdmFyIHJlUXVlcnlTdHJpbmcgPSAvXFw/L1xuICAgICAgICB0aGlzLnVybCArPSAocmVRdWVyeVN0cmluZy50ZXN0KHRoaXMudXJsKSA/ICcmJyA6ICc/JykgKyAnXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHtib2R5OiB0aGlzLl9ib2R5SW5pdH0pXG59XG5cbmZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgYm9keVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gZm9ybVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKVxuICAvLyBBdm9pZGluZyBzcGxpdCB2aWEgcmVnZXggdG8gd29yayBhcm91bmQgYSBjb21tb24gSUUxMSBidWcgd2l0aCB0aGUgY29yZS1qcyAzLjYuMCByZWdleCBwb2x5ZmlsbFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzc1MVxuICBwcmVQcm9jZXNzZWRIZWFkZXJzXG4gICAgLnNwbGl0KCdcXHInKVxuICAgIC5tYXAoZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLmluZGV4T2YoJ1xcbicpID09PSAwID8gaGVhZGVyLnN1YnN0cigxLCBoZWFkZXIubGVuZ3RoKSA6IGhlYWRlclxuICAgIH0pXG4gICAgLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbkJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMjAwIDogb3B0aW9ucy5zdGF0dXNcbiAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICB0aGlzLnN0YXR1c1RleHQgPSBvcHRpb25zLnN0YXR1c1RleHQgPT09IHVuZGVmaW5lZCA/ICcnIDogJycgKyBvcHRpb25zLnN0YXR1c1RleHRcbiAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxufVxuXG5Cb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG5SZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgdXJsOiB0aGlzLnVybFxuICB9KVxufVxuXG5SZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMCwgc3RhdHVzVGV4dDogJyd9KVxuICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxudmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cblJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxufVxuXG5leHBvcnQgdmFyIERPTUV4Y2VwdGlvbiA9IGdsb2JhbC5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIHx8ICcnKVxuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZ2xvYmFsLmxvY2F0aW9uLmhyZWYgPyBnbG9iYWwubG9jYXRpb24uaHJlZiA6IHVybFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpXG5cbiAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXIgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykuaW5kZXhPZignYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJykgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcidcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5pdCAmJiB0eXBlb2YgaW5pdC5oZWFkZXJzID09PSAnb2JqZWN0JyAmJiAhKGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbml0LmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcblxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICB9KVxufVxuXG5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcblxuaWYgKCFnbG9iYWwuZmV0Y2gpIHtcbiAgZ2xvYmFsLmZldGNoID0gZmV0Y2hcbiAgZ2xvYmFsLkhlYWRlcnMgPSBIZWFkZXJzXG4gIGdsb2JhbC5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnbG9iYWwuUmVzcG9uc2UgPSBSZXNwb25zZVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn0iLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCIvLyB0c2xpbnQ6ZGlzYWJsZSBuby11bnNhZmUtYW55XG5leHBvcnQgY2xhc3MgTG9hZEludG9Eb2N1bWVudCB7XG4gICAgcHVibGljIHN0YXRpYyBzY3JpcHQodXJpOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBsZXQgc2NyaXB0TG9hZGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBzY3JpcHQ6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG5cbiAgICAgICAgZnVuY3Rpb24gbG9hZEhhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0TG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXNjcmlwdC5yZWFkeVN0YXRlIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImxvYWRlZFwiIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHRMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5nIHRoZSB1c2VyIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzY3JpcHQgY29tcGxldGVzIHRvIGxvYWQuXG4gICAgICAgIC8vIE5PVEUodXNlcik6IFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgaW4gSUUgZXZlbiB1cG9uIGVycm9yLiBJbiBhbnlcbiAgICAgICAgLy8gY2FzZSBpdCBpcyB0aGUgY2xpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gdmVyaWZ5IHRoYXQgdGhlIHNjcmlwdCByYW5cbiAgICAgICAgLy8gc3VjY2Vzc2Z1bGx5LlxuICAgICAgICBzY3JpcHQub25sb2FkID0gbG9hZEhhbmRsZXI7XG4gICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBsb2FkSGFuZGxlcjtcblxuICAgICAgICAvLyBBZGQgYW4gZXJyb3IgY2FsbGJhY2suXG4gICAgICAgIC8vIE5PVEUodXNlcik6IE5vdCBzdXBwb3J0ZWQgaW4gSUUuXG4gICAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNjcmlwdC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIkVycm9yIHdoaWxlIGxvYWRpbmcgc2NyaXB0LlwiKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQWRkIHRoZSBzY3JpcHQgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuXG4gICAgICAgIC8vIE5PVEUodXNlcik6IFNhZmFyaSBuZXZlciBsb2FkcyB0aGUgc2NyaXB0IGlmIHdlIGRvbid0IHNldFxuICAgICAgICAvLyB0aGUgc3JjIGF0dHJpYnV0ZSBiZWZvcmUgYXBwZW5kaW5nLlxuICAgICAgICBzY3JpcHQuc3JjID0gdXJpO1xuICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIiwgXCJ1c2UtY3JlZGVudGlhbHNcIik7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHN0eWxlU2hlZXQodXJpOiBzdHJpbmcsIGlnbm9yZUVycm9yOiBib29sZWFuLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZSA9ICgpID0+IGNhbGxiYWNrKHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHJlamVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpZ25vcmVFcnJvcikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIkVycm9yIHdoaWxlIGxvYWRpbmcgc3R5bGVzaGVldC5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0gPz8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJzdHlsZXNoZWV0XCIpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJ0ZXh0L2Nzc1wiKTtcbiAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCByZXNvbHZlKTtcbiAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHVyaSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRHJhZnRGdWxsSWQgfSBmcm9tIFwiLi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudERyYWZ0SW5mb1VybChkcmFmdElkOiBEcmFmdEZ1bGxJZCkge1xuICAgIC8vIE5PVEUg0K3RgtCwINGE0YPQvdC60YbQuNGPINC+0LHRitGP0LLQu9C10L3QsCDQvtGC0LTQtdC70YzQvdC+LCDQuNCx0L4g0L7QvdCwINCy0YXQvtC00LjRgiDQsiDRgdC+0YHRgtCw0LIgY2xpZW50LmpzINC4XG4gICAgLy8g0L3QtSDQtNC+0LvQttC90L4g0L/RgNC+0LjRgdGF0L7QtNC40YLRjCDRg9GC0LXQttC10LvQtdC90LjRjyBjbGllbnQuanMt0LBcbiAgICByZXR1cm4gYHYxL25zLyR7ZHJhZnRJZC5uc30vZHJhZnRzLyR7ZHJhZnRJZC5kcmFmdElkfS9jbGllbnQtZHJhZnQtaW5mb2A7XG59XG4iLCJmdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGllbnRTZXR0aW5ncyA9IHtcbiAgICBhdXRob3JpemVkOiBwYXJzZUJvb2woXCJ7YXV0aG9yaXplZH1cIiksXG4gICAgY2F1bGRyb25BcGlVcmw6IFwie2NhdWxkcm9uQXBpVXJsfVwiLFxuICAgIGlzVGVzdFNlcnZlcjogcGFyc2VCb29sKFwie2lzVGVzdFNlcnZlcn1cIiksXG4gICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogcGFyc2VCb29sKFwie3JlbmRlckNhY2hpbmdGb3JJRTh9XCIpLFxuICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogcGFyc2VCb29sKFwie25vcm1hbGl6YXRpb25PblNlcnZlcn1cIiksXG4gICAgbm9ybWF0aXZlVXJsOiBcIntub3JtYXRpdmVVcmx9XCIsXG4gICAgcmVzb3VyY2VzVmVyc2lvbjogXCJ7cmVzb3VyY2VzVmVyc2lvbn1cIixcbiAgICBrb250dXJEb21haW5zOiBcIntrb250dXJEb21haW5zfVwiLFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG5cbiAgdHJ5IHtcbiAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgZnJvbSBcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICB9IGVsc2Uge1xuICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgIHZhciBhID0gW251bGxdO1xuICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgICBpZiAoQ2xhc3MpIHNldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufSIsImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVGdW5jdGlvbiBmcm9tIFwiLi9pc05hdGl2ZUZ1bmN0aW9uLmpzXCI7XG5pbXBvcnQgY29uc3RydWN0IGZyb20gXCIuL2NvbnN0cnVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICB2YXIgX2NhY2hlID0gdHlwZW9mIE1hcCA9PT0gXCJmdW5jdGlvblwiID8gbmV3IE1hcCgpIDogdW5kZWZpbmVkO1xuXG4gIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFpc05hdGl2ZUZ1bmN0aW9uKENsYXNzKSkgcmV0dXJuIENsYXNzO1xuXG4gICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBfY2FjaGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpO1xuXG4gICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBXcmFwcGVyKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IFdyYXBwZXIsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgfTtcblxuICByZXR1cm4gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHtcbiAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpICE9PSAtMTtcbn0iLCJleHBvcnQgY2xhc3MgQXBwbGljYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJPcGVyYXRpb24gbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSA/PyBcIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRQcm9ncmFtU3RhdGVFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCBwcm9ncmFtIHN0YXRlXCIgKyAobWVzc2FnZSAhPSB1bmRlZmluZWQgPyBcIjogXCIgKyBtZXNzYWdlIDogXCJcIikpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGFyZ3VtZW50TmFtZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgbWVzc2FnZSAhPSB1bmRlZmluZWQgPyBgJHttZXNzYWdlfSAoYXJndW1lbnQ6ICR7YXJndW1lbnROYW1lfSlgIDogYEludmFsaWQgYXJndW1lbnQgdmFsdWU6ICR7YXJndW1lbnROYW1lfWBcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBpbmdFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHR5cGluZ1wiKTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1xuICAgIEVtcGxveWVlLFxuICAgIEVtcGxveWVlTGlzdCxcbiAgICBHZXRFbXBsb3llZUxpc3RSZXF1ZXN0LFxuICAgIEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0LFxuICAgIFdvcmtpbmdFdmVudExpc3QsXG59IGZyb20gXCJAc2tia29udHVyL3N0YWZmLXNlbGVjdG9yLXdpZGdldFwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcIkVuZ2luZS9zcmMvRW5naW5lL0Zvcm0vTW9kZWxDaGFuZ2VFdmVudExpc3RlbmVyXCI7XG5cbmltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGVwIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0Zvcm1QYXJ0cy9Ub3VyL1RvdXJUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1BhdGgsIE1vZGVsVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsSG9va0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9FeHRlcm5hbEV2ZW50cy9FeHRlcm5hbEhvb2tGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkb25seU1vZGVsQ2h1bmsgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kZWxTdG9yaW5nL01vZGVsQ2h1bmtcIjtcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB7IE1vZGVsRXZlbnRzTGlzdGVuZXIgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L01vZGVsRXZlbnRzL01vZGVsRXZlbnRcIjtcbmltcG9ydCB7IERpZ2VzdFF1ZXJ5RmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvVHlwZXMvRGlnZXN0UXVlcnlGaWx0ZXJcIjtcbmltcG9ydCB7IElVcGRhdGVGb3JtTW9kZWxBY2Nlc3NvciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybU1vZGVsQWNjZXNzb3JcIjtcbmltcG9ydCB7IE1vZGFsT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RhbE1hbmFnZXIvSU1vZGFsU3RhdGVcIjtcbmltcG9ydCB7IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL01vZGVsUGF0aC9Nb2RlbFBhdGhcIjtcbmltcG9ydCB7IENhbGxJbml0U2VjdGlvbkxpZ2h0Ym94UHJvcHMsIEluaXRTZWN0aW9uRm9ybUxpZ2h0Ym94T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9QdWJsaWNGb3JtL0luaXRTZWN0aW9uTGlnaHRib3hcIjtcbmltcG9ydCB7IE1hc3NBY3Rpb25QYXJhbWV0ZXJzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9NYXNzQWN0aW9ucy9NYXNzQWN0aW9uUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgUHJpbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9QcmludC9QcmludFR5cGVcIjtcbmltcG9ydCB7IEZpYXNDbGllbnRJbml0T3B0aW9ucywgRmlhc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9WYWx1ZUVkaXRvcnMvRmlhcy9GaWFzSW5wdXQvRmlhc0FwaVwiO1xuaW1wb3J0IHsgSW5zdGFuY2VzRGVsZXRpbmdSdWxlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9JbnN0YW5jZXNEZWxldGluZy9JbnN0YW5jZXNEZWxldGluZ1J1bGVcIjtcblxuaW1wb3J0IHsgSUxlZ2FjeUZvcm0gfSBmcm9tIFwiLi9JTGVnYWN5Rm9ybVwiO1xuXG5leHBvcnQgdHlwZSBNb2RlbEV2ZW50UGF0aCA9XG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl1cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxDaGFuZ2VFdmVudFBhdGgocGF0aD86IHN0cmluZywgZmllbGROYW1lPzogc3RyaW5nKTogTW9kZWxFdmVudFBhdGgge1xuICAgIGlmIChmaWVsZE5hbWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXRoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGJlIGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGgsIGZpZWxkTmFtZV07XG4gICAgfVxuICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXTtcbn1cblxuZnVuY3Rpb24gbWFwQ2h1bmtWYWx1ZXMoY2h1bms6IFJlYWRvbmx5TW9kZWxDaHVuayk6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjaHVuaylcbiAgICAgICAgLmZpbHRlcihwYXRoID0+IGNodW5rW3BhdGhdICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaHVua1twYXRoXSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNodW5rW3BhdGhdO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBbcGF0aF06IHJlc3VsdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlQ2h1bmtWYWx1ZXMoY2h1bmtzOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+KTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICByZXR1cm4gY2h1bmtzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgY2h1bmspID0+ICh7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAuLi5jaHVuayxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgKTtcbn1cblxuY2xhc3MgTGVnYWN5UHVibGljRm9ybSBpbXBsZW1lbnRzIElQdWJsaWNGb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm06IElMZWdhY3lGb3JtO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZvcm06IElMZWdhY3lGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIGJhdGNoVXBkYXRlKHVwZGF0ZVByb2M6ICh1cGRhdGVBY2Nlc3NvcjogSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yKSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBQYXJ0aWFsPFNlcnZlckVycm9yTG9nPik6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgdmFsaWRhdGVDaGlsZHJlbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIF9fSU5URVJOQUxfX2ltcG9ydEZyb21FbXBsb3llZVNlcnZpY2UoKTogUHJvbWlzZTxFbXBsb3llZVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llZXMoZW1wbG95ZWVzOiBFbXBsb3llZVtdLCBvcHRpb25zPzogeyBzY2VuYXJpbz86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludChwcmludFR5cGU6IFByaW50VHlwZSwgYm9keT86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBwdWJsaWMgcnVuTWFzc0FjdGlvbihhY3Rpb25JZDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogTWFzc0FjdGlvblBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5R0lkKGdJZDogc3RyaW5nLCBmaWx0ZXI/OiBEaWdlc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0RGlnZXN0QXBpUGlja2xpc3QoZ0lkKS5xdWVyeShmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIHRocm93IEVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc3RvcEF1dG9zZW5kKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udW5tb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnVubW91bnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG91clN0ZXBzKCk6IFN0ZXBbXSB7XG4gICAgICAgIC8vIEZvciBvbGQga2V3ZWJcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0QWRkaXRpb25hbEVtcGxveWVlSW5mbyhmaWx0ZXJzOiBHZXRFbXBsb3llZUxpc3RSZXF1ZXN0KTogUHJvbWlzZTxFbXBsb3llZUxpc3QgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWxvYWRJbm5lcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXb3JraW5nRXZlbnRzRm9yRW1wbG95ZWUoZmlsdGVyczogR2V0V29ya2luZ0V2ZW50TGlzdFJlcXVlc3QpOiBQcm9taXNlPFdvcmtpbmdFdmVudExpc3QgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSB0aGlzLmZvcm0ubW9kZWwuZ2V0KHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIGVycm9yQ291bnQgIT0gdW5kZWZpbmVkICYmIGVycm9yQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZFcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYobW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogc3RyaW5nLCB2YWx1ZTogTW9kZWxWYWx1ZSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQoXG4gICAgICAgIHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZyB8IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuICAgICAgICB2YWx1ZT86IE1vZGVsVmFsdWVcbiAgICApOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhPck1vZGVsQ2h1bmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGF0aE9yTW9kZWxDaHVuaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckNodW5rID0gT2JqZWN0LmtleXMocGF0aE9yTW9kZWxDaHVuaykucmVkdWNlPFJlYWRvbmx5TW9kZWxDaHVuaz4oXG4gICAgICAgICAgICAgICAgKHJlc3VsdCwgcGF0aCkgPT4gKHsgW3BhdGhdOiB7IHZhbHVlOiBwYXRoT3JNb2RlbENodW5rW3BhdGhdIH0sIC4uLnJlc3VsdCB9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLmZpbGwoaW5uZXJDaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5zZXQocGF0aE9yTW9kZWxDaHVuaywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLnNldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3Igb2JqZWN0IHdpdGggcGF0aC12YWx1ZSBwYWlyc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhdGhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhPckFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBhdGhPckFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5tYXAocGF0aCA9PiBtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aCkpKVxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2U8QXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pj4oKHJlc3VsdCwgYXJyYXkpID0+IHJlc3VsdC5jb25jYXQoYXJyYXkpLCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPckFycmF5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGhPckFycmF5KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhPckFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uZ2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBhcnJheSBvZiBwYXRoc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUocGF0aDogc3RyaW5nKTogTW9kZWxWYWx1ZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLm1vZGVsLmdldChwYXRoLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5U3VidHJlZShcbiAgICAgICAgc291cmNlQmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgdGFyZ2V0QmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgZG9Ob3RDb3B5UGF0aHM/OiBzdHJpbmdbXVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJbnN0YW5jZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHV1aWRHZW5lcmF0ZSgpOiBzdHJpbmcge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93TW9kYWwob3B0aW9uczogTW9kYWxPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNlY3Rpb24ob3B0aW9uczogSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGxJbml0U2VjdGlvbihvcHRpb25zOiBDYWxsSW5pdFNlY3Rpb25MaWdodGJveFByb3BzKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZpYXNBcGlDbGllbnQob3B0aW9uczogRmlhc0NsaWVudEluaXRPcHRpb25zKTogRmlhc0FwaSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5FbXBsb3llZUVkaXRvcihlbXBsb3llZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlcyhwYXRoOiBzdHJpbmcsIGluc3RhbmNlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNPbkNvbnRyb2xJZkV4aXN0KHBhdGg6IEJpbmRpbmdQYXRoKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1dG9GaWVsZHNUb0F1dG9WYWx1ZShwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5zdXJlSW5zdGFuY2VGdWxseUxvYWRlZChcbiAgICAgICAgYmluZGluZ1BhdGg6IHN0cmluZyB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIC4uLmluc3RhbmNlczogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzQnlSdWxlcyhydWxlczogSW5zdGFuY2VzRGVsZXRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm06IElGb3JtKTogSVB1YmxpY0Zvcm0ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbmV3IExlZ2FjeVB1YmxpY0Zvcm0oZm9ybSBhcyBJTGVnYWN5Rm9ybSk7XG59XG4iLCIvKiB0c2xpbnQ6ZGlzYWJsZTpuby1udWxsLWtleXdvcmQgbm8tYW55IG5vLXVuc2FmZS1hbnkgKi9cbmltcG9ydCB7IGZldGNoIH0gZnJvbSBcIndoYXR3Zy1mZXRjaFwiO1xuXG5pbXBvcnQgeyBFcnJvckZpcnN0Q2FsbGJhY2ssIHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB7IExvYWRJbnRvRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vSGVscGVycy9Mb2FkSW50b0RvY3VtZW50XCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50IH0gZnJvbSBcIi4uL1R5cGVzL0lLZVdlYlRlbXBsYXRlc0FwaUNsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDbGllbnREcmFmdEluZm9SZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0NsaWVudERyYWZ0SW5mb1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBnZXRDbGllbnREcmFmdEluZm9VcmwgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmxcIjtcbmltcG9ydCB7IEFVT09wdGlvbnMgfSBmcm9tIFwiLi4vVHlwZXMvQVVPT3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRFdmVudHNTdGF0aWMgfSBmcm9tIFwiLi4vLi4vQ29udHJvbHMvSW50ZXJuYWxzL0xheW91dEV2ZW50cy9MYXlvdXRFdmVudHNcIjtcblxuaW1wb3J0IHsgY2xpZW50U2V0dGluZ3MgfSBmcm9tIFwiLi9DbGllbnRTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGVnYWN5UHVibGljRm9ybSB9IGZyb20gXCIuL0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybVwiO1xuXG50eXBlIEZvcm1Db250YWluZXIgPSBzdHJpbmcgfCBIVE1MRWxlbWVudDtcblxudHlwZSBFbmdpbmVFbnRyeVBvaW50ID0gKCkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG4gICAgbG9hZEVycm9yPzogdW5rbm93bjtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICAgIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgICAgICBpbnRlcmZhY2UgR2xvYmFsIHtcbiAgICAgICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IGdsb2JhbDogV2luZG93O1xuXG5mdW5jdGlvbiBkZWZhdWx0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgLyogZW1wdHkgKi9cbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1cmwocmVsYXRpdmVVcmw6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBnbG9iYWwuQ0Yua2Vmb3Jtc1VybCB8fCBcIlwiO1xuXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7cmVsYXRpdmVVcmx9YC5yZXBsYWNlKC8oW146XSlcXC97Mix9L2csIFwiJDEvXCIpO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiB1bmRlZmluZWQgfCBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgaWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgICBpZiAocGFyYW1WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFydHMucHVzaChgJHtwYXJhbU5hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChxdWVyeVBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGggKyBcIj9cIiArIHF1ZXJ5UGFydHMuam9pbihcIiZcIik7XG59XG5cbmZ1bmN0aW9uIGlzQWxsb3dlZChkb21haW5zOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXig/OiR7ZG9tYWlucy5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKS5yZXBsYWNlKC9cXCovZywgXCJbYS16MC05LS5dK1wiKX0pJGApLnRlc3QoXG4gICAgICAgIGdsb2JhbC5sb2NhdGlvbi5ob3N0XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGdsb2JhbC5sb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcP3wjfCYpLywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgIC5tYXAocGFyYW0gPT4gcGFyYW0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKS5zcGxpdChcIj1cIikubWFwKGRlY29kZVVSSUNvbXBvbmVudCkpXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgLmZpbmQoKFtrZXldKSA9PiBrZXkgPT0gbmFtZSkgfHwgW10pWzFdXG4gICAgKTtcbn1cblxudHlwZSBUYXNrID0gKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwodGFza3M6IFRhc2tbXSwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGNvbXBsZXRlZCA9IDA7XG5cbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICB0YXNrKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgU3RhcnRGb3JtU2V0dGluZyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uLCByZXNvdXJjZXNWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBldmVudEVtaXR0ZXI/OiBMYXlvdXRFdmVudHNTdGF0aWM7XG4gICAgZW1wbG95ZXJJZD86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nKTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludCB7XG4gICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBnbG9iYWxbZW5naW5lVmVyc2lvbl0gJiYgZ2xvYmFsW2VuZ2luZVZlcnNpb25dLmRlZmF1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0KFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4gPSBkZWZhdWx0Q2FsbGJhY2tcbik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgY29uc3QgeyBucywgZHJhZnRJZCB9ID0gb3B0aW9ucztcblxuICAgIGlmICghaXNBbGxvd2VkKGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChnZXRDbGllbnREcmFmdEluZm9VcmwoeyBuczogbnMsIGRyYWZ0SWQ6IGRyYWZ0SWQgfSkpLCB7XG4gICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0geyBtZXRob2Q6IFwiR0VUXCIgfTtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gb3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBBVVRILlNJRCAke29wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgfVxuICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG5cbiAgICBmZXRjaEltcGwoY2xpZW50RHJhZnRVcmwsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAudGhlbih4ID0+IHguanNvbigpKVxuICAgICAgICAudGhlbigoY2xpZW50RHJhZnRJbmZvOiBDbGllbnREcmFmdEluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gY2xpZW50RHJhZnRJbmZvLmdmdjtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXplZDogY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCxcbiAgICAgICAgICAgICAgICBjYXVsZHJvbkFwaVVybDogY2xpZW50U2V0dGluZ3MuY2F1bGRyb25BcGlVcmwsXG4gICAgICAgICAgICAgICAgaXNUZXN0U2VydmVyOiBjbGllbnRTZXR0aW5ncy5pc1Rlc3RTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogY2xpZW50U2V0dGluZ3MucmVuZGVyQ2FjaGluZ0ZvcklFOCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IGNsaWVudFNldHRpbmdzLm5vcm1hbGl6YXRpb25PblNlcnZlcixcbiAgICAgICAgICAgICAgICBub3JtYXRpdmVVcmw6IGNsaWVudFNldHRpbmdzLm5vcm1hdGl2ZVVybCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBjbGllbnRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGtvbnR1ckRvbWFpbnM6IGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAuLi5jbGllbnREcmFmdEluZm8sXG4gICAgICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IG9wdGlvbnMuZmVlZGJhY2tFbmFibGVkID8/IGNsaWVudERyYWZ0SW5mby5mZWVkYmFja0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsZWFuRm9ybTogb3B0aW9ucy5pc0Rpc2FibGVkQ2xlYW5Gb3JtID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbG9hZEZvcm0oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBnZnY6IGV4dGVuZGVkU2V0dGluZ3MuZ2Z2LFxuICAgICAgICAgICAgICAgICAgICBlbmdpbmVWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLmVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1ZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2VzVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgdGhlbWU6IGV4dGVuZGVkU2V0dGluZ3MudGhlbWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2FkRXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEVycm9yIHx8ICFnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoYGR5bmFtaWMgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciBnZnYgJHtnZnZ9YCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlciA9IGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmV4dGVuZGVkU2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzQXBpOiBvcHRpb25zLnRlbXBsYXRlc0FwaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtOiByZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spO1xufVxuXG5jb25zdCBDYW5keUNsaWVudEV4cG9ydHM6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIgPSB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVudHJ5UG9pbnQ6IHt9LFxuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4fVwiKSxcbiAgICBrZWZvcm1zVXJsOiBcIntrZWZvcm1zVXJsfVwiLFxufTtcblxuZ2xvYmFsLkNGID0gQ2FuZHlDbGllbnRFeHBvcnRzO1xuXG5leHBvcnQgeyBDYW5keUNsaWVudEV4cG9ydHMgfTtcbiIsImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcblxuICBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcblxuICB2YXIgX3MsIF9lO1xuXG4gIHRyeSB7XG4gICAgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsIi8qKipcbiAqINCh0YLRgNC+0LPQvtGC0LjQv9C40LfQuNGA0L7QstCw0L3QvdCw0Y8g0LfQsNC80LXQvdCwINC00LvRjyBCb29sZWFuKC4uLilcbiAqINCe0LHRi9GH0L3QviDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LTQu9GPIFsuLi5dLmZpbHRlcihpc05vdE51bGxPclVuZGVmaW5lZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiBUKTogaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIHJldHVybiBpbnB1dCAhPSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlVbmtub3duRXJyb3IoZXJyb3I6IHVua25vd24pOiB1bmRlZmluZWQgfCBzdHJpbmcge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgZXJyb3I/LltcIm1lc3NhZ2VcIl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBhc3NlcnRzIGlucHV0IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgICBpZiAoIWlzTm90TnVsbE9yVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlIG11c3QgYmUgZGVmaW5lZGApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgdHlwZSBFcnJvckZpcnN0Q2FsbGJhY2s8VD4gPSAoLi4uYXJnczogW0Vycm9yLCBudWxsIHwgdW5kZWZpbmVkXSB8IFtudWxsIHwgdW5kZWZpbmVkLCBUXSB8IFtFcnJvcl0pID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWplY3QobWVzc2FnZT86IHN0cmluZyB8IEVycm9yKTogbmV2ZXIge1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiB8fCBtZXNzYWdlID09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSA/PyBcIlVuZGVmaW5lZCBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBtZXNzYWdlO1xuICAgIH1cbn1cblxudHlwZSBBcnJheU9mTGVuZ3RoPFRJdGVtLCBUTGVuZ3RoIGV4dGVuZHMgbnVtYmVyLCBUUmVzdCBleHRlbmRzIFRJdGVtW10gPSBbXT4gPSBUUmVzdCBleHRlbmRzIHsgbGVuZ3RoOiBUTGVuZ3RoIH1cbiAgICA/IFRSZXN0XG4gICAgOiBBcnJheU9mTGVuZ3RoPFRJdGVtLCBUTGVuZ3RoLCBbVEl0ZW0sIC4uLlRSZXN0XT47XG5cbmV4cG9ydCB0eXBlIE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoIGV4dGVuZHMgbnVtYmVyLCBUUmVzdCBleHRlbmRzIFRJdGVtW10gPSBbXT4gPSBUUmVzdCBleHRlbmRzIHtcbiAgICBsZW5ndGg6IFRMZW5ndGg7XG59XG4gICAgPyBbLi4uVFJlc3QsIC4uLlRJdGVtW11dXG4gICAgOiBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCwgWy4uLlRSZXN0LCBUSXRlbV0+O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWw8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID49IG1pbkxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbkxlbmd0aE9yVW5kZWZpbmVkPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiB1bmRlZmluZWQgfCBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgaWYgKGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBtaW5MZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID09PSBsZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SGFzQXRMZWFzdE9uZUl0ZW08VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogYXNzZXJ0cyBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgaWYgKCFhcnJheUlzTm90RW1wdHkoaXRlbXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBiZSBub3QgZW1wdHlgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWFycmF5SGFzTGVuZ3RoKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgc2hvdWxkIGhhcyBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWw8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgaGF2ZSBtaW5pbWFsIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOZXZlcihuZXZlckFyZ3VtZW50OiBuZXZlcik6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFuZEdldFN0cmluZyhuZXZlckFyZ3VtZW50OiBuZXZlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke25ldmVyQXJndW1lbnR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkFzeW5jQWN0aW9uKGFjdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICBhY3Rpb24oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yRW1wdHkoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGlucHV0IGlzIHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dCA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TnVsbE9yRW1wdHkoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGlucHV0IGlzIHN0cmluZyB7XG4gICAgcmV0dXJuICFpc051bGxPckVtcHR5KGlucHV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yV2hpdGVTcGFjZShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IGlucHV0IGlzIHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQudHJpbSgpID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJpbUxhc3RTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5zbGljZSgtMSkgPT09IFwiL1wiID8gdXJsLnNsaWNlKDAsIC0xKSA6IHVybDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2Vy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
|