oxygen-cli 1.40.2-beta.1 → 1.41.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 +1755 -1742
- package/LICENSE +672 -672
- package/README.md +37 -37
- package/build/core/OxygenCore.js +1 -1
- package/build/core/OxygenEvents.js +1 -1
- package/build/core/OxygenModule.js +1 -1
- package/build/core/OxygenService.js +1 -1
- package/build/core/OxygenSubModule.js +1 -1
- package/build/core/WebDriverModule.js +1 -1
- package/build/core/utils.js +1 -1
- package/build/errors/HookError.js +1 -1
- package/build/errors/ModuleError.js +1 -1
- package/build/errors/ModuleUnavailableError.js +1 -1
- package/build/errors/OxygenError.js +1 -1
- package/build/errors/ScriptNotFound.js +1 -1
- package/build/errors/helper.js +1 -1
- package/build/index.js +1 -1
- package/build/lib/cli-util.js +1 -1
- package/build/lib/cli.js +1 -1
- package/build/lib/debugger.js +1 -1
- package/build/lib/img-merge.js +1 -1
- package/build/lib/launcher.js +1 -1
- package/build/lib/logger.js +43 -43
- package/build/lib/moduleRequire.js +1 -1
- package/build/lib/parallel-launcher.js +1 -1
- package/build/lib/param-manager.js +1 -1
- package/build/lib/param-reader-csv.js +1 -1
- package/build/lib/param-reader-excel.js +1 -1
- package/build/lib/param-reader-json.js +1 -1
- package/build/lib/text-to-image.js +1 -1
- package/build/lib/util.js +1 -1
- package/build/model/case-result.js +1 -1
- package/build/model/failure.js +1 -1
- package/build/model/status.js +1 -1
- package/build/model/step-result.js +1 -1
- package/build/model/suite-result.js +1 -1
- package/build/model/test-result.js +1 -1
- package/build/model/testcase.js +1 -1
- package/build/model/testsuite.js +1 -1
- package/build/ox_modules/index.js +1 -1
- package/build/ox_modules/module-assert.js +37 -37
- package/build/ox_modules/module-date.js +24 -24
- package/build/ox_modules/module-db.js +52 -52
- package/build/ox_modules/module-email.js +59 -59
- package/build/ox_modules/module-eyes.js +34 -34
- package/build/ox_modules/module-http/ntlm-util.js +10 -10
- package/build/ox_modules/module-http/ntlm.js +15 -15
- package/build/ox_modules/module-http.js +132 -132
- package/build/ox_modules/module-log.js +27 -27
- package/build/ox_modules/module-mailinator.js +87 -87
- package/build/ox_modules/module-mob/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-mob/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-mob/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-mob/commands/assertText.js +21 -21
- package/build/ox_modules/module-mob/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-mob/commands/assertValue.js +18 -18
- package/build/ox_modules/module-mob/commands/back.js +16 -16
- package/build/ox_modules/module-mob/commands/clear.js +19 -19
- package/build/ox_modules/module-mob/commands/click.js +17 -17
- package/build/ox_modules/module-mob/commands/clickHidden.js +17 -17
- package/build/ox_modules/module-mob/commands/clickLong.js +18 -18
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +18 -18
- package/build/ox_modules/module-mob/commands/closeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/debug.js +16 -16
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +19 -19
- package/build/ox_modules/module-mob/commands/enableNetwork.js +27 -27
- package/build/ox_modules/module-mob/commands/execute.js +21 -21
- package/build/ox_modules/module-mob/commands/findElement.js +20 -20
- package/build/ox_modules/module-mob/commands/findElements.js +23 -23
- package/build/ox_modules/module-mob/commands/getAlertText.js +17 -17
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +15 -15
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +15 -15
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +16 -16
- package/build/ox_modules/module-mob/commands/getLocation.js +20 -20
- package/build/ox_modules/module-mob/commands/getSource.js +16 -16
- package/build/ox_modules/module-mob/commands/getText.js +18 -18
- package/build/ox_modules/module-mob/commands/getTitle.js +13 -13
- package/build/ox_modules/module-mob/commands/getUrl.js +17 -17
- package/build/ox_modules/module-mob/commands/getValue.js +18 -18
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +17 -17
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +21 -21
- package/build/ox_modules/module-mob/commands/index.js +1 -1
- package/build/ox_modules/module-mob/commands/installApp.js +16 -16
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +16 -16
- package/build/ox_modules/module-mob/commands/isCheckable.js +18 -18
- package/build/ox_modules/module-mob/commands/isChecked.js +18 -18
- package/build/ox_modules/module-mob/commands/isClickable.js +18 -18
- package/build/ox_modules/module-mob/commands/isExist.js +19 -19
- package/build/ox_modules/module-mob/commands/isSelected.js +23 -23
- package/build/ox_modules/module-mob/commands/isVisible.js +19 -19
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/launchApp.js +15 -15
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +18 -18
- package/build/ox_modules/module-mob/commands/open.js +17 -17
- package/build/ox_modules/module-mob/commands/pause.js +16 -16
- package/build/ox_modules/module-mob/commands/removeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/resetApp.js +15 -15
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +22 -22
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +27 -27
- package/build/ox_modules/module-mob/commands/select.js +24 -24
- package/build/ox_modules/module-mob/commands/selectFrame.js +23 -23
- package/build/ox_modules/module-mob/commands/selectWindow.js +28 -28
- package/build/ox_modules/module-mob/commands/sendKeys.js +29 -29
- package/build/ox_modules/module-mob/commands/setContext.js +16 -16
- package/build/ox_modules/module-mob/commands/setNativeContext.js +15 -15
- package/build/ox_modules/module-mob/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/shake.js +16 -16
- package/build/ox_modules/module-mob/commands/smsClickLink.js +19 -19
- package/build/ox_modules/module-mob/commands/smsGetText.js +20 -20
- package/build/ox_modules/module-mob/commands/swipe.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeElement.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeScreen.js +20 -20
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-mob/commands/tap.js +17 -17
- package/build/ox_modules/module-mob/commands/type.js +20 -20
- package/build/ox_modules/module-mob/commands/unlockPattern.js +22 -22
- package/build/ox_modules/module-mob/commands/waitForExist.js +18 -18
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-mob/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-mob.js +74 -74
- package/build/ox_modules/module-mongo.js +82 -82
- package/build/ox_modules/module-pdf.js +35 -35
- package/build/ox_modules/module-proxy.js +77 -77
- package/build/ox_modules/module-serial.js +55 -55
- package/build/ox_modules/module-shell.js +52 -33
- package/build/ox_modules/module-soap.js +72 -72
- package/build/ox_modules/module-twilio.js +41 -41
- package/build/ox_modules/module-utils.js +91 -91
- package/build/ox_modules/module-web/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-web/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-web/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-web/commands/assertExist.js +17 -17
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/assertText.js +21 -21
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-web/commands/assertValue.js +20 -20
- package/build/ox_modules/module-web/commands/back.js +16 -16
- package/build/ox_modules/module-web/commands/clear.js +18 -18
- package/build/ox_modules/module-web/commands/click.js +25 -25
- package/build/ox_modules/module-web/commands/clickHidden.js +23 -23
- package/build/ox_modules/module-web/commands/closeWindow.js +15 -15
- package/build/ox_modules/module-web/commands/debug.js +15 -15
- package/build/ox_modules/module-web/commands/deleteCookies.js +12 -12
- package/build/ox_modules/module-web/commands/deselect.js +22 -22
- package/build/ox_modules/module-web/commands/doubleClick.js +17 -17
- package/build/ox_modules/module-web/commands/dragAndDrop.js +20 -20
- package/build/ox_modules/module-web/commands/execute.js +24 -24
- package/build/ox_modules/module-web/commands/fileBrowse.js +18 -18
- package/build/ox_modules/module-web/commands/findElement.js +19 -19
- package/build/ox_modules/module-web/commands/findElements.js +22 -22
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +14 -14
- package/build/ox_modules/module-web/commands/getAlertText.js +16 -16
- package/build/ox_modules/module-web/commands/getAttribute.js +19 -19
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +17 -17
- package/build/ox_modules/module-web/commands/getCookies.js +13 -13
- package/build/ox_modules/module-web/commands/getCssValue.js +19 -19
- package/build/ox_modules/module-web/commands/getElementCount.js +17 -17
- package/build/ox_modules/module-web/commands/getHTML.js +17 -17
- package/build/ox_modules/module-web/commands/getSource.js +16 -16
- package/build/ox_modules/module-web/commands/getText.js +18 -18
- package/build/ox_modules/module-web/commands/getTitle.js +12 -12
- package/build/ox_modules/module-web/commands/getUrl.js +16 -16
- package/build/ox_modules/module-web/commands/getValue.js +18 -18
- package/build/ox_modules/module-web/commands/getWindowHandles.js +16 -16
- package/build/ox_modules/module-web/commands/getWindowSize.js +16 -16
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +16 -16
- package/build/ox_modules/module-web/commands/index.js +1 -1
- package/build/ox_modules/module-web/commands/isAlertPresent.js +16 -16
- package/build/ox_modules/module-web/commands/isChecked.js +18 -18
- package/build/ox_modules/module-web/commands/isExist.js +19 -19
- package/build/ox_modules/module-web/commands/isInteractable.js +22 -22
- package/build/ox_modules/module-web/commands/isSelected.js +23 -23
- package/build/ox_modules/module-web/commands/isVisible.js +19 -19
- package/build/ox_modules/module-web/commands/makeVisible.js +25 -25
- package/build/ox_modules/module-web/commands/maximizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/minimizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/mock.js +20 -20
- package/build/ox_modules/module-web/commands/mockClearAll.js +12 -12
- package/build/ox_modules/module-web/commands/mockRestoreAll.js +12 -12
- package/build/ox_modules/module-web/commands/newWindow.js +16 -16
- package/build/ox_modules/module-web/commands/open.js +16 -16
- package/build/ox_modules/module-web/commands/pause.js +15 -15
- package/build/ox_modules/module-web/commands/point.js +21 -21
- package/build/ox_modules/module-web/commands/pointJS.js +15 -15
- package/build/ox_modules/module-web/commands/refresh.js +15 -15
- package/build/ox_modules/module-web/commands/rightClick.js +17 -17
- package/build/ox_modules/module-web/commands/rightClickActions.js +19 -19
- package/build/ox_modules/module-web/commands/scrollToElement.js +21 -21
- package/build/ox_modules/module-web/commands/select.js +23 -23
- package/build/ox_modules/module-web/commands/selectFrame.js +24 -24
- package/build/ox_modules/module-web/commands/selectWindow.js +27 -27
- package/build/ox_modules/module-web/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +20 -20
- package/build/ox_modules/module-web/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-web/commands/setWindowSize.js +17 -17
- package/build/ox_modules/module-web/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-web/commands/type.js +20 -20
- package/build/ox_modules/module-web/commands/verifyAlert.js +20 -20
- package/build/ox_modules/module-web/commands/verifyExist.js +17 -17
- package/build/ox_modules/module-web/commands/verifySelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/verifySelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/verifyText.js +21 -21
- package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTitle.js +19 -19
- package/build/ox_modules/module-web/commands/verifyValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForAngular.js +19 -19
- package/build/ox_modules/module-web/commands/waitForExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForNotValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-web/commands/waitForWindow.js +22 -22
- package/build/ox_modules/module-web.js +94 -94
- package/build/ox_modules/module-win/commands/assertText.js +17 -17
- package/build/ox_modules/module-win/commands/assertTitle.js +15 -15
- package/build/ox_modules/module-win/commands/assertValue.js +14 -14
- package/build/ox_modules/module-win/commands/back.js +11 -11
- package/build/ox_modules/module-win/commands/clear.js +13 -13
- package/build/ox_modules/module-win/commands/click.js +13 -13
- package/build/ox_modules/module-win/commands/clickLong.js +14 -14
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +14 -14
- package/build/ox_modules/module-win/commands/findElement.js +15 -15
- package/build/ox_modules/module-win/commands/findElements.js +15 -15
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +12 -12
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +15 -15
- package/build/ox_modules/module-win/commands/getLocation.js +14 -14
- package/build/ox_modules/module-win/commands/getSource.js +12 -12
- package/build/ox_modules/module-win/commands/getText.js +14 -14
- package/build/ox_modules/module-win/commands/getValue.js +14 -14
- package/build/ox_modules/module-win/commands/getWindowHandles.js +15 -15
- package/build/ox_modules/module-win/commands/index.js +1 -1
- package/build/ox_modules/module-win/commands/isCheckable.js +14 -14
- package/build/ox_modules/module-win/commands/isChecked.js +14 -14
- package/build/ox_modules/module-win/commands/isClickable.js +14 -14
- package/build/ox_modules/module-win/commands/isExist.js +15 -15
- package/build/ox_modules/module-win/commands/isSelected.js +14 -14
- package/build/ox_modules/module-win/commands/isVisible.js +15 -15
- package/build/ox_modules/module-win/commands/open.js +13 -13
- package/build/ox_modules/module-win/commands/pause.js +12 -12
- package/build/ox_modules/module-win/commands/rightClick.js +13 -13
- package/build/ox_modules/module-win/commands/selectWindow.js +23 -23
- package/build/ox_modules/module-win/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-win/commands/setTimeout.js +17 -17
- package/build/ox_modules/module-win/commands/takeScreenshot.js +16 -16
- package/build/ox_modules/module-win/commands/tap.js +13 -13
- package/build/ox_modules/module-win/commands/type.js +16 -16
- package/build/ox_modules/module-win/commands/waitForExist.js +14 -14
- package/build/ox_modules/module-win/commands/waitForInteractable.js +16 -16
- package/build/ox_modules/module-win/commands/waitForVisible.js +13 -13
- package/build/ox_modules/module-win.js +47 -47
- package/build/ox_modules/utils.js +8 -8
- package/build/ox_reporters/excel/template.json +48 -48
- package/build/ox_reporters/html/index.ejs +163 -163
- package/build/ox_reporters/html/summary.ejs +77 -77
- package/build/ox_reporters/html/tests-details.ejs +134 -134
- package/build/ox_reporters/html/tests-devices-browsers.ejs +83 -83
- package/build/ox_reporters/reporter-excel.js +1 -1
- package/build/ox_reporters/reporter-html.js +1 -1
- package/build/ox_reporters/reporter-json.js +1 -1
- package/build/ox_reporters/reporter-junit.js +1 -1
- package/build/ox_reporters/reporter-pdf.js +1 -1
- package/build/ox_reporters/reporter-rp.js +73 -42
- package/build/ox_reporters/reporter-xml.js +1 -1
- package/build/ox_services/service-devtools/submodule-network.js +1 -1
- package/build/ox_services/service-devtools.js +1 -1
- package/build/reporter/FileReporterBase.js +1 -1
- package/build/reporter/ReportAggregator.js +1 -1
- package/build/reporter/ReporterBase.js +1 -1
- package/build/reporter/WebSocketReporter.js +1 -1
- package/build/runners/WorkerProcess.js +1 -1
- package/build/runners/cucumber/CucumberEventListener.js +1 -1
- package/build/runners/cucumber/CucumberReporter.js +1 -1
- package/build/runners/cucumber/CucumberWorker.js +1 -1
- package/build/runners/cucumber/index.js +1 -1
- package/build/runners/cucumber/worker.js +1 -1
- package/build/runners/index.js +1 -1
- package/build/runners/oxygen/OxygenWorker.js +1 -1
- package/build/runners/oxygen/index.js +1 -1
- package/build/runners/oxygen/worker.js +1 -1
- package/config/default.json +6 -6
- package/package.json +139 -139
- package/types/index.d.ts +70 -70
- package/types/module-eyes.d.ts +39 -39
- package/types/module-http.d.ts +163 -163
- package/types/module-log.d.ts +34 -34
- package/types/module-mob.d.ts +966 -966
- package/types/module-pdf.d.ts +40 -40
- package/types/module-proxy.d.ts +100 -100
- package/types/module-shell.d.ts +24 -24
- package/types/module-utils.d.ts +99 -99
- package/types/module-web.d.ts +1053 -1053
- package/types/module-win.d.ts +352 -352
- package/types/oxygen.d.ts +53 -53
- package/log.txt +0 -1614
- package/reports/2025-06-08_231627/report.html +0 -440
- package/reports/2025-06-09_223615/report.html +0 -440
- package/transpiled/mongodb/etc/prepare.js +0 -18
- package/transpiled/mongodb/lib/admin.js +0 -182
- package/transpiled/mongodb/lib/beta.js +0 -26
- package/transpiled/mongodb/lib/bson.js +0 -220
- package/transpiled/mongodb/lib/bulk/common.js +0 -1041
- package/transpiled/mongodb/lib/bulk/ordered.js +0 -76
- package/transpiled/mongodb/lib/bulk/unordered.js +0 -102
- package/transpiled/mongodb/lib/change_stream.js +0 -517
- package/transpiled/mongodb/lib/client-side-encryption/auto_encrypter.js +0 -329
- package/transpiled/mongodb/lib/client-side-encryption/client_encryption.js +0 -779
- package/transpiled/mongodb/lib/client-side-encryption/crypto_callbacks.js +0 -95
- package/transpiled/mongodb/lib/client-side-encryption/errors.js +0 -171
- package/transpiled/mongodb/lib/client-side-encryption/mongocryptd_manager.js +0 -98
- package/transpiled/mongodb/lib/client-side-encryption/providers/aws.js +0 -34
- package/transpiled/mongodb/lib/client-side-encryption/providers/azure.js +0 -186
- package/transpiled/mongodb/lib/client-side-encryption/providers/gcp.js +0 -29
- package/transpiled/mongodb/lib/client-side-encryption/providers/index.js +0 -58
- package/transpiled/mongodb/lib/client-side-encryption/state_machine.js +0 -505
- package/transpiled/mongodb/lib/cmap/auth/auth_provider.js +0 -63
- package/transpiled/mongodb/lib/cmap/auth/aws_temporary_credentials.js +0 -167
- package/transpiled/mongodb/lib/cmap/auth/gssapi.js +0 -207
- package/transpiled/mongodb/lib/cmap/auth/mongo_credentials.js +0 -193
- package/transpiled/mongodb/lib/cmap/auth/mongodb_aws.js +0 -181
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +0 -101
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +0 -81
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js +0 -174
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/command_builders.js +0 -59
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +0 -58
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +0 -138
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +0 -42
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_cache.js +0 -71
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +0 -34
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc.js +0 -111
- package/transpiled/mongodb/lib/cmap/auth/plain.js +0 -43
- package/transpiled/mongodb/lib/cmap/auth/providers.js +0 -22
- package/transpiled/mongodb/lib/cmap/auth/scram.js +0 -318
- package/transpiled/mongodb/lib/cmap/auth/x509.js +0 -61
- package/transpiled/mongodb/lib/cmap/command_monitoring_events.js +0 -266
- package/transpiled/mongodb/lib/cmap/commands.js +0 -605
- package/transpiled/mongodb/lib/cmap/connect.js +0 -418
- package/transpiled/mongodb/lib/cmap/connection.js +0 -673
- package/transpiled/mongodb/lib/cmap/connection_pool.js +0 -688
- package/transpiled/mongodb/lib/cmap/connection_pool_events.js +0 -254
- package/transpiled/mongodb/lib/cmap/errors.js +0 -128
- package/transpiled/mongodb/lib/cmap/handshake/client_metadata.js +0 -278
- package/transpiled/mongodb/lib/cmap/metrics.js +0 -67
- package/transpiled/mongodb/lib/cmap/stream_description.js +0 -74
- package/transpiled/mongodb/lib/cmap/wire_protocol/compression.js +0 -196
- package/transpiled/mongodb/lib/cmap/wire_protocol/constants.js +0 -19
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_data.js +0 -144
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_demand/document.js +0 -278
- package/transpiled/mongodb/lib/cmap/wire_protocol/responses.js +0 -376
- package/transpiled/mongodb/lib/cmap/wire_protocol/shared.js +0 -49
- package/transpiled/mongodb/lib/collection.js +0 -852
- package/transpiled/mongodb/lib/connection_string.js +0 -1452
- package/transpiled/mongodb/lib/constants.js +0 -162
- package/transpiled/mongodb/lib/cursor/abstract_cursor.js +0 -1082
- package/transpiled/mongodb/lib/cursor/aggregation_cursor.js +0 -227
- package/transpiled/mongodb/lib/cursor/change_stream_cursor.js +0 -136
- package/transpiled/mongodb/lib/cursor/client_bulk_write_cursor.js +0 -69
- package/transpiled/mongodb/lib/cursor/find_cursor.js +0 -476
- package/transpiled/mongodb/lib/cursor/list_collections_cursor.js +0 -48
- package/transpiled/mongodb/lib/cursor/list_indexes_cursor.js +0 -46
- package/transpiled/mongodb/lib/cursor/list_search_indexes_cursor.js +0 -30
- package/transpiled/mongodb/lib/cursor/run_command_cursor.js +0 -125
- package/transpiled/mongodb/lib/db.js +0 -467
- package/transpiled/mongodb/lib/deps.js +0 -174
- package/transpiled/mongodb/lib/encrypter.js +0 -129
- package/transpiled/mongodb/lib/error.js +0 -1550
- package/transpiled/mongodb/lib/explain.js +0 -122
- package/transpiled/mongodb/lib/gridfs/download.js +0 -369
- package/transpiled/mongodb/lib/gridfs/index.js +0 -240
- package/transpiled/mongodb/lib/gridfs/upload.js +0 -446
- package/transpiled/mongodb/lib/index.js +0 -975
- package/transpiled/mongodb/lib/mongo_client.js +0 -626
- package/transpiled/mongodb/lib/mongo_client_auth_providers.js +0 -98
- package/transpiled/mongodb/lib/mongo_logger.js +0 -812
- package/transpiled/mongodb/lib/mongo_types.js +0 -71
- package/transpiled/mongodb/lib/operations/aggregate.js +0 -129
- package/transpiled/mongodb/lib/operations/bulk_write.js +0 -48
- package/transpiled/mongodb/lib/operations/client_bulk_write/client_bulk_write.js +0 -96
- package/transpiled/mongodb/lib/operations/client_bulk_write/command_builder.js +0 -409
- package/transpiled/mongodb/lib/operations/client_bulk_write/common.js +0 -5
- package/transpiled/mongodb/lib/operations/client_bulk_write/executor.js +0 -144
- package/transpiled/mongodb/lib/operations/client_bulk_write/results_merger.js +0 -228
- package/transpiled/mongodb/lib/operations/collections.js +0 -49
- package/transpiled/mongodb/lib/operations/command.js +0 -102
- package/transpiled/mongodb/lib/operations/count.js +0 -60
- package/transpiled/mongodb/lib/operations/create_collection.js +0 -109
- package/transpiled/mongodb/lib/operations/delete.js +0 -134
- package/transpiled/mongodb/lib/operations/distinct.js +0 -77
- package/transpiled/mongodb/lib/operations/drop.js +0 -102
- package/transpiled/mongodb/lib/operations/estimated_document_count.js +0 -47
- package/transpiled/mongodb/lib/operations/execute_operation.js +0 -251
- package/transpiled/mongodb/lib/operations/find.js +0 -197
- package/transpiled/mongodb/lib/operations/find_and_modify.js +0 -191
- package/transpiled/mongodb/lib/operations/get_more.js +0 -84
- package/transpiled/mongodb/lib/operations/indexes.js +0 -197
- package/transpiled/mongodb/lib/operations/insert.js +0 -138
- package/transpiled/mongodb/lib/operations/is_capped.js +0 -44
- package/transpiled/mongodb/lib/operations/kill_cursors.js +0 -58
- package/transpiled/mongodb/lib/operations/list_collections.js +0 -66
- package/transpiled/mongodb/lib/operations/list_databases.js +0 -56
- package/transpiled/mongodb/lib/operations/operation.js +0 -88
- package/transpiled/mongodb/lib/operations/options_operation.js +0 -44
- package/transpiled/mongodb/lib/operations/profiling_level.js +0 -42
- package/transpiled/mongodb/lib/operations/remove_user.js +0 -35
- package/transpiled/mongodb/lib/operations/rename.js +0 -48
- package/transpiled/mongodb/lib/operations/run_command.js +0 -64
- package/transpiled/mongodb/lib/operations/search_indexes/create.js +0 -41
- package/transpiled/mongodb/lib/operations/search_indexes/drop.js +0 -51
- package/transpiled/mongodb/lib/operations/search_indexes/update.js +0 -40
- package/transpiled/mongodb/lib/operations/set_profiling_level.js +0 -70
- package/transpiled/mongodb/lib/operations/stats.js +0 -39
- package/transpiled/mongodb/lib/operations/update.js +0 -218
- package/transpiled/mongodb/lib/operations/validate_collection.js +0 -49
- package/transpiled/mongodb/lib/read_concern.js +0 -92
- package/transpiled/mongodb/lib/read_preference.js +0 -215
- package/transpiled/mongodb/lib/resource_management.js +0 -74
- package/transpiled/mongodb/lib/sdam/common.js +0 -53
- package/transpiled/mongodb/lib/sdam/events.js +0 -177
- package/transpiled/mongodb/lib/sdam/monitor.js +0 -656
- package/transpiled/mongodb/lib/sdam/server.js +0 -463
- package/transpiled/mongodb/lib/sdam/server_description.js +0 -196
- package/transpiled/mongodb/lib/sdam/server_selection.js +0 -283
- package/transpiled/mongodb/lib/sdam/server_selection_events.js +0 -112
- package/transpiled/mongodb/lib/sdam/srv_polling.js +0 -139
- package/transpiled/mongodb/lib/sdam/topology.js +0 -833
- package/transpiled/mongodb/lib/sdam/topology_description.js +0 -447
- package/transpiled/mongodb/lib/sessions.js +0 -988
- package/transpiled/mongodb/lib/sort.js +0 -123
- package/transpiled/mongodb/lib/timeout.js +0 -349
- package/transpiled/mongodb/lib/transactions.js +0 -149
- package/transpiled/mongodb/lib/utils.js +0 -1502
- package/transpiled/mongodb/lib/write_concern.js +0 -115
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 2015-present CloudBeat Limited
|
|
3
|
-
*
|
|
4
|
-
* This program is free software: you can redistribute it and/or modify
|
|
5
|
-
* it under the terms of the GNU General Public License as published by
|
|
6
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
7
|
-
* (at your option) any later version.
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2015-present CloudBeat Limited
|
|
3
|
+
*
|
|
4
|
+
* This program is free software: you can redistribute it and/or modify
|
|
5
|
+
* it under the terms of the GNU General Public License as published by
|
|
6
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
* (at your option) any later version.
|
|
8
8
|
*/
|
|
9
9
|
'use strict';
|
|
10
|
-
/**
|
|
11
|
-
* @name win
|
|
12
|
-
* @description Provides methods for Windows native applications automation.
|
|
13
|
-
* @sample **Locators:**
|
|
14
|
-
*
|
|
15
|
-
* * `/XPATH` - Locates element using an XPath 1.0 expression.
|
|
16
|
-
* * `~AccessibilityId` - Locates element by its Accessibility ID. Attribute name in inspect.exe - AutomationId.
|
|
17
|
-
* * `name=NAME` - Locates element by its name. Attribute name in inspect.exe - Name.
|
|
18
|
-
* * `id=ID` - Locates element by its ID. Attribute name in inspect.exe - RuntimeID.
|
|
19
|
-
*
|
|
20
|
-
* **Pattern arguments:**
|
|
21
|
-
*
|
|
22
|
-
* Commands which expect a string matching pattern in their arguments, support following patterns unless specified otherwise:
|
|
23
|
-
*
|
|
24
|
-
* * `regex:PATTERN` - Match using regular expression.
|
|
25
|
-
* * `PATTERN` - Verbatim matching.
|
|
10
|
+
/**
|
|
11
|
+
* @name win
|
|
12
|
+
* @description Provides methods for Windows native applications automation.
|
|
13
|
+
* @sample **Locators:**
|
|
14
|
+
*
|
|
15
|
+
* * `/XPATH` - Locates element using an XPath 1.0 expression.
|
|
16
|
+
* * `~AccessibilityId` - Locates element by its Accessibility ID. Attribute name in inspect.exe - AutomationId.
|
|
17
|
+
* * `name=NAME` - Locates element by its name. Attribute name in inspect.exe - Name.
|
|
18
|
+
* * `id=ID` - Locates element by its ID. Attribute name in inspect.exe - RuntimeID.
|
|
19
|
+
*
|
|
20
|
+
* **Pattern arguments:**
|
|
21
|
+
*
|
|
22
|
+
* Commands which expect a string matching pattern in their arguments, support following patterns unless specified otherwise:
|
|
23
|
+
*
|
|
24
|
+
* * `regex:PATTERN` - Match using regular expression.
|
|
25
|
+
* * `PATTERN` - Verbatim matching.
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
28
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -86,31 +86,31 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
86
86
|
get name() {
|
|
87
87
|
return MODULE_NAME;
|
|
88
88
|
}
|
|
89
|
-
/**
|
|
90
|
-
* @function getDriver
|
|
91
|
-
* @summary Returns the underlying WDIO driver.
|
|
92
|
-
* @return {Object} WDIO driver.
|
|
89
|
+
/**
|
|
90
|
+
* @function getDriver
|
|
91
|
+
* @summary Returns the underlying WDIO driver.
|
|
92
|
+
* @return {Object} WDIO driver.
|
|
93
93
|
*/
|
|
94
94
|
|
|
95
95
|
|
|
96
96
|
getDriver() {
|
|
97
97
|
return super.getDriver();
|
|
98
98
|
}
|
|
99
|
-
/**
|
|
100
|
-
* @function getCapabilities
|
|
101
|
-
* @summary Returns currently defined capabilities.
|
|
102
|
-
* @return {Object} Current capabilities object.
|
|
99
|
+
/**
|
|
100
|
+
* @function getCapabilities
|
|
101
|
+
* @summary Returns currently defined capabilities.
|
|
102
|
+
* @return {Object} Current capabilities object.
|
|
103
103
|
*/
|
|
104
104
|
|
|
105
105
|
|
|
106
106
|
getCapabilities() {
|
|
107
107
|
return this.caps || super.getCapabilities();
|
|
108
108
|
}
|
|
109
|
-
/**
|
|
110
|
-
* @function init
|
|
111
|
-
* @summary Initializes a new Appium session.
|
|
112
|
-
* @param {String=} caps - Desired capabilities. If not specified capabilities will be taken from suite definition.
|
|
113
|
-
* @param {String=} appiumUrl - Remote Appium server URL (default: http://localhost:4723/wd/hub).
|
|
109
|
+
/**
|
|
110
|
+
* @function init
|
|
111
|
+
* @summary Initializes a new Appium session.
|
|
112
|
+
* @param {String=} caps - Desired capabilities. If not specified capabilities will be taken from suite definition.
|
|
113
|
+
* @param {String=} appiumUrl - Remote Appium server URL (default: http://localhost:4723/wd/hub).
|
|
114
114
|
*/
|
|
115
115
|
|
|
116
116
|
|
|
@@ -225,9 +225,9 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
225
225
|
await _utils.default.overwriteWdioCommands(this.driver);
|
|
226
226
|
super.init(this.driver);
|
|
227
227
|
}
|
|
228
|
-
/**
|
|
229
|
-
* @function dispose
|
|
230
|
-
* @summary Ends the current session.
|
|
228
|
+
/**
|
|
229
|
+
* @function dispose
|
|
230
|
+
* @summary Ends the current session.
|
|
231
231
|
*/
|
|
232
232
|
|
|
233
233
|
|
|
@@ -252,11 +252,11 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
252
252
|
super.dispose();
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
|
-
/**
|
|
256
|
-
* @summary Opens new transaction.
|
|
257
|
-
* @description The transaction will persist till a new one is opened. Transaction names must be unique.
|
|
258
|
-
* @function transaction
|
|
259
|
-
* @param {String} name - The transaction name.
|
|
255
|
+
/**
|
|
256
|
+
* @summary Opens new transaction.
|
|
257
|
+
* @description The transaction will persist till a new one is opened. Transaction names must be unique.
|
|
258
|
+
* @function transaction
|
|
259
|
+
* @param {String} name - The transaction name.
|
|
260
260
|
*/
|
|
261
261
|
|
|
262
262
|
|
|
@@ -271,8 +271,8 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
271
271
|
name = name.slice(0, 512);
|
|
272
272
|
global._lastTransactionName = name;
|
|
273
273
|
}
|
|
274
|
-
/*
|
|
275
|
-
* Private
|
|
274
|
+
/*
|
|
275
|
+
* Private
|
|
276
276
|
*/
|
|
277
277
|
|
|
278
278
|
|
|
@@ -372,4 +372,4 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
372
372
|
}
|
|
373
373
|
|
|
374
374
|
exports.default = WindowsModule;
|
|
375
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13aW4uanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0FQUCIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldJTkRPV1NfU1RBTkRBUkRfQVBQX0lEUyIsIkNhbGN1bGF0b3IiLCJBbGFybUNsb2NrIiwiTm90ZXBhZCIsIlBhaW50IiwiUGFpbnQzRCIsIlN0aWNreU5vdGVzIiwiV2luZG93c01vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0IiwiYXBwaXVtVXJsIiwiaXNJbml0aWFsaXplZCIsInJlb3BlblNlc3Npb24iLCJkZWJ1ZyIsImRyaXZlciIsInJlbG9hZFNlc3Npb24iLCJfaXNJbml0aWFsaXplZCIsImN0eCIsImFwcCIsImFwcENhcFZhbCIsImFwcE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImluY2x1ZGVzIiwicGxhdGZvcm1OYW1lIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5IiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsIndkaW8iLCJyZW1vdGUiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiZSIsImdldEFwcGl1bUluaXRFcnJvciIsInNldFRpbWVvdXQiLCJtb2RVdGlscyIsIm92ZXJ3cml0ZVdkaW9Db21tYW5kcyIsImRpc3Bvc2UiLCJzdGF0dXMiLCJ0b1VwcGVyQ2FzZSIsInNlbGVuaXVtU2Vzc2lvblRpbWVvdXQiLCJkZWxldGVTZXNzaW9uIiwid2FybiIsInRyYW5zYWN0aW9uIiwidG9TdHJpbmciLCJzbGljZSIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiX2lzQWN0aW9uIiwiX3Rha2VTY3JlZW5zaG90U2lsZW50IiwidGFrZVNjcmVlbnNob3QiLCJlcnJvciIsIl9hZGp1c3RBcHBpdW1Mb2ciLCJsb2ciLCJzcmMiLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibWVzc2FnZSIsImxldmVsIiwiX2l0ZXJhdGlvblN0YXJ0IiwiX2l0ZXJhdGlvbkVuZCIsInR5cGUiLCJlcnJvckhlbHBlciIsImVycm9yQ29kZSIsIlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCIsImNvbGxlY3RBcHBpdW1Mb2dzIiwibG9ncyIsImdldEFwcGl1bUxvZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJsb2dFbnRyeSIsInB1c2giLCJfZ2V0V2Rpb0xvY2F0b3IiLCJsb2NhdG9yIiwiU0NSSVBUX0VSUk9SIiwiaW5kZXhPZiIsInN1YnN0ciIsImxlbmd0aCIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBR0EsTUFBTUEsV0FBVyxHQUFHLEtBQXBCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsOEJBQTNCO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLE1BQXBCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsQ0FBQyxNQUFELEVBQVMsYUFBVCxDQUEvQjtBQUNBLE1BQU1DLGVBQWUsR0FBRyxDQUFDLE1BQUQsRUFBUSxLQUFSLEVBQWMsT0FBZCxFQUFzQixPQUF0QixFQUE4QixRQUE5QixFQUF1QyxVQUF2QyxDQUF4QjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLEtBQUssSUFBbEMsQyxDQUFtRDs7QUFDbkQsTUFBTUMsd0JBQXdCLEdBQUc7QUFDN0JDLEVBQUFBLFVBQVUsRUFBRSwrQ0FEaUI7QUFFN0JDLEVBQUFBLFVBQVUsRUFBRSwyQ0FGaUI7QUFHN0JDLEVBQUFBLE9BQU8sRUFBRSxvQ0FIb0I7QUFJN0JDLEVBQUFBLEtBQUssRUFBRSxvQ0FKc0I7QUFLN0JDLEVBQUFBLE9BQU8sRUFBRSxtREFMb0I7QUFNN0JDLEVBQUFBLFdBQVcsRUFBRTtBQU5nQixDQUFqQzs7QUFTZSxNQUFNQyxhQUFOLFNBQTRCQyx3QkFBNUIsQ0FBNEM7QUFDdkRDLEVBQUFB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QUFFRDlGLEVBQUFBLG9CQUFvQixHQUFHO0FBQ25CLFNBQUtELE9BQUwsQ0FBYW9HLGNBQWIsR0FBOEIsS0FBS04sZUFBbkM7QUFDQSxTQUFLOUYsT0FBTCxDQUFhcUcsWUFBYixHQUE0QjdDLGVBQVM2QyxZQUFyQztBQUNBLFNBQUtyRyxPQUFMLENBQWFzRyxVQUFiLEdBQTBCOUMsZUFBUzhDLFVBQW5DO0FBQ0EsU0FBS3RHLE9BQUwsQ0FBYXVHLFdBQWIsR0FBMkIvQyxlQUFTK0MsV0FBcEM7QUFDQSxTQUFLdkcsT0FBTCxDQUFhd0csZUFBYixHQUErQmhELGVBQVNnRCxlQUF4QztBQUNBLFNBQUt4RyxPQUFMLENBQWF5RyxnQkFBYixHQUFnQ2pELGVBQVNpRCxnQkFBekM7QUFDQSxTQUFLekcsT0FBTCxDQUFhMEcsa0JBQWIsR0FBa0NsRCxlQUFTa0Qsa0JBQTNDO0FBQ0EsU0FBSzFHLE9BQUwsQ0FBYTJHLHNCQUFiLEdBQXNDbkQsZUFBU21ELHNCQUEvQztBQUNBLFNBQUszRyxPQUFMLENBQWE0RyxjQUFiLEdBQThCcEQsZUFBU29ELGNBQXZDO0FBQ0EsU0FBSzVHLE9BQUwsQ0FBYTZHLDRCQUFiLEdBQTRDckQsZUFBU3FELDRCQUFyRDtBQUNBLFNBQUs3RyxPQUFMLENBQWE4RyxvQkFBYixHQUFvQ3RELGVBQVNzRCxvQkFBN0M7QUFDQSxTQUFLOUcsT0FBTCxDQUFhK0csK0JBQWIsR0FBK0N2RCxlQUFTdUQsK0JBQXhEO0FBQ0EsU0FBSy9HLE9BQUwsQ0FBYWdILGtCQUFiLEdBQWtDeEQsZUFBU3dELGtCQUEzQztBQUNBLFNBQUtoSCxPQUFMLENBQWFpSCwwQkFBYixHQUEwQ3pELGVBQVN5RCwwQkFBbkQ7QUFDQSxTQUFLakgsT0FBTCxDQUFha0gscUJBQWIsR0FBcUMxRCxlQUFTMEQscUJBQTlDO0FBQ0g7O0FBelNzRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyoqXG4gKiBAbmFtZSB3aW5cbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBXaW5kb3dzIG5hdGl2ZSBhcHBsaWNhdGlvbnMgYXV0b21hdGlvbi5cbiAqIEBzYW1wbGUgKipMb2NhdG9yczoqKiAgXG4gKiAgIFxuICogICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXG4gKiAgKiBgfkFjY2Vzc2liaWxpdHlJZGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIEFjY2Vzc2liaWxpdHkgSUQuIEF0dHJpYnV0ZSBuYW1lIGluIGluc3BlY3QuZXhlIC0gQXV0b21hdGlvbklkLlxuICogICogYG5hbWU9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIG5hbWUuIEF0dHJpYnV0ZSBuYW1lIGluIGluc3BlY3QuZXhlIC0gTmFtZS5cbiAqICAqIGBpZD1JRGAgLSAgTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRC4gQXR0cmlidXRlIG5hbWUgaW4gaW5zcGVjdC5leGUgLSBSdW50aW1lSUQuICBcbiAqICBcbiAqICoqUGF0dGVybiBhcmd1bWVudHM6KipcbiAqICBcbiAqICBDb21tYW5kcyB3aGljaCBleHBlY3QgYSBzdHJpbmcgbWF0Y2hpbmcgcGF0dGVybiBpbiB0aGVpciBhcmd1bWVudHMsIHN1cHBvcnQgZm9sbG93aW5nIHBhdHRlcm5zIHVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlOlxuICogIFxuICogICogYHJlZ2V4OlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgcmVndWxhciBleHByZXNzaW9uLlxuICogICogYFBBVFRFUk5gIC0gVmVyYmF0aW0gbWF0Y2hpbmcuXG4gKi9cblxuaW1wb3J0IFVSTCBmcm9tICd1cmwnO1xuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcbmltcG9ydCBtb2RVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xuXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd3aW4nO1xuY29uc3QgREVGQVVMVF9BUFBJVU1fVVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWInO1xuY29uc3QgREVGQVVMVF9BUFAgPSAnUm9vdCc7XG5jb25zdCBOT19TQ1JFRU5TSE9UX0NPTU1BTkRTID0gWydpbml0JywgJ2Fzc2VydEFsZXJ0J107XG5jb25zdCBBQ1RJT05fQ09NTUFORFMgPSBbJ29wZW4nLCd0YXAnLCdjbGljaycsJ3N3aXBlJywnc3VibWl0Jywnc2V0VmFsdWUnXTtcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxuY29uc3QgV0lORE9XU19TVEFOREFSRF9BUFBfSURTID0ge1xuICAgIENhbGN1bGF0b3I6ICdNaWNyb3NvZnQuV2luZG93c0NhbGN1bGF0b3JfOHdla3liM2Q4YmJ3ZSFBcHAnLFxuICAgIEFsYXJtQ2xvY2s6ICdNaWNyb3NvZnQuV2luZG93c0FsYXJtc184d2VreWIzZDhiYndlIUFwcCcsXG4gICAgTm90ZXBhZDogJ0M6XFxcXFdpbmRvd3NcXFxcU3lzdGVtMzJcXFxcbm90ZXBhZC5leGUnLFxuICAgIFBhaW50OiAnQzpcXFxcV2luZG93c1xcXFxTeXN0ZW0zMlxcXFxtc3BhaW50LmV4ZScsXG4gICAgUGFpbnQzRDogJ01pY3Jvc29mdC5NU1BhaW50Xzh3ZWt5YjNkOGJid2UhTWljcm9zb2Z0Lk1TUGFpbnQnLFxuICAgIFN0aWNreU5vdGVzOiAnTWljcm9zb2Z0Lk1pY3Jvc29mdFN0aWNreU5vdGVzXzh3ZWt5YjNkOGJid2UhQXBwJ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2luZG93c01vZHVsZSBleHRlbmRzIFdlYkRyaXZlck1vZHVsZSB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9O1xuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5uZXR3b3JrUmVxdWVzdHMgPSBudWxsO1xuICAgICAgICB0aGlzLmhlbHBlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5fbG9hZEhlbHBlckZ1bmN0aW9ucygpO1xuICAgICAgICAvLyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNvbWUgbW9kdWxlIGNvbW1hbmRzIG1pZ2h0IHJlZmVyIHRvIHRoaXMuT3hFcnJvciBhbmQgdGhpcy5lcnJIZWxwZXIpXG4gICAgICAgIHRoaXMuT3hFcnJvciA9IE94RXJyb3I7XG4gICAgICAgIHRoaXMuZXJySGVscGVyID0gZXJySGVscGVyO1xuICAgICAgICAvLyBob2xkcyBlbGVtZW50IG9wZXJhdGlvbiB0aW1lb3V0IHZhbHVlXG4gICAgICAgIHRoaXMud2FpdEZvclRpbWVvdXQgPSBERUZBVUxUX1dBSVRfVElNRU9VVDtcbiAgICB9XG5cbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIFdESU8gZHJpdmVyLlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gV0RJTyBkcml2ZXIuXG4gICAgICovXG4gICAgZ2V0RHJpdmVyKCkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0RHJpdmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgY3VycmVudGx5IGRlZmluZWQgY2FwYWJpbGl0aWVzLlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGdldENhcGFiaWxpdGllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwcyB8fCBzdXBlci5nZXRDYXBhYmlsaXRpZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IEFwcGl1bSBzZXNzaW9uLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gY2FwcyAtIERlc2lyZWQgY2FwYWJpbGl0aWVzLiBJZiBub3Qgc3BlY2lmaWVkIGNhcGFiaWxpdGllcyB3aWxsIGJlIHRha2VuIGZyb20gc3VpdGUgZGVmaW5pdGlvbi5cbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGFwcGl1bVVybCAtIFJlbW90ZSBBcHBpdW0gc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YikuXG4gICAgICovXG4gICAgYXN5bmMgaW5pdChjYXBzLCBhcHBpdW1VcmwpIHtcbiAgICAgICAgLy8gaWYgcmVvcGVuU2Vzc2lvbiBpcyB0cnVlIC0gcmVpbml0aWxpemUgdGhlIG1vZHVsZVxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlb3BlblNlc3Npb24gIT09IGZhbHNlKSB7IC8vIHRydWUgb3IgZmFsc2UgaWYgZXhwbGlzaXRseSBzZXQuIHRydWUgb24gbnVsbCBvciB1bmRlZmluZWQuXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3Jlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlbG9hZGluZyB0aGUgc2Vzc2lvbi4uLicpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnJlbG9hZFNlc3Npb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ21vYi5pbml0IHdhcyBjYWxsZWQgZm9yIGFscmVhZHkgaW5pdGlhbGl6ZWQgbW9kdWxlLiByZW9wZW5TZXNzaW9uIGlzIGZhbHNlIHNvIHRoZSBjYWxsIGlzIGlnbm9yZWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFwcGl1bVVybCkge1xuICAgICAgICAgICAgYXBwaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybCB8fCBERUZBVUxUX0FQUElVTV9VUkw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcbiAgICAgICAgdGhpcy5jYXBzID0ge307XG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzKSB7XG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2Fwcykge1xuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSAnYXBwJyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIChtYW5kYXRvcnkgZm9yIFdpbkFwcERyaXZlcilcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuYXBwKSB7XG4gICAgICAgICAgICB0aGlzLmNhcHMuYXBwID0gREVGQVVMVF9BUFA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhcHBDYXBWYWwgPSB0aGlzLmNhcHMuYXBwO1xuICAgICAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgJ2FwcCcgdmFsdWUgaW4gdGhlIFdpbmRvd3Mgc3RhbmRhcmQgYXBwIGxpc3RcbiAgICAgICAgICAgIGNvbnN0IGFwcE5hbWVzID0gT2JqZWN0LmtleXMoV0lORE9XU19TVEFOREFSRF9BUFBfSURTKTtcbiAgICAgICAgICAgIGlmIChhcHBOYW1lcy5pbmNsdWRlcyhhcHBDYXBWYWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzLmFwcCA9IFdJTkRPV1NfU1RBTkRBUkRfQVBQX0lEU1thcHBDYXBWYWxdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNldCBkZWZhdWx0IHBsYXRmb3JtTmFtZSBmb3IgV2luQXBwRHJpdmVyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLnBsYXRmb3JtTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5jYXBzLnBsYXRmb3JtTmFtZSA9ICdXaW5kb3dzJztcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBkZXZpY2VOYW1lIGZvciBXaW5BcHBEcml2ZXJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSAnV2luZG93c1BDJztcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBwbGF0Zm9ybVZlcnNpb24gZm9yIFdpbkFwcERyaXZlclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24gPSAnMS4wJztcbiAgICAgICAgfVxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcbiAgICAgICAgY29uc3QgdXJsID0gVVJMLnBhcnNlKGFwcGl1bVVybCk7XG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xuICAgICAgICBjb25zdCBob3N0ID0gdXJsLmhvc3RuYW1lO1xuICAgICAgICBjb25zdCBwb3J0ID0gcGFyc2VJbnQodXJsLnBvcnQgfHwgKHByb3RvY29sID09PSAnaHR0cHMnID8gNDQzIDogODApKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcblxuICAgICAgICAvLyBhdXRoIGlzIG5lZWRlZCBtb3N0bHkgZm9yIGNsb3VkIHByb3ZpZGVycyBzdWNoIGFzIExhbWJkYVRlc3RcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XG4gICAgICAgICAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy53ZGlvT3B0cyA9IHtcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxuICAgICAgICAgICAgICAgIGtleTogYXV0aFsxXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3ZGlvT3B0cyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcbiAgICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcbiAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxuICAgICAgICAgICAgcG9ydDogcG9ydCxcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHRoaXMuY2FwcyxcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcbiAgICAgICAgICAgIHJ1bm5lcjogJ3JlcGwnLFxuICAgICAgICAgICAgd2FpdGZvclRpbWVvdXQ6IDUwMDAsIC8vIGluY3JlYXNlIHRoZSBkZWZhdWx0IDMwMDBcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5Q291bnQ6IDFcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBhd2FpdCB3ZGlvLnJlbW90ZSh3ZGlvT3B0cyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0QXBwaXVtSW5pdEVycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQgfSk7XG5cbiAgICAgICAgYXdhaXQgbW9kVXRpbHMub3ZlcndyaXRlV2Rpb0NvbW1hbmRzKHRoaXMuZHJpdmVyKTtcblxuICAgICAgICBzdXBlci5pbml0KHRoaXMuZHJpdmVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cbiAgICAgKi9cbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoIVsnQ0FOQ0VMRUQnLCAnRkFJTEVEJ10uaW5jbHVkZXMoc3RhdHVzKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gd2lsbCB0YWtlIDUgbWluIHRvIGNhbGxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdFcnJvciBkaXNwb3NpbmcgZHJpdmVyOiAnICsgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcbiAgICAgICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHdpbGwgcGVyc2lzdCB0aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmUgdW5pcXVlLlxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gVGhlIHRyYW5zYWN0aW9uIG5hbWUuXG4gICAgICovXG4gICAgdHJhbnNhY3Rpb24obmFtZSkge1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBqdXN0IGluIGNhc2UgdXNlciBwYXNzZWQgYSBjb21wbGV4IG9iamVjdCBieSBtaXN0YWtlXG4gICAgICAgIG5hbWUgPSBuYW1lLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgLy8gbGltaXQgdGhlIG5hbWUgbGVuZ3RoIChzaW5jZSB3ZSBjYW4ndCBzdG9yZSB2YWx1ZXMgbGFyZ2VyIHRoYW4gNTEyQiBpbiB0aGUgZGF0YWJhc2UpXG4gICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIDUxMik7XG5cbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFByaXZhdGVcbiAgICAgKi9cblxuICAgIF9pc0FjdGlvbihuYW1lKSB7XG4gICAgICAgIHJldHVybiBBQ1RJT05fQ09NTUFORFMuaW5jbHVkZXMobmFtZSk7XG4gICAgfVxuXG4gICAgX3Rha2VTY3JlZW5zaG90U2lsZW50KG5hbWUpIHtcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3RcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlKTtcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIF9nZXRMb2dzKG5hbWUpIHtcbiAgICAvLyAgICAgaWYgKCFOT19MT0dTX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2dzKCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICBfYWRqdXN0QXBwaXVtTG9nKGxvZywgc3JjKSB7XG4gICAgICAgIGlmICghbG9nIHx8IHR5cGVvZiBsb2cgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPOiBjb252ZXJ0IGxvZy50aW1lc3RhbXAgZnJvbSB0aGUgZGV2aWNlIHRpbWUgem9uZSB0byB0aGUgbG9jYWwgb25lIChzbyB3ZSBjYW4gbGF0ZXIgY29ycmVsYXRlIGJldHdlZW4gc3RlcHMgYW5kIGxvZ3MpICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXG4gICAgICAgICAgICBtc2c6IGxvZy5tZXNzYWdlLFxuICAgICAgICAgICAgbGV2ZWw6IGxvZy5sZXZlbCxcbiAgICAgICAgICAgIHNyYzogc3JjXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX2l0ZXJhdGlvblN0YXJ0KCkge1xuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHNhdmVkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiBhbnlcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcbiAgICB9XG5cbiAgICBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZ25vcmUgdGhlIHJlc3QgaWYgbW9iIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWRcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb2xsZWN0IGFsbCBBcHBpdW0gbG9ncyBmb3IgdGhpcyBzZXNzaW9uXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEFwcGl1bUxvZ3MpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IHRoaXMuZ2V0QXBwaXVtTG9ncygpO1xuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbG9nRW50cnkgb2YgbG9ncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZ0VudHJ5LCAnYXBwaXVtJykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBBcHBpdW0gbG9ncy4nLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9nZXRXZGlvTG9jYXRvcihsb2NhdG9yKSB7XG4gICAgICAgIGlmICghbG9jYXRvcilcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBhcmd1bWVudCAtIGxvY2F0b3Igbm90IHNwZWNpZmllZCcpO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbG9jYXRvciA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCcvJykgPT09IDApXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiBgLy8qW0BpZD1cIiR7bG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKX1cIl1gO1xuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ25hbWU9JykgPT09IDApXG4gICAgICAgICAgICByZXR1cm4gJ1tuYW1lPVwiJyArIGxvY2F0b3Iuc3Vic3RyKCduYW1lPScubGVuZ3RoKSArICdcIl0nO1xuXG4gICAgICAgIHJldHVybiBsb2NhdG9yO1xuICAgIH1cblxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSB0aGlzLl9nZXRXZGlvTG9jYXRvcjtcbiAgICAgICAgdGhpcy5oZWxwZXJzLm1hdGNoUGF0dGVybiA9IG1vZFV0aWxzLm1hdGNoUGF0dGVybjtcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudCA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudDtcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xuICAgICAgICB0aGlzLmhlbHBlcnMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQ7XG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlciA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyO1xuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsO1xuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xuICAgIH1cbn1cblxuIl19
|
|
375
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13aW4uanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0FQUCIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldJTkRPV1NfU1RBTkRBUkRfQVBQX0lEUyIsIkNhbGN1bGF0b3IiLCJBbGFybUNsb2NrIiwiTm90ZXBhZCIsIlBhaW50IiwiUGFpbnQzRCIsIlN0aWNreU5vdGVzIiwiV2luZG93c01vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0IiwiYXBwaXVtVXJsIiwiaXNJbml0aWFsaXplZCIsInJlb3BlblNlc3Npb24iLCJkZWJ1ZyIsImRyaXZlciIsInJlbG9hZFNlc3Npb24iLCJfaXNJbml0aWFsaXplZCIsImN0eCIsImFwcCIsImFwcENhcFZhbCIsImFwcE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImluY2x1ZGVzIiwicGxhdGZvcm1OYW1lIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5IiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsIndkaW8iLCJyZW1vdGUiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiZSIsImdldEFwcGl1bUluaXRFcnJvciIsInNldFRpbWVvdXQiLCJtb2RVdGlscyIsIm92ZXJ3cml0ZVdkaW9Db21tYW5kcyIsImRpc3Bvc2UiLCJzdGF0dXMiLCJ0b1VwcGVyQ2FzZSIsInNlbGVuaXVtU2Vzc2lvblRpbWVvdXQiLCJkZWxldGVTZXNzaW9uIiwid2FybiIsInRyYW5zYWN0aW9uIiwidG9TdHJpbmciLCJzbGljZSIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiX2lzQWN0aW9uIiwiX3Rha2VTY3JlZW5zaG90U2lsZW50IiwidGFrZVNjcmVlbnNob3QiLCJlcnJvciIsIl9hZGp1c3RBcHBpdW1Mb2ciLCJsb2ciLCJzcmMiLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibWVzc2FnZSIsImxldmVsIiwiX2l0ZXJhdGlvblN0YXJ0IiwiX2l0ZXJhdGlvbkVuZCIsInR5cGUiLCJlcnJvckhlbHBlciIsImVycm9yQ29kZSIsIlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCIsImNvbGxlY3RBcHBpdW1Mb2dzIiwibG9ncyIsImdldEFwcGl1bUxvZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJsb2dFbnRyeSIsInB1c2giLCJfZ2V0V2Rpb0xvY2F0b3IiLCJsb2NhdG9yIiwiU0NSSVBUX0VSUk9SIiwiaW5kZXhPZiIsInN1YnN0ciIsImxlbmd0aCIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBR0EsTUFBTUEsV0FBVyxHQUFHLEtBQXBCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsOEJBQTNCO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLE1BQXBCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsQ0FBQyxNQUFELEVBQVMsYUFBVCxDQUEvQjtBQUNBLE1BQU1DLGVBQWUsR0FBRyxDQUFDLE1BQUQsRUFBUSxLQUFSLEVBQWMsT0FBZCxFQUFzQixPQUF0QixFQUE4QixRQUE5QixFQUF1QyxVQUF2QyxDQUF4QjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLEtBQUssSUFBbEMsQyxDQUFtRDs7QUFDbkQsTUFBTUMsd0JBQXdCLEdBQUc7QUFDN0JDLEVBQUFBLFVBQVUsRUFBRSwrQ0FEaUI7QUFFN0JDLEVBQUFBLFVBQVUsRUFBRSwyQ0FGaUI7QUFHN0JDLEVBQUFBLE9BQU8sRUFBRSxvQ0FIb0I7QUFJN0JDLEVBQUFBLEtBQUssRUFBRSxvQ0FKc0I7QUFLN0JDLEVBQUFBLE9BQU8sRUFBRSxtREFMb0I7QUFNN0JDLEVBQUFBLFdBQVcsRUFBRTtBQU5nQixDQUFqQzs7QUFTZSxNQUFNQyxhQUFOLFNBQTRCQyx3QkFBNUIsQ0FBNEM7QUFDdkRDLEVBQUFB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QUFFRDlGLEVBQUFBLG9CQUFvQixHQUFHO0FBQ25CLFNBQUtELE9BQUwsQ0FBYW9HLGNBQWIsR0FBOEIsS0FBS04sZUFBbkM7QUFDQSxTQUFLOUYsT0FBTCxDQUFhcUcsWUFBYixHQUE0QjdDLGVBQVM2QyxZQUFyQztBQUNBLFNBQUtyRyxPQUFMLENBQWFzRyxVQUFiLEdBQTBCOUMsZUFBUzhDLFVBQW5DO0FBQ0EsU0FBS3RHLE9BQUwsQ0FBYXVHLFdBQWIsR0FBMkIvQyxlQUFTK0MsV0FBcEM7QUFDQSxTQUFLdkcsT0FBTCxDQUFhd0csZUFBYixHQUErQmhELGVBQVNnRCxlQUF4QztBQUNBLFNBQUt4RyxPQUFMLENBQWF5RyxnQkFBYixHQUFnQ2pELGVBQVNpRCxnQkFBekM7QUFDQSxTQUFLekcsT0FBTCxDQUFhMEcsa0JBQWIsR0FBa0NsRCxlQUFTa0Qsa0JBQTNDO0FBQ0EsU0FBSzFHLE9BQUwsQ0FBYTJHLHNCQUFiLEdBQXNDbkQsZUFBU21ELHNCQUEvQztBQUNBLFNBQUszRyxPQUFMLENBQWE0RyxjQUFiLEdBQThCcEQsZUFBU29ELGNBQXZDO0FBQ0EsU0FBSzVHLE9BQUwsQ0FBYTZHLDRCQUFiLEdBQTRDckQsZUFBU3FELDRCQUFyRDtBQUNBLFNBQUs3RyxPQUFMLENBQWE4RyxvQkFBYixHQUFvQ3RELGVBQVNzRCxvQkFBN0M7QUFDQSxTQUFLOUcsT0FBTCxDQUFhK0csK0JBQWIsR0FBK0N2RCxlQUFTdUQsK0JBQXhEO0FBQ0EsU0FBSy9HLE9BQUwsQ0FBYWdILGtCQUFiLEdBQWtDeEQsZUFBU3dELGtCQUEzQztBQUNBLFNBQUtoSCxPQUFMLENBQWFpSCwwQkFBYixHQUEwQ3pELGVBQVN5RCwwQkFBbkQ7QUFDQSxTQUFLakgsT0FBTCxDQUFha0gscUJBQWIsR0FBcUMxRCxlQUFTMEQscUJBQTlDO0FBQ0g7O0FBelNzRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgd2luXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBXaW5kb3dzIG5hdGl2ZSBhcHBsaWNhdGlvbnMgYXV0b21hdGlvbi5cclxuICogQHNhbXBsZSAqKkxvY2F0b3JzOioqICBcclxuICogICBcclxuICogICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICAqIGB+QWNjZXNzaWJpbGl0eUlkYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgQWNjZXNzaWJpbGl0eSBJRC4gQXR0cmlidXRlIG5hbWUgaW4gaW5zcGVjdC5leGUgLSBBdXRvbWF0aW9uSWQuXHJcbiAqICAqIGBuYW1lPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBuYW1lLiBBdHRyaWJ1dGUgbmFtZSBpbiBpbnNwZWN0LmV4ZSAtIE5hbWUuXHJcbiAqICAqIGBpZD1JRGAgLSAgTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRC4gQXR0cmlidXRlIG5hbWUgaW4gaW5zcGVjdC5leGUgLSBSdW50aW1lSUQuICBcclxuICogIFxyXG4gKiAqKlBhdHRlcm4gYXJndW1lbnRzOioqXHJcbiAqICBcclxuICogIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqICBcclxuICogICogYHJlZ2V4OlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAgKiBgUEFUVEVSTmAgLSBWZXJiYXRpbSBtYXRjaGluZy5cclxuICovXHJcblxyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd3aW4nO1xyXG5jb25zdCBERUZBVUxUX0FQUElVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQVBQID0gJ1Jvb3QnO1xyXG5jb25zdCBOT19TQ1JFRU5TSE9UX0NPTU1BTkRTID0gWydpbml0JywgJ2Fzc2VydEFsZXJ0J107XHJcbmNvbnN0IEFDVElPTl9DT01NQU5EUyA9IFsnb3BlbicsJ3RhcCcsJ2NsaWNrJywnc3dpcGUnLCdzdWJtaXQnLCdzZXRWYWx1ZSddO1xyXG5jb25zdCBERUZBVUxUX1dBSVRfVElNRU9VVCA9IDYwICogMTAwMDsgICAgICAgICAgICAvLyBkZWZhdWx0IDYwcyB3YWl0IHRpbWVvdXRcclxuY29uc3QgV0lORE9XU19TVEFOREFSRF9BUFBfSURTID0ge1xyXG4gICAgQ2FsY3VsYXRvcjogJ01pY3Jvc29mdC5XaW5kb3dzQ2FsY3VsYXRvcl84d2VreWIzZDhiYndlIUFwcCcsXHJcbiAgICBBbGFybUNsb2NrOiAnTWljcm9zb2Z0LldpbmRvd3NBbGFybXNfOHdla3liM2Q4YmJ3ZSFBcHAnLFxyXG4gICAgTm90ZXBhZDogJ0M6XFxcXFdpbmRvd3NcXFxcU3lzdGVtMzJcXFxcbm90ZXBhZC5leGUnLFxyXG4gICAgUGFpbnQ6ICdDOlxcXFxXaW5kb3dzXFxcXFN5c3RlbTMyXFxcXG1zcGFpbnQuZXhlJyxcclxuICAgIFBhaW50M0Q6ICdNaWNyb3NvZnQuTVNQYWludF84d2VreWIzZDhiYndlIU1pY3Jvc29mdC5NU1BhaW50JyxcclxuICAgIFN0aWNreU5vdGVzOiAnTWljcm9zb2Z0Lk1pY3Jvc29mdFN0aWNreU5vdGVzXzh3ZWt5YjNkOGJid2UhQXBwJ1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2luZG93c01vZHVsZSBleHRlbmRzIFdlYkRyaXZlck1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubmV0d29ya1JlcXVlc3RzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMgPSB7fTtcclxuICAgICAgICB0aGlzLl9sb2FkSGVscGVyRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgLy8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IChzb21lIG1vZHVsZSBjb21tYW5kcyBtaWdodCByZWZlciB0byB0aGlzLk94RXJyb3IgYW5kIHRoaXMuZXJySGVscGVyKVxyXG4gICAgICAgIHRoaXMuT3hFcnJvciA9IE94RXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJIZWxwZXIgPSBlcnJIZWxwZXI7XHJcbiAgICAgICAgLy8gaG9sZHMgZWxlbWVudCBvcGVyYXRpb24gdGltZW91dCB2YWx1ZVxyXG4gICAgICAgIHRoaXMud2FpdEZvclRpbWVvdXQgPSBERUZBVUxUX1dBSVRfVElNRU9VVDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0RHJpdmVyXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIFdESU8gZHJpdmVyLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBXRElPIGRyaXZlci5cclxuICAgICAqL1xyXG4gICAgZ2V0RHJpdmVyKCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXREcml2ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXRDYXBhYmlsaXRpZXNcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgY3VycmVudGx5IGRlZmluZWQgY2FwYWJpbGl0aWVzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldENhcGFiaWxpdGllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXBzIHx8IHN1cGVyLmdldENhcGFiaWxpdGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGluaXRcclxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IEFwcGl1bSBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBjYXBzIC0gRGVzaXJlZCBjYXBhYmlsaXRpZXMuIElmIG5vdCBzcGVjaWZpZWQgY2FwYWJpbGl0aWVzIHdpbGwgYmUgdGFrZW4gZnJvbSBzdWl0ZSBkZWZpbml0aW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBhcHBpdW1VcmwgLSBSZW1vdGUgQXBwaXVtIHNlcnZlciBVUkwgKGRlZmF1bHQ6IGh0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWIpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KGNhcHMsIGFwcGl1bVVybCkge1xyXG4gICAgICAgIC8vIGlmIHJlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlaW5pdGlsaXplIHRoZSBtb2R1bGVcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVvcGVuU2Vzc2lvbiAhPT0gZmFsc2UpIHsgLy8gdHJ1ZSBvciBmYWxzZSBpZiBleHBsaXNpdGx5IHNldC4gdHJ1ZSBvbiBudWxsIG9yIHVuZGVmaW5lZC5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdyZW9wZW5TZXNzaW9uIGlzIHRydWUgLSByZWxvYWRpbmcgdGhlIHNlc3Npb24uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnJlbG9hZFNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ21vYi5pbml0IHdhcyBjYWxsZWQgZm9yIGFscmVhZHkgaW5pdGlhbGl6ZWQgbW9kdWxlLiByZW9wZW5TZXNzaW9uIGlzIGZhbHNlIHNvIHRoZSBjYWxsIGlzIGlnbm9yZWQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFhcHBpdW1VcmwpIHtcclxuICAgICAgICAgICAgYXBwaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybCB8fCBERUZBVUxUX0FQUElVTV9VUkw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcclxuICAgICAgICB0aGlzLmNhcHMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5jdHguY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSAnYXBwJyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIChtYW5kYXRvcnkgZm9yIFdpbkFwcERyaXZlcilcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5hcHApIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmFwcCA9IERFRkFVTFRfQVBQO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYXBwQ2FwVmFsID0gdGhpcy5jYXBzLmFwcDtcclxuICAgICAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgJ2FwcCcgdmFsdWUgaW4gdGhlIFdpbmRvd3Mgc3RhbmRhcmQgYXBwIGxpc3RcclxuICAgICAgICAgICAgY29uc3QgYXBwTmFtZXMgPSBPYmplY3Qua2V5cyhXSU5ET1dTX1NUQU5EQVJEX0FQUF9JRFMpO1xyXG4gICAgICAgICAgICBpZiAoYXBwTmFtZXMuaW5jbHVkZXMoYXBwQ2FwVmFsKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzLmFwcCA9IFdJTkRPV1NfU1RBTkRBUkRfQVBQX0lEU1thcHBDYXBWYWxdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IHBsYXRmb3JtTmFtZSBmb3IgV2luQXBwRHJpdmVyXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMucGxhdGZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUgPSAnV2luZG93cyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IGRldmljZU5hbWUgZm9yIFdpbkFwcERyaXZlclxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmRldmljZU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSAnV2luZG93c1BDJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgcGxhdGZvcm1WZXJzaW9uIGZvciBXaW5BcHBEcml2ZXJcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbiA9ICcxLjAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB1cmwgPSBVUkwucGFyc2UoYXBwaXVtVXJsKTtcclxuICAgICAgICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKTtcclxuICAgICAgICBjb25zdCBob3N0ID0gdXJsLmhvc3RuYW1lO1xyXG4gICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh1cmwucG9ydCB8fCAocHJvdG9jb2wgPT09ICdodHRwcycgPyA0NDMgOiA4MCkpO1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB1cmwucGF0aG5hbWU7XHJcblxyXG4gICAgICAgIC8vIGF1dGggaXMgbmVlZGVkIG1vc3RseSBmb3IgY2xvdWQgcHJvdmlkZXJzIHN1Y2ggYXMgTGFtYmRhVGVzdFxyXG4gICAgICAgIGlmICh1cmwuYXV0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLndkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcjogYXV0aFswXSxcclxuICAgICAgICAgICAgICAgIGtleTogYXV0aFsxXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHdkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMud2Rpb09wdHMgfHwge30sXHJcbiAgICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcclxuICAgICAgICAgICAgaG9zdG5hbWU6IGhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXHJcbiAgICAgICAgICAgIGNhcGFiaWxpdGllczogdGhpcy5jYXBzLFxyXG4gICAgICAgICAgICBsb2dMZXZlbDogJ3NpbGVudCcsXHJcbiAgICAgICAgICAgIHJ1bm5lcjogJ3JlcGwnLFxyXG4gICAgICAgICAgICB3YWl0Zm9yVGltZW91dDogNTAwMCwgLy8gaW5jcmVhc2UgdGhlIGRlZmF1bHQgMzAwMFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlUaW1lb3V0OiAzMTAqMTAwMCxcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5Q291bnQ6IDFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IGF3YWl0IHdkaW8ucmVtb3RlKHdkaW9PcHRzKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0QXBwaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQgfSk7XHJcblxyXG4gICAgICAgIGF3YWl0IG1vZFV0aWxzLm92ZXJ3cml0ZVdkaW9Db21tYW5kcyh0aGlzLmRyaXZlcik7XHJcblxyXG4gICAgICAgIHN1cGVyLmluaXQodGhpcy5kcml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcclxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMpIHtcclxuICAgICAgICBzdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVsnQ0FOQ0VMRUQnLCAnRkFJTEVEJ10uaW5jbHVkZXMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gd2lsbCB0YWtlIDUgbWluIHRvIGNhbGxcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdFcnJvciBkaXNwb3NpbmcgZHJpdmVyOiAnICsgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHRpbGwgYSBuZXcgb25lIGlzIG9wZW5lZC4gVHJhbnNhY3Rpb24gbmFtZXMgbXVzdCBiZSB1bmlxdWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gdHJhbnNhY3Rpb25cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gVGhlIHRyYW5zYWN0aW9uIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zYWN0aW9uKG5hbWUpIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBqdXN0IGluIGNhc2UgdXNlciBwYXNzZWQgYSBjb21wbGV4IG9iamVjdCBieSBtaXN0YWtlXHJcbiAgICAgICAgbmFtZSA9IG5hbWUudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgLy8gbGltaXQgdGhlIG5hbWUgbGVuZ3RoIChzaW5jZSB3ZSBjYW4ndCBzdG9yZSB2YWx1ZXMgbGFyZ2VyIHRoYW4gNTEyQiBpbiB0aGUgZGF0YWJhc2UpXHJcbiAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgNTEyKTtcclxuXHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZVxyXG4gICAgICovXHJcblxyXG4gICAgX2lzQWN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU2NyZWVuc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlKTtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIF9nZXRMb2dzKG5hbWUpIHtcclxuICAgIC8vICAgICBpZiAoIU5PX0xPR1NfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9ncygpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBfYWRqdXN0QXBwaXVtTG9nKGxvZywgc3JjKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBkZXZpY2UgdGltZSB6b25lIHRvIHRoZSBsb2NhbCBvbmUgKHNvIHdlIGNhbiBsYXRlciBjb3JyZWxhdGUgYmV0d2VlbiBzdGVwcyBhbmQgbG9ncykgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwsXHJcbiAgICAgICAgICAgIHNyYzogc3JjXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWdub3JlIHRoZSByZXN0IGlmIG1vYiBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCBBcHBpdW0gbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QXBwaXVtTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IHRoaXMuZ2V0QXBwaXVtTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZ0VudHJ5IG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZ0VudHJ5LCAnYXBwaXVtJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBBcHBpdW0gbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcikge1xyXG4gICAgICAgIGlmICghbG9jYXRvcilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gbG9jYXRvciBub3Qgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGxvY2F0b3IgPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJy8nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGAvLypbQGlkPVwiJHtsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpfVwiXWA7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCduYW1lPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJ1tuYW1lPVwiJyArIGxvY2F0b3Iuc3Vic3RyKCduYW1lPScubGVuZ3RoKSArICdcIl0nO1xyXG5cclxuICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEhlbHBlckZ1bmN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSB0aGlzLl9nZXRXZGlvTG9jYXRvcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuID0gbW9kVXRpbHMubWF0Y2hQYXR0ZXJuO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0RWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5yZXN0b3JlVGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXI7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dDtcclxuICAgIH1cclxufVxyXG5cclxuIl19
|
|
@@ -6,13 +6,13 @@ var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
|
6
6
|
|
|
7
7
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
8
|
|
|
9
|
-
/*
|
|
10
|
-
* Copyright (C) 2015-present CloudBeat Limited
|
|
11
|
-
*
|
|
12
|
-
* This program is free software: you can redistribute it and/or modify
|
|
13
|
-
* it under the terms of the GNU General Public License as published by
|
|
14
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
15
|
-
* (at your option) any later version.
|
|
9
|
+
/*
|
|
10
|
+
* Copyright (C) 2015-present CloudBeat Limited
|
|
11
|
+
*
|
|
12
|
+
* This program is free software: you can redistribute it and/or modify
|
|
13
|
+
* it under the terms of the GNU General Public License as published by
|
|
14
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
15
|
+
* (at your option) any later version.
|
|
16
16
|
*/
|
|
17
17
|
const errHelper = require('../errors/helper');
|
|
18
18
|
|
|
@@ -447,4 +447,4 @@ module.exports = {
|
|
|
447
447
|
}
|
|
448
448
|
}
|
|
449
449
|
};
|
|
450
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL3V0aWxzLmpzIl0sIm5hbWVzIjpbImVyckhlbHBlciIsInJlcXVpcmUiLCJ2MSIsInByb3ZpZGVycyIsIlBFUkZFQ1RPIiwiQlJPV1NFUlNUQUNLIiwiU0FVQ0VMQUJTIiwiTEFNQkRBVEVTVCIsIlRFU1RJTkdCT1QiLCJjb250ZXh0TGlzdCIsImFuZHJvaWQiLCJpb3MiLCJoeWJyaWQiLCJ3ZWIiLCJjbWRzVG9PdmVyd3JpdGUiLCJpc0VsZW1lbnROb3RGb3VuZCIsImVsIiwicmVzdWx0IiwiZXJyb3IiLCJtZXNzYWdlIiwic3RhcnRzV2l0aCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtYXRjaFBhdHRlcm4iLCJ2YWwiLCJwYXR0ZXJuIiwiZ2xvYlRvUmVnZXgiLCJ0b1N0cmluZyIsInJlcGxhY2UiLCJyZWdleCIsImluZGV4T2YiLCJSZWdFeHAiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJ0ZXN0IiwiZmxhZ3MiLCJnZXRFbGVtZW50IiwibG9jYXRvciIsIndhaXRGb3JWaXNpYmxlIiwidGltZW91dCIsInRocm93RXhjZXB0aW9uIiwic2V0VGltZW91dEltcGxpY2l0IiwiY2FsbCIsImNvbnN0cnVjdG9yIiwibmFtZSIsImhlbHBlcnMiLCJnZXRXZGlvTG9jYXRvciIsImRyaXZlciIsIiQiLCJlbGVtZW50Tm90Rm91bmQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkVMRU1FTlRfTk9UX0ZPVU5EIiwid2FpdEZvckRpc3BsYXllZCIsIndhaXRGb3JUaW1lb3V0IiwiZSIsImluY2x1ZGVzIiwiRUxFTUVOVF9OT1RfVklTSUJMRSIsImdldEVsZW1lbnRzIiwiZWxzIiwiJCQiLCJlbGVtZW50c05vdEZvdW5kIiwiZ2V0Q2hpbGRFbGVtZW50IiwicGFyZW50RWxlbWVudCIsIlNDUklQVF9FUlJPUiIsImdldENoaWxkRWxlbWVudHMiLCJzZWxlbml1bVRpbWVvdXQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0IiwidGltZW91dHMiLCJjYXBhYmlsaXRpZXMiLCJicm93c2VyTmFtZSIsImdldFRpbWVvdXRzIiwic3RvcFVybCIsImNvbnNvbGUiLCJsb2ciLCJpbXBsaWNpdCIsIl9wcmV2SW1wbGljaXRUaW1lb3V0IiwicGFnZUxvYWQiLCJfcHJldlBhZ2VMb2FkVGltZW91dCIsInNldFRpbWVvdXQiLCJhc3NlcnRBcmd1bWVudCIsImFyZyIsInVuZGVmaW5lZCIsImFzc2VydEFyZ3VtZW50U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiYXNzZXJ0Q29udGV4dCIsImFsb3dlZENvbnRleHRzIiwiY29udGV4dCIsImdldENvbnRleHQiLCJpc1dlYiIsInN1YnN0ciIsImdldExvZ1R5cGVzIiwicHJvdmlkZXIiLCJkZXRlcm1pbmVQcm92aWRlciIsIndkaW9PcHRzIiwiaG9zdG5hbWUiLCJoYXNDaXJjdWxhckRlcGVuZGVuY3kiLCJvYmoiLCJKU09OIiwic3RyaW5naWZ5IiwiU3RyaW5nIiwiYXNzZXJ0Q2lyY3VsYXIiLCJDSVJDVUxBUl9FUlJPUiIsIm5ld1ZpZGVvQXR0YWNobWVudCIsImZpbGVOYW1lIiwidmlkZW9VcmwiLCJpZCIsInR5cGUiLCJzdWJ0eXBlIiwiX3VybCIsIm92ZXJ3cml0ZVdkaW9Db21tYW5kcyIsImNtZCIsIm92ZXJ3cml0ZUNvbW1hbmQiLCJvcmlnRnVuYyIsImFwcGx5Iiwic2xpY2UiLCJhcmd1bWVudHMiXSwibWFwcGluZ3MiOiI7Ozs7QUFVQTs7OztBQVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxrQkFBRCxDQUF6Qjs7QUFF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VUFBVUUsUUFBVixFQUFvQjtBQUNuRCxlQUFPQSxRQUFRLENBQUNDLEtBQVQsQ0FBZXJDLFNBQWYsRUFBMEIsR0FBR3NDLEtBQUgsQ0FBUy9FLElBQVQsQ0FBY2dGLFNBQWQsRUFBeUIsQ0FBekIsQ0FBMUIsQ0FBUDtBQUNILE9BRkssRUFFSCxJQUZHLENBQU47QUFHSDtBQUNKO0FBaGFZLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqL1xuXG5jb25zdCBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xuY29uc3QgeyB2MSB9ID0gcmVxdWlyZSgndXVpZCcpO1xuXG5jb25zdCBwcm92aWRlcnMgPSB7XG4gICAgUEVSRkVDVE86ICdwZXJmZWN0bycsXG4gICAgQlJPV1NFUlNUQUNLOiAnYnJvd3NlcnN0YWNrJyxcbiAgICBTQVVDRUxBQlM6ICdzYXVjZScsXG4gICAgTEFNQkRBVEVTVDogJ2xhbWJkYScsXG4gICAgVEVTVElOR0JPVDogJ3Rlc3Rpbmdib3QnXG59O1xuXG5jb25zdCBjb250ZXh0TGlzdCA9IHtcbiAgICBhbmRyb2lkOiAnYW5kcm9pZCcsXG4gICAgaW9zOiAnaW9zJyxcbiAgICBoeWJyaWQ6ICdoeWJyaWQnLFxuICAgIHdlYjogJ3dlYidcbn07XG5cbmNvbnN0IGNtZHNUb092ZXJ3cml0ZSA9IFsnJCQnLCAnJCcsJ2FkZFZhbHVlJywnY2xlYXJWYWx1ZScsJ2NsaWNrJywnZG91YmxlQ2xpY2snLCdkcmFnQW5kRHJvcCcsJ2dldEF0dHJpYnV0ZScsJ2dldENTU1Byb3BlcnR5JywnZ2V0Q29tcHV0ZWRMYWJlbCcsJ2dldENvbXB1dGVkUm9sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ2dldEhUTUwnLCdnZXRMb2NhdGlvbicsJ2dldFByb3BlcnR5JywnZ2V0U2l6ZScsJ2dldFRhZ05hbWUnLCdnZXRUZXh0JywnZ2V0VmFsdWUnLCdpc0NsaWNrYWJsZScsJ2lzRGlzcGxheWVkJywnaXNEaXNwbGF5ZWRJblZpZXdwb3J0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAnaXNFbmFibGVkJywnaXNFcXVhbCcsJ2lzRXhpc3RpbmcnLCdpc0ZvY3VzZWQnLCdpc1NlbGVjdGVkJywnbW92ZVRvJywnbmV4dEVsZW1lbnQnLCdwYXJlbnRFbGVtZW50JywncHJldmlvdXNFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAncmVhY3QkJCcsJ3JlYWN0JCcsJ3NhdmVTY3JlZW5zaG90Jywnc2Nyb2xsSW50b1ZpZXcnLCdzZWxlY3RCeUF0dHJpYnV0ZScsJ3NlbGVjdEJ5SW5kZXgnLCdzZWxlY3RCeVZpc2libGVUZXh0Jywnc2V0VmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICdzaGFkb3ckJCcsJ3NoYWRvdyQnLCd0b3VjaEFjdGlvbicsJ3dhaXRGb3JDbGlja2FibGUnLCd3YWl0Rm9yRGlzcGxheWVkJywnd2FpdEZvckVuYWJsZWQnLCd3YWl0Rm9yRXhpc3QnLCd3YWl0VW50aWwnXTtcblxuY29uc3QgaXNFbGVtZW50Tm90Rm91bmQgPSAoZWwpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgICBlbC5lcnJvciAmJiAoXG4gICAgICAgIGVsLmVycm9yLmVycm9yID09PSAnbm8gc3VjaCBlbGVtZW50JyB8fFxuICAgICAgICAoZWwuZXJyb3IubWVzc2FnZSAmJiAvKiB3aW5hcHBkcml2ZXIgd2luLnJpZ2h0Q2xpY2sgKi8gZWwuZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKCdubyBzdWNoIGVsZW1lbnQnKSB8fFxuICAgICAgICBlbC5lcnJvci5tZXNzYWdlICYmIC8qIHdpbmFwcGRyaXZlciAqLyBlbC5lcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0FuIGVsZW1lbnQgY291bGQgbm90IGJlIGxvY2F0ZWQnKSkpXG4gICAgKSB7XG4gICAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBtYXRjaFBhdHRlcm46IGZ1bmN0aW9uKHZhbCwgcGF0dGVybikge1xuICAgICAgICBpZiAoIXZhbCAmJiAhcGF0dGVybikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZ2xvYlRvUmVnZXggPSByZXF1aXJlKCdnbG9iLXRvLXJlZ2V4cCcpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcblxuICAgICAgICB2YXIgcmVnZXg7XG4gICAgICAgIGlmIChwYXR0ZXJuLmluZGV4T2YoJ3JlZ2V4OicpID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCB1c2luZyBhIHJlZ3VsYXItZXhwcmVzc2lvblxuICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4uc3Vic3RyaW5nKCdyZWdleDonLmxlbmd0aCksICdnJyk7XG4gICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWwpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhdHRlcm4uaW5kZXhPZigncmVnZXhpOicpID09IDApIHsgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2ggdXNpbmcgYSBjYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXItZXhwcmVzc2lvblxuICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4uc3Vic3RyaW5nKCdyZWdleGk6Jy5sZW5ndGgpLCAnaWcnKTtcbiAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5pbmRleE9mKCdleGFjdDonKSA9PSAwIHx8IHBhdHRlcm4gPT09ICcnKSB7ICAvLyBtYXRjaCBhIHN0cmluZyBleGFjdGx5LCB2ZXJiYXRpbVxuICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4uc3Vic3RyaW5nKCdleGFjdDonLmxlbmd0aCkgPT09IHZhbDtcbiAgICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuLmluZGV4T2YoJ2dsb2I6JykgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoIGFnYWluc3QgYSBjYXNlLWluc2Vuc2l0aXZlIFwiZ2xvYlwiIHBhdHRlcm5cbiAgICAgICAgICAgIHJlZ2V4ID0gZ2xvYlRvUmVnZXgocGF0dGVybi5zdWJzdHJpbmcoJ2dsb2I6Jy5sZW5ndGgpLCB7IGZsYWdzOiAnaWcnIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsKTtcbiAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIHByZWZpeCBzYW1lIGFzIGdsb2IgbWF0Y2hpbmdcbiAgICAgICAgICAgIHJlZ2V4ID0gZ2xvYlRvUmVnZXgocGF0dGVybiwgeyBmbGFnczogJ2lnJyB9KTtcbiAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RWxlbWVudDogYXN5bmMgZnVuY3Rpb24obG9jYXRvciwgd2FpdEZvclZpc2libGUsIHRpbWVvdXQsIHRocm93RXhjZXB0aW9uID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZWw7XG4gICAgICAgIGlmIChsb2NhdG9yICYmIGxvY2F0b3IuY29uc3RydWN0b3IgJiYgbG9jYXRvci5jb25zdHJ1Y3Rvci5uYW1lID09PSAnRWxlbWVudCcpIHtcbiAgICAgICAgICAgIGVsID0gbG9jYXRvcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvY2F0b3IgPSB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcik7XG4gICAgICAgICAgICBlbCA9IGF3YWl0IHRoaXMuZHJpdmVyLiQobG9jYXRvcik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50Tm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbCk7XG4gICAgICAgIGlmIChlbGVtZW50Tm90Rm91bmQpIHtcbiAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTEVNRU5UX05PVF9GT1VORCwgYFVuYWJsZSB0byBmaW5kIGVsZW1lbnQ6ICR7bG9jYXRvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdhaXRGb3JWaXNpYmxlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGVsLndhaXRGb3JEaXNwbGF5ZWQoeyB0aW1lb3V0OnRpbWVvdXQgPyB0aW1lb3V0IDogdGhpcy53YWl0Rm9yVGltZW91dH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uICYmIGUubWVzc2FnZSAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0aWxsIG5vdCBkaXNwbGF5ZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkVMRU1FTlRfTk9UX1ZJU0lCTEUsIGBFbGVtZW50IG5vdCB2aXNpYmxlOiAke2xvY2F0b3J9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRocm93RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbDtcbiAgICB9LFxuXG4gICAgZ2V0RWxlbWVudHM6IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHRpbWVvdXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnNldFRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMsIHRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVscyA9IFtdO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlbHMgPSBhd2FpdCB0aGlzLmRyaXZlci4kJCh0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcikpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c05vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWxzKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50c05vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVscztcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRFbGVtZW50OiBhc3luYyBmdW5jdGlvbihsb2NhdG9yLCBwYXJlbnRFbGVtZW50LCB3YWl0Rm9yVmlzaWJsZSwgdGltZW91dCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhdG9yID0gdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpO1xuXG4gICAgICAgIGlmICghKHBhcmVudEVsZW1lbnQgJiYgcGFyZW50RWxlbWVudC4kKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gcGFyZW50RWxlbWVudCwgbXVzdCBiZSBhIHZhbGlkIGVsZW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBlbCA9IGF3YWl0IHBhcmVudEVsZW1lbnQuJChsb2NhdG9yKTtcblxuICAgICAgICBjb25zdCBlbGVtZW50Tm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbCk7XG4gICAgICAgIGlmIChlbGVtZW50Tm90Rm91bmQpIHtcbiAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTEVNRU5UX05PVF9GT1VORCwgYFVuYWJsZSB0byBmaW5kIGVsZW1lbnQ6ICR7bG9jYXRvcn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3YWl0Rm9yVmlzaWJsZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBlbC53YWl0Rm9yRGlzcGxheWVkKHsgdGltZW91dDogdGltZW91dCA/IHRpbWVvdXQgOiB0aGlzLndhaXRGb3JUaW1lb3V0fSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZS5tZXNzYWdlICYmIGUubWVzc2FnZS5pbmNsdWRlcygnc3RpbGwgbm90IGRpc3BsYXllZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfVklTSUJMRSwgYEVsZW1lbnQgbm90IHZpc2libGU6ICR7bG9jYXRvcn1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWw7XG4gICAgfSxcblxuICAgIGdldENoaWxkRWxlbWVudHM6IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHBhcmVudEVsZW1lbnQsIHRpbWVvdXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzLnNldFRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMsIHRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9jYXRvciA9IHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvcihsb2NhdG9yKTtcblxuICAgICAgICBpZiAoIShwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQuJCQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBwYXJlbnRFbGVtZW50LCBtdXN0IGJlIGEgdmFsaWQgZWxlbWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVscyA9IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZWxzID0gYXdhaXQgcGFyZW50RWxlbWVudC4kJChsb2NhdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHNOb3RGb3VuZCA9IGlzRWxlbWVudE5vdEZvdW5kKGVscyk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudHNOb3RGb3VuZCkge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWxzO1xuICAgIH0sXG5cbiAgICBzZXRUaW1lb3V0SW1wbGljaXQ6IGFzeW5jIGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRyaXZlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCAmJiB0aW1lb3V0ID4gdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ICogMTAwMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIGB0aW1lb3V0IG11c3QgYmUgbGVzcyB0aGFuICR7dGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ICogMTAwMH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAmJiB0aW1lb3V0ID4gdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAqIDEwMDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBgdGltZW91dCBtdXN0IGJlIGxlc3MgdGhhbiAke3RoaXMuZHJpdmVyLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQgKiAxMDAwfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRpbWVvdXRzO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcyAmJlxuICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lID09PSAnTWljcm9zb2Z0RWRnZSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIG9uIEVkZ2VcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5nZXRUaW1lb3V0cykge1xuICAgICAgICAgICAgLy8gY2hyb21lID49IDc1XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5zdG9wVXJsICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5zdG9wVXJsLmluY2x1ZGVzKCdwZXJmZWN0b21vYmlsZS5jb20nKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvL2lnbm9yZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXRzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0VGltZW91dHMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZmFpbHMgb24gcGVyZmVjdG8gbW9iaWxlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2dldFRpbWVvdXRzIGVycm9yJywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzICYmIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy50aW1lb3V0cykge1xuICAgICAgICAgICAgLy8gY2hyb21lID49IDcyICYmIGNocm9tZSA8IDc1XG4gICAgICAgICAgICB0aW1lb3V0cyA9IHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy50aW1lb3V0cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lb3V0cyAmJiB0aW1lb3V0cy5pbXBsaWNpdCkge1xuICAgICAgICAgICAgdGhpcy5fcHJldkltcGxpY2l0VGltZW91dCA9IHRpbWVvdXRzLmltcGxpY2l0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lb3V0cyAmJiB0aW1lb3V0cy5wYWdlTG9hZCkge1xuICAgICAgICAgICAgdGhpcy5fcHJldlBhZ2VMb2FkVGltZW91dCA9IHRpbWVvdXRzLnBhZ2VMb2FkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRyaXZlci5zZXRUaW1lb3V0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzICYmIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIGJyb3dzZXJOYW1lICdkZWZhdWx0JyBvbiBhbmRyb2lkIFxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoe1xuICAgICAgICAgICAgICAgICAgICAnaW1wbGljaXQnOiB0aW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICAncGFnZUxvYWQnOiB0aW1lb3V0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoe1xuICAgICAgICAgICAgICAgICAgICAnaW1wbGljaXQnOiB0aW1lb3V0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlc3RvcmVUaW1lb3V0SW1wbGljaXQ6IGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fcHJldkltcGxpY2l0VGltZW91dCAmJiB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ2ltcGxpY2l0JzogdGhpcy5fcHJldkltcGxpY2l0VGltZW91dCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcHJldlBhZ2VMb2FkVGltZW91dCAmJiB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ3BhZ2VMb2FkJzogdGhpcy5fcHJldlBhZ2VMb2FkVGltZW91dCB9KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3NlcnRBcmd1bWVudDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XG4gICAgICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIGlzIHJlcXVpcmVkLlwiKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3NlcnRBcmd1bWVudFN0cmluZzogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXJnICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgc3RyaW5nLlwiKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcbiAgICAgICAgaWYgKCFhcmcgfHwgdHlwZW9mIGFyZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuXCIpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGFzc2VydEFyZ3VtZW50TnVtYmVyOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZihhcmcpICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbnVtYmVyLlwiKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZihhcmcpICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLlwiKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3NlcnRBcmd1bWVudEJvb2w6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mKGFyZykgIT0gdHlwZW9mKHRydWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgdHJ1ZSBvciBmYWxzZS5cIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mKGFyZykgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZihhcmcpICE9IHR5cGVvZih0cnVlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIHRydWUgb3IgZmFsc2UuXCIpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGFzc2VydEFyZ3VtZW50VGltZW91dDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XG4gICAgICAgIGlmIChhcmcgJiYgKHR5cGVvZihhcmcpICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbm9uIG5lZ2F0aXZlIG51bWJlci5cIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY29udGV4dExpc3Q6IGNvbnRleHRMaXN0LFxuXG4gICAgYXNzZXJ0Q29udGV4dDogYXN5bmMgZnVuY3Rpb24oLi4uYWxvd2VkQ29udGV4dHMpIHtcbiAgICAgICAgdmFyIGNvbnRleHQgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRDb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IGlzV2ViID0gKGNvbnRleHQgJiYgKGNvbnRleHQuaW5kZXhPZignV0VCVklFVycpID4gLTEgfHwgY29udGV4dC5pbmRleE9mKCdDSFJPTUlVTScpID4gLTEpKTtcblxuICAgICAgICBpZiAoaXNXZWIpIHtcbiAgICAgICAgICAgIGlmIChhbG93ZWRDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TGlzdC53ZWIpIHx8IGFsb3dlZENvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRMaXN0Lmh5YnJpZCkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUsIGFsbCBpcyBva1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgY29udGV4dCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFsb3dlZENvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRMaXN0LmFuZHJvaWQpIHx8IGFsb3dlZENvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRMaXN0LmlvcykpIHtcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUsIGFsbCBpcyBva1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgY29udGV4dCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldFdkaW9Mb2NhdG9yOiBmdW5jdGlvbihsb2NhdG9yKSB7XG4gICAgICAgIGlmICghbG9jYXRvcilcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBhcmd1bWVudCAtIGxvY2F0b3Igbm90IHNwZWNpZmllZCcpO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbG9jYXRvciA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCcvJykgPT09IDApXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSB4cGF0aCBsb2NhdG9yIGFzIGlzXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignaWQ9JykgPT09IDApIHtcbiAgICAgICAgICAgIC8vIGdlbmVyYXRlIFhQYXRoIGluc3RlYWQgb2YgQ1NTIGZvciBicm93c2VyIHRlc3RzLCBzaW5jZSBJRCBjYW4gY29udGFpbiBpbGxlZ2FsIGNoYXJhY3RlcnNcbiAgICAgICAgICAgIC8vIGFuZCBlc2NhcGluZyBkb2Vzbid0IHdvcmsgcmVsaWFibHkgb3IgaW4gaWRlbnRpY2FsIG1hbm5lciBpbiBhbGwgYnJvd3NlclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcyAmJiB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYC8vKltAaWQ9XCIke2xvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCl9XCJdYDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcjJyArIGxvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCduYW1lPScpID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuICdbbmFtZT1cIicgKyBsb2NhdG9yLnN1YnN0cignbmFtZT0nLmxlbmd0aCkgKyAnXCJdJztcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rPScpID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuICc9JyArIGxvY2F0b3Iuc3Vic3RyKCdsaW5rPScubGVuZ3RoKTtcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rLWNvbnRhaW5zPScpID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuICcqPScgKyBsb2NhdG9yLnN1YnN0cignbGluaz0nLmxlbmd0aCk7XG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignY3NzPScpID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3Iuc3Vic3RyKCdjc3M9Jy5sZW5ndGgpOyAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBjc3MsIGp1c3QgcmVtb3ZlIGNzcz0gcHJlZml4XG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGFnPScpID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuICc8JyArIGxvY2F0b3Iuc3Vic3RyKCd0YWc9Jy5sZW5ndGgpICsgJyAvPic7XG5cbiAgICAgICAgcmV0dXJuIGxvY2F0b3I7XG4gICAgfSxcblxuICAgIGdldExvZ1R5cGVzOiBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ID09PSAnTkFUSVZFX0FQUCcpIHtcbiAgICAgICAgICAgIHJldHVybiBbJ2xvZ2NhdCcsICdidWdyZXBvcnQnLCAnc2VydmVyJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWydicm93c2VyJywgJ2RyaXZlciddO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHByb3ZpZGVyOiBwcm92aWRlcnMsXG5cbiAgICBkZXRlcm1pbmVQcm92aWRlcjogZnVuY3Rpb24od2Rpb09wdHMpIHtcbiAgICAgICAgaWYgKCF3ZGlvT3B0cyB8fCAhd2Rpb09wdHMuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSB8fCAod2Rpb09wdHMuaG9zdG5hbWUgJiYgd2Rpb09wdHMuaG9zdG5hbWUuaW5jbHVkZXMoJ3BlcmZlY3RvbW9iaWxlLmNvbScpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5QRVJGRUNUTztcbiAgICAgICAgfSBlbHNlIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ10pIHtcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlcnMuQlJPV1NFUlNUQUNLO1xuICAgICAgICB9IGVsc2UgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snc2F1Y2U6b3B0aW9ucyddKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJzLlNBVUNFTEFCUztcbiAgICAgICAgfSBlbHNlIGlmICh3ZGlvT3B0cy5ob3N0bmFtZS5pbmNsdWRlcygnbGFtYmRhdGVzdCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJzLkxBTUJEQVRFU1Q7XG4gICAgICAgIH0gZWxzZSBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWyd0ZXN0aW5nQm90Om9wdGlvbnMnXSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5URVNUSU5HQk9UO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcblxuICAgIGhhc0NpcmN1bGFyRGVwZW5kZW5jeTogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob2JqKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKFN0cmluZyhlKS5pbmNsdWRlcygnQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTicpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIGFzc2VydENpcmN1bGFyOiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgY29uc3QgaGFzQ2lyY3VsYXJEZXBlbmRlbmN5ID0gdGhpcy5oYXNDaXJjdWxhckRlcGVuZGVuY3kob2JqKTtcbiAgICAgICAgaWYgKGhhc0NpcmN1bGFyRGVwZW5kZW5jeSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5DSVJDVUxBUl9FUlJPUiwgaGFzQ2lyY3VsYXJEZXBlbmRlbmN5KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBuZXdWaWRlb0F0dGFjaG1lbnQ6IChmaWxlTmFtZSwgdmlkZW9VcmwpID0+ICh7XG4gICAgICAgIGlkOiB2MSgpLFxuICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgdHlwZTogJ3ZpZGVvJyxcbiAgICAgICAgc3VidHlwZTogJ3NjcmVlbmNhc3QnLFxuICAgICAgICBfdXJsOiB2aWRlb1VybCxcbiAgICB9KSxcblxuICAgIG92ZXJ3cml0ZVdkaW9Db21tYW5kczogYXN5bmMgZnVuY3Rpb24oZHJpdmVyKSB7XG4gICAgICAgIC8vIGlmIGVsZW1lbnQgY29tbWFuZCBpcyBpbnZva2VkIGRpcmVjdGx5IGZyb20gdXNlciBzY3JpcHQgYW5kIGVycm9yIGhhcHBlbnMsXG4gICAgICAgIC8vIGl0IHdvbid0IGJlIGNhdWdodCBhbmQgd2lsbCBsZWFkIHRvIHVuaGFuZGxlZFJlamVjdGlvbiAoc2luY2UgaXQncyBleGVjdXRlZCBpbiBhc3luYyBtYW5uZXIgd2l0aG91dCBhd2FpdGluZykgYW5kIHRlc3QgcmVzdWx0cyB3aWxsIGJlIGxvc3QuXG5cbiAgICAgICAgLy8gZS5nLlxuICAgICAgICAvLyB2YXIgZWwgPSB3ZWIuZmluZEVsZW1lbnQoJ2lkPWZvbycpO1xuICAgICAgICAvLyBlbC5jbGljaygpOyAvLyBpZiBlbGVtZW50IGlzIG5vdCB2aXNpYmxlIHRoZW4gY2xpY2sgd2lsbCB0aHJvdyBldmVudHVhbGx5XG5cbiAgICAgICAgLy8gdGhlcmVmb3JlIHdlIHdyYXAgYWxsIHdkaW8gY29tbWFuZHMgdG8gbWFrZSB0aGVtIGV4ZWN1dGUgc3luY2hyb25vdXNseS5cbiAgICAgICAgLy8gUC5TLiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gZGlzYWxsb3cgdXNlcnMgZnJvbSB1c2luZyB3ZGlvIGVsZW1lbnQgY29tbWFuZHMgZGlyZWN0bHkgc2luY2UgdGhleSBhcmUgbm90IGRpc3BsYXllZCBpbiBsb2dzIG9yIHJlc3VsdHMuXG4gICAgICAgIC8vIGJ1dCB3ZSBoYXZlIG5vIHdheSBkZXRlcm1pbmluZyB3aGV0aGVyIGNvbW1hbmQgd2FzIGV4ZWN1dGVkIGZyb20gdXNlciBzY3JpcHQgb3IgZnJvbSBveHlnZW4gaW50ZXJuYWxzLi4uXG5cbiAgICAgICAgZm9yIChsZXQgY21kIG9mIGNtZHNUb092ZXJ3cml0ZSkge1xuICAgICAgICAgICAgYXdhaXQgZHJpdmVyLm92ZXJ3cml0ZUNvbW1hbmQoY21kLCBmdW5jdGlvbiAob3JpZ0Z1bmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ0Z1bmMuYXBwbHkodW5kZWZpbmVkLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIl19
|
|
450
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL3V0aWxzLmpzIl0sIm5hbWVzIjpbImVyckhlbHBlciIsInJlcXVpcmUiLCJ2MSIsInByb3ZpZGVycyIsIlBFUkZFQ1RPIiwiQlJPV1NFUlNUQUNLIiwiU0FVQ0VMQUJTIiwiTEFNQkRBVEVTVCIsIlRFU1RJTkdCT1QiLCJjb250ZXh0TGlzdCIsImFuZHJvaWQiLCJpb3MiLCJoeWJyaWQiLCJ3ZWIiLCJjbWRzVG9PdmVyd3JpdGUiLCJpc0VsZW1lbnROb3RGb3VuZCIsImVsIiwicmVzdWx0IiwiZXJyb3IiLCJtZXNzYWdlIiwic3RhcnRzV2l0aCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtYXRjaFBhdHRlcm4iLCJ2YWwiLCJwYXR0ZXJuIiwiZ2xvYlRvUmVnZXgiLCJ0b1N0cmluZyIsInJlcGxhY2UiLCJyZWdleCIsImluZGV4T2YiLCJSZWdFeHAiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJ0ZXN0IiwiZmxhZ3MiLCJnZXRFbGVtZW50IiwibG9jYXRvciIsIndhaXRGb3JWaXNpYmxlIiwidGltZW91dCIsInRocm93RXhjZXB0aW9uIiwic2V0VGltZW91dEltcGxpY2l0IiwiY2FsbCIsImNvbnN0cnVjdG9yIiwibmFtZSIsImhlbHBlcnMiLCJnZXRXZGlvTG9jYXRvciIsImRyaXZlciIsIiQiLCJlbGVtZW50Tm90Rm91bmQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkVMRU1FTlRfTk9UX0ZPVU5EIiwid2FpdEZvckRpc3BsYXllZCIsIndhaXRGb3JUaW1lb3V0IiwiZSIsImluY2x1ZGVzIiwiRUxFTUVOVF9OT1RfVklTSUJMRSIsImdldEVsZW1lbnRzIiwiZWxzIiwiJCQiLCJlbGVtZW50c05vdEZvdW5kIiwiZ2V0Q2hpbGRFbGVtZW50IiwicGFyZW50RWxlbWVudCIsIlNDUklQVF9FUlJPUiIsImdldENoaWxkRWxlbWVudHMiLCJzZWxlbml1bVRpbWVvdXQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0IiwidGltZW91dHMiLCJjYXBhYmlsaXRpZXMiLCJicm93c2VyTmFtZSIsImdldFRpbWVvdXRzIiwic3RvcFVybCIsImNvbnNvbGUiLCJsb2ciLCJpbXBsaWNpdCIsIl9wcmV2SW1wbGljaXRUaW1lb3V0IiwicGFnZUxvYWQiLCJfcHJldlBhZ2VMb2FkVGltZW91dCIsInNldFRpbWVvdXQiLCJhc3NlcnRBcmd1bWVudCIsImFyZyIsInVuZGVmaW5lZCIsImFzc2VydEFyZ3VtZW50U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiYXNzZXJ0Q29udGV4dCIsImFsb3dlZENvbnRleHRzIiwiY29udGV4dCIsImdldENvbnRleHQiLCJpc1dlYiIsInN1YnN0ciIsImdldExvZ1R5cGVzIiwicHJvdmlkZXIiLCJkZXRlcm1pbmVQcm92aWRlciIsIndkaW9PcHRzIiwiaG9zdG5hbWUiLCJoYXNDaXJjdWxhckRlcGVuZGVuY3kiLCJvYmoiLCJKU09OIiwic3RyaW5naWZ5IiwiU3RyaW5nIiwiYXNzZXJ0Q2lyY3VsYXIiLCJDSVJDVUxBUl9FUlJPUiIsIm5ld1ZpZGVvQXR0YWNobWVudCIsImZpbGVOYW1lIiwidmlkZW9VcmwiLCJpZCIsInR5cGUiLCJzdWJ0eXBlIiwiX3VybCIsIm92ZXJ3cml0ZVdkaW9Db21tYW5kcyIsImNtZCIsIm92ZXJ3cml0ZUNvbW1hbmQiLCJvcmlnRnVuYyIsImFwcGx5Iiwic2xpY2UiLCJhcmd1bWVudHMiXSwibWFwcGluZ3MiOiI7Ozs7QUFVQTs7OztBQVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxrQkFBRCxDQUF6Qjs7QUFF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VUFBVUUsUUFBVixFQUFvQjtBQUNuRCxlQUFPQSxRQUFRLENBQUNDLEtBQVQsQ0FBZXJDLFNBQWYsRUFBMEIsR0FBR3NDLEtBQUgsQ0FBUy9FLElBQVQsQ0FBY2dGLFNBQWQsRUFBeUIsQ0FBekIsQ0FBMUIsQ0FBUDtBQUNILE9BRkssRUFFSCxJQUZHLENBQU47QUFHSDtBQUNKO0FBaGFZLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG5jb25zdCBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmNvbnN0IHsgdjEgfSA9IHJlcXVpcmUoJ3V1aWQnKTtcclxuXHJcbmNvbnN0IHByb3ZpZGVycyA9IHtcclxuICAgIFBFUkZFQ1RPOiAncGVyZmVjdG8nLFxyXG4gICAgQlJPV1NFUlNUQUNLOiAnYnJvd3NlcnN0YWNrJyxcclxuICAgIFNBVUNFTEFCUzogJ3NhdWNlJyxcclxuICAgIExBTUJEQVRFU1Q6ICdsYW1iZGEnLFxyXG4gICAgVEVTVElOR0JPVDogJ3Rlc3Rpbmdib3QnXHJcbn07XHJcblxyXG5jb25zdCBjb250ZXh0TGlzdCA9IHtcclxuICAgIGFuZHJvaWQ6ICdhbmRyb2lkJyxcclxuICAgIGlvczogJ2lvcycsXHJcbiAgICBoeWJyaWQ6ICdoeWJyaWQnLFxyXG4gICAgd2ViOiAnd2ViJ1xyXG59O1xyXG5cclxuY29uc3QgY21kc1RvT3ZlcndyaXRlID0gWyckJCcsICckJywnYWRkVmFsdWUnLCdjbGVhclZhbHVlJywnY2xpY2snLCdkb3VibGVDbGljaycsJ2RyYWdBbmREcm9wJywnZ2V0QXR0cmlidXRlJywnZ2V0Q1NTUHJvcGVydHknLCdnZXRDb21wdXRlZExhYmVsJywnZ2V0Q29tcHV0ZWRSb2xlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRIVE1MJywnZ2V0TG9jYXRpb24nLCdnZXRQcm9wZXJ0eScsJ2dldFNpemUnLCdnZXRUYWdOYW1lJywnZ2V0VGV4dCcsJ2dldFZhbHVlJywnaXNDbGlja2FibGUnLCdpc0Rpc3BsYXllZCcsJ2lzRGlzcGxheWVkSW5WaWV3cG9ydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAnaXNFbmFibGVkJywnaXNFcXVhbCcsJ2lzRXhpc3RpbmcnLCdpc0ZvY3VzZWQnLCdpc1NlbGVjdGVkJywnbW92ZVRvJywnbmV4dEVsZW1lbnQnLCdwYXJlbnRFbGVtZW50JywncHJldmlvdXNFbGVtZW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICdyZWFjdCQkJywncmVhY3QkJywnc2F2ZVNjcmVlbnNob3QnLCdzY3JvbGxJbnRvVmlldycsJ3NlbGVjdEJ5QXR0cmlidXRlJywnc2VsZWN0QnlJbmRleCcsJ3NlbGVjdEJ5VmlzaWJsZVRleHQnLCdzZXRWYWx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhZG93JCQnLCdzaGFkb3ckJywndG91Y2hBY3Rpb24nLCd3YWl0Rm9yQ2xpY2thYmxlJywnd2FpdEZvckRpc3BsYXllZCcsJ3dhaXRGb3JFbmFibGVkJywnd2FpdEZvckV4aXN0Jywnd2FpdFVudGlsJ107XHJcblxyXG5jb25zdCBpc0VsZW1lbnROb3RGb3VuZCA9IChlbCkgPT4ge1xyXG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgaWYgKFxyXG4gICAgICAgIGVsLmVycm9yICYmIChcclxuICAgICAgICBlbC5lcnJvci5lcnJvciA9PT0gJ25vIHN1Y2ggZWxlbWVudCcgfHxcclxuICAgICAgICAoZWwuZXJyb3IubWVzc2FnZSAmJiAvKiB3aW5hcHBkcml2ZXIgd2luLnJpZ2h0Q2xpY2sgKi8gZWwuZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKCdubyBzdWNoIGVsZW1lbnQnKSB8fFxyXG4gICAgICAgIGVsLmVycm9yLm1lc3NhZ2UgJiYgLyogd2luYXBwZHJpdmVyICovIGVsLmVycm9yLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnQW4gZWxlbWVudCBjb3VsZCBub3QgYmUgbG9jYXRlZCcpKSlcclxuICAgICkge1xyXG4gICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBtYXRjaFBhdHRlcm46IGZ1bmN0aW9uKHZhbCwgcGF0dGVybikge1xyXG4gICAgICAgIGlmICghdmFsICYmICFwYXR0ZXJuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGdsb2JUb1JlZ2V4ID0gcmVxdWlyZSgnZ2xvYi10by1yZWdleHAnKTtcclxuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcclxuXHJcbiAgICAgICAgdmFyIHJlZ2V4O1xyXG4gICAgICAgIGlmIChwYXR0ZXJuLmluZGV4T2YoJ3JlZ2V4OicpID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCB1c2luZyBhIHJlZ3VsYXItZXhwcmVzc2lvblxyXG4gICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybi5zdWJzdHJpbmcoJ3JlZ2V4OicubGVuZ3RoKSwgJ2cnKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhdHRlcm4uaW5kZXhPZigncmVnZXhpOicpID09IDApIHsgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2ggdXNpbmcgYSBjYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXItZXhwcmVzc2lvblxyXG4gICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybi5zdWJzdHJpbmcoJ3JlZ2V4aTonLmxlbmd0aCksICdpZycpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWwpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5pbmRleE9mKCdleGFjdDonKSA9PSAwIHx8IHBhdHRlcm4gPT09ICcnKSB7ICAvLyBtYXRjaCBhIHN0cmluZyBleGFjdGx5LCB2ZXJiYXRpbVxyXG4gICAgICAgICAgICByZXR1cm4gcGF0dGVybi5zdWJzdHJpbmcoJ2V4YWN0OicubGVuZ3RoKSA9PT0gdmFsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5pbmRleE9mKCdnbG9iOicpID09IDApIHsgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCBhZ2FpbnN0IGEgY2FzZS1pbnNlbnNpdGl2ZSBcImdsb2JcIiBwYXR0ZXJuXHJcbiAgICAgICAgICAgIHJlZ2V4ID0gZ2xvYlRvUmVnZXgocGF0dGVybi5zdWJzdHJpbmcoJ2dsb2I6Jy5sZW5ndGgpLCB7IGZsYWdzOiAnaWcnIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWwpO1xyXG4gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBwcmVmaXggc2FtZSBhcyBnbG9iIG1hdGNoaW5nXHJcbiAgICAgICAgICAgIHJlZ2V4ID0gZ2xvYlRvUmVnZXgocGF0dGVybiwgeyBmbGFnczogJ2lnJyB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEVsZW1lbnQ6IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHdhaXRGb3JWaXNpYmxlLCB0aW1lb3V0LCB0aHJvd0V4Y2VwdGlvbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5zZXRUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzLCB0aW1lb3V0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbDtcclxuICAgICAgICBpZiAobG9jYXRvciAmJiBsb2NhdG9yLmNvbnN0cnVjdG9yICYmIGxvY2F0b3IuY29uc3RydWN0b3IubmFtZSA9PT0gJ0VsZW1lbnQnKSB7XHJcbiAgICAgICAgICAgIGVsID0gbG9jYXRvcjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsb2NhdG9yID0gdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpO1xyXG4gICAgICAgICAgICBlbCA9IGF3YWl0IHRoaXMuZHJpdmVyLiQobG9jYXRvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlbGVtZW50Tm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbCk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnROb3RGb3VuZCkge1xyXG4gICAgICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTEVNRU5UX05PVF9GT1VORCwgYFVuYWJsZSB0byBmaW5kIGVsZW1lbnQ6ICR7bG9jYXRvcn1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh3YWl0Rm9yVmlzaWJsZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgZWwud2FpdEZvckRpc3BsYXllZCh7IHRpbWVvdXQ6dGltZW91dCA/IHRpbWVvdXQgOiB0aGlzLndhaXRGb3JUaW1lb3V0fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uICYmIGUubWVzc2FnZSAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0aWxsIG5vdCBkaXNwbGF5ZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfVklTSUJMRSwgYEVsZW1lbnQgbm90IHZpc2libGU6ICR7bG9jYXRvcn1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRocm93RXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZWw7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEVsZW1lbnRzOiBhc3luYyBmdW5jdGlvbihsb2NhdG9yLCB0aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZWxzID0gW107XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGVscyA9IGF3YWl0IHRoaXMuZHJpdmVyLiQkKHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvcihsb2NhdG9yKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c05vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWxzKTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZWxzO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRDaGlsZEVsZW1lbnQ6IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHBhcmVudEVsZW1lbnQsIHdhaXRGb3JWaXNpYmxlLCB0aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2NhdG9yID0gdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpO1xyXG5cclxuICAgICAgICBpZiAoIShwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQuJCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gcGFyZW50RWxlbWVudCwgbXVzdCBiZSBhIHZhbGlkIGVsZW1lbnQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbCA9IGF3YWl0IHBhcmVudEVsZW1lbnQuJChsb2NhdG9yKTtcclxuXHJcbiAgICAgICAgY29uc3QgZWxlbWVudE5vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWwpO1xyXG4gICAgICAgIGlmIChlbGVtZW50Tm90Rm91bmQpIHtcclxuICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkVMRU1FTlRfTk9UX0ZPVU5ELCBgVW5hYmxlIHRvIGZpbmQgZWxlbWVudDogJHtsb2NhdG9yfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdhaXRGb3JWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBlbC53YWl0Rm9yRGlzcGxheWVkKHsgdGltZW91dDogdGltZW91dCA/IHRpbWVvdXQgOiB0aGlzLndhaXRGb3JUaW1lb3V0fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGUubWVzc2FnZSAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0aWxsIG5vdCBkaXNwbGF5ZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfVklTSUJMRSwgYEVsZW1lbnQgbm90IHZpc2libGU6ICR7bG9jYXRvcn1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0Q2hpbGRFbGVtZW50czogYXN5bmMgZnVuY3Rpb24obG9jYXRvciwgcGFyZW50RWxlbWVudCwgdGltZW91dCkge1xyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzLnNldFRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMsIHRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbG9jYXRvciA9IHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvcihsb2NhdG9yKTtcclxuXHJcbiAgICAgICAgaWYgKCEocGFyZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LiQkKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBwYXJlbnRFbGVtZW50LCBtdXN0IGJlIGEgdmFsaWQgZWxlbWVudCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGVscyA9IFtdO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGVscyA9IGF3YWl0IHBhcmVudEVsZW1lbnQuJCQobG9jYXRvcik7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c05vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWxzKTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbHM7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRpbWVvdXRJbXBsaWNpdDogYXN5bmMgZnVuY3Rpb24odGltZW91dCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kcml2ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCAmJiB0aW1lb3V0ID4gdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ICogMTAwMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgYHRpbWVvdXQgbXVzdCBiZSBsZXNzIHRoYW4gJHt0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgKiAxMDAwfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAmJiB0aW1lb3V0ID4gdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAqIDEwMDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIGB0aW1lb3V0IG11c3QgYmUgbGVzcyB0aGFuICR7dGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAqIDEwMDB9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdGltZW91dHM7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzICYmXHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSA9PT0gJ01pY3Jvc29mdEVkZ2UnXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgb24gRWRnZVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5nZXRUaW1lb3V0cykge1xyXG4gICAgICAgICAgICAvLyBjaHJvbWUgPj0gNzVcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuc3RvcFVybCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5zdG9wVXJsLmluY2x1ZGVzKCdwZXJmZWN0b21vYmlsZS5jb20nKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9pZ25vcmVcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dHMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaW1lb3V0cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBmYWlscyBvbiBwZXJmZWN0byBtb2JpbGVcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRUaW1lb3V0cyBlcnJvcicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiYgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLnRpbWVvdXRzKSB7XHJcbiAgICAgICAgICAgIC8vIGNocm9tZSA+PSA3MiAmJiBjaHJvbWUgPCA3NVxyXG4gICAgICAgICAgICB0aW1lb3V0cyA9IHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy50aW1lb3V0cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0cyAmJiB0aW1lb3V0cy5pbXBsaWNpdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmV2SW1wbGljaXRUaW1lb3V0ID0gdGltZW91dHMuaW1wbGljaXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aW1lb3V0cyAmJiB0aW1lb3V0cy5wYWdlTG9hZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmV2UGFnZUxvYWRUaW1lb3V0ID0gdGltZW91dHMucGFnZUxvYWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlci5zZXRUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiYgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBicm93c2VyTmFtZSAnZGVmYXVsdCcgb24gYW5kcm9pZCBcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoe1xyXG4gICAgICAgICAgICAgICAgICAgICdpbXBsaWNpdCc6IHRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3BhZ2VMb2FkJzogdGltZW91dFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHtcclxuICAgICAgICAgICAgICAgICAgICAnaW1wbGljaXQnOiB0aW1lb3V0LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlc3RvcmVUaW1lb3V0SW1wbGljaXQ6IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wcmV2SW1wbGljaXRUaW1lb3V0ICYmIHRoaXMuZHJpdmVyLnNldFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMuX3ByZXZJbXBsaWNpdFRpbWVvdXQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9wcmV2UGFnZUxvYWRUaW1lb3V0ICYmIHRoaXMuZHJpdmVyLnNldFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdwYWdlTG9hZCc6IHRoaXMuX3ByZXZQYWdlTG9hZFRpbWVvdXQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBpcyByZXF1aXJlZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudFN0cmluZzogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIHN0cmluZy5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAoIWFyZyB8fCB0eXBlb2YgYXJnICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgYSBub24tZW1wdHkgc3RyaW5nLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50TnVtYmVyOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGFyZykgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIG51bWJlci5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGFyZykgIT09ICdudW1iZXInIHx8IGFyZyA8IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudEJvb2w6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoYXJnKSAhPSB0eXBlb2YodHJ1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIHRydWUgb3IgZmFsc2UuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoYXJnKSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mKGFyZykgIT0gdHlwZW9mKHRydWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSB0cnVlIG9yIGZhbHNlLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50VGltZW91dDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKGFyZyAmJiAodHlwZW9mKGFyZykgIT09ICdudW1iZXInIHx8IGFyZyA8IDApKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIG5vbiBuZWdhdGl2ZSBudW1iZXIuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY29udGV4dExpc3Q6IGNvbnRleHRMaXN0LFxyXG5cclxuICAgIGFzc2VydENvbnRleHQ6IGFzeW5jIGZ1bmN0aW9uKC4uLmFsb3dlZENvbnRleHRzKSB7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRDb250ZXh0KCk7XHJcbiAgICAgICAgY29uc3QgaXNXZWIgPSAoY29udGV4dCAmJiAoY29udGV4dC5pbmRleE9mKCdXRUJWSUVXJykgPiAtMSB8fCBjb250ZXh0LmluZGV4T2YoJ0NIUk9NSVVNJykgPiAtMSkpO1xyXG5cclxuICAgICAgICBpZiAoaXNXZWIpIHtcclxuICAgICAgICAgICAgaWYgKGFsb3dlZENvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRMaXN0LndlYikgfHwgYWxvd2VkQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dExpc3QuaHlicmlkKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlLCBhbGwgaXMgb2tcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBjb250ZXh0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoYWxvd2VkQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dExpc3QuYW5kcm9pZCkgfHwgYWxvd2VkQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dExpc3QuaW9zKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlLCBhbGwgaXMgb2tcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBjb250ZXh0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFdkaW9Mb2NhdG9yOiBmdW5jdGlvbihsb2NhdG9yKSB7XHJcbiAgICAgICAgaWYgKCFsb2NhdG9yKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBsb2NhdG9yIG5vdCBzcGVjaWZpZWQnKTtcclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbG9jYXRvciA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignLycpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSB4cGF0aCBsb2NhdG9yIGFzIGlzXHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAvLyBnZW5lcmF0ZSBYUGF0aCBpbnN0ZWFkIG9mIENTUyBmb3IgYnJvd3NlciB0ZXN0cywgc2luY2UgSUQgY2FuIGNvbnRhaW4gaWxsZWdhbCBjaGFyYWN0ZXJzXHJcbiAgICAgICAgICAgIC8vIGFuZCBlc2NhcGluZyBkb2Vzbid0IHdvcmsgcmVsaWFibHkgb3IgaW4gaWRlbnRpY2FsIG1hbm5lciBpbiBhbGwgYnJvd3NlclxyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzICYmIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAvLypbQGlkPVwiJHtsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpfVwiXWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyMnICsgbG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ25hbWU9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiAnW25hbWU9XCInICsgbG9jYXRvci5zdWJzdHIoJ25hbWU9Jy5sZW5ndGgpICsgJ1wiXSc7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJz0nICsgbG9jYXRvci5zdWJzdHIoJ2xpbms9Jy5sZW5ndGgpO1xyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbGluay1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuICcqPScgKyBsb2NhdG9yLnN1YnN0cignbGluaz0nLmxlbmd0aCk7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdjc3M9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yLnN1YnN0cignY3NzPScubGVuZ3RoKTsgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgY3NzLCBqdXN0IHJlbW92ZSBjc3M9IHByZWZpeFxyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGFnPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJzwnICsgbG9jYXRvci5zdWJzdHIoJ3RhZz0nLmxlbmd0aCkgKyAnIC8+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExvZ1R5cGVzOiBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKGNvbnRleHQgPT09ICdOQVRJVkVfQVBQJykge1xyXG4gICAgICAgICAgICByZXR1cm4gWydsb2djYXQnLCAnYnVncmVwb3J0JywgJ3NlcnZlciddO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbJ2Jyb3dzZXInLCAnZHJpdmVyJ107XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBwcm92aWRlcjogcHJvdmlkZXJzLFxyXG5cclxuICAgIGRldGVybWluZVByb3ZpZGVyOiBmdW5jdGlvbih3ZGlvT3B0cykge1xyXG4gICAgICAgIGlmICghd2Rpb09wdHMgfHwgIXdkaW9PcHRzLmNhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSB8fCAod2Rpb09wdHMuaG9zdG5hbWUgJiYgd2Rpb09wdHMuaG9zdG5hbWUuaW5jbHVkZXMoJ3BlcmZlY3RvbW9iaWxlLmNvbScpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJzLlBFUkZFQ1RPO1xyXG4gICAgICAgIH0gZWxzZSBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlcnMuQlJPV1NFUlNUQUNLO1xyXG4gICAgICAgIH0gZWxzZSBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydzYXVjZTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5TQVVDRUxBQlM7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3ZGlvT3B0cy5ob3N0bmFtZS5pbmNsdWRlcygnbGFtYmRhdGVzdCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlcnMuTEFNQkRBVEVTVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1sndGVzdGluZ0JvdDpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5URVNUSU5HQk9UO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIGhhc0NpcmN1bGFyRGVwZW5kZW5jeTogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9iaik7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoU3RyaW5nKGUpLmluY2x1ZGVzKCdDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OJykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRDaXJjdWxhcjogZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgY29uc3QgaGFzQ2lyY3VsYXJEZXBlbmRlbmN5ID0gdGhpcy5oYXNDaXJjdWxhckRlcGVuZGVuY3kob2JqKTtcclxuICAgICAgICBpZiAoaGFzQ2lyY3VsYXJEZXBlbmRlbmN5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQ0lSQ1VMQVJfRVJST1IsIGhhc0NpcmN1bGFyRGVwZW5kZW5jeSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBuZXdWaWRlb0F0dGFjaG1lbnQ6IChmaWxlTmFtZSwgdmlkZW9VcmwpID0+ICh7XHJcbiAgICAgICAgaWQ6IHYxKCksXHJcbiAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgdHlwZTogJ3ZpZGVvJyxcclxuICAgICAgICBzdWJ0eXBlOiAnc2NyZWVuY2FzdCcsXHJcbiAgICAgICAgX3VybDogdmlkZW9VcmwsXHJcbiAgICB9KSxcclxuXHJcbiAgICBvdmVyd3JpdGVXZGlvQ29tbWFuZHM6IGFzeW5jIGZ1bmN0aW9uKGRyaXZlcikge1xyXG4gICAgICAgIC8vIGlmIGVsZW1lbnQgY29tbWFuZCBpcyBpbnZva2VkIGRpcmVjdGx5IGZyb20gdXNlciBzY3JpcHQgYW5kIGVycm9yIGhhcHBlbnMsXHJcbiAgICAgICAgLy8gaXQgd29uJ3QgYmUgY2F1Z2h0IGFuZCB3aWxsIGxlYWQgdG8gdW5oYW5kbGVkUmVqZWN0aW9uIChzaW5jZSBpdCdzIGV4ZWN1dGVkIGluIGFzeW5jIG1hbm5lciB3aXRob3V0IGF3YWl0aW5nKSBhbmQgdGVzdCByZXN1bHRzIHdpbGwgYmUgbG9zdC5cclxuXHJcbiAgICAgICAgLy8gZS5nLlxyXG4gICAgICAgIC8vIHZhciBlbCA9IHdlYi5maW5kRWxlbWVudCgnaWQ9Zm9vJyk7XHJcbiAgICAgICAgLy8gZWwuY2xpY2soKTsgLy8gaWYgZWxlbWVudCBpcyBub3QgdmlzaWJsZSB0aGVuIGNsaWNrIHdpbGwgdGhyb3cgZXZlbnR1YWxseVxyXG5cclxuICAgICAgICAvLyB0aGVyZWZvcmUgd2Ugd3JhcCBhbGwgd2RpbyBjb21tYW5kcyB0byBtYWtlIHRoZW0gZXhlY3V0ZSBzeW5jaHJvbm91c2x5LlxyXG4gICAgICAgIC8vIFAuUy4gaXQgd291bGQgYmUgYmV0dGVyIHRvIGRpc2FsbG93IHVzZXJzIGZyb20gdXNpbmcgd2RpbyBlbGVtZW50IGNvbW1hbmRzIGRpcmVjdGx5IHNpbmNlIHRoZXkgYXJlIG5vdCBkaXNwbGF5ZWQgaW4gbG9ncyBvciByZXN1bHRzLlxyXG4gICAgICAgIC8vIGJ1dCB3ZSBoYXZlIG5vIHdheSBkZXRlcm1pbmluZyB3aGV0aGVyIGNvbW1hbmQgd2FzIGV4ZWN1dGVkIGZyb20gdXNlciBzY3JpcHQgb3IgZnJvbSBveHlnZW4gaW50ZXJuYWxzLi4uXHJcblxyXG4gICAgICAgIGZvciAobGV0IGNtZCBvZiBjbWRzVG9PdmVyd3JpdGUpIHtcclxuICAgICAgICAgICAgYXdhaXQgZHJpdmVyLm92ZXJ3cml0ZUNvbW1hbmQoY21kLCBmdW5jdGlvbiAob3JpZ0Z1bmMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnRnVuYy5hcHBseSh1bmRlZmluZWQsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XHJcbiAgICAgICAgICAgIH0sIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuIl19
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
[{
|
|
2
|
-
"header": "Suite Name",
|
|
3
|
-
"value": "${suite.name}"
|
|
4
|
-
},
|
|
5
|
-
{
|
|
6
|
-
"header": "Suite Iteration",
|
|
7
|
-
"value": "${suite.iteration}"
|
|
8
|
-
},
|
|
9
|
-
{
|
|
10
|
-
"header": "Suite Status",
|
|
11
|
-
"value": "${suite.status}"
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
"header": "Case Name",
|
|
15
|
-
"value": "${case.name}"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"header": "Case Iteration",
|
|
19
|
-
"value": "${case.iteration}"
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
"header": "Case Status",
|
|
23
|
-
"value": "${case.status}"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"header": "Failure Step",
|
|
27
|
-
"value": "${failure.step}"
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"header": "Failure Type",
|
|
31
|
-
"value": "${failure.type}"
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"header": "Failure Message",
|
|
35
|
-
"value": "${failure.message}"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"header": "Failure Location",
|
|
39
|
-
"value": "${failure.location}"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"header": "",
|
|
43
|
-
"value": "${param.all}"
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
"header": "",
|
|
47
|
-
"value": "${var.all}"
|
|
48
|
-
}]
|
|
1
|
+
[{
|
|
2
|
+
"header": "Suite Name",
|
|
3
|
+
"value": "${suite.name}"
|
|
4
|
+
},
|
|
5
|
+
{
|
|
6
|
+
"header": "Suite Iteration",
|
|
7
|
+
"value": "${suite.iteration}"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"header": "Suite Status",
|
|
11
|
+
"value": "${suite.status}"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"header": "Case Name",
|
|
15
|
+
"value": "${case.name}"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"header": "Case Iteration",
|
|
19
|
+
"value": "${case.iteration}"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"header": "Case Status",
|
|
23
|
+
"value": "${case.status}"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"header": "Failure Step",
|
|
27
|
+
"value": "${failure.step}"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"header": "Failure Type",
|
|
31
|
+
"value": "${failure.type}"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"header": "Failure Message",
|
|
35
|
+
"value": "${failure.message}"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"header": "Failure Location",
|
|
39
|
+
"value": "${failure.location}"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"header": "",
|
|
43
|
+
"value": "${param.all}"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"header": "",
|
|
47
|
+
"value": "${var.all}"
|
|
48
|
+
}]
|