oxygen-cli 1.22.0 → 1.99.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -50
- package/build/core/OxygenCore.js +56 -145
- package/build/errors/OxygenError.js +5 -15
- package/build/errors/helper.js +45 -49
- package/build/index.js +14 -6
- package/build/lib/cli-util.js +19 -19
- package/build/lib/cli.js +4 -2
- package/build/lib/parallel-launcher.js +333 -0
- package/build/lib/param-manager.js +66 -47
- package/build/lib/util.js +38 -9
- package/build/ox_modules/index.js +1 -97
- package/build/ox_modules/module-assert.js +19 -9
- package/build/ox_modules/module-dns.js +220 -0
- package/build/ox_modules/module-http.js +39 -51
- package/build/ox_modules/module-shell.js +19 -75
- package/build/ox_modules/module-utils.js +1 -108
- package/build/ox_modules/utils.js +1 -357
- package/build/reporter/FileReporterBase.js +5 -5
- package/build/reporter/ReportAggregator.js +127 -4
- package/build/runners/WorkerProcess.js +15 -28
- package/build/runners/index.js +2 -6
- package/build/runners/oxygen/OxygenWorker.js +8 -8
- package/build/runners/oxygen/index.js +17 -18
- package/build/runners/oxygen/worker.js +10 -8
- package/package.json +12 -46
- package/build/lib/img-merge.js +0 -163
- package/build/ox_modules/module-db.js +0 -146
- package/build/ox_modules/module-email.js +0 -212
- package/build/ox_modules/module-eyes.js +0 -189
- package/build/ox_modules/module-mailinator.js +0 -207
- package/build/ox_modules/module-mob/commands/alertAccept.js +0 -35
- package/build/ox_modules/module-mob/commands/alertDismiss.js +0 -35
- package/build/ox_modules/module-mob/commands/assertAlert.js +0 -56
- package/build/ox_modules/module-mob/commands/assertText.js +0 -45
- package/build/ox_modules/module-mob/commands/assertTitle.js +0 -43
- package/build/ox_modules/module-mob/commands/assertValue.js +0 -66
- package/build/ox_modules/module-mob/commands/back.js +0 -27
- package/build/ox_modules/module-mob/commands/clear.js +0 -40
- package/build/ox_modules/module-mob/commands/click.js +0 -35
- package/build/ox_modules/module-mob/commands/clickHidden.js +0 -52
- package/build/ox_modules/module-mob/commands/clickLong.js +0 -34
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +0 -37
- package/build/ox_modules/module-mob/commands/closeApp.js +0 -27
- package/build/ox_modules/module-mob/commands/debug.js +0 -26
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +0 -38
- package/build/ox_modules/module-mob/commands/enableNetwork.js +0 -75
- package/build/ox_modules/module-mob/commands/execute.js +0 -32
- package/build/ox_modules/module-mob/commands/findElement.js +0 -36
- package/build/ox_modules/module-mob/commands/findElements.js +0 -39
- package/build/ox_modules/module-mob/commands/getAlertText.js +0 -31
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +0 -26
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +0 -66
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +0 -26
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +0 -26
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +0 -57
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +0 -27
- package/build/ox_modules/module-mob/commands/getLocation.js +0 -32
- package/build/ox_modules/module-mob/commands/getSource.js +0 -26
- package/build/ox_modules/module-mob/commands/getText.js +0 -36
- package/build/ox_modules/module-mob/commands/getTitle.js +0 -24
- package/build/ox_modules/module-mob/commands/getUrl.js +0 -28
- package/build/ox_modules/module-mob/commands/getValue.js +0 -50
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +0 -27
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +0 -33
- package/build/ox_modules/module-mob/commands/index.js +0 -594
- package/build/ox_modules/module-mob/commands/installApp.js +0 -28
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +0 -28
- package/build/ox_modules/module-mob/commands/isCheckable.js +0 -31
- package/build/ox_modules/module-mob/commands/isChecked.js +0 -31
- package/build/ox_modules/module-mob/commands/isClickable.js +0 -31
- package/build/ox_modules/module-mob/commands/isExist.js +0 -36
- package/build/ox_modules/module-mob/commands/isSelected.js +0 -36
- package/build/ox_modules/module-mob/commands/isVisible.js +0 -36
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +0 -27
- package/build/ox_modules/module-mob/commands/launchApp.js +0 -26
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +0 -30
- package/build/ox_modules/module-mob/commands/open.js +0 -43
- package/build/ox_modules/module-mob/commands/pause.js +0 -27
- package/build/ox_modules/module-mob/commands/removeApp.js +0 -28
- package/build/ox_modules/module-mob/commands/resetApp.js +0 -26
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +0 -86
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +0 -40
- package/build/ox_modules/module-mob/commands/select.js +0 -54
- package/build/ox_modules/module-mob/commands/selectFrame.js +0 -53
- package/build/ox_modules/module-mob/commands/selectWindow.js +0 -149
- package/build/ox_modules/module-mob/commands/sendKeys.js +0 -84
- package/build/ox_modules/module-mob/commands/setContext.js +0 -28
- package/build/ox_modules/module-mob/commands/setNativeContext.js +0 -26
- package/build/ox_modules/module-mob/commands/setTimeout.js +0 -33
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +0 -39
- package/build/ox_modules/module-mob/commands/shake.js +0 -27
- package/build/ox_modules/module-mob/commands/smsClickLink.js +0 -32
- package/build/ox_modules/module-mob/commands/smsGetText.js +0 -45
- package/build/ox_modules/module-mob/commands/swipe.js +0 -58
- package/build/ox_modules/module-mob/commands/swipeElement.js +0 -58
- package/build/ox_modules/module-mob/commands/swipeScreen.js +0 -56
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +0 -27
- package/build/ox_modules/module-mob/commands/tap.js +0 -34
- package/build/ox_modules/module-mob/commands/type.js +0 -67
- package/build/ox_modules/module-mob/commands/unlockPattern.js +0 -92
- package/build/ox_modules/module-mob/commands/waitForExist.js +0 -29
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +0 -42
- package/build/ox_modules/module-mob/commands/waitForVisible.js +0 -28
- package/build/ox_modules/module-mob.js +0 -699
- package/build/ox_modules/module-pdf.js +0 -328
- package/build/ox_modules/module-proxy.js +0 -324
- package/build/ox_modules/module-serial.js +0 -187
- package/build/ox_modules/module-soap.js +0 -260
- package/build/ox_modules/module-twilio.js +0 -192
- package/build/ox_modules/module-web/commands/alertAccept.js +0 -35
- package/build/ox_modules/module-web/commands/alertDismiss.js +0 -35
- package/build/ox_modules/module-web/commands/assertAlert.js +0 -55
- package/build/ox_modules/module-web/commands/assertExist.js +0 -28
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +0 -51
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +0 -45
- package/build/ox_modules/module-web/commands/assertText.js +0 -45
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +0 -56
- package/build/ox_modules/module-web/commands/assertTextPresent.js +0 -52
- package/build/ox_modules/module-web/commands/assertTitle.js +0 -42
- package/build/ox_modules/module-web/commands/assertValue.js +0 -44
- package/build/ox_modules/module-web/commands/back.js +0 -27
- package/build/ox_modules/module-web/commands/clear.js +0 -41
- package/build/ox_modules/module-web/commands/click.js +0 -112
- package/build/ox_modules/module-web/commands/clickHidden.js +0 -79
- package/build/ox_modules/module-web/commands/closeWindow.js +0 -25
- package/build/ox_modules/module-web/commands/debug.js +0 -25
- package/build/ox_modules/module-web/commands/deleteCookies.js +0 -22
- package/build/ox_modules/module-web/commands/deselect.js +0 -34
- package/build/ox_modules/module-web/commands/doubleClick.js +0 -65
- package/build/ox_modules/module-web/commands/dragAndDrop.js +0 -36
- package/build/ox_modules/module-web/commands/execute.js +0 -36
- package/build/ox_modules/module-web/commands/fileBrowse.js +0 -72
- package/build/ox_modules/module-web/commands/findElement.js +0 -35
- package/build/ox_modules/module-web/commands/findElements.js +0 -38
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +0 -24
- package/build/ox_modules/module-web/commands/getAlertText.js +0 -30
- package/build/ox_modules/module-web/commands/getAttribute.js +0 -38
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +0 -34
- package/build/ox_modules/module-web/commands/getCookies.js +0 -23
- package/build/ox_modules/module-web/commands/getCssValue.js +0 -38
- package/build/ox_modules/module-web/commands/getElementCount.js +0 -29
- package/build/ox_modules/module-web/commands/getHTML.js +0 -30
- package/build/ox_modules/module-web/commands/getSource.js +0 -26
- package/build/ox_modules/module-web/commands/getText.js +0 -36
- package/build/ox_modules/module-web/commands/getTitle.js +0 -22
- package/build/ox_modules/module-web/commands/getUrl.js +0 -26
- package/build/ox_modules/module-web/commands/getValue.js +0 -43
- package/build/ox_modules/module-web/commands/getWindowHandles.js +0 -26
- package/build/ox_modules/module-web/commands/getWindowSize.js +0 -26
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +0 -51
- package/build/ox_modules/module-web/commands/index.js +0 -634
- package/build/ox_modules/module-web/commands/isAlertPresent.js +0 -31
- package/build/ox_modules/module-web/commands/isChecked.js +0 -30
- package/build/ox_modules/module-web/commands/isExist.js +0 -36
- package/build/ox_modules/module-web/commands/isSelected.js +0 -35
- package/build/ox_modules/module-web/commands/isVisible.js +0 -36
- package/build/ox_modules/module-web/commands/makeVisible.js +0 -74
- package/build/ox_modules/module-web/commands/maximizeWindow.js +0 -24
- package/build/ox_modules/module-web/commands/minimizeWindow.js +0 -24
- package/build/ox_modules/module-web/commands/newWindow.js +0 -27
- package/build/ox_modules/module-web/commands/open.js +0 -42
- package/build/ox_modules/module-web/commands/pause.js +0 -26
- package/build/ox_modules/module-web/commands/point.js +0 -37
- package/build/ox_modules/module-web/commands/pointJS.js +0 -56
- package/build/ox_modules/module-web/commands/refresh.js +0 -26
- package/build/ox_modules/module-web/commands/rightClick.js +0 -61
- package/build/ox_modules/module-web/commands/rightClickActions.js +0 -57
- package/build/ox_modules/module-web/commands/scrollToElement.js +0 -33
- package/build/ox_modules/module-web/commands/select.js +0 -55
- package/build/ox_modules/module-web/commands/selectFrame.js +0 -52
- package/build/ox_modules/module-web/commands/selectWindow.js +0 -148
- package/build/ox_modules/module-web/commands/sendKeys.js +0 -56
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +0 -33
- package/build/ox_modules/module-web/commands/setTimeout.js +0 -33
- package/build/ox_modules/module-web/commands/setWindowSize.js +0 -29
- package/build/ox_modules/module-web/commands/takeScreenshot.js +0 -37
- package/build/ox_modules/module-web/commands/type.js +0 -52
- package/build/ox_modules/module-web/commands/waitForAngular.js +0 -83
- package/build/ox_modules/module-web/commands/waitForExist.js +0 -28
- package/build/ox_modules/module-web/commands/waitForInteractable.js +0 -31
- package/build/ox_modules/module-web/commands/waitForNotExist.js +0 -57
- package/build/ox_modules/module-web/commands/waitForNotText.js +0 -45
- package/build/ox_modules/module-web/commands/waitForNotValue.js +0 -45
- package/build/ox_modules/module-web/commands/waitForText.js +0 -45
- package/build/ox_modules/module-web/commands/waitForValue.js +0 -45
- package/build/ox_modules/module-web/commands/waitForVisible.js +0 -28
- package/build/ox_modules/module-web/commands/waitForWindow.js +0 -118
- package/build/ox_modules/module-web.js +0 -909
- package/build/ox_modules/module-win/commands/assertText.js +0 -41
- package/build/ox_modules/module-win/commands/assertTitle.js +0 -38
- package/build/ox_modules/module-win/commands/assertValue.js +0 -62
- package/build/ox_modules/module-win/commands/back.js +0 -21
- package/build/ox_modules/module-win/commands/clear.js +0 -34
- package/build/ox_modules/module-win/commands/click.js +0 -25
- package/build/ox_modules/module-win/commands/clickLong.js +0 -30
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +0 -33
- package/build/ox_modules/module-win/commands/findElement.js +0 -31
- package/build/ox_modules/module-win/commands/findElements.js +0 -31
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +0 -22
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +0 -25
- package/build/ox_modules/module-win/commands/getLocation.js +0 -26
- package/build/ox_modules/module-win/commands/getSource.js +0 -22
- package/build/ox_modules/module-win/commands/getText.js +0 -32
- package/build/ox_modules/module-win/commands/getValue.js +0 -46
- package/build/ox_modules/module-win/commands/getWindowHandles.js +0 -25
- package/build/ox_modules/module-win/commands/index.js +0 -298
- package/build/ox_modules/module-win/commands/isCheckable.js +0 -26
- package/build/ox_modules/module-win/commands/isChecked.js +0 -26
- package/build/ox_modules/module-win/commands/isClickable.js +0 -26
- package/build/ox_modules/module-win/commands/isExist.js +0 -32
- package/build/ox_modules/module-win/commands/isSelected.js +0 -26
- package/build/ox_modules/module-win/commands/isVisible.js +0 -32
- package/build/ox_modules/module-win/commands/open.js +0 -24
- package/build/ox_modules/module-win/commands/pause.js +0 -23
- package/build/ox_modules/module-win/commands/rightClick.js +0 -30
- package/build/ox_modules/module-win/commands/selectWindow.js +0 -97
- package/build/ox_modules/module-win/commands/sendKeys.js +0 -50
- package/build/ox_modules/module-win/commands/setTimeout.js +0 -29
- package/build/ox_modules/module-win/commands/takeScreenshot.js +0 -26
- package/build/ox_modules/module-win/commands/tap.js +0 -29
- package/build/ox_modules/module-win/commands/type.js +0 -38
- package/build/ox_modules/module-win/commands/waitForExist.js +0 -25
- package/build/ox_modules/module-win/commands/waitForInteractable.js +0 -43
- package/build/ox_modules/module-win/commands/waitForVisible.js +0 -24
- package/build/ox_modules/module-win.js +0 -367
- package/build/ox_services/service-devtools/submodule-network.js +0 -338
- package/build/ox_services/service-devtools.js +0 -83
- package/build/runners/cucumber/CucumberEventListener.js +0 -181
- package/build/runners/cucumber/CucumberReporter.js +0 -277
- package/build/runners/cucumber/CucumberWorker.js +0 -337
- package/build/runners/cucumber/index.js +0 -159
- package/build/runners/cucumber/worker.js +0 -184
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
require("source-map-support/register");
|
|
9
|
+
|
|
10
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
11
|
+
|
|
12
|
+
var _child_process = _interopRequireDefault(require("child_process"));
|
|
13
|
+
|
|
14
|
+
var _OxygenModule = _interopRequireDefault(require("../core/OxygenModule"));
|
|
15
|
+
|
|
16
|
+
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
17
|
+
|
|
18
|
+
var _helper = _interopRequireDefault(require("../errors/helper"));
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
22
|
+
/*
|
|
23
|
+
* Copyright (C) 2015-present CloudBeat Limited
|
|
24
|
+
*
|
|
25
|
+
* This program is free software: you can redistribute it and/or modify
|
|
26
|
+
* it under the terms of the GNU General Public License as published by
|
|
27
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
28
|
+
* (at your option) any later version.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @name dns
|
|
33
|
+
* @description Provides methods for working with DNS
|
|
34
|
+
*/
|
|
35
|
+
const MODULE_NAME = 'dns';
|
|
36
|
+
|
|
37
|
+
class DnsModule extends _OxygenModule.default {
|
|
38
|
+
constructor(options, context, rs, logger, modules, services) {
|
|
39
|
+
super(options, context, rs, logger, modules, services); // pre-initialize the module
|
|
40
|
+
|
|
41
|
+
this._isInitialized = true;
|
|
42
|
+
}
|
|
43
|
+
/*
|
|
44
|
+
* @summary Gets module name
|
|
45
|
+
* @function name
|
|
46
|
+
* @return {String} Constant value "http".
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
get name() {
|
|
51
|
+
return MODULE_NAME;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @summary Performs resolve dns with A type
|
|
55
|
+
* @function resolveA
|
|
56
|
+
* @param {String} server - name or IP address of the name server to query.
|
|
57
|
+
* @param {String} name - name of the resource record that is to be looked up.
|
|
58
|
+
* @param {String} dnssec - dnssec.
|
|
59
|
+
* @return {Object} Response object.
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
async resolveA(server, name, dnssec = false) {
|
|
64
|
+
const args = ['@' + server, name, 'A'];
|
|
65
|
+
|
|
66
|
+
if (dnssec) {
|
|
67
|
+
args.push('+dnssec');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return await this.dig(args);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* @summary Performs resolve dns with TXT type
|
|
74
|
+
* @function resolveTXT
|
|
75
|
+
* @param {String} server - name or IP address of the name server to query.
|
|
76
|
+
* @param {String} name - name of the resource record that is to be looked up.
|
|
77
|
+
* @return {Object} Response object.
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
async resolveTXT(server, name) {
|
|
82
|
+
const args = ['@' + server, name, 'TXT'];
|
|
83
|
+
return await this.dig(args);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* @summary Performs resolve dns with CNAME type
|
|
87
|
+
* @function resolveCNAME
|
|
88
|
+
* @param {String} server - name or IP address of the name server to query.
|
|
89
|
+
* @param {String} name - name of the resource record that is to be looked up.
|
|
90
|
+
* @return {Object} Response object.
|
|
91
|
+
*/
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
async resolveCNAME(server, name) {
|
|
95
|
+
const args = ['@' + server, name, 'CNAME'];
|
|
96
|
+
return await this.dig(args);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
parseType(values = []) {
|
|
100
|
+
const type = values[3].toString().toUpperCase();
|
|
101
|
+
|
|
102
|
+
switch (type) {
|
|
103
|
+
case 'SOA':
|
|
104
|
+
return values.slice(4).toString().replace(/,/g, ' ');
|
|
105
|
+
|
|
106
|
+
case 'MX':
|
|
107
|
+
{
|
|
108
|
+
return {
|
|
109
|
+
priority: values[4],
|
|
110
|
+
server: values[5]
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
case 'RRSIG':
|
|
115
|
+
{
|
|
116
|
+
return values.slice(4).join(' ');
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
case 'TXT':
|
|
120
|
+
{
|
|
121
|
+
return values.slice(4).join(' ').replace(/"/g, '');
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
default:
|
|
125
|
+
return values[values.length - 1];
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
parseSection(values, section) {
|
|
130
|
+
if (section === 'answer' || section === 'additional') {
|
|
131
|
+
return {
|
|
132
|
+
domain: values[0],
|
|
133
|
+
type: values[3],
|
|
134
|
+
ttl: values[1],
|
|
135
|
+
class: values[2],
|
|
136
|
+
value: this.parseType(values)
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return values;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
parse(output = '') {
|
|
144
|
+
const regex = /(;; )([^\s]+)( SECTION:)/g;
|
|
145
|
+
const result = {};
|
|
146
|
+
const data = output.split(/\r?\n/);
|
|
147
|
+
let section = 'header';
|
|
148
|
+
|
|
149
|
+
if (data.length < 6) {
|
|
150
|
+
let msg = data[data.length - 2];
|
|
151
|
+
|
|
152
|
+
if (!msg || msg.length <= 1) {
|
|
153
|
+
msg = output;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
throw new Error(msg);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
data.forEach((line, i) => {
|
|
160
|
+
let m;
|
|
161
|
+
let changed = false;
|
|
162
|
+
|
|
163
|
+
if (i && !line) {
|
|
164
|
+
section = '';
|
|
165
|
+
} else {
|
|
166
|
+
do {
|
|
167
|
+
m = regex.exec(line);
|
|
168
|
+
|
|
169
|
+
if (m) {
|
|
170
|
+
changed = true;
|
|
171
|
+
section = m[2].toLowerCase();
|
|
172
|
+
}
|
|
173
|
+
} while (m);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (section && section === 'answer') {
|
|
177
|
+
if (!result[section]) result[section] = [];
|
|
178
|
+
|
|
179
|
+
if (!changed && line) {
|
|
180
|
+
if (section === 'header') result[section].push(this.parseSection(_lodash.default.compact(line.split(/\t/)), section));else result[section].push(this.parseSection(_lodash.default.compact(line.split(/\s+/g)), section));
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
return {
|
|
185
|
+
error: null,
|
|
186
|
+
records: result['answer']
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
dig(args = [], options = {}) {
|
|
191
|
+
const digCMD = options.dig || 'dig';
|
|
192
|
+
return new Promise((resolve, reject) => {
|
|
193
|
+
const process = _child_process.default.spawn(digCMD, args);
|
|
194
|
+
|
|
195
|
+
let shellOutput = '';
|
|
196
|
+
process.stdout.on('data', chunk => {
|
|
197
|
+
shellOutput += chunk;
|
|
198
|
+
});
|
|
199
|
+
process.stdout.on('error', e => {
|
|
200
|
+
reject(new _OxygenError.default(_helper.default.errorCode.DNS_ERROR, e.message));
|
|
201
|
+
});
|
|
202
|
+
process.on('error', e => {
|
|
203
|
+
reject(new _OxygenError.default(_helper.default.errorCode.DNS_ERROR, e.message));
|
|
204
|
+
});
|
|
205
|
+
process.stdout.on('end', () => {
|
|
206
|
+
try {
|
|
207
|
+
const result = this.parse(shellOutput);
|
|
208
|
+
result.shellOutput = shellOutput;
|
|
209
|
+
resolve(result);
|
|
210
|
+
} catch (e) {
|
|
211
|
+
reject(new _OxygenError.default(_helper.default.errorCode.DNS_ERROR, e.message));
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
exports.default = DnsModule;
|
|
220
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1kbnMuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJEbnNNb2R1bGUiLCJPeHlnZW5Nb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjb250ZXh0IiwicnMiLCJsb2dnZXIiLCJtb2R1bGVzIiwic2VydmljZXMiLCJfaXNJbml0aWFsaXplZCIsIm5hbWUiLCJyZXNvbHZlQSIsInNlcnZlciIsImRuc3NlYyIsImFyZ3MiLCJwdXNoIiwiZGlnIiwicmVzb2x2ZVRYVCIsInJlc29sdmVDTkFNRSIsInBhcnNlVHlwZSIsInZhbHVlcyIsInR5cGUiLCJ0b1N0cmluZyIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJyZXBsYWNlIiwicHJpb3JpdHkiLCJqb2luIiwibGVuZ3RoIiwicGFyc2VTZWN0aW9uIiwic2VjdGlvbiIsImRvbWFpbiIsInR0bCIsImNsYXNzIiwidmFsdWUiLCJwYXJzZSIsIm91dHB1dCIsInJlZ2V4IiwicmVzdWx0IiwiZGF0YSIsInNwbGl0IiwibXNnIiwiRXJyb3IiLCJmb3JFYWNoIiwibGluZSIsImkiLCJtIiwiY2hhbmdlZCIsImV4ZWMiLCJ0b0xvd2VyQ2FzZSIsIl8iLCJjb21wYWN0IiwiZXJyb3IiLCJyZWNvcmRzIiwiZGlnQ01EIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9jZXNzIiwiY2hpbGQiLCJzcGF3biIsInNoZWxsT3V0cHV0Iiwic3Rkb3V0Iiwib24iLCJjaHVuayIsImUiLCJPeEVycm9yIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJETlNfRVJST1IiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFjQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUEsV0FBVyxHQUFHLEtBQXBCOztBQU9lLE1B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QVJEO0FBU0gsS0F6Qk0sQ0FBUDtBQTBCSDs7QUFoSytDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgZG5zXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggRE5TXHJcbiAqL1xyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICdkbnMnO1xyXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgY2hpbGQgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCBPeHlnZW5Nb2R1bGUgZnJvbSAnLi4vY29yZS9PeHlnZW5Nb2R1bGUnO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEbnNNb2R1bGUgZXh0ZW5kcyBPeHlnZW5Nb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcblxyXG4gICAgICAgIC8vIHByZS1pbml0aWFsaXplIHRoZSBtb2R1bGVcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8qXHJcbiAgICAgKiBAc3VtbWFyeSBHZXRzIG1vZHVsZSBuYW1lXHJcbiAgICAgKiBAZnVuY3Rpb24gbmFtZVxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBDb25zdGFudCB2YWx1ZSBcImh0dHBcIi5cclxuICAgICAqL1xyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGVyZm9ybXMgcmVzb2x2ZSBkbnMgd2l0aCBBIHR5cGVcclxuICAgICAqIEBmdW5jdGlvbiByZXNvbHZlQVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHNlcnZlciAtIG5hbWUgb3IgSVAgYWRkcmVzcyBvZiB0aGUgbmFtZSBzZXJ2ZXIgdG8gcXVlcnkuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIG5hbWUgb2YgdGhlIHJlc291cmNlIHJlY29yZCB0aGF0IGlzIHRvIGJlIGxvb2tlZCB1cC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkbnNzZWMgLSBkbnNzZWMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFJlc3BvbnNlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVzb2x2ZUEoc2VydmVyLCBuYW1lLCBkbnNzZWMgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IGFyZ3MgPSBbJ0AnK3NlcnZlciwgbmFtZSwgJ0EnXTtcclxuXHJcbiAgICAgICAgaWYgKGRuc3NlYykge1xyXG4gICAgICAgICAgICBhcmdzLnB1c2goJytkbnNzZWMnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRpZyhhcmdzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFBlcmZvcm1zIHJlc29sdmUgZG5zIHdpdGggVFhUIHR5cGVcclxuICAgICAqIEBmdW5jdGlvbiByZXNvbHZlVFhUXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc2VydmVyIC0gbmFtZSBvciBJUCBhZGRyZXNzIG9mIHRoZSBuYW1lIHNlcnZlciB0byBxdWVyeS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gbmFtZSBvZiB0aGUgcmVzb3VyY2UgcmVjb3JkIHRoYXQgaXMgdG8gYmUgbG9va2VkIHVwLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBSZXNwb25zZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlc29sdmVUWFQoc2VydmVyLCBuYW1lKSB7XHJcbiAgICAgICAgY29uc3QgYXJncyA9IFsnQCcrc2VydmVyLCBuYW1lLCAnVFhUJ107XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGlnKGFyZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGVyZm9ybXMgcmVzb2x2ZSBkbnMgd2l0aCBDTkFNRSB0eXBlXHJcbiAgICAgKiBAZnVuY3Rpb24gcmVzb2x2ZUNOQU1FXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc2VydmVyIC0gbmFtZSBvciBJUCBhZGRyZXNzIG9mIHRoZSBuYW1lIHNlcnZlciB0byBxdWVyeS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gbmFtZSBvZiB0aGUgcmVzb3VyY2UgcmVjb3JkIHRoYXQgaXMgdG8gYmUgbG9va2VkIHVwLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBSZXNwb25zZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlc29sdmVDTkFNRShzZXJ2ZXIsIG5hbWUpIHtcclxuICAgICAgICBjb25zdCBhcmdzID0gWydAJytzZXJ2ZXIsIG5hbWUsICdDTkFNRSddO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRpZyhhcmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZVR5cGUgKHZhbHVlcyA9IFtdKSB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IHZhbHVlc1szXS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ1NPQSc6IHJldHVybiB2YWx1ZXMuc2xpY2UoNCkudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csICcgJyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ01YJzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcHJpb3JpdHk6IHZhbHVlc1s0XSwgc2VydmVyOiB2YWx1ZXNbNV0gfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdSUlNJRyc6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuc2xpY2UoNCkuam9pbignICcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ1RYVCc6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuc2xpY2UoNCkuam9pbignICcpLnJlcGxhY2UoL1wiL2csICcnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VTZWN0aW9uICh2YWx1ZXMsIHNlY3Rpb24pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHNlY3Rpb24gPT09ICdhbnN3ZXInIHx8XHJcbiAgICAgICAgICAgIHNlY3Rpb24gPT09ICdhZGRpdGlvbmFsJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZG9tYWluOiB2YWx1ZXNbMF0sXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB2YWx1ZXNbM10sXHJcbiAgICAgICAgICAgICAgICB0dGw6IHZhbHVlc1sxXSxcclxuICAgICAgICAgICAgICAgIGNsYXNzOiB2YWx1ZXNbMl0sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5wYXJzZVR5cGUodmFsdWVzKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZSAob3V0cHV0ID0gJycpIHtcclxuICAgICAgICBjb25zdCByZWdleCA9IC8oOzsgKShbXlxcc10rKSggU0VDVElPTjopL2c7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IG91dHB1dC5zcGxpdCgvXFxyP1xcbi8pO1xyXG4gICAgICAgIGxldCBzZWN0aW9uID0gJ2hlYWRlcic7XHJcbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoIDwgNikge1xyXG4gICAgICAgICAgICBsZXQgbXNnID0gZGF0YVtkYXRhLmxlbmd0aCAtIDJdO1xyXG4gICAgICAgICAgICBpZiAoIW1zZyB8fCBtc2cubGVuZ3RoIDw9IDEpIHtcclxuICAgICAgICAgICAgICAgIG1zZyA9IG91dHB1dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0YS5mb3JFYWNoKChsaW5lLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBtO1xyXG4gICAgICAgICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoaSAmJiAhbGluZSkge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbiA9ICcnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgICAgICAgIG0gPSByZWdleC5leGVjKGxpbmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uID0gbVsyXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKG0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VjdGlvbiAmJiBzZWN0aW9uID09PSAnYW5zd2VyJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRbc2VjdGlvbl0pIHJlc3VsdFtzZWN0aW9uXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjaGFuZ2VkICYmIGxpbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbiA9PT0gJ2hlYWRlcicpIHJlc3VsdFtzZWN0aW9uXS5wdXNoKHRoaXMucGFyc2VTZWN0aW9uKF8uY29tcGFjdChsaW5lLnNwbGl0KC9cXHQvKSksIHNlY3Rpb24pKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHJlc3VsdFtzZWN0aW9uXS5wdXNoKHRoaXMucGFyc2VTZWN0aW9uKF8uY29tcGFjdChsaW5lLnNwbGl0KC9cXHMrL2cpKSwgc2VjdGlvbikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXHJcbiAgICAgICAgICAgIHJlY29yZHM6IHJlc3VsdFsnYW5zd2VyJ11cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGRpZyAoYXJncyA9IFtdLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCBkaWdDTUQgPSBvcHRpb25zLmRpZyB8fCAnZGlnJztcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzID0gY2hpbGQuc3Bhd24oZGlnQ01ELCBhcmdzKTtcclxuICAgICAgICAgICAgbGV0IHNoZWxsT3V0cHV0ID0gJyc7XHJcblxyXG4gICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC5vbignZGF0YScsIChjaHVuaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2hlbGxPdXRwdXQgKz0gY2h1bms7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQub24oJ2Vycm9yJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuRE5TX0VSUk9SLCBlLm1lc3NhZ2UpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBwcm9jZXNzLm9uKCdlcnJvcicsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkROU19FUlJPUiwgZS5tZXNzYWdlKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQub24oJ2VuZCcsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wYXJzZShzaGVsbE91dHB1dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNoZWxsT3V0cHV0ID0gc2hlbGxPdXRwdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuRE5TX0VSUk9SLCBlLm1lc3NhZ2UpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -33,18 +33,18 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
33
33
|
* @description Provides methods for working with HTTP(S)
|
|
34
34
|
*/
|
|
35
35
|
const MODULE_NAME = 'http';
|
|
36
|
-
const RESPONSE_TIMEOUT = 1000 *
|
|
36
|
+
const RESPONSE_TIMEOUT = 1000 * 30; // in ms
|
|
37
37
|
|
|
38
38
|
const DAFAULT_HTTP2 = false;
|
|
39
39
|
const DEFAULT_HTTP_OPTIONS = {
|
|
40
40
|
decompress: true,
|
|
41
|
-
responseType: '
|
|
41
|
+
responseType: 'json',
|
|
42
42
|
timeout: {
|
|
43
|
-
lookup:
|
|
44
|
-
connect:
|
|
45
|
-
secureConnect:
|
|
46
|
-
socket:
|
|
47
|
-
send:
|
|
43
|
+
lookup: 100,
|
|
44
|
+
connect: 50,
|
|
45
|
+
secureConnect: 50,
|
|
46
|
+
socket: 10000,
|
|
47
|
+
send: 10000,
|
|
48
48
|
response: RESPONSE_TIMEOUT
|
|
49
49
|
},
|
|
50
50
|
http2: DAFAULT_HTTP2,
|
|
@@ -122,8 +122,8 @@ class HttpModule extends _OxygenModule.default {
|
|
|
122
122
|
|
|
123
123
|
bootstrap();
|
|
124
124
|
global.GLOBAL_AGENT.HTTP_PROXY = url;
|
|
125
|
-
} else {
|
|
126
|
-
|
|
125
|
+
} else if (this._agent) {
|
|
126
|
+
delete this._agent;
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
/**
|
|
@@ -152,11 +152,23 @@ class HttpModule extends _OxygenModule.default {
|
|
|
152
152
|
|
|
153
153
|
|
|
154
154
|
async get(url, headers) {
|
|
155
|
+
var hd = {
|
|
156
|
+
Connection: 'keep-alive'
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
if (headers) {
|
|
160
|
+
hd = headers;
|
|
161
|
+
|
|
162
|
+
if (!headers.connection && !headers.Connection) {
|
|
163
|
+
hd.Connection = 'keep-alive';
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
155
167
|
const httpOpts = { ...DEFAULT_HTTP_OPTIONS,
|
|
156
168
|
...(this._userHttpOptions || {}),
|
|
157
169
|
url: url,
|
|
158
170
|
method: 'GET',
|
|
159
|
-
headers:
|
|
171
|
+
headers: hd
|
|
160
172
|
};
|
|
161
173
|
return await this._httpRequestSync(httpOpts);
|
|
162
174
|
}
|
|
@@ -171,14 +183,12 @@ class HttpModule extends _OxygenModule.default {
|
|
|
171
183
|
|
|
172
184
|
|
|
173
185
|
async post(url, data, headers) {
|
|
174
|
-
const resolvedData = this._resolveData(data);
|
|
175
|
-
|
|
176
186
|
const httpOpts = { ...DEFAULT_HTTP_OPTIONS,
|
|
177
187
|
...(this._userHttpOptions || {}),
|
|
178
188
|
url: url,
|
|
179
189
|
method: 'POST',
|
|
180
|
-
|
|
181
|
-
|
|
190
|
+
body: data,
|
|
191
|
+
headers: headers || {}
|
|
182
192
|
};
|
|
183
193
|
return await this._httpRequestSync(httpOpts);
|
|
184
194
|
}
|
|
@@ -193,14 +203,12 @@ class HttpModule extends _OxygenModule.default {
|
|
|
193
203
|
|
|
194
204
|
|
|
195
205
|
async put(url, data, headers) {
|
|
196
|
-
const resolvedData = this._resolveData(data);
|
|
197
|
-
|
|
198
206
|
const httpOpts = { ...DEFAULT_HTTP_OPTIONS,
|
|
199
207
|
...(this._userHttpOptions || {}),
|
|
200
208
|
url: url,
|
|
201
209
|
method: 'PUT',
|
|
202
|
-
|
|
203
|
-
|
|
210
|
+
body: data,
|
|
211
|
+
headers: headers || {}
|
|
204
212
|
};
|
|
205
213
|
return await this._httpRequestSync(httpOpts);
|
|
206
214
|
}
|
|
@@ -215,14 +223,12 @@ class HttpModule extends _OxygenModule.default {
|
|
|
215
223
|
|
|
216
224
|
|
|
217
225
|
async patch(url, data, headers) {
|
|
218
|
-
const resolvedData = this._resolveData(data);
|
|
219
|
-
|
|
220
226
|
const httpOpts = { ...DEFAULT_HTTP_OPTIONS,
|
|
221
227
|
...(this._userHttpOptions || {}),
|
|
222
228
|
url: url,
|
|
223
229
|
method: 'PATCH',
|
|
224
|
-
|
|
225
|
-
|
|
230
|
+
body: data,
|
|
231
|
+
headers: headers || {}
|
|
226
232
|
};
|
|
227
233
|
return await this._httpRequestSync(httpOpts);
|
|
228
234
|
}
|
|
@@ -231,20 +237,16 @@ class HttpModule extends _OxygenModule.default {
|
|
|
231
237
|
* @function delete
|
|
232
238
|
* @param {String} url - URL.
|
|
233
239
|
* @param {Object=} headers - HTTP headers.
|
|
234
|
-
* @param {Object} data - Data.
|
|
235
240
|
* @return {Object} Response object.
|
|
236
241
|
*/
|
|
237
242
|
|
|
238
243
|
|
|
239
|
-
async delete(url, headers
|
|
240
|
-
const resolvedData = this._resolveData(data);
|
|
241
|
-
|
|
244
|
+
async delete(url, headers) {
|
|
242
245
|
const httpOpts = { ...DEFAULT_HTTP_OPTIONS,
|
|
243
246
|
...(this._userHttpOptions || {}),
|
|
244
247
|
url: url,
|
|
245
248
|
method: 'DELETE',
|
|
246
|
-
headers: headers || {}
|
|
247
|
-
...resolvedData
|
|
249
|
+
headers: headers || {}
|
|
248
250
|
};
|
|
249
251
|
return await this._httpRequestSync(httpOpts);
|
|
250
252
|
}
|
|
@@ -414,23 +416,13 @@ class HttpModule extends _OxygenModule.default {
|
|
|
414
416
|
global._lastTransactionName = name;
|
|
415
417
|
}
|
|
416
418
|
|
|
417
|
-
_resolveData(data) {
|
|
418
|
-
const dataResolver = {};
|
|
419
|
-
|
|
420
|
-
if (data instanceof Object) {
|
|
421
|
-
_utils.default.assertCircular(data);
|
|
422
|
-
|
|
423
|
-
dataResolver.json = data;
|
|
424
|
-
} else {
|
|
425
|
-
dataResolver.body = data;
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
return dataResolver;
|
|
429
|
-
}
|
|
430
|
-
|
|
431
419
|
async _httpRequestSync(httpOpts) {
|
|
432
420
|
let result;
|
|
433
421
|
|
|
422
|
+
if (this._agent) {
|
|
423
|
+
httpOpts.agent = this._agent;
|
|
424
|
+
}
|
|
425
|
+
|
|
434
426
|
try {
|
|
435
427
|
result = await (0, _got.default)(httpOpts);
|
|
436
428
|
|
|
@@ -444,7 +436,7 @@ class HttpModule extends _OxygenModule.default {
|
|
|
444
436
|
decomp.on('data', data => {
|
|
445
437
|
result.body = data.toString();
|
|
446
438
|
|
|
447
|
-
if (result.headers['content-type']
|
|
439
|
+
if (result.headers['content-type'] === 'application/json') {
|
|
448
440
|
try {
|
|
449
441
|
result.body = JSON.parse(result.body);
|
|
450
442
|
} catch (e) {// if parsing fails just return the original string
|
|
@@ -455,13 +447,6 @@ class HttpModule extends _OxygenModule.default {
|
|
|
455
447
|
});
|
|
456
448
|
});
|
|
457
449
|
})();
|
|
458
|
-
} else {
|
|
459
|
-
if (result.headers['content-type'].includes('application/json')) {
|
|
460
|
-
try {
|
|
461
|
-
result.body = JSON.parse(result.body);
|
|
462
|
-
} catch (e) {// if parsing fails just return the original string
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
450
|
}
|
|
466
451
|
} catch (e) {
|
|
467
452
|
result = e;
|
|
@@ -469,6 +454,9 @@ class HttpModule extends _OxygenModule.default {
|
|
|
469
454
|
|
|
470
455
|
|
|
471
456
|
this._lastResponse = result;
|
|
457
|
+
/*if (result instanceof Error && this.options && !this.options.httpAutoThrowError) {
|
|
458
|
+
throw new OxError(errHelper.errorCode.HTTP_ERROR, result.message);
|
|
459
|
+
}*/
|
|
472
460
|
|
|
473
461
|
if (result instanceof Error) {
|
|
474
462
|
result = {
|
|
@@ -504,4 +492,4 @@ class HttpModule extends _OxygenModule.default {
|
|
|
504
492
|
}
|
|
505
493
|
|
|
506
494
|
exports.default = HttpModule;
|
|
507
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1odHRwLmpzIl0sIm5hbWVzIjpbIk1PRFVMRV9OQU1FIiwiUkVTUE9OU0VfVElNRU9VVCIsIkRBRkFVTFRfSFRUUDIiLCJERUZBVUxUX0hUVFBfT1BUSU9OUyIsImRlY29tcHJlc3MiLCJyZXNwb25zZVR5cGUiLCJ0aW1lb3V0IiwibG9va3VwIiwiY29ubmVjdCIsInNlY3VyZUNvbm5lY3QiLCJzb2NrZXQiLCJzZW5kIiwicmVzcG9uc2UiLCJodHRwMiIsImh0dHBzIiwicmVqZWN0VW5hdXRob3JpemVkIiwiZG5zTG9va3VwSXBWZXJzaW9uIiwiSHR0cE1vZHVsZSIsIk94eWdlbk1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsIl9hbHdheXNJbml0aWFsaXplZCIsIl9sYXN0UmVzcG9uc2UiLCJfYmFzZVVybCIsIl91c2VySHR0cE9wdGlvbnMiLCJfaXNJbml0aWFsaXplZCIsIm5hbWUiLCJzZXRPcHRpb25zIiwib3B0cyIsImRlZmxhdGVSYXciLCJzZXRQcm94eSIsInVybCIsImJvb3RzdHJhcCIsInJlcXVpcmUiLCJwYXJzZSIsInBhcnNlZFVybCIsImhvc3RuYW1lIiwiT3hFcnJvciIsImVyckhlbHBlciIsImVycm9yQ29kZSIsIkhUVFBfRVJST1IiLCJwb3J0IiwicHJvdG9jb2wiLCJnbG9iYWwiLCJHTE9CQUxfQUdFTlQiLCJIVFRQX1BST1hZIiwiZ2V0IiwiaGVhZGVycyIsImh0dHBPcHRzIiwibWV0aG9kIiwiX2h0dHBSZXF1ZXN0U3luYyIsInBvc3QiLCJkYXRhIiwicmVzb2x2ZWREYXRhIiwiX3Jlc29sdmVEYXRhIiwicHV0IiwicGF0Y2giLCJkZWxldGUiLCJnZXRSZXNwb25zZSIsImdldFJlc3BvbnNlQm9keSIsImJvZHkiLCJnZXRSZXNwb25zZUhlYWRlcnMiLCJnZXRSZXNwb25zZVVybCIsImFzc2VydFRleHQiLCJwYXR0ZXJuIiwiQVNTRVJUX0VSUk9SIiwicmVzcENvbnRlbnQiLCJKU09OIiwic3RyaW5naWZ5IiwibW9kVXRpbHMiLCJtYXRjaFBhdHRlcm4iLCJhc3NlcnRSZXNwb25zZVRpbWUiLCJtYXhUaW1lIiwiRXJyb3IiLCJhc3NlcnRIZWFkZXIiLCJoZWFkZXJOYW1lIiwiaGVhZGVyVmFsdWVQYXR0ZXJuIiwibGVuZ3RoIiwidG9Mb3dlckNhc2UiLCJhY3R1YWxIZWFkZXJWYWx1ZSIsImFzc2VydENvb2tpZSIsImNvb2tpZU5hbWUiLCJjb29raWVWYWx1ZVBhdHRlcm4iLCJhc3NlcnRTdGF0dXMiLCJjb2RlTGlzdCIsIkFycmF5IiwiaXNBcnJheSIsInN0YXR1c0NvZGUiLCJpbmNsdWRlcyIsImFzc2VydFN0YXR1c09rIiwidHJhbnNhY3Rpb24iLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsImRhdGFSZXNvbHZlciIsIk9iamVjdCIsImFzc2VydENpcmN1bGFyIiwianNvbiIsInJlc3VsdCIsInpsaWIiLCJkZWNvbXAiLCJjcmVhdGVJbmZsYXRlUmF3Iiwid3JpdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uIiwidG9TdHJpbmciLCJlIiwiZXJyb3JNZXNzYWdlIiwibWVzc2FnZSIsInN0YXR1c01lc3NhZ2UiLCJyYXdCb2R5IiwiaHR0cFZlcnNpb24iLCJ1cGdyYWRlIiwidGltaW5ncyIsInJlcXVlc3RVcmwiLCJyZWRpcmVjdFVybHMiLCJpc0Zyb21DYWNoZSIsImlwIiwicmV0cnlDb3VudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBYUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQU9BLE1BQU1BLFdBQVcsR0FBRyxNQUFwQjtBQUNBLE1BQU1DLGdCQUFnQixHQUFHLE9BQU8sRUFBaEMsQyxDQUFzQzs7QUFDdEMsTUFBTUMsYUFBYSxHQUFHLEtBQXRC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QUFNLENBQUNxQixFQVpOO0FBYUxDLFFBQUFBLFVBQVUsRUFBRXRCLE1BQU0sQ0FBQ3NCLFVBYmQ7QUFjTDFELFFBQUFBLElBQUksRUFBRW9DLE1BQU0sQ0FBQ3BDO0FBZFIsT0FBVDtBQWdCSDs7QUFFRCxXQUFPb0MsTUFBUDtBQUNIOztBQTFaZ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBodHRwXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggSFRUUChTKVxyXG4gKi9cclxuaW1wb3J0IGdvdCBmcm9tICdnb3QnO1xyXG5pbXBvcnQgT3h5Z2VuTW9kdWxlIGZyb20gJy4uL2NvcmUvT3h5Z2VuTW9kdWxlJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVyckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAnaHR0cCc7XHJcbmNvbnN0IFJFU1BPTlNFX1RJTUVPVVQgPSAxMDAwICogNjA7ICAgLy8gaW4gbXNcclxuY29uc3QgREFGQVVMVF9IVFRQMiA9IGZhbHNlO1xyXG5jb25zdCBERUZBVUxUX0hUVFBfT1BUSU9OUyA9IHtcclxuICAgIGRlY29tcHJlc3M6IHRydWUsXHJcbiAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcclxuICAgIHRpbWVvdXQ6IHtcclxuICAgICAgICBsb29rdXA6IDEwMDAsXHJcbiAgICAgICAgY29ubmVjdDogNTAwLFxyXG4gICAgICAgIHNlY3VyZUNvbm5lY3Q6IDUwMCxcclxuICAgICAgICBzb2NrZXQ6IDEwMDAwMCxcclxuICAgICAgICBzZW5kOiAxMDAwMDAsXHJcbiAgICAgICAgcmVzcG9uc2U6IFJFU1BPTlNFX1RJTUVPVVRcclxuICAgIH0sXHJcbiAgICBodHRwMjogREFGQVVMVF9IVFRQMixcclxuICAgIGh0dHBzOiB7XHJcbiAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIGRuc0xvb2t1cElwVmVyc2lvbjogJ2lwdjQnXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIdHRwTW9kdWxlIGV4dGVuZHMgT3h5Z2VuTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMuX2Fsd2F5c0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9sYXN0UmVzcG9uc2UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2Jhc2VVcmwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3VzZXJIdHRwT3B0aW9ucyA9IHt9O1xyXG4gICAgICAgIC8vIHByZS1pbml0aWFsaXplIHRoZSBtb2R1bGVcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogQHN1bW1hcnkgR2V0cyBtb2R1bGUgbmFtZVxyXG4gICAgICogQGZ1bmN0aW9uIG5hbWVcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gQ29uc3RhbnQgdmFsdWUgXCJodHRwXCIuXHJcbiAgICAgKi9cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldHMgdXNlciBkZWZpbmVkIEhUVFAgb3B0aW9ucyAoc3VjaCBhcyBwcm94eSwgZGVjb21wcmVzcyBhbmQgZXRjLilcclxuICAgICAqIEBmdW5jdGlvbiBzZXRPcHRpb25zXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIEhUVFAgcmVxdWVzdCBvcHRpb25zIG9iamVjdCwgc2VlIFtSZXF1ZXN0IE9wdGlvbnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZ290L2Jsb2IvbWFpbi9kb2N1bWVudGF0aW9uLzItb3B0aW9ucy5tZCkuIFxyXG4gICAgICogSW4gYWRkaXRpb24gdG8gdGhlIG9wdGlvbnMgbGlzdGVkIGluIHRoZSBsaW5rZWQgZG9jdW1lbnQsICdkZWZsYXRlUmF3JyBvcHRpb24gY2FuIGJlIHVzZWQgd2hlbiBzZXJ2ZXIgcmV0dXJucyBEZWZsYXRlLWNvbXByZXNzZWQgc3RyZWFtIHdpdGhvdXQgaGVhZGVycy5cclxuICAgICAqL1xyXG4gICAgc2V0T3B0aW9ucyhvcHRzKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlckh0dHBPcHRpb25zID0gb3B0cztcclxuICAgICAgICBpZiAob3B0cy5kZWZsYXRlUmF3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJIdHRwT3B0aW9ucy5kZWNvbXByZXNzID0gZmFsc2U7ICAgICAvLyBkZWNvbXByZXNzPXRydWUgaW4gZGVmYXVsdCBvcHRpb25zIHNvIHdlIG92ZXJyaWRlIGl0XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyBwcm94eSB1cmwgdG8gYmUgdXNlZCBmb3IgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2VydmljZS5cclxuICAgICAqIEBmdW5jdGlvbiBzZXRQcm94eVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIFByb3h5IHNlcnZlciBVUkwuIE5vdCBwYXNzaW5nIHRoaXMgYXJndW1lbnQgd2lsbCByZXNldCB0aGUgcHJveHkgc2V0dGluZ3MuXHJcbiAgICAgKi9cclxuICAgIHNldFByb3h5KHVybCkge1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICAgICAgYm9vdHN0cmFwXHJcbiAgICAgICAgICAgIH0gPSByZXF1aXJlKCdnbG9iYWwtYWdlbnQnKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHsgcGFyc2UgfSA9IHJlcXVpcmUoJ3VybCcpO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBwYXJzZSh1cmwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXJzZWRVcmwuaG9zdG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuSFRUUF9FUlJPUiwgJ0hvc3RuYW1lIGluIHVuZGVmaW5lZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyc2VkVXJsLnBvcnQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuSFRUUF9FUlJPUiwgJ1BvcnQgaW4gdW5kZWZpbmVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJzZWRVcmwucHJvdG9jb2wpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuSFRUUF9FUlJPUiwgJ1Byb3RvY29sIGluIHVuZGVmaW5lZCcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBib290c3RyYXAoKTtcclxuICAgICAgICAgICAgZ2xvYmFsLkdMT0JBTF9BR0VOVC5IVFRQX1BST1hZID0gdXJsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5HTE9CQUxfQUdFTlQuSFRUUF9QUk9YWSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFBlcmZvcm1zIEhUVFAgR0VUXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIC0gVVJMLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBoZWFkZXJzIC0gSFRUUCBoZWFkZXJzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBSZXNwb25zZSBvYmplY3QuXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIEJhc2ljIHVzYWdlIGV4YW1wbGU6XHJcbiAgICAgKiB2YXIgcmVzcG9uc2UgPSBodHRwLmdldChcclxuICAgICAqICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL294eWdlbmhxL294eWdlbi1pZGUvcmVsZWFzZXMnLCBcclxuICAgICAqIHtcclxuICAgICAqICAgJ0FjY2VwdC1FbmNvZGluZyc6ICdnemlwLCBkZWZsYXRlJyxcclxuICAgICAqICAgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6ODYuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC84Ni4wJ1xyXG4gICAgICogfSk7XHJcbiAgICAgKiBsb2cuaW5mbyhyZXNwb25zZS5ib2R5KTtcclxuICAgICAqXHJcbiAgICAgKiAvLyBJZiBzZXJ2ZXIgcmV0dXJucyBEZWZsYXRlLWNvbXByZXNzZWQgc3RyZWFtIHdpdGhvdXQgaGVhZGVycywgYGRlZmxhdGVSYXdgIGNhbiBiZSB1c2VkIHRvIGRlY29tcHJlc3MgdGhlIGNvbnRlbnQuXHJcbiAgICAgKiBodHRwLnNldE9wdGlvbnMoe1xyXG4gICAgICogICBkZWZsYXRlUmF3OiB0cnVlXHJcbiAgICAgKiB9KTtcclxuICAgICAqIHZhciByZXNwb25zZSA9IGh0dHAuZ2V0KCdodHRwczovL0ZPTy5CQVInKTtcclxuICAgICAqIGxvZy5pbmZvKHJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXQodXJsLCBoZWFkZXJzKSB7XHJcbiAgICAgICAgY29uc3QgaHR0cE9wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLkRFRkFVTFRfSFRUUF9PUFRJT05TLFxyXG4gICAgICAgICAgICAuLi50aGlzLl91c2VySHR0cE9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzIHx8IHt9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faHR0cFJlcXVlc3RTeW5jKGh0dHBPcHRzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFBlcmZvcm1zIEhUVFAgUE9TVFxyXG4gICAgICogQGZ1bmN0aW9uIHBvc3RcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgLSBVUkwuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YSAtIERhdGEuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IGhlYWRlcnMgLSBIVFRQIGhlYWRlcnMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFJlc3BvbnNlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgcG9zdCh1cmwsIGRhdGEsIGhlYWRlcnMpIHtcclxuICAgICAgICBjb25zdCByZXNvbHZlZERhdGEgPSB0aGlzLl9yZXNvbHZlRGF0YShkYXRhKTtcclxuXHJcbiAgICAgICAgY29uc3QgaHR0cE9wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLkRFRkFVTFRfSFRUUF9PUFRJT05TLFxyXG4gICAgICAgICAgICAuLi50aGlzLl91c2VySHR0cE9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyB8fCB7fSxcclxuICAgICAgICAgICAgLi4ucmVzb2x2ZWREYXRhXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faHR0cFJlcXVlc3RTeW5jKGh0dHBPcHRzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFBlcmZvcm1zIEhUVFAgUFVUXHJcbiAgICAgKiBAZnVuY3Rpb24gcHV0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIC0gVVJMLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBEYXRhLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBoZWFkZXJzIC0gSFRUUCBoZWFkZXJzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBSZXNwb25zZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHB1dCh1cmwsIGRhdGEsIGhlYWRlcnMpIHtcclxuICAgICAgICBjb25zdCByZXNvbHZlZERhdGEgPSB0aGlzLl9yZXNvbHZlRGF0YShkYXRhKTtcclxuXHJcbiAgICAgICAgY29uc3QgaHR0cE9wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLkRFRkFVTFRfSFRUUF9PUFRJT05TLFxyXG4gICAgICAgICAgICAuLi50aGlzLl91c2VySHR0cE9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzIHx8IHt9LFxyXG4gICAgICAgICAgICAuLi5yZXNvbHZlZERhdGFcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9odHRwUmVxdWVzdFN5bmMoaHR0cE9wdHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGVyZm9ybXMgSFRUUCBQQVRDSFxyXG4gICAgICogQGZ1bmN0aW9uIHBhdGNoXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIC0gVVJMLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBEYXRhLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBoZWFkZXJzIC0gSFRUUCBoZWFkZXJzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBSZXNwb25zZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHBhdGNoKHVybCwgZGF0YSwgaGVhZGVycykge1xyXG4gICAgICAgIGNvbnN0IHJlc29sdmVkRGF0YSA9IHRoaXMuX3Jlc29sdmVEYXRhKGRhdGEpO1xyXG5cclxuICAgICAgICBjb25zdCBodHRwT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4uREVGQVVMVF9IVFRQX09QVElPTlMsXHJcbiAgICAgICAgICAgIC4uLnRoaXMuX3VzZXJIdHRwT3B0aW9ucyB8fCB7fSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIG1ldGhvZDogJ1BBVENIJyxcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyB8fCB7fSxcclxuICAgICAgICAgICAgLi4ucmVzb2x2ZWREYXRhXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faHR0cFJlcXVlc3RTeW5jKGh0dHBPcHRzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFBlcmZvcm1zIEhUVFAgREVMRVRFXHJcbiAgICAgKiBAZnVuY3Rpb24gZGVsZXRlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIC0gVVJMLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBoZWFkZXJzIC0gSFRUUCBoZWFkZXJzLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBEYXRhLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBSZXNwb25zZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRlbGV0ZSh1cmwsIGhlYWRlcnMsIGRhdGEpIHtcclxuICAgICAgICBjb25zdCByZXNvbHZlZERhdGEgPSB0aGlzLl9yZXNvbHZlRGF0YShkYXRhKTtcclxuICAgICAgICBjb25zdCBodHRwT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4uREVGQVVMVF9IVFRQX09QVElPTlMsXHJcbiAgICAgICAgICAgIC4uLnRoaXMuX3VzZXJIdHRwT3B0aW9ucyB8fCB7fSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIG1ldGhvZDogJ0RFTEVURScsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMgfHwge30sXHJcbiAgICAgICAgICAgIC4uLnJlc29sdmVkRGF0YVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHBSZXF1ZXN0U3luYyhodHRwT3B0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGxhc3QgcmVzcG9uc2Ugb2JqZWN0XHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0UmVzcG9uc2VcclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUmVzcG9uc2Ugb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRSZXNwb25zZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFJlc3BvbnNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBsYXN0IHJlc3BvbnNlIGJvZHlcclxuICAgICAqIEBmdW5jdGlvbiBnZXRSZXNwb25zZUJvZHlcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gUmVzcG9uc2UgYm9keS5cclxuICAgICAqL1xyXG4gICAgZ2V0UmVzcG9uc2VCb2R5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sYXN0UmVzcG9uc2UgJiYgdGhpcy5fbGFzdFJlc3BvbnNlLmJvZHkgPyB0aGlzLl9sYXN0UmVzcG9uc2UuYm9keSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHJlc3BvbnNlIGhlYWRlcnNcclxuICAgICAqIEBmdW5jdGlvbiBnZXRSZXNwb25zZUhlYWRlcnNcclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUmVzcG9uc2UgaGVhZGVycy5cclxuICAgICAqL1xyXG4gICAgZ2V0UmVzcG9uc2VIZWFkZXJzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbGFzdFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFJlc3BvbnNlLmhlYWRlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHJlc3BvbnNlIFVSTFxyXG4gICAgICogQGZ1bmN0aW9uIGdldFJlc3BvbnNlVXJsXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFJlc3BvbnNlIFVSTC5cclxuICAgICAqL1xyXG4gICAgZ2V0UmVzcG9uc2VVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9sYXN0UmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9sYXN0UmVzcG9uc2UudXJsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IHdoZXRoZXIgdGhlIHNwZWNpZmllZCBwYXR0ZXJuIGlzIHByZXNlbnQgaW4gdGhlIHJlc3BvbnNlIGJvZHkuXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0VGV4dFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBhdHRlcm4gLSBQYXR0ZXJuIHRvIGFzc2VydC5cclxuICAgICAqL1xyXG4gICAgYXNzZXJ0VGV4dChwYXR0ZXJuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9sYXN0UmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuX2xhc3RSZXNwb25zZS5ib2R5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCAnUmVzcG9uc2UgYm9keSBpcyBlbXB0eScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXNwQ29udGVudCA9IHR5cGVvZiB0aGlzLl9sYXN0UmVzcG9uc2UuYm9keSA9PT0gJ3N0cmluZycgPyB0aGlzLl9sYXN0UmVzcG9uc2UuYm9keSA6IEpTT04uc3RyaW5naWZ5KHRoaXMuX2xhc3RSZXNwb25zZS5ib2R5KTtcclxuICAgICAgICBpZiAoIW1vZFV0aWxzLm1hdGNoUGF0dGVybihyZXNwQ29udGVudCwgcGF0dGVybikpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGBFeHBlY3RlZCBIVFRQIHJlc3BvbnNlIGNvbnRlbnQgdG8gbWF0Y2g6IFwiJHtwYXR0ZXJufVwiIGJ1dCBnb3Q6IFwiJHtyZXNwQ29udGVudH1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCByZXNwb25zZSB0aW1lXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0UmVzcG9uc2VUaW1lXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbWF4VGltZSAtIE1heGltdW0gcmVzcG9uc2UgdGltZSBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKi9cclxuICAgIGFzc2VydFJlc3BvbnNlVGltZShtYXhUaW1lKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCBpZiBIVFRQIGhlYWRlciBpcyBwcmVzZW50ZWQgaW4gdGhlIHJlc3BvbnNlXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0SGVhZGVyXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVyTmFtZSAtIEEgSFRUUCBoZWFkZXIgbmFtZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gaGVhZGVyVmFsdWVQYXR0ZXJuIC0gQW4gb3B0aW9uYWwgSFRUUCBoZWFkZXIgdmFsdWUgcGF0dGVybi5cclxuICAgICAqL1xyXG4gICAgYXNzZXJ0SGVhZGVyKGhlYWRlck5hbWUsIGhlYWRlclZhbHVlUGF0dGVybiA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIWhlYWRlck5hbWUgfHwgdHlwZW9mIGhlYWRlck5hbWUgIT09ICdzdHJpbmcnIHx8IGhlYWRlck5hbWUubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoZWFkZXJOYW1lID0gaGVhZGVyTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLl9sYXN0UmVzcG9uc2UuaGVhZGVycztcclxuICAgICAgICBpZiAoIWhlYWRlcnNbaGVhZGVyTmFtZV0pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsICdFeHBlY3RlZCBIVFRQIGhlYWRlciBcIiR7aGVhZGVyTmFtZX1cIiB0byBiZSBwcmVzZW50Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGhlYWRlclZhbHVlUGF0dGVybiAmJiB0eXBlb2YgaGVhZGVyVmFsdWVQYXR0ZXJuID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCBhY3R1YWxIZWFkZXJWYWx1ZSA9IGhlYWRlcnNbaGVhZGVyTmFtZV07XHJcbiAgICAgICAgICAgIGlmICghbW9kVXRpbHMubWF0Y2hQYXR0ZXJuKGFjdHVhbEhlYWRlclZhbHVlLCBoZWFkZXJWYWx1ZVBhdHRlcm4pKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgYEV4cGVjdGVkIEhUVFAgaGVhZGVyIFwiJHtoZWFkZXJOYW1lfVwiIHZhbHVlIHRvIG1hdGNoOiBcIiR7aGVhZGVyVmFsdWVQYXR0ZXJufVwiIGJ1dCBnb3Q6IFwiJHthY3R1YWxIZWFkZXJWYWx1ZX1cImApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IGlmIEhUVFAgY29va2llIGlzIHByZXNlbnRlZCBpbiB0aGUgcmVzcG9uc2VcclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRDb29raWVcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb29raWVOYW1lIC0gQSBIVFRQIGNvb2tpZSBuYW1lLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBjb29raWVWYWx1ZVBhdHRlcm4gLSBBbiBvcHRpb25hbCBIVFRQIGNvb2tpZSB2YWx1ZSBwYXR0ZXJuLlxyXG4gICAgICovXHJcbiAgICBhc3NlcnRDb29raWUoY29va2llTmFtZSwgY29va2llVmFsdWVQYXR0ZXJuKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCB0aGUgbGFzdCBIVFRQIHJlc3BvbnNlJ3Mgc3RhdHVzIGNvZGVcclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRTdGF0dXNcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfEFycmF5fSBjb2RlTGlzdCAtIEEgc2luZ2xlIHN0YXR1cyBjb2RlIG9yIGEgbGlzdCBvZiBjb2Rlcy5cclxuICAgICAqL1xyXG4gICAgYXNzZXJ0U3RhdHVzKGNvZGVMaXN0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9sYXN0UmVzcG9uc2UgfHwgIWNvZGVMaXN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgd2UgZ290IGEgc2luZ2xlIHZhbHVlLCB0aGVuIGNvbnZlcnQgaXQgdG8gYW4gYXJyYXlcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29kZUxpc3QpKSB7XHJcbiAgICAgICAgICAgIGNvZGVMaXN0ID0gW2NvZGVMaXN0XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHRoaXMuX2xhc3RSZXNwb25zZS5zdGF0dXNDb2RlO1xyXG4gICAgICAgIGlmICghY29kZUxpc3QuaW5jbHVkZXMoc3RhdHVzQ29kZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGBFeHBlY3RlZCBIVFRQIHN0YXR1cyB0byBiZTogXCIke2NvZGVMaXN0fVwiIGJ1dCBnb3Q6IFwiJHtzdGF0dXNDb2RlfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IEhUVFAgMjAwIE9LIHN0YXR1c1xyXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydFN0YXR1c09rXHJcbiAgICAgKi9cclxuICAgIGFzc2VydFN0YXR1c09rKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFzc2VydFN0YXR1cygyMDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdGlsbCBhIG5ldyBvbmUgaXMgb3BlbmVkLiBUcmFuc2FjdGlvbiBuYW1lcyBtdXN0IGJlXHJcbiAgICAgKiAgICAgICAgICAgICAgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBfcmVzb2x2ZURhdGEoZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFSZXNvbHZlciA9IHt9O1xyXG5cclxuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAgICAgICBtb2RVdGlscy5hc3NlcnRDaXJjdWxhcihkYXRhKTtcclxuICAgICAgICAgICAgZGF0YVJlc29sdmVyLmpzb24gPSBkYXRhO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGFSZXNvbHZlci5ib2R5ID0gZGF0YTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRhUmVzb2x2ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2h0dHBSZXF1ZXN0U3luYyhodHRwT3B0cykge1xyXG4gICAgICAgIGxldCByZXN1bHQ7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGdvdChodHRwT3B0cyk7XHJcbiAgICAgICAgICAgIGlmIChodHRwT3B0cy5kZWZsYXRlUmF3ICYmIHJlc3VsdC5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gPT09ICdkZWZsYXRlJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgemxpYiA9IHJlcXVpcmUoJ3psaWInKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlY29tcCA9IHpsaWIuY3JlYXRlSW5mbGF0ZVJhdygpO1xyXG4gICAgICAgICAgICAgICAgZGVjb21wLndyaXRlKHJlc3VsdC5ib2R5KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb21wLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ib2R5ID0gZGF0YS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5oZWFkZXJzWydjb250ZW50LXR5cGUnXS5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmJvZHkgPSBKU09OLnBhcnNlKHJlc3VsdC5ib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHBhcnNpbmcgZmFpbHMganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5oZWFkZXJzWydjb250ZW50LXR5cGUnXS5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmJvZHkgPSBKU09OLnBhcnNlKHJlc3VsdC5ib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHBhcnNpbmcgZmFpbHMganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzdG9yZSBsYXN0IHJlc3BvbnNlIHRvIGFsbG93IGZ1cnRoZXIgYXNzZXJ0aW9ucyBhbmQgdmFsaWRhdGlvbnNcclxuICAgICAgICB0aGlzLl9sYXN0UmVzcG9uc2UgPSByZXN1bHQ7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6IHJlc3VsdC5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogcmVzdWx0LnJlc3BvbnNlID8gcmVzdWx0LnJlc3BvbnNlLmhlYWRlcnMgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogcmVzdWx0LnJlc3BvbnNlID8gcmVzdWx0LnJlc3BvbnNlLnN0YXR1c0NvZGUgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZTogcmVzdWx0LnJlc3BvbnNlID8gcmVzdWx0LnJlc3BvbnNlLnN0YXR1c01lc3NhZ2UgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgcmF3Qm9keTogcmVzdWx0LnJlc3BvbnNlID8gcmVzdWx0LnJlc3BvbnNlLnJhd0JvZHkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgYm9keTogcmVzdWx0LnJlc3BvbnNlID8gcmVzdWx0LnJlc3BvbnNlLmJvZHkgOiBudWxsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgaHR0cFZlcnNpb246IHJlc3VsdC5odHRwVmVyc2lvbixcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlc3VsdC5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgdXBncmFkZTogcmVzdWx0LnVwZ3JhZGUsXHJcbiAgICAgICAgICAgICAgICB1cmw6IHJlc3VsdC51cmwsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IHJlc3VsdC5tZXRob2QsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiByZXN1bHQuc3RhdHVzQ29kZSxcclxuICAgICAgICAgICAgICAgIHN0YXR1c01lc3NhZ2U6IHJlc3VsdC5zdGF0dXNNZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgdGltaW5nczogcmVzdWx0LnRpbWluZ3MsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0VXJsOiByZXN1bHQucmVxdWVzdFVybCxcclxuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXJsczogcmVzdWx0LnJlZGlyZWN0VXJscyxcclxuICAgICAgICAgICAgICAgIGlzRnJvbUNhY2hlOiByZXN1bHQuaXNGcm9tQ2FjaGUsXHJcbiAgICAgICAgICAgICAgICBpcDogcmVzdWx0LmlwLFxyXG4gICAgICAgICAgICAgICAgcmV0cnlDb3VudDogcmVzdWx0LnJldHJ5Q291bnQsXHJcbiAgICAgICAgICAgICAgICBib2R5OiByZXN1bHQuYm9keVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufSJdfQ==
|
|
495
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1odHRwLmpzIl0sIm5hbWVzIjpbIk1PRFVMRV9OQU1FIiwiUkVTUE9OU0VfVElNRU9VVCIsIkRBRkFVTFRfSFRUUDIiLCJERUZBVUxUX0hUVFBfT1BUSU9OUyIsImRlY29tcHJlc3MiLCJyZXNwb25zZVR5cGUiLCJ0aW1lb3V0IiwibG9va3VwIiwiY29ubmVjdCIsInNlY3VyZUNvbm5lY3QiLCJzb2NrZXQiLCJzZW5kIiwicmVzcG9uc2UiLCJodHRwMiIsImh0dHBzIiwicmVqZWN0VW5hdXRob3JpemVkIiwiZG5zTG9va3VwSXBWZXJzaW9uIiwiSHR0cE1vZHVsZSIsIk94eWdlbk1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsIl9hbHdheXNJbml0aWFsaXplZCIsIl9sYXN0UmVzcG9uc2UiLCJfYmFzZVVybCIsIl91c2VySHR0cE9wdGlvbnMiLCJfaXNJbml0aWFsaXplZCIsIm5hbWUiLCJzZXRPcHRpb25zIiwib3B0cyIsImRlZmxhdGVSYXciLCJzZXRQcm94eSIsInVybCIsImJvb3RzdHJhcCIsInJlcXVpcmUiLCJwYXJzZSIsInBhcnNlZFVybCIsImhvc3RuYW1lIiwiT3hFcnJvciIsImVyckhlbHBlciIsImVycm9yQ29kZSIsIkhUVFBfRVJST1IiLCJwb3J0IiwicHJvdG9jb2wiLCJnbG9iYWwiLCJHTE9CQUxfQUdFTlQiLCJIVFRQX1BST1hZIiwiX2FnZW50IiwiZ2V0IiwiaGVhZGVycyIsImhkIiwiQ29ubmVjdGlvbiIsImNvbm5lY3Rpb24iLCJodHRwT3B0cyIsIm1ldGhvZCIsIl9odHRwUmVxdWVzdFN5bmMiLCJwb3N0IiwiZGF0YSIsImJvZHkiLCJwdXQiLCJwYXRjaCIsImRlbGV0ZSIsImdldFJlc3BvbnNlIiwiZ2V0UmVzcG9uc2VCb2R5IiwiZ2V0UmVzcG9uc2VIZWFkZXJzIiwiZ2V0UmVzcG9uc2VVcmwiLCJhc3NlcnRUZXh0IiwicGF0dGVybiIsIkFTU0VSVF9FUlJPUiIsInJlc3BDb250ZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIm1vZFV0aWxzIiwibWF0Y2hQYXR0ZXJuIiwiYXNzZXJ0UmVzcG9uc2VUaW1lIiwibWF4VGltZSIsIkVycm9yIiwiYXNzZXJ0SGVhZGVyIiwiaGVhZGVyTmFtZSIsImhlYWRlclZhbHVlUGF0dGVybiIsImxlbmd0aCIsInRvTG93ZXJDYXNlIiwiYWN0dWFsSGVhZGVyVmFsdWUiLCJhc3NlcnRDb29raWUiLCJjb29raWVOYW1lIiwiY29va2llVmFsdWVQYXR0ZXJuIiwiYXNzZXJ0U3RhdHVzIiwiY29kZUxpc3QiLCJBcnJheSIsImlzQXJyYXkiLCJzdGF0dXNDb2RlIiwiaW5jbHVkZXMiLCJhc3NlcnRTdGF0dXNPayIsInRyYW5zYWN0aW9uIiwiX2xhc3RUcmFuc2FjdGlvbk5hbWUiLCJyZXN1bHQiLCJhZ2VudCIsInpsaWIiLCJkZWNvbXAiLCJjcmVhdGVJbmZsYXRlUmF3Iiwid3JpdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uIiwidG9TdHJpbmciLCJlIiwiZXJyb3JNZXNzYWdlIiwibWVzc2FnZSIsInN0YXR1c01lc3NhZ2UiLCJyYXdCb2R5IiwiaHR0cFZlcnNpb24iLCJ1cGdyYWRlIiwidGltaW5ncyIsInJlcXVlc3RVcmwiLCJyZWRpcmVjdFVybHMiLCJpc0Zyb21DYWNoZSIsImlwIiwicmV0cnlDb3VudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBYUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQU9BLE1BQU1BLFdBQVcsR0FBRyxNQUFwQjtBQUNBLE1BQU1DLGdCQUFnQixHQUFHLE9BQU8sRUFBaEMsQyxDQUFzQzs7QUFDdEMsTUFBTUMsYUFBYSxHQUFHLEtBQXRCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUc7QUFDekJD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TUFBTSxDQUFDZ0IsV0FEZjtBQUVMOUQsUUFBQUEsT0FBTyxFQUFFOEMsTUFBTSxDQUFDOUMsT0FGWDtBQUdMK0QsUUFBQUEsT0FBTyxFQUFFakIsTUFBTSxDQUFDaUIsT0FIWDtBQUlMaEYsUUFBQUEsR0FBRyxFQUFFK0QsTUFBTSxDQUFDL0QsR0FKUDtBQUtMc0IsUUFBQUEsTUFBTSxFQUFFeUMsTUFBTSxDQUFDekMsTUFMVjtBQU1Mb0MsUUFBQUEsVUFBVSxFQUFFSyxNQUFNLENBQUNMLFVBTmQ7QUFPTG1CLFFBQUFBLGFBQWEsRUFBRWQsTUFBTSxDQUFDYyxhQVBqQjtBQVFMSSxRQUFBQSxPQUFPLEVBQUVsQixNQUFNLENBQUNrQixPQVJYO0FBU0xDLFFBQUFBLFVBQVUsRUFBRW5CLE1BQU0sQ0FBQ21CLFVBVGQ7QUFVTEMsUUFBQUEsWUFBWSxFQUFFcEIsTUFBTSxDQUFDb0IsWUFWaEI7QUFXTEMsUUFBQUEsV0FBVyxFQUFFckIsTUFBTSxDQUFDcUIsV0FYZjtBQVlMQyxRQUFBQSxFQUFFLEVBQUV0QixNQUFNLENBQUNzQixFQVpOO0FBYUxDLFFBQUFBLFVBQVUsRUFBRXZCLE1BQU0sQ0FBQ3VCLFVBYmQ7QUFjTDVELFFBQUFBLElBQUksRUFBRXFDLE1BQU0sQ0FBQ3JDO0FBZFIsT0FBVDtBQWdCSDs7QUFFRCxXQUFPcUMsTUFBUDtBQUNIOztBQTdZZ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBodHRwXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggSFRUUChTKVxyXG4gKi9cclxuaW1wb3J0IGdvdCBmcm9tICdnb3QnO1xyXG5pbXBvcnQgT3h5Z2VuTW9kdWxlIGZyb20gJy4uL2NvcmUvT3h5Z2VuTW9kdWxlJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVyckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAnaHR0cCc7XHJcbmNvbnN0IFJFU1BPTlNFX1RJTUVPVVQgPSAxMDAwICogMzA7ICAgLy8gaW4gbXNcclxuY29uc3QgREFGQVVMVF9IVFRQMiA9IGZhbHNlO1xyXG5jb25zdCBERUZBVUxUX0hUVFBfT1BUSU9OUyA9IHtcclxuICAgIGRlY29tcHJlc3M6IHRydWUsXHJcbiAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcclxuICAgIHRpbWVvdXQ6IHtcclxuICAgICAgICBsb29rdXA6IDEwMCxcclxuICAgICAgICBjb25uZWN0OiA1MCxcclxuICAgICAgICBzZWN1cmVDb25uZWN0OiA1MCxcclxuICAgICAgICBzb2NrZXQ6IDEwMDAwLFxyXG4gICAgICAgIHNlbmQ6IDEwMDAwLFxyXG4gICAgICAgIHJlc3BvbnNlOiBSRVNQT05TRV9USU1FT1VUXHJcbiAgICB9LFxyXG4gICAgaHR0cDI6IERBRkFVTFRfSFRUUDIsXHJcbiAgICBodHRwczoge1xyXG4gICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICBkbnNMb29rdXBJcFZlcnNpb246ICdpcHY0J1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cE1vZHVsZSBleHRlbmRzIE94eWdlbk1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLl9hbHdheXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fbGFzdFJlc3BvbnNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9iYXNlVXJsID0gbnVsbDtcclxuICAgICAgICB0aGlzLl91c2VySHR0cE9wdGlvbnMgPSB7fTtcclxuICAgICAgICAvLyBwcmUtaW5pdGlhbGl6ZSB0aGUgbW9kdWxlXHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIEBzdW1tYXJ5IEdldHMgbW9kdWxlIG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IENvbnN0YW50IHZhbHVlIFwiaHR0cFwiLlxyXG4gICAgICovXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXRzIHVzZXIgZGVmaW5lZCBIVFRQIG9wdGlvbnMgKHN1Y2ggYXMgcHJveHksIGRlY29tcHJlc3MgYW5kIGV0Yy4pXHJcbiAgICAgKiBAZnVuY3Rpb24gc2V0T3B0aW9uc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBIVFRQIHJlcXVlc3Qgb3B0aW9ucyBvYmplY3QsIHNlZSBbUmVxdWVzdCBPcHRpb25zXShodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2dvdC9ibG9iL21haW4vZG9jdW1lbnRhdGlvbi8yLW9wdGlvbnMubWQpLiBcclxuICAgICAqIEluIGFkZGl0aW9uIHRvIHRoZSBvcHRpb25zIGxpc3RlZCBpbiB0aGUgbGlua2VkIGRvY3VtZW50LCAnZGVmbGF0ZVJhdycgb3B0aW9uIGNhbiBiZSB1c2VkIHdoZW4gc2VydmVyIHJldHVybnMgRGVmbGF0ZS1jb21wcmVzc2VkIHN0cmVhbSB3aXRob3V0IGhlYWRlcnMuXHJcbiAgICAgKi9cclxuICAgIHNldE9wdGlvbnMob3B0cykge1xyXG4gICAgICAgIHRoaXMuX3VzZXJIdHRwT3B0aW9ucyA9IG9wdHM7XHJcbiAgICAgICAgaWYgKG9wdHMuZGVmbGF0ZVJhdykge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VySHR0cE9wdGlvbnMuZGVjb21wcmVzcyA9IGZhbHNlOyAgICAgLy8gZGVjb21wcmVzcz10cnVlIGluIGRlZmF1bHQgb3B0aW9ucyBzbyB3ZSBvdmVycmlkZSBpdFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldHMgcHJveHkgdXJsIHRvIGJlIHVzZWQgZm9yIGNvbm5lY3Rpb25zIHdpdGggdGhlIHNlcnZpY2UuXHJcbiAgICAgKiBAZnVuY3Rpb24gc2V0UHJveHlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgLSBQcm94eSBzZXJ2ZXIgVVJMLiBOb3QgcGFzc2luZyB0aGlzIGFyZ3VtZW50IHdpbGwgcmVzZXQgdGhlIHByb3h5IHNldHRpbmdzLlxyXG4gICAgICovXHJcbiAgICBzZXRQcm94eSh1cmwpIHtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgICAgICAgIGJvb3RzdHJhcFxyXG4gICAgICAgICAgICB9ID0gcmVxdWlyZSgnZ2xvYmFsLWFnZW50Jyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB7IHBhcnNlIH0gPSByZXF1aXJlKCd1cmwnKTtcclxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gcGFyc2UodXJsKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghcGFyc2VkVXJsLmhvc3RuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkhUVFBfRVJST1IsICdIb3N0bmFtZSBpbiB1bmRlZmluZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXBhcnNlZFVybC5wb3J0KSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkhUVFBfRVJST1IsICdQb3J0IGluIHVuZGVmaW5lZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyc2VkVXJsLnByb3RvY29sKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkhUVFBfRVJST1IsICdQcm90b2NvbCBpbiB1bmRlZmluZWQnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYm9vdHN0cmFwKCk7XHJcbiAgICAgICAgICAgIGdsb2JhbC5HTE9CQUxfQUdFTlQuSFRUUF9QUk9YWSA9IHVybDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2FnZW50KSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9hZ2VudDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBIVFRQIEdFVFxyXG4gICAgICogQGZ1bmN0aW9uIGdldFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIFVSTC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyAtIEhUVFAgaGVhZGVycy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUmVzcG9uc2Ugb2JqZWN0LlxyXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAgICAgKiAvLyBCYXNpYyB1c2FnZSBleGFtcGxlOlxyXG4gICAgICogdmFyIHJlc3BvbnNlID0gaHR0cC5nZXQoXHJcbiAgICAgKiAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9veHlnZW5ocS9veHlnZW4taWRlL3JlbGVhc2VzJywgXHJcbiAgICAgKiB7XHJcbiAgICAgKiAgICdBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCwgZGVmbGF0ZScsXHJcbiAgICAgKiAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQ7IHJ2Ojg2LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvODYuMCdcclxuICAgICAqIH0pO1xyXG4gICAgICogbG9nLmluZm8ocmVzcG9uc2UuYm9keSk7XHJcbiAgICAgKlxyXG4gICAgICogLy8gSWYgc2VydmVyIHJldHVybnMgRGVmbGF0ZS1jb21wcmVzc2VkIHN0cmVhbSB3aXRob3V0IGhlYWRlcnMsIGBkZWZsYXRlUmF3YCBjYW4gYmUgdXNlZCB0byBkZWNvbXByZXNzIHRoZSBjb250ZW50LlxyXG4gICAgICogaHR0cC5zZXRPcHRpb25zKHtcclxuICAgICAqICAgZGVmbGF0ZVJhdzogdHJ1ZVxyXG4gICAgICogfSk7XHJcbiAgICAgKiB2YXIgcmVzcG9uc2UgPSBodHRwLmdldCgnaHR0cHM6Ly9GT08uQkFSJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhyZXNwb25zZS5ib2R5KTtcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0KHVybCwgaGVhZGVycykge1xyXG5cclxuICAgICAgICB2YXIgaGQ9eyBDb25uZWN0aW9uOiAna2VlcC1hbGl2ZSd9O1xyXG4gICAgICAgIGlmIChoZWFkZXJzKSB7XHJcbiAgICAgICAgICAgIGhkID0gaGVhZGVycztcclxuICAgICAgICAgICAgaWYgKCFoZWFkZXJzLmNvbm5lY3Rpb24gJiYgIWhlYWRlcnMuQ29ubmVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaGQuQ29ubmVjdGlvbiA9ICdrZWVwLWFsaXZlJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaHR0cE9wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLkRFRkFVTFRfSFRUUF9PUFRJT05TLFxyXG4gICAgICAgICAgICAuLi50aGlzLl91c2VySHR0cE9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHBSZXF1ZXN0U3luYyhodHRwT3B0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBIVFRQIFBPU1RcclxuICAgICAqIEBmdW5jdGlvbiBwb3N0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIC0gVVJMLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBEYXRhLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBoZWFkZXJzIC0gSFRUUCBoZWFkZXJzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBSZXNwb25zZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHBvc3QodXJsLCBkYXRhLCBoZWFkZXJzKSB7XHJcbiAgICAgICAgY29uc3QgaHR0cE9wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLkRFRkFVTFRfSFRUUF9PUFRJT05TLFxyXG4gICAgICAgICAgICAuLi50aGlzLl91c2VySHR0cE9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgYm9keTogZGF0YSxcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyB8fCB7fVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHBSZXF1ZXN0U3luYyhodHRwT3B0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBIVFRQIFBVVFxyXG4gICAgICogQGZ1bmN0aW9uIHB1dFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIFVSTC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gRGF0YS5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyAtIEhUVFAgaGVhZGVycy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUmVzcG9uc2Ugb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBwdXQodXJsLCBkYXRhLCBoZWFkZXJzKSB7XHJcbiAgICAgICAgY29uc3QgaHR0cE9wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLkRFRkFVTFRfSFRUUF9PUFRJT05TLFxyXG4gICAgICAgICAgICAuLi50aGlzLl91c2VySHR0cE9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICAgICAgICBib2R5OiBkYXRhLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzIHx8IHt9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faHR0cFJlcXVlc3RTeW5jKGh0dHBPcHRzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFBlcmZvcm1zIEhUVFAgUEFUQ0hcclxuICAgICAqIEBmdW5jdGlvbiBwYXRjaFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIFVSTC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gRGF0YS5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyAtIEhUVFAgaGVhZGVycy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUmVzcG9uc2Ugb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBwYXRjaCh1cmwsIGRhdGEsIGhlYWRlcnMpIHtcclxuICAgICAgICBjb25zdCBodHRwT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4uREVGQVVMVF9IVFRQX09QVElPTlMsXHJcbiAgICAgICAgICAgIC4uLnRoaXMuX3VzZXJIdHRwT3B0aW9ucyB8fCB7fSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIG1ldGhvZDogJ1BBVENIJyxcclxuICAgICAgICAgICAgYm9keTogZGF0YSxcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyB8fCB7fVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHBSZXF1ZXN0U3luYyhodHRwT3B0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBIVFRQIERFTEVURVxyXG4gICAgICogQGZ1bmN0aW9uIGRlbGV0ZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIFVSTC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyAtIEhUVFAgaGVhZGVycy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUmVzcG9uc2Ugb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGUodXJsLCBoZWFkZXJzKSB7XHJcbiAgICAgICAgY29uc3QgaHR0cE9wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLkRFRkFVTFRfSFRUUF9PUFRJT05TLFxyXG4gICAgICAgICAgICAuLi50aGlzLl91c2VySHR0cE9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzIHx8IHt9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faHR0cFJlcXVlc3RTeW5jKGh0dHBPcHRzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgbGFzdCByZXNwb25zZSBvYmplY3RcclxuICAgICAqIEBmdW5jdGlvbiBnZXRSZXNwb25zZVxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBSZXNwb25zZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldFJlc3BvbnNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sYXN0UmVzcG9uc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGxhc3QgcmVzcG9uc2UgYm9keVxyXG4gICAgICogQGZ1bmN0aW9uIGdldFJlc3BvbnNlQm9keVxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBSZXNwb25zZSBib2R5LlxyXG4gICAgICovXHJcbiAgICBnZXRSZXNwb25zZUJvZHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RSZXNwb25zZSAmJiB0aGlzLl9sYXN0UmVzcG9uc2UuYm9keSA/IHRoaXMuX2xhc3RSZXNwb25zZS5ib2R5IDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgcmVzcG9uc2UgaGVhZGVyc1xyXG4gICAgICogQGZ1bmN0aW9uIGdldFJlc3BvbnNlSGVhZGVyc1xyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBSZXNwb25zZSBoZWFkZXJzLlxyXG4gICAgICovXHJcbiAgICBnZXRSZXNwb25zZUhlYWRlcnMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9sYXN0UmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9sYXN0UmVzcG9uc2UuaGVhZGVycztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgcmVzcG9uc2UgVVJMXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0UmVzcG9uc2VVcmxcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gUmVzcG9uc2UgVVJMLlxyXG4gICAgICovXHJcbiAgICBnZXRSZXNwb25zZVVybCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2xhc3RSZXNwb25zZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RSZXNwb25zZS51cmw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgd2hldGhlciB0aGUgc3BlY2lmaWVkIHBhdHRlcm4gaXMgcHJlc2VudCBpbiB0aGUgcmVzcG9uc2UgYm9keS5cclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRUZXh0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0dGVybiAtIFBhdHRlcm4gdG8gYXNzZXJ0LlxyXG4gICAgICovXHJcbiAgICBhc3NlcnRUZXh0KHBhdHRlcm4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2xhc3RSZXNwb25zZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5fbGFzdFJlc3BvbnNlLmJvZHkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsICdSZXNwb25zZSBib2R5IGlzIGVtcHR5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3BDb250ZW50ID0gdHlwZW9mIHRoaXMuX2xhc3RSZXNwb25zZS5ib2R5ID09PSAnc3RyaW5nJyA/IHRoaXMuX2xhc3RSZXNwb25zZS5ib2R5IDogSlNPTi5zdHJpbmdpZnkodGhpcy5fbGFzdFJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICAgIGlmICghbW9kVXRpbHMubWF0Y2hQYXR0ZXJuKHJlc3BDb250ZW50LCBwYXR0ZXJuKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgYEV4cGVjdGVkIEhUVFAgcmVzcG9uc2UgY29udGVudCB0byBtYXRjaDogXCIke3BhdHRlcm59XCIgYnV0IGdvdDogXCIke3Jlc3BDb250ZW50fVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IHJlc3BvbnNlIHRpbWVcclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRSZXNwb25zZVRpbWVcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBtYXhUaW1lIC0gTWF4aW11bSByZXNwb25zZSB0aW1lIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqL1xyXG4gICAgYXNzZXJ0UmVzcG9uc2VUaW1lKG1heFRpbWUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IGlmIEhUVFAgaGVhZGVyIGlzIHByZXNlbnRlZCBpbiB0aGUgcmVzcG9uc2VcclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRIZWFkZXJcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJOYW1lIC0gQSBIVFRQIGhlYWRlciBuYW1lLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBoZWFkZXJWYWx1ZVBhdHRlcm4gLSBBbiBvcHRpb25hbCBIVFRQIGhlYWRlciB2YWx1ZSBwYXR0ZXJuLlxyXG4gICAgICovXHJcbiAgICBhc3NlcnRIZWFkZXIoaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWVQYXR0ZXJuID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghaGVhZGVyTmFtZSB8fCB0eXBlb2YgaGVhZGVyTmFtZSAhPT0gJ3N0cmluZycgfHwgaGVhZGVyTmFtZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhlYWRlck5hbWUgPSBoZWFkZXJOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuX2xhc3RSZXNwb25zZS5oZWFkZXJzO1xyXG4gICAgICAgIGlmICghaGVhZGVyc1toZWFkZXJOYW1lXSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgJ0V4cGVjdGVkIEhUVFAgaGVhZGVyIFwiJHtoZWFkZXJOYW1lfVwiIHRvIGJlIHByZXNlbnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaGVhZGVyVmFsdWVQYXR0ZXJuICYmIHR5cGVvZiBoZWFkZXJWYWx1ZVBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbEhlYWRlclZhbHVlID0gaGVhZGVyc1toZWFkZXJOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2RVdGlscy5tYXRjaFBhdHRlcm4oYWN0dWFsSGVhZGVyVmFsdWUsIGhlYWRlclZhbHVlUGF0dGVybikpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgRXhwZWN0ZWQgSFRUUCBoZWFkZXIgXCIke2hlYWRlck5hbWV9XCIgdmFsdWUgdG8gbWF0Y2g6IFwiJHtoZWFkZXJWYWx1ZVBhdHRlcm59XCIgYnV0IGdvdDogXCIke2FjdHVhbEhlYWRlclZhbHVlfVwiYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgaWYgSFRUUCBjb29raWUgaXMgcHJlc2VudGVkIGluIHRoZSByZXNwb25zZVxyXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydENvb2tpZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNvb2tpZU5hbWUgLSBBIEhUVFAgY29va2llIG5hbWUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNvb2tpZVZhbHVlUGF0dGVybiAtIEFuIG9wdGlvbmFsIEhUVFAgY29va2llIHZhbHVlIHBhdHRlcm4uXHJcbiAgICAgKi9cclxuICAgIGFzc2VydENvb2tpZShjb29raWVOYW1lLCBjb29raWVWYWx1ZVBhdHRlcm4pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IHRoZSBsYXN0IEhUVFAgcmVzcG9uc2UncyBzdGF0dXMgY29kZVxyXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydFN0YXR1c1xyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ8QXJyYXl9IGNvZGVMaXN0IC0gQSBzaW5nbGUgc3RhdHVzIGNvZGUgb3IgYSBsaXN0IG9mIGNvZGVzLlxyXG4gICAgICovXHJcbiAgICBhc3NlcnRTdGF0dXMoY29kZUxpc3QpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2xhc3RSZXNwb25zZSB8fCAhY29kZUxpc3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB3ZSBnb3QgYSBzaW5nbGUgdmFsdWUsIHRoZW4gY29udmVydCBpdCB0byBhbiBhcnJheVxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2RlTGlzdCkpIHtcclxuICAgICAgICAgICAgY29kZUxpc3QgPSBbY29kZUxpc3RdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gdGhpcy5fbGFzdFJlc3BvbnNlLnN0YXR1c0NvZGU7XHJcbiAgICAgICAgaWYgKCFjb2RlTGlzdC5pbmNsdWRlcyhzdGF0dXNDb2RlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgYEV4cGVjdGVkIEhUVFAgc3RhdHVzIHRvIGJlOiBcIiR7Y29kZUxpc3R9XCIgYnV0IGdvdDogXCIke3N0YXR1c0NvZGV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgSFRUUCAyMDAgT0sgc3RhdHVzXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0U3RhdHVzT2tcclxuICAgICAqL1xyXG4gICAgYXNzZXJ0U3RhdHVzT2soKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0U3RhdHVzKDIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBPcGVucyBuZXcgdHJhbnNhY3Rpb24uXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHdpbGwgcGVyc2lzdCB0aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmVcclxuICAgICAqICAgICAgICAgICAgICB1bmlxdWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gdHJhbnNhY3Rpb25cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gVGhlIHRyYW5zYWN0aW9uIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHRyYW5zYWN0aW9uKG5hbWUpIHtcclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9odHRwUmVxdWVzdFN5bmMoaHR0cE9wdHMpIHtcclxuICAgICAgICBsZXQgcmVzdWx0O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fYWdlbnQpIHtcclxuICAgICAgICAgICAgaHR0cE9wdHMuYWdlbnQgPSB0aGlzLl9hZ2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGdvdChodHRwT3B0cyk7XHJcbiAgICAgICAgICAgIGlmIChodHRwT3B0cy5kZWZsYXRlUmF3ICYmIHJlc3VsdC5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gPT09ICdkZWZsYXRlJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgemxpYiA9IHJlcXVpcmUoJ3psaWInKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlY29tcCA9IHpsaWIuY3JlYXRlSW5mbGF0ZVJhdygpO1xyXG4gICAgICAgICAgICAgICAgZGVjb21wLndyaXRlKHJlc3VsdC5ib2R5KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb21wLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ib2R5ID0gZGF0YS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmJvZHkgPSBKU09OLnBhcnNlKHJlc3VsdC5ib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHBhcnNpbmcgZmFpbHMganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHN0b3JlIGxhc3QgcmVzcG9uc2UgdG8gYWxsb3cgZnVydGhlciBhc3NlcnRpb25zIGFuZCB2YWxpZGF0aW9uc1xyXG4gICAgICAgIHRoaXMuX2xhc3RSZXNwb25zZSA9IHJlc3VsdDtcclxuXHJcbiAgICAgICAgLyppZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IgJiYgdGhpcy5vcHRpb25zICYmICF0aGlzLm9wdGlvbnMuaHR0cEF1dG9UaHJvd0Vycm9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuSFRUUF9FUlJPUiwgcmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiByZXN1bHQubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlc3VsdC5yZXNwb25zZSA/IHJlc3VsdC5yZXNwb25zZS5oZWFkZXJzIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlc3VsdC5yZXNwb25zZSA/IHJlc3VsdC5yZXNwb25zZS5zdGF0dXNDb2RlIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHN0YXR1c01lc3NhZ2U6IHJlc3VsdC5yZXNwb25zZSA/IHJlc3VsdC5yZXNwb25zZS5zdGF0dXNNZXNzYWdlIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHJhd0JvZHk6IHJlc3VsdC5yZXNwb25zZSA/IHJlc3VsdC5yZXNwb25zZS5yYXdCb2R5IDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGJvZHk6IHJlc3VsdC5yZXNwb25zZSA/IHJlc3VsdC5yZXNwb25zZS5ib2R5IDogbnVsbFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIGh0dHBWZXJzaW9uOiByZXN1bHQuaHR0cFZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXN1bHQuaGVhZGVycyxcclxuICAgICAgICAgICAgICAgIHVwZ3JhZGU6IHJlc3VsdC51cGdyYWRlLFxyXG4gICAgICAgICAgICAgICAgdXJsOiByZXN1bHQudXJsLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiByZXN1bHQubWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogcmVzdWx0LnN0YXR1c0NvZGUsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXNNZXNzYWdlOiByZXN1bHQuc3RhdHVzTWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHRpbWluZ3M6IHJlc3VsdC50aW1pbmdzLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdFVybDogcmVzdWx0LnJlcXVlc3RVcmwsXHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVybHM6IHJlc3VsdC5yZWRpcmVjdFVybHMsXHJcbiAgICAgICAgICAgICAgICBpc0Zyb21DYWNoZTogcmVzdWx0LmlzRnJvbUNhY2hlLFxyXG4gICAgICAgICAgICAgICAgaXA6IHJlc3VsdC5pcCxcclxuICAgICAgICAgICAgICAgIHJldHJ5Q291bnQ6IHJlc3VsdC5yZXRyeUNvdW50LFxyXG4gICAgICAgICAgICAgICAgYm9keTogcmVzdWx0LmJvZHlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuIl19
|