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
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
4
|
|
|
5
|
-
/*
|
|
6
|
-
* Copyright (C) 2015-2018 CloudBeat Limited
|
|
7
|
-
*
|
|
8
|
-
* This program is free software: you can redistribute it and/or modify
|
|
9
|
-
* it under the terms of the GNU General Public License as published by
|
|
10
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
-
* (at your option) any later version.
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (C) 2015-2018 CloudBeat Limited
|
|
7
|
+
*
|
|
8
|
+
* This program is free software: you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License as published by
|
|
10
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
* (at your option) any later version.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
/**
|
|
15
|
-
* @name date
|
|
16
|
-
* @description Provides methods for working with dates.
|
|
14
|
+
/**
|
|
15
|
+
* @name date
|
|
16
|
+
* @description Provides methods for working with dates.
|
|
17
17
|
*/
|
|
18
18
|
module.exports = function () {
|
|
19
19
|
module.isInitialized = function () {
|
|
@@ -21,25 +21,25 @@ module.exports = function () {
|
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
var moment = require('moment');
|
|
24
|
-
/**
|
|
25
|
-
* @summary Returns current date and time
|
|
26
|
-
* @description See http://momentjs.com/docs/#/displaying/format/ for supported format strings.
|
|
27
|
-
* @function now
|
|
28
|
-
* @param {String} format - Format string.
|
|
29
|
-
* @return {String} Date formatted according to the specified format string.
|
|
24
|
+
/**
|
|
25
|
+
* @summary Returns current date and time
|
|
26
|
+
* @description See http://momentjs.com/docs/#/displaying/format/ for supported format strings.
|
|
27
|
+
* @function now
|
|
28
|
+
* @param {String} format - Format string.
|
|
29
|
+
* @return {String} Date formatted according to the specified format string.
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
module.now = function (format) {
|
|
34
34
|
return moment().format(format);
|
|
35
35
|
};
|
|
36
|
-
/**
|
|
37
|
-
* @summary Returns a future or a past date
|
|
38
|
-
* @function fromNow
|
|
39
|
-
* @param {String} unit - Unit type. See http://momentjs.com/docs/#/manipulating/add/
|
|
40
|
-
* @param {Number} value - Number of minutes/days/months/etc to add or subtract from the current date.
|
|
41
|
-
* @param {String} format - Format string.
|
|
42
|
-
* @return {String} Date formatted according to the specified format string.
|
|
36
|
+
/**
|
|
37
|
+
* @summary Returns a future or a past date
|
|
38
|
+
* @function fromNow
|
|
39
|
+
* @param {String} unit - Unit type. See http://momentjs.com/docs/#/manipulating/add/
|
|
40
|
+
* @param {Number} value - Number of minutes/days/months/etc to add or subtract from the current date.
|
|
41
|
+
* @param {String} format - Format string.
|
|
42
|
+
* @return {String} Date formatted according to the specified format string.
|
|
43
43
|
*/
|
|
44
44
|
|
|
45
45
|
|
|
@@ -53,4 +53,4 @@ module.exports = function () {
|
|
|
53
53
|
|
|
54
54
|
return module;
|
|
55
55
|
};
|
|
56
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1kYXRlLmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJpc0luaXRpYWxpemVkIiwibW9tZW50IiwicmVxdWlyZSIsIm5vdyIsImZvcm1hdCIsImZyb21Ob3ciLCJ1bml0IiwidmFsdWUiLCJzdWJ0cmFjdCIsImFkZCJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFlBQVc7QUFDeEJELEVBQUFBLE1BQU0sQ0FBQ0UsYUFBUCxHQUF1QixZQUFXO0FBQzlCLFdBQU8sSUFBUDtBQUNILEdBRkQ7O0FBSUEsTUFBSUMsTUFBTSxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFwQjtBQUVBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSUosRUFBQUEsTUFBTSxDQUFDSyxHQUFQLEdBQWEsVUFBU0MsTUFBVCxFQUFpQjtBQUMxQixXQUFPSCxNQUFNLEdBQUdHLE1BQVQsQ0FBZ0JBLE1BQWhCLENBQVA7QUFDSCxHQUZEO0FBSUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lOLEVBQUFBLE1BQU0sQ0FBQ08sT0FBUCxHQUFpQixVQUFTQyxJQUFULEVBQWVDLEtBQWYsRUFBc0JILE1BQXRCLEVBQThCO0FBQzNDLFFBQUlHLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWCxhQUFPTixNQUFNLEdBQUdPLFFBQVQsQ0FBa0IsQ0FBQ0QsS0FBbkIsRUFBMEJELElBQTFCLEVBQWdDRixNQUFoQyxDQUF1Q0EsTUFBdkMsQ0FBUDtBQUNILEtBRkQsTUFFTztBQUNILGFBQU9ILE1BQU0sR0FBR1EsR0FBVCxDQUFhRixLQUFiLEVBQW9CRCxJQUFwQixFQUEwQkYsTUFBMUIsQ0FBaUNBLE1BQWpDLENBQVA7QUFDSDtBQUNKLEdBTkQ7O0FBUUEsU0FBT04sTUFBUDtBQUNILENBbkNEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgZGF0ZVxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIGRhdGVzLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcclxuICAgIG1vZHVsZS5pc0luaXRpYWxpemVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBtb21lbnQgPSByZXF1aXJlKCdtb21lbnQnKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgY3VycmVudCBkYXRlIGFuZCB0aW1lXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZG9jcy8jL2Rpc3BsYXlpbmcvZm9ybWF0LyBmb3Igc3VwcG9ydGVkIGZvcm1hdCBzdHJpbmdzLlxyXG4gICAgICogQGZ1bmN0aW9uIG5vd1xyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCAtIEZvcm1hdCBzdHJpbmcuXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IERhdGUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5ub3cgPSBmdW5jdGlvbihmb3JtYXQpIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50KCkuZm9ybWF0KGZvcm1hdCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBhIGZ1dHVyZSBvciBhIHBhc3QgZGF0ZVxyXG4gICAgICogQGZ1bmN0aW9uIGZyb21Ob3dcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1bml0IC0gVW5pdCB0eXBlLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9kb2NzLyMvbWFuaXB1bGF0aW5nL2FkZC9cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSAtIE51bWJlciBvZiBtaW51dGVzL2RheXMvbW9udGhzL2V0YyB0byBhZGQgb3Igc3VidHJhY3QgZnJvbSB0aGUgY3VycmVudCBkYXRlLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCAtIEZvcm1hdCBzdHJpbmcuXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IERhdGUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5mcm9tTm93ID0gZnVuY3Rpb24odW5pdCwgdmFsdWUsIGZvcm1hdCkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KC12YWx1ZSwgdW5pdCkuZm9ybWF0KGZvcm1hdCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1vbWVudCgpLmFkZCh2YWx1ZSwgdW5pdCkuZm9ybWF0KGZvcm1hdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXX0=
|
|
@@ -6,22 +6,22 @@ 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
|
|
|
18
|
-
/**
|
|
19
|
-
* @name db
|
|
20
|
-
* @description Provides methods for working with Data Bases through ODBC.
|
|
21
|
-
* @note Before using this module, make sure to install `unixodbc`:
|
|
22
|
-
* * Windows - Install `Windows SDK`
|
|
23
|
-
* * OS X - `brew install unixodbc`
|
|
24
|
-
* * Linux - `sudo apt-get install unixodbc unixodbc-dev` or `sudo dnf install unixODBC unixODBC-devel`
|
|
18
|
+
/**
|
|
19
|
+
* @name db
|
|
20
|
+
* @description Provides methods for working with Data Bases through ODBC.
|
|
21
|
+
* @note Before using this module, make sure to install `unixodbc`:
|
|
22
|
+
* * Windows - Install `Windows SDK`
|
|
23
|
+
* * OS X - `brew install unixodbc`
|
|
24
|
+
* * Linux - `sudo apt-get install unixodbc unixodbc-dev` or `sudo dnf install unixODBC unixODBC-devel`
|
|
25
25
|
*/
|
|
26
26
|
var connection;
|
|
27
27
|
|
|
@@ -56,29 +56,29 @@ module.exports = function () {
|
|
|
56
56
|
throw new _OxygenError.default(errHelper.errorCode.DB_CONNECTION_ERROR, errHelper.getDbErrorMessage(e));
|
|
57
57
|
}
|
|
58
58
|
};
|
|
59
|
-
/**
|
|
60
|
-
* @summary Sets DB connection string to be used by other methods.
|
|
61
|
-
* @description This method doesn't actually open the connection as it's opened/closed
|
|
62
|
-
* automatically by query methods.
|
|
63
|
-
* Example connection strings:
|
|
64
|
-
* - `Driver={MySQL ODBC 9.0 Unicode Driver};Server=localhost;Database=myDatabase;
|
|
65
|
-
* User=myUsername;Password=myPassword;Option=3;`
|
|
66
|
-
* - `Driver={Oracle in instantclient_11_2};dbq=127.0.0.1:1521/XE;uid=myUsername;
|
|
67
|
-
* pwd=myPassword;`
|
|
68
|
-
* @function setConnectionString
|
|
69
|
-
* @param {String} connString - ODBC connection string.
|
|
59
|
+
/**
|
|
60
|
+
* @summary Sets DB connection string to be used by other methods.
|
|
61
|
+
* @description This method doesn't actually open the connection as it's opened/closed
|
|
62
|
+
* automatically by query methods.
|
|
63
|
+
* Example connection strings:
|
|
64
|
+
* - `Driver={MySQL ODBC 9.0 Unicode Driver};Server=localhost;Database=myDatabase;
|
|
65
|
+
* User=myUsername;Password=myPassword;Option=3;`
|
|
66
|
+
* - `Driver={Oracle in instantclient_11_2};dbq=127.0.0.1:1521/XE;uid=myUsername;
|
|
67
|
+
* pwd=myPassword;`
|
|
68
|
+
* @function setConnectionString
|
|
69
|
+
* @param {String} connString - ODBC connection string.
|
|
70
70
|
*/
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
module.setConnectionString = function (connString) {
|
|
74
74
|
module.connString = connString;
|
|
75
75
|
};
|
|
76
|
-
/**
|
|
77
|
-
* @summary Executes SQL query and returns the first column of the first row in the result set.
|
|
78
|
-
* @function getScalar
|
|
79
|
-
* @param {String} query - The query to execute.
|
|
80
|
-
* @return {Object} The first column of the first row in the result set, or null if the result
|
|
81
|
-
* set is empty.
|
|
76
|
+
/**
|
|
77
|
+
* @summary Executes SQL query and returns the first column of the first row in the result set.
|
|
78
|
+
* @function getScalar
|
|
79
|
+
* @param {String} query - The query to execute.
|
|
80
|
+
* @return {Object} The first column of the first row in the result set, or null if the result
|
|
81
|
+
* set is empty.
|
|
82
82
|
*/
|
|
83
83
|
|
|
84
84
|
|
|
@@ -101,11 +101,11 @@ module.exports = function () {
|
|
|
101
101
|
await connection.close();
|
|
102
102
|
}
|
|
103
103
|
};
|
|
104
|
-
/**
|
|
105
|
-
* @summary Executes SQL query and returns the result set.
|
|
106
|
-
* @function executeQuery
|
|
107
|
-
* @param {String} query - The query to execute.
|
|
108
|
-
* @return {Object} The result set.
|
|
104
|
+
/**
|
|
105
|
+
* @summary Executes SQL query and returns the result set.
|
|
106
|
+
* @function executeQuery
|
|
107
|
+
* @param {String} query - The query to execute.
|
|
108
|
+
* @return {Object} The result set.
|
|
109
109
|
*/
|
|
110
110
|
|
|
111
111
|
|
|
@@ -121,11 +121,11 @@ module.exports = function () {
|
|
|
121
121
|
await connection.close();
|
|
122
122
|
}
|
|
123
123
|
};
|
|
124
|
-
/**
|
|
125
|
-
* @summary Executes SQL statement.
|
|
126
|
-
* @description Any results from the query are discarded.
|
|
127
|
-
* @function executeNonQuery
|
|
128
|
-
* @param {String} query - The query to execute.
|
|
124
|
+
/**
|
|
125
|
+
* @summary Executes SQL statement.
|
|
126
|
+
* @description Any results from the query are discarded.
|
|
127
|
+
* @function executeNonQuery
|
|
128
|
+
* @param {String} query - The query to execute.
|
|
129
129
|
*/
|
|
130
130
|
|
|
131
131
|
|
|
@@ -140,16 +140,16 @@ module.exports = function () {
|
|
|
140
140
|
await connection.close();
|
|
141
141
|
}
|
|
142
142
|
};
|
|
143
|
-
/**
|
|
144
|
-
* @summary Calls a stored procedure.
|
|
145
|
-
* @function callProcedure
|
|
146
|
-
* @param {String} name - Name of the procedure to call.
|
|
147
|
-
* @param {...Object} args - Procedure arguments. If procedure produces output parameters then these need to be specified using `undefined`.
|
|
148
|
-
* @return {Object} Procedure output if any.
|
|
149
|
-
* @example <caption>[javascript] Usage example</caption>
|
|
150
|
-
* // calls a procedure which expects two input parameters and one output parameter.
|
|
151
|
-
* var result = db.callProcedure('test', 3, 4, undefined);
|
|
152
|
-
* log.info(result);
|
|
143
|
+
/**
|
|
144
|
+
* @summary Calls a stored procedure.
|
|
145
|
+
* @function callProcedure
|
|
146
|
+
* @param {String} name - Name of the procedure to call.
|
|
147
|
+
* @param {...Object} args - Procedure arguments. If procedure produces output parameters then these need to be specified using `undefined`.
|
|
148
|
+
* @return {Object} Procedure output if any.
|
|
149
|
+
* @example <caption>[javascript] Usage example</caption>
|
|
150
|
+
* // calls a procedure which expects two input parameters and one output parameter.
|
|
151
|
+
* var result = db.callProcedure('test', 3, 4, undefined);
|
|
152
|
+
* log.info(result);
|
|
153
153
|
*/
|
|
154
154
|
|
|
155
155
|
|
|
@@ -168,4 +168,4 @@ module.exports = function () {
|
|
|
168
168
|
|
|
169
169
|
return module;
|
|
170
170
|
};
|
|
171
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1kYi5qcyJdLCJuYW1lcyI6WyJjb25uZWN0aW9uIiwiZXJySGVscGVyIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJpc0luaXRpYWxpemVkIiwiX29wZW5EYkNvbm4iLCJjb25uU3RyaW5nIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkRCX0NPTk5FQ1RJT05fRVJST1IiLCJkYiIsImUiLCJNb2R1bGVVbmF2YWlsYWJsZUVycm9yIiwibWVzc2FnZSIsImNvbm5lY3QiLCJnZXREYkVycm9yTWVzc2FnZSIsInNldENvbm5lY3Rpb25TdHJpbmciLCJnZXRTY2FsYXIiLCJxdWVyeSIsInJlc3VsdFNldCIsImxlbmd0aCIsImZpcnN0Um93IiwiZmlyc3RDb2wiLCJPYmplY3QiLCJrZXlzIiwiREJfUVVFUllfRVJST1IiLCJjbG9zZSIsImV4ZWN1dGVRdWVyeSIsInF1ZXJ5U3luY1JldHZhbCIsImV4ZWN1dGVOb25RdWVyeSIsImNhbGxQcm9jZWR1cmUiLCJuYW1lIiwiYXJncyJdLCJtYXBwaW5ncyI6Ijs7OztBQW9CQTs7OztBQXBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxVQUFKOztBQUdBLElBQUlDLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGtCQUFELENBQXZCOztBQUVBQyxNQUFNLENBQUNDLE9BQVAsR0FBaUIsWUFBVztBQUN4QjtBQUNBRCxFQUFBQSxNQUFNLENBQUNFLGFBQVAsR0FBdUIsWUFBVztBQUM5QixXQUFPLElBQVA7QUFDSCxHQUZEOztBQUlBRixFQUFBQSxNQUFNLENBQUNHLFdBQVAsR0FBcUIsa0JBQWlCO0FBQ2xDLFFBQUksQ0FBQyxLQUFLQyxVQUFWLEVBQXNCO0FBQ2xCLFlBQU0sSUFBSUMsb0JBQUosQ0FBWVAsU0FBUyxDQUFDUSxTQUFWLENBQW9CQyxtQkFBaEMsRUFBcUQsK0RBQXJELENBQU47QUFDSDs7QUFFRCxRQUFJO0FBQ0E7QUFDQSxVQUFJQyxFQUFKOztBQUNBLFVBQUk7QUFDQUEsUUFBQUEsRUFBRSxHQUFHVCxPQUFPLENBQUMsTUFBRCxDQUFaO0FBQ0gsT0FGRCxDQUVFLE9BQU9VLENBQVAsRUFBVTtBQUNSO0FBQ0EsY0FBTUMsc0JBQXNCLEdBQUdYLE9BQU8sQ0FBQyxrQ0FBRCxDQUF0Qzs7QUFDQSxjQUFNLElBQUlXLHNCQUFKLENBQTJCLCtCQUE2QkQsQ0FBQyxDQUFDRSxPQUExRCxDQUFOO0FBQ0g7O0FBRURkLE1BQUFBLFVBQVUsR0FBRyxNQUFNVyxFQUFFLENBQUNJLE9BQUgsQ0FBVyxLQUFLUixVQUFoQixDQUFuQjtBQUNILEtBWkQsQ0FZRSxPQUFPSyxDQUFQLEVBQVU7QUFDUixZQUFNLElBQUlKLG9CQUFKLENBQVlQLFNBQVMsQ0FBQ1EsU0FBVixDQUFvQkMsbUJBQWhDLEVBQXFEVCxTQUFTLENBQUNlLGlCQUFWLENBQTRCSixDQUE1QixDQUFyRCxDQUFOO0FBQ0g7QUFDSixHQXBCRDtBQXNCQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJVCxFQUFBQSxNQUFNLENBQUNjLG1CQUFQLEdBQTZCLFVBQVNWLFVBQVQsRUFBcUI7QUFDOUNKLElBQUFBLE1BQU0sQ0FBQ0ksVUFBUCxHQUFvQkEsVUFBcEI7QUFDSCxHQUZEO0FBSUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJSixFQUFBQSxNQUFNLENBQUNlLFNBQVAsR0FBbUIsZ0JBQWVDLEtBQWYsRUFBc0I7QUFDckMsVUFBTWhCLE1BQU0sQ0FBQ0csV0FBUCxFQUFOOztBQUNBLFFBQUk7QUFDQSxVQUFJYyxTQUFTLEdBQUcsTUFBTXBCLFVBQVUsQ0FBQ21CLEtBQVgsQ0FBaUJBLEtBQWpCLENBQXRCOztBQUNBLFVBQUlDLFNBQVMsQ0FBQ0MsTUFBVixLQUFxQixDQUF6QixFQUE0QjtBQUN4QixlQUFPLElBQVA7QUFDSDs7QUFDRCxVQUFJQyxRQUFRLEdBQUdGLFNBQVMsQ0FBQyxDQUFELENBQXhCO0FBQ0EsVUFBSUcsUUFBUSxHQUFHRCxRQUFRLENBQUNFLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZSCxRQUFaLEVBQXNCLENBQXRCLENBQUQsQ0FBdkI7QUFDQSxhQUFPQyxRQUFQO0FBQ0gsS0FSRCxDQVFFLE9BQU9YLENBQVAsRUFBVTtBQUNSLFlBQU0sSUFBSUosb0JBQUosQ0FBWVAsU0FBUyxDQUFDUSxTQUFWLENBQW9CaUIsY0FBaEMsRUFBZ0R6QixTQUFTLENBQUNlLGlCQUFWLENBQTRCSixDQUE1QixDQUFoRCxDQUFOO0FBQ0gsS0FWRCxTQVVVO0FBQ04sWUFBTVosVUFBVSxDQUFDMkIsS0FBWCxFQUFOO0FBQ0g7QUFDSixHQWZEO0FBaUJBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0l4QixFQUFBQSxNQUFNLENBQUN5QixZQUFQLEdBQXNCLGdCQUFlVCxLQUFmLEVBQXNCO0FBQ3hDLFVBQU1oQixNQUFNLENBQUNHLFdBQVAsRUFBTjs7QUFDQSxRQUFJO0FBQ0EsWUFBTXVCLGVBQWUsR0FBRyxNQUFNN0IsVUFBVSxDQUFDbUIsS0FBWCxDQUFpQkEsS0FBakIsQ0FBOUI7QUFDQSxhQUFPVSxlQUFQO0FBQ0gsS0FIRCxDQUdFLE9BQU9qQixDQUFQLEVBQVU7QUFDUixZQUFNLElBQUlKLG9CQUFKLENBQVlQLFNBQVMsQ0FBQ1EsU0FBVixDQUFvQmlCLGNBQWhDLEVBQWdEekIsU0FBUyxDQUFDZSxpQkFBVixDQUE0QkosQ0FBNUIsQ0FBaEQsQ0FBTjtBQUNILEtBTEQsU0FLVTtBQUNOLFlBQU1aLFVBQVUsQ0FBQzJCLEtBQVgsRUFBTjtBQUNIO0FBQ0osR0FWRDtBQVlBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0l4QixFQUFBQSxNQUFNLENBQUMyQixlQUFQLEdBQXlCLGdCQUFlWCxLQUFmLEVBQXNCO0FBQzNDLFVBQU1oQixNQUFNLENBQUNHLFdBQVAsRUFBTjs7QUFDQSxRQUFJO0FBQ0EsWUFBTU4sVUFBVSxDQUFDbUIsS0FBWCxDQUFpQkEsS0FBakIsQ0FBTjtBQUNILEtBRkQsQ0FFRSxPQUFPUCxDQUFQLEVBQVU7QUFDUixZQUFNLElBQUlKLG9CQUFKLENBQVlQLFNBQVMsQ0FBQ1EsU0FBVixDQUFvQmlCLGNBQWhDLEVBQWdEekIsU0FBUyxDQUFDZSxpQkFBVixDQUE0QkosQ0FBNUIsQ0FBaEQsQ0FBTjtBQUNILEtBSkQsU0FJVTtBQUNOLFlBQU1aLFVBQVUsQ0FBQzJCLEtBQVgsRUFBTjtBQUNIO0FBQ0osR0FURDtBQVdBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJeEIsRUFBQUEsTUFBTSxDQUFDNEIsYUFBUCxHQUF1QixnQkFBZUMsSUFBZixFQUFxQixHQUFHQyxJQUF4QixFQUE4QjtBQUNqRCxVQUFNOUIsTUFBTSxDQUFDRyxXQUFQLEVBQU47O0FBRUEsUUFBSTtBQUNBLFlBQU11QixlQUFlLEdBQUcsTUFBTTdCLFVBQVUsQ0FBQytCLGFBQVgsQ0FBeUIsSUFBekIsRUFBK0IsSUFBL0IsRUFBcUNDLElBQXJDLEVBQTJDLENBQUMsR0FBR0MsSUFBSixDQUEzQyxDQUE5QjtBQUNBLGFBQU9KLGVBQVA7QUFDSCxLQUhELENBR0UsT0FBT2pCLENBQVAsRUFBVTtBQUNSLFlBQU0sSUFBSUosb0JBQUosQ0FBWVAsU0FBUyxDQUFDUSxTQUFWLENBQW9CaUIsY0FBaEMsRUFBZ0R6QixTQUFTLENBQUNlLGlCQUFWLENBQTRCSixDQUE1QixDQUFoRCxDQUFOO0FBQ0gsS0FMRCxTQUtVO0FBQ04sWUFBTVosVUFBVSxDQUFDMkIsS0FBWCxFQUFOO0FBQ0g7QUFDSixHQVhEOztBQWFBLFNBQU94QixNQUFQO0FBQ0gsQ0FoSUQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICovXG5cbi8qKlxuICogQG5hbWUgZGJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggRGF0YSBCYXNlcyB0aHJvdWdoIE9EQkMuXG4gKiBAbm90ZSBCZWZvcmUgdXNpbmcgdGhpcyBtb2R1bGUsIG1ha2Ugc3VyZSB0byBpbnN0YWxsIGB1bml4b2RiY2A6ICBcbiAqICAgKiBXaW5kb3dzIC0gSW5zdGFsbCBgV2luZG93cyBTREtgICBcbiAqICAgKiBPUyBYIC0gIGBicmV3IGluc3RhbGwgdW5peG9kYmNgICBcbiAqICAgKiBMaW51eCAtIGBzdWRvIGFwdC1nZXQgaW5zdGFsbCB1bml4b2RiYyB1bml4b2RiYy1kZXZgIG9yIGBzdWRvIGRuZiBpbnN0YWxsIHVuaXhPREJDIHVuaXhPREJDLWRldmVsYFxuICovXG5cbnZhciBjb25uZWN0aW9uO1xuXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xudmFyIGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAvLyBGSVhNRTogY2hhbmdlIHNldENvbm5lY3Rpb25TdHJpbmcgdG8gaW5pdCBhbmQgYWRkIGhhZG5saW5nIGluIGhlcmVcbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgbW9kdWxlLl9vcGVuRGJDb25uID0gYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25uU3RyaW5nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkRCX0NPTk5FQ1RJT05fRVJST1IsICdObyBjb25uZWN0aW9uIHN0cmluZyBzcGVjaWZpZWQuIFVzZSBkYi5zZXRDb25uZWN0aW9uU3RyaW5nKCkuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gaWdub3JlIHRoaXMgbW9kdWxlIGlmIG9kYmMgd2Fzbid0IGluc3RhbGxlZFxuICAgICAgICAgICAgdmFyIGRiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBkYiA9IHJlcXVpcmUoJ29kYmMnKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBjb3VsZCBoYXBwZW4gb25seSBvbiB1bml4IGR1ZSB0byBtaXNzaW5nIHVuaXhvZGJjIGJpbmFyaWVzXG4gICAgICAgICAgICAgICAgY29uc3QgTW9kdWxlVW5hdmFpbGFibGVFcnJvciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9Nb2R1bGVVbmF2YWlsYWJsZUVycm9yJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1vZHVsZVVuYXZhaWxhYmxlRXJyb3IoJ1VuYWJsZSB0byBsb2FkIERCIG1vZHVsZS4gJytlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25uZWN0aW9uID0gYXdhaXQgZGIuY29ubmVjdCh0aGlzLmNvbm5TdHJpbmcpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkRCX0NPTk5FQ1RJT05fRVJST1IsIGVyckhlbHBlci5nZXREYkVycm9yTWVzc2FnZShlKSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgKiBAc3VtbWFyeSBTZXRzIERCIGNvbm5lY3Rpb24gc3RyaW5nIHRvIGJlIHVzZWQgYnkgb3RoZXIgbWV0aG9kcy5cbiAgICAqIEBkZXNjcmlwdGlvbiBUaGlzIG1ldGhvZCBkb2Vzbid0IGFjdHVhbGx5IG9wZW4gdGhlIGNvbm5lY3Rpb24gYXMgaXQncyBvcGVuZWQvY2xvc2VkXG4gICAgKiAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBieSBxdWVyeSBtZXRob2RzLiAgXG4gICAgKiAgICAgICAgICAgICAgRXhhbXBsZSBjb25uZWN0aW9uIHN0cmluZ3M6ICBcbiAgICAqICAgICAgICAgICAgICAtIGBEcml2ZXI9e015U1FMIE9EQkMgOS4wIFVuaWNvZGUgRHJpdmVyfTtTZXJ2ZXI9bG9jYWxob3N0O0RhdGFiYXNlPW15RGF0YWJhc2U7XG4gICAgKiAgICAgICAgICAgICAgICBVc2VyPW15VXNlcm5hbWU7UGFzc3dvcmQ9bXlQYXNzd29yZDtPcHRpb249MztgICBcbiAgICAqICAgICAgICAgICAgICAtIGBEcml2ZXI9e09yYWNsZSBpbiBpbnN0YW50Y2xpZW50XzExXzJ9O2RicT0xMjcuMC4wLjE6MTUyMS9YRTt1aWQ9bXlVc2VybmFtZTtcbiAgICAqICAgICAgICAgICAgICAgIHB3ZD1teVBhc3N3b3JkO2BcbiAgICAqIEBmdW5jdGlvbiBzZXRDb25uZWN0aW9uU3RyaW5nXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gY29ublN0cmluZyAtIE9EQkMgY29ubmVjdGlvbiBzdHJpbmcuXG4gICAgKi9cbiAgICBtb2R1bGUuc2V0Q29ubmVjdGlvblN0cmluZyA9IGZ1bmN0aW9uKGNvbm5TdHJpbmcpIHtcbiAgICAgICAgbW9kdWxlLmNvbm5TdHJpbmcgPSBjb25uU3RyaW5nO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBFeGVjdXRlcyBTUUwgcXVlcnkgYW5kIHJldHVybnMgdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgZmlyc3Qgcm93IGluIHRoZSByZXN1bHQgc2V0LlxuICAgICAqIEBmdW5jdGlvbiBnZXRTY2FsYXJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgLSBUaGUgcXVlcnkgdG8gZXhlY3V0ZS5cbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIGZpcnN0IHJvdyBpbiB0aGUgcmVzdWx0IHNldCwgb3IgbnVsbCBpZiB0aGUgcmVzdWx0XG4gICAgICogICAgICAgICAgICAgICAgICBzZXQgaXMgZW1wdHkuXG4gICAgICovXG4gICAgbW9kdWxlLmdldFNjYWxhciA9IGFzeW5jIGZ1bmN0aW9uKHF1ZXJ5KSB7XG4gICAgICAgIGF3YWl0IG1vZHVsZS5fb3BlbkRiQ29ubigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdFNldCA9IGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkocXVlcnkpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdFNldC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmaXJzdFJvdyA9IHJlc3VsdFNldFswXTtcbiAgICAgICAgICAgIHZhciBmaXJzdENvbCA9IGZpcnN0Um93W09iamVjdC5rZXlzKGZpcnN0Um93KVswXV07XG4gICAgICAgICAgICByZXR1cm4gZmlyc3RDb2w7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuREJfUVVFUllfRVJST1IsIGVyckhlbHBlci5nZXREYkVycm9yTWVzc2FnZShlKSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgRXhlY3V0ZXMgU1FMIHF1ZXJ5IGFuZCByZXR1cm5zIHRoZSByZXN1bHQgc2V0LlxuICAgICAqIEBmdW5jdGlvbiBleGVjdXRlUXVlcnlcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgLSBUaGUgcXVlcnkgdG8gZXhlY3V0ZS5cbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHQgc2V0LlxuICAgICAqL1xuICAgIG1vZHVsZS5leGVjdXRlUXVlcnkgPSBhc3luYyBmdW5jdGlvbihxdWVyeSkge1xuICAgICAgICBhd2FpdCBtb2R1bGUuX29wZW5EYkNvbm4oKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3luY1JldHZhbCA9IGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkocXVlcnkpO1xuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5U3luY1JldHZhbDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBFeGVjdXRlcyBTUUwgc3RhdGVtZW50LlxuICAgICAqIEBkZXNjcmlwdGlvbiBBbnkgcmVzdWx0cyBmcm9tIHRoZSBxdWVyeSBhcmUgZGlzY2FyZGVkLlxuICAgICAqIEBmdW5jdGlvbiBleGVjdXRlTm9uUXVlcnlcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgLSBUaGUgcXVlcnkgdG8gZXhlY3V0ZS5cbiAgICAgKi9cbiAgICBtb2R1bGUuZXhlY3V0ZU5vblF1ZXJ5ID0gYXN5bmMgZnVuY3Rpb24ocXVlcnkpIHtcbiAgICAgICAgYXdhaXQgbW9kdWxlLl9vcGVuRGJDb25uKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBDYWxscyBhIHN0b3JlZCBwcm9jZWR1cmUuXG4gICAgICogQGZ1bmN0aW9uIGNhbGxQcm9jZWR1cmVcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHByb2NlZHVyZSB0byBjYWxsLlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzIC0gUHJvY2VkdXJlIGFyZ3VtZW50cy4gSWYgcHJvY2VkdXJlIHByb2R1Y2VzIG91dHB1dCBwYXJhbWV0ZXJzIHRoZW4gdGhlc2UgbmVlZCB0byBiZSBzcGVjaWZpZWQgdXNpbmcgYHVuZGVmaW5lZGAuXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBQcm9jZWR1cmUgb3V0cHV0IGlmIGFueS5cbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cbiAgICAgKiAvLyBjYWxscyBhIHByb2NlZHVyZSB3aGljaCBleHBlY3RzIHR3byBpbnB1dCBwYXJhbWV0ZXJzIGFuZCBvbmUgb3V0cHV0IHBhcmFtZXRlci5cbiAgICAgKiB2YXIgcmVzdWx0ID0gZGIuY2FsbFByb2NlZHVyZSgndGVzdCcsIDMsIDQsIHVuZGVmaW5lZCk7XG4gICAgICogbG9nLmluZm8ocmVzdWx0KTtcbiAgICAgKi9cbiAgICBtb2R1bGUuY2FsbFByb2NlZHVyZSA9IGFzeW5jIGZ1bmN0aW9uKG5hbWUsIC4uLmFyZ3MpIHtcbiAgICAgICAgYXdhaXQgbW9kdWxlLl9vcGVuRGJDb25uKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3luY1JldHZhbCA9IGF3YWl0IGNvbm5lY3Rpb24uY2FsbFByb2NlZHVyZShudWxsLCBudWxsLCBuYW1lLCBbLi4uYXJnc10pO1xuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5U3luY1JldHZhbDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gbW9kdWxlO1xufTtcbiJdfQ==
|
|
171
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1kYi5qcyJdLCJuYW1lcyI6WyJjb25uZWN0aW9uIiwiZXJySGVscGVyIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJpc0luaXRpYWxpemVkIiwiX29wZW5EYkNvbm4iLCJjb25uU3RyaW5nIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkRCX0NPTk5FQ1RJT05fRVJST1IiLCJkYiIsImUiLCJNb2R1bGVVbmF2YWlsYWJsZUVycm9yIiwibWVzc2FnZSIsImNvbm5lY3QiLCJnZXREYkVycm9yTWVzc2FnZSIsInNldENvbm5lY3Rpb25TdHJpbmciLCJnZXRTY2FsYXIiLCJxdWVyeSIsInJlc3VsdFNldCIsImxlbmd0aCIsImZpcnN0Um93IiwiZmlyc3RDb2wiLCJPYmplY3QiLCJrZXlzIiwiREJfUVVFUllfRVJST1IiLCJjbG9zZSIsImV4ZWN1dGVRdWVyeSIsInF1ZXJ5U3luY1JldHZhbCIsImV4ZWN1dGVOb25RdWVyeSIsImNhbGxQcm9jZWR1cmUiLCJuYW1lIiwiYXJncyJdLCJtYXBwaW5ncyI6Ijs7OztBQW9CQTs7OztBQXBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxVQUFKOztBQUdBLElBQUlDLFNBQVMsR0FBR0MsT0FBTyxDQUFDLGtCQUFELENBQXZCOztBQUVBQyxNQUFNLENBQUNDLE9BQVAsR0FBaUIsWUFBVztBQUN4QjtBQUNBRCxFQUFBQSxNQUFNLENBQUNFLGFBQVAsR0FBdUIsWUFBVztBQUM5QixXQUFPLElBQVA7QUFDSCxHQUZEOztBQUlBRixFQUFBQSxNQUFNLENBQUNHLFdBQVAsR0FBcUIsa0JBQWlCO0FBQ2xDLFFBQUksQ0FBQyxLQUFLQyxVQUFWLEVBQXNCO0FBQ2xCLFlBQU0sSUFBSUMsb0JBQUosQ0FBWVAsU0FBUyxDQUFDUSxTQUFWLENBQW9CQyxtQkFBaEMs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Q0EsWUFBTU4sVUFBVSxDQUFDbUIsS0FBWCxDQUFpQkEsS0FBakIsQ0FBTjtBQUNILEtBRkQsQ0FFRSxPQUFPUCxDQUFQLEVBQVU7QUFDUixZQUFNLElBQUlKLG9CQUFKLENBQVlQLFNBQVMsQ0FBQ1EsU0FBVixDQUFvQmlCLGNBQWhDLEVBQWdEekIsU0FBUyxDQUFDZSxpQkFBVixDQUE0QkosQ0FBNUIsQ0FBaEQsQ0FBTjtBQUNILEtBSkQsU0FJVTtBQUNOLFlBQU1aLFVBQVUsQ0FBQzJCLEtBQVgsRUFBTjtBQUNIO0FBQ0osR0FURDtBQVdBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJeEIsRUFBQUEsTUFBTSxDQUFDNEIsYUFBUCxHQUF1QixnQkFBZUMsSUFBZixFQUFxQixHQUFHQyxJQUF4QixFQUE4QjtBQUNqRCxVQUFNOUIsTUFBTSxDQUFDRyxXQUFQLEVBQU47O0FBRUEsUUFBSTtBQUNBLFlBQU11QixlQUFlLEdBQUcsTUFBTTdCLFVBQVUsQ0FBQytCLGFBQVgsQ0FBeUIsSUFBekIsRUFBK0IsSUFBL0IsRUFBcUNDLElBQXJDLEVBQTJDLENBQUMsR0FBR0MsSUFBSixDQUEzQyxDQUE5QjtBQUNBLGFBQU9KLGVBQVA7QUFDSCxLQUhELENBR0UsT0FBT2pCLENBQVAsRUFBVTtBQUNSLFlBQU0sSUFBSUosb0JBQUosQ0FBWVAsU0FBUyxDQUFDUSxTQUFWLENBQW9CaUIsY0FBaEMsRUFBZ0R6QixTQUFTLENBQUNlLGlCQUFWLENBQTRCSixDQUE1QixDQUFoRCxDQUFOO0FBQ0gsS0FMRCxTQUtVO0FBQ04sWUFBTVosVUFBVSxDQUFDMkIsS0FBWCxFQUFOO0FBQ0g7QUFDSixHQVhEOztBQWFBLFNBQU94QixNQUFQO0FBQ0gsQ0FoSUQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBkYlxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIERhdGEgQmFzZXMgdGhyb3VnaCBPREJDLlxyXG4gKiBAbm90ZSBCZWZvcmUgdXNpbmcgdGhpcyBtb2R1bGUsIG1ha2Ugc3VyZSB0byBpbnN0YWxsIGB1bml4b2RiY2A6ICBcclxuICogICAqIFdpbmRvd3MgLSBJbnN0YWxsIGBXaW5kb3dzIFNES2AgIFxyXG4gKiAgICogT1MgWCAtICBgYnJldyBpbnN0YWxsIHVuaXhvZGJjYCAgXHJcbiAqICAgKiBMaW51eCAtIGBzdWRvIGFwdC1nZXQgaW5zdGFsbCB1bml4b2RiYyB1bml4b2RiYy1kZXZgIG9yIGBzdWRvIGRuZiBpbnN0YWxsIHVuaXhPREJDIHVuaXhPREJDLWRldmVsYFxyXG4gKi9cclxuXHJcbnZhciBjb25uZWN0aW9uO1xyXG5cclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxudmFyIGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBGSVhNRTogY2hhbmdlIHNldENvbm5lY3Rpb25TdHJpbmcgdG8gaW5pdCBhbmQgYWRkIGhhZG5saW5nIGluIGhlcmVcclxuICAgIG1vZHVsZS5pc0luaXRpYWxpemVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZHVsZS5fb3BlbkRiQ29ubiA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb25uU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuREJfQ09OTkVDVElPTl9FUlJPUiwgJ05vIGNvbm5lY3Rpb24gc3RyaW5nIHNwZWNpZmllZC4gVXNlIGRiLnNldENvbm5lY3Rpb25TdHJpbmcoKS4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSB0aGlzIG1vZHVsZSBpZiBvZGJjIHdhc24ndCBpbnN0YWxsZWRcclxuICAgICAgICAgICAgdmFyIGRiO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgZGIgPSByZXF1aXJlKCdvZGJjJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvdWxkIGhhcHBlbiBvbmx5IG9uIHVuaXggZHVlIHRvIG1pc3NpbmcgdW5peG9kYmMgYmluYXJpZXNcclxuICAgICAgICAgICAgICAgIGNvbnN0IE1vZHVsZVVuYXZhaWxhYmxlRXJyb3IgPSByZXF1aXJlKCcuLi9lcnJvcnMvTW9kdWxlVW5hdmFpbGFibGVFcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1vZHVsZVVuYXZhaWxhYmxlRXJyb3IoJ1VuYWJsZSB0byBsb2FkIERCIG1vZHVsZS4gJytlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25uZWN0aW9uID0gYXdhaXQgZGIuY29ubmVjdCh0aGlzLmNvbm5TdHJpbmcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9DT05ORUNUSU9OX0VSUk9SLCBlcnJIZWxwZXIuZ2V0RGJFcnJvck1lc3NhZ2UoZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEBzdW1tYXJ5IFNldHMgREIgY29ubmVjdGlvbiBzdHJpbmcgdG8gYmUgdXNlZCBieSBvdGhlciBtZXRob2RzLlxyXG4gICAgKiBAZGVzY3JpcHRpb24gVGhpcyBtZXRob2QgZG9lc24ndCBhY3R1YWxseSBvcGVuIHRoZSBjb25uZWN0aW9uIGFzIGl0J3Mgb3BlbmVkL2Nsb3NlZFxyXG4gICAgKiAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBieSBxdWVyeSBtZXRob2RzLiAgXHJcbiAgICAqICAgICAgICAgICAgICBFeGFtcGxlIGNvbm5lY3Rpb24gc3RyaW5nczogIFxyXG4gICAgKiAgICAgICAgICAgICAgLSBgRHJpdmVyPXtNeVNRTCBPREJDIDkuMCBVbmljb2RlIERyaXZlcn07U2VydmVyPWxvY2FsaG9zdDtEYXRhYmFzZT1teURhdGFiYXNlO1xyXG4gICAgKiAgICAgICAgICAgICAgICBVc2VyPW15VXNlcm5hbWU7UGFzc3dvcmQ9bXlQYXNzd29yZDtPcHRpb249MztgICBcclxuICAgICogICAgICAgICAgICAgIC0gYERyaXZlcj17T3JhY2xlIGluIGluc3RhbnRjbGllbnRfMTFfMn07ZGJxPTEyNy4wLjAuMToxNTIxL1hFO3VpZD1teVVzZXJuYW1lO1xyXG4gICAgKiAgICAgICAgICAgICAgICBwd2Q9bXlQYXNzd29yZDtgXHJcbiAgICAqIEBmdW5jdGlvbiBzZXRDb25uZWN0aW9uU3RyaW5nXHJcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb25uU3RyaW5nIC0gT0RCQyBjb25uZWN0aW9uIHN0cmluZy5cclxuICAgICovXHJcbiAgICBtb2R1bGUuc2V0Q29ubmVjdGlvblN0cmluZyA9IGZ1bmN0aW9uKGNvbm5TdHJpbmcpIHtcclxuICAgICAgICBtb2R1bGUuY29ublN0cmluZyA9IGNvbm5TdHJpbmc7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRXhlY3V0ZXMgU1FMIHF1ZXJ5IGFuZCByZXR1cm5zIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIGZpcnN0IHJvdyBpbiB0aGUgcmVzdWx0IHNldC5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRTY2FsYXJcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSAtIFRoZSBxdWVyeSB0byBleGVjdXRlLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgZmlyc3QgY29sdW1uIG9mIHRoZSBmaXJzdCByb3cgaW4gdGhlIHJlc3VsdCBzZXQsIG9yIG51bGwgaWYgdGhlIHJlc3VsdFxyXG4gICAgICogICAgICAgICAgICAgICAgICBzZXQgaXMgZW1wdHkuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXRTY2FsYXIgPSBhc3luYyBmdW5jdGlvbihxdWVyeSkge1xyXG4gICAgICAgIGF3YWl0IG1vZHVsZS5fb3BlbkRiQ29ubigpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHRTZXQgPSBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdFNldC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBmaXJzdFJvdyA9IHJlc3VsdFNldFswXTtcclxuICAgICAgICAgICAgdmFyIGZpcnN0Q29sID0gZmlyc3RSb3dbT2JqZWN0LmtleXMoZmlyc3RSb3cpWzBdXTtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q29sO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEV4ZWN1dGVzIFNRTCBxdWVyeSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IHNldC5cclxuICAgICAqIEBmdW5jdGlvbiBleGVjdXRlUXVlcnlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBxdWVyeSAtIFRoZSBxdWVyeSB0byBleGVjdXRlLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0IHNldC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmV4ZWN1dGVRdWVyeSA9IGFzeW5jIGZ1bmN0aW9uKHF1ZXJ5KSB7XHJcbiAgICAgICAgYXdhaXQgbW9kdWxlLl9vcGVuRGJDb25uKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcXVlcnlTeW5jUmV0dmFsID0gYXdhaXQgY29ubmVjdGlvbi5xdWVyeShxdWVyeSk7XHJcbiAgICAgICAgICAgIHJldHVybiBxdWVyeVN5bmNSZXR2YWw7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkRCX1FVRVJZX0VSUk9SLCBlcnJIZWxwZXIuZ2V0RGJFcnJvck1lc3NhZ2UoZSkpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRXhlY3V0ZXMgU1FMIHN0YXRlbWVudC5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBBbnkgcmVzdWx0cyBmcm9tIHRoZSBxdWVyeSBhcmUgZGlzY2FyZGVkLlxyXG4gICAgICogQGZ1bmN0aW9uIGV4ZWN1dGVOb25RdWVyeVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IC0gVGhlIHF1ZXJ5IHRvIGV4ZWN1dGUuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5leGVjdXRlTm9uUXVlcnkgPSBhc3luYyBmdW5jdGlvbihxdWVyeSkge1xyXG4gICAgICAgIGF3YWl0IG1vZHVsZS5fb3BlbkRiQ29ubigpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkocXVlcnkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IENhbGxzIGEgc3RvcmVkIHByb2NlZHVyZS5cclxuICAgICAqIEBmdW5jdGlvbiBjYWxsUHJvY2VkdXJlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHByb2NlZHVyZSB0byBjYWxsLlxyXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgLSBQcm9jZWR1cmUgYXJndW1lbnRzLiBJZiBwcm9jZWR1cmUgcHJvZHVjZXMgb3V0cHV0IHBhcmFtZXRlcnMgdGhlbiB0aGVzZSBuZWVkIHRvIGJlIHNwZWNpZmllZCB1c2luZyBgdW5kZWZpbmVkYC5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUHJvY2VkdXJlIG91dHB1dCBpZiBhbnkuXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIGNhbGxzIGEgcHJvY2VkdXJlIHdoaWNoIGV4cGVjdHMgdHdvIGlucHV0IHBhcmFtZXRlcnMgYW5kIG9uZSBvdXRwdXQgcGFyYW1ldGVyLlxyXG4gICAgICogdmFyIHJlc3VsdCA9IGRiLmNhbGxQcm9jZWR1cmUoJ3Rlc3QnLCAzLCA0LCB1bmRlZmluZWQpO1xyXG4gICAgICogbG9nLmluZm8ocmVzdWx0KTtcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmNhbGxQcm9jZWR1cmUgPSBhc3luYyBmdW5jdGlvbihuYW1lLCAuLi5hcmdzKSB7XHJcbiAgICAgICAgYXdhaXQgbW9kdWxlLl9vcGVuRGJDb25uKCk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3luY1JldHZhbCA9IGF3YWl0IGNvbm5lY3Rpb24uY2FsbFByb2NlZHVyZShudWxsLCBudWxsLCBuYW1lLCBbLi4uYXJnc10pO1xyXG4gICAgICAgICAgICByZXR1cm4gcXVlcnlTeW5jUmV0dmFsO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5EQl9RVUVSWV9FUlJPUiwgZXJySGVscGVyLmdldERiRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXX0=
|
|
@@ -10,18 +10,18 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
10
10
|
|
|
11
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
12
|
|
|
13
|
-
/*
|
|
14
|
-
* Copyright (C) 2015-present CloudBeat Limited
|
|
15
|
-
*
|
|
16
|
-
* This program is free software: you can redistribute it and/or modify
|
|
17
|
-
* it under the terms of the GNU General Public License as published by
|
|
18
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
19
|
-
* (at your option) any later version.
|
|
13
|
+
/*
|
|
14
|
+
* Copyright (C) 2015-present CloudBeat Limited
|
|
15
|
+
*
|
|
16
|
+
* This program is free software: you can redistribute it and/or modify
|
|
17
|
+
* it under the terms of the GNU General Public License as published by
|
|
18
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
19
|
+
* (at your option) any later version.
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
|
-
/**
|
|
23
|
-
* @name email
|
|
24
|
-
* @description Provides methods for working with email via IMAP.
|
|
22
|
+
/**
|
|
23
|
+
* @name email
|
|
24
|
+
* @description Provides methods for working with email via IMAP.
|
|
25
25
|
*/
|
|
26
26
|
const nodemailer = require('nodemailer');
|
|
27
27
|
|
|
@@ -41,16 +41,16 @@ module.exports = function () {
|
|
|
41
41
|
module.isInitialized = function () {
|
|
42
42
|
return _config !== undefined;
|
|
43
43
|
};
|
|
44
|
-
/**
|
|
45
|
-
* @summary Set email connection details.
|
|
46
|
-
* @function init
|
|
47
|
-
* @param {String} user - Username (e.g. 'your@email.address').
|
|
48
|
-
* @param {String} password - Password.
|
|
49
|
-
* @param {String} host - Host name (e.g. 'imap.gmail.com').
|
|
50
|
-
* @param {Number} port - Port number (e.g. 993).
|
|
51
|
-
* @param {Boolean} tls - true to use TLS, false otherwise.
|
|
52
|
-
* @param {Number=} authTimeout - Authentication timeout in milliseconds.
|
|
53
|
-
* @param {Boolean=} enableSNI - Enable sending SNI when establishing the connection. This is required for some mail servers. Default is false.
|
|
44
|
+
/**
|
|
45
|
+
* @summary Set email connection details.
|
|
46
|
+
* @function init
|
|
47
|
+
* @param {String} user - Username (e.g. 'your@email.address').
|
|
48
|
+
* @param {String} password - Password.
|
|
49
|
+
* @param {String} host - Host name (e.g. 'imap.gmail.com').
|
|
50
|
+
* @param {Number} port - Port number (e.g. 993).
|
|
51
|
+
* @param {Boolean} tls - true to use TLS, false otherwise.
|
|
52
|
+
* @param {Number=} authTimeout - Authentication timeout in milliseconds.
|
|
53
|
+
* @param {Boolean=} enableSNI - Enable sending SNI when establishing the connection. This is required for some mail servers. Default is false.
|
|
54
54
|
*/
|
|
55
55
|
|
|
56
56
|
|
|
@@ -91,37 +91,37 @@ module.exports = function () {
|
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
93
|
};
|
|
94
|
-
/**
|
|
95
|
-
* @summary Retrieves last unseen email.
|
|
96
|
-
* @function getLastEmail
|
|
97
|
-
* @param {Number} sinceMinutes - Search for emails received since the specified amount of minutes into past.
|
|
98
|
-
* @param {String|Regex} subject - Return email matching the specified subject.
|
|
99
|
-
* @param {Number} timeout - Timeout (in milliseconds) for waiting for the message to arrive.
|
|
100
|
-
* @return {Object} Email body, text, textAsHtml, attachments if any, and TO, FROM, SUBJECT, DATE headers.
|
|
101
|
-
* @example <caption>[javascript] Usage example</caption>
|
|
102
|
-
* email.init('[YOUR_EMAIL]@gmail.com', 'password', 'imap.gmail.com', 993, true, 3000);
|
|
103
|
-
* var mail = email.getLastEmail(60, 'email subject', 5000);
|
|
104
|
-
* log.info(mail);
|
|
105
|
-
*
|
|
106
|
-
* if(r.attachments && r.attachments.length > 0){
|
|
107
|
-
* const fs = require('fs');
|
|
108
|
-
* r.attachments.map((attachment) => {
|
|
109
|
-
* let fileDescriptor;
|
|
110
|
-
* try{
|
|
111
|
-
* fileDescriptor = fs.openSync(attachment.filename, 'w');
|
|
112
|
-
* } catch(e) {
|
|
113
|
-
* throw 'could not open file: ' + e;
|
|
114
|
-
* }
|
|
115
|
-
*
|
|
116
|
-
* try{
|
|
117
|
-
* fs.writeFileSync(fileDescriptor, attachment.data);
|
|
118
|
-
* } catch(e) {
|
|
119
|
-
* throw 'error writing file: ' + e;
|
|
120
|
-
* }
|
|
121
|
-
*
|
|
122
|
-
* fs.closeSync(fileDescriptor);
|
|
123
|
-
* });
|
|
124
|
-
* }
|
|
94
|
+
/**
|
|
95
|
+
* @summary Retrieves last unseen email.
|
|
96
|
+
* @function getLastEmail
|
|
97
|
+
* @param {Number} sinceMinutes - Search for emails received since the specified amount of minutes into past.
|
|
98
|
+
* @param {String|Regex} subject - Return email matching the specified subject.
|
|
99
|
+
* @param {Number} timeout - Timeout (in milliseconds) for waiting for the message to arrive.
|
|
100
|
+
* @return {Object} Email body, text, textAsHtml, attachments if any, and TO, FROM, SUBJECT, DATE headers.
|
|
101
|
+
* @example <caption>[javascript] Usage example</caption>
|
|
102
|
+
* email.init('[YOUR_EMAIL]@gmail.com', 'password', 'imap.gmail.com', 993, true, 3000);
|
|
103
|
+
* var mail = email.getLastEmail(60, 'email subject', 5000);
|
|
104
|
+
* log.info(mail);
|
|
105
|
+
*
|
|
106
|
+
* if(r.attachments && r.attachments.length > 0){
|
|
107
|
+
* const fs = require('fs');
|
|
108
|
+
* r.attachments.map((attachment) => {
|
|
109
|
+
* let fileDescriptor;
|
|
110
|
+
* try{
|
|
111
|
+
* fileDescriptor = fs.openSync(attachment.filename, 'w');
|
|
112
|
+
* } catch(e) {
|
|
113
|
+
* throw 'could not open file: ' + e;
|
|
114
|
+
* }
|
|
115
|
+
*
|
|
116
|
+
* try{
|
|
117
|
+
* fs.writeFileSync(fileDescriptor, attachment.data);
|
|
118
|
+
* } catch(e) {
|
|
119
|
+
* throw 'error writing file: ' + e;
|
|
120
|
+
* }
|
|
121
|
+
*
|
|
122
|
+
* fs.closeSync(fileDescriptor);
|
|
123
|
+
* });
|
|
124
|
+
* }
|
|
125
125
|
*/
|
|
126
126
|
|
|
127
127
|
|
|
@@ -219,13 +219,13 @@ module.exports = function () {
|
|
|
219
219
|
|
|
220
220
|
return mail;
|
|
221
221
|
};
|
|
222
|
-
/**
|
|
223
|
-
* @summary Send email using SMTP.
|
|
224
|
-
* @function send
|
|
225
|
-
* @param {String|Array} to - Receiver's email address.
|
|
226
|
-
* @param {String} subject - Email subject.
|
|
227
|
-
* @param {String} content - Email body as a plain text.
|
|
228
|
-
* @param {String=} html - Optional, Email body as HTML.
|
|
222
|
+
/**
|
|
223
|
+
* @summary Send email using SMTP.
|
|
224
|
+
* @function send
|
|
225
|
+
* @param {String|Array} to - Receiver's email address.
|
|
226
|
+
* @param {String} subject - Email subject.
|
|
227
|
+
* @param {String} content - Email body as a plain text.
|
|
228
|
+
* @param {String=} html - Optional, Email body as HTML.
|
|
229
229
|
*/
|
|
230
230
|
|
|
231
231
|
|
|
@@ -269,4 +269,4 @@ module.exports = function () {
|
|
|
269
269
|
|
|
270
270
|
return module;
|
|
271
271
|
};
|
|
272
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1lbWFpbC5qcyJdLCJuYW1lcyI6WyJub2RlbWFpbGVyIiwicmVxdWlyZSIsImltYXBzIiwic2ltcGxlUGFyc2VyIiwiZXJySGVscGVyIiwiQVVUSF9USU1FT1VUIiwibW9kdWxlIiwiZXhwb3J0cyIsIl9jb25maWciLCJfc210cENvbmZpZyIsImlzSW5pdGlhbGl6ZWQiLCJ1bmRlZmluZWQiLCJpbml0IiwidXNlciIsInBhc3N3b3JkIiwiaG9zdCIsInBvcnQiLCJ0bHMiLCJhdXRoVGltZW91dCIsImVuYWJsZVNOSSIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJpbWFwIiwidXNlcm5hbWUiLCJ0bHNPcHRpb25zIiwic2VydmVybmFtZSIsImdldExhc3RFbWFpbCIsInNpbmNlTWludXRlcyIsInN1YmplY3QiLCJ0aW1lb3V0IiwibWFpbCIsIm5vdyIsIkRhdGUiLCJnZXRUaW1lIiwiZXJyIiwiY29ubmVjdGlvbiIsImNvbm5lY3QiLCJvcGVuQm94Iiwic3RhcnREYXRlIiwic2V0VGltZSIsInRvSVNPU3RyaW5nIiwic2VhcmNoQ3JpdGVyaWEiLCJmZXRjaE9wdGlvbnMiLCJib2RpZXMiLCJzdHJ1Y3QiLCJtYXJrU2VlbiIsInJlc3VsdHMiLCJzZWFyY2giLCJyZXN1bHQiLCJoZWFkZXJQYXJ0IiwiXyIsImZpbmQiLCJwYXJ0cyIsImJvZHlQYXJ0IiwiaWQiLCJhdHRyaWJ1dGVzIiwidWlkIiwiaWRIZWFkZXIiLCJzaW1wbGUiLCJib2R5IiwiYXR0YWNobWVudHMiLCJnZXRQYXJ0cyIsInBhcnQiLCJkaXNwb3NpdGlvbiIsInR5cGUiLCJ0b1VwcGVyQ2FzZSIsInBhcnREYXRhIiwiZ2V0UGFydERhdGEiLCJwdXNoIiwiZmlsZW5hbWUiLCJwYXJhbXMiLCJkYXRhIiwiaHRtbCIsInRleHRBc0h0bWwiLCJ0ZXh0IiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsInRvIiwiZnJvbSIsImRhdGUiLCJlIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkVNQUlMX0VSUk9SIiwidG9TdHJpbmciLCJUSU1FT1VUIiwic2VuZCIsImNvbnRlbnQiLCJ0cmFuc3BvcnRlciIsImNyZWF0ZVRyYW5zcG9ydCIsInNlY3VyZSIsImF1dGgiLCJwYXNzIiwic2VuZG1haWwiLCJsb2dnZXIiLCJ0cmFuc2FjdGlvbkxvZyIsImRlYnVnIiwibWVzc2FnZSIsInNlbmRNYWlsIl0sIm1hcHBpbmdzIjoiOzs7O0FBY0E7O0FBQ0E7O0FBQ0E7Ozs7QUFoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBLE1BQU1BLFVBQVUsR0FBR0MsT0FBTyxDQUFDLFlBQUQsQ0FBMUI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFyQjs7QUFDQSxNQUFNRSxZQUFZLEdBQUdGLE9BQU8sQ0FBQyxZQUFELENBQVAsQ0FBc0JFLFlBQTNDOztBQUVBLE1BQU1DLFNBQVMsR0FBR0gsT0FBTyxDQUFDLGtCQUFELENBQXpCOztBQUNBLE1BQU1JLFlBQVksR0FBRyxLQUFyQjs7QUFFQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFlBQVc7QUFDeEIsTUFBSUMsT0FBSjs7QUFDQSxNQUFJQyxXQUFKOztBQUVBSCxFQUFBQSxNQUFNLENBQUNJLGFBQVAsR0FBdUIsWUFBVztBQUM5QixXQUFPRixPQUFPLEtBQUtHLFNBQW5CO0FBQ0gsR0FGRDtBQUlBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJTCxFQUFBQSxNQUFNLENBQUNNLElBQVAsR0FBYyxVQUFTQyxJQUFULEVBQWVDLFFBQWYsRUFBeUJDLElBQXpCLEVBQStCQyxJQUEvQixFQUFxQ0MsR0FBckMsRUFBMENDLFdBQVcsR0FBR2IsWUFBeEQs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LypcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGVtYWlsXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIGVtYWlsIHZpYSBJTUFQLlxuICovXG5cbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuY29uc3Qgbm9kZW1haWxlciA9IHJlcXVpcmUoJ25vZGVtYWlsZXInKTtcbmNvbnN0IGltYXBzID0gcmVxdWlyZSgnaW1hcC1zaW1wbGUnKTtcbmNvbnN0IHNpbXBsZVBhcnNlciA9IHJlcXVpcmUoJ21haWxwYXJzZXInKS5zaW1wbGVQYXJzZXI7XG5cbmNvbnN0IGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcbmNvbnN0IEFVVEhfVElNRU9VVCA9IDMwMDAwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBfY29uZmlnO1xuICAgIHZhciBfc210cENvbmZpZztcblxuICAgIG1vZHVsZS5pc0luaXRpYWxpemVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfY29uZmlnICE9PSB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IFNldCBlbWFpbCBjb25uZWN0aW9uIGRldGFpbHMuXG4gICAgICogQGZ1bmN0aW9uIGluaXRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXNlciAtIFVzZXJuYW1lIChlLmcuICd5b3VyQGVtYWlsLmFkZHJlc3MnKS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGFzc3dvcmQgLSBQYXNzd29yZC5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaG9zdCAtIEhvc3QgbmFtZSAoZS5nLiAnaW1hcC5nbWFpbC5jb20nKS5cbiAgICAgKiBAcGFyYW0ge051bWJlcn0gcG9ydCAtIFBvcnQgbnVtYmVyIChlLmcuIDk5MykuXG4gICAgICogQHBhcmFtIHtCb29sZWFufSB0bHMgLSB0cnVlIHRvIHVzZSBUTFMsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKiBAcGFyYW0ge051bWJlcj19IGF1dGhUaW1lb3V0IC0gQXV0aGVudGljYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gICAgICogQHBhcmFtIHtCb29sZWFuPX0gZW5hYmxlU05JIC0gRW5hYmxlIHNlbmRpbmcgU05JIHdoZW4gZXN0YWJsaXNoaW5nIHRoZSBjb25uZWN0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBzb21lIG1haWwgc2VydmVycy4gRGVmYXVsdCBpcyBmYWxzZS4gXG4gICAgICovXG4gICAgbW9kdWxlLmluaXQgPSBmdW5jdGlvbih1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCwgdGxzLCBhdXRoVGltZW91dCA9IEFVVEhfVElNRU9VVCwgZW5hYmxlU05JID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcodXNlciwgJ3VzZXInKTtcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhwYXNzd29yZCwgJ3Bhc3N3b3JkJyk7XG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcoaG9zdCwgJ2hvc3QnKTtcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShwb3J0LCAncG9ydCcpO1xuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudEJvb2wodGxzLCAndGxzJyk7XG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUoYXV0aFRpbWVvdXQsICdhdXRoVGltZW91dCcpO1xuXG4gICAgICAgIF9jb25maWcgPSB7XG4gICAgICAgICAgICBpbWFwOiB7XG4gICAgICAgICAgICAgICAgdXNlcjogdXNlcixcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXG4gICAgICAgICAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgICAgICAgICBwb3J0OiBwb3J0LFxuICAgICAgICAgICAgICAgIHRsczogdGxzLFxuICAgICAgICAgICAgICAgIGF1dGhUaW1lb3V0OiBhdXRoVGltZW91dFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBfc210cENvbmZpZyA9IHtcbiAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VyLFxuICAgICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgICBob3N0OiBob3N0LFxuICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgICAgIHRscyxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBzZXQgc2VydmVybmFtZSBpZiBTTkkgaXMgZW5hYmxlZCBvciB3ZSBhcmUgdXNpbmcgR21haWxcbiAgICAgICAgaWYgKGVuYWJsZVNOSSB8fCBob3N0ID09PSAnaW1hcC5nbWFpbC5jb20nKSB7XG4gICAgICAgICAgICBfY29uZmlnLmltYXAudGxzT3B0aW9ucyA9IHsgc2VydmVybmFtZTogaG9zdCB9O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBsYXN0IHVuc2VlbiBlbWFpbC5cbiAgICAgKiBAZnVuY3Rpb24gZ2V0TGFzdEVtYWlsXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHNpbmNlTWludXRlcyAtIFNlYXJjaCBmb3IgZW1haWxzIHJlY2VpdmVkIHNpbmNlIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIG1pbnV0ZXMgaW50byBwYXN0LlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ2V4fSBzdWJqZWN0IC0gUmV0dXJuIGVtYWlsIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgc3ViamVjdC5cbiAgICAgKiBAcGFyYW0ge051bWJlcn0gdGltZW91dCAtIFRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIHdhaXRpbmcgZm9yIHRoZSBtZXNzYWdlIHRvIGFycml2ZS5cbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEVtYWlsIGJvZHksIHRleHQsIHRleHRBc0h0bWwsIGF0dGFjaG1lbnRzIGlmIGFueSwgYW5kIFRPLCBGUk9NLCBTVUJKRUNULCBEQVRFIGhlYWRlcnMuXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XG4gICAgICogZW1haWwuaW5pdCgnW1lPVVJfRU1BSUxdQGdtYWlsLmNvbScsICdwYXNzd29yZCcsICdpbWFwLmdtYWlsLmNvbScsIDk5MywgdHJ1ZSwgMzAwMCk7XG4gICAgICogdmFyIG1haWwgPSBlbWFpbC5nZXRMYXN0RW1haWwoNjAsICdlbWFpbCBzdWJqZWN0JywgNTAwMCk7XG4gICAgICogbG9nLmluZm8obWFpbCk7XG4gICAgICogXG4gICAgICogaWYoci5hdHRhY2htZW50cyAmJiByLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApe1xuICAgICAqIFx0Y29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuICAgICAqIFx0ci5hdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQpID0+IHtcbiAgICAgKiBcdFx0bGV0IGZpbGVEZXNjcmlwdG9yO1xuICAgICAqIFx0XHR0cnl7XG4gICAgICogXHRcdFx0ZmlsZURlc2NyaXB0b3IgPSBmcy5vcGVuU3luYyhhdHRhY2htZW50LmZpbGVuYW1lLCAndycpO1xuICAgICAqIFx0XHR9IGNhdGNoKGUpIHtcbiAgICAgKiBcdFx0XHR0aHJvdyAnY291bGQgbm90IG9wZW4gZmlsZTogJyArIGU7XG4gICAgICogXHRcdH1cbiAgICAgKiBcdFx0XG4gICAgICogXHRcdHRyeXtcbiAgICAgKiBcdFx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVEZXNjcmlwdG9yLCBhdHRhY2htZW50LmRhdGEpO1xuICAgICAqIFx0XHR9IGNhdGNoKGUpIHtcbiAgICAgKiBcdFx0XHR0aHJvdyAnZXJyb3Igd3JpdGluZyBmaWxlOiAnICsgZTtcbiAgICAgKiBcdFx0fVxuICAgICAqIFx0XHRcbiAgICAgKiBcdFx0ZnMuY2xvc2VTeW5jKGZpbGVEZXNjcmlwdG9yKTtcbiAgICAgKiBcdH0pO1xuICAgICAqIH1cbiAgICAgKi9cbiAgICBtb2R1bGUuZ2V0TGFzdEVtYWlsID0gYXN5bmMgZnVuY3Rpb24oc2luY2VNaW51dGVzLCBzdWJqZWN0LCB0aW1lb3V0KSB7XG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUoc2luY2VNaW51dGVzLCAnc2luY2VNaW51dGVzJyk7XG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUodGltZW91dCwgJ3RpbWVvdXQnKTtcblxuICAgICAgICB2YXIgbWFpbDtcbiAgICAgICAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gICAgICAgIHZhciBlcnI7XG5cbiAgICAgICAgd2hpbGUgKCFlcnIgJiYgIW1haWwgJiYgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSBub3cpIDwgdGltZW91dCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gYXdhaXQgaW1hcHMuY29ubmVjdChfY29uZmlnKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLm9wZW5Cb3goJ0lOQk9YJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBmZXRjaCB1bnNlZW4gZW1haWxzIGZyb20gdGhlIGxhc3Qgc2luY2VNaW51dGVzXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgc3RhcnREYXRlLnNldFRpbWUoRGF0ZS5ub3coKSAtIChzaW5jZU1pbnV0ZXMgKiA2MCAqIDEwMDApKTtcbiAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBzdGFydERhdGUudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB2YXIgc2VhcmNoQ3JpdGVyaWEgPSBbJ1VOU0VFTicsIFsnU0lOQ0UnLCBzdGFydERhdGVdXTtcblxuICAgICAgICAgICAgICAgIC8vIGZldGNoIGNlcnRhaW4gaGVhZGVycyBhbmQgc3RyaXBwZWQgZG93biBib2R5XG4gICAgICAgICAgICAgICAgdmFyIGZldGNoT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgYm9kaWVzOiBbJ0hFQURFUi5GSUVMRFMgKEZST00gVE8gU1VCSkVDVCBEQVRFKScsICdURVhUJ10sXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWFya1NlZW46IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBjb25uZWN0aW9uLnNlYXJjaChzZWFyY2hDcml0ZXJpYSwgZmV0Y2hPcHRpb25zKTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlclBhcnQgPSBfLmZpbmQocmVzdWx0LnBhcnRzLCB7ICd3aGljaCc6IGZldGNoT3B0aW9ucy5ib2RpZXNbMF0gfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHlQYXJ0ID0gXy5maW5kKHJlc3VsdC5wYXJ0cywgeyAnd2hpY2gnOiBmZXRjaE9wdGlvbnMuYm9kaWVzWzFdIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gcmVzdWx0LmF0dHJpYnV0ZXMudWlkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZEhlYWRlciA9ICdJbWFwLUlkOiAnK2lkKydcXHJcXG4nO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaW1wbGUgPSBhd2FpdCBzaW1wbGVQYXJzZXIoaWRIZWFkZXIrYm9keVBhcnQuYm9keSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gaW1hcHMuZ2V0UGFydHMocmVzdWx0LmF0dHJpYnV0ZXMuc3RydWN0KTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0LmRpc3Bvc2l0aW9uICYmIHBhcnQuZGlzcG9zaXRpb24udHlwZS50b1VwcGVyQ2FzZSgpID09PSAnQVRUQUNITUVOVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0RGF0YSA9IGF3YWl0IGNvbm5lY3Rpb24uZ2V0UGFydERhdGEocmVzdWx0LCBwYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU6IHBhcnQuZGlzcG9zaXRpb24ucGFyYW1zLmZpbGVuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXJ0RGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGJvZHk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBodG1sO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dEFzSHRtbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpbXBsZS5odG1sIHx8IHNpbXBsZS50ZXh0IHx8IHNpbXBsZS50ZXh0QXNIdG1sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZWQgc3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGJvZHlQYXJ0LnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gc2ltcGxlLmh0bWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QXNIdG1sID0gc2ltcGxlLnRleHRBc0h0bWw7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBwYXJzZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBib2R5UGFydC5ib2R5O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlclBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YmplY3QuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgc3ViamVjdC50ZXN0KGhlYWRlclBhcnQuYm9keS5zdWJqZWN0WzBdKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YmplY3QgPT09IGhlYWRlclBhcnQuYm9keS5zdWJqZWN0WzBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0byA9IGhlYWRlclBhcnQuYm9keS50byA/IGhlYWRlclBhcnQuYm9keS50b1swXSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlsID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBoZWFkZXJQYXJ0LmJvZHkuZnJvbVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG86IHRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0OiBoZWFkZXJQYXJ0LmJvZHkuc3ViamVjdFswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogaGVhZGVyUGFydC5ib2R5LmRhdGVbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBhdHRhY2htZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFzSHRtbDogdGV4dEFzSHRtbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbDogaHRtbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRU1BSUxfRVJST1IsIGVyci50b1N0cmluZygpKTtcbiAgICAgICAgfSBlbHNlIGlmICghbWFpbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCBcIkNvdWxkbid0IGdldCBhbiBlbWFpbCB3aXRoaW4gXCIgKyB0aW1lb3V0ICsgJyBtcy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYWlsO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBTZW5kIGVtYWlsIHVzaW5nIFNNVFAuXG4gICAgICogQGZ1bmN0aW9uIHNlbmRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gdG8gLSBSZWNlaXZlcidzIGVtYWlsIGFkZHJlc3MuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHN1YmplY3QgLSBFbWFpbCBzdWJqZWN0LlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50IC0gRW1haWwgYm9keSBhcyBhIHBsYWluIHRleHQuXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBodG1sIC0gT3B0aW9uYWwsIEVtYWlsIGJvZHkgYXMgSFRNTC5cbiAgICAgKi9cbiAgICBtb2R1bGUuc2VuZCA9IGFzeW5jIGZ1bmN0aW9uKHRvLCBzdWJqZWN0LCBjb250ZW50LCBodG1sID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBlcnIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBTTVRQIHRyYW5zcG9ydGVyIG9iamVjdFxuICAgICAgICAgICAgY29uc3QgdHJhbnNwb3J0ZXIgPSBub2RlbWFpbGVyLmNyZWF0ZVRyYW5zcG9ydCh7XG4gICAgICAgICAgICAgICAgaG9zdDogX3NtdHBDb25maWcuaG9zdCxcbiAgICAgICAgICAgICAgICBwb3J0OiBfc210cENvbmZpZy5wb3J0LFxuICAgICAgICAgICAgICAgIHNlY3VyZTogX3NtdHBDb25maWcudGxzLFxuICAgICAgICAgICAgICAgIGF1dGg6IHtcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogX3NtdHBDb25maWcudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhc3M6IF9zbXRwQ29uZmlnLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VuZG1haWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxvZ2dlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Mb2c6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlYnVnOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBNZXNzYWdlIG9iamVjdFxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICB0bzogdG8sXG4gICAgICAgICAgICAgICAgLy8gU3ViamVjdCBvZiB0aGUgbWVzc2FnZVxuICAgICAgICAgICAgICAgIHN1YmplY3Q6IHN1YmplY3QgfHwgJycsXG4gICAgICAgICAgICAgICAgLy8gcGxhaW50ZXh0IGJvZHlcbiAgICAgICAgICAgICAgICB0ZXh0OiBjb250ZW50LFxuICAgICAgICAgICAgICAgIC8vIEhUTUwgYm9keVxuICAgICAgICAgICAgICAgIGh0bWw6IGh0bWwsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBhd2FpdCB0cmFuc3BvcnRlci5zZW5kTWFpbChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkVNQUlMX0VSUk9SLCBlcnIudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIG1vZHVsZTtcbn07XG4iXX0=
|
|
272
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1lbWFpbC5qcyJdLCJuYW1lcyI6WyJub2RlbWFpbGVyIiwicmVxdWlyZSIsImltYXBzIiwic2ltcGxlUGFyc2VyIiwiZXJySGVscGVyIiwiQVVUSF9USU1FT1VUIiwibW9kdWxlIiwiZXhwb3J0cyIsIl9jb25maWciLCJfc210cENvbmZpZyIsImlzSW5pdGlhbGl6ZWQiLCJ1bmRlZmluZWQiLCJpbml0IiwidXNlciIsInBhc3N3b3JkIiwiaG9zdCIsInBvcnQiLCJ0bHMiLCJhdXRoVGltZW91dCIsImVuYWJsZVNOSSIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJpbWFwIiwidXNlcm5hbWUiLCJ0bHNPcHRpb25zIiwic2VydmVybmFtZSIsImdldExhc3RFbWFpbCIsInNpbmNlTWludXRlcyIsInN1YmplY3QiLCJ0aW1lb3V0IiwibWFpbCIsIm5vdyIsIkRhdGUiLCJnZXRUaW1lIiwiZXJyIiwiY29ubmVjdGlvbiIsImNvbm5lY3QiLCJvcGVuQm94Iiwic3RhcnREYXRlIiwic2V0VGltZSIsInRvSVNPU3RyaW5nIiwic2VhcmNoQ3JpdGVyaWEiLCJmZXRjaE9wdGlvbnMiLCJib2RpZXMiLCJzdHJ1Y3QiLCJtYXJrU2VlbiIsInJlc3VsdHMiLCJzZWFyY2giLCJyZXN1bHQiLCJoZWFkZXJQYXJ0IiwiXyIsImZpbmQiLCJwYXJ0cyIsImJvZHlQYXJ0IiwiaWQiLCJhdHRyaWJ1dGVzIiwidWlkIiwiaWRIZWFkZXIiLCJzaW1wbGUiLCJib2R5IiwiYXR0YWNobWVudHMiLCJnZXRQYXJ0cyIsInBhcnQiLCJkaXNwb3NpdGlvbiIsInR5cGUiLCJ0b1VwcGVyQ2FzZSIsInBhcnREYXRhIiwiZ2V0UGFydERhdGEiLCJwdXNoIiwiZmlsZW5hbWUiLCJwYXJhbXMiLCJkYXRhIiwiaHRtbCIsInRleHRBc0h0bWwiLCJ0ZXh0IiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsInRvIiwiZnJvbSIsImRhdGUiLCJlIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkVNQUlMX0VSUk9SIiwidG9TdHJpbmciLCJUSU1FT1VUIiwic2VuZCIsImNvbnRlbnQiLCJ0cmFuc3BvcnRlciIsImNyZWF0ZVRyYW5zcG9ydCIsInNlY3VyZSIsImF1dGgiLCJwYXNzIiwic2VuZG1haWwiLCJsb2dnZXIiLCJ0cmFuc2FjdGlvbkxvZyIsImRlYnVnIiwibWVzc2FnZSIsInNlbmRNYWlsIl0sIm1hcHBpbmdzIjoiOzs7O0FBY0E7O0FBQ0E7O0FBQ0E7Ozs7QUFoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBLE1BQU1BLFVBQVUsR0FBR0MsT0FBTyxDQUFDLFlBQUQsQ0FBMUI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFyQjs7QUFDQSxNQUFNRSxZQUFZLEdBQUdGLE9BQU8sQ0FBQyxZQUFELENBQVAsQ0FBc0JFLFlBQTNDOztBQUVBLE1BQU1DLFNBQVMsR0FBR0gsT0FBTyxDQUFDLGtCQUFELENBQXpCOztBQUNBLE1BQU1JLFlBQVksR0FBRyxLQUFyQjs7QUFFQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFlBQVc7QUFDeEIsTUFBSUMsT0FBSjs7QUFDQSxNQUFJQyxXQUFKOztBQUVBSCxFQUFBQSxNQUFNLENBQUNJLGFBQVAsR0FBdUIsWUFBVztBQUM5QixXQUFPRixPQUFPLEtBQUtHLFNBQW5CO0FBQ0gsR0FGRDtBQUlBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJTCxFQUFBQSxNQUFNLENBQUNNLElBQVAsR0FBYyxVQUFTQyxJQUFULEVBQWVDLFFBQWYsRUFBeUJDLElBQXpCLEVBQStCQyxJQUEvQixFQUFxQ0MsR0FBckMsRUFBMENDLFdBQVcsR0FBR2IsWUFBeEQsRUFBc0VjLFNBQVMsR0FBR1IsU0FBbEYsRUFBNkY7QUFDdkdTLG1CQUFNQyw0QkFBTixDQUFtQ1IsSUFBbkMsRUFBeUMsTUFBekM7O0FBQ0FPLG1CQUFNQyw0QkFBTixDQUFtQ1AsUUFBbkMsRUFBNkMsVUFBN0M7O0FBQ0FNLG1CQUFNQyw0QkFBTixDQUFtQ04sSUFBbkMsRUFBeUMsTUFBekM7O0FBQ0FLLG1CQUFNRSwrQkFBTixDQUFzQ04sSUFBdEMsRUFBNEMsTUFBNUM7O0FBQ0FJLG1CQUFNRyxrQkFBTixDQUF5Qk4sR0FBekIsRUFBOEIsS0FBOUI7O0FBQ0FHLG1CQUFNRSwrQkFBTixDQUFzQ0osV0FBdEMsRUFBbUQsYUFBbkQ7O0FBRUFWLElBQUFBLE9BQU8sR0FBRztBQUNOZ0IsTUFBQUEsSUFBSSxFQUFFO0FBQ0ZYLFFBQUFBLElBQUksRUFBRUEsSUFESjtBQUVGQyxRQUFBQSxRQUFRLEVBQUVBLFFBRlI7QUFHRkMsUUFBQUEsSUFBSSxFQUFFQSxJQUhKO0FBSUZDLFFBQUFBLElBQUksRUFBRUEsSUFKSjtBQUtGQyxRQUFBQSxHQUFHLEVBQUVBLEdBTEg7QUFNRkMsUUFBQUEsV0FBVyxFQUFFQTtBQU5YO0FBREEsS0FBVjtBQVVBVCxJQUFBQSxXQUFXLEdBQUc7QUFDVmdCLE1BQUFBLFFBQVEsRUFBRVosSUFEQTtBQUVWQyxNQUFBQSxRQUZVO0FBR1ZDLE1BQUFBLElBQUksRUFBRUEsSUFISTtBQUlWQyxNQUFBQSxJQUpVO0FBS1ZDLE1BQUFBO0FBTFUsS0FBZCxDQWxCdUcsQ0EwQnZHOztBQUNBLFFBQUlFLFNBQVMsSUFBSUosSUFBSSxLQUFLLGdCQUExQixFQUE0QztBQUN4Q1AsTUFBQUEsT0FBTyxDQUFDZ0IsSUFBUixDQUFhRSxVQUFiLEdBQTBCO0FBQUVDLFFBQUFBLFVBQVUsRUFBRVo7QUFBZCxPQUExQjtBQUNIO0FBQ0osR0E5QkQ7QUFnQ0E7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lULEVBQUFBLE1BQU0sQ0FBQ3NCLFlBQVAsR0FBc0IsZ0JBQWVDLFlBQWYsRUFBNkJDLE9BQTdCLEVBQXNDQyxPQUF0QyxFQUErQztBQUNqRVgsbUJBQU1FLCtCQUFOLENBQXNDTyxZQUF0QyxFQUFvRCxjQUFwRDs7QUFDQVQsbUJBQU1FLCtCQUFOLENBQXNDUyxPQUF0QyxFQUErQyxTQUEvQzs7QUFFQSxRQUFJQyxJQUFKO0FBQ0EsUUFBSUMsR0FBRyxHQUFJLElBQUlDLElBQUosRUFBRCxDQUFhQyxPQUFiLEVBQVY7QUFDQSxRQUFJQyxHQUFKOztBQUVBLFdBQU8sQ0FBQ0EsR0FBRCxJQUFRLENBQUNKLElBQVQsSUFBbUIsSUFBSUUsSUFBSixFQUFELENBQWFDLE9BQWIsS0FBeUJGLEdBQTFCLEdBQWlDRixPQUF6RCxFQUFrRTtBQUM5RCxVQUFJO0FBQ0EsY0FBTU0sVUFBVSxHQUFHLE1BQU1uQyxLQUFLLENBQUNvQyxPQUFOLENBQWM5QixPQUFkLENBQXpCO0FBQ0EsY0FBTTZCLFVBQVUsQ0FBQ0UsT0FBWCxDQUFtQixPQUFuQixDQUFOLENBRkEsQ0FJQTs7QUFDQSxZQUFJQyxTQUFTLEdBQUcsSUFBSU4sSUFBSixFQUFoQjtBQUNBTSxRQUFBQSxTQUFTLENBQUNDLE9BQVYsQ0FBa0JQLElBQUksQ0FBQ0QsR0FBTCxLQUFjSixZQUFZLEdBQUcsRUFBZixHQUFvQixJQUFwRDtBQUNBVyxRQUFBQSxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0UsV0FBVixFQUFaO0FBQ0EsWUFBSUMsY0FBYyxHQUFHLENBQUMsUUFBRCxFQUFXLENBQUMsT0FBRCxFQUFVSCxTQUFWLENBQVgsQ0FBckIsQ0FSQSxDQVVBOztBQUNBLFlBQUlJLFlBQVksR0FBRztBQUNmQyxVQUFBQSxNQUFNLEVBQUUsQ0FBQyxzQ0FBRCxFQUF5QyxNQUF6QyxDQURPO0FBRWZDLFVBQUFBLE1BQU0sRUFBRSxJQUZPO0FBR2ZDLFVBQUFBLFFBQVEsRUFBRTtBQUhLLFNBQW5CO0FBTUEsY0FBTUMsT0FBTyxHQUFHLE1BQU1YLFVBQVUsQ0FBQ1ksTUFBWCxDQUFrQk4sY0FBbEIsRUFBa0NDLFlBQWxDLENBQXRCOztBQUVBLGFBQUssSUFBSU0sTUFBVCxJQUFtQkYsT0FBbkIsRUFBNEI7QUFDeEIsZ0JBQU1HLFVBQVUsR0FBR0MsZ0JBQUVDLElBQUYsQ0FBT0gsTUFBTSxDQUFDSSxLQUFkLEVBQXFCO0FBQUUscUJBQVNWLFlBQVksQ0FBQ0MsTUFBYixDQUFvQixDQUFwQjtBQUFYLFdBQXJCLENBQW5COztBQUNBLGdCQUFNVSxRQUFRLEdBQUdILGdCQUFFQyxJQUFGLENBQU9ILE1BQU0sQ0FBQ0ksS0FBZCxFQUFxQjtBQUFFLHFCQUFTVixZQUFZLENBQUNDLE1BQWIsQ0FBb0IsQ0FBcEI7QUFBWCxXQUFyQixDQUFqQjs7QUFFQSxnQkFBTVcsRUFBRSxHQUFHTixNQUFNLENBQUNPLFVBQVAsQ0FBa0JDLEdBQTdCO0FBQ0EsZ0JBQU1DLFFBQVEsR0FBRyxjQUFZSCxFQUFaLEdBQWUsTUFBaEM7QUFDQSxnQkFBTUksTUFBTSxHQUFHLE1BQU16RCxZQUFZLENBQUN3RCxRQUFRLEdBQUNKLFFBQVEsQ0FBQ00sSUFBbkIsQ0FBakM7QUFDQSxnQkFBTUMsV0FBVyxHQUFHLEVBQXBCO0FBQ0EsZ0JBQU1SLEtBQUssR0FBR3BELEtBQUssQ0FBQzZELFFBQU4sQ0FBZWIsTUFBTSxDQUFDTyxVQUFQLENBQWtCWCxNQUFqQyxDQUFkOztBQUVBLGVBQUssTUFBTWtCLElBQVgsSUFBbUJWLEtBQW5CLEVBQTBCO0FBQ3RCLGdCQUFJVSxJQUFJLENBQUNDLFdBQUwsSUFBb0JELElBQUksQ0FBQ0MsV0FBTCxDQUFpQkMsSUFBakIsQ0FBc0JDLFdBQXRCLE9BQXdDLFlBQWhFLEVBQThFO0FBQzFFLG9CQUFNQyxRQUFRLEdBQUcsTUFBTS9CLFVBQVUsQ0FBQ2dDLFdBQVgsQ0FBdUJuQixNQUF2QixFQUErQmMsSUFBL0IsQ0FBdkI7QUFDQUYsY0FBQUEsV0FBVyxDQUFDUSxJQUFaLENBQWlCO0FBQ2JDLGdCQUFBQSxRQUFRLEVBQUVQLElBQUksQ0FBQ0MsV0FBTCxDQUFpQk8sTUFBakIsQ0FBd0JELFFBRHJCO0FBRWJFLGdCQUFBQSxJQUFJLEVBQUVMO0FBRk8sZUFBakI7QUFJSDtBQUNKOztBQUVELGNBQUlQLElBQUo7QUFDQSxjQUFJYSxJQUFKO0FBQ0EsY0FBSUMsVUFBSjs7QUFDQSxjQUFJZixNQUFNLENBQUNjLElBQVAsSUFBZWQsTUFBTSxDQUFDZ0IsSUFBdEIsSUFBOEJoQixNQUFNLENBQUNlLFVBQXpDLEVBQXFEO0FBQ2pEO0FBQ0FkLFlBQUFBLElBQUksR0FBR04sUUFBUSxDQUFDcUIsSUFBaEI7QUFDQUYsWUFBQUEsSUFBSSxHQUFHZCxNQUFNLENBQUNjLElBQWQ7QUFDQUMsWUFBQUEsVUFBVSxHQUFHZixNQUFNLENBQUNlLFVBQXBCO0FBQ0gsV0FMRCxNQUtPO0FBQ0g7QUFDQWQsWUFBQUEsSUFBSSxHQUFHTixRQUFRLENBQUNNLElBQWhCO0FBQ0g7O0FBRUQsY0FBSVYsVUFBSixFQUFnQjtBQUNaLGdCQUNJckIsT0FBTyxLQUNGQSxPQUFPLENBQUMrQyxXQUFSLENBQW9CQyxJQUFwQixLQUE2QixRQUE3QixJQUF5Q2hELE9BQU8sQ0FBQ2lELElBQVIsQ0FBYTVCLFVBQVUsQ0FBQ1UsSUFBWCxDQUFnQi9CLE9BQWhCLENBQXdCLENBQXhCLENBQWIsQ0FBMUMsSUFDQ0EsT0FBTyxLQUFLcUIsVUFBVSxDQUFDVSxJQUFYLENBQWdCL0IsT0FBaEIsQ0FBd0IsQ0FBeEIsQ0FGVixDQURYLEVBS0U7QUFDRSxrQkFBSWtELEVBQUUsR0FBRzdCLFVBQVUsQ0FBQ1UsSUFBWCxDQUFnQm1CLEVBQWhCLEdBQXFCN0IsVUFBVSxDQUFDVSxJQUFYLENBQWdCbUIsRUFBaEIsQ0FBbUIsQ0FBbkIsQ0FBckIsR0FBNkMsSUFBdEQ7QUFFQWhELGNBQUFBLElBQUksR0FBRztBQUNIaUQsZ0JBQUFBLElBQUksRUFBRTlCLFVBQVUsQ0FBQ1UsSUFBWCxDQUFnQm9CLElBQWhCLENBQXFCLENBQXJCLENBREg7QUFFSEQsZ0JBQUFBLEVBQUUsRUFBRUEsRUFGRDtBQUdIbEQsZ0JBQUFBLE9BQU8sRUFBRXFCLFVBQVUsQ0FBQ1UsSUFBWCxDQUFnQi9CLE9BQWhCLENBQXdCLENBQXhCLENBSE47QUFJSG9ELGdCQUFBQSxJQUFJLEVBQUUvQixVQUFVLENBQUNVLElBQVgsQ0FBZ0JxQixJQUFoQixDQUFxQixDQUFyQixDQUpIO0FBS0hyQixnQkFBQUEsSUFBSSxFQUFFQSxJQUxIO0FBTUhDLGdCQUFBQSxXQUFXLEVBQUVBLFdBTlY7QUFPSGEsZ0JBQUFBLFVBQVUsRUFBRUEsVUFQVDtBQVFIRCxnQkFBQUEsSUFBSSxFQUFFQTtBQVJILGVBQVA7QUFVSDtBQUNKO0FBQ0o7QUFDSixPQTFFRCxDQTBFRSxPQUFPUyxDQUFQLEVBQVU7QUFDUi9DLFFBQUFBLEdBQUcsR0FBRytDLENBQU47QUFDSDtBQUNKOztBQUVELFFBQUkvQyxHQUFKLEVBQVM7QUFDTCxZQUFNLElBQUlnRCxvQkFBSixDQUFZaEYsU0FBUyxDQUFDaUYsU0FBVixDQUFvQkMsV0FBaEMsRUFBNkNsRCxHQUFHLENBQUNtRCxRQUFKLEVBQTdDLENBQU47QUFDSCxLQUZELE1BRU8sSUFBSSxDQUFDdkQsSUFBTCxFQUFXO0FBQ2QsWUFBTSxJQUFJb0Qsb0JBQUosQ0FBWWhGLFNBQVMsQ0FBQ2lGLFNBQVYsQ0FBb0JHLE9BQWhDLEVBQXlDLGtDQUFrQ3pELE9BQWxDLEdBQTRDLE1BQXJGLENBQU47QUFDSDs7QUFFRCxXQUFPQyxJQUFQO0FBQ0gsR0EvRkQ7QUFpR0E7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0kxQixFQUFBQSxNQUFNLENBQUNtRixJQUFQLEdBQWMsZ0JBQWVULEVBQWYsRUFBbUJsRCxPQUFuQixFQUE0QjRELE9BQTVCLEVBQXFDaEIsSUFBSSxHQUFHL0QsU0FBNUMsRUFBdUQ7QUFDakUsUUFBSXlCLEdBQUcsR0FBR3pCLFNBQVY7O0FBQ0EsUUFBSTtBQUNBO0FBQ0EsWUFBTWdGLFdBQVcsR0FBRzNGLFVBQVUsQ0FBQzRGLGVBQVgsQ0FBMkI7QUFDM0M3RSxRQUFBQSxJQUFJLEVBQUVOLFdBQVcsQ0FBQ00sSUFEeUI7QUFFM0NDLFFBQUFBLElBQUksRUFBRVAsV0FBVyxDQUFDTyxJQUZ5QjtBQUczQzZFLFFBQUFBLE1BQU0sRUFBRXBGLFdBQVcsQ0FBQ1EsR0FIdUI7QUFJM0M2RSxRQUFBQSxJQUFJLEVBQUU7QUFDRmpGLFVBQUFBLElBQUksRUFBRUosV0FBVyxDQUFDZ0IsUUFEaEI7QUFFRnNFLFVBQUFBLElBQUksRUFBRXRGLFdBQVcsQ0FBQ0s7QUFGaEIsU0FKcUM7QUFRM0NrRixRQUFBQSxRQUFRLEVBQUUsS0FSaUM7QUFTM0NDLFFBQUFBLE1BQU0sRUFBRSxLQVRtQztBQVUzQ0MsUUFBQUEsY0FBYyxFQUFFLEtBVjJCO0FBVzNDQyxRQUFBQSxLQUFLLEVBQUU7QUFYb0MsT0FBM0IsQ0FBcEIsQ0FGQSxDQWdCQTs7QUFDQSxZQUFNQyxPQUFPLEdBQUc7QUFDWnBCLFFBQUFBLEVBQUUsRUFBRUEsRUFEUTtBQUVaO0FBQ0FsRCxRQUFBQSxPQUFPLEVBQUVBLE9BQU8sSUFBSSxFQUhSO0FBSVo7QUFDQThDLFFBQUFBLElBQUksRUFBRWMsT0FMTTtBQU1aO0FBQ0FoQixRQUFBQSxJQUFJLEVBQUVBO0FBUE0sT0FBaEI7QUFVQSxZQUFNaUIsV0FBVyxDQUFDVSxRQUFaLENBQXFCRCxPQUFyQixDQUFOO0FBQ0gsS0E1QkQsQ0E2QkEsT0FBT2pCLENBQVAsRUFBVTtBQUNOL0MsTUFBQUEsR0FBRyxHQUFHK0MsQ0FBTjtBQUNIOztBQUNELFFBQUkvQyxHQUFKLEVBQVM7QUFDTCxZQUFNLElBQUlnRCxvQkFBSixDQUFZaEYsU0FBUyxDQUFDaUYsU0FBVixDQUFvQkMsV0FBaEMsRUFBNkNsRCxHQUFHLENBQUNtRCxRQUFKLEVBQTdDLENBQU47QUFDSDtBQUNKLEdBckNEOztBQXVDQSxTQUFPakYsTUFBUDtBQUNILENBcE9EIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgZW1haWxcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBlbWFpbCB2aWEgSU1BUC5cclxuICovXHJcblxyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmNvbnN0IG5vZGVtYWlsZXIgPSByZXF1aXJlKCdub2RlbWFpbGVyJyk7XHJcbmNvbnN0IGltYXBzID0gcmVxdWlyZSgnaW1hcC1zaW1wbGUnKTtcclxuY29uc3Qgc2ltcGxlUGFyc2VyID0gcmVxdWlyZSgnbWFpbHBhcnNlcicpLnNpbXBsZVBhcnNlcjtcclxuXHJcbmNvbnN0IGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuY29uc3QgQVVUSF9USU1FT1VUID0gMzAwMDA7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIF9jb25maWc7XHJcbiAgICB2YXIgX3NtdHBDb25maWc7XHJcblxyXG4gICAgbW9kdWxlLmlzSW5pdGlhbGl6ZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gX2NvbmZpZyAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldCBlbWFpbCBjb25uZWN0aW9uIGRldGFpbHMuXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVzZXIgLSBVc2VybmFtZSAoZS5nLiAneW91ckBlbWFpbC5hZGRyZXNzJykuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGFzc3dvcmQgLSBQYXNzd29yZC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBob3N0IC0gSG9zdCBuYW1lIChlLmcuICdpbWFwLmdtYWlsLmNvbScpLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHBvcnQgLSBQb3J0IG51bWJlciAoZS5nLiA5OTMpLlxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSB0bHMgLSB0cnVlIHRvIHVzZSBUTFMsIGZhbHNlIG90aGVyd2lzZS5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gYXV0aFRpbWVvdXQgLSBBdXRoZW50aWNhdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbj19IGVuYWJsZVNOSSAtIEVuYWJsZSBzZW5kaW5nIFNOSSB3aGVuIGVzdGFibGlzaGluZyB0aGUgY29ubmVjdGlvbi4gVGhpcyBpcyByZXF1aXJlZCBmb3Igc29tZSBtYWlsIHNlcnZlcnMuIERlZmF1bHQgaXMgZmFsc2UuIFxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuaW5pdCA9IGZ1bmN0aW9uKHVzZXIsIHBhc3N3b3JkLCBob3N0LCBwb3J0LCB0bHMsIGF1dGhUaW1lb3V0ID0gQVVUSF9USU1FT1VULCBlbmFibGVTTkkgPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKHVzZXIsICd1c2VyJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhwYXNzd29yZCwgJ3Bhc3N3b3JkJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhob3N0LCAnaG9zdCcpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUocG9ydCwgJ3BvcnQnKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudEJvb2wodGxzLCAndGxzJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShhdXRoVGltZW91dCwgJ2F1dGhUaW1lb3V0Jyk7XHJcblxyXG4gICAgICAgIF9jb25maWcgPSB7XHJcbiAgICAgICAgICAgIGltYXA6IHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXIsXHJcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgICBob3N0OiBob3N0LFxyXG4gICAgICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgICAgIHRsczogdGxzLFxyXG4gICAgICAgICAgICAgICAgYXV0aFRpbWVvdXQ6IGF1dGhUaW1lb3V0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIF9zbXRwQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB1c2VybmFtZTogdXNlcixcclxuICAgICAgICAgICAgcGFzc3dvcmQsXHJcbiAgICAgICAgICAgIGhvc3Q6IGhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQsXHJcbiAgICAgICAgICAgIHRscyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBzZXQgc2VydmVybmFtZSBpZiBTTkkgaXMgZW5hYmxlZCBvciB3ZSBhcmUgdXNpbmcgR21haWxcclxuICAgICAgICBpZiAoZW5hYmxlU05JIHx8IGhvc3QgPT09ICdpbWFwLmdtYWlsLmNvbScpIHtcclxuICAgICAgICAgICAgX2NvbmZpZy5pbWFwLnRsc09wdGlvbnMgPSB7IHNlcnZlcm5hbWU6IGhvc3QgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0cmlldmVzIGxhc3QgdW5zZWVuIGVtYWlsLlxyXG4gICAgICogQGZ1bmN0aW9uIGdldExhc3RFbWFpbFxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHNpbmNlTWludXRlcyAtIFNlYXJjaCBmb3IgZW1haWxzIHJlY2VpdmVkIHNpbmNlIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIG1pbnV0ZXMgaW50byBwYXN0LlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnZXh9IHN1YmplY3QgLSBSZXR1cm4gZW1haWwgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBzdWJqZWN0LlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHRpbWVvdXQgLSBUaW1lb3V0IChpbiBtaWxsaXNlY29uZHMpIGZvciB3YWl0aW5nIGZvciB0aGUgbWVzc2FnZSB0byBhcnJpdmUuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEVtYWlsIGJvZHksIHRleHQsIHRleHRBc0h0bWwsIGF0dGFjaG1lbnRzIGlmIGFueSwgYW5kIFRPLCBGUk9NLCBTVUJKRUNULCBEQVRFIGhlYWRlcnMuXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIGVtYWlsLmluaXQoJ1tZT1VSX0VNQUlMXUBnbWFpbC5jb20nLCAncGFzc3dvcmQnLCAnaW1hcC5nbWFpbC5jb20nLCA5OTMsIHRydWUsIDMwMDApO1xyXG4gICAgICogdmFyIG1haWwgPSBlbWFpbC5nZXRMYXN0RW1haWwoNjAsICdlbWFpbCBzdWJqZWN0JywgNTAwMCk7XHJcbiAgICAgKiBsb2cuaW5mbyhtYWlsKTtcclxuICAgICAqIFxyXG4gICAgICogaWYoci5hdHRhY2htZW50cyAmJiByLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICogXHRjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbiAgICAgKiBcdHIuYXR0YWNobWVudHMubWFwKChhdHRhY2htZW50KSA9PiB7XHJcbiAgICAgKiBcdFx0bGV0IGZpbGVEZXNjcmlwdG9yO1xyXG4gICAgICogXHRcdHRyeXtcclxuICAgICAqIFx0XHRcdGZpbGVEZXNjcmlwdG9yID0gZnMub3BlblN5bmMoYXR0YWNobWVudC5maWxlbmFtZSwgJ3cnKTtcclxuICAgICAqIFx0XHR9IGNhdGNoKGUpIHtcclxuICAgICAqIFx0XHRcdHRocm93ICdjb3VsZCBub3Qgb3BlbiBmaWxlOiAnICsgZTtcclxuICAgICAqIFx0XHR9XHJcbiAgICAgKiBcdFx0XHJcbiAgICAgKiBcdFx0dHJ5e1xyXG4gICAgICogXHRcdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlRGVzY3JpcHRvciwgYXR0YWNobWVudC5kYXRhKTtcclxuICAgICAqIFx0XHR9IGNhdGNoKGUpIHtcclxuICAgICAqIFx0XHRcdHRocm93ICdlcnJvciB3cml0aW5nIGZpbGU6ICcgKyBlO1xyXG4gICAgICogXHRcdH1cclxuICAgICAqIFx0XHRcclxuICAgICAqIFx0XHRmcy5jbG9zZVN5bmMoZmlsZURlc2NyaXB0b3IpO1xyXG4gICAgICogXHR9KTtcclxuICAgICAqIH1cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmdldExhc3RFbWFpbCA9IGFzeW5jIGZ1bmN0aW9uKHNpbmNlTWludXRlcywgc3ViamVjdCwgdGltZW91dCkge1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUoc2luY2VNaW51dGVzLCAnc2luY2VNaW51dGVzJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSh0aW1lb3V0LCAndGltZW91dCcpO1xyXG5cclxuICAgICAgICB2YXIgbWFpbDtcclxuICAgICAgICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcclxuICAgICAgICB2YXIgZXJyO1xyXG5cclxuICAgICAgICB3aGlsZSAoIWVyciAmJiAhbWFpbCAmJiAoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIG5vdykgPCB0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gYXdhaXQgaW1hcHMuY29ubmVjdChfY29uZmlnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ub3BlbkJveCgnSU5CT1gnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBmZXRjaCB1bnNlZW4gZW1haWxzIGZyb20gdGhlIGxhc3Qgc2luY2VNaW51dGVzXHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZS5zZXRUaW1lKERhdGUubm93KCkgLSAoc2luY2VNaW51dGVzICogNjAgKiAxMDAwKSk7XHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBzdGFydERhdGUudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hDcml0ZXJpYSA9IFsnVU5TRUVOJywgWydTSU5DRScsIHN0YXJ0RGF0ZV1dO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGZldGNoIGNlcnRhaW4gaGVhZGVycyBhbmQgc3RyaXBwZWQgZG93biBib2R5XHJcbiAgICAgICAgICAgICAgICB2YXIgZmV0Y2hPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZGllczogWydIRUFERVIuRklFTERTIChGUk9NIFRPIFNVQkpFQ1QgREFURSknLCAnVEVYVCddLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBtYXJrU2VlbjogZmFsc2VcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGNvbm5lY3Rpb24uc2VhcmNoKHNlYXJjaENyaXRlcmlhLCBmZXRjaE9wdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3VsdCBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyUGFydCA9IF8uZmluZChyZXN1bHQucGFydHMsIHsgJ3doaWNoJzogZmV0Y2hPcHRpb25zLmJvZGllc1swXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5UGFydCA9IF8uZmluZChyZXN1bHQucGFydHMsIHsgJ3doaWNoJzogZmV0Y2hPcHRpb25zLmJvZGllc1sxXSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSByZXN1bHQuYXR0cmlidXRlcy51aWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRIZWFkZXIgPSAnSW1hcC1JZDogJytpZCsnXFxyXFxuJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaW1wbGUgPSBhd2FpdCBzaW1wbGVQYXJzZXIoaWRIZWFkZXIrYm9keVBhcnQuYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGltYXBzLmdldFBhcnRzKHJlc3VsdC5hdHRyaWJ1dGVzLnN0cnVjdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydC5kaXNwb3NpdGlvbiAmJiBwYXJ0LmRpc3Bvc2l0aW9uLnR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0FUVEFDSE1FTlQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0RGF0YSA9IGF3YWl0IGNvbm5lY3Rpb24uZ2V0UGFydERhdGEocmVzdWx0LCBwYXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBwYXJ0LmRpc3Bvc2l0aW9uLnBhcmFtcy5maWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXJ0RGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBodG1sO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0QXNIdG1sO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaW1wbGUuaHRtbCB8fCBzaW1wbGUudGV4dCB8fCBzaW1wbGUudGV4dEFzSHRtbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZWQgc3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gYm9keVBhcnQudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IHNpbXBsZS5odG1sO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QXNIdG1sID0gc2ltcGxlLnRleHRBc0h0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2VkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBib2R5UGFydC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlclBhcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdCAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YmplY3QuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgc3ViamVjdC50ZXN0KGhlYWRlclBhcnQuYm9keS5zdWJqZWN0WzBdKSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3ViamVjdCA9PT0gaGVhZGVyUGFydC5ib2R5LnN1YmplY3RbMF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvID0gaGVhZGVyUGFydC5ib2R5LnRvID8gaGVhZGVyUGFydC5ib2R5LnRvWzBdIDogbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlsID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IGhlYWRlclBhcnQuYm9keS5mcm9tWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvOiB0byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0OiBoZWFkZXJQYXJ0LmJvZHkuc3ViamVjdFswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBoZWFkZXJQYXJ0LmJvZHkuZGF0ZVswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBib2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBhdHRhY2htZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QXNIdG1sOiB0ZXh0QXNIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IGh0bWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGVyciA9IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTUFJTF9FUlJPUiwgZXJyLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIW1haWwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCBcIkNvdWxkbid0IGdldCBhbiBlbWFpbCB3aXRoaW4gXCIgKyB0aW1lb3V0ICsgJyBtcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYWlsO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNlbmQgZW1haWwgdXNpbmcgU01UUC5cclxuICAgICAqIEBmdW5jdGlvbiBzZW5kXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gdG8gLSBSZWNlaXZlcidzIGVtYWlsIGFkZHJlc3MuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3ViamVjdCAtIEVtYWlsIHN1YmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudCAtIEVtYWlsIGJvZHkgYXMgYSBwbGFpbiB0ZXh0LlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBodG1sIC0gT3B0aW9uYWwsIEVtYWlsIGJvZHkgYXMgSFRNTC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLnNlbmQgPSBhc3luYyBmdW5jdGlvbih0bywgc3ViamVjdCwgY29udGVudCwgaHRtbCA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGxldCBlcnIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgU01UUCB0cmFuc3BvcnRlciBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgdHJhbnNwb3J0ZXIgPSBub2RlbWFpbGVyLmNyZWF0ZVRyYW5zcG9ydCh7XHJcbiAgICAgICAgICAgICAgICBob3N0OiBfc210cENvbmZpZy5ob3N0LFxyXG4gICAgICAgICAgICAgICAgcG9ydDogX3NtdHBDb25maWcucG9ydCxcclxuICAgICAgICAgICAgICAgIHNlY3VyZTogX3NtdHBDb25maWcudGxzLFxyXG4gICAgICAgICAgICAgICAgYXV0aDoge1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXI6IF9zbXRwQ29uZmlnLnVzZXJuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3M6IF9zbXRwQ29uZmlnLnBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNlbmRtYWlsOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGxvZ2dlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbkxvZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBkZWJ1ZzogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gTWVzc2FnZSBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHtcclxuICAgICAgICAgICAgICAgIHRvOiB0byxcclxuICAgICAgICAgICAgICAgIC8vIFN1YmplY3Qgb2YgdGhlIG1lc3NhZ2VcclxuICAgICAgICAgICAgICAgIHN1YmplY3Q6IHN1YmplY3QgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAvLyBwbGFpbnRleHQgYm9keVxyXG4gICAgICAgICAgICAgICAgdGV4dDogY29udGVudCxcclxuICAgICAgICAgICAgICAgIC8vIEhUTUwgYm9keVxyXG4gICAgICAgICAgICAgICAgaHRtbDogaHRtbCxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGF3YWl0IHRyYW5zcG9ydGVyLnNlbmRNYWlsKG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBlcnIgPSBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRU1BSUxfRVJST1IsIGVyci50b1N0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdfQ==
|