oxygen-cli 1.25.0-beta.2 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.husky/pre-commit +4 -0
- package/CHANGELOG.md +65 -0
- package/build/core/OxygenCore.js +36 -257
- package/build/core/OxygenEvents.js +1 -11
- package/build/core/OxygenModule.js +1 -14
- package/build/core/OxygenService.js +1 -12
- package/build/core/OxygenSubModule.js +1 -10
- package/build/core/WebDriverModule.js +1 -30
- package/build/core/utils.js +1 -17
- package/build/errors/HookError.js +1 -7
- package/build/errors/ModuleError.js +1 -7
- package/build/errors/ModuleUnavailableError.js +1 -3
- package/build/errors/OxygenError.js +1 -33
- package/build/errors/ScriptNotFound.js +1 -7
- package/build/errors/helper.js +46 -77
- package/build/index.js +6 -18
- package/build/lib/cli-util.js +28 -90
- package/build/lib/cli.js +1 -23
- package/build/lib/debugger.js +1 -144
- package/build/lib/img-merge.js +1 -15
- package/build/lib/launcher.js +1 -28
- package/build/lib/moduleRequire.js +1 -4
- package/build/lib/param-manager.js +1 -28
- package/build/lib/param-reader-csv.js +1 -15
- package/build/lib/param-reader-excel.js +1 -14
- package/build/lib/param-reader-json.js +1 -10
- package/build/lib/util.js +3 -58
- package/build/model/case-result.js +1 -2
- package/build/model/failure.js +1 -2
- package/build/model/status.js +1 -2
- package/build/model/step-result.js +1 -2
- package/build/model/suite-result.js +1 -2
- package/build/model/test-result.js +1 -2
- package/build/model/testcase.js +1 -2
- package/build/model/testsuite.js +1 -2
- package/build/ox_modules/index.js +13 -33
- package/build/ox_modules/module-assert.js +8 -24
- package/build/ox_modules/module-date.js +3 -8
- package/build/ox_modules/module-db.js +7 -28
- package/build/ox_modules/module-email.js +10 -36
- package/build/ox_modules/module-eyes.js +5 -46
- package/build/ox_modules/module-http.js +42 -104
- package/build/ox_modules/module-log.js +5 -22
- package/build/ox_modules/module-mailinator.js +10 -32
- package/build/ox_modules/module-mob/commands/alertAccept.js +1 -2
- package/build/ox_modules/module-mob/commands/alertDismiss.js +1 -2
- package/build/ox_modules/module-mob/commands/assertAlert.js +1 -6
- package/build/ox_modules/module-mob/commands/assertText.js +1 -3
- package/build/ox_modules/module-mob/commands/assertTitle.js +1 -4
- package/build/ox_modules/module-mob/commands/assertValue.js +9 -15
- package/build/ox_modules/module-mob/commands/back.js +1 -2
- package/build/ox_modules/module-mob/commands/clear.js +1 -4
- package/build/ox_modules/module-mob/commands/click.js +3 -4
- package/build/ox_modules/module-mob/commands/clickHidden.js +3 -9
- package/build/ox_modules/module-mob/commands/clickLong.js +1 -2
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +1 -4
- package/build/ox_modules/module-mob/commands/closeApp.js +1 -2
- package/build/ox_modules/module-mob/commands/debug.js +2 -2
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +1 -2
- package/build/ox_modules/module-mob/commands/enableNetwork.js +4 -12
- package/build/ox_modules/module-mob/commands/execute.js +1 -2
- package/build/ox_modules/module-mob/commands/findElement.js +1 -3
- package/build/ox_modules/module-mob/commands/findElements.js +1 -4
- package/build/ox_modules/module-mob/commands/getAlertText.js +1 -2
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +1 -2
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +1 -10
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +1 -2
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +1 -2
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +1 -9
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +1 -2
- package/build/ox_modules/module-mob/commands/getLocation.js +1 -2
- package/build/ox_modules/module-mob/commands/getSource.js +1 -2
- package/build/ox_modules/module-mob/commands/getText.js +1 -4
- package/build/ox_modules/module-mob/commands/getTitle.js +1 -2
- package/build/ox_modules/module-mob/commands/getUrl.js +1 -2
- package/build/ox_modules/module-mob/commands/getValue.js +5 -9
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +1 -2
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +1 -2
- package/build/ox_modules/module-mob/commands/index.js +19 -94
- package/build/ox_modules/module-mob/commands/installApp.js +1 -2
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +1 -2
- package/build/ox_modules/module-mob/commands/isCheckable.js +1 -2
- package/build/ox_modules/module-mob/commands/isChecked.js +1 -2
- package/build/ox_modules/module-mob/commands/isClickable.js +1 -2
- package/build/ox_modules/module-mob/commands/isExist.js +1 -3
- package/build/ox_modules/module-mob/commands/isSelected.js +1 -2
- package/build/ox_modules/module-mob/commands/isVisible.js +1 -3
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +1 -2
- package/build/ox_modules/module-mob/commands/launchApp.js +1 -2
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +1 -2
- package/build/ox_modules/module-mob/commands/open.js +1 -3
- package/build/ox_modules/module-mob/commands/pause.js +1 -2
- package/build/ox_modules/module-mob/commands/removeApp.js +1 -2
- package/build/ox_modules/module-mob/commands/resetApp.js +1 -2
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +1 -6
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +1 -2
- package/build/ox_modules/module-mob/commands/select.js +1 -4
- package/build/ox_modules/module-mob/commands/selectFrame.js +1 -4
- package/build/ox_modules/module-mob/commands/selectWindow.js +5 -26
- package/build/ox_modules/module-mob/commands/sendKeys.js +6 -9
- package/build/ox_modules/module-mob/commands/setContext.js +1 -2
- package/build/ox_modules/module-mob/commands/setNativeContext.js +1 -2
- package/build/ox_modules/module-mob/commands/setTimeout.js +1 -2
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +3 -6
- package/build/ox_modules/module-mob/commands/shake.js +1 -2
- package/build/ox_modules/module-mob/commands/smsClickLink.js +1 -2
- package/build/ox_modules/module-mob/commands/smsGetText.js +3 -6
- package/build/ox_modules/module-mob/commands/swipe.js +1 -2
- package/build/ox_modules/module-mob/commands/swipeElement.js +1 -2
- package/build/ox_modules/module-mob/commands/swipeScreen.js +1 -2
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +1 -2
- package/build/ox_modules/module-mob/commands/tap.js +1 -2
- package/build/ox_modules/module-mob/commands/type.js +3 -7
- package/build/ox_modules/module-mob/commands/unlockPattern.js +9 -10
- package/build/ox_modules/module-mob/commands/waitForExist.js +1 -2
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +1 -3
- package/build/ox_modules/module-mob/commands/waitForVisible.js +1 -2
- package/build/ox_modules/module-mob.js +72 -142
- package/build/ox_modules/module-pdf.js +23 -62
- package/build/ox_modules/module-proxy.js +8 -68
- package/build/ox_modules/module-serial.js +7 -32
- package/build/ox_modules/module-shell.js +8 -27
- package/build/ox_modules/module-soap.js +14 -47
- package/build/ox_modules/module-twilio.js +10 -53
- package/build/ox_modules/module-utils.js +16 -51
- package/build/ox_modules/module-web/commands/alertAccept.js +1 -2
- package/build/ox_modules/module-web/commands/alertDismiss.js +1 -2
- package/build/ox_modules/module-web/commands/assertAlert.js +1 -6
- package/build/ox_modules/module-web/commands/assertExist.js +1 -2
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +1 -4
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +1 -3
- package/build/ox_modules/module-web/commands/assertText.js +1 -3
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +1 -6
- package/build/ox_modules/module-web/commands/assertTextPresent.js +1 -6
- package/build/ox_modules/module-web/commands/assertTitle.js +1 -3
- package/build/ox_modules/module-web/commands/assertValue.js +1 -3
- package/build/ox_modules/module-web/commands/back.js +1 -2
- package/build/ox_modules/module-web/commands/clear.js +1 -5
- package/build/ox_modules/module-web/commands/click.js +4 -13
- package/build/ox_modules/module-web/commands/clickHidden.js +2 -7
- package/build/ox_modules/module-web/commands/closeWindow.js +1 -2
- package/build/ox_modules/module-web/commands/debug.js +2 -2
- package/build/ox_modules/module-web/commands/deleteCookies.js +1 -2
- package/build/ox_modules/module-web/commands/deselect.js +1 -2
- package/build/ox_modules/module-web/commands/doubleClick.js +3 -9
- package/build/ox_modules/module-web/commands/dragAndDrop.js +1 -2
- package/build/ox_modules/module-web/commands/execute.js +1 -2
- package/build/ox_modules/module-web/commands/fileBrowse.js +4 -10
- package/build/ox_modules/module-web/commands/findElement.js +1 -3
- package/build/ox_modules/module-web/commands/findElements.js +1 -4
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +1 -2
- package/build/ox_modules/module-web/commands/getAlertText.js +1 -2
- package/build/ox_modules/module-web/commands/getAttribute.js +1 -4
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +1 -3
- package/build/ox_modules/module-web/commands/getCookies.js +1 -2
- package/build/ox_modules/module-web/commands/getCssValue.js +1 -4
- package/build/ox_modules/module-web/commands/getElementCount.js +1 -2
- package/build/ox_modules/module-web/commands/getHTML.js +1 -2
- package/build/ox_modules/module-web/commands/getSource.js +1 -2
- package/build/ox_modules/module-web/commands/getText.js +1 -4
- package/build/ox_modules/module-web/commands/getTitle.js +1 -2
- package/build/ox_modules/module-web/commands/getUrl.js +1 -2
- package/build/ox_modules/module-web/commands/getValue.js +1 -5
- package/build/ox_modules/module-web/commands/getWindowHandles.js +1 -2
- package/build/ox_modules/module-web/commands/getWindowSize.js +1 -2
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +1 -5
- package/build/ox_modules/module-web/commands/index.js +26 -99
- package/build/ox_modules/module-web/commands/isAlertPresent.js +1 -2
- package/build/ox_modules/module-web/commands/isChecked.js +1 -2
- package/build/ox_modules/module-web/commands/isExist.js +1 -3
- package/build/ox_modules/module-web/commands/isInteractable.js +33 -0
- package/build/ox_modules/module-web/commands/isSelected.js +1 -2
- package/build/ox_modules/module-web/commands/isVisible.js +1 -3
- package/build/ox_modules/module-web/commands/makeVisible.js +2 -10
- package/build/ox_modules/module-web/commands/maximizeWindow.js +1 -2
- package/build/ox_modules/module-web/commands/minimizeWindow.js +1 -2
- package/build/ox_modules/module-web/commands/newWindow.js +1 -2
- package/build/ox_modules/module-web/commands/open.js +1 -4
- package/build/ox_modules/module-web/commands/pause.js +1 -2
- package/build/ox_modules/module-web/commands/point.js +1 -2
- package/build/ox_modules/module-web/commands/pointJS.js +2 -8
- package/build/ox_modules/module-web/commands/refresh.js +1 -2
- package/build/ox_modules/module-web/commands/rightClick.js +3 -8
- package/build/ox_modules/module-web/commands/rightClickActions.js +1 -2
- package/build/ox_modules/module-web/commands/scrollToElement.js +1 -2
- package/build/ox_modules/module-web/commands/select.js +1 -5
- package/build/ox_modules/module-web/commands/selectFrame.js +1 -3
- package/build/ox_modules/module-web/commands/selectWindow.js +5 -26
- package/build/ox_modules/module-web/commands/sendKeys.js +3 -6
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -2
- package/build/ox_modules/module-web/commands/setTimeout.js +1 -2
- package/build/ox_modules/module-web/commands/setWindowSize.js +1 -2
- package/build/ox_modules/module-web/commands/takeScreenshot.js +3 -5
- package/build/ox_modules/module-web/commands/type.js +1 -5
- package/build/ox_modules/module-web/commands/waitForAngular.js +6 -11
- package/build/ox_modules/module-web/commands/waitForExist.js +1 -2
- package/build/ox_modules/module-web/commands/waitForInteractable.js +1 -2
- package/build/ox_modules/module-web/commands/waitForNotExist.js +1 -8
- package/build/ox_modules/module-web/commands/waitForNotText.js +3 -5
- package/build/ox_modules/module-web/commands/waitForNotValue.js +3 -5
- package/build/ox_modules/module-web/commands/waitForText.js +3 -5
- package/build/ox_modules/module-web/commands/waitForValue.js +3 -5
- package/build/ox_modules/module-web/commands/waitForVisible.js +1 -2
- package/build/ox_modules/module-web/commands/waitForWindow.js +4 -21
- package/build/ox_modules/module-web.js +86 -192
- package/build/ox_modules/module-win/commands/assertText.js +1 -3
- package/build/ox_modules/module-win/commands/assertTitle.js +1 -4
- package/build/ox_modules/module-win/commands/assertValue.js +9 -15
- package/build/ox_modules/module-win/commands/back.js +1 -2
- package/build/ox_modules/module-win/commands/clear.js +1 -4
- package/build/ox_modules/module-win/commands/click.js +1 -2
- package/build/ox_modules/module-win/commands/clickLong.js +1 -2
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +1 -4
- package/build/ox_modules/module-win/commands/findElement.js +1 -3
- package/build/ox_modules/module-win/commands/findElements.js +1 -4
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +1 -2
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +1 -2
- package/build/ox_modules/module-win/commands/getLocation.js +1 -2
- package/build/ox_modules/module-win/commands/getSource.js +1 -2
- package/build/ox_modules/module-win/commands/getText.js +1 -4
- package/build/ox_modules/module-win/commands/getValue.js +5 -9
- package/build/ox_modules/module-win/commands/getWindowHandles.js +1 -2
- package/build/ox_modules/module-win/commands/index.js +5 -43
- package/build/ox_modules/module-win/commands/isCheckable.js +1 -2
- package/build/ox_modules/module-win/commands/isChecked.js +1 -2
- package/build/ox_modules/module-win/commands/isClickable.js +1 -2
- package/build/ox_modules/module-win/commands/isExist.js +1 -3
- package/build/ox_modules/module-win/commands/isSelected.js +1 -2
- package/build/ox_modules/module-win/commands/isVisible.js +1 -3
- package/build/ox_modules/module-win/commands/open.js +1 -2
- package/build/ox_modules/module-win/commands/pause.js +1 -2
- package/build/ox_modules/module-win/commands/rightClick.js +1 -2
- package/build/ox_modules/module-win/commands/selectWindow.js +1 -15
- package/build/ox_modules/module-win/commands/sendKeys.js +1 -4
- package/build/ox_modules/module-win/commands/setTimeout.js +1 -2
- package/build/ox_modules/module-win/commands/takeScreenshot.js +1 -2
- package/build/ox_modules/module-win/commands/tap.js +1 -2
- package/build/ox_modules/module-win/commands/type.js +1 -4
- package/build/ox_modules/module-win/commands/waitForExist.js +1 -2
- package/build/ox_modules/module-win/commands/waitForInteractable.js +1 -4
- package/build/ox_modules/module-win/commands/waitForVisible.js +1 -2
- package/build/ox_modules/module-win.js +48 -87
- package/build/ox_modules/utils.js +22 -76
- package/build/ox_reporters/reporter-excel.js +1 -58
- package/build/ox_reporters/reporter-html.js +1 -28
- package/build/ox_reporters/reporter-json.js +1 -14
- package/build/ox_reporters/reporter-junit.js +1 -24
- package/build/ox_reporters/reporter-pdf.js +1 -19
- package/build/ox_reporters/reporter-xml.js +1 -17
- package/build/ox_services/service-devtools/submodule-network.js +3 -84
- package/build/ox_services/service-devtools.js +1 -23
- package/build/reporter/FileReporterBase.js +5 -44
- package/build/reporter/ReportAggregator.js +1 -65
- package/build/reporter/ReporterBase.js +1 -6
- package/build/runners/WorkerProcess.js +1 -99
- package/build/runners/cucumber/CucumberEventListener.js +4 -29
- package/build/runners/cucumber/CucumberReporter.js +1 -56
- package/build/runners/cucumber/CucumberWorker.js +1 -66
- package/build/runners/cucumber/index.js +1 -30
- package/build/runners/cucumber/worker.js +1 -18
- package/build/runners/index.js +1 -6
- package/build/runners/oxygen/OxygenWorker.js +20 -54
- package/build/runners/oxygen/index.js +17 -177
- package/build/runners/oxygen/worker.js +2 -25
- package/package.json +28 -29
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
|
-
|
|
5
4
|
/*
|
|
6
5
|
* Copyright (C) 2015-present CloudBeat Limited
|
|
7
6
|
*
|
|
@@ -21,11 +20,9 @@ require("source-map-support/register");
|
|
|
21
20
|
* win.waitForInteractable("id=UserName");//Waits for an element is clickable in DOM.
|
|
22
21
|
*/
|
|
23
22
|
const interactableClassNames = ['Edit', 'Button'];
|
|
24
|
-
|
|
25
23
|
module.exports = async function (locator, timeout) {
|
|
26
24
|
this.helpers.assertArgumentTimeout(timeout, 'timeout');
|
|
27
25
|
const el = await this.helpers.getElement(locator, false, timeout);
|
|
28
|
-
|
|
29
26
|
try {
|
|
30
27
|
await this.driver.waitUntil(async () => {
|
|
31
28
|
const isControlElement = await el.getAttribute('IsControlElement');
|
|
@@ -40,4 +37,4 @@ module.exports = async function (locator, timeout) {
|
|
|
40
37
|
throw new this.OxError(this.errHelper.errorCode.ELEMENT_NOT_INTERACTABLE, `Element ${locator} is not interactable`);
|
|
41
38
|
}
|
|
42
39
|
};
|
|
43
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbnRlcmFjdGFibGVDbGFzc05hbWVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImxvY2F0b3IiLCJ0aW1lb3V0IiwiaGVscGVycyIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImVsIiwiZ2V0RWxlbWVudCIsImRyaXZlciIsIndhaXRVbnRpbCIsImlzQ29udHJvbEVsZW1lbnQiLCJnZXRBdHRyaWJ1dGUiLCJpc0VuYWJsZWQiLCJpc0tleWJvYXJkRm9jdXNhYmxlIiwiY2xhc3NOYW1lIiwiaW5jbHVkZXMiLCJ3YWl0Rm9yVGltZW91dCIsImUiLCJPeEVycm9yIiwiZXJySGVscGVyIiwiZXJyb3JDb2RlIiwiRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL294X21vZHVsZXMvbW9kdWxlLXdpbi9jb21tYW5kcy93YWl0Rm9ySW50ZXJhY3RhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBzdW1tYXJ5IFdhaXRzIGZvciBlbGVtZW50IHRvIGJlY29tZSBpbnRlcmFjdGFibGUuXHJcbiAqIEBmdW5jdGlvbiB3YWl0Rm9ySW50ZXJhY3RhYmxlXHJcbiAqIEBwYXJhbSB7U3RyaW5nfEVsZW1lbnR9IGxvY2F0b3IgLSBBbiBlbGVtZW50IGxvY2F0b3IuXHJcbiAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gKiB3aW4uaW5pdCgpOy8vT3BlbnMgYnJvd3NlciBzZXNzaW9uLlxyXG4gKiB3aW4ud2FpdEZvckludGVyYWN0YWJsZShcImlkPVVzZXJOYW1lXCIpOy8vV2FpdHMgZm9yIGFuIGVsZW1lbnQgaXMgY2xpY2thYmxlIGluIERPTS5cclxuICovXHJcbmNvbnN0IGludGVyYWN0YWJsZUNsYXNzTmFtZXMgPSBbJ0VkaXQnLCAnQnV0dG9uJ107XHJcbm1vZHVsZS5leHBvcnRzID0gYXN5bmMgZnVuY3Rpb24obG9jYXRvciwgdGltZW91dCkge1xyXG4gICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgY29uc3QgZWwgPSBhd2FpdCB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudChsb2NhdG9yLCBmYWxzZSwgdGltZW91dCk7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNDb250cm9sRWxlbWVudCA9IGF3YWl0IGVsLmdldEF0dHJpYnV0ZSgnSXNDb250cm9sRWxlbWVudCcpO1xyXG4gICAgICAgICAgICBjb25zdCBpc0VuYWJsZWQgPSBhd2FpdCBlbC5nZXRBdHRyaWJ1dGUoJ0lzRW5hYmxlZCcpO1xyXG4gICAgICAgICAgICBjb25zdCBpc0tleWJvYXJkRm9jdXNhYmxlID0gYXdhaXQgZWwuZ2V0QXR0cmlidXRlKCdJc0tleWJvYXJkRm9jdXNhYmxlJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGF3YWl0IGVsLmdldEF0dHJpYnV0ZSgnQ2xhc3NOYW1lJyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gKGlzQ29udHJvbEVsZW1lbnQgfHwgaXNFbmFibGVkIHx8IGlzS2V5Ym9hcmRGb2N1c2FibGUgfHwgaW50ZXJhY3RhYmxlQ2xhc3NOYW1lcy5pbmNsdWRlcyhjbGFzc05hbWUpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgdGltZW91dDogKHRpbWVvdXQgPyB0aW1lb3V0IDogdGhpcy53YWl0Rm9yVGltZW91dCkgfSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IHRoaXMuT3hFcnJvcih0aGlzLmVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFLCBgRWxlbWVudCAke2xvY2F0b3J9IGlzIG5vdCBpbnRlcmFjdGFibGVgKTtcclxuICAgIH1cclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1BLHNCQUFzQixHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztBQUNqREMsTUFBTSxDQUFDQyxPQUFPLEdBQUcsZ0JBQWVDLE9BQU8sRUFBRUMsT0FBTyxFQUFFO0VBQzlDLElBQUksQ0FBQ0MsT0FBTyxDQUFDQyxxQkFBcUIsQ0FBQ0YsT0FBTyxFQUFFLFNBQVMsQ0FBQztFQUN0RCxNQUFNRyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUNGLE9BQU8sQ0FBQ0csVUFBVSxDQUFDTCxPQUFPLEVBQUUsS0FBSyxFQUFFQyxPQUFPLENBQUM7RUFDakUsSUFBSTtJQUNBLE1BQU0sSUFBSSxDQUFDSyxNQUFNLENBQUNDLFNBQVMsQ0FBQyxZQUFXO01BQ25DLE1BQU1DLGdCQUFnQixHQUFHLE1BQU1KLEVBQUUsQ0FBQ0ssWUFBWSxDQUFDLGtCQUFrQixDQUFDO01BQ2xFLE1BQU1DLFNBQVMsR0FBRyxNQUFNTixFQUFFLENBQUNLLFlBQVksQ0FBQyxXQUFXLENBQUM7TUFDcEQsTUFBTUUsbUJBQW1CLEdBQUcsTUFBTVAsRUFBRSxDQUFDSyxZQUFZLENBQUMscUJBQXFCLENBQUM7TUFDeEUsTUFBTUcsU0FBUyxHQUFHLE1BQU1SLEVBQUUsQ0FBQ0ssWUFBWSxDQUFDLFdBQVcsQ0FBQztNQUVwRCxPQUFRRCxnQkFBZ0IsSUFBSUUsU0FBUyxJQUFJQyxtQkFBbUIsSUFBSWQsc0JBQXNCLENBQUNnQixRQUFRLENBQUNELFNBQVMsQ0FBQztJQUM5RyxDQUFDLEVBQ0Q7TUFBRVgsT0FBTyxFQUFHQSxPQUFPLEdBQUdBLE9BQU8sR0FBRyxJQUFJLENBQUNhO0lBQWdCLENBQUMsQ0FBQztFQUMzRCxDQUFDLENBQUMsT0FBT0MsQ0FBQyxFQUFFO0lBQ1IsTUFBTSxJQUFJLElBQUksQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxTQUFTLENBQUNDLHdCQUF3QixFQUFHLFdBQVVuQixPQUFRLHNCQUFxQixDQUFDO0VBQ3ZIO0FBQ0osQ0FBQyJ9
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
|
-
|
|
5
4
|
/*
|
|
6
5
|
* Copyright (C) 2015-present CloudBeat Limited
|
|
7
6
|
*
|
|
@@ -21,4 +20,4 @@ module.exports = async function (locator, timeout) {
|
|
|
21
20
|
this.helpers.assertArgumentTimeout(timeout, 'timeout');
|
|
22
21
|
await this.helpers.getElement(locator, true, timeout);
|
|
23
22
|
};
|
|
24
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibG9jYXRvciIsInRpbWVvdXQiLCJoZWxwZXJzIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiZ2V0RWxlbWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13aW4vY29tbWFuZHMvd2FpdEZvclZpc2libGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQHN1bW1hcnkgV2FpdHMgZm9yIGVsZW1lbnQgdG8gYmVjb21lIHZpc2libGUuXHJcbiAqIEBmdW5jdGlvbiB3YWl0Rm9yVmlzaWJsZVxyXG4gKiBAcGFyYW0ge1N0cmluZ3xFbGVtZW50fSBsb2NhdG9yIC0gRWxlbWVudCBsb2NhdG9yLlxyXG4gKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgZWxlbWVudC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBhc3luYyBmdW5jdGlvbihsb2NhdG9yLCB0aW1lb3V0KSB7XHJcbiAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcbiAgICBhd2FpdCB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudChsb2NhdG9yLCB0cnVlLCB0aW1lb3V0KTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxnQkFBZUMsT0FBTyxFQUFFQyxPQUFPLEVBQUU7RUFDOUMsSUFBSSxDQUFDQyxPQUFPLENBQUNDLHFCQUFxQixDQUFDRixPQUFPLEVBQUUsU0FBUyxDQUFDO0VBQ3RELE1BQU0sSUFBSSxDQUFDQyxPQUFPLENBQUNFLFVBQVUsQ0FBQ0osT0FBTyxFQUFFLElBQUksRUFBRUMsT0FBTyxDQUFDO0FBQ3pELENBQUMifQ==
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
* the Free Software Foundation, either version 3 of the License, or
|
|
7
7
|
* (at your option) any later version.
|
|
8
8
|
*/
|
|
9
|
+
|
|
9
10
|
'use strict';
|
|
11
|
+
|
|
10
12
|
/**
|
|
11
13
|
* @name win
|
|
12
14
|
* @description Provides methods for Windows native applications automation.
|
|
@@ -24,39 +26,26 @@
|
|
|
24
26
|
* * `regex:PATTERN` - Match using regular expression.
|
|
25
27
|
* * `PATTERN` - Verbatim matching.
|
|
26
28
|
*/
|
|
27
|
-
|
|
28
29
|
Object.defineProperty(exports, "__esModule", {
|
|
29
30
|
value: true
|
|
30
31
|
});
|
|
31
32
|
exports.default = void 0;
|
|
32
|
-
|
|
33
33
|
require("source-map-support/register");
|
|
34
|
-
|
|
35
34
|
var _url = _interopRequireDefault(require("url"));
|
|
36
|
-
|
|
37
35
|
var wdio = _interopRequireWildcard(require("webdriverio"));
|
|
38
|
-
|
|
39
36
|
var _WebDriverModule = _interopRequireDefault(require("../core/WebDriverModule"));
|
|
40
|
-
|
|
41
37
|
var _utils = _interopRequireDefault(require("./utils"));
|
|
42
|
-
|
|
43
38
|
var _helper = _interopRequireDefault(require("../errors/helper"));
|
|
44
|
-
|
|
45
39
|
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
46
|
-
|
|
47
40
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
48
|
-
|
|
49
41
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
50
|
-
|
|
51
42
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
52
|
-
|
|
53
43
|
const MODULE_NAME = 'win';
|
|
54
44
|
const DEFAULT_APPIUM_URL = 'http://localhost:4723/wd/hub';
|
|
55
45
|
const DEFAULT_APP = 'Root';
|
|
56
46
|
const NO_SCREENSHOT_COMMANDS = ['init', 'assertAlert'];
|
|
57
47
|
const ACTION_COMMANDS = ['open', 'tap', 'click', 'swipe', 'submit', 'setValue'];
|
|
58
48
|
const DEFAULT_WAIT_TIMEOUT = 60 * 1000; // default 60s wait timeout
|
|
59
|
-
|
|
60
49
|
const WINDOWS_STANDARD_APP_IDS = {
|
|
61
50
|
Calculator: 'Microsoft.WindowsCalculator_8wekyb3d8bbwe!App',
|
|
62
51
|
AlarmClock: 'Microsoft.WindowsAlarms_8wekyb3d8bbwe!App',
|
|
@@ -65,7 +54,6 @@ const WINDOWS_STANDARD_APP_IDS = {
|
|
|
65
54
|
Paint3D: 'Microsoft.MSPaint_8wekyb3d8bbwe!Microsoft.MSPaint',
|
|
66
55
|
StickyNotes: 'Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe!App'
|
|
67
56
|
};
|
|
68
|
-
|
|
69
57
|
class WindowsModule extends _WebDriverModule.default {
|
|
70
58
|
constructor(options, context, rs, logger, modules, services) {
|
|
71
59
|
super(options, context, rs, logger, modules, services);
|
|
@@ -73,47 +61,41 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
73
61
|
this.lastNavigationStartTime = null;
|
|
74
62
|
this.networkRequests = null;
|
|
75
63
|
this.helpers = {};
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
64
|
+
this._loadHelperFunctions();
|
|
65
|
+
// support backward compatibility (some module commands might refer to this.OxError and this.errHelper)
|
|
80
66
|
this.OxError = _OxygenError.default;
|
|
81
|
-
this.errHelper = _helper.default;
|
|
82
|
-
|
|
67
|
+
this.errHelper = _helper.default;
|
|
68
|
+
// holds element operation timeout value
|
|
83
69
|
this.waitForTimeout = DEFAULT_WAIT_TIMEOUT;
|
|
84
70
|
}
|
|
85
|
-
|
|
86
71
|
get name() {
|
|
87
72
|
return MODULE_NAME;
|
|
88
73
|
}
|
|
74
|
+
|
|
89
75
|
/**
|
|
90
76
|
* @function getDriver
|
|
91
77
|
* @summary Returns the underlying WDIO driver.
|
|
92
78
|
* @return {Object} WDIO driver.
|
|
93
79
|
*/
|
|
94
|
-
|
|
95
|
-
|
|
96
80
|
getDriver() {
|
|
97
81
|
return super.getDriver();
|
|
98
82
|
}
|
|
83
|
+
|
|
99
84
|
/**
|
|
100
85
|
* @function getCapabilities
|
|
101
86
|
* @summary Returns currently defined capabilities.
|
|
102
87
|
* @return {Object} Current capabilities object.
|
|
103
88
|
*/
|
|
104
|
-
|
|
105
|
-
|
|
106
89
|
getCapabilities() {
|
|
107
90
|
return this.caps || super.getCapabilities();
|
|
108
91
|
}
|
|
92
|
+
|
|
109
93
|
/**
|
|
110
94
|
* @function init
|
|
111
95
|
* @summary Initializes a new Appium session.
|
|
112
96
|
* @param {String=} caps - Desired capabilities. If not specified capabilities will be taken from suite definition.
|
|
113
97
|
* @param {String=} appiumUrl - Remote Appium server URL (default: http://localhost:4723/wd/hub).
|
|
114
98
|
*/
|
|
115
|
-
|
|
116
|
-
|
|
117
99
|
async init(caps, appiumUrl) {
|
|
118
100
|
// if reopenSession is true - reinitilize the module
|
|
119
101
|
if (this.isInitialized) {
|
|
@@ -125,64 +107,57 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
125
107
|
} else {
|
|
126
108
|
this.logger.debug('mob.init was called for already initialized module. reopenSession is false so the call is ignored.');
|
|
127
109
|
}
|
|
128
|
-
|
|
129
110
|
return;
|
|
130
111
|
}
|
|
131
|
-
|
|
132
112
|
if (!appiumUrl) {
|
|
133
113
|
appiumUrl = this.options.appiumUrl || DEFAULT_APPIUM_URL;
|
|
134
|
-
}
|
|
135
|
-
|
|
114
|
+
}
|
|
136
115
|
|
|
116
|
+
// merge capabilities from context and from init function argument, give preference to context-passed capabilities
|
|
137
117
|
this.caps = {};
|
|
138
|
-
|
|
139
118
|
if (this.ctx.caps) {
|
|
140
|
-
this.caps = {
|
|
119
|
+
this.caps = {
|
|
120
|
+
...this.ctx.caps
|
|
141
121
|
};
|
|
142
122
|
}
|
|
143
|
-
|
|
144
123
|
if (caps) {
|
|
145
|
-
this.caps = {
|
|
124
|
+
this.caps = {
|
|
125
|
+
...this.caps,
|
|
146
126
|
...caps
|
|
147
127
|
};
|
|
148
|
-
}
|
|
149
|
-
|
|
128
|
+
}
|
|
150
129
|
|
|
130
|
+
// make sure 'app' capability is provided (mandatory for WinAppDriver)
|
|
151
131
|
if (!this.caps.app) {
|
|
152
132
|
this.caps.app = DEFAULT_APP;
|
|
153
133
|
} else {
|
|
154
|
-
const appCapVal = this.caps.app;
|
|
155
|
-
|
|
134
|
+
const appCapVal = this.caps.app;
|
|
135
|
+
// try to resolve 'app' value in the Windows standard app list
|
|
156
136
|
const appNames = Object.keys(WINDOWS_STANDARD_APP_IDS);
|
|
157
|
-
|
|
158
137
|
if (appNames.includes(appCapVal)) {
|
|
159
138
|
this.caps.app = WINDOWS_STANDARD_APP_IDS[appCapVal];
|
|
160
139
|
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
|
|
140
|
+
}
|
|
141
|
+
// set default platformName for WinAppDriver
|
|
164
142
|
if (!this.caps.platformName) {
|
|
165
143
|
this.caps.platformName = 'Windows';
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
|
|
144
|
+
}
|
|
145
|
+
// set default deviceName for WinAppDriver
|
|
169
146
|
if (!this.caps.deviceName) {
|
|
170
147
|
this.caps.deviceName = 'WindowsPC';
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
|
|
148
|
+
}
|
|
149
|
+
// set default platformVersion for WinAppDriver
|
|
174
150
|
if (!this.caps.platformVersion) {
|
|
175
151
|
this.caps.platformVersion = '1.0';
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
|
|
152
|
+
}
|
|
153
|
+
// populate WDIO options
|
|
179
154
|
const url = _url.default.parse(appiumUrl);
|
|
180
|
-
|
|
181
155
|
const protocol = url.protocol.replace(/:$/, '');
|
|
182
156
|
const host = url.hostname;
|
|
183
157
|
const port = parseInt(url.port || (protocol === 'https' ? 443 : 80));
|
|
184
|
-
const path = url.pathname;
|
|
158
|
+
const path = url.pathname;
|
|
185
159
|
|
|
160
|
+
// auth is needed mostly for cloud providers such as LambdaTest
|
|
186
161
|
if (url.auth) {
|
|
187
162
|
const auth = url.auth.split(':');
|
|
188
163
|
this.options.wdioOpts = {
|
|
@@ -190,8 +165,8 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
190
165
|
key: auth[1]
|
|
191
166
|
};
|
|
192
167
|
}
|
|
193
|
-
|
|
194
|
-
|
|
168
|
+
var wdioOpts = {
|
|
169
|
+
...(this.options.wdioOpts || {}),
|
|
195
170
|
protocol: protocol,
|
|
196
171
|
hostname: host,
|
|
197
172
|
port: port,
|
|
@@ -204,39 +179,34 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
204
179
|
connectionRetryTimeout: 310 * 1000,
|
|
205
180
|
connectionRetryCount: 1
|
|
206
181
|
};
|
|
207
|
-
|
|
208
182
|
try {
|
|
209
183
|
this.driver = await wdio.remote(wdioOpts);
|
|
210
|
-
|
|
211
184
|
if (this.options.seleniumBrowserTimeout) {
|
|
212
185
|
this.driver.seleniumBrowserTimeout = this.options.seleniumBrowserTimeout;
|
|
213
186
|
}
|
|
214
|
-
|
|
215
187
|
if (this.options.seleniumTimeout) {
|
|
216
188
|
this.driver.seleniumTimeout = this.options.seleniumTimeout;
|
|
217
189
|
}
|
|
218
190
|
} catch (e) {
|
|
219
191
|
throw _helper.default.getAppiumInitError(e);
|
|
220
192
|
}
|
|
221
|
-
|
|
222
193
|
await this.driver.setTimeout({
|
|
223
194
|
'implicit': this.waitForTimeout
|
|
224
195
|
});
|
|
225
196
|
super.init(this.driver);
|
|
226
197
|
}
|
|
198
|
+
|
|
227
199
|
/**
|
|
228
200
|
* @function dispose
|
|
229
201
|
* @summary Ends the current session.
|
|
230
202
|
*/
|
|
231
|
-
|
|
232
|
-
|
|
233
203
|
async dispose(status) {
|
|
234
204
|
status = status.toUpperCase();
|
|
235
|
-
|
|
236
205
|
if (this.driver && this.isInitialized) {
|
|
237
206
|
try {
|
|
238
207
|
if (!['CANCELED', 'FAILED'].includes(status)) {
|
|
239
|
-
if (this.seleniumSessionTimeout) {
|
|
208
|
+
if (this.seleniumSessionTimeout) {
|
|
209
|
+
// ignore
|
|
240
210
|
// deleteSession will take 5 min to call
|
|
241
211
|
} else {
|
|
242
212
|
await this.driver.deleteSession();
|
|
@@ -251,6 +221,7 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
251
221
|
super.dispose();
|
|
252
222
|
}
|
|
253
223
|
}
|
|
224
|
+
|
|
254
225
|
/**
|
|
255
226
|
* @summary Opens new transaction.
|
|
256
227
|
* @description The transaction will persist till a new one is opened. Transaction names must be
|
|
@@ -258,20 +229,17 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
258
229
|
* @function transaction
|
|
259
230
|
* @param {String} name - The transaction name.
|
|
260
231
|
*/
|
|
261
|
-
|
|
262
|
-
|
|
263
232
|
transaction(name) {
|
|
264
233
|
global._lastTransactionName = name;
|
|
265
234
|
}
|
|
235
|
+
|
|
266
236
|
/*
|
|
267
237
|
* Private
|
|
268
238
|
*/
|
|
269
239
|
|
|
270
|
-
|
|
271
240
|
_isAction(name) {
|
|
272
241
|
return ACTION_COMMANDS.includes(name);
|
|
273
242
|
}
|
|
274
|
-
|
|
275
243
|
_takeScreenshotSilent(name) {
|
|
276
244
|
if (!NO_SCREENSHOT_COMMANDS.includes(name)) {
|
|
277
245
|
try {
|
|
@@ -279,22 +247,23 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
279
247
|
return this.driver.takeScreenshot();
|
|
280
248
|
}
|
|
281
249
|
} catch (e) {
|
|
282
|
-
this.logger.error('Cannot get screenshot', e);
|
|
250
|
+
this.logger.error('Cannot get screenshot', e);
|
|
251
|
+
// ignore
|
|
283
252
|
}
|
|
284
253
|
}
|
|
285
|
-
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// _getLogs(name) {
|
|
286
257
|
// if (!NO_LOGS_COMMANDS.includes(name)) {
|
|
287
258
|
// return this.getLogs();
|
|
288
259
|
// }
|
|
289
260
|
// }
|
|
290
261
|
|
|
291
|
-
|
|
292
262
|
_adjustAppiumLog(log, src) {
|
|
293
263
|
if (!log || typeof log !== 'object') {
|
|
294
264
|
return null;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
|
|
265
|
+
}
|
|
266
|
+
// TODO: convert log.timestamp from the device time zone to the local one (so we can later correlate between steps and logs)
|
|
298
267
|
return {
|
|
299
268
|
time: log.timestamp,
|
|
300
269
|
msg: log.message,
|
|
@@ -302,30 +271,26 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
302
271
|
src: src
|
|
303
272
|
};
|
|
304
273
|
}
|
|
305
|
-
|
|
306
274
|
_iterationStart() {
|
|
307
275
|
// clear transaction name saved in previous iteration if any
|
|
308
276
|
global._lastTransactionName = null;
|
|
309
277
|
}
|
|
310
|
-
|
|
311
278
|
_iterationEnd(error) {
|
|
312
279
|
if (error && error.type === _helper.default.errorCode.SELENIUM_SESSION_TIMEOUT) {
|
|
313
280
|
this.seleniumSessionTimeout = true;
|
|
314
281
|
return;
|
|
315
282
|
} else {
|
|
316
283
|
this.seleniumSessionTimeout = false;
|
|
317
|
-
}
|
|
318
|
-
|
|
284
|
+
}
|
|
319
285
|
|
|
286
|
+
// ignore the rest if mob module is not initialized
|
|
320
287
|
if (!this.isInitialized) {
|
|
321
288
|
return;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
|
|
289
|
+
}
|
|
290
|
+
// collect all Appium logs for this session
|
|
325
291
|
if (this.options.collectAppiumLogs) {
|
|
326
292
|
try {
|
|
327
293
|
const logs = this.getAppiumLogs();
|
|
328
|
-
|
|
329
294
|
if (logs && Array.isArray(logs)) {
|
|
330
295
|
for (var logEntry of logs) {
|
|
331
296
|
this.rs.logs.push(this._adjustAppiumLog(logEntry, 'appium'));
|
|
@@ -337,12 +302,10 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
337
302
|
}
|
|
338
303
|
}
|
|
339
304
|
}
|
|
340
|
-
|
|
341
305
|
_getWdioLocator(locator) {
|
|
342
306
|
if (!locator) throw new _OxygenError.default(_helper.default.errorCode.SCRIPT_ERROR, 'Invalid argument - locator not specified');else if (typeof locator === 'object') return locator;else if (locator.indexOf('/') === 0) return locator;else if (locator.indexOf('id=') === 0) return `//*[@id="${locator.substr('id='.length)}"]`;else if (locator.indexOf('name=') === 0) return '[name="' + locator.substr('name='.length) + '"]';
|
|
343
307
|
return locator;
|
|
344
308
|
}
|
|
345
|
-
|
|
346
309
|
_loadHelperFunctions() {
|
|
347
310
|
this.helpers.getWdioLocator = this._getWdioLocator;
|
|
348
311
|
this.helpers.matchPattern = _utils.default.matchPattern;
|
|
@@ -360,8 +323,6 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
360
323
|
this.helpers.assertArgumentBoolOptional = _utils.default.assertArgumentBoolOptional;
|
|
361
324
|
this.helpers.assertArgumentTimeout = _utils.default.assertArgumentTimeout;
|
|
362
325
|
}
|
|
363
|
-
|
|
364
326
|
}
|
|
365
|
-
|
|
366
327
|
exports.default = WindowsModule;
|
|
367
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13aW4uanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0FQUCIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldJTkRPV1NfU1RBTkRBUkRfQVBQX0lEUyIsIkNhbGN1bGF0b3IiLCJBbGFybUNsb2NrIiwiTm90ZXBhZCIsIlBhaW50IiwiUGFpbnQzRCIsIlN0aWNreU5vdGVzIiwiV2luZG93c01vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0IiwiYXBwaXVtVXJsIiwiaXNJbml0aWFsaXplZCIsInJlb3BlblNlc3Npb24iLCJkZWJ1ZyIsImRyaXZlciIsInJlbG9hZFNlc3Npb24iLCJfaXNJbml0aWFsaXplZCIsImN0eCIsImFwcCIsImFwcENhcFZhbCIsImFwcE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImluY2x1ZGVzIiwicGxhdGZvcm1OYW1lIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5IiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsIndkaW8iLCJyZW1vdGUiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiZSIsImdldEFwcGl1bUluaXRFcnJvciIsInNldFRpbWVvdXQiLCJkaXNwb3NlIiwic3RhdHVzIiwidG9VcHBlckNhc2UiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0IiwiZGVsZXRlU2Vzc2lvbiIsIndhcm4iLCJ0cmFuc2FjdGlvbiIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiX2lzQWN0aW9uIiwiX3Rha2VTY3JlZW5zaG90U2lsZW50IiwidGFrZVNjcmVlbnNob3QiLCJlcnJvciIsIl9hZGp1c3RBcHBpdW1Mb2ciLCJsb2ciLCJzcmMiLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibWVzc2FnZSIsImxldmVsIiwiX2l0ZXJhdGlvblN0YXJ0IiwiX2l0ZXJhdGlvbkVuZCIsInR5cGUiLCJlcnJvckhlbHBlciIsImVycm9yQ29kZSIsIlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCIsImNvbGxlY3RBcHBpdW1Mb2dzIiwibG9ncyIsImdldEFwcGl1bUxvZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJsb2dFbnRyeSIsInB1c2giLCJfZ2V0V2Rpb0xvY2F0b3IiLCJsb2NhdG9yIiwiU0NSSVBUX0VSUk9SIiwiaW5kZXhPZiIsInN1YnN0ciIsImxlbmd0aCIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwibW9kVXRpbHMiLCJnZXRFbGVtZW50IiwiZ2V0RWxlbWVudHMiLCJnZXRDaGlsZEVsZW1lbnQiLCJnZXRDaGlsZEVsZW1lbnRzIiwic2V0VGltZW91dEltcGxpY2l0IiwicmVzdG9yZVRpbWVvdXRJbXBsaWNpdCIsImFzc2VydEFyZ3VtZW50IiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFHQSxNQUFNQSxXQUFXLEdBQUcsS0FBcEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyw4QkFBM0I7QUFDQSxNQUFNQyxXQUFXLEdBQUcsTUFBcEI7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUFDLE1BQUQsRUFBUyxhQUFULENBQS9CO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLENBQUMsTUFBRCxFQUFRLEtBQVIsRUFBYyxPQUFkLEVBQXNCLE9BQXRCLEVBQThCLFFBQTlCLEVBQXVDLFVBQXZDLENBQXhCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsS0FBSyxJQUFsQyxDLENBQW1EOztBQUNuRCxNQUFNQyx3QkFBd0IsR0FBRztBQUM3QkMsRUFBQUEsVUFBVSxFQUFFLCtDQURpQjtBQUU3QkMsRUFBQUEsVUFBVSxFQUFFLDJDQUZpQjtBQUc3QkMsRUFBQUEsT0FBTyxFQUFFLG9DQUhvQjtBQUk3QkMsRUFBQUEsS0FBSyxFQUFFLG9DQUpzQjtBQUs3QkMsRUFBQUEsT0FBTyxFQUFFLG1EQUxvQjtBQU03QkMsRUFBQUEsV0FBVyxFQUFFO0FBTmdCLENBQWpDOztBQVNlLE1BQU1DLGFBQU4sU0FBNEJDLHdCQUE1QixDQUE0QztBQUN2REMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVVDLE9BQVYsRUFBbUJDLEVBQW5CLEVB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ZUFBeEM7QUFDQSxTQUFLckcsT0FBTCxDQUFhc0csZ0JBQWIsR0FBZ0NKLGVBQVNJLGdCQUF6QztBQUNBLFNBQUt0RyxPQUFMLENBQWF1RyxrQkFBYixHQUFrQ0wsZUFBU0ssa0JBQTNDO0FBQ0EsU0FBS3ZHLE9BQUwsQ0FBYXdHLHNCQUFiLEdBQXNDTixlQUFTTSxzQkFBL0M7QUFDQSxTQUFLeEcsT0FBTCxDQUFheUcsY0FBYixHQUE4QlAsZUFBU08sY0FBdkM7QUFDQSxTQUFLekcsT0FBTCxDQUFhMEcsNEJBQWIsR0FBNENSLGVBQVNRLDRCQUFyRDtBQUNBLFNBQUsxRyxPQUFMLENBQWEyRyxvQkFBYixHQUFvQ1QsZUFBU1Msb0JBQTdDO0FBQ0EsU0FBSzNHLE9BQUwsQ0FBYTRHLCtCQUFiLEdBQStDVixlQUFTVSwrQkFBeEQ7QUFDQSxTQUFLNUcsT0FBTCxDQUFhNkcsa0JBQWIsR0FBa0NYLGVBQVNXLGtCQUEzQztBQUNBLFNBQUs3RyxPQUFMLENBQWE4RywwQkFBYixHQUEwQ1osZUFBU1ksMEJBQW5EO0FBQ0EsU0FBSzlHLE9BQUwsQ0FBYStHLHFCQUFiLEdBQXFDYixlQUFTYSxxQkFBOUM7QUFDSDs7QUEvUnNEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSB3aW5cclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIFdpbmRvd3MgbmF0aXZlIGFwcGxpY2F0aW9ucyBhdXRvbWF0aW9uLlxyXG4gKiBAc2FtcGxlICoqTG9jYXRvcnM6KiogIFxyXG4gKiAgIFxyXG4gKiAgKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogICogYH5BY2Nlc3NpYmlsaXR5SWRgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBBY2Nlc3NpYmlsaXR5IElELiBBdHRyaWJ1dGUgbmFtZSBpbiBpbnNwZWN0LmV4ZSAtIEF1dG9tYXRpb25JZC5cclxuICogICogYG5hbWU9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIG5hbWUuIEF0dHJpYnV0ZSBuYW1lIGluIGluc3BlY3QuZXhlIC0gTmFtZS5cclxuICogICogYGlkPUlEYCAtICBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIElELiBBdHRyaWJ1dGUgbmFtZSBpbiBpbnNwZWN0LmV4ZSAtIFJ1bnRpbWVJRC4gIFxyXG4gKiAgXHJcbiAqICoqUGF0dGVybiBhcmd1bWVudHM6KipcclxuICogIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGEgc3RyaW5nIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlaXIgYXJndW1lbnRzLCBzdXBwb3J0IGZvbGxvd2luZyBwYXR0ZXJucyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogIFxyXG4gKiAgKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICAqIGBQQVRURVJOYCAtIFZlcmJhdGltIG1hdGNoaW5nLlxyXG4gKi9cclxuXHJcbmltcG9ydCBVUkwgZnJvbSAndXJsJztcclxuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XHJcbmltcG9ydCBXZWJEcml2ZXJNb2R1bGUgZnJvbSAnLi4vY29yZS9XZWJEcml2ZXJNb2R1bGUnO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ3dpbic7XHJcbmNvbnN0IERFRkFVTFRfQVBQSVVNX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViJztcclxuY29uc3QgREVGQVVMVF9BUFAgPSAnUm9vdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnXTtcclxuY29uc3QgQUNUSU9OX0NPTU1BTkRTID0gWydvcGVuJywndGFwJywnY2xpY2snLCdzd2lwZScsJ3N1Ym1pdCcsJ3NldFZhbHVlJ107XHJcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxyXG5jb25zdCBXSU5ET1dTX1NUQU5EQVJEX0FQUF9JRFMgPSB7XHJcbiAgICBDYWxjdWxhdG9yOiAnTWljcm9zb2Z0LldpbmRvd3NDYWxjdWxhdG9yXzh3ZWt5YjNkOGJid2UhQXBwJyxcclxuICAgIEFsYXJtQ2xvY2s6ICdNaWNyb3NvZnQuV2luZG93c0FsYXJtc184d2VreWIzZDhiYndlIUFwcCcsXHJcbiAgICBOb3RlcGFkOiAnQzpcXFxcV2luZG93c1xcXFxTeXN0ZW0zMlxcXFxub3RlcGFkLmV4ZScsXHJcbiAgICBQYWludDogJ0M6XFxcXFdpbmRvd3NcXFxcU3lzdGVtMzJcXFxcbXNwYWludC5leGUnLFxyXG4gICAgUGFpbnQzRDogJ01pY3Jvc29mdC5NU1BhaW50Xzh3ZWt5YjNkOGJid2UhTWljcm9zb2Z0Lk1TUGFpbnQnLFxyXG4gICAgU3RpY2t5Tm90ZXM6ICdNaWNyb3NvZnQuTWljcm9zb2Z0U3RpY2t5Tm90ZXNfOHdla3liM2Q4YmJ3ZSFBcHAnXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaW5kb3dzTW9kdWxlIGV4dGVuZHMgV2ViRHJpdmVyTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0ge307XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5uZXR3b3JrUmVxdWVzdHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2xvYWRIZWxwZXJGdW5jdGlvbnMoKTtcclxuICAgICAgICAvLyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNvbWUgbW9kdWxlIGNvbW1hbmRzIG1pZ2h0IHJlZmVyIHRvIHRoaXMuT3hFcnJvciBhbmQgdGhpcy5lcnJIZWxwZXIpXHJcbiAgICAgICAgdGhpcy5PeEVycm9yID0gT3hFcnJvcjtcclxuICAgICAgICB0aGlzLmVyckhlbHBlciA9IGVyckhlbHBlcjtcclxuICAgICAgICAvLyBob2xkcyBlbGVtZW50IG9wZXJhdGlvbiB0aW1lb3V0IHZhbHVlXHJcbiAgICAgICAgdGhpcy53YWl0Rm9yVGltZW91dCA9IERFRkFVTFRfV0FJVF9USU1FT1VUO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgV0RJTyBkcml2ZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFdESU8gZHJpdmVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcml2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyaXZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBjdXJyZW50bHkgZGVmaW5lZCBjYXBhYmlsaXRpZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHMgfHwgc3VwZXIuZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgQXBwaXVtIHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNhcHMgLSBEZXNpcmVkIGNhcGFiaWxpdGllcy4gSWYgbm90IHNwZWNpZmllZCBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHN1aXRlIGRlZmluaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGFwcGl1bVVybCAtIFJlbW90ZSBBcHBpdW0gc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2FwcywgYXBwaXVtVXJsKSB7XHJcbiAgICAgICAgLy8gaWYgcmVvcGVuU2Vzc2lvbiBpcyB0cnVlIC0gcmVpbml0aWxpemUgdGhlIG1vZHVsZVxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZW9wZW5TZXNzaW9uICE9PSBmYWxzZSkgeyAvLyB0cnVlIG9yIGZhbHNlIGlmIGV4cGxpc2l0bHkgc2V0LiB0cnVlIG9uIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3Jlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlbG9hZGluZyB0aGUgc2Vzc2lvbi4uLicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIucmVsb2FkU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnbW9iLmluaXQgd2FzIGNhbGxlZCBmb3IgYWxyZWFkeSBpbml0aWFsaXplZCBtb2R1bGUuIHJlb3BlblNlc3Npb24gaXMgZmFsc2Ugc28gdGhlIGNhbGwgaXMgaWdub3JlZC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWFwcGl1bVVybCkge1xyXG4gICAgICAgICAgICBhcHBpdW1VcmwgPSB0aGlzLm9wdGlvbnMuYXBwaXVtVXJsIHx8IERFRkFVTFRfQVBQSVVNX1VSTDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1lcmdlIGNhcGFiaWxpdGllcyBmcm9tIGNvbnRleHQgYW5kIGZyb20gaW5pdCBmdW5jdGlvbiBhcmd1bWVudCwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGNvbnRleHQtcGFzc2VkIGNhcGFiaWxpdGllc1xyXG4gICAgICAgIHRoaXMuY2FwcyA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jdHguY2FwcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY2FwcywgLi4uY2FwcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbWFrZSBzdXJlICdhcHAnIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgKG1hbmRhdG9yeSBmb3IgV2luQXBwRHJpdmVyKVxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmFwcCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYXBwID0gREVGQVVMVF9BUFA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBhcHBDYXBWYWwgPSB0aGlzLmNhcHMuYXBwO1xyXG4gICAgICAgICAgICAvLyB0cnkgdG8gcmVzb2x2ZSAnYXBwJyB2YWx1ZSBpbiB0aGUgV2luZG93cyBzdGFuZGFyZCBhcHAgbGlzdFxyXG4gICAgICAgICAgICBjb25zdCBhcHBOYW1lcyA9IE9iamVjdC5rZXlzKFdJTkRPV1NfU1RBTkRBUkRfQVBQX0lEUyk7XHJcbiAgICAgICAgICAgIGlmIChhcHBOYW1lcy5pbmNsdWRlcyhhcHBDYXBWYWwpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcHMuYXBwID0gV0lORE9XU19TVEFOREFSRF9BUFBfSURTW2FwcENhcFZhbF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgcGxhdGZvcm1OYW1lIGZvciBXaW5BcHBEcml2ZXJcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLnBsYXRmb3JtTmFtZSA9ICdXaW5kb3dzJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgZGV2aWNlTmFtZSBmb3IgV2luQXBwRHJpdmVyXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuZGV2aWNlTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9ICdXaW5kb3dzUEMnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBwbGF0Zm9ybVZlcnNpb24gZm9yIFdpbkFwcERyaXZlclxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbikge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gJzEuMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHBvcHVsYXRlIFdESU8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5wYXJzZShhcHBpdW1VcmwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyID0gYXdhaXQgd2Rpby5yZW1vdGUod2Rpb09wdHMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVyckhlbHBlci5nZXRBcHBpdW1Jbml0RXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ2ltcGxpY2l0JzogdGhpcy53YWl0Rm9yVGltZW91dCB9KTtcclxuXHJcbiAgICAgICAgc3VwZXIuaW5pdCh0aGlzLmRyaXZlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxyXG4gICAgICogQHN1bW1hcnkgRW5kcyB0aGUgY3VycmVudCBzZXNzaW9uLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cykge1xyXG4gICAgICAgIHN0YXR1cyA9IHN0YXR1cy50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICghWydDQU5DRUxFRCcsICdGQUlMRUQnXS5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlU2Vzc2lvbiB3aWxsIHRha2UgNSBtaW4gdG8gY2FsbFxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0Vycm9yIGRpc3Bvc2luZyBkcml2ZXI6ICcgKyBlKTsgICAgLy8gaWdub3JlIGFueSBlcnJvcnMgYXQgZGlzcG9zYWwgc3RhZ2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdGlsbCBhIG5ldyBvbmUgaXMgb3BlbmVkLiBUcmFuc2FjdGlvbiBuYW1lcyBtdXN0IGJlXHJcbiAgICAgKiAgICAgICAgICAgICAgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICovXHJcbiAgICB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZVxyXG4gICAgICovXHJcblxyXG4gICAgX2lzQWN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU2NyZWVuc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlKTtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIF9nZXRMb2dzKG5hbWUpIHtcclxuICAgIC8vICAgICBpZiAoIU5PX0xPR1NfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9ncygpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBfYWRqdXN0QXBwaXVtTG9nKGxvZywgc3JjKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBkZXZpY2UgdGltZSB6b25lIHRvIHRoZSBsb2NhbCBvbmUgKHNvIHdlIGNhbiBsYXRlciBjb3JyZWxhdGUgYmV0d2VlbiBzdGVwcyBhbmQgbG9ncykgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwsXHJcbiAgICAgICAgICAgIHNyYzogc3JjXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWdub3JlIHRoZSByZXN0IGlmIG1vYiBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCBBcHBpdW0gbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QXBwaXVtTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IHRoaXMuZ2V0QXBwaXVtTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZ0VudHJ5IG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZ0VudHJ5LCAnYXBwaXVtJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBBcHBpdW0gbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcikge1xyXG4gICAgICAgIGlmICghbG9jYXRvcilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gbG9jYXRvciBub3Qgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGxvY2F0b3IgPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJy8nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGAvLypbQGlkPVwiJHtsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpfVwiXWA7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCduYW1lPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJ1tuYW1lPVwiJyArIGxvY2F0b3Iuc3Vic3RyKCduYW1lPScubGVuZ3RoKSArICdcIl0nO1xyXG5cclxuICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEhlbHBlckZ1bmN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSB0aGlzLl9nZXRXZGlvTG9jYXRvcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuID0gbW9kVXRpbHMubWF0Y2hQYXR0ZXJuO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0RWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5yZXN0b3JlVGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXI7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dDtcclxuICAgIH1cclxufVxyXG5cclxuIl19
|
|
328
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIkRFRkFVTFRfQVBQSVVNX1VSTCIsIkRFRkFVTFRfQVBQIiwiTk9fU0NSRUVOU0hPVF9DT01NQU5EUyIsIkFDVElPTl9DT01NQU5EUyIsIkRFRkFVTFRfV0FJVF9USU1FT1VUIiwiV0lORE9XU19TVEFOREFSRF9BUFBfSURTIiwiQ2FsY3VsYXRvciIsIkFsYXJtQ2xvY2siLCJOb3RlcGFkIiwiUGFpbnQiLCJQYWludDNEIiwiU3RpY2t5Tm90ZXMiLCJXaW5kb3dzTW9kdWxlIiwiV2ViRHJpdmVyTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwidHJhbnNhY3Rpb25zIiwibGFzdE5hdmlnYXRpb25TdGFydFRpbWUiLCJuZXR3b3JrUmVxdWVzdHMiLCJoZWxwZXJzIiwiX2xvYWRIZWxwZXJGdW5jdGlvbnMiLCJPeEVycm9yIiwiZXJySGVscGVyIiwid2FpdEZvclRpbWVvdXQiLCJuYW1lIiwiZ2V0RHJpdmVyIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiY2FwcyIsImluaXQiLCJhcHBpdW1VcmwiLCJpc0luaXRpYWxpemVkIiwicmVvcGVuU2Vzc2lvbiIsImRlYnVnIiwiZHJpdmVyIiwicmVsb2FkU2Vzc2lvbiIsIl9pc0luaXRpYWxpemVkIiwiY3R4IiwiYXBwIiwiYXBwQ2FwVmFsIiwiYXBwTmFtZXMiLCJPYmplY3QiLCJrZXlzIiwiaW5jbHVkZXMiLCJwbGF0Zm9ybU5hbWUiLCJkZXZpY2VOYW1lIiwicGxhdGZvcm1WZXJzaW9uIiwidXJsIiwiVVJMIiwicGFyc2UiLCJwcm90b2NvbCIsInJlcGxhY2UiLCJob3N0IiwiaG9zdG5hbWUiLCJwb3J0IiwicGFyc2VJbnQiLCJwYXRoIiwicGF0aG5hbWUiLCJhdXRoIiwic3BsaXQiLCJ3ZGlvT3B0cyIsInVzZXIiLCJrZXkiLCJjYXBhYmlsaXRpZXMiLCJsb2dMZXZlbCIsInJ1bm5lciIsIndhaXRmb3JUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5VGltZW91dCIsImNvbm5lY3Rpb25SZXRyeUNvdW50Iiwid2RpbyIsInJlbW90ZSIsInNlbGVuaXVtQnJvd3NlclRpbWVvdXQiLCJzZWxlbml1bVRpbWVvdXQiLCJlIiwiZ2V0QXBwaXVtSW5pdEVycm9yIiwic2V0VGltZW91dCIsImRpc3Bvc2UiLCJzdGF0dXMiLCJ0b1VwcGVyQ2FzZSIsInNlbGVuaXVtU2Vzc2lvblRpbWVvdXQiLCJkZWxldGVTZXNzaW9uIiwid2FybiIsInRyYW5zYWN0aW9uIiwiZ2xvYmFsIiwiX2xhc3RUcmFuc2FjdGlvbk5hbWUiLCJfaXNBY3Rpb24iLCJfdGFrZVNjcmVlbnNob3RTaWxlbnQiLCJ0YWtlU2NyZWVuc2hvdCIsImVycm9yIiwiX2FkanVzdEFwcGl1bUxvZyIsImxvZyIsInNyYyIsInRpbWUiLCJ0aW1lc3RhbXAiLCJtc2ciLCJtZXNzYWdlIiwibGV2ZWwiLCJfaXRlcmF0aW9uU3RhcnQiLCJfaXRlcmF0aW9uRW5kIiwidHlwZSIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIiwiY29sbGVjdEFwcGl1bUxvZ3MiLCJsb2dzIiwiZ2V0QXBwaXVtTG9ncyIsIkFycmF5IiwiaXNBcnJheSIsImxvZ0VudHJ5IiwicHVzaCIsIl9nZXRXZGlvTG9jYXRvciIsImxvY2F0b3IiLCJTQ1JJUFRfRVJST1IiLCJpbmRleE9mIiwic3Vic3RyIiwibGVuZ3RoIiwiZ2V0V2Rpb0xvY2F0b3IiLCJtYXRjaFBhdHRlcm4iLCJtb2RVdGlscyIsImdldEVsZW1lbnQiLCJnZXRFbGVtZW50cyIsImdldENoaWxkRWxlbWVudCIsImdldENoaWxkRWxlbWVudHMiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfbW9kdWxlcy9tb2R1bGUtd2luLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgd2luXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBXaW5kb3dzIG5hdGl2ZSBhcHBsaWNhdGlvbnMgYXV0b21hdGlvbi5cclxuICogQHNhbXBsZSAqKkxvY2F0b3JzOioqICBcclxuICogICBcclxuICogICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICAqIGB+QWNjZXNzaWJpbGl0eUlkYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgQWNjZXNzaWJpbGl0eSBJRC4gQXR0cmlidXRlIG5hbWUgaW4gaW5zcGVjdC5leGUgLSBBdXRvbWF0aW9uSWQuXHJcbiAqICAqIGBuYW1lPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBuYW1lLiBBdHRyaWJ1dGUgbmFtZSBpbiBpbnNwZWN0LmV4ZSAtIE5hbWUuXHJcbiAqICAqIGBpZD1JRGAgLSAgTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRC4gQXR0cmlidXRlIG5hbWUgaW4gaW5zcGVjdC5leGUgLSBSdW50aW1lSUQuICBcclxuICogIFxyXG4gKiAqKlBhdHRlcm4gYXJndW1lbnRzOioqXHJcbiAqICBcclxuICogIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqICBcclxuICogICogYHJlZ2V4OlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAgKiBgUEFUVEVSTmAgLSBWZXJiYXRpbSBtYXRjaGluZy5cclxuICovXHJcblxyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd3aW4nO1xyXG5jb25zdCBERUZBVUxUX0FQUElVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQVBQID0gJ1Jvb3QnO1xyXG5jb25zdCBOT19TQ1JFRU5TSE9UX0NPTU1BTkRTID0gWydpbml0JywgJ2Fzc2VydEFsZXJ0J107XHJcbmNvbnN0IEFDVElPTl9DT01NQU5EUyA9IFsnb3BlbicsJ3RhcCcsJ2NsaWNrJywnc3dpcGUnLCdzdWJtaXQnLCdzZXRWYWx1ZSddO1xyXG5jb25zdCBERUZBVUxUX1dBSVRfVElNRU9VVCA9IDYwICogMTAwMDsgICAgICAgICAgICAvLyBkZWZhdWx0IDYwcyB3YWl0IHRpbWVvdXRcclxuY29uc3QgV0lORE9XU19TVEFOREFSRF9BUFBfSURTID0ge1xyXG4gICAgQ2FsY3VsYXRvcjogJ01pY3Jvc29mdC5XaW5kb3dzQ2FsY3VsYXRvcl84d2VreWIzZDhiYndlIUFwcCcsXHJcbiAgICBBbGFybUNsb2NrOiAnTWljcm9zb2Z0LldpbmRvd3NBbGFybXNfOHdla3liM2Q4YmJ3ZSFBcHAnLFxyXG4gICAgTm90ZXBhZDogJ0M6XFxcXFdpbmRvd3NcXFxcU3lzdGVtMzJcXFxcbm90ZXBhZC5leGUnLFxyXG4gICAgUGFpbnQ6ICdDOlxcXFxXaW5kb3dzXFxcXFN5c3RlbTMyXFxcXG1zcGFpbnQuZXhlJyxcclxuICAgIFBhaW50M0Q6ICdNaWNyb3NvZnQuTVNQYWludF84d2VreWIzZDhiYndlIU1pY3Jvc29mdC5NU1BhaW50JyxcclxuICAgIFN0aWNreU5vdGVzOiAnTWljcm9zb2Z0Lk1pY3Jvc29mdFN0aWNreU5vdGVzXzh3ZWt5YjNkOGJid2UhQXBwJ1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2luZG93c01vZHVsZSBleHRlbmRzIFdlYkRyaXZlck1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubmV0d29ya1JlcXVlc3RzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMgPSB7fTtcclxuICAgICAgICB0aGlzLl9sb2FkSGVscGVyRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgLy8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IChzb21lIG1vZHVsZSBjb21tYW5kcyBtaWdodCByZWZlciB0byB0aGlzLk94RXJyb3IgYW5kIHRoaXMuZXJySGVscGVyKVxyXG4gICAgICAgIHRoaXMuT3hFcnJvciA9IE94RXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJIZWxwZXIgPSBlcnJIZWxwZXI7XHJcbiAgICAgICAgLy8gaG9sZHMgZWxlbWVudCBvcGVyYXRpb24gdGltZW91dCB2YWx1ZVxyXG4gICAgICAgIHRoaXMud2FpdEZvclRpbWVvdXQgPSBERUZBVUxUX1dBSVRfVElNRU9VVDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0RHJpdmVyXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIFdESU8gZHJpdmVyLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBXRElPIGRyaXZlci5cclxuICAgICAqL1xyXG4gICAgZ2V0RHJpdmVyKCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXREcml2ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXRDYXBhYmlsaXRpZXNcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgY3VycmVudGx5IGRlZmluZWQgY2FwYWJpbGl0aWVzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldENhcGFiaWxpdGllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXBzIHx8IHN1cGVyLmdldENhcGFiaWxpdGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGluaXRcclxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IEFwcGl1bSBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBjYXBzIC0gRGVzaXJlZCBjYXBhYmlsaXRpZXMuIElmIG5vdCBzcGVjaWZpZWQgY2FwYWJpbGl0aWVzIHdpbGwgYmUgdGFrZW4gZnJvbSBzdWl0ZSBkZWZpbml0aW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBhcHBpdW1VcmwgLSBSZW1vdGUgQXBwaXVtIHNlcnZlciBVUkwgKGRlZmF1bHQ6IGh0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWIpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KGNhcHMsIGFwcGl1bVVybCkge1xyXG4gICAgICAgIC8vIGlmIHJlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlaW5pdGlsaXplIHRoZSBtb2R1bGVcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVvcGVuU2Vzc2lvbiAhPT0gZmFsc2UpIHsgLy8gdHJ1ZSBvciBmYWxzZSBpZiBleHBsaXNpdGx5IHNldC4gdHJ1ZSBvbiBudWxsIG9yIHVuZGVmaW5lZC5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdyZW9wZW5TZXNzaW9uIGlzIHRydWUgLSByZWxvYWRpbmcgdGhlIHNlc3Npb24uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnJlbG9hZFNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ21vYi5pbml0IHdhcyBjYWxsZWQgZm9yIGFscmVhZHkgaW5pdGlhbGl6ZWQgbW9kdWxlLiByZW9wZW5TZXNzaW9uIGlzIGZhbHNlIHNvIHRoZSBjYWxsIGlzIGlnbm9yZWQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFhcHBpdW1VcmwpIHtcclxuICAgICAgICAgICAgYXBwaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybCB8fCBERUZBVUxUX0FQUElVTV9VUkw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcclxuICAgICAgICB0aGlzLmNhcHMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5jdHguY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSAnYXBwJyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIChtYW5kYXRvcnkgZm9yIFdpbkFwcERyaXZlcilcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5hcHApIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmFwcCA9IERFRkFVTFRfQVBQO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYXBwQ2FwVmFsID0gdGhpcy5jYXBzLmFwcDtcclxuICAgICAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgJ2FwcCcgdmFsdWUgaW4gdGhlIFdpbmRvd3Mgc3RhbmRhcmQgYXBwIGxpc3RcclxuICAgICAgICAgICAgY29uc3QgYXBwTmFtZXMgPSBPYmplY3Qua2V5cyhXSU5ET1dTX1NUQU5EQVJEX0FQUF9JRFMpO1xyXG4gICAgICAgICAgICBpZiAoYXBwTmFtZXMuaW5jbHVkZXMoYXBwQ2FwVmFsKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzLmFwcCA9IFdJTkRPV1NfU1RBTkRBUkRfQVBQX0lEU1thcHBDYXBWYWxdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IHBsYXRmb3JtTmFtZSBmb3IgV2luQXBwRHJpdmVyXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMucGxhdGZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUgPSAnV2luZG93cyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IGRldmljZU5hbWUgZm9yIFdpbkFwcERyaXZlclxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmRldmljZU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSAnV2luZG93c1BDJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgcGxhdGZvcm1WZXJzaW9uIGZvciBXaW5BcHBEcml2ZXJcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbiA9ICcxLjAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB1cmwgPSBVUkwucGFyc2UoYXBwaXVtVXJsKTtcclxuICAgICAgICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKTtcclxuICAgICAgICBjb25zdCBob3N0ID0gdXJsLmhvc3RuYW1lO1xyXG4gICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh1cmwucG9ydCB8fCAocHJvdG9jb2wgPT09ICdodHRwcycgPyA0NDMgOiA4MCkpO1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB1cmwucGF0aG5hbWU7XHJcblxyXG4gICAgICAgIC8vIGF1dGggaXMgbmVlZGVkIG1vc3RseSBmb3IgY2xvdWQgcHJvdmlkZXJzIHN1Y2ggYXMgTGFtYmRhVGVzdFxyXG4gICAgICAgIGlmICh1cmwuYXV0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLndkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcjogYXV0aFswXSxcclxuICAgICAgICAgICAgICAgIGtleTogYXV0aFsxXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHdkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMud2Rpb09wdHMgfHwge30sXHJcbiAgICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcclxuICAgICAgICAgICAgaG9zdG5hbWU6IGhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXHJcbiAgICAgICAgICAgIGNhcGFiaWxpdGllczogdGhpcy5jYXBzLFxyXG4gICAgICAgICAgICBsb2dMZXZlbDogJ3NpbGVudCcsXHJcbiAgICAgICAgICAgIHJ1bm5lcjogJ3JlcGwnLFxyXG4gICAgICAgICAgICB3YWl0Zm9yVGltZW91dDogNTAwMCwgLy8gaW5jcmVhc2UgdGhlIGRlZmF1bHQgMzAwMFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlUaW1lb3V0OiAzMTAqMTAwMCxcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5Q291bnQ6IDFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IGF3YWl0IHdkaW8ucmVtb3RlKHdkaW9PcHRzKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0QXBwaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQgfSk7XHJcblxyXG4gICAgICAgIHN1cGVyLmluaXQodGhpcy5kcml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcclxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMpIHtcclxuICAgICAgICBzdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVsnQ0FOQ0VMRUQnLCAnRkFJTEVEJ10uaW5jbHVkZXMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gd2lsbCB0YWtlIDUgbWluIHRvIGNhbGxcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdFcnJvciBkaXNwb3NpbmcgZHJpdmVyOiAnICsgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHRpbGwgYSBuZXcgb25lIGlzIG9wZW5lZC4gVHJhbnNhY3Rpb24gbmFtZXMgbXVzdCBiZVxyXG4gICAgICogICAgICAgICAgICAgIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqL1xyXG4gICAgdHJhbnNhY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIFByaXZhdGVcclxuICAgICAqL1xyXG5cclxuICAgIF9pc0FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIEFDVElPTl9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBfdGFrZVNjcmVlbnNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU0NSRUVOU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3RcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90JywgZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBfZ2V0TG9ncyhuYW1lKSB7XHJcbiAgICAvLyAgICAgaWYgKCFOT19MT0dTX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiB0aGlzLmdldExvZ3MoKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgX2FkanVzdEFwcGl1bUxvZyhsb2csIHNyYykge1xyXG4gICAgICAgIGlmICghbG9nIHx8IHR5cGVvZiBsb2cgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBjb252ZXJ0IGxvZy50aW1lc3RhbXAgZnJvbSB0aGUgZGV2aWNlIHRpbWUgem9uZSB0byB0aGUgbG9jYWwgb25lIChzbyB3ZSBjYW4gbGF0ZXIgY29ycmVsYXRlIGJldHdlZW4gc3RlcHMgYW5kIGxvZ3MpICAgICAgICBcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0aW1lOiBsb2cudGltZXN0YW1wLFxyXG4gICAgICAgICAgICBtc2c6IGxvZy5tZXNzYWdlLFxyXG4gICAgICAgICAgICBsZXZlbDogbG9nLmxldmVsLFxyXG4gICAgICAgICAgICBzcmM6IHNyY1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgX2l0ZXJhdGlvblN0YXJ0KCkge1xyXG4gICAgICAgIC8vIGNsZWFyIHRyYW5zYWN0aW9uIG5hbWUgc2F2ZWQgaW4gcHJldmlvdXMgaXRlcmF0aW9uIGlmIGFueVxyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgX2l0ZXJhdGlvbkVuZChlcnJvcikge1xyXG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlnbm9yZSB0aGUgcmVzdCBpZiBtb2IgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZFxyXG4gICAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29sbGVjdCBhbGwgQXBwaXVtIGxvZ3MgZm9yIHRoaXMgc2Vzc2lvblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEFwcGl1bUxvZ3MpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSB0aGlzLmdldEFwcGl1bUxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsb2dFbnRyeSBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEFwcGl1bUxvZyhsb2dFbnRyeSwgJ2FwcGl1bScpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgQXBwaXVtIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2dldFdkaW9Mb2NhdG9yKGxvY2F0b3IpIHtcclxuICAgICAgICBpZiAoIWxvY2F0b3IpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBhcmd1bWVudCAtIGxvY2F0b3Igbm90IHNwZWNpZmllZCcpO1xyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBsb2NhdG9yID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCcvJykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignaWQ9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBgLy8qW0BpZD1cIiR7bG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKX1cIl1gO1xyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbmFtZT0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuICdbbmFtZT1cIicgKyBsb2NhdG9yLnN1YnN0cignbmFtZT0nLmxlbmd0aCkgKyAnXCJdJztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRIZWxwZXJGdW5jdGlvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yID0gdGhpcy5fZ2V0V2Rpb0xvY2F0b3I7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLm1hdGNoUGF0dGVybiA9IG1vZFV0aWxzLm1hdGNoUGF0dGVybjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudCA9IG1vZFV0aWxzLmdldEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0RWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudCA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50cyA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnNldFRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnNldFRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlciA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZTtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudFRpbWVvdXQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZOztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoQkE7RUFBQTtBQUFB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
|