oxygen-cli 1.40.1-beta.1 → 1.40.1
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 +1742 -1731
- 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/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-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 +25 -25
- 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 +56 -55
- 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 +137 -137
- 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
|
@@ -63,17 +63,19 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
63
63
|
async onLaunchStart({
|
|
64
64
|
options
|
|
65
65
|
}) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
})
|
|
66
|
+
try {
|
|
67
|
+
const {
|
|
68
|
+
tempId,
|
|
69
|
+
promise
|
|
70
|
+
} = this.rpClient.startLaunch({
|
|
71
|
+
mode: this.reporterOpts.mode || LAUNCH_MODES.DEFAULT,
|
|
72
|
+
debug: false
|
|
73
|
+
});
|
|
74
|
+
this.tempLaunchId = tempId;
|
|
75
|
+
await this.promiseWithTimeout(promise);
|
|
76
|
+
} catch (e) {
|
|
77
|
+
console.dir(`RP - Failed to start launch: ${e}`);
|
|
78
|
+
}
|
|
77
79
|
}
|
|
78
80
|
|
|
79
81
|
async onLaunchEnd({
|
|
@@ -81,13 +83,13 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
81
83
|
}) {
|
|
82
84
|
await this._reportEndOfStartedSuites();
|
|
83
85
|
const hasFailed = results.some(x => x.status === _status.default.FAILED);
|
|
84
|
-
const {
|
|
85
|
-
promise
|
|
86
|
-
} = await this.rpClient.finishLaunch(this.tempLaunchId, {
|
|
87
|
-
status: hasFailed ? 'FAILED' : 'PASSED'
|
|
88
|
-
});
|
|
89
86
|
|
|
90
87
|
try {
|
|
88
|
+
const {
|
|
89
|
+
promise
|
|
90
|
+
} = await this.rpClient.finishLaunch(this.tempLaunchId, {
|
|
91
|
+
status: hasFailed ? 'FAILED' : 'PASSED'
|
|
92
|
+
});
|
|
91
93
|
await this.promiseWithTimeout(promise);
|
|
92
94
|
} catch (e) {
|
|
93
95
|
console.dir(`RP - Failed to end launch: ${e}`);
|
|
@@ -122,13 +124,13 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
122
124
|
name: suiteDef.name || this.options.name,
|
|
123
125
|
type: TEST_ITEM_TYPES.SUITE
|
|
124
126
|
};
|
|
125
|
-
const {
|
|
126
|
-
tempId,
|
|
127
|
-
promise
|
|
128
|
-
} = this.rpClient.startTestItem(startTestItemReq, this.tempLaunchId);
|
|
129
|
-
this.cbSuiteToRpIdHash[suiteRefId] = tempId;
|
|
130
127
|
|
|
131
128
|
try {
|
|
129
|
+
const {
|
|
130
|
+
tempId,
|
|
131
|
+
promise
|
|
132
|
+
} = this.rpClient.startTestItem(startTestItemReq, this.tempLaunchId);
|
|
133
|
+
this.cbSuiteToRpIdHash[suiteRefId] = tempId;
|
|
132
134
|
await this.promiseWithTimeout(promise);
|
|
133
135
|
} catch (e) {
|
|
134
136
|
console.dir(`RP - Failed to start suite item: ${e}`);
|
|
@@ -162,13 +164,12 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
162
164
|
return;
|
|
163
165
|
}
|
|
164
166
|
|
|
165
|
-
const {
|
|
166
|
-
tempId,
|
|
167
|
-
promise
|
|
168
|
-
} = this.rpClient.startTestItem(startTestItemReq, this.tempLaunchId, rpSuiteId);
|
|
169
|
-
this.cbCaseToRpIdHash[caseId] = tempId;
|
|
170
|
-
|
|
171
167
|
try {
|
|
168
|
+
const {
|
|
169
|
+
tempId,
|
|
170
|
+
promise
|
|
171
|
+
} = this.rpClient.startTestItem(startTestItemReq, this.tempLaunchId, rpSuiteId);
|
|
172
|
+
this.cbCaseToRpIdHash[caseId] = tempId;
|
|
172
173
|
await this.promiseWithTimeout(promise);
|
|
173
174
|
} catch (e) {
|
|
174
175
|
console.dir(`RP - Failed to start test item: ${e}`);
|
|
@@ -204,11 +205,11 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
204
205
|
message: logMsg,
|
|
205
206
|
level: 'error'
|
|
206
207
|
};
|
|
207
|
-
const {
|
|
208
|
-
promise
|
|
209
|
-
} = this.rpClient.sendLog(rpTestId, logReq, rpFile);
|
|
210
208
|
|
|
211
209
|
try {
|
|
210
|
+
const {
|
|
211
|
+
promise
|
|
212
|
+
} = this.rpClient.sendLog(rpTestId, logReq, rpFile);
|
|
212
213
|
await this.promiseWithTimeout(promise);
|
|
213
214
|
} catch (e) {
|
|
214
215
|
console.dir(`RP - Failed to send log for finished test item: ${e}`);
|
|
@@ -219,11 +220,11 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
219
220
|
const finishTestItemReq = {
|
|
220
221
|
status: result.status.toLowerCase()
|
|
221
222
|
};
|
|
222
|
-
const {
|
|
223
|
-
promise
|
|
224
|
-
} = this.rpClient.finishTestItem(rpTestId, finishTestItemReq);
|
|
225
223
|
|
|
226
224
|
try {
|
|
225
|
+
const {
|
|
226
|
+
promise
|
|
227
|
+
} = this.rpClient.finishTestItem(rpTestId, finishTestItemReq);
|
|
227
228
|
await this.promiseWithTimeout(promise);
|
|
228
229
|
} catch (e) {
|
|
229
230
|
console.dir(`RP - Failed to finish test item: ${e}`);
|
|
@@ -271,13 +272,13 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
271
272
|
testCaseId: rpCaseId,
|
|
272
273
|
hasStats: false
|
|
273
274
|
};
|
|
274
|
-
const {
|
|
275
|
-
tempId,
|
|
276
|
-
promise
|
|
277
|
-
} = this.rpClient.startTestItem(startTestItemReq, this.tempLaunchId, rpParentId);
|
|
278
|
-
this.cbStepToRpIdHash[step.id] = tempId;
|
|
279
275
|
|
|
280
276
|
try {
|
|
277
|
+
const {
|
|
278
|
+
tempId,
|
|
279
|
+
promise
|
|
280
|
+
} = this.rpClient.startTestItem(startTestItemReq, this.tempLaunchId, rpParentId);
|
|
281
|
+
this.cbStepToRpIdHash[step.id] = tempId;
|
|
281
282
|
await this.promiseWithTimeout(promise);
|
|
282
283
|
} catch (e) {
|
|
283
284
|
console.dir(`RP - Failed to start step item: ${e}`);
|
|
@@ -323,11 +324,11 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
323
324
|
level: 'error',
|
|
324
325
|
file: rpFile
|
|
325
326
|
};
|
|
326
|
-
const {
|
|
327
|
-
promise
|
|
328
|
-
} = this.rpClient.sendLog(rpStepId, logReq, rpFile);
|
|
329
327
|
|
|
330
328
|
try {
|
|
329
|
+
const {
|
|
330
|
+
promise
|
|
331
|
+
} = this.rpClient.sendLog(rpStepId, logReq, rpFile);
|
|
331
332
|
await this.promiseWithTimeout(promise);
|
|
332
333
|
} catch (e) {
|
|
333
334
|
console.dir(`RP - Failed to send log for finished test item: ${e}`);
|
|
@@ -338,11 +339,11 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
338
339
|
const finishTestItemReq = {
|
|
339
340
|
status: result.status.toLowerCase()
|
|
340
341
|
};
|
|
341
|
-
const {
|
|
342
|
-
promise
|
|
343
|
-
} = this.rpClient.finishTestItem(rpStepId, finishTestItemReq);
|
|
344
342
|
|
|
345
343
|
try {
|
|
344
|
+
const {
|
|
345
|
+
promise
|
|
346
|
+
} = this.rpClient.finishTestItem(rpStepId, finishTestItemReq);
|
|
346
347
|
await this.promiseWithTimeout(promise);
|
|
347
348
|
} catch (e) {
|
|
348
349
|
console.dir(`RP - Failed to finish step item: ${e}`);
|
|
@@ -378,11 +379,11 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
378
379
|
level: rpLevel,
|
|
379
380
|
time: time
|
|
380
381
|
};
|
|
381
|
-
const {
|
|
382
|
-
promise
|
|
383
|
-
} = this.rpClient.sendLog(rpParentId || this.tempLaunchId, logReq);
|
|
384
382
|
|
|
385
383
|
try {
|
|
384
|
+
const {
|
|
385
|
+
promise
|
|
386
|
+
} = this.rpClient.sendLog(rpParentId || this.tempLaunchId, logReq);
|
|
386
387
|
await this.promiseWithTimeout(promise);
|
|
387
388
|
} catch (e) {
|
|
388
389
|
console.dir(`RP - Failed to create log item: ${e}`);
|
|
@@ -440,11 +441,11 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
440
441
|
level: rpLevel,
|
|
441
442
|
time: time
|
|
442
443
|
};
|
|
443
|
-
const {
|
|
444
|
-
promise
|
|
445
|
-
} = this.rpClient.sendLog(rpParentId || this.tempLaunchId, logReq);
|
|
446
444
|
|
|
447
445
|
try {
|
|
446
|
+
const {
|
|
447
|
+
promise
|
|
448
|
+
} = this.rpClient.sendLog(rpParentId || this.tempLaunchId, logReq);
|
|
448
449
|
await this.promiseWithTimeout(promise);
|
|
449
450
|
} catch (e) {
|
|
450
451
|
console.dir(`RP - Failed to create log item: ${e}`);
|
|
@@ -461,11 +462,11 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
461
462
|
const finishTestItemReq = {
|
|
462
463
|
status: hasFailedSuite ? 'failed' : 'passed'
|
|
463
464
|
};
|
|
464
|
-
const {
|
|
465
|
-
promise
|
|
466
|
-
} = this.rpClient.finishTestItem(rpSuiteId, finishTestItemReq);
|
|
467
465
|
|
|
468
466
|
try {
|
|
467
|
+
const {
|
|
468
|
+
promise
|
|
469
|
+
} = this.rpClient.finishTestItem(rpSuiteId, finishTestItemReq);
|
|
469
470
|
await this.promiseWithTimeout(promise);
|
|
470
471
|
} catch (e) {
|
|
471
472
|
console.dir(`RP - Failed to finish suite item: ${e}`);
|
|
@@ -517,7 +518,7 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
517
518
|
}
|
|
518
519
|
}
|
|
519
520
|
|
|
520
|
-
promiseWithTimeout(promise, timeout =
|
|
521
|
+
promiseWithTimeout(promise, timeout = 30 * 1000) {
|
|
521
522
|
return new Promise((resolve, reject) => {
|
|
522
523
|
if (!promise || !promise.then) {
|
|
523
524
|
reject(new Error(`Promise await timeout of ${timeout} ms`));
|
|
@@ -531,4 +532,4 @@ class ReportPortalReporter extends _ReporterBase.default {
|
|
|
531
532
|
}
|
|
532
533
|
|
|
533
534
|
exports.default = ReportPortalReporter;
|
|
534
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9yZXBvcnRlcnMvcmVwb3J0ZXItcnAuanMiXSwibmFtZXMiOlsiUlBDbGllbnQiLCJyZXF1aXJlIiwiTEFVTkNIX01PREVTIiwiREVGQVVMVCIsIkRFQlVHIiwiVEVTVF9JVEVNX1RZUEVTIiwiU1VJVEUiLCJURVNUIiwiU1RFUCIsIk1BWF9OQU1FX0xFTkdUSCIsIlJlcG9ydFBvcnRhbFJlcG9ydGVyIiwiUmVwb3J0ZXJCYXNlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVwb3J0ZXJPcHRzIiwiYWdncmVnYXRvciIsInJwIiwicmVwb3J0U3RlcHMiLCJyZXBvcnRMb2dzIiwiY2JTdWl0ZVRvUnBJZEhhc2giLCJjYkNhc2VUb1JwSWRIYXNoIiwiY2JTdGVwVG9ScElkSGFzaCIsImNiU3VpdGVSZXN1bHRMaXN0QnlSZWZJZCIsImN1cnJlbnRUcmFuc2FjdGlvblN0ZXBJZCIsInVuZGVmaW5lZCIsImN1cnJlbnRTdWJTdGVwSWQiLCJhcGlLZXkiLCJlbmRwb2ludCIsInByb2plY3QiLCJFcnJvciIsInJwQ2xpZW50IiwibGF1bmNoIiwibmFtZSIsImluaXQiLCJjaGVja0Nvbm5lY3QiLCJlIiwibWVzc2FnZSIsImdlbmVyYXRlIiwicmVzdWx0cyIsIm9uTGF1bmNoU3RhcnQiLCJ0ZW1wSWQiLCJwcm9taXNlIiwic3RhcnRMYXVuY2giLCJtb2RlIiwiZGVidWciLCJ0ZW1wTGF1bmNoSWQiLCJ0aGVuIiwicmVzcG9uc2UiLCJlcnJvciIsImNvbnNvbGUiLCJkaXIiLCJvbkxhdW5jaEVuZCIsIl9yZXBvcnRFbmRPZlN0YXJ0ZWRTdWl0ZXMiLCJoYXNGYWlsZWQiLCJzb21lIiwieCIsInN0YXR1cyIsIlN0YXR1cyIsIkZBSUxFRCIsImZpbmlzaExhdW5jaCIsInByb21pc2VXaXRoVGltZW91dCIsIm9uUnVubmVyU3RhcnQiLCJyaWQiLCJvcHRzIiwiY2FwcyIsIm9uUnVubmVyRW5kIiwicmVzdWx0Iiwib25TdWl0ZVN0YXJ0Iiwic3VpdGVJZCIsInN1aXRlIiwic3VpdGVEZWYiLCJzdWl0ZVJlZklkIiwicmVmSWQiLCJzdGFydFRlc3RJdGVtUmVxIiwidHlwZSIsInN0YXJ0VGVzdEl0ZW0iLCJvblN1aXRlRW5kIiwicHVzaCIsIm9uQ2FzZVN0YXJ0IiwiY2FzZUlkIiwiY2FzZURlZiIsImNvZGVSZWYiLCJwYXRoIiwicnBTdWl0ZUlkIiwib25DYXNlRW5kIiwicnBUZXN0SWQiLCJ0b0xvd2VyQ2FzZSIsImZhaWx1cmUiLCJycEZpbGUiLCJzY3JlZW5zaG90IiwiY29udGVudCIsImxvZ01zZyIsIl9zdHJpbmdpZnkiLCJsb2dSZXEiLCJsZXZlbCIsInNlbmRMb2ciLCJmaW5pc2hUZXN0SXRlbVJlcSIsImZpbmlzaFRlc3RJdGVtIiwib25TdGVwU3RhcnQiLCJzdGVwIiwibW9kdWxlIiwicmVwb3J0TG9nU3RlcCIsInJwQ2FzZUlkIiwicnBQYXJlbnRJZCIsImlkIiwic3RlcE5hbWUiLCJfZ2V0U3RlcE5hbWUiLCJsb2NhdGlvbiIsInRlc3RDYXNlSWQiLCJoYXNTdGF0cyIsIm9uU3RlcEVuZCIsInN0YXJ0c1dpdGgiLCJycFN0ZXBJZCIsImZpbGUiLCJvbkxvZyIsInN0ZXBJZCIsIm1zZyIsInRpbWUiLCJzcmMiLCJycExldmVsIiwiX2dldFJwTGV2ZWwiLCJhcmdzIiwibGVuZ3RoIiwic2VuZFJwTG9nIiwiT2JqZWN0Iiwia2V5cyIsImhhc0ZhaWxlZFN1aXRlIiwib3hMZXZlbCIsInNpZ25hdHVyZSIsInN1YnN0cmluZyIsIlN0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0aW1lb3V0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzZXRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQTs7QUFDQTs7OztBQUNBLE1BQU1BLFFBQVEsR0FBR0MsT0FBTyxDQUFDLGdDQUFELENBQXhCOztBQUNBLE1BQU1DLFlBQVksR0FBRztBQUNqQkMsRUFBQUEsT0FBTyxFQUFFLFNBRFE7QUFFakJDLEVBQUFBLEtBQUssRUFB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QUdBLElBQUksQ0FBQ2lHLFNBQUwsQ0FBZSxDQUFmLEVBQWtCeEgsZUFBZSxHQUFDLENBQWxDLElBQXVDLEtBQTlDO0FBQ0g7O0FBQ0QsV0FBT3VCLElBQVA7QUFDSDs7QUFHRDRELEVBQUFBLFVBQVUsQ0FBQ3dCLEdBQUQsRUFBTTtBQUVaLFFBQUksT0FBT0EsR0FBUCxLQUFlLFdBQWYsSUFBOEJBLEdBQUcsS0FBSyxJQUExQyxFQUFnRDtBQUM1QyxhQUFPLElBQVA7QUFDSDs7QUFFRCxRQUFJLE9BQU9BLEdBQVAsS0FBZSxRQUFmLElBQTJCQSxHQUFHLFlBQVljLE1BQTlDLEVBQXNEO0FBQ2xELGFBQU9kLEdBQVA7QUFDSDs7QUFFRCxRQUFJO0FBQ0EsYUFBT2UsSUFBSSxDQUFDQyxTQUFMLENBQWVoQixHQUFmLENBQVA7QUFDSCxLQUZELENBRUUsT0FBT2pGLENBQVAsRUFBVTtBQUNSYyxNQUFBQSxPQUFPLENBQUNELEtBQVIsQ0FBYyx5REFBZDtBQUNIO0FBQ0o7O0FBRURZLEVBQUFBLGtCQUFrQixDQUFDbkIsT0FBRCxFQUFVNEYsT0FBTyxHQUFHLEtBQUssSUFBekIsRUFBK0I7QUFDN0MsV0FBTyxJQUFJQyxPQUFKLENBQVksQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3BDLFVBQUksQ0FBQy9GLE9BQUQsSUFBWSxDQUFDQSxPQUFPLENBQUNLLElBQXpCLEVBQStCO0FBQzNCMEYsUUFBQUEsTUFBTSxDQUFDLElBQUkzRyxLQUFKLENBQVcsNEJBQTJCd0csT0FBUSxLQUE5QyxDQUFELENBQU47QUFDSDs7QUFDRDVGLE1BQUFBLE9BQU8sQ0FBQ0ssSUFBUixDQUFheUYsT0FBYixFQUFzQkMsTUFBdEI7QUFDQUMsTUFBQUEsVUFBVSxDQUFDRCxNQUFELEVBQVNILE9BQVQsQ0FBVjtBQUNILEtBTk0sQ0FBUDtBQU9IOztBQWphMEQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICovXG5cbi8qXG4gKiBPeHlnZW4gUmVwb3J0ZXIgZm9yIFJlcG9ydFBvcnRhbFxuICovXG5pbXBvcnQgUmVwb3J0ZXJCYXNlIGZyb20gJy4uL3JlcG9ydGVyL1JlcG9ydGVyQmFzZSc7XG5pbXBvcnQgU3RhdHVzIGZyb20gJy4uL21vZGVsL3N0YXR1cyc7XG5jb25zdCBSUENsaWVudCA9IHJlcXVpcmUoJ0BveHlnZW5ocS9ycC1jbGllbnQtamF2YXNjcmlwdCcpO1xuY29uc3QgTEFVTkNIX01PREVTID0ge1xuICAgIERFRkFVTFQ6ICdERUZBVUxUJyxcbiAgICBERUJVRzogJ0RFQlVHJyxcbn07XG5jb25zdCBURVNUX0lURU1fVFlQRVMgPSB7XG4gICAgU1VJVEU6ICdTVUlURScsXG4gICAgVEVTVDogJ1RFU1QnLFxuICAgIFNURVA6ICdTVEVQJyxcbn07XG5jb25zdCBNQVhfTkFNRV9MRU5HVEggPSAxMjg7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcG9ydFBvcnRhbFJlcG9ydGVyIGV4dGVuZHMgUmVwb3J0ZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCByZXBvcnRlck9wdHMsIGFnZ3JlZ2F0b3IpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIHRoaXMucmVwb3J0ZXJPcHRzID0gcmVwb3J0ZXJPcHRzIHx8IG9wdGlvbnMucnA7XG4gICAgICAgIHRoaXMucmVwb3J0U3RlcHMgPSByZXBvcnRlck9wdHMucmVwb3J0U3RlcHMgfHwgdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXBvcnRMb2dzID0gcmVwb3J0ZXJPcHRzLnJlcG9ydExvZ3MgfHwgZmFsc2U7XG4gICAgICAgIHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2ggPSB7fTtcbiAgICAgICAgdGhpcy5jYkNhc2VUb1JwSWRIYXNoID0ge307XG4gICAgICAgIHRoaXMuY2JTdGVwVG9ScElkSGFzaCA9IHt9O1xuICAgICAgICB0aGlzLmNiU3VpdGVSZXN1bHRMaXN0QnlSZWZJZCA9IHt9O1xuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvblN0ZXBJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jdXJyZW50U3ViU3RlcElkID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5yZXBvcnRlck9wdHNcbiAgICAgICAgICAgIHx8ICF0aGlzLnJlcG9ydGVyT3B0cy5hcGlLZXlcbiAgICAgICAgICAgIHx8ICF0aGlzLnJlcG9ydGVyT3B0cy5lbmRwb2ludFxuICAgICAgICAgICAgfHwgIXRoaXMucmVwb3J0ZXJPcHRzLnByb2plY3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcG9ydFBvcnRhbCBvcHRpb25zIGFyZSBtaXNzaW5nIGluIG94eWdlbi5jb25mIGZpbGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZ2dyZWdhdG9yID0gYWdncmVnYXRvcjtcbiAgICAgICAgdGhpcy5ycENsaWVudCA9IG5ldyBSUENsaWVudCh7XG4gICAgICAgICAgICBsYXVuY2g6IHRoaXMucmVwb3J0ZXJPcHRzLmxhdW5jaCB8fCB0aGlzLm9wdGlvbnMubmFtZSxcbiAgICAgICAgICAgIC4uLnRoaXMucmVwb3J0ZXJPcHRzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXQoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJwQ2xpZW50LmNoZWNrQ29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJQIC0gRXJyb3IgY29ubmVjdGluZyB0byB0aGUgc2VydmVyOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBnZW5lcmF0ZShyZXN1bHRzKSB7XG4gICAgfVxuICAgIC8vIEV2ZW50c1xuICAgIGFzeW5jIG9uTGF1bmNoU3RhcnQoeyBvcHRpb25zIH0pIHtcbiAgICAgICAgY29uc3QgeyB0ZW1wSWQsIHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuc3RhcnRMYXVuY2goe1xuICAgICAgICAgICAgbW9kZTogdGhpcy5yZXBvcnRlck9wdHMubW9kZSB8fCBMQVVOQ0hfTU9ERVMuREVGQVVMVCxcbiAgICAgICAgICAgIGRlYnVnOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGVtcExhdW5jaElkID0gdGVtcElkO1xuICAgICAgICBwcm9taXNlLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRXJyb3IgYXQgdGhlIHN0YXJ0IG9mIGxhdW5jaDogJHtlcnJvcn1gKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIG9uTGF1bmNoRW5kKHsgcmVzdWx0cyB9KSB7XG4gICAgICAgIC8vIHJlcG9ydCB0aGUgZW5kIG9mIGFsbCBzdGFydGVkIHN1aXRlc1xuICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRFbmRPZlN0YXJ0ZWRTdWl0ZXMoKTtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGxhdW5jaCBzdGF0dXNcbiAgICAgICAgY29uc3QgaGFzRmFpbGVkID0gcmVzdWx0cy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpO1xuICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IGF3YWl0IHRoaXMucnBDbGllbnQuZmluaXNoTGF1bmNoKHRoaXMudGVtcExhdW5jaElkLCB7XG4gICAgICAgICAgICBzdGF0dXM6IGhhc0ZhaWxlZCA/ICdGQUlMRUQnIDogJ1BBU1NFRCdcbiAgICAgICAgfSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb21pc2VXaXRoVGltZW91dChwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIGVuZCBsYXVuY2g6ICR7ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvblJ1bm5lclN0YXJ0KHsgcmlkLCBvcHRzLCBjYXBzIH0pIHtcbiAgICB9XG4gICAgYXN5bmMgb25SdW5uZXJFbmQoeyByaWQsIHJlc3VsdCB9KSB7XG4gICAgfVxuICAgIGFzeW5jIG9uU3VpdGVTdGFydCh7IHJpZCwgc3VpdGVJZCwgc3VpdGU6IHN1aXRlRGVmIH0pIHtcbiAgICAgICAgLy8gaW4gcGFyYWxsZWwgdGVzdCBleGVjdXRpb24sIG9uU3VpdGVTdGFydCB3aWxsIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWUgc3VpdGUgXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBjYWxsIFwic3RhcnRUZXN0SXRlbVwiIHRoZSBzYW1lIHN1aXRlIG9ubHkgb25jZVxuICAgICAgICBjb25zdCBzdWl0ZVJlZklkID0gc3VpdGVEZWYucmVmSWQ7XG4gICAgICAgIGlmICh0aGlzLmNiU3VpdGVUb1JwSWRIYXNoW3N1aXRlUmVmSWRdKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXNzaWduIGVtcHR5IG9iamVjdCBhcyBhIGZvcm0gb2YgbXVsdGktdGhyZWFkIGxvY2ssXG4gICAgICAgIC8vIHNvIHRoZSBwYXJhbGxlbCBjYWxsIHRvIG9uU3VpdGVTdGFydCBmcm9tIHRoZSBuZXh0IHRocmVhZFxuICAgICAgICAvLyB3aWxsIG5vdCB0cnkgdG8gcHJvY2VlZCB3aXRoIHRoZSBjb2RlIGJlbG93XG4gICAgICAgIHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2hbc3VpdGVSZWZJZF0gPSB7fTtcbiAgICAgICAgdGhpcy5jYlN1aXRlUmVzdWx0TGlzdEJ5UmVmSWRbc3VpdGVSZWZJZF0gPSBbXTtcbiAgICAgICAgY29uc3Qgc3RhcnRUZXN0SXRlbVJlcSA9IHtcbiAgICAgICAgICAgIG5hbWU6IHN1aXRlRGVmLm5hbWUgfHwgdGhpcy5vcHRpb25zLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiBURVNUX0lURU1fVFlQRVMuU1VJVEUsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgdGVtcElkLCBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LnN0YXJ0VGVzdEl0ZW0oc3RhcnRUZXN0SXRlbVJlcSwgdGhpcy50ZW1wTGF1bmNoSWQpO1xuICAgICAgICB0aGlzLmNiU3VpdGVUb1JwSWRIYXNoW3N1aXRlUmVmSWRdID0gdGVtcElkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9taXNlV2l0aFRpbWVvdXQocHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBzdGFydCBzdWl0ZSBpdGVtOiAke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25TdWl0ZUVuZCh7IHJpZCwgc3VpdGVJZCwgcmVzdWx0IH0pIHtcbiAgICAgICAgY29uc3Qgc3VpdGVSZWZJZCA9IHJlc3VsdC5yZWZJZDtcbiAgICAgICAgdGhpcy5jYlN1aXRlUmVzdWx0TGlzdEJ5UmVmSWRbc3VpdGVSZWZJZF0gJiYgdGhpcy5jYlN1aXRlUmVzdWx0TGlzdEJ5UmVmSWRbc3VpdGVSZWZJZF0ucHVzaChyZXN1bHQpO1xuICAgIH1cbiAgICBhc3luYyBvbkNhc2VTdGFydCh7IHJpZCwgc3VpdGVJZCwgc3VpdGVSZWZJZCwgY2FzZUlkLCAnY2FzZSc6IGNhc2VEZWYgfSkge1xuICAgICAgICBjb25zdCBzdGFydFRlc3RJdGVtUmVxID0ge1xuICAgICAgICAgICAgbmFtZTogY2FzZURlZi5uYW1lLFxuICAgICAgICAgICAgdHlwZTogVEVTVF9JVEVNX1RZUEVTLlRFU1QsXG4gICAgICAgICAgICBjb2RlUmVmOiBjYXNlRGVmLnBhdGgsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJwU3VpdGVJZCA9IHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2hbc3VpdGVSZWZJZF07XG4gICAgICAgIGlmICghcnBTdWl0ZUlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB0ZW1wSWQsIHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuc3RhcnRUZXN0SXRlbShzdGFydFRlc3RJdGVtUmVxLCB0aGlzLnRlbXBMYXVuY2hJZCwgcnBTdWl0ZUlkKTtcbiAgICAgICAgdGhpcy5jYkNhc2VUb1JwSWRIYXNoW2Nhc2VJZF0gPSB0ZW1wSWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb21pc2VXaXRoVGltZW91dChwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIHN0YXJ0IHRlc3QgaXRlbTogJHtlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uQ2FzZUVuZCh7IHJpZCwgc3VpdGVJZCwgc3VpdGVSZWZJZCwgY2FzZUlkLCByZXN1bHQgfSkge1xuICAgICAgICBjb25zdCBycFRlc3RJZCA9IHRoaXMuY2JDYXNlVG9ScElkSGFzaFtjYXNlSWRdO1xuICAgICAgICBpZiAoIXJwVGVzdElkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzdWx0LnN0YXR1cy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoc3RhdHVzID09PSAnZmFpbGVkJyAmJiByZXN1bHQuZmFpbHVyZSkge1xuICAgICAgICAgICAgY29uc3QgcnBGaWxlID0gcmVzdWx0LnNjcmVlbnNob3QgP1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdzY3JlZW5zaG90JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW1hZ2UvcG5nJyxcbiAgICAgICAgICAgICAgICBjb250ZW50OiByZXN1bHQuc2NyZWVuc2hvdCxcbiAgICAgICAgICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGxvZ01zZyA9IHRoaXMuX3N0cmluZ2lmeShyZXN1bHQuZmFpbHVyZS5tZXNzYWdlKTtcbiAgICAgICAgICAgIGlmIChsb2dNc2cpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dSZXEgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGxvZ01zZyxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcidcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5zZW5kTG9nKHJwVGVzdElkLCBsb2dSZXEsIHJwRmlsZSk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb21pc2VXaXRoVGltZW91dChwcm9taXNlKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBzZW5kIGxvZyBmb3IgZmluaXNoZWQgdGVzdCBpdGVtOiAke2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbmlzaFRlc3RJdGVtUmVxID0ge1xuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5maW5pc2hUZXN0SXRlbShycFRlc3RJZCwgZmluaXNoVGVzdEl0ZW1SZXEpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9taXNlV2l0aFRpbWVvdXQocHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBmaW5pc2ggdGVzdCBpdGVtOiAke2V9YCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvblN0ZXBJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgYXN5bmMgb25TdGVwU3RhcnQoeyByaWQsIGNhc2VJZCwgc3RlcCB9KSB7XG4gICAgICAgIGlmICghdGhpcy5yZXBvcnRTdGVwcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwLm1vZHVsZSAmJiBzdGVwLm1vZHVsZSA9PT0gJ2xvZycpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0TG9nU3RlcChjYXNlSWQsIHN0ZXApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJwQ2FzZUlkID0gdGhpcy5jYkNhc2VUb1JwSWRIYXNoW2Nhc2VJZF07XG4gICAgICAgIGxldCBycFBhcmVudElkO1xuXG4gICAgICAgIGlmIChzdGVwLm5hbWUgPT09ICd0cmFuc2FjdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uU3RlcElkID0gc3RlcC5pZDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN1YlN0ZXBJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJwUGFyZW50SWQgPSBycENhc2VJZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN1YlN0ZXBJZCA9IHN0ZXAuaWQ7XG4gICAgICAgICAgICBycFBhcmVudElkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25TdGVwSWQgPyB0aGlzLmNiU3RlcFRvUnBJZEhhc2hbdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25TdGVwSWRdIDogcnBDYXNlSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJwUGFyZW50SWQgfHwgIXJwQ2FzZUlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcE5hbWUgPSB0aGlzLl9nZXRTdGVwTmFtZShzdGVwKTtcbiAgICAgICAgY29uc3Qgc3RhcnRUZXN0SXRlbVJlcSA9IHtcbiAgICAgICAgICAgIG5hbWU6IHN0ZXBOYW1lLFxuICAgICAgICAgICAgdHlwZTogVEVTVF9JVEVNX1RZUEVTLlNURVAsXG4gICAgICAgICAgICAvLyBcImNvZGVSZWZcIiArIFwicGFyYW1ldGVyc1wiIHVzZWQgYnkgUlAgbGliIHRvIGdlbmVyYXRlIHRlc3RDYXNlSWQgaWYgdGVzdENhc2VJZCBpcyBub3QgZGVmaW5lZFxuICAgICAgICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXBvcnRwb3J0YWwvY2xpZW50LWphdmFzY3JpcHQvYmxvYi80ODZlZjcwYzYzOGE5YTIzMjY3MjkwYzYyZGYxZmFmOTAwZjdkZjZhL2xpYi9yZXBvcnQtcG9ydGFsLWNsaWVudC5qcyNMNDk3XG4gICAgICAgICAgICAvLyB0aGlzIGlzIGRpc2FibGVkIGZvciBub3cuIG5vdCBzdXJlIGlmIGFjdHVhbGx5IG5lZWRlZC4uLlxuICAgICAgICAgICAgLy9wYXJhbWV0ZXJzOiB0aGlzLl9nZXRScEFyZ3Moc3RlcC5hcmdzKSxcbiAgICAgICAgICAgIGNvZGVSZWY6IHN0ZXAubG9jYXRpb24sXG4gICAgICAgICAgICB0ZXN0Q2FzZUlkOiBycENhc2VJZCxcbiAgICAgICAgICAgIGhhc1N0YXRzOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyB0ZW1wSWQsIHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuc3RhcnRUZXN0SXRlbShzdGFydFRlc3RJdGVtUmVxLCB0aGlzLnRlbXBMYXVuY2hJZCwgcnBQYXJlbnRJZCk7XG4gICAgICAgIHRoaXMuY2JTdGVwVG9ScElkSGFzaFtzdGVwLmlkXSA9IHRlbXBJZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvbWlzZVdpdGhUaW1lb3V0KHByb21pc2UpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmRpcihgUlAgLSBGYWlsZWQgdG8gc3RhcnQgc3RlcCBpdGVtOiAke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25TdGVwRW5kKHsgcmlkLCBzdGVwOiByZXN1bHQgfSkge1xuICAgICAgICBpZiAoIXRoaXMucmVwb3J0U3RlcHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0Lm5hbWUgJiYgcmVzdWx0Lm5hbWUuc3RhcnRzV2l0aCgnbG9nLicpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcnBTdGVwSWQgPSB0aGlzLmNiU3RlcFRvUnBJZEhhc2hbcmVzdWx0LmlkXTtcbiAgICAgICAgaWYgKCFycFN0ZXBJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQubmFtZSAhPT0gJ3RyYW5zYWN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3ViU3RlcElkID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3VsdC5zdGF0dXMudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2ZhaWxlZCcgJiYgcmVzdWx0LmZhaWx1cmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJwRmlsZSA9IHJlc3VsdC5zY3JlZW5zaG90ID9cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2NyZWVuc2hvdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICAgICAgY29udGVudDogcmVzdWx0LnNjcmVlbnNob3QsXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBjb25zdCBsb2dNc2cgPSB0aGlzLl9zdHJpbmdpZnkocmVzdWx0LmZhaWx1cmUubWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAobG9nTXNnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9nUmVxID0ge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBsb2dNc2csXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBmaWxlOiBycEZpbGUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuc2VuZExvZyhycFN0ZXBJZCwgbG9nUmVxLCBycEZpbGUpO1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9taXNlV2l0aFRpbWVvdXQocHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRpcihgUlAgLSBGYWlsZWQgdG8gc2VuZCBsb2cgZm9yIGZpbmlzaGVkIHRlc3QgaXRlbTogJHtlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaW5pc2hUZXN0SXRlbVJlcSA9IHtcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cy50b0xvd2VyQ2FzZSgpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuZmluaXNoVGVzdEl0ZW0ocnBTdGVwSWQsIGZpbmlzaFRlc3RJdGVtUmVxKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvbWlzZVdpdGhUaW1lb3V0KHByb21pc2UpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmRpcihgUlAgLSBGYWlsZWQgdG8gZmluaXNoIHN0ZXAgaXRlbTogJHtlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uTG9nKHsgc3VpdGVJZCwgY2FzZUlkLCBzdGVwSWQsIGxldmVsLCBtc2csIHRpbWUsIHNyYyB9KSB7XG4gICAgICAgIGlmICghdGhpcy5yZXBvcnRMb2dzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3h5Z2VuIG1pZ2h0IHN0YXJ0IGdlbmVyYXRpbmcgbG9ncyBiZWZvcmUgb25SdW5uZXJTdGFydCBldmVudCwgaWdub3JlIHRoZW1cbiAgICAgICAgaWYgKCF0aGlzLnRlbXBMYXVuY2hJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJwUGFyZW50SWQgPSBzdGVwSWQgP1xuICAgICAgICAgICAgdGhpcy5jYlN0ZXBUb1JwSWRIYXNoW3N0ZXBJZF1cbiAgICAgICAgICAgIDogY2FzZUlkID8gdGhpcy5jYkNhc2VUb1JwSWRIYXNoW2Nhc2VJZF1cbiAgICAgICAgICAgIDogc3VpdGVJZCA/IHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2hbc3VpdGVJZF1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBycExldmVsID0gdGhpcy5fZ2V0UnBMZXZlbChsZXZlbCk7XG5cbiAgICAgICAgY29uc3QgbG9nTXNnID0gdGhpcy5fc3RyaW5naWZ5KG1zZyk7XG4gICAgICAgIGlmIChsb2dNc2cpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ1JlcSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBsb2dNc2csXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJwTGV2ZWwsXG4gICAgICAgICAgICAgICAgdGltZTogdGltZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuc2VuZExvZyhycFBhcmVudElkIHx8IHRoaXMudGVtcExhdW5jaElkLCBsb2dSZXEpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb21pc2VXaXRoVGltZW91dChwcm9taXNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIGNyZWF0ZSBsb2cgaXRlbTogJHtlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJlcG9ydExvZ1N0ZXAoY2FzZUlkLCBzdGVwKSB7XG4gICAgICAgIGlmICghc3RlcC5hcmdzIHx8ICFzdGVwLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGV2ZWwgPSBzdGVwLm5hbWU7XG4gICAgICAgIGNvbnN0IG1zZyA9IHN0ZXAuYXJnc1swXTtcbiAgICAgICAgY29uc3QgdGltZSA9IHN0ZXAudGltZTtcbiAgICAgICAgbGV0IHN0ZXBJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN1YlN0ZXBJZCkge1xuICAgICAgICAgICAgc3RlcElkID0gdGhpcy5jdXJyZW50U3ViU3RlcElkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uU3RlcElkKSB7XG4gICAgICAgICAgICBzdGVwSWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvblN0ZXBJZDtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnNlbmRScExvZyh7IHN1aXRlSWQ6IHVuZGVmaW5lZCwgY2FzZUlkLCBzdGVwSWQsIGxldmVsLCBtc2csIHRpbWUgfSk7XG4gICAgfVxuICAgIGFzeW5jIHNlbmRScExvZyh7IHN1aXRlSWQsIGNhc2VJZCwgc3RlcElkLCBsZXZlbCwgbXNnLCB0aW1lIH0pIHtcbiAgICAgICAgLy8gT3h5Z2VuIG1pZ2h0IHN0YXJ0IGdlbmVyYXRpbmcgbG9ncyBiZWZvcmUgb25SdW5uZXJTdGFydCBldmVudCwgaWdub3JlIHRoZW1cbiAgICAgICAgaWYgKCF0aGlzLnRlbXBMYXVuY2hJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJwUGFyZW50SWQgPSBzdGVwSWQgP1xuICAgICAgICAgICAgdGhpcy5jYlN0ZXBUb1JwSWRIYXNoW3N0ZXBJZF1cbiAgICAgICAgICAgIDogY2FzZUlkID8gdGhpcy5jYkNhc2VUb1JwSWRIYXNoW2Nhc2VJZF1cbiAgICAgICAgICAgIDogc3VpdGVJZCA/IHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2hbc3VpdGVJZF1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBycExldmVsID0gdGhpcy5fZ2V0UnBMZXZlbChsZXZlbCk7XG5cbiAgICAgICAgY29uc3QgbG9nTXNnID0gdGhpcy5fc3RyaW5naWZ5KG1zZyk7XG4gICAgICAgIGlmIChsb2dNc2cpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ1JlcSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBsb2dNc2csXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJwTGV2ZWwsXG4gICAgICAgICAgICAgICAgdGltZTogdGltZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuc2VuZExvZyhycFBhcmVudElkIHx8IHRoaXMudGVtcExhdW5jaElkLCBsb2dSZXEpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb21pc2VXaXRoVGltZW91dChwcm9taXNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIGNyZWF0ZSBsb2cgaXRlbTogJHtlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIF9yZXBvcnRFbmRPZlN0YXJ0ZWRTdWl0ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc3VpdGVSZWZJZCBvZiBPYmplY3Qua2V5cyh0aGlzLmNiU3VpdGVUb1JwSWRIYXNoKSkge1xuICAgICAgICAgICAgY29uc3QgcnBTdWl0ZUlkID0gdGhpcy5jYlN1aXRlVG9ScElkSGFzaFtzdWl0ZVJlZklkXTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmNiU3VpdGVSZXN1bHRMaXN0QnlSZWZJZFtzdWl0ZVJlZklkXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNiU3VpdGVUb1JwSWRIYXNoW3N1aXRlUmVmSWRdO1xuICAgICAgICAgICAgY29uc3QgaGFzRmFpbGVkU3VpdGUgPSByZXN1bHRzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XG4gICAgICAgICAgICBjb25zdCBmaW5pc2hUZXN0SXRlbVJlcSA9IHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGhhc0ZhaWxlZFN1aXRlID8gJ2ZhaWxlZCcgOiAncGFzc2VkJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuZmluaXNoVGVzdEl0ZW0ocnBTdWl0ZUlkLCBmaW5pc2hUZXN0SXRlbVJlcSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvbWlzZVdpdGhUaW1lb3V0KHByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRpcihgUlAgLSBGYWlsZWQgdG8gZmluaXNoIHN1aXRlIGl0ZW06ICR7ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfZ2V0UnBMZXZlbChveExldmVsKSB7XG4gICAgICAgIGlmIChveExldmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gb3hMZXZlbC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnaW5mbyc7XG4gICAgfVxuICAgIC8qX2dldFJwQXJncyhjYkFyZ3MpIHtcbiAgICAgICAgaWYgKCFjYkFyZ3MgfHwgIWNiQXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcnBBcmdzID0gW107XG4gICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGNiQXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYXJnID0gY2JBcmdzW2ldO1xuICAgICAgICAgICAgbGV0IGFyZ1N0ciA9IHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IGFyZyBpbnN0YW5jZW9mIFN0cmluZyA/IGFyZyA6IEpTT04uc3RyaW5naWZ5KGFyZyk7XG4gICAgICAgICAgICBycEFyZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5OiBgYXJnJHtpfWAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ1N0clxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJwQXJncztcbiAgICB9Ki9cbiAgICBfZ2V0U3RlcE5hbWUoc3RlcCkge1xuICAgICAgICBsZXQgbmFtZTtcblxuICAgICAgICBpZiAoc3RlcC5uYW1lID09PSAndHJhbnNhY3Rpb24nICYmIHN0ZXAuYXJncy5sZW5ndGggPiAwKSB7ICAvLyBGSVhNRTogc3RlcHMgbmVlZCB0byBiZSBuZXN0ZWQgdW5kZXIgdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBuYW1lID0gc3RlcC5hcmdzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0ZXAuc2lnbmF0dXJlKSB7XG4gICAgICAgICAgICBuYW1lID0gc3RlcC5zaWduYXR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RlcC5tb2R1bGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGlzIHRoaXMgZXZlciByZWFjaGVkPyBcInN0ZXAuc2lnbmF0dXJlXCIgc2VlbXMgdG8gYWx3YXlzIGV4aXN0XG4gICAgICAgICAgICBuYW1lID0gYCR7c3RlcC5tb2R1bGV9LiR7c3RlcC5uYW1lfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuYW1lID0gc3RlcC5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWF4aW11bSBhbGxvd2VkIG5hbWUgbGVuZ3RoIGluIFJQIGlzIDEwMjQgYnl0ZXNcbiAgICAgICAgLy8gd2UgdHJ1bmNhdGUgaXQgZXZlbiBsb3dlciBzbyBpdCB3aWxsIGRpc3BsYXkgbmljZWx5XG4gICAgICAgIGlmIChuYW1lLmxlbmd0aCA+IE1BWF9OQU1FX0xFTkdUSCkge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIE1BWF9OQU1FX0xFTkdUSC0zKSArICcuLi4nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbnVsbCBpZiBtc2cgY2Fubm90IGJlIHN0cmluZ2lmaWVkLCBvciBzdHJpZ2lmaWVzIGl0IGlmIGl0J3Mgbm90IGEgc3RyaW5nIGFscmVhZHlcbiAgICBfc3RyaW5naWZ5KG1zZykge1xuICAgICAgICAvLyB3ZSB0ZXN0IGZvciB1bmRlZmluZWQgYW5kIG51bGwgZXhwbGljaXRseSBvbiBwdXJwb3NlIGJlY2F1c2Ugb3RoZXIgZmFsc3kgdmFsdWVzIChlLmcuIDApIGFyZSBva1xuICAgICAgICBpZiAodHlwZW9mIG1zZyA9PT0gJ3VuZGVmaW5lZCcgfHwgbXNnID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnc3RyaW5nJyB8fCBtc2cgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBtc2c7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG1zZyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JQIC0gZXJyb3Igc2VuZGluZyBsb2c6IG1zZyBvYmplY3QgY2Fubm90IGJlIHNlcmlhbGl6ZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb21pc2VXaXRoVGltZW91dChwcm9taXNlLCB0aW1lb3V0ID0gMTAgKiAxMDAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXByb21pc2UgfHwgIXByb21pc2UudGhlbikge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFByb21pc2UgYXdhaXQgdGltZW91dCBvZiAke3RpbWVvdXR9IG1zYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJlamVjdCwgdGltZW91dCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuIl19
|
|
535
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9yZXBvcnRlcnMvcmVwb3J0ZXItcnAuanMiXSwibmFtZXMiOlsiUlBDbGllbnQiLCJyZXF1aXJlIiwiTEFVTkNIX01PREVTIiwiREVGQVVMVCIsIkRFQlVHIiwiVEVTVF9JVEVNX1RZUEVTIiwiU1VJVEUiLCJURVNUIiwiU1RFUCIsIk1BWF9OQU1FX0xFTkdUSCIsIlJlcG9ydFBvcnRhbFJlcG9ydGVyIiwiUmVwb3J0ZXJCYXNlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVwb3J0ZXJPcHRzIiwiYWdncmVnYXRvciIsInJwIiwicmVwb3J0U3RlcHMiLCJyZXBvcnRMb2dzIiwiY2JTdWl0ZVRvUnBJZEhhc2giLCJjYkNhc2VUb1JwSWRIYXNoIiwiY2JTdGVwVG9ScElkSGFzaCIsImNiU3VpdGVSZXN1bHRMaXN0QnlSZWZJZCIsImN1cnJlbnRUcmFuc2FjdGlvblN0ZXBJZCIsInVuZGVmaW5lZCIsImN1cnJlbnRTdWJTdGVwSWQiLCJhcGlLZXkiLCJlbmRwb2ludCIsInByb2plY3QiLCJFcnJvciIsInJwQ2xpZW50IiwibGF1bmNoIiwibmFtZSIsImluaXQiLCJjaGVja0Nvbm5lY3QiLCJlIiwibWVzc2FnZSIsImdlbmVyYXRlIiwicmVzdWx0cyIsIm9uTGF1bmNoU3RhcnQiLCJ0ZW1wSWQiLCJwcm9taXNlIiwic3RhcnRMYXVuY2giLCJtb2RlIiwiZGVidWciLCJ0ZW1wTGF1bmNoSWQiLCJwcm9taXNlV2l0aFRpbWVvdXQiLCJjb25zb2xlIiwiZGlyIiwib25MYXVuY2hFbmQiLCJfcmVwb3J0RW5kT2ZTdGFydGVkU3VpdGVzIiwiaGFzRmFpbGVkIiwic29tZSIsIngiLCJzdGF0dXMiLCJTdGF0dXMiLCJGQUlMRUQiLCJmaW5pc2hMYXVuY2giLCJvblJ1bm5lclN0YXJ0IiwicmlkIiwib3B0cyIsImNhcHMiLCJvblJ1bm5lckVuZCIsInJlc3VsdCIsIm9uU3VpdGVTdGFydCIsInN1aXRlSWQiLCJzdWl0ZSIsInN1aXRlRGVmIiwic3VpdGVSZWZJZCIsInJlZklkIiwic3RhcnRUZXN0SXRlbVJlcSIsInR5cGUiLCJzdGFydFRlc3RJdGVtIiwib25TdWl0ZUVuZCIsInB1c2giLCJvbkNhc2VTdGFydCIsImNhc2VJZCIsImNhc2VEZWYiLCJjb2RlUmVmIiwicGF0aCIsInJwU3VpdGVJZCIsIm9uQ2FzZUVuZCIsInJwVGVzdElkIiwidG9Mb3dlckNhc2UiLCJmYWlsdXJlIiwicnBGaWxlIiwic2NyZWVuc2hvdCIsImNvbnRlbnQiLCJsb2dNc2ciLCJfc3RyaW5naWZ5IiwibG9nUmVxIiwibGV2ZWwiLCJzZW5kTG9nIiwiZmluaXNoVGVzdEl0ZW1SZXEiLCJmaW5pc2hUZXN0SXRlbSIsIm9uU3RlcFN0YXJ0Iiwic3RlcCIsIm1vZHVsZSIsInJlcG9ydExvZ1N0ZXAiLCJycENhc2VJZCIsInJwUGFyZW50SWQiLCJpZCIsInN0ZXBOYW1lIiwiX2dldFN0ZXBOYW1lIiwibG9jYXRpb24iLCJ0ZXN0Q2FzZUlkIiwiaGFzU3RhdHMiLCJvblN0ZXBFbmQiLCJzdGFydHNXaXRoIiwicnBTdGVwSWQiLCJmaWxlIiwib25Mb2ciLCJzdGVwSWQiLCJtc2ciLCJ0aW1lIiwic3JjIiwicnBMZXZlbCIsIl9nZXRScExldmVsIiwiYXJncyIsImxlbmd0aCIsInNlbmRScExvZyIsIk9iamVjdCIsImtleXMiLCJoYXNGYWlsZWRTdWl0ZSIsIm94TGV2ZWwiLCJzaWduYXR1cmUiLCJzdWJzdHJpbmciLCJTdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3IiLCJ0aW1lb3V0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ0aGVuIiwic2V0VGltZW91dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBWUE7O0FBQ0E7Ozs7QUFDQSxNQUFNQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxnQ0FBRCxDQUF4Qjs7QUFDQSxNQUFNQyxZQUFZLEdBQUc7QUFDakJDLEVBQUFBLE9BQU8sRUFBRSxTQURRO0FBRWpCQyxFQUFBQSxLQUFLLEVBQUU7QUFGVSxDQUFy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QWUsQ0FBZixFQUFrQnJILGVBQWUsR0FBQyxDQUFsQyxJQUF1QyxLQUE5QztBQUNIOztBQUNELFdBQU91QixJQUFQO0FBQ0g7O0FBR0R5RCxFQUFBQSxVQUFVLENBQUN3QixHQUFELEVBQU07QUFFWixRQUFJLE9BQU9BLEdBQVAsS0FBZSxXQUFmLElBQThCQSxHQUFHLEtBQUssSUFBMUMsRUFBZ0Q7QUFDNUMsYUFBTyxJQUFQO0FBQ0g7O0FBRUQsUUFBSSxPQUFPQSxHQUFQLEtBQWUsUUFBZixJQUEyQkEsR0FBRyxZQUFZYyxNQUE5QyxFQUFzRDtBQUNsRCxhQUFPZCxHQUFQO0FBQ0g7O0FBRUQsUUFBSTtBQUNBLGFBQU9lLElBQUksQ0FBQ0MsU0FBTCxDQUFlaEIsR0FBZixDQUFQO0FBQ0gsS0FGRCxDQUVFLE9BQU85RSxDQUFQLEVBQVU7QUFDUlksTUFBQUEsT0FBTyxDQUFDbUYsS0FBUixDQUFjLHlEQUFkO0FBQ0g7QUFDSjs7QUFFRHBGLEVBQUFBLGtCQUFrQixDQUFDTCxPQUFELEVBQVUwRixPQUFPLEdBQUcsS0FBSyxJQUF6QixFQUErQjtBQUM3QyxXQUFPLElBQUlDLE9BQUosQ0FBWSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDcEMsVUFBSSxDQUFDN0YsT0FBRCxJQUFZLENBQUNBLE9BQU8sQ0FBQzhGLElBQXpCLEVBQStCO0FBQzNCRCxRQUFBQSxNQUFNLENBQUMsSUFBSXpHLEtBQUosQ0FBVyw0QkFBMkJzRyxPQUFRLEtBQTlDLENBQUQsQ0FBTjtBQUNIOztBQUNEMUYsTUFBQUEsT0FBTyxDQUFDOEYsSUFBUixDQUFhRixPQUFiLEVBQXNCQyxNQUF0QjtBQUNBRSxNQUFBQSxVQUFVLENBQUNGLE1BQUQsRUFBU0gsT0FBVCxDQUFWO0FBQ0gsS0FOTSxDQUFQO0FBT0g7O0FBNWEwRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogT3h5Z2VuIFJlcG9ydGVyIGZvciBSZXBvcnRQb3J0YWxcclxuICovXHJcbmltcG9ydCBSZXBvcnRlckJhc2UgZnJvbSAnLi4vcmVwb3J0ZXIvUmVwb3J0ZXJCYXNlJztcclxuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi9tb2RlbC9zdGF0dXMnO1xyXG5jb25zdCBSUENsaWVudCA9IHJlcXVpcmUoJ0BveHlnZW5ocS9ycC1jbGllbnQtamF2YXNjcmlwdCcpO1xyXG5jb25zdCBMQVVOQ0hfTU9ERVMgPSB7XHJcbiAgICBERUZBVUxUOiAnREVGQVVMVCcsXHJcbiAgICBERUJVRzogJ0RFQlVHJyxcclxufTtcclxuY29uc3QgVEVTVF9JVEVNX1RZUEVTID0ge1xyXG4gICAgU1VJVEU6ICdTVUlURScsXHJcbiAgICBURVNUOiAnVEVTVCcsXHJcbiAgICBTVEVQOiAnU1RFUCcsXHJcbn07XHJcbmNvbnN0IE1BWF9OQU1FX0xFTkdUSCA9IDEyODtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcG9ydFBvcnRhbFJlcG9ydGVyIGV4dGVuZHMgUmVwb3J0ZXJCYXNlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIHJlcG9ydGVyT3B0cywgYWdncmVnYXRvcikge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZXJPcHRzID0gcmVwb3J0ZXJPcHRzIHx8IG9wdGlvbnMucnA7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRTdGVwcyA9IHJlcG9ydGVyT3B0cy5yZXBvcnRTdGVwcyB8fCB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVwb3J0TG9ncyA9IHJlcG9ydGVyT3B0cy5yZXBvcnRMb2dzIHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2ggPSB7fTtcclxuICAgICAgICB0aGlzLmNiQ2FzZVRvUnBJZEhhc2ggPSB7fTtcclxuICAgICAgICB0aGlzLmNiU3RlcFRvUnBJZEhhc2ggPSB7fTtcclxuICAgICAgICB0aGlzLmNiU3VpdGVSZXN1bHRMaXN0QnlSZWZJZCA9IHt9O1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uU3RlcElkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN1YlN0ZXBJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLnJlcG9ydGVyT3B0c1xyXG4gICAgICAgICAgICB8fCAhdGhpcy5yZXBvcnRlck9wdHMuYXBpS2V5XHJcbiAgICAgICAgICAgIHx8ICF0aGlzLnJlcG9ydGVyT3B0cy5lbmRwb2ludFxyXG4gICAgICAgICAgICB8fCAhdGhpcy5yZXBvcnRlck9wdHMucHJvamVjdFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcG9ydFBvcnRhbCBvcHRpb25zIGFyZSBtaXNzaW5nIGluIG94eWdlbi5jb25mIGZpbGUuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWdncmVnYXRvciA9IGFnZ3JlZ2F0b3I7XHJcbiAgICAgICAgdGhpcy5ycENsaWVudCA9IG5ldyBSUENsaWVudCh7XHJcbiAgICAgICAgICAgIGxhdW5jaDogdGhpcy5yZXBvcnRlck9wdHMubGF1bmNoIHx8IHRoaXMub3B0aW9ucy5uYW1lLFxyXG4gICAgICAgICAgICAuLi50aGlzLnJlcG9ydGVyT3B0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5ycENsaWVudC5jaGVja0Nvbm5lY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSUCAtIEVycm9yIGNvbm5lY3RpbmcgdG8gdGhlIHNlcnZlcjogJHtlLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgZ2VuZXJhdGUocmVzdWx0cykge1xyXG4gICAgfVxyXG4gICAgLy8gRXZlbnRzXHJcbiAgICBhc3luYyBvbkxhdW5jaFN0YXJ0KHsgb3B0aW9ucyB9KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgeyB0ZW1wSWQsIHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuc3RhcnRMYXVuY2goe1xyXG4gICAgICAgICAgICAgICAgbW9kZTogdGhpcy5yZXBvcnRlck9wdHMubW9kZSB8fCBMQVVOQ0hfTU9ERVMuREVGQVVMVCxcclxuICAgICAgICAgICAgICAgIGRlYnVnOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcExhdW5jaElkID0gdGVtcElkO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb21pc2VXaXRoVGltZW91dChwcm9taXNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIHN0YXJ0IGxhdW5jaDogJHtlfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIG9uTGF1bmNoRW5kKHsgcmVzdWx0cyB9KSB7XHJcbiAgICAgICAgLy8gcmVwb3J0IHRoZSBlbmQgb2YgYWxsIHN0YXJ0ZWQgc3VpdGVzXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0RW5kT2ZTdGFydGVkU3VpdGVzKCk7XHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGxhdW5jaCBzdGF0dXNcclxuICAgICAgICBjb25zdCBoYXNGYWlsZWQgPSByZXN1bHRzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gYXdhaXQgdGhpcy5ycENsaWVudC5maW5pc2hMYXVuY2godGhpcy50ZW1wTGF1bmNoSWQsIHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogaGFzRmFpbGVkID8gJ0ZBSUxFRCcgOiAnUEFTU0VEJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9taXNlV2l0aFRpbWVvdXQocHJvbWlzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBlbmQgbGF1bmNoOiAke2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgb25SdW5uZXJTdGFydCh7IHJpZCwgb3B0cywgY2FwcyB9KSB7XHJcbiAgICB9XHJcbiAgICBhc3luYyBvblJ1bm5lckVuZCh7IHJpZCwgcmVzdWx0IH0pIHtcclxuICAgIH1cclxuICAgIGFzeW5jIG9uU3VpdGVTdGFydCh7IHJpZCwgc3VpdGVJZCwgc3VpdGU6IHN1aXRlRGVmIH0pIHtcclxuICAgICAgICAvLyBpbiBwYXJhbGxlbCB0ZXN0IGV4ZWN1dGlvbiwgb25TdWl0ZVN0YXJ0IHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZSBzdWl0ZSBcclxuICAgICAgICAvLyBtYWtlIHN1cmUgd2UgY2FsbCBcInN0YXJ0VGVzdEl0ZW1cIiB0aGUgc2FtZSBzdWl0ZSBvbmx5IG9uY2VcclxuICAgICAgICBjb25zdCBzdWl0ZVJlZklkID0gc3VpdGVEZWYucmVmSWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuY2JTdWl0ZVRvUnBJZEhhc2hbc3VpdGVSZWZJZF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhc3NpZ24gZW1wdHkgb2JqZWN0IGFzIGEgZm9ybSBvZiBtdWx0aS10aHJlYWQgbG9jayxcclxuICAgICAgICAvLyBzbyB0aGUgcGFyYWxsZWwgY2FsbCB0byBvblN1aXRlU3RhcnQgZnJvbSB0aGUgbmV4dCB0aHJlYWRcclxuICAgICAgICAvLyB3aWxsIG5vdCB0cnkgdG8gcHJvY2VlZCB3aXRoIHRoZSBjb2RlIGJlbG93XHJcbiAgICAgICAgdGhpcy5jYlN1aXRlVG9ScElkSGFzaFtzdWl0ZVJlZklkXSA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2JTdWl0ZVJlc3VsdExpc3RCeVJlZklkW3N1aXRlUmVmSWRdID0gW107XHJcbiAgICAgICAgY29uc3Qgc3RhcnRUZXN0SXRlbVJlcSA9IHtcclxuICAgICAgICAgICAgbmFtZTogc3VpdGVEZWYubmFtZSB8fCB0aGlzLm9wdGlvbnMubmFtZSxcclxuICAgICAgICAgICAgdHlwZTogVEVTVF9JVEVNX1RZUEVTLlNVSVRFLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdGVtcElkLCBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LnN0YXJ0VGVzdEl0ZW0oc3RhcnRUZXN0SXRlbVJlcSwgdGhpcy50ZW1wTGF1bmNoSWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNiU3VpdGVUb1JwSWRIYXNoW3N1aXRlUmVmSWRdID0gdGVtcElkO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb21pc2VXaXRoVGltZW91dChwcm9taXNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIHN0YXJ0IHN1aXRlIGl0ZW06ICR7ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBvblN1aXRlRW5kKHsgcmlkLCBzdWl0ZUlkLCByZXN1bHQgfSkge1xyXG4gICAgICAgIGNvbnN0IHN1aXRlUmVmSWQgPSByZXN1bHQucmVmSWQ7XHJcbiAgICAgICAgdGhpcy5jYlN1aXRlUmVzdWx0TGlzdEJ5UmVmSWRbc3VpdGVSZWZJZF0gJiYgdGhpcy5jYlN1aXRlUmVzdWx0TGlzdEJ5UmVmSWRbc3VpdGVSZWZJZF0ucHVzaChyZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgb25DYXNlU3RhcnQoeyByaWQsIHN1aXRlSWQsIHN1aXRlUmVmSWQsIGNhc2VJZCwgJ2Nhc2UnOiBjYXNlRGVmIH0pIHtcclxuICAgICAgICBjb25zdCBzdGFydFRlc3RJdGVtUmVxID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBjYXNlRGVmLm5hbWUsXHJcbiAgICAgICAgICAgIHR5cGU6IFRFU1RfSVRFTV9UWVBFUy5URVNULFxyXG4gICAgICAgICAgICBjb2RlUmVmOiBjYXNlRGVmLnBhdGgsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBycFN1aXRlSWQgPSB0aGlzLmNiU3VpdGVUb1JwSWRIYXNoW3N1aXRlUmVmSWRdO1xyXG4gICAgICAgIGlmICghcnBTdWl0ZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdGVtcElkLCBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LnN0YXJ0VGVzdEl0ZW0oc3RhcnRUZXN0SXRlbVJlcSwgdGhpcy50ZW1wTGF1bmNoSWQsIHJwU3VpdGVJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2JDYXNlVG9ScElkSGFzaFtjYXNlSWRdID0gdGVtcElkO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb21pc2VXaXRoVGltZW91dChwcm9taXNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIHN0YXJ0IHRlc3QgaXRlbTogJHtlfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIG9uQ2FzZUVuZCh7IHJpZCwgc3VpdGVJZCwgc3VpdGVSZWZJZCwgY2FzZUlkLCByZXN1bHQgfSkge1xyXG4gICAgICAgIGNvbnN0IHJwVGVzdElkID0gdGhpcy5jYkNhc2VUb1JwSWRIYXNoW2Nhc2VJZF07XHJcbiAgICAgICAgaWYgKCFycFRlc3RJZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3VsdC5zdGF0dXMudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAoc3RhdHVzID09PSAnZmFpbGVkJyAmJiByZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICBjb25zdCBycEZpbGUgPSByZXN1bHQuc2NyZWVuc2hvdCA/XHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdzY3JlZW5zaG90JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbWFnZS9wbmcnLFxyXG4gICAgICAgICAgICAgICAgY29udGVudDogcmVzdWx0LnNjcmVlbnNob3QsXHJcbiAgICAgICAgICAgIH0gOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBsb2dNc2cgPSB0aGlzLl9zdHJpbmdpZnkocmVzdWx0LmZhaWx1cmUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGlmIChsb2dNc2cpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ1JlcSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBsb2dNc2csXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcidcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuc2VuZExvZyhycFRlc3RJZCwgbG9nUmVxLCBycEZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvbWlzZVdpdGhUaW1lb3V0KHByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBzZW5kIGxvZyBmb3IgZmluaXNoZWQgdGVzdCBpdGVtOiAke2V9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZmluaXNoVGVzdEl0ZW1SZXEgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5maW5pc2hUZXN0SXRlbShycFRlc3RJZCwgZmluaXNoVGVzdEl0ZW1SZXEpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb21pc2VXaXRoVGltZW91dChwcm9taXNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIGZpbmlzaCB0ZXN0IGl0ZW06ICR7ZX1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uU3RlcElkID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgb25TdGVwU3RhcnQoeyByaWQsIGNhc2VJZCwgc3RlcCB9KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcG9ydFN0ZXBzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHN0ZXAubW9kdWxlICYmIHN0ZXAubW9kdWxlID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydExvZ1N0ZXAoY2FzZUlkLCBzdGVwKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBycENhc2VJZCA9IHRoaXMuY2JDYXNlVG9ScElkSGFzaFtjYXNlSWRdO1xyXG4gICAgICAgIGxldCBycFBhcmVudElkO1xyXG5cclxuICAgICAgICBpZiAoc3RlcC5uYW1lID09PSAndHJhbnNhY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uU3RlcElkID0gc3RlcC5pZDtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3ViU3RlcElkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBycFBhcmVudElkID0gcnBDYXNlSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdWJTdGVwSWQgPSBzdGVwLmlkO1xyXG4gICAgICAgICAgICBycFBhcmVudElkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25TdGVwSWQgPyB0aGlzLmNiU3RlcFRvUnBJZEhhc2hbdGhpcy5jdXJyZW50VHJhbnNhY3Rpb25TdGVwSWRdIDogcnBDYXNlSWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJwUGFyZW50SWQgfHwgIXJwQ2FzZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3RlcE5hbWUgPSB0aGlzLl9nZXRTdGVwTmFtZShzdGVwKTtcclxuICAgICAgICBjb25zdCBzdGFydFRlc3RJdGVtUmVxID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBzdGVwTmFtZSxcclxuICAgICAgICAgICAgdHlwZTogVEVTVF9JVEVNX1RZUEVTLlNURVAsXHJcbiAgICAgICAgICAgIC8vIFwiY29kZVJlZlwiICsgXCJwYXJhbWV0ZXJzXCIgdXNlZCBieSBSUCBsaWIgdG8gZ2VuZXJhdGUgdGVzdENhc2VJZCBpZiB0ZXN0Q2FzZUlkIGlzIG5vdCBkZWZpbmVkXHJcbiAgICAgICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVwb3J0cG9ydGFsL2NsaWVudC1qYXZhc2NyaXB0L2Jsb2IvNDg2ZWY3MGM2MzhhOWEyMzI2NzI5MGM2MmRmMWZhZjkwMGY3ZGY2YS9saWIvcmVwb3J0LXBvcnRhbC1jbGllbnQuanMjTDQ5N1xyXG4gICAgICAgICAgICAvLyB0aGlzIGlzIGRpc2FibGVkIGZvciBub3cuIG5vdCBzdXJlIGlmIGFjdHVhbGx5IG5lZWRlZC4uLlxyXG4gICAgICAgICAgICAvL3BhcmFtZXRlcnM6IHRoaXMuX2dldFJwQXJncyhzdGVwLmFyZ3MpLFxyXG4gICAgICAgICAgICBjb2RlUmVmOiBzdGVwLmxvY2F0aW9uLFxyXG4gICAgICAgICAgICB0ZXN0Q2FzZUlkOiBycENhc2VJZCxcclxuICAgICAgICAgICAgaGFzU3RhdHM6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdGVtcElkLCBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LnN0YXJ0VGVzdEl0ZW0oc3RhcnRUZXN0SXRlbVJlcSwgdGhpcy50ZW1wTGF1bmNoSWQsIHJwUGFyZW50SWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNiU3RlcFRvUnBJZEhhc2hbc3RlcC5pZF0gPSB0ZW1wSWQ7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvbWlzZVdpdGhUaW1lb3V0KHByb21pc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRpcihgUlAgLSBGYWlsZWQgdG8gc3RhcnQgc3RlcCBpdGVtOiAke2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgb25TdGVwRW5kKHsgcmlkLCBzdGVwOiByZXN1bHQgfSkge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXBvcnRTdGVwcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQubmFtZSAmJiByZXN1bHQubmFtZS5zdGFydHNXaXRoKCdsb2cuJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBycFN0ZXBJZCA9IHRoaXMuY2JTdGVwVG9ScElkSGFzaFtyZXN1bHQuaWRdO1xyXG4gICAgICAgIGlmICghcnBTdGVwSWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0Lm5hbWUgIT09ICd0cmFuc2FjdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3ViU3RlcElkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXN1bHQuc3RhdHVzLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2ZhaWxlZCcgJiYgcmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgY29uc3QgcnBGaWxlID0gcmVzdWx0LnNjcmVlbnNob3QgP1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2NyZWVuc2hvdCcsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW1hZ2UvcG5nJyxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdC5zY3JlZW5zaG90LFxyXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbG9nTXNnID0gdGhpcy5fc3RyaW5naWZ5KHJlc3VsdC5mYWlsdXJlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBpZiAobG9nTXNnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dSZXEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogbG9nTXNnLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGU6IHJwRmlsZSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHByb21pc2UgfSA9IHRoaXMucnBDbGllbnQuc2VuZExvZyhycFN0ZXBJZCwgbG9nUmVxLCBycEZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvbWlzZVdpdGhUaW1lb3V0KHByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBzZW5kIGxvZyBmb3IgZmluaXNoZWQgdGVzdCBpdGVtOiAke2V9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZmluaXNoVGVzdEl0ZW1SZXEgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5maW5pc2hUZXN0SXRlbShycFN0ZXBJZCwgZmluaXNoVGVzdEl0ZW1SZXEpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb21pc2VXaXRoVGltZW91dChwcm9taXNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIGZpbmlzaCBzdGVwIGl0ZW06ICR7ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBvbkxvZyh7IHN1aXRlSWQsIGNhc2VJZCwgc3RlcElkLCBsZXZlbCwgbXNnLCB0aW1lLCBzcmMgfSkge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXBvcnRMb2dzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gT3h5Z2VuIG1pZ2h0IHN0YXJ0IGdlbmVyYXRpbmcgbG9ncyBiZWZvcmUgb25SdW5uZXJTdGFydCBldmVudCwgaWdub3JlIHRoZW1cclxuICAgICAgICBpZiAoIXRoaXMudGVtcExhdW5jaElkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcnBQYXJlbnRJZCA9IHN0ZXBJZCA/XHJcbiAgICAgICAgICAgIHRoaXMuY2JTdGVwVG9ScElkSGFzaFtzdGVwSWRdXHJcbiAgICAgICAgICAgIDogY2FzZUlkID8gdGhpcy5jYkNhc2VUb1JwSWRIYXNoW2Nhc2VJZF1cclxuICAgICAgICAgICAgOiBzdWl0ZUlkID8gdGhpcy5jYlN1aXRlVG9ScElkSGFzaFtzdWl0ZUlkXVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBycExldmVsID0gdGhpcy5fZ2V0UnBMZXZlbChsZXZlbCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxvZ01zZyA9IHRoaXMuX3N0cmluZ2lmeShtc2cpO1xyXG4gICAgICAgIGlmIChsb2dNc2cpIHtcclxuICAgICAgICAgICAgY29uc3QgbG9nUmVxID0ge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogbG9nTXNnLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJwTGV2ZWwsXHJcbiAgICAgICAgICAgICAgICB0aW1lOiB0aW1lLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5zZW5kTG9nKHJwUGFyZW50SWQgfHwgdGhpcy50ZW1wTGF1bmNoSWQsIGxvZ1JlcSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb21pc2VXaXRoVGltZW91dChwcm9taXNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIGNyZWF0ZSBsb2cgaXRlbTogJHtlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgcmVwb3J0TG9nU3RlcChjYXNlSWQsIHN0ZXApIHtcclxuICAgICAgICBpZiAoIXN0ZXAuYXJncyB8fCAhc3RlcC5hcmdzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxldmVsID0gc3RlcC5uYW1lO1xyXG4gICAgICAgIGNvbnN0IG1zZyA9IHN0ZXAuYXJnc1swXTtcclxuICAgICAgICBjb25zdCB0aW1lID0gc3RlcC50aW1lO1xyXG4gICAgICAgIGxldCBzdGVwSWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN1YlN0ZXBJZCkge1xyXG4gICAgICAgICAgICBzdGVwSWQgPSB0aGlzLmN1cnJlbnRTdWJTdGVwSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uU3RlcElkKSB7XHJcbiAgICAgICAgICAgIHN0ZXBJZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uU3RlcElkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLnNlbmRScExvZyh7IHN1aXRlSWQ6IHVuZGVmaW5lZCwgY2FzZUlkLCBzdGVwSWQsIGxldmVsLCBtc2csIHRpbWUgfSk7XHJcbiAgICB9XHJcbiAgICBhc3luYyBzZW5kUnBMb2coeyBzdWl0ZUlkLCBjYXNlSWQsIHN0ZXBJZCwgbGV2ZWwsIG1zZywgdGltZSB9KSB7XHJcbiAgICAgICAgLy8gT3h5Z2VuIG1pZ2h0IHN0YXJ0IGdlbmVyYXRpbmcgbG9ncyBiZWZvcmUgb25SdW5uZXJTdGFydCBldmVudCwgaWdub3JlIHRoZW1cclxuICAgICAgICBpZiAoIXRoaXMudGVtcExhdW5jaElkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcnBQYXJlbnRJZCA9IHN0ZXBJZCA/XHJcbiAgICAgICAgICAgIHRoaXMuY2JTdGVwVG9ScElkSGFzaFtzdGVwSWRdXHJcbiAgICAgICAgICAgIDogY2FzZUlkID8gdGhpcy5jYkNhc2VUb1JwSWRIYXNoW2Nhc2VJZF1cclxuICAgICAgICAgICAgOiBzdWl0ZUlkID8gdGhpcy5jYlN1aXRlVG9ScElkSGFzaFtzdWl0ZUlkXVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBycExldmVsID0gdGhpcy5fZ2V0UnBMZXZlbChsZXZlbCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxvZ01zZyA9IHRoaXMuX3N0cmluZ2lmeShtc2cpO1xyXG4gICAgICAgIGlmIChsb2dNc2cpIHtcclxuICAgICAgICAgICAgY29uc3QgbG9nUmVxID0ge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogbG9nTXNnLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHJwTGV2ZWwsXHJcbiAgICAgICAgICAgICAgICB0aW1lOiB0aW1lLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgcHJvbWlzZSB9ID0gdGhpcy5ycENsaWVudC5zZW5kTG9nKHJwUGFyZW50SWQgfHwgdGhpcy50ZW1wTGF1bmNoSWQsIGxvZ1JlcSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb21pc2VXaXRoVGltZW91dChwcm9taXNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5kaXIoYFJQIC0gRmFpbGVkIHRvIGNyZWF0ZSBsb2cgaXRlbTogJHtlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgX3JlcG9ydEVuZE9mU3RhcnRlZFN1aXRlcygpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHN1aXRlUmVmSWQgb2YgT2JqZWN0LmtleXModGhpcy5jYlN1aXRlVG9ScElkSGFzaCkpIHtcclxuICAgICAgICAgICAgY29uc3QgcnBTdWl0ZUlkID0gdGhpcy5jYlN1aXRlVG9ScElkSGFzaFtzdWl0ZVJlZklkXTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuY2JTdWl0ZVJlc3VsdExpc3RCeVJlZklkW3N1aXRlUmVmSWRdO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYlN1aXRlVG9ScElkSGFzaFtzdWl0ZVJlZklkXTtcclxuICAgICAgICAgICAgY29uc3QgaGFzRmFpbGVkU3VpdGUgPSByZXN1bHRzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmlzaFRlc3RJdGVtUmVxID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBoYXNGYWlsZWRTdWl0ZSA/ICdmYWlsZWQnIDogJ3Bhc3NlZCcsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBwcm9taXNlIH0gPSB0aGlzLnJwQ2xpZW50LmZpbmlzaFRlc3RJdGVtKHJwU3VpdGVJZCwgZmluaXNoVGVzdEl0ZW1SZXEpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9taXNlV2l0aFRpbWVvdXQocHJvbWlzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKGBSUCAtIEZhaWxlZCB0byBmaW5pc2ggc3VpdGUgaXRlbTogJHtlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX2dldFJwTGV2ZWwob3hMZXZlbCkge1xyXG4gICAgICAgIGlmIChveExldmVsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBveExldmVsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnaW5mbyc7XHJcbiAgICB9XHJcbiAgICAvKl9nZXRScEFyZ3MoY2JBcmdzKSB7XHJcbiAgICAgICAgaWYgKCFjYkFyZ3MgfHwgIWNiQXJncy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcnBBcmdzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgY2JBcmdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyZyA9IGNiQXJnc1tpXTtcclxuICAgICAgICAgICAgbGV0IGFyZ1N0ciA9IHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IGFyZyBpbnN0YW5jZW9mIFN0cmluZyA/IGFyZyA6IEpTT04uc3RyaW5naWZ5KGFyZyk7XHJcbiAgICAgICAgICAgIHJwQXJncy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGtleTogYGFyZyR7aX1gLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ1N0clxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJwQXJncztcclxuICAgIH0qL1xyXG4gICAgX2dldFN0ZXBOYW1lKHN0ZXApIHtcclxuICAgICAgICBsZXQgbmFtZTtcclxuXHJcbiAgICAgICAgaWYgKHN0ZXAubmFtZSA9PT0gJ3RyYW5zYWN0aW9uJyAmJiBzdGVwLmFyZ3MubGVuZ3RoID4gMCkgeyAgLy8gRklYTUU6IHN0ZXBzIG5lZWQgdG8gYmUgbmVzdGVkIHVuZGVyIHRyYW5zYWN0aW9uc1xyXG4gICAgICAgICAgICBuYW1lID0gc3RlcC5hcmdzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzdGVwLnNpZ25hdHVyZSkge1xyXG4gICAgICAgICAgICBuYW1lID0gc3RlcC5zaWduYXR1cmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN0ZXAubW9kdWxlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpcyB0aGlzIGV2ZXIgcmVhY2hlZD8gXCJzdGVwLnNpZ25hdHVyZVwiIHNlZW1zIHRvIGFsd2F5cyBleGlzdFxyXG4gICAgICAgICAgICBuYW1lID0gYCR7c3RlcC5tb2R1bGV9LiR7c3RlcC5uYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBuYW1lID0gc3RlcC5uYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbWF4aW11bSBhbGxvd2VkIG5hbWUgbGVuZ3RoIGluIFJQIGlzIDEwMjQgYnl0ZXNcclxuICAgICAgICAvLyB3ZSB0cnVuY2F0ZSBpdCBldmVuIGxvd2VyIHNvIGl0IHdpbGwgZGlzcGxheSBuaWNlbHlcclxuICAgICAgICBpZiAobmFtZS5sZW5ndGggPiBNQVhfTkFNRV9MRU5HVEgpIHtcclxuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIE1BWF9OQU1FX0xFTkdUSC0zKSArICcuLi4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXR1cm5zIG51bGwgaWYgbXNnIGNhbm5vdCBiZSBzdHJpbmdpZmllZCwgb3Igc3RyaWdpZmllcyBpdCBpZiBpdCdzIG5vdCBhIHN0cmluZyBhbHJlYWR5XHJcbiAgICBfc3RyaW5naWZ5KG1zZykge1xyXG4gICAgICAgIC8vIHdlIHRlc3QgZm9yIHVuZGVmaW5lZCBhbmQgbnVsbCBleHBsaWNpdGx5IG9uIHB1cnBvc2UgYmVjYXVzZSBvdGhlciBmYWxzeSB2YWx1ZXMgKGUuZy4gMCkgYXJlIG9rXHJcbiAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICd1bmRlZmluZWQnIHx8IG1zZyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnc3RyaW5nJyB8fCBtc2cgaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShtc2cpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUlAgLSBlcnJvciBzZW5kaW5nIGxvZzogbXNnIG9iamVjdCBjYW5ub3QgYmUgc2VyaWFsaXplZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm9taXNlV2l0aFRpbWVvdXQocHJvbWlzZSwgdGltZW91dCA9IDMwICogMTAwMCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcHJvbWlzZSB8fCAhcHJvbWlzZS50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBQcm9taXNlIGF3YWl0IHRpbWVvdXQgb2YgJHt0aW1lb3V0fSBtc2ApKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcm9taXNlLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICAgICAgc2V0VGltZW91dChyZWplY3QsIHRpbWVvdXQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=
|
|
@@ -93,4 +93,4 @@ class XmlReporter extends _FileReporterBase.default {
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
exports.default = XmlReporter;
|
|
96
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9yZXBvcnRlcnMvcmVwb3J0ZXIteG1sLmpzIl0sIm5hbWVzIjpbIkVhc3lYbWwiLCJyZXF1aXJlIiwiWG1sUmVwb3J0ZXIiLCJGaWxlUmVwb3J0ZXJCYXNlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiZ2VuZXJhdGUiLCJyZXN1bHRzIiwicmVzdWx0RmlsZVBhdGgiLCJjcmVhdGVGb2xkZXJTdHJ1Y3R1cmVBbmRGaWxlUGF0aCIsInJlc3VsdEZvbGRlclBhdGgiLCJwYXRoIiwiZGlybmFtZSIsInNlcmlhbGl6ZXIiLCJzaW5ndWxhcml6ZSIsInJvb3RFbGVtZW50Iiwicm9vdEFycmF5IiwiZGF0ZUZvcm1hdCIsIm1hbmlmZXN0IiwidW53cmFwQXJyYXlzIiwiZmlsdGVyTnVsbHMiLCJyZXBsYWNlU2NyZWVuc2hvdHNXaXRoRmlsZXMiLCJmb3JYbWxSZW5kZXIiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJtYXAiLCJyZXN1bHQiLCJwdXNoIiwibmFtZSIsInN0YXR1cyIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJkdXJhdGlvbiIsImZhaWx1cmUiLCJlbnZpcm9ubWVudCIsImNhcGFiaWxpdGllcyIsImN3ZCIsInRhcmdldCIsImJyb3dzZXJOYW1lIiwic2VsZW5pdW1VcmwiLCJhcHBpdW1VcmwiLCJyZW9wZW5TZXNzaW9uIiwicmVSdW5PbkZhaWxlZCIsIml0ZXJhdGlvbnMiLCJkZWJ1Z1BvcnQiLCJkZWxheSIsImNvbGxlY3REZXZpY2VMb2dzIiwiY29sbGVjdEFwcGl1bUxvZ3MiLCJjb2xsZWN0QnJvd3NlckxvZ3MiLCJyZXBvcnRpbmciLCJwYXJhbWV0ZXJzIiwicGFyYWxsZWwiLCJzZXJ2aWNlcyIsIm1vZHVsZXMiLCJmcmFtZXdvcmsiLCJhcHBsaXRvb2xzT3B0cyIsImVudnMiLCJlbnYiLCJwbyIsInNjcmlwdENvbnRlbnRMaW5lT2Zmc2V0Iiwic3VpdGVzIiwieG1sIiwicmVuZGVyIiwiZnMiLCJ3cml0ZUZpbGVT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a0J6QyxZQUFsQixDQUFWOztBQUNBMEMsZ0JBQUdDLGFBQUgsQ0FBaUJ6RCxjQUFqQixFQUFpQ3NELEdBQWpDOztBQUVBLFdBQU90RCxjQUFQO0FBQ0g7O0FBekVxRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKi9cblxuLypcbiAqIE94eWdlbiBYTUwgUmVwb3J0ZXJcbiAqL1xuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgRmlsZVJlcG9ydGVyQmFzZSBmcm9tICcuLi9yZXBvcnRlci9GaWxlUmVwb3J0ZXJCYXNlJztcbnZhciBFYXN5WG1sID0gcmVxdWlyZSgnZWFzeXhtbCcpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBYbWxSZXBvcnRlciBleHRlbmRzIEZpbGVSZXBvcnRlckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGUocmVzdWx0cykge1xuICAgICAgICB2YXIgcmVzdWx0RmlsZVBhdGggPSB0aGlzLmNyZWF0ZUZvbGRlclN0cnVjdHVyZUFuZEZpbGVQYXRoKCcueG1sJyk7XG4gICAgICAgIHZhciByZXN1bHRGb2xkZXJQYXRoID0gcGF0aC5kaXJuYW1lKHJlc3VsdEZpbGVQYXRoKTtcblxuICAgICAgICB2YXIgc2VyaWFsaXplciA9IG5ldyBFYXN5WG1sKHtcbiAgICAgICAgICAgIHNpbmd1bGFyaXplOiB0cnVlLFxuICAgICAgICAgICAgcm9vdEVsZW1lbnQ6ICd0ZXN0LXJlc3VsdHMnLFxuICAgICAgICAgICAgcm9vdEFycmF5OiAndGVzdC1yZXN1bHRzJyxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICdJU08nLFxuICAgICAgICAgICAgbWFuaWZlc3Q6IHRydWUsXG4gICAgICAgICAgICB1bndyYXBBcnJheXM6IGZhbHNlLFxuICAgICAgICAgICAgZmlsdGVyTnVsbHM6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXBsYWNlU2NyZWVuc2hvdHNXaXRoRmlsZXMocmVzdWx0cywgcmVzdWx0Rm9sZGVyUGF0aCk7XG4gICAgICAgIGNvbnN0IGZvclhtbFJlbmRlciA9IFtdO1xuXG4gICAgICAgIGlmIChyZXN1bHRzICYmIEFycmF5LmlzQXJyYXkocmVzdWx0cykgJiYgcmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yWG1sUmVuZGVyLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXN1bHQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWU6IHJlc3VsdC5zdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgICAgIGVuZFRpbWU6IHJlc3VsdC5lbmRUaW1lLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogcmVzdWx0LmR1cmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiByZXN1bHQuZmFpbHVyZSxcbiAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHJlc3VsdC5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiByZXN1bHQuY2FwYWJpbGl0aWVzLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjd2Q6IHJlc3VsdC5vcHRpb25zLmN3ZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogIHJlc3VsdC5vcHRpb25zLnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXJOYW1lOiByZXN1bHQub3B0aW9ucy5icm93c2VyTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVuaXVtVXJsOiByZXN1bHQub3B0aW9ucy5zZWxlbml1bVVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGl1bVVybDogcmVzdWx0Lm9wdGlvbnMuYXBwaXVtVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVvcGVuU2Vzc2lvbjogcmVzdWx0Lm9wdGlvbnMucmVvcGVuU2Vzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlUnVuT25GYWlsZWQ6IHJlc3VsdC5vcHRpb25zLnJlUnVuT25GYWlsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRpb25zOiByZXN1bHQub3B0aW9ucy5pdGVyYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdQb3J0OiByZXN1bHQub3B0aW9ucy5kZWJ1Z1BvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheTogcmVzdWx0Lm9wdGlvbnMuZGVsYXksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0RGV2aWNlTG9nczogcmVzdWx0Lm9wdGlvbnMuY29sbGVjdERldmljZUxvZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0QXBwaXVtTG9nczogcmVzdWx0Lm9wdGlvbnMuY29sbGVjdEFwcGl1bUxvZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0QnJvd3NlckxvZ3M6IHJlc3VsdC5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGluZzogcmVzdWx0Lm9wdGlvbnMucmVwb3J0aW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogcmVzdWx0Lm9wdGlvbnMucGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1aXRlczogcmVzdWx0Lm9wdGlvbnMuc3VpdGVzLCAvLyBpZ25vcmUsIGZ1bmN0aW9uIGluc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWw6IHJlc3VsdC5vcHRpb25zLnBhcmFsbGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiByZXN1bHQub3B0aW9ucy5jYXBhYmlsaXRpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlczogcmVzdWx0Lm9wdGlvbnMuc2VydmljZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzOiByZXN1bHQub3B0aW9ucy5tb2R1bGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrOiByZXN1bHQub3B0aW9ucy5mcmFtZXdvcmssXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaXRvb2xzT3B0czogcmVzdWx0Lm9wdGlvbnMuYXBwbGl0b29sc09wdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBob29rczogcmVzdWx0Lm9wdGlvbnMuaG9va3MsIC8vIGlnbm9yZSwgZnVuY3Rpb24gaW5zaWRlXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnZzOiByZXN1bHQub3B0aW9ucy5lbnZzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm9wdGlvbnMubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudjogcmVzdWx0Lm9wdGlvbnMuZW52LFxuICAgICAgICAgICAgICAgICAgICAgICAgcG86IHJlc3VsdC5vcHRpb25zLnBvLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Q29udGVudExpbmVPZmZzZXQ6IHJlc3VsdC5vcHRpb25zLnNjcmlwdENvbnRlbnRMaW5lT2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlczogcmVzdWx0LnN1aXRlc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXJpYWxpemUgdGVzdCByZXN1bHRzIHRvIFhNTCBhbmQgc2F2ZSB0byBmaWxlXG4gICAgICAgIHZhciB4bWwgPSBzZXJpYWxpemVyLnJlbmRlcihmb3JYbWxSZW5kZXIpO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHJlc3VsdEZpbGVQYXRoLCB4bWwpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHRGaWxlUGF0aDtcbiAgICB9XG59Il19
|
|
96
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9yZXBvcnRlcnMvcmVwb3J0ZXIteG1sLmpzIl0sIm5hbWVzIjpbIkVhc3lYbWwiLCJyZXF1aXJlIiwiWG1sUmVwb3J0ZXIiLCJGaWxlUmVwb3J0ZXJCYXNlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiZ2VuZXJhdGUiLCJyZXN1bHRzIiwicmVzdWx0RmlsZVBhdGgiLCJjcmVhdGVGb2xkZXJTdHJ1Y3R1cmVBbmRGaWxlUGF0aCIsInJlc3VsdEZvbGRlclBhdGgiLCJwYXRoIiwiZGlybmFtZSIsInNlcmlhbGl6ZXIiLCJzaW5ndWxhcml6ZSIsInJvb3RFbGVtZW50Iiwicm9vdEFycmF5IiwiZGF0ZUZvcm1hdCIsIm1hbmlmZXN0IiwidW53cmFwQXJyYXlzIiwiZmlsdGVyTnVsbHMiLCJyZXBsYWNlU2NyZWVuc2hvdHNXaXRoRmlsZXMiLCJmb3JYbWxSZW5kZXIiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJtYXAiLCJyZXN1bHQiLCJwdXNoIiwibmFtZSIsInN0YXR1cyIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJkdXJhdGlvbiIsImZhaWx1cmUiLCJlbnZpcm9ubWVudCIsImNhcGFiaWxpdGllcyIsImN3ZCIsInRhcmdldCIsImJyb3dzZXJOYW1lIiwic2VsZW5pdW1VcmwiLCJhcHBpdW1VcmwiLCJyZW9wZW5TZXNzaW9uIiwicmVSdW5PbkZhaWxlZCIsIml0ZXJhdGlvbnMiLCJkZWJ1Z1BvcnQiLCJkZWxheSIsImNvbGxlY3REZXZpY2VMb2dzIiwiY29sbGVjdEFwcGl1bUxvZ3MiLCJjb2xsZWN0QnJvd3NlckxvZ3MiLCJyZXBvcnRpbmciLCJwYXJhbWV0ZXJzIiwicGFyYWxsZWwiLCJzZXJ2aWNlcyIsIm1vZHVsZXMiLCJmcmFtZXdvcmsiLCJhcHBsaXRvb2xzT3B0cyIsImVudnMiLCJlbnYiLCJwbyIsInNjcmlwdENvbnRlbnRMaW5lT2Zmc2V0Iiwic3VpdGVzIiwieG1sIiwicmVuZGVyIiwiZnMiLCJ3cml0ZUZpbGVT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a0J6QyxZQUFsQixDQUFWOztBQUNBMEMsZ0JBQUdDLGFBQUgsQ0FBaUJ6RCxjQUFqQixFQUFpQ3NELEdBQWpDOztBQUVBLFdBQU90RCxjQUFQO0FBQ0g7O0FBekVxRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogT3h5Z2VuIFhNTCBSZXBvcnRlclxyXG4gKi9cclxuXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgRmlsZVJlcG9ydGVyQmFzZSBmcm9tICcuLi9yZXBvcnRlci9GaWxlUmVwb3J0ZXJCYXNlJztcclxudmFyIEVhc3lYbWwgPSByZXF1aXJlKCdlYXN5eG1sJyk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBYbWxSZXBvcnRlciBleHRlbmRzIEZpbGVSZXBvcnRlckJhc2Uge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlKHJlc3VsdHMpIHtcclxuICAgICAgICB2YXIgcmVzdWx0RmlsZVBhdGggPSB0aGlzLmNyZWF0ZUZvbGRlclN0cnVjdHVyZUFuZEZpbGVQYXRoKCcueG1sJyk7XHJcbiAgICAgICAgdmFyIHJlc3VsdEZvbGRlclBhdGggPSBwYXRoLmRpcm5hbWUocmVzdWx0RmlsZVBhdGgpO1xyXG5cclxuICAgICAgICB2YXIgc2VyaWFsaXplciA9IG5ldyBFYXN5WG1sKHtcclxuICAgICAgICAgICAgc2luZ3VsYXJpemU6IHRydWUsXHJcbiAgICAgICAgICAgIHJvb3RFbGVtZW50OiAndGVzdC1yZXN1bHRzJyxcclxuICAgICAgICAgICAgcm9vdEFycmF5OiAndGVzdC1yZXN1bHRzJyxcclxuICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ0lTTycsXHJcbiAgICAgICAgICAgIG1hbmlmZXN0OiB0cnVlLFxyXG4gICAgICAgICAgICB1bndyYXBBcnJheXM6IGZhbHNlLFxyXG4gICAgICAgICAgICBmaWx0ZXJOdWxsczogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyhyZXN1bHRzLCByZXN1bHRGb2xkZXJQYXRoKTtcclxuICAgICAgICBjb25zdCBmb3JYbWxSZW5kZXIgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdHMgJiYgQXJyYXkuaXNBcnJheShyZXN1bHRzKSAmJiByZXN1bHRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yWG1sUmVuZGVyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWU6IHJlc3VsdC5zdGFydFRpbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kVGltZTogcmVzdWx0LmVuZFRpbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IHJlc3VsdC5kdXJhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiByZXN1bHQuZmFpbHVyZSxcclxuICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudDogcmVzdWx0LmVudmlyb25tZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdGllczogcmVzdWx0LmNhcGFiaWxpdGllcyxcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN3ZDogcmVzdWx0Lm9wdGlvbnMuY3dkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6ICByZXN1bHQub3B0aW9ucy50YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXJOYW1lOiByZXN1bHQub3B0aW9ucy5icm93c2VyTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZW5pdW1Vcmw6IHJlc3VsdC5vcHRpb25zLnNlbGVuaXVtVXJsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBpdW1Vcmw6IHJlc3VsdC5vcHRpb25zLmFwcGl1bVVybCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVvcGVuU2Vzc2lvbjogcmVzdWx0Lm9wdGlvbnMucmVvcGVuU2Vzc2lvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVSdW5PbkZhaWxlZDogcmVzdWx0Lm9wdGlvbnMucmVSdW5PbkZhaWxlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uczogcmVzdWx0Lm9wdGlvbnMuaXRlcmF0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdQb3J0OiByZXN1bHQub3B0aW9ucy5kZWJ1Z1BvcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5OiByZXN1bHQub3B0aW9ucy5kZWxheSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdERldmljZUxvZ3M6IHJlc3VsdC5vcHRpb25zLmNvbGxlY3REZXZpY2VMb2dzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0QXBwaXVtTG9nczogcmVzdWx0Lm9wdGlvbnMuY29sbGVjdEFwcGl1bUxvZ3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3RCcm93c2VyTG9nczogcmVzdWx0Lm9wdGlvbnMuY29sbGVjdEJyb3dzZXJMb2dzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRpbmc6IHJlc3VsdC5vcHRpb25zLnJlcG9ydGluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogcmVzdWx0Lm9wdGlvbnMucGFyYW1ldGVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VpdGVzOiByZXN1bHQub3B0aW9ucy5zdWl0ZXMsIC8vIGlnbm9yZSwgZnVuY3Rpb24gaW5zaWRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsOiByZXN1bHQub3B0aW9ucy5wYXJhbGxlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiByZXN1bHQub3B0aW9ucy5jYXBhYmlsaXRpZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzOiByZXN1bHQub3B0aW9ucy5zZXJ2aWNlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlczogcmVzdWx0Lm9wdGlvbnMubW9kdWxlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrOiByZXN1bHQub3B0aW9ucy5mcmFtZXdvcmssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpdG9vbHNPcHRzOiByZXN1bHQub3B0aW9ucy5hcHBsaXRvb2xzT3B0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaG9va3M6IHJlc3VsdC5vcHRpb25zLmhvb2tzLCAvLyBpZ25vcmUsIGZ1bmN0aW9uIGluc2lkZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnZzOiByZXN1bHQub3B0aW9ucy5lbnZzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXN1bHQub3B0aW9ucy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnY6IHJlc3VsdC5vcHRpb25zLmVudixcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG86IHJlc3VsdC5vcHRpb25zLnBvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRDb250ZW50TGluZU9mZnNldDogcmVzdWx0Lm9wdGlvbnMuc2NyaXB0Q29udGVudExpbmVPZmZzZXRcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlczogcmVzdWx0LnN1aXRlc1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2VyaWFsaXplIHRlc3QgcmVzdWx0cyB0byBYTUwgYW5kIHNhdmUgdG8gZmlsZVxyXG4gICAgICAgIHZhciB4bWwgPSBzZXJpYWxpemVyLnJlbmRlcihmb3JYbWxSZW5kZXIpO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMocmVzdWx0RmlsZVBhdGgsIHhtbCk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHRGaWxlUGF0aDtcclxuICAgIH1cclxufSJdfQ==
|