appium-android-driver 4.52.0 → 4.52.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bootstrap/README.md +19 -0
- package/build/index.js +4 -6
- package/build/lib/android-helpers.js +5 -8
- package/build/lib/commands/actions.js +1 -1
- package/build/lib/commands/alert.js +1 -1
- package/build/lib/commands/context.js +4 -6
- package/build/lib/commands/element.js +1 -1
- package/build/lib/commands/find.js +1 -1
- package/build/lib/commands/general.js +2 -2
- package/build/lib/commands/ime.js +1 -1
- package/build/lib/commands/log.js +1 -1
- package/build/lib/commands/network.js +1 -1
- package/build/lib/commands/performance.js +107 -89
- package/build/lib/commands/touch.js +1 -1
- package/build/lib/desired-caps.js +1 -1
- package/build/lib/unlock-helpers.js +1 -1
- package/build/lib/webview-helpers.js +1 -1
- package/lib/.DS_Store +0 -0
- package/lib/commands/performance.js +146 -115
- package/package.json +1 -1
- package/lib/.android-helpers.js.un~ +0 -0
- package/lib/.desired-caps.js.un~ +0 -0
- package/lib/.driver.js.un~ +0 -0
- package/lib/.server.js.un~ +0 -0
- package/lib/.webview-helpers.js.un~ +0 -0
- package/lib/commands/.alert.js.un~ +0 -0
- package/lib/commands/.context.js.un~ +0 -0
- package/lib/commands/.element.js.un~ +0 -0
- package/lib/commands/.find.js.un~ +0 -0
- package/lib/commands/.general.js.un~ +0 -0
- package/lib/commands/.ime.js.un~ +0 -0
- package/lib/commands/.index.js.un~ +0 -0
- package/lib/commands/.network.js.un~ +0 -0
- package/lib/commands/.touch.js.un~ +0 -0
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.default = exports.NETWORK_KEYS = exports.BATTERY_KEYS = exports.MEMORY_KEYS = exports.CPU_KEYS = exports.SUPPORTED_PERFORMANCE_DATA_TYPES = exports.helpers = exports.commands = void 0;
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
|
@@ -15,9 +15,9 @@ var _asyncbox = require("asyncbox");
|
|
|
15
15
|
|
|
16
16
|
var _logger = _interopRequireDefault(require("../logger"));
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
const commands = {},
|
|
19
|
+
helpers = {},
|
|
20
|
+
extensions = {};
|
|
21
21
|
exports.helpers = helpers;
|
|
22
22
|
exports.commands = commands;
|
|
23
23
|
const NETWORK_KEYS = [['bucketStart', 'activeTime', 'rxBytes', 'rxPackets', 'txBytes', 'txPackets', 'operations', 'bucketDuration'], ['st', 'activeTime', 'rb', 'rp', 'tb', 'tp', 'op', 'bucketDuration']];
|
|
@@ -26,50 +26,99 @@ const CPU_KEYS = ['user', 'kernel'];
|
|
|
26
26
|
exports.CPU_KEYS = CPU_KEYS;
|
|
27
27
|
const BATTERY_KEYS = ['power'];
|
|
28
28
|
exports.BATTERY_KEYS = BATTERY_KEYS;
|
|
29
|
-
const MEMORY_KEYS = ['totalPrivateDirty', 'nativePrivateDirty', 'dalvikPrivateDirty', 'eglPrivateDirty', 'glPrivateDirty', 'totalPss', 'nativePss', 'dalvikPss', 'eglPss', 'glPss', 'nativeHeapAllocatedSize', 'nativeHeapSize'];
|
|
29
|
+
const MEMORY_KEYS = ['totalPrivateDirty', 'nativePrivateDirty', 'dalvikPrivateDirty', 'eglPrivateDirty', 'glPrivateDirty', 'totalPss', 'nativePss', 'dalvikPss', 'eglPss', 'glPss', 'nativeHeapAllocatedSize', 'nativeHeapSize', 'nativeRss', 'dalvikRss', 'totalRss'];
|
|
30
30
|
exports.MEMORY_KEYS = MEMORY_KEYS;
|
|
31
|
-
const SUPPORTED_PERFORMANCE_DATA_TYPES = {
|
|
31
|
+
const SUPPORTED_PERFORMANCE_DATA_TYPES = Object.freeze({
|
|
32
32
|
cpuinfo: 'the amount of cpu by user and kernel process - cpu information for applications on real devices and simulators',
|
|
33
33
|
memoryinfo: 'the amount of memory used by the process - memory information for applications on real devices and simulators',
|
|
34
34
|
batteryinfo: 'the remaining battery power - battery power information for applications on real devices and simulators',
|
|
35
35
|
networkinfo: 'the network statistics - network rx/tx information for applications on real devices and simulators'
|
|
36
|
-
};
|
|
36
|
+
});
|
|
37
37
|
exports.SUPPORTED_PERFORMANCE_DATA_TYPES = SUPPORTED_PERFORMANCE_DATA_TYPES;
|
|
38
|
-
const
|
|
38
|
+
const MEMINFO_TITLES = Object.freeze({
|
|
39
|
+
NATIVE: 'Native',
|
|
40
|
+
DALVIK: 'Dalvik',
|
|
41
|
+
EGL: 'EGL',
|
|
42
|
+
GL: 'GL',
|
|
43
|
+
MTRACK: 'mtrack',
|
|
44
|
+
TOTAL: 'TOTAL',
|
|
45
|
+
HEAP: 'Heap'
|
|
46
|
+
});
|
|
47
|
+
const RETRY_PAUSE_MS = 1000;
|
|
48
|
+
|
|
49
|
+
function parseMeminfoForApi19To29(entries, valDict) {
|
|
50
|
+
const [type, subType] = entries;
|
|
51
|
+
|
|
52
|
+
if (type === MEMINFO_TITLES.NATIVE && subType === MEMINFO_TITLES.HEAP) {
|
|
53
|
+
[,, valDict.nativePss, valDict.nativePrivateDirty,,, valDict.nativeHeapSize, valDict.nativeHeapAllocatedSize] = entries;
|
|
54
|
+
} else if (type === MEMINFO_TITLES.DALVIK && subType === MEMINFO_TITLES.HEAP) {
|
|
55
|
+
[,, valDict.dalvikPss, valDict.dalvikPrivateDirty] = entries;
|
|
56
|
+
} else if (type === MEMINFO_TITLES.EGL && subType === MEMINFO_TITLES.MTRACK) {
|
|
57
|
+
[,, valDict.eglPss, valDict.eglPrivateDirty] = entries;
|
|
58
|
+
} else if (type === MEMINFO_TITLES.GL && subType === MEMINFO_TITLES.MTRACK) {
|
|
59
|
+
[,, valDict.glPss, valDict.glPrivateDirty] = entries;
|
|
60
|
+
} else if (type === MEMINFO_TITLES.TOTAL && entries.length === 8) {
|
|
61
|
+
[, valDict.totalPss, valDict.totalPrivateDirty] = entries;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function parseMeminfoForApiBelow19(entries, valDict) {
|
|
66
|
+
const type = entries[0];
|
|
67
|
+
|
|
68
|
+
if (type === MEMINFO_TITLES.NATIVE) {
|
|
69
|
+
[, valDict.nativePss,, valDict.nativePrivateDirty, valDict.nativeHeapSize, valDict.nativeHeapAllocatedSize] = entries;
|
|
70
|
+
} else if (type === MEMINFO_TITLES.DALVIK) {
|
|
71
|
+
[, valDict.dalvikPss,, valDict.dalvikPrivateDirty] = entries;
|
|
72
|
+
} else if (type === MEMINFO_TITLES.EGL) {
|
|
73
|
+
[, valDict.eglPss,, valDict.eglPrivateDirty] = entries;
|
|
74
|
+
} else if (type === MEMINFO_TITLES.GL) {
|
|
75
|
+
[, valDict.glPss,, valDict.glPrivateDirty] = entries;
|
|
76
|
+
} else if (type === MEMINFO_TITLES.TOTAL) {
|
|
77
|
+
[, valDict.totalPss,, valDict.totalPrivateDirty] = entries;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function parseMeminfoForApiAbove29(entries, valDict) {
|
|
82
|
+
const [type, subType] = entries;
|
|
83
|
+
|
|
84
|
+
if (type === MEMINFO_TITLES.NATIVE && subType === MEMINFO_TITLES.HEAP) {
|
|
85
|
+
[,, valDict.nativePss, valDict.nativePrivateDirty,,, valDict.nativeRss, valDict.nativeHeapSize, valDict.nativeHeapAllocatedSize] = entries;
|
|
86
|
+
} else if (type === MEMINFO_TITLES.DALVIK && subType === MEMINFO_TITLES.HEAP) {
|
|
87
|
+
[,, valDict.dalvikPss, valDict.dalvikPrivateDirty,,, valDict.dalvikRss] = entries;
|
|
88
|
+
} else if (type === MEMINFO_TITLES.EGL && subType === MEMINFO_TITLES.MTRACK) {
|
|
89
|
+
[,, valDict.eglPss, valDict.eglPrivateDirty] = entries;
|
|
90
|
+
} else if (type === MEMINFO_TITLES.GL && subType === MEMINFO_TITLES.MTRACK) {
|
|
91
|
+
[,, valDict.glPss, valDict.glPrivateDirty] = entries;
|
|
92
|
+
} else if (type === MEMINFO_TITLES.TOTAL && entries.length === 9) {
|
|
93
|
+
[, valDict.totalPss, valDict.totalPrivateDirty,,, valDict.totalRss] = entries;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
39
96
|
|
|
40
97
|
commands.getPerformanceDataTypes = function getPerformanceDataTypes() {
|
|
41
98
|
return _lodash.default.keys(SUPPORTED_PERFORMANCE_DATA_TYPES);
|
|
42
99
|
};
|
|
43
100
|
|
|
44
|
-
commands.getPerformanceData = async function getPerformanceData(packageName, dataType,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
switch (dataType) {
|
|
101
|
+
commands.getPerformanceData = async function getPerformanceData(packageName, dataType, retries = 2) {
|
|
102
|
+
switch (_lodash.default.toLower(dataType)) {
|
|
48
103
|
case 'batteryinfo':
|
|
49
|
-
|
|
50
|
-
break;
|
|
104
|
+
return await this.getBatteryInfo(retries);
|
|
51
105
|
|
|
52
106
|
case 'cpuinfo':
|
|
53
|
-
|
|
54
|
-
break;
|
|
107
|
+
return await this.getCPUInfo(packageName, retries);
|
|
55
108
|
|
|
56
109
|
case 'memoryinfo':
|
|
57
|
-
|
|
58
|
-
break;
|
|
110
|
+
return await this.getMemoryInfo(packageName, retries);
|
|
59
111
|
|
|
60
112
|
case 'networkinfo':
|
|
61
|
-
|
|
62
|
-
break;
|
|
113
|
+
return await this.getNetworkTrafficInfo(retries);
|
|
63
114
|
|
|
64
115
|
default:
|
|
65
|
-
throw new Error(`No performance data of type '${dataType}' found
|
|
116
|
+
throw new Error(`No performance data of type '${dataType}' found. ` + `Only the following values are supported: ${JSON.stringify(SUPPORTED_PERFORMANCE_DATA_TYPES, ' ', 2)}`);
|
|
66
117
|
}
|
|
67
|
-
|
|
68
|
-
return data;
|
|
69
118
|
};
|
|
70
119
|
|
|
71
|
-
helpers.getCPUInfo = async function getCPUInfo(packageName,
|
|
72
|
-
return await (0, _asyncbox.retryInterval)(
|
|
120
|
+
helpers.getCPUInfo = async function getCPUInfo(packageName, retries = 2) {
|
|
121
|
+
return await (0, _asyncbox.retryInterval)(retries, RETRY_PAUSE_MS, async () => {
|
|
73
122
|
let output;
|
|
74
123
|
|
|
75
124
|
try {
|
|
@@ -95,8 +144,8 @@ helpers.getCPUInfo = async function getCPUInfo(packageName, dataReadTimeout = 2)
|
|
|
95
144
|
});
|
|
96
145
|
};
|
|
97
146
|
|
|
98
|
-
helpers.getBatteryInfo = async function getBatteryInfo(
|
|
99
|
-
return await (0, _asyncbox.retryInterval)(
|
|
147
|
+
helpers.getBatteryInfo = async function getBatteryInfo(retries = 2) {
|
|
148
|
+
return await (0, _asyncbox.retryInterval)(retries, RETRY_PAUSE_MS, async () => {
|
|
100
149
|
let cmd = ['dumpsys', 'battery', '|', 'grep', 'level'];
|
|
101
150
|
let data = await this.adb.shell(cmd);
|
|
102
151
|
if (!data) throw new Error('No data from dumpsys');
|
|
@@ -110,76 +159,45 @@ helpers.getBatteryInfo = async function getBatteryInfo(dataReadTimeout = 2) {
|
|
|
110
159
|
});
|
|
111
160
|
};
|
|
112
161
|
|
|
113
|
-
helpers.getMemoryInfo = async function getMemoryInfo(packageName,
|
|
114
|
-
return await (0, _asyncbox.retryInterval)(
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
dalvikPss = entries[2];
|
|
135
|
-
dalvikPrivateDirty = entries[3];
|
|
136
|
-
} else if (type === 'EGL' && subType === 'mtrack') {
|
|
137
|
-
eglPss = entries[2];
|
|
138
|
-
eglPrivateDirty = entries[3];
|
|
139
|
-
} else if (type === 'GL' && subType === 'mtrack') {
|
|
140
|
-
glPss = entries[2];
|
|
141
|
-
glPrivateDirty = entries[3];
|
|
142
|
-
} else if (type === 'TOTAL' && entries.length === 8) {
|
|
143
|
-
totalPss = entries[1];
|
|
144
|
-
totalPrivateDirty = entries[2];
|
|
145
|
-
}
|
|
162
|
+
helpers.getMemoryInfo = async function getMemoryInfo(packageName, retries = 2) {
|
|
163
|
+
return await (0, _asyncbox.retryInterval)(retries, RETRY_PAUSE_MS, async () => {
|
|
164
|
+
const cmd = ['dumpsys', 'meminfo', `'${packageName}'`, '|', 'grep', '-E', `'${MEMINFO_TITLES.NATIVE}|${MEMINFO_TITLES.DALVIK}|${MEMINFO_TITLES.EGL}` + `|${MEMINFO_TITLES.GL}|${MEMINFO_TITLES.TOTAL}'`];
|
|
165
|
+
const data = await this.adb.shell(cmd);
|
|
166
|
+
|
|
167
|
+
if (!data) {
|
|
168
|
+
throw new Error('No data from dumpsys');
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const valDict = {
|
|
172
|
+
totalPrivateDirty: ''
|
|
173
|
+
};
|
|
174
|
+
const apiLevel = await this.adb.getApiLevel();
|
|
175
|
+
|
|
176
|
+
for (const line of data.split('\n')) {
|
|
177
|
+
const entries = line.trim().split(/\s+/).filter(Boolean);
|
|
178
|
+
|
|
179
|
+
if (apiLevel >= 30) {
|
|
180
|
+
parseMeminfoForApiAbove29(entries, valDict);
|
|
181
|
+
} else if (apiLevel > 18 && apiLevel < 30) {
|
|
182
|
+
parseMeminfoForApi19To29(entries, valDict);
|
|
146
183
|
} else {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
if (type === 'Native') {
|
|
150
|
-
nativePss = entries[1];
|
|
151
|
-
nativePrivateDirty = entries[3];
|
|
152
|
-
nativeHeapSize = entries[4];
|
|
153
|
-
nativeHeapAllocatedSize = entries[5];
|
|
154
|
-
} else if (type === 'Dalvik') {
|
|
155
|
-
dalvikPss = entries[1];
|
|
156
|
-
dalvikPrivateDirty = entries[3];
|
|
157
|
-
} else if (type === 'EGL') {
|
|
158
|
-
eglPss = entries[1];
|
|
159
|
-
eglPrivateDirty = entries[3];
|
|
160
|
-
} else if (type === 'GL') {
|
|
161
|
-
glPss = entries[1];
|
|
162
|
-
glPrivateDirty = entries[3];
|
|
163
|
-
} else if (type === 'TOTAL') {
|
|
164
|
-
totalPss = entries[1];
|
|
165
|
-
totalPrivateDirty = entries[3];
|
|
166
|
-
}
|
|
184
|
+
parseMeminfoForApiBelow19(entries, valDict);
|
|
167
185
|
}
|
|
168
186
|
}
|
|
169
187
|
|
|
170
|
-
if (totalPrivateDirty && totalPrivateDirty !== 'nodex') {
|
|
171
|
-
|
|
188
|
+
if (valDict.totalPrivateDirty && valDict.totalPrivateDirty !== 'nodex') {
|
|
189
|
+
const headers = _lodash.default.clone(MEMORY_KEYS);
|
|
172
190
|
|
|
173
|
-
|
|
174
|
-
return [headers,
|
|
175
|
-
} else {
|
|
176
|
-
throw new Error(`Unable to parse memory data: '${data}'`);
|
|
191
|
+
const values = headers.map(header => valDict[header]);
|
|
192
|
+
return [headers, values];
|
|
177
193
|
}
|
|
194
|
+
|
|
195
|
+
throw new Error(`Unable to parse memory data: '${data}'`);
|
|
178
196
|
});
|
|
179
197
|
};
|
|
180
198
|
|
|
181
|
-
helpers.getNetworkTrafficInfo = async function getNetworkTrafficInfo(
|
|
182
|
-
return await (0, _asyncbox.retryInterval)(
|
|
199
|
+
helpers.getNetworkTrafficInfo = async function getNetworkTrafficInfo(retries = 2) {
|
|
200
|
+
return await (0, _asyncbox.retryInterval)(retries, RETRY_PAUSE_MS, async () => {
|
|
183
201
|
let returnValue = [];
|
|
184
202
|
let bucketDuration, bucketStart, activeTime, rxBytes, rxPackets, txBytes, txPackets, operations;
|
|
185
203
|
let cmd = ['dumpsys', 'netstats'];
|
|
@@ -311,4 +329,4 @@ var _default = extensions;
|
|
|
311
329
|
exports.default = _default;require('source-map-support').install();
|
|
312
330
|
|
|
313
331
|
|
|
314
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9wZXJmb3JtYW5jZS5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiTkVUV09SS19LRVlTIiwiQ1BVX0tFWVMiLCJCQVRURVJZX0tFWVMiLCJNRU1PUllfS0VZUyIsIlNVUFBPUlRFRF9QRVJGT1JNQU5DRV9EQVRBX1RZUEVTIiwiY3B1aW5mbyIsIm1lbW9yeWluZm8iLCJiYXR0ZXJ5aW5mbyIsIm5ldHdvcmtpbmZvIiwiUkVUUllfUEFVU0UiLCJnZXRQZXJmb3JtYW5jZURhdGFUeXBlcyIsIl8iLCJrZXlzIiwiZ2V0UGVyZm9ybWFuY2VEYXRhIiwicGFja2FnZU5hbWUiLCJkYXRhVHlwZSIsImRhdGFSZWFkVGltZW91dCIsImRhdGEiLCJnZXRCYXR0ZXJ5SW5mbyIsImdldENQVUluZm8iLCJnZXRNZW1vcnlJbmZvIiwiZ2V0TmV0d29ya1RyYWZmaWNJbmZvIiwiRXJyb3IiLCJvdXRwdXQiLCJhZGIiLCJzaGVsbCIsImUiLCJzdGRlcnIiLCJsb2ciLCJpbmZvIiwidXNhZ2VzUGF0dGVybiIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsIm1hdGNoIiwiZXhlYyIsImRlYnVnIiwiY21kIiwicG93ZXIiLCJwYXJzZUludCIsInNwbGl0IiwidHJpbSIsIk51bWJlciIsImlzTmFOIiwiY2xvbmUiLCJ0b1N0cmluZyIsInRvdGFsUHJpdmF0ZURpcnR5IiwidG90YWxQc3MiLCJuYXRpdmVQcml2YXRlRGlydHkiLCJuYXRpdmVQc3MiLCJuYXRpdmVIZWFwU2l6ZSIsIm5hdGl2ZUhlYXBBbGxvY2F0ZWRTaXplIiwiZGFsdmlrUHJpdmF0ZURpcnR5IiwiZGFsdmlrUHNzIiwiZWdsUHJpdmF0ZURpcnR5IiwiZWdsUHNzIiwiZ2xQcml2YXRlRGlydHkiLCJnbFBzcyIsImFwaWxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJsaW5lIiwiZW50cmllcyIsImZpbHRlciIsIkJvb2xlYW4iLCJ0eXBlIiwic3ViVHlwZSIsImxlbmd0aCIsImhlYWRlcnMiLCJyZXR1cm5WYWx1ZSIsImJ1Y2tldER1cmF0aW9uIiwiYnVja2V0U3RhcnQiLCJhY3RpdmVUaW1lIiwicnhCeXRlcyIsInJ4UGFja2V0cyIsInR4Qnl0ZXMiLCJ0eFBhY2tldHMiLCJvcGVyYXRpb25zIiwiaW5kZXgiLCJmcm9tWHRzdGF0cyIsImluZGV4T2YiLCJzdGFydCIsImRlbGltaXRlciIsImVuZCIsInBlbmRpbmdCeXRlcyIsInN1YnN0cmluZyIsImFycmF5TGlzdCIsImoiLCJrIiwicmV0dXJuSW5kZXgiLCJpIiwiaXNFcXVhbCIsImlzVW5kZWZpbmVkIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdBLElBQUlBLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlDQyxVQUFVLEdBQUcsRUFBOUM7OztBQUVBLE1BQU1DLFlBQVksR0FBRyxDQUFDLENBQUMsYUFBRCxFQUFnQixZQUFoQixFQUE4QixTQUE5QixFQUF5QyxXQUF6QyxFQUFzRCxTQUF0RCxFQUFpRSxXQUFqRSxFQUE4RSxZQUE5RSxFQUE0RixnQkFBNUYsQ0FBRCxFQUFnSCxDQUFDLElBQUQsRUFBTyxZQUFQLEVBQXFCLElBQXJCLEVBQTJCLElBQTNCLEVBQWlDLElBQWpDLEVBQXVDLElBQXZDLEVBQTZDLElBQTdDLEVBQW1ELGdCQUFuRCxDQUFoSCxDQUFyQjs7QUFDQSxNQUFNQyxRQUFRLEdBQUcsQ0FBQyxNQUFELEVBQVMsUUFBVCxDQUFqQjs7QUFDQSxNQUFNQyxZQUFZLEdBQUcsQ0FBQyxPQUFELENBQXJCOztBQUNBLE1BQU1DLFdBQVcsR0FBRyxDQUFDLG1CQUFELEVBQXNCLG9CQUF0QixFQUE0QyxvQkFBNUMsRUFBa0UsaUJBQWxFLEVBQXFGLGdCQUFyRixFQUF1RyxVQUF2RyxFQUFtSCxXQUFuSCxFQUFnSSxXQUFoSSxFQUE2SSxRQUE3SSxFQUF1SixPQUF2SixFQUFnSyx5QkFB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Z0MsQ0FBQ3ZFLGdCQUFFK0UsV0FBRixDQUFjUixZQUFkLENBQWpDLElBQWdFLENBQUN2RSxnQkFBRThFLE9BQUYsQ0FBVVAsWUFBVixFQUF3QixPQUF4QixDQUFyRSxFQUF1RztBQUNyRyxhQUFPZixXQUFQO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsWUFBTSxJQUFJN0MsS0FBSixDQUFXLDBDQUF5Q0wsSUFBSyxHQUF6RCxDQUFOO0FBQ0Q7QUFDRixHQXJKWSxDQUFiO0FBc0pELENBdkpEOztBQXlKQTBFLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjN0YsVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBS2VDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcblxuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbnN0IE5FVFdPUktfS0VZUyA9IFtbJ2J1Y2tldFN0YXJ0JywgJ2FjdGl2ZVRpbWUnLCAncnhCeXRlcycsICdyeFBhY2tldHMnLCAndHhCeXRlcycsICd0eFBhY2tldHMnLCAnb3BlcmF0aW9ucycsICdidWNrZXREdXJhdGlvbiddLCBbJ3N0JywgJ2FjdGl2ZVRpbWUnLCAncmInLCAncnAnLCAndGInLCAndHAnLCAnb3AnLCAnYnVja2V0RHVyYXRpb24nXV07XG5jb25zdCBDUFVfS0VZUyA9IFsndXNlcicsICdrZXJuZWwnXTtcbmNvbnN0IEJBVFRFUllfS0VZUyA9IFsncG93ZXInXTtcbmNvbnN0IE1FTU9SWV9LRVlTID0gWyd0b3RhbFByaXZhdGVEaXJ0eScsICduYXRpdmVQcml2YXRlRGlydHknLCAnZGFsdmlrUHJpdmF0ZURpcnR5JywgJ2VnbFByaXZhdGVEaXJ0eScsICdnbFByaXZhdGVEaXJ0eScsICd0b3RhbFBzcycsICduYXRpdmVQc3MnLCAnZGFsdmlrUHNzJywgJ2VnbFBzcycsICdnbFBzcycsICduYXRpdmVIZWFwQWxsb2NhdGVkU2l6ZScsICduYXRpdmVIZWFwU2l6ZSddO1xuXG5jb25zdCBTVVBQT1JURURfUEVSRk9STUFOQ0VfREFUQV9UWVBFUyA9IHtcbiAgY3B1aW5mbzogJ3RoZSBhbW91bnQgb2YgY3B1IGJ5IHVzZXIgYW5kIGtlcm5lbCBwcm9jZXNzIC0gY3B1IGluZm9ybWF0aW9uIGZvciBhcHBsaWNhdGlvbnMgb24gcmVhbCBkZXZpY2VzIGFuZCBzaW11bGF0b3JzJyxcbiAgbWVtb3J5aW5mbzogJ3RoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdGhlIHByb2Nlc3MgLSBtZW1vcnkgaW5mb3JtYXRpb24gZm9yIGFwcGxpY2F0aW9ucyBvbiByZWFsIGRldmljZXMgYW5kIHNpbXVsYXRvcnMnLFxuICBiYXR0ZXJ5aW5mbzogJ3RoZSByZW1haW5pbmcgYmF0dGVyeSBwb3dlciAtIGJhdHRlcnkgcG93ZXIgaW5mb3JtYXRpb24gZm9yIGFwcGxpY2F0aW9ucyBvbiByZWFsIGRldmljZXMgYW5kIHNpbXVsYXRvcnMnLFxuICBuZXR3b3JraW5mbzogJ3RoZSBuZXR3b3JrIHN0YXRpc3RpY3MgLSBuZXR3b3JrIHJ4L3R4IGluZm9ybWF0aW9uIGZvciBhcHBsaWNhdGlvbnMgb24gcmVhbCBkZXZpY2VzIGFuZCBzaW11bGF0b3JzJ1xufTtcblxuY29uc3QgUkVUUllfUEFVU0UgPSAxMDAwO1xuXG4vL1xuLy8gcmV0dXJucyB0aGUgaW5mb3JtYXRpb24gdHlwZSBvZiB0aGUgc3lzdGVtIHN0YXRlIHdoaWNoIGlzIHN1cHBvcnRlZCB0byByZWFkIGFzIGxpa2UgY3B1LCBtZW1vcnksIG5ldHdvcmsgdHJhZmZpYywgYW5kIGJhdHRlcnkuXG4vLyBvdXRwdXQgLSBhcnJheSBsaWtlIGJlbG93XG4vL1tjcHVpbmZvLCBiYXR0ZXJ5aW5mbywgbmV0d29ya2luZm8sIG1lbW9yeWluZm9dXG4vL1xuY29tbWFuZHMuZ2V0UGVyZm9ybWFuY2VEYXRhVHlwZXMgPSBmdW5jdGlvbiBnZXRQZXJmb3JtYW5jZURhdGFUeXBlcyAoKSB7XG4gIHJldHVybiBfLmtleXMoU1VQUE9SVEVEX1BFUkZPUk1BTkNFX0RBVEFfVFlQRVMpO1xufTtcblxuLy8gcmV0dXJucyB0aGUgaW5mb3JtYXRpb24gdHlwZSBvZiB0aGUgc3lzdGVtIHN0YXRlIHdoaWNoIGlzIHN1cHBvcnRlZCB0byByZWFkIGFzIGxpa2UgY3B1LCBtZW1vcnksIG5ldHdvcmsgdHJhZmZpYywgYW5kIGJhdHRlcnkuXG4vL2lucHV0IC0gKHBhY2thZ2VOYW1lKSB0aGUgcGFja2FnZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvblxuLy8gICAgICAgIChkYXRhVHlwZSkgdGhlIHR5cGUgb2Ygc3lzdGVtIHN0YXRlIHdoaWNoIHdhbnRzIHRvIHJlYWQuIEl0IHNob3VsZCBiZSBvbmUgb2YgdGhlIGtleXMgb2YgdGhlIFNVUFBPUlRFRF9QRVJGT1JNQU5DRV9EQVRBX1RZUEVTXG4vLyAgICAgICAgKGRhdGFSZWFkVGltZW91dCkgdGhlIG51bWJlciBvZiBhdHRlbXB0cyB0byByZWFkXG4vLyBvdXRwdXQgLSB0YWJsZSBvZiB0aGUgcGVyZm9ybWFuY2UgZGF0YSwgVGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRhYmxlIHJlcHJlc2VudHMgdGhlIHR5cGUgb2YgZGF0YS4gVGhlIHJlbWFpbmluZyBsaW5lcyByZXByZXNlbnQgdGhlIHZhbHVlcyBvZiB0aGUgZGF0YS5cbi8vXG4vLyBpbiBjYXNlIG9mIGJhdHRlcnkgaW5mbyA6IFtbcG93ZXJdLCBbMjNdXVxuLy8gaW4gY2FzZSBvZiBtZW1vcnkgaW5mbyA6ICBbW3RvdGFsUHJpdmF0ZURpcnR5LCBuYXRpdmVQcml2YXRlRGlydHksIGRhbHZpa1ByaXZhdGVEaXJ0eSwgZWdsUHJpdmF0ZURpcnR5LCBnbFByaXZhdGVEaXJ0eSwgdG90YWxQc3MsIG5hdGl2ZVBzcywgZGFsdmlrUHNzLCBlZ2xQc3MsIGdsUHNzLCBuYXRpdmVIZWFwQWxsb2NhdGVkU2l6ZSwgbmF0aXZlSGVhcFNpemVdLCBbMTgzNjAsIDgyOTYsIDYxMzIsIG51bGwsIG51bGwsIDQyNTg4LCA4NDA2LCA3MDI0LCBudWxsLCBudWxsLCAyNjUxOSwgMTAzNDRdXVxuLy8gaW4gY2FzZSBvZiBuZXR3b3JrIGluZm8gOiBbW2J1Y2tldFN0YXJ0LCBhY3RpdmVUaW1lLCByeEJ5dGVzLCByeFBhY2tldHMsIHR4Qnl0ZXMsIHR4UGFja2V0cywgb3BlcmF0aW9ucywgYnVja2V0RHVyYXRpb24sXSwgWzE0NzgwOTE2MDAwMDAsIG51bGwsIDEwOTkwNzUsIDYxMDk0NywgOTI4LCAxMTQzNjIsIDc2OSwgMCwgMzYwMDAwMF0sIFsxNDc4MDk1MjAwMDAwLCBudWxsLCAxMzA2MzAwLCA0MDU5OTcsIDUwOSwgNDYzNTksIDM3MCwgMCwgMzYwMDAwMF1dXG4vLyBpbiBjYXNlIG9mIG5ldHdvcmsgaW5mbyA6IFtbc3QsIGFjdGl2ZVRpbWUsIHJiLCBycCwgdGIsIHRwLCBvcCwgYnVja2V0RHVyYXRpb25dLCBbMTQ3ODA4ODAwMCwgbnVsbCwgbnVsbCwgMzIxMTUyOTYsIDM0MjkxLCAyOTU2ODA1LCAyNTcwNSwgMCwgMzYwMF0sIFsxNDc4MDkxNjAwLCBudWxsLCBudWxsLCAyNzE0NjgzLCAxMTgyMSwgMTQyMDU2NCwgMTI2NTAsIDAsIDM2MDBdLCBbMTQ3ODA5NTIwMCwgbnVsbCwgbnVsbCwgMTAwNzkyMTMsIDE5OTYyLCAyNDg3NzA1LCAyMDAxNSwgMCwgMzYwMF0sIFsxNDc4MDk4ODAwLCBudWxsLCBudWxsLCA0NDQ0NDMzLCAxMDIyNywgMTQzMDM1NiwgMTA0OTMsIDAsIDM2MDBdXVxuLy8gaW4gY2FzZSBvZiBjcHUgaW5mbyA6IFtbdXNlciwga2VybmVsXSwgWzAuOSwgMS4zXV1cbi8vXG5jb21tYW5kcy5nZXRQZXJmb3JtYW5jZURhdGEgPSBhc3luYyBmdW5jdGlvbiBnZXRQZXJmb3JtYW5jZURhdGEgKHBhY2thZ2VOYW1lLCBkYXRhVHlwZSwgZGF0YVJlYWRUaW1lb3V0ID0gMikge1xuICBsZXQgZGF0YTtcbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgJ2JhdHRlcnlpbmZvJzpcbiAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLmdldEJhdHRlcnlJbmZvKGRhdGFSZWFkVGltZW91dCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjcHVpbmZvJzpcbiAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLmdldENQVUluZm8ocGFja2FnZU5hbWUsIGRhdGFSZWFkVGltZW91dCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdtZW1vcnlpbmZvJzpcbiAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLmdldE1lbW9yeUluZm8ocGFja2FnZU5hbWUsIGRhdGFSZWFkVGltZW91dCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICduZXR3b3JraW5mbyc6XG4gICAgICBkYXRhID0gYXdhaXQgdGhpcy5nZXROZXR3b3JrVHJhZmZpY0luZm8oZGF0YVJlYWRUaW1lb3V0KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHBlcmZvcm1hbmNlIGRhdGEgb2YgdHlwZSAnJHtkYXRhVHlwZX0nIGZvdW5kLmApO1xuICB9XG4gIHJldHVybiBkYXRhO1xufTtcblxuaGVscGVycy5nZXRDUFVJbmZvID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q1BVSW5mbyAocGFja2FnZU5hbWUsIGRhdGFSZWFkVGltZW91dCA9IDIpIHtcbiAgLy8gVE9ETzogZmlndXJlIG91dCB3aHkgdGhpcyBpc1xuICAvLyBzb21ldGltZXMsIHRoZSBmdW5jdGlvbiBvZiAnYWRiLnNoZWxsJyBmYWlscy4gd2hlbiBJIHRlc3RlZCB0aGlzIGZ1bmN0aW9uIG9uIHRoZSB0YXJnZXQgb2YgJ0dhbGF4eSBOb3RlNScsXG4gIC8vIGFkYi5zaGVsbChkdW1wc3lzIGNwdWluZm8pIHJldHVybnMgY3B1IGRhdGFzIGZvciBvdGhlciBhcHBsaWNhdGlvbiBwYWNrYWdlcywgYnV0IEkgY2FuJ3QgZmluZCB0aGUgZGF0YSBmb3IgcGFja2FnZU5hbWUuXG4gIC8vIEl0IHVzdWFsbHkgZmFpbHMgMzAgdGltZXMgYW5kIHN1Y2Nlc3MgZm9yIHRoZSBuZXh0IHRpbWUsXG4gIC8vIFNpbmNlIHRoZW4sIGhlIGhhcyBjb250aW51ZWQgdG8gc3VjY2VlZC5cbiAgcmV0dXJuIGF3YWl0IHJldHJ5SW50ZXJ2YWwoZGF0YVJlYWRUaW1lb3V0LCBSRVRSWV9QQVVTRSwgYXN5bmMgKCkgPT4ge1xuICAgIGxldCBvdXRwdXQ7XG4gICAgdHJ5IHtcbiAgICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZHVtcHN5cycsICdjcHVpbmZvJ10pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLnN0ZGVycikge1xuICAgICAgICBsb2cuaW5mbyhlLnN0ZGVycik7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICAvLyBgb3V0cHV0YCB3aWxsIGJlIHNvbWV0aGluZyBsaWtlXG4gICAgLy8gICAgKzAlIDIyMDkvaW8uYXBwaXVtLmFuZHJvaWQuYXBpczogMC4xJSB1c2VyICsgMC4yJSBrZXJuZWwgLyBmYXVsdHM6IDcwIG1pbm9yXG4gICAgY29uc3QgdXNhZ2VzUGF0dGVybiA9XG4gICAgICBuZXcgUmVnRXhwKGBeLitcXFxcLyR7Xy5lc2NhcGVSZWdFeHAocGFja2FnZU5hbWUpfTpcXFxcRCsoW1xcXFxkLl0rKSVcXFxccyt1c2VyXFxcXHMrXFxcXCtcXFxccysoW1xcXFxkLl0rKSVcXFxccytrZXJuZWxgLCAnbScpO1xuICAgIGNvbnN0IG1hdGNoID0gdXNhZ2VzUGF0dGVybi5leGVjKG91dHB1dCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgbG9nLmRlYnVnKG91dHB1dCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBjcHUgdXNhZ2UgZGF0YSBmb3IgJyR7cGFja2FnZU5hbWV9Jy4gQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgIH1cbiAgICByZXR1cm4gW0NQVV9LRVlTLCBbbWF0Y2hbMV0sIG1hdGNoWzJdXV07XG4gIH0pO1xufTtcblxuaGVscGVycy5nZXRCYXR0ZXJ5SW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldEJhdHRlcnlJbmZvIChkYXRhUmVhZFRpbWVvdXQgPSAyKSB7XG4gIHJldHVybiBhd2FpdCByZXRyeUludGVydmFsKGRhdGFSZWFkVGltZW91dCwgUkVUUllfUEFVU0UsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgY21kID0gWydkdW1wc3lzJywgJ2JhdHRlcnknLCAnfCcsICdncmVwJywgJ2xldmVsJ107XG4gICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChjbWQpO1xuICAgIGlmICghZGF0YSkgdGhyb3cgbmV3IEVycm9yKCdObyBkYXRhIGZyb20gZHVtcHN5cycpOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgIGxldCBwb3dlciA9IHBhcnNlSW50KChkYXRhLnNwbGl0KCc6JylbMV0gfHwgJycpLnRyaW0oKSwgMTApO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNOYU4ocG93ZXIpKSB7XG4gICAgICByZXR1cm4gW18uY2xvbmUoQkFUVEVSWV9LRVlTKSwgW3Bvd2VyLnRvU3RyaW5nKCldXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgYmF0dGVyeSBkYXRhOiAnJHtkYXRhfSdgKTtcbiAgICB9XG4gIH0pO1xuXG59O1xuXG5oZWxwZXJzLmdldE1lbW9yeUluZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRNZW1vcnlJbmZvIChwYWNrYWdlTmFtZSwgZGF0YVJlYWRUaW1lb3V0ID0gMikge1xuICByZXR1cm4gYXdhaXQgcmV0cnlJbnRlcnZhbChkYXRhUmVhZFRpbWVvdXQsIFJFVFJZX1BBVVNFLCBhc3luYyAoKSA9PiB7XG4gICAgbGV0IGNtZCA9IFsnZHVtcHN5cycsICdtZW1pbmZvJywgYCcke3BhY2thZ2VOYW1lfSdgLCAnfCcsICdncmVwJywgJy1FJywgXCInTmF0aXZlfERhbHZpa3xFR0x8R0x8VE9UQUwnXCJdO1xuICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoY21kKTtcbiAgICBpZiAoIWRhdGEpIHRocm93IG5ldyBFcnJvcignTm8gZGF0YSBmcm9tIGR1bXBzeXMnKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgICBsZXQgdG90YWxQcml2YXRlRGlydHksIHRvdGFsUHNzLFxuICAgICAgICBuYXRpdmVQcml2YXRlRGlydHksIG5hdGl2ZVBzcywgbmF0aXZlSGVhcFNpemUsIG5hdGl2ZUhlYXBBbGxvY2F0ZWRTaXplLFxuICAgICAgICBkYWx2aWtQcml2YXRlRGlydHksIGRhbHZpa1BzcyxcbiAgICAgICAgZWdsUHJpdmF0ZURpcnR5LCBlZ2xQc3MsXG4gICAgICAgIGdsUHJpdmF0ZURpcnR5LCBnbFBzcztcbiAgICBsZXQgYXBpbGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICAgIGZvciAobGV0IGxpbmUgb2YgZGF0YS5zcGxpdCgnXFxuJykpIHtcbiAgICAgIGxldCBlbnRyaWVzID0gbGluZS50cmltKCkuc3BsaXQoJyAnKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAvLyBlbnRyaWVzIHdpbGwgaGF2ZSB0aGUgdmFsdWVzXG4gICAgICAvLyAgIFsnPFN5c3RlbSBUeXBlPicsICc8TWVtb3J5IFR5cGU+JywgPHBzcyB0b3RhbD4sIDxwcml2YXRlIGRpcnR5PiwgPHByaXZhdGUgY2xlYW4+LCA8c3dhcFBzcyBkaXJ0eT4sIDxoZWFwIHNpemU+LCA8aGVhcCBhbGxvYz4sIDxoZWFwIGZyZWU+XVxuICAgICAgLy8gZXhjZXB0ICdUT1RBTCcsIHdoaWNoIHNraXBzIHRoZSBzZWNvbmQgdHlwZSBuYW1lXG4gICAgICAvL1xuICAgICAgLy8gYW5kIG9uIEFQSSBsZXZlbCAxOCBhbmQgYmVsb3dcbiAgICAgIC8vICAgWyc8U3lzdGVtIFR5cGUnLCAnPHBwcz4nLCAnPHNoYXJlZCBkaXJ0eT4nLCAnPHByaXZhdGUgZGlydHk+JywgJzxoZWFwIHNpemU+JywgJzxoZWFwIGFsbG9jPicsICc8aGVhcCBmcmVlPiddXG5cbiAgICAgIGlmIChhcGlsZXZlbCA+IDE4KSB7XG4gICAgICAgIGxldCB0eXBlID0gZW50cmllc1swXTtcbiAgICAgICAgbGV0IHN1YlR5cGUgPSBlbnRyaWVzWzFdO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ05hdGl2ZScgJiYgc3ViVHlwZSA9PT0gJ0hlYXAnKSB7XG4gICAgICAgICAgLy8gbmF0aXZlIGhlYXBcbiAgICAgICAgICBuYXRpdmVQc3MgPSBlbnRyaWVzWzJdO1xuICAgICAgICAgIG5hdGl2ZVByaXZhdGVEaXJ0eSA9IGVudHJpZXNbM107XG4gICAgICAgICAgbmF0aXZlSGVhcFNpemUgPSBlbnRyaWVzWzZdO1xuICAgICAgICAgIG5hdGl2ZUhlYXBBbGxvY2F0ZWRTaXplID0gZW50cmllc1s3XTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnRGFsdmlrJyAmJiBzdWJUeXBlID09PSAnSGVhcCcpIHtcbiAgICAgICAgICAvLyBkYWx2aWsgaGVhcFxuICAgICAgICAgIGRhbHZpa1BzcyA9IGVudHJpZXNbMl07XG4gICAgICAgICAgZGFsdmlrUHJpdmF0ZURpcnR5ID0gZW50cmllc1szXTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnRUdMJyAmJiBzdWJUeXBlID09PSAnbXRyYWNrJykge1xuICAgICAgICAgIC8vIGVnbFxuICAgICAgICAgIGVnbFBzcyA9IGVudHJpZXNbMl07XG4gICAgICAgICAgZWdsUHJpdmF0ZURpcnR5ID0gZW50cmllc1szXTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnR0wnICYmIHN1YlR5cGUgPT09ICdtdHJhY2snKSB7XG4gICAgICAgICAgLy8gZ2xcbiAgICAgICAgICBnbFBzcyA9IGVudHJpZXNbMl07XG4gICAgICAgICAgZ2xQcml2YXRlRGlydHkgPSBlbnRyaWVzWzNdO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdUT1RBTCcgJiYgZW50cmllcy5sZW5ndGggPT09IDgpIHtcbiAgICAgICAgICAvLyB0aGVyZSBhcmUgdHdvIHRvdGFscywgYW5kIHdlIG9ubHkgd2FudCB0aGUgZnVsbCBsaXN0aW5nLCB3aGljaCBoYXMgOCBlbnRyaWVzXG4gICAgICAgICAgdG90YWxQc3MgPSBlbnRyaWVzWzFdO1xuICAgICAgICAgIHRvdGFsUHJpdmF0ZURpcnR5ID0gZW50cmllc1syXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHR5cGUgPSBlbnRyaWVzWzBdO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ05hdGl2ZScpIHtcbiAgICAgICAgICBuYXRpdmVQc3MgPSBlbnRyaWVzWzFdO1xuICAgICAgICAgIG5hdGl2ZVByaXZhdGVEaXJ0eSA9IGVudHJpZXNbM107XG4gICAgICAgICAgbmF0aXZlSGVhcFNpemUgPSBlbnRyaWVzWzRdO1xuICAgICAgICAgIG5hdGl2ZUhlYXBBbGxvY2F0ZWRTaXplID0gZW50cmllc1s1XTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnRGFsdmlrJykge1xuICAgICAgICAgIGRhbHZpa1BzcyA9IGVudHJpZXNbMV07XG4gICAgICAgICAgZGFsdmlrUHJpdmF0ZURpcnR5ID0gZW50cmllc1szXTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnRUdMJykge1xuICAgICAgICAgIGVnbFBzcyA9IGVudHJpZXNbMV07XG4gICAgICAgICAgZWdsUHJpdmF0ZURpcnR5ID0gZW50cmllc1szXTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnR0wnKSB7XG4gICAgICAgICAgZ2xQc3MgPSBlbnRyaWVzWzFdO1xuICAgICAgICAgIGdsUHJpdmF0ZURpcnR5ID0gZW50cmllc1szXTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnVE9UQUwnKSB7XG4gICAgICAgICAgdG90YWxQc3MgPSBlbnRyaWVzWzFdO1xuICAgICAgICAgIHRvdGFsUHJpdmF0ZURpcnR5ID0gZW50cmllc1szXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b3RhbFByaXZhdGVEaXJ0eSAmJiB0b3RhbFByaXZhdGVEaXJ0eSAhPT0gJ25vZGV4Jykge1xuICAgICAgbGV0IGhlYWRlcnMgPSBfLmNsb25lKE1FTU9SWV9LRVlTKTtcbiAgICAgIGxldCBkYXRhID0gW3RvdGFsUHJpdmF0ZURpcnR5LCBuYXRpdmVQcml2YXRlRGlydHksIGRhbHZpa1ByaXZhdGVEaXJ0eSwgZWdsUHJpdmF0ZURpcnR5LCBnbFByaXZhdGVEaXJ0eSwgdG90YWxQc3MsIG5hdGl2ZVBzcywgZGFsdmlrUHNzLCBlZ2xQc3MsIGdsUHNzLCBuYXRpdmVIZWFwQWxsb2NhdGVkU2l6ZSwgbmF0aXZlSGVhcFNpemVdO1xuICAgICAgcmV0dXJuIFtoZWFkZXJzLCBkYXRhXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgbWVtb3J5IGRhdGE6ICcke2RhdGF9J2ApO1xuICAgIH1cbiAgfSk7XG59O1xuXG5oZWxwZXJzLmdldE5ldHdvcmtUcmFmZmljSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldE5ldHdvcmtUcmFmZmljSW5mbyAoZGF0YVJlYWRUaW1lb3V0ID0gMikge1xuICByZXR1cm4gYXdhaXQgcmV0cnlJbnRlcnZhbChkYXRhUmVhZFRpbWVvdXQsIFJFVFJZX1BBVVNFLCBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHJldHVyblZhbHVlID0gW107XG4gICAgbGV0IGJ1Y2tldER1cmF0aW9uLCBidWNrZXRTdGFydCwgYWN0aXZlVGltZSwgcnhCeXRlcywgcnhQYWNrZXRzLCB0eEJ5dGVzLCB0eFBhY2tldHMsIG9wZXJhdGlvbnM7XG5cbiAgICBsZXQgY21kID0gWydkdW1wc3lzJywgJ25ldHN0YXRzJ107XG4gICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChjbWQpO1xuICAgIGlmICghZGF0YSkgdGhyb3cgbmV3IEVycm9yKCdObyBkYXRhIGZyb20gZHVtcHN5cycpOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgIC8vIEluIGNhc2Ugb2YgbmV0d29yayB0cmFmZmljIGluZm9ybWF0aW9uLCBpdCBpcyBkaWZmZXJlbnQgZm9yIHRoZSByZXR1cm4gZGF0YSBiZXR3ZWVuIGVtdWxhdG9yIGFuZCByZWFsIGRldmljZS5cbiAgICAvLyB0aGUgcmV0dXJuIGRhdGEgb2YgZW11bGF0b3JcbiAgICAvLyAgIFh0IHN0YXRzOlxuICAgIC8vICAgUGVuZGluZyBieXRlczogMzkyNTBcbiAgICAvLyAgIEhpc3Rvcnkgc2luY2UgYm9vdDpcbiAgICAvLyAgIGlkZW50PVtbdHlwZT1XSUZJLCBzdWJUeXBlPUNPTUJJTkVELCBuZXR3b3JrSWQ9XCJXaXJlZFNTSURcIl1dIHVpZD0tMSBzZXQ9QUxMIHRhZz0weDBcbiAgICAvLyAgIE5ldHdvcmtTdGF0c0hpc3Rvcnk6IGJ1Y2tldER1cmF0aW9uPTM2MDAwMDBcbiAgICAvLyAgIGJ1Y2tldFN0YXJ0PTE0NzgwOTg4MDAwMDAgYWN0aXZlVGltZT0zMTgyNCByeEJ5dGVzPTIxNTAyIHJ4UGFja2V0cz03OCB0eEJ5dGVzPTE3NzQ4IHR4UGFja2V0cz05MCBvcGVyYXRpb25zPTBcbiAgICAvL1xuICAgIC8vIDcuMVxuICAgIC8vICAgWHQgc3RhdHM6XG4gICAgLy8gICBQZW5kaW5nIGJ5dGVzOiA0ODE0ODdcbiAgICAvLyAgIEhpc3Rvcnkgc2luY2UgYm9vdDpcbiAgICAvLyAgIGlkZW50PVt7dHlwZT1NT0JJTEUsIHN1YlR5cGU9Q09NQklORUQsIHN1YnNjcmliZXJJZD0zMTAyNjAuLi4sIG1ldGVyZWQ9dHJ1ZX1dIHVpZD0tMSBzZXQ9QUxMIHRhZz0weDBcbiAgICAvLyAgICAgTmV0d29ya1N0YXRzSGlzdG9yeTogYnVja2V0RHVyYXRpb249MzYwMFxuICAgIC8vICAgICAgIHN0PTE0ODM5ODQ4MDAgcmI9MCBycD0wIHRiPTEyMDMxIHRwPTE4NCBvcD0wXG4gICAgLy8gICAgICAgc3Q9MTQ4Mzk4ODQwMCByYj0wIHJwPTAgdGI9Mzg0NzYgdHA9NTg3IG9wPTBcbiAgICAvLyAgICAgICBzdD0xNDgzOTk5MjAwIHJiPTMxNTYxNiBycD00MDAgdGI9OTQ4MDAgdHA9MzYyIG9wPTBcbiAgICAvLyAgICAgICBzdD0xNDg0MDAyODAwIHJiPTE1ODI2IHJwPTIwIHRiPTQ3MzggdHA9MTYgb3A9MFxuICAgIC8vXG4gICAgLy8gdGhlIHJldHVybiBkYXRhIG9mIHJlYWwgZGV2aWNlXG4gICAgLy8gICBYdCBzdGF0czpcbiAgICAvLyAgIFBlbmRpbmcgYnl0ZXM6IDBcbiAgICAvLyAgIEhpc3Rvcnkgc2luY2UgYm9vdDpcbiAgICAvLyAgIGlkZW50PVt7dHlwZT1NT0JJTEUsIHN1YlR5cGU9Q09NQklORUQsIHN1YnNjcmliZXJJZD00NTAwNTAuLi59XSB1aWQ9LTEgc2V0PUFMTCB0YWc9MHgwXG4gICAgLy8gICBOZXR3b3JrU3RhdHNIaXN0b3J5OiBidWNrZXREdXJhdGlvbj0zNjAwXG4gICAgLy8gICBzdD0xNDc4MDg4MDAwIHJiPTMyMTE1Mjk2IHJwPTM0MjkxIHRiPTI5NTY4MDUgdHA9MjU3MDUgb3A9MFxuICAgIC8vICAgc3Q9MTQ3ODA5MTYwMCByYj0yNzE0NjgzIHJwPTExODIxIHRiPTE0MjA1NjQgdHA9MTI2NTAgb3A9MFxuICAgIC8vICAgc3Q9MTQ3ODA5NTIwMCByYj0xMDA3OTIxMyBycD0xOTk2MiB0Yj0yNDg3NzA1IHRwPTIwMDE1IG9wPTBcbiAgICAvLyAgIHN0PTE0NzgwOTg4MDAgcmI9NDQ0NDQzMyBycD0xMDIyNyB0Yj0xNDMwMzU2IHRwPTEwNDkzIG9wPTBcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBmcm9tWHRzdGF0cyA9IGRhdGEuaW5kZXhPZignWHQgc3RhdHM6Jyk7XG5cbiAgICBsZXQgc3RhcnQgPSBkYXRhLmluZGV4T2YoJ1BlbmRpbmcgYnl0ZXM6JywgZnJvbVh0c3RhdHMpO1xuICAgIGxldCBkZWxpbWl0ZXIgPSBkYXRhLmluZGV4T2YoJzonLCBzdGFydCArIDEpO1xuICAgIGxldCBlbmQgPSBkYXRhLmluZGV4T2YoJ1xcbicsIGRlbGltaXRlciArIDEpO1xuICAgIGxldCBwZW5kaW5nQnl0ZXMgPSBkYXRhLnN1YnN0cmluZyhkZWxpbWl0ZXIgKyAxLCBlbmQpLnRyaW0oKTtcblxuICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgIHN0YXJ0ID0gZGF0YS5pbmRleE9mKCdidWNrZXREdXJhdGlvbicsIGVuZCArIDEpO1xuICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgIGVuZCA9IGRhdGEuaW5kZXhPZignXFxuJywgZGVsaW1pdGVyICsgMSk7XG4gICAgICBidWNrZXREdXJhdGlvbiA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICBkYXRhID0gZGF0YS5zdWJzdHJpbmcoZW5kICsgMSwgZGF0YS5sZW5ndGgpO1xuICAgICAgbGV0IGFycmF5TGlzdCA9IGRhdGEuc3BsaXQoJ1xcbicpO1xuXG4gICAgICBpZiAoYXJyYXlMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RhcnQgPSAtMTtcblxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IE5FVFdPUktfS0VZUy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIHN0YXJ0ID0gYXJyYXlMaXN0WzBdLmluZGV4T2YoTkVUV09SS19LRVlTW2pdWzBdKTtcblxuICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICBpbmRleCA9IGo7XG4gICAgICAgICAgICByZXR1cm5WYWx1ZVswXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IE5FVFdPUktfS0VZU1tqXS5sZW5ndGg7ICsraykge1xuICAgICAgICAgICAgICByZXR1cm5WYWx1ZVswXVtrXSA9IE5FVFdPUktfS0VZU1tqXVtrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXR1cm5JbmRleCA9IDE7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZGF0YSA9IGFycmF5TGlzdFtpXTtcbiAgICAgICAgICBzdGFydCA9IGRhdGEuaW5kZXhPZihORVRXT1JLX0tFWVNbaW5kZXhdWzBdKTtcblxuICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICBkZWxpbWl0ZXIgPSBkYXRhLmluZGV4T2YoJz0nLCBzdGFydCArIDEpO1xuICAgICAgICAgICAgZW5kID0gZGF0YS5pbmRleE9mKCcgJywgZGVsaW1pdGVyICsgMSk7XG4gICAgICAgICAgICBidWNrZXRTdGFydCA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuXG4gICAgICAgICAgICBpZiAoZW5kID4gZGVsaW1pdGVyKSB7XG4gICAgICAgICAgICAgIHN0YXJ0ID0gZGF0YS5pbmRleE9mKE5FVFdPUktfS0VZU1tpbmRleF1bMV0sIGVuZCArIDEpO1xuICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgICAgIGRlbGltaXRlciA9IGRhdGEuaW5kZXhPZignPScsIHN0YXJ0ICsgMSk7XG4gICAgICAgICAgICAgICAgZW5kID0gZGF0YS5pbmRleE9mKCcgJywgZGVsaW1pdGVyICsgMSk7XG4gICAgICAgICAgICAgICAgYWN0aXZlVGltZSA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBkYXRhLmluZGV4T2YoTkVUV09SS19LRVlTW2luZGV4XVsyXSwgZW5kICsgMSk7XG4gICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLmluZGV4T2YoJyAnLCBkZWxpbWl0ZXIgKyAxKTtcbiAgICAgICAgICAgICAgICByeEJ5dGVzID0gZGF0YS5zdWJzdHJpbmcoZGVsaW1pdGVyICsgMSwgZW5kKS50cmltKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVuZCA+IGRlbGltaXRlcikge1xuICAgICAgICAgICAgICBzdGFydCA9IGRhdGEuaW5kZXhPZihORVRXT1JLX0tFWVNbaW5kZXhdWzNdLCBlbmQgKyAxKTtcbiAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApIHtcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXIgPSBkYXRhLmluZGV4T2YoJz0nLCBzdGFydCArIDEpO1xuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEuaW5kZXhPZignICcsIGRlbGltaXRlciArIDEpO1xuICAgICAgICAgICAgICAgIHJ4UGFja2V0cyA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBkYXRhLmluZGV4T2YoTkVUV09SS19LRVlTW2luZGV4XVs0XSwgZW5kICsgMSk7XG4gICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLmluZGV4T2YoJyAnLCBkZWxpbWl0ZXIgKyAxKTtcbiAgICAgICAgICAgICAgICB0eEJ5dGVzID0gZGF0YS5zdWJzdHJpbmcoZGVsaW1pdGVyICsgMSwgZW5kKS50cmltKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVuZCA+IGRlbGltaXRlcikge1xuICAgICAgICAgICAgICBzdGFydCA9IGRhdGEuaW5kZXhPZihORVRXT1JLX0tFWVNbaW5kZXhdWzVdLCBlbmQgKyAxKTtcbiAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApIHtcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXIgPSBkYXRhLmluZGV4T2YoJz0nLCBzdGFydCArIDEpO1xuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEuaW5kZXhPZignICcsIGRlbGltaXRlciArIDEpO1xuICAgICAgICAgICAgICAgIHR4UGFja2V0cyA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBkYXRhLmluZGV4T2YoTkVUV09SS19LRVlTW2luZGV4XVs2XSwgZW5kICsgMSk7XG4gICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25zID0gZGF0YS5zdWJzdHJpbmcoZGVsaW1pdGVyICsgMSwgZW5kKS50cmltKCk7XG5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuVmFsdWVbcmV0dXJuSW5kZXgrK10gPSBbYnVja2V0U3RhcnQsIGFjdGl2ZVRpbWUsIHJ4Qnl0ZXMsIHJ4UGFja2V0cywgdHhCeXRlcywgdHhQYWNrZXRzLCBvcGVyYXRpb25zLCBidWNrZXREdXJhdGlvbl07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRXF1YWwocGVuZGluZ0J5dGVzLCAnJykgJiYgIV8uaXNVbmRlZmluZWQocGVuZGluZ0J5dGVzKSAmJiAhXy5pc0VxdWFsKHBlbmRpbmdCeXRlcywgJ25vZGV4JykpIHtcbiAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgbmV0d29yayB0cmFmZmljIGRhdGE6ICcke2RhdGF9J2ApO1xuICAgIH1cbiAgfSk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7XG4gIGNvbW1hbmRzLCBoZWxwZXJzLCBTVVBQT1JURURfUEVSRk9STUFOQ0VfREFUQV9UWVBFUywgQ1BVX0tFWVMsIE1FTU9SWV9LRVlTLFxuICBCQVRURVJZX0tFWVMsIE5FVFdPUktfS0VZUyxcbn07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvcGVyZm9ybWFuY2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
332
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9wZXJmb3JtYW5jZS5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiTkVUV09SS19LRVlTIiwiQ1BVX0tFWVMiLCJCQVRURVJZX0tFWVMiLCJNRU1PUllfS0VZUyIsIlNVUFBPUlRFRF9QRVJGT1JNQU5DRV9EQVRBX1RZUEVTIiwiT2JqZWN0IiwiZnJlZXplIiwiY3B1aW5mbyIsIm1lbW9yeWluZm8iLCJiYXR0ZXJ5aW5mbyIsIm5ldHdvcmtpbmZvIiwiTUVNSU5GT19USVRMRVMiLCJOQVRJVkUiLCJEQUxWSUsiLCJFR0wiLCJHTCIsIk1UUkFDSyIsIlRPVEFMIiwiSEVBUCIsIlJFVFJZX1BBVVNFX01TIiwicGFyc2VNZW1pbmZvRm9yQXBpMTlUbzI5IiwiZW50cmllcyIsInZhbERpY3QiLCJ0eXBlIiwic3ViVHlwZSIsIm5hdGl2ZVBzcyIsIm5hdGl2ZVByaXZhdGVEaXJ0eSIsIm5hdGl2ZUhlYXBTaXplIiwibmF0aXZlSGVhcEFsbG9jYXRlZFNpemUiLCJkYWx2aWtQc3MiLCJkYWx2aWtQcml2YXRlRGlydHkiLCJlZ2xQc3MiLCJlZ2xQcml2YXRlRGlydHkiLCJnbFBzcyIsImdsUHJpdmF0ZURpcnR5IiwibGVuZ3RoIiwidG90YWxQc3MiLCJ0b3RhbFByaXZhdGVEaXJ0eSIsInBhcnNlTWVtaW5mb0ZvckFwaUJlbG93MTkiLCJwYXJzZU1lbWluZm9Gb3JBcGlBYm92ZTI5IiwibmF0aXZlUnNzIiwiZGFsdmlrUnNzIiwidG90YWxSc3MiLCJnZXRQZXJmb3JtYW5jZURhdGFUeXBlcyIsIl8iLCJrZXlzIiwiZ2V0UGVyZm9ybWFuY2VEYXRhIiwicGFja2FnZU5hbWUiLCJkYXRhVHlwZSIsInJldHJpZXMiLCJ0b0xvd2VyIiwiZ2V0QmF0dGVyeUluZm8iLCJnZXRDUFVJbmZvIiwiZ2V0TWVtb3J5SW5mbyIsImdldE5ldHdvcmtUcmFmZmljSW5mbyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIm91dHB1dCIsImFkYiIsInNoZWxsIiwiZSIsInN0ZGVyciIsImxvZyIsImluZm8iLCJ1c2FnZXNQYXR0ZXJuIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwibWF0Y2giLCJleGVjIiwiZGVidWciLCJjbWQiLCJkYXRhIiwicG93ZXIiLCJwYXJzZUludCIsInNwbGl0IiwidHJpbSIsIk51bWJlciIsImlzTmFOIiwiY2xvbmUiLCJ0b1N0cmluZyIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJsaW5lIiwiZmlsdGVyIiwiQm9vbGVhbiIsImhlYWRlcnMiLCJ2YWx1ZXMiLCJtYXAiLCJoZWFkZXIiLCJyZXR1cm5WYWx1ZSIsImJ1Y2tldER1cmF0aW9uIiwiYnVja2V0U3RhcnQiLCJhY3RpdmVUaW1lIiwicnhCeXRlcyIsInJ4UGFja2V0cyIsInR4Qnl0ZXMiLCJ0eFBhY2tldHMiLCJvcGVyYXRpb25zIiwiaW5kZXgiLCJmcm9tWHRzdGF0cyIsImluZGV4T2YiLCJzdGFydCIsImRlbGltaXRlciIsImVuZCIsInBlbmRpbmdCeXRlcyIsInN1YnN0cmluZyIsImFycmF5TGlzdCIsImoiLCJrIiwicmV0dXJuSW5kZXgiLCJpIiwiaXNFcXVhbCIsImlzVW5kZWZpbmVkIiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjtBQUFBLE1BQXFCQyxPQUFPLEdBQUcsRUFBL0I7QUFBQSxNQUFtQ0MsVUFBVSxHQUFHLEVBQWhEOzs7QUFFQSxNQUFNQyxZQUFZLEdBQUcsQ0FDbkIsQ0FBQyxhQUFELEVBQWdCLFlBQWhCLEVBQThCLFNBQTlCLEVBQXlDLFdBQXpDLEVBQXNELFNBQXRELEVBQWlFLFdBQWpFLEVBQThFLFlBQTlFLEVBQTRGLGdCQUE1RixDQURtQixFQUVuQixDQUFDLElBQUQsRUFBTyxZQUFQLEVBQXFCLElBQXJCLEVBQTJCLElBQTNCLEVBQWlDLElBQWpDLEVBQXVDLElBQXZDLEVBQTZDLElBQTdDLEVBQW1ELGdC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Q0FBVywwQ0FBeUNpQixJQUFLLEdBQXpELENBQU47QUFDRDtBQUNGLEdBckpZLENBQWI7QUFzSkQsQ0F2SkQ7O0FBeUpBbkUsTUFBTSxDQUFDNkcsTUFBUCxDQUFjbkgsVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBS2VDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbnN0IE5FVFdPUktfS0VZUyA9IFtcbiAgWydidWNrZXRTdGFydCcsICdhY3RpdmVUaW1lJywgJ3J4Qnl0ZXMnLCAncnhQYWNrZXRzJywgJ3R4Qnl0ZXMnLCAndHhQYWNrZXRzJywgJ29wZXJhdGlvbnMnLCAnYnVja2V0RHVyYXRpb24nXSxcbiAgWydzdCcsICdhY3RpdmVUaW1lJywgJ3JiJywgJ3JwJywgJ3RiJywgJ3RwJywgJ29wJywgJ2J1Y2tldER1cmF0aW9uJ11cbl07XG5jb25zdCBDUFVfS0VZUyA9IFsndXNlcicsICdrZXJuZWwnXTtcbmNvbnN0IEJBVFRFUllfS0VZUyA9IFsncG93ZXInXTtcbmNvbnN0IE1FTU9SWV9LRVlTID0gW1xuICAndG90YWxQcml2YXRlRGlydHknLCAnbmF0aXZlUHJpdmF0ZURpcnR5JywgJ2RhbHZpa1ByaXZhdGVEaXJ0eScsXG4gICdlZ2xQcml2YXRlRGlydHknLCAnZ2xQcml2YXRlRGlydHknLFxuICAndG90YWxQc3MnLCAnbmF0aXZlUHNzJywgJ2RhbHZpa1BzcycsICdlZ2xQc3MnLCAnZ2xQc3MnLFxuICAnbmF0aXZlSGVhcEFsbG9jYXRlZFNpemUnLCAnbmF0aXZlSGVhcFNpemUnLFxuICAnbmF0aXZlUnNzJywgJ2RhbHZpa1JzcycsICd0b3RhbFJzcydcbl07XG5jb25zdCBTVVBQT1JURURfUEVSRk9STUFOQ0VfREFUQV9UWVBFUyA9IE9iamVjdC5mcmVlemUoe1xuICBjcHVpbmZvOiAndGhlIGFtb3VudCBvZiBjcHUgYnkgdXNlciBhbmQga2VybmVsIHByb2Nlc3MgLSBjcHUgaW5mb3JtYXRpb24gZm9yIGFwcGxpY2F0aW9ucyBvbiByZWFsIGRldmljZXMgYW5kIHNpbXVsYXRvcnMnLFxuICBtZW1vcnlpbmZvOiAndGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSB0aGUgcHJvY2VzcyAtIG1lbW9yeSBpbmZvcm1hdGlvbiBmb3IgYXBwbGljYXRpb25zIG9uIHJlYWwgZGV2aWNlcyBhbmQgc2ltdWxhdG9ycycsXG4gIGJhdHRlcnlpbmZvOiAndGhlIHJlbWFpbmluZyBiYXR0ZXJ5IHBvd2VyIC0gYmF0dGVyeSBwb3dlciBpbmZvcm1hdGlvbiBmb3IgYXBwbGljYXRpb25zIG9uIHJlYWwgZGV2aWNlcyBhbmQgc2ltdWxhdG9ycycsXG4gIG5ldHdvcmtpbmZvOiAndGhlIG5ldHdvcmsgc3RhdGlzdGljcyAtIG5ldHdvcmsgcngvdHggaW5mb3JtYXRpb24gZm9yIGFwcGxpY2F0aW9ucyBvbiByZWFsIGRldmljZXMgYW5kIHNpbXVsYXRvcnMnXG59KTtcbmNvbnN0IE1FTUlORk9fVElUTEVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIE5BVElWRTogJ05hdGl2ZScsXG4gIERBTFZJSzogJ0RhbHZpaycsXG4gIEVHTDogJ0VHTCcsXG4gIEdMOiAnR0wnLFxuICBNVFJBQ0s6ICdtdHJhY2snLFxuICBUT1RBTDogJ1RPVEFMJyxcbiAgSEVBUDogJ0hlYXAnXG59KTtcbmNvbnN0IFJFVFJZX1BBVVNFX01TID0gMTAwMDtcblxuLyoqXG4gKiBBUEkgbGV2ZWwgYmV0d2VlbiAxOCBhbmQgMzBcbiAqIFsnPFN5c3RlbSBUeXBlPicsICc8TWVtb3J5IFR5cGU+JywgPHBzcyB0b3RhbD4sIDxwcml2YXRlIGRpcnR5PiwgPHByaXZhdGUgY2xlYW4+LCA8c3dhcFBzcyBkaXJ0eT4sIDxoZWFwIHNpemU+LCA8aGVhcCBhbGxvYz4sIDxoZWFwIGZyZWU+XVxuICogZXhjZXB0ICdUT1RBTCcsIHdoaWNoIHNraXBzIHRoZSBzZWNvbmQgdHlwZSBuYW1lXG4gKiAhISEgdmFsRGljdCBnZXRzIG11dGF0ZWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZW1pbmZvRm9yQXBpMTlUbzI5IChlbnRyaWVzLCB2YWxEaWN0KSB7XG4gIGNvbnN0IFt0eXBlLCBzdWJUeXBlXSA9IGVudHJpZXM7XG4gIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5OQVRJVkUgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuSEVBUCkge1xuICAgIFssLCB2YWxEaWN0Lm5hdGl2ZVBzcywgdmFsRGljdC5uYXRpdmVQcml2YXRlRGlydHksLCwgdmFsRGljdC5uYXRpdmVIZWFwU2l6ZSwgdmFsRGljdC5uYXRpdmVIZWFwQWxsb2NhdGVkU2l6ZV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLkRBTFZJSyAmJiBzdWJUeXBlID09PSBNRU1JTkZPX1RJVExFUy5IRUFQKSB7XG4gICAgWywsIHZhbERpY3QuZGFsdmlrUHNzLCB2YWxEaWN0LmRhbHZpa1ByaXZhdGVEaXJ0eV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLkVHTCAmJiBzdWJUeXBlID09PSBNRU1JTkZPX1RJVExFUy5NVFJBQ0spIHtcbiAgICBbLCwgdmFsRGljdC5lZ2xQc3MsIHZhbERpY3QuZWdsUHJpdmF0ZURpcnR5XSA9IGVudHJpZXM7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVNSU5GT19USVRMRVMuR0wgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuTVRSQUNLKSB7XG4gICAgWywsIHZhbERpY3QuZ2xQc3MsIHZhbERpY3QuZ2xQcml2YXRlRGlydHldID0gZW50cmllcztcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5UT1RBTCAmJiBlbnRyaWVzLmxlbmd0aCA9PT0gOCkge1xuICAgIC8vIHRoZXJlIGFyZSB0d28gdG90YWxzLCBhbmQgd2Ugb25seSB3YW50IHRoZSBmdWxsIGxpc3RpbmcsIHdoaWNoIGhhcyA4IGVudHJpZXNcbiAgICBbLCB2YWxEaWN0LnRvdGFsUHNzLCB2YWxEaWN0LnRvdGFsUHJpdmF0ZURpcnR5XSA9IGVudHJpZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBbJzxTeXN0ZW0gVHlwZScsICc8cHBzPicsICc8c2hhcmVkIGRpcnR5PicsICc8cHJpdmF0ZSBkaXJ0eT4nLCAnPGhlYXAgc2l6ZT4nLCAnPGhlYXAgYWxsb2M+JywgJzxoZWFwIGZyZWU+J11cbiAqICEhISB2YWxEaWN0IGdldHMgbXV0YXRlZFxuICovXG5mdW5jdGlvbiBwYXJzZU1lbWluZm9Gb3JBcGlCZWxvdzE5IChlbnRyaWVzLCB2YWxEaWN0KSB7XG4gIGNvbnN0IHR5cGUgPSBlbnRyaWVzWzBdO1xuICBpZiAodHlwZSA9PT0gTUVNSU5GT19USVRMRVMuTkFUSVZFKSB7XG4gICAgWywgdmFsRGljdC5uYXRpdmVQc3MsLCB2YWxEaWN0Lm5hdGl2ZVByaXZhdGVEaXJ0eSwgdmFsRGljdC5uYXRpdmVIZWFwU2l6ZSwgdmFsRGljdC5uYXRpdmVIZWFwQWxsb2NhdGVkU2l6ZV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLkRBTFZJSykge1xuICAgIFssIHZhbERpY3QuZGFsdmlrUHNzLCwgdmFsRGljdC5kYWx2aWtQcml2YXRlRGlydHldID0gZW50cmllcztcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5FR0wpIHtcbiAgICBbLCB2YWxEaWN0LmVnbFBzcywsIHZhbERpY3QuZWdsUHJpdmF0ZURpcnR5XSA9IGVudHJpZXM7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVNSU5GT19USVRMRVMuR0wpIHtcbiAgICBbLCB2YWxEaWN0LmdsUHNzLCwgdmFsRGljdC5nbFByaXZhdGVEaXJ0eV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLlRPVEFMKSB7XG4gICAgWywgdmFsRGljdC50b3RhbFBzcywsIHZhbERpY3QudG90YWxQcml2YXRlRGlydHldID0gZW50cmllcztcbiAgfVxufVxuXG4vKipcbiAqIEFQSSBsZXZlbCAzMCBhbmQgYWJvdmVcbiAqIFsnPFN5c3RlbSBUeXBlPicsICc8TWVtb3J5IFR5cGU+JywgPHBzcyB0b3RhbD4sIDxwcml2YXRlIGRpcnR5PiwgPHByaXZhdGUgY2xlYW4+LCA8c3dhcFBzcyBkaXJ0eT4sIDxyc3MgdG90YWw+LCA8aGVhcCBzaXplPiwgPGhlYXAgYWxsb2M+LCA8aGVhcCBmcmVlPl1cbiAqICEhISB2YWxEaWN0IGdldHMgbXV0YXRlZFxuICovXG5mdW5jdGlvbiBwYXJzZU1lbWluZm9Gb3JBcGlBYm92ZTI5IChlbnRyaWVzLCB2YWxEaWN0KSB7XG4gIGNvbnN0IFt0eXBlLCBzdWJUeXBlXSA9IGVudHJpZXM7XG4gIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5OQVRJVkUgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuSEVBUCkge1xuICAgIFssLCB2YWxEaWN0Lm5hdGl2ZVBzcywgdmFsRGljdC5uYXRpdmVQcml2YXRlRGlydHksLCwgdmFsRGljdC5uYXRpdmVSc3MsIHZhbERpY3QubmF0aXZlSGVhcFNpemUsIHZhbERpY3QubmF0aXZlSGVhcEFsbG9jYXRlZFNpemVdID0gZW50cmllcztcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5EQUxWSUsgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuSEVBUCkge1xuICAgIFssLCB2YWxEaWN0LmRhbHZpa1BzcywgdmFsRGljdC5kYWx2aWtQcml2YXRlRGlydHksLCwgdmFsRGljdC5kYWx2aWtSc3NdID0gZW50cmllcztcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5FR0wgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuTVRSQUNLKSB7XG4gICAgWywsIHZhbERpY3QuZWdsUHNzLCB2YWxEaWN0LmVnbFByaXZhdGVEaXJ0eV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLkdMICYmIHN1YlR5cGUgPT09IE1FTUlORk9fVElUTEVTLk1UUkFDSykge1xuICAgIFssLCB2YWxEaWN0LmdsUHNzLCB2YWxEaWN0LmdsUHJpdmF0ZURpcnR5XSA9IGVudHJpZXM7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVNSU5GT19USVRMRVMuVE9UQUwgJiYgZW50cmllcy5sZW5ndGggPT09IDkpIHtcbiAgICAvLyBoYXMgOSBlbnRyaWVzXG4gICAgWywgdmFsRGljdC50b3RhbFBzcywgdmFsRGljdC50b3RhbFByaXZhdGVEaXJ0eSwsLCB2YWxEaWN0LnRvdGFsUnNzXSA9IGVudHJpZXM7XG4gIH1cbn1cblxuLy9cbi8vIHJldHVybnMgdGhlIGluZm9ybWF0aW9uIHR5cGUgb2YgdGhlIHN5c3RlbSBzdGF0ZSB3aGljaCBpcyBzdXBwb3J0ZWQgdG8gcmVhZCBhcyBsaWtlIGNwdSwgbWVtb3J5LCBuZXR3b3JrIHRyYWZmaWMsIGFuZCBiYXR0ZXJ5LlxuLy8gb3V0cHV0IC0gYXJyYXkgbGlrZSBiZWxvd1xuLy8gW2NwdWluZm8sIGJhdHRlcnlpbmZvLCBuZXR3b3JraW5mbywgbWVtb3J5aW5mb11cbi8vXG5jb21tYW5kcy5nZXRQZXJmb3JtYW5jZURhdGFUeXBlcyA9IGZ1bmN0aW9uIGdldFBlcmZvcm1hbmNlRGF0YVR5cGVzICgpIHtcbiAgcmV0dXJuIF8ua2V5cyhTVVBQT1JURURfUEVSRk9STUFOQ0VfREFUQV9UWVBFUyk7XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGlvbiB0eXBlIG9mIHRoZSBzeXN0ZW0gc3RhdGUgd2hpY2ggaXMgc3VwcG9ydGVkIHRvIHJlYWQgYXMgbGlrZSBjcHUsIG1lbW9yeSwgbmV0d29yayB0cmFmZmljLCBhbmQgYmF0dGVyeS5cbiAqIGlucHV0IC0gKHBhY2thZ2VOYW1lKSB0aGUgcGFja2FnZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvblxuICogICAgICAgIChkYXRhVHlwZSkgdGhlIHR5cGUgb2Ygc3lzdGVtIHN0YXRlIHdoaWNoIHdhbnRzIHRvIHJlYWQuIEl0IHNob3VsZCBiZSBvbmUgb2YgdGhlIGtleXMgb2YgdGhlIFNVUFBPUlRFRF9QRVJGT1JNQU5DRV9EQVRBX1RZUEVTXG4gKiAgICAgICAgKGRhdGFSZWFkVGltZW91dCkgdGhlIG51bWJlciBvZiBhdHRlbXB0cyB0byByZWFkXG4gKiBvdXRwdXQgLSB0YWJsZSBvZiB0aGUgcGVyZm9ybWFuY2UgZGF0YSwgVGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRhYmxlIHJlcHJlc2VudHMgdGhlIHR5cGUgb2YgZGF0YS4gVGhlIHJlbWFpbmluZyBsaW5lcyByZXByZXNlbnQgdGhlIHZhbHVlcyBvZiB0aGUgZGF0YS5cbiAqXG4gKiBpbiBjYXNlIG9mIGJhdHRlcnkgaW5mbyA6IFtbcG93ZXJdLCBbMjNdXVxuICogaW4gY2FzZSBvZiBtZW1vcnkgaW5mbyA6ICBbW3RvdGFsUHJpdmF0ZURpcnR5LCBuYXRpdmVQcml2YXRlRGlydHksIGRhbHZpa1ByaXZhdGVEaXJ0eSwgZWdsUHJpdmF0ZURpcnR5LCBnbFByaXZhdGVEaXJ0eSwgdG90YWxQc3MsXG4gKiAgIG5hdGl2ZVBzcywgZGFsdmlrUHNzLCBlZ2xQc3MsIGdsUHNzLCBuYXRpdmVIZWFwQWxsb2NhdGVkU2l6ZSwgbmF0aXZlSGVhcFNpemVdLCBbMTgzNjAsIDgyOTYsIDYxMzIsIG51bGwsIG51bGwsIDQyNTg4LCA4NDA2LCA3MDI0LCBudWxsLCBudWxsLCAyNjUxOSwgMTAzNDRdXVxuICogaW4gY2FzZSBvZiBuZXR3b3JrIGluZm8gOiBbW2J1Y2tldFN0YXJ0LCBhY3RpdmVUaW1lLCByeEJ5dGVzLCByeFBhY2tldHMsIHR4Qnl0ZXMsIHR4UGFja2V0cywgb3BlcmF0aW9ucywgYnVja2V0RHVyYXRpb24sXSxcbiAqICAgWzE0NzgwOTE2MDAwMDAsIG51bGwsIDEwOTkwNzUsIDYxMDk0NywgOTI4LCAxMTQzNjIsIDc2OSwgMCwgMzYwMDAwMF0sIFsxNDc4MDk1MjAwMDAwLCBudWxsLCAxMzA2MzAwLCA0MDU5OTcsIDUwOSwgNDYzNTksIDM3MCwgMCwgMzYwMDAwMF1dXG4gKiBpbiBjYXNlIG9mIG5ldHdvcmsgaW5mbyA6IFtbc3QsIGFjdGl2ZVRpbWUsIHJiLCBycCwgdGIsIHRwLCBvcCwgYnVja2V0RHVyYXRpb25dLCBbMTQ3ODA4ODAwMCwgbnVsbCwgbnVsbCwgMzIxMTUyOTYsIDM0MjkxLCAyOTU2ODA1LCAyNTcwNSwgMCwgMzYwMF0sXG4gKiAgIFsxNDc4MDkxNjAwLCBudWxsLCBudWxsLCAyNzE0NjgzLCAxMTgyMSwgMTQyMDU2NCwgMTI2NTAsIDAsIDM2MDBdLCBbMTQ3ODA5NTIwMCwgbnVsbCwgbnVsbCwgMTAwNzkyMTMsIDE5OTYyLCAyNDg3NzA1LCAyMDAxNSwgMCwgMzYwMF0sXG4gKiAgIFsxNDc4MDk4ODAwLCBudWxsLCBudWxsLCA0NDQ0NDMzLCAxMDIyNywgMTQzMDM1NiwgMTA0OTMsIDAsIDM2MDBdXVxuICogaW4gY2FzZSBvZiBjcHUgaW5mbyA6IFtbdXNlciwga2VybmVsXSwgWzAuOSwgMS4zXV1cbiAqL1xuY29tbWFuZHMuZ2V0UGVyZm9ybWFuY2VEYXRhID0gYXN5bmMgZnVuY3Rpb24gZ2V0UGVyZm9ybWFuY2VEYXRhIChwYWNrYWdlTmFtZSwgZGF0YVR5cGUsIHJldHJpZXMgPSAyKSB7XG4gIHN3aXRjaCAoXy50b0xvd2VyKGRhdGFUeXBlKSkge1xuICAgIGNhc2UgJ2JhdHRlcnlpbmZvJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEJhdHRlcnlJbmZvKHJldHJpZXMpO1xuICAgIGNhc2UgJ2NwdWluZm8nOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0Q1BVSW5mbyhwYWNrYWdlTmFtZSwgcmV0cmllcyk7XG4gICAgY2FzZSAnbWVtb3J5aW5mbyc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRNZW1vcnlJbmZvKHBhY2thZ2VOYW1lLCByZXRyaWVzKTtcbiAgICBjYXNlICduZXR3b3JraW5mbyc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXROZXR3b3JrVHJhZmZpY0luZm8ocmV0cmllcyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcGVyZm9ybWFuY2UgZGF0YSBvZiB0eXBlICcke2RhdGFUeXBlfScgZm91bmQuIGAgK1xuICAgICAgICBgT25seSB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgc3VwcG9ydGVkOiAke0pTT04uc3RyaW5naWZ5KFNVUFBPUlRFRF9QRVJGT1JNQU5DRV9EQVRBX1RZUEVTLCAnICcsIDIpfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmdldENQVUluZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRDUFVJbmZvIChwYWNrYWdlTmFtZSwgcmV0cmllcyA9IDIpIHtcbiAgLy8gVE9ETzogZmlndXJlIG91dCB3aHkgdGhpcyBpc1xuICAvLyBzb21ldGltZXMsIHRoZSBmdW5jdGlvbiBvZiAnYWRiLnNoZWxsJyBmYWlscy4gd2hlbiBJIHRlc3RlZCB0aGlzIGZ1bmN0aW9uIG9uIHRoZSB0YXJnZXQgb2YgJ0dhbGF4eSBOb3RlNScsXG4gIC8vIGFkYi5zaGVsbChkdW1wc3lzIGNwdWluZm8pIHJldHVybnMgY3B1IGRhdGFzIGZvciBvdGhlciBhcHBsaWNhdGlvbiBwYWNrYWdlcywgYnV0IEkgY2FuJ3QgZmluZCB0aGUgZGF0YSBmb3IgcGFja2FnZU5hbWUuXG4gIC8vIEl0IHVzdWFsbHkgZmFpbHMgMzAgdGltZXMgYW5kIHN1Y2Nlc3MgZm9yIHRoZSBuZXh0IHRpbWUsXG4gIC8vIFNpbmNlIHRoZW4sIGhlIGhhcyBjb250aW51ZWQgdG8gc3VjY2VlZC5cbiAgcmV0dXJuIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgUkVUUllfUEFVU0VfTVMsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgb3V0cHV0O1xuICAgIHRyeSB7XG4gICAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2R1bXBzeXMnLCAnY3B1aW5mbyddKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5zdGRlcnIpIHtcbiAgICAgICAgbG9nLmluZm8oZS5zdGRlcnIpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgLy8gYG91dHB1dGAgd2lsbCBiZSBzb21ldGhpbmcgbGlrZVxuICAgIC8vICAgICswJSAyMjA5L2lvLmFwcGl1bS5hbmRyb2lkLmFwaXM6IDAuMSUgdXNlciArIDAuMiUga2VybmVsIC8gZmF1bHRzOiA3MCBtaW5vclxuICAgIGNvbnN0IHVzYWdlc1BhdHRlcm4gPVxuICAgICAgbmV3IFJlZ0V4cChgXi4rXFxcXC8ke18uZXNjYXBlUmVnRXhwKHBhY2thZ2VOYW1lKX06XFxcXEQrKFtcXFxcZC5dKyklXFxcXHMrdXNlclxcXFxzK1xcXFwrXFxcXHMrKFtcXFxcZC5dKyklXFxcXHMra2VybmVsYCwgJ20nKTtcbiAgICBjb25zdCBtYXRjaCA9IHVzYWdlc1BhdHRlcm4uZXhlYyhvdXRwdXQpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGxvZy5kZWJ1ZyhvdXRwdXQpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgY3B1IHVzYWdlIGRhdGEgZm9yICcke3BhY2thZ2VOYW1lfScuIENoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHNgKTtcbiAgICB9XG4gICAgcmV0dXJuIFtDUFVfS0VZUywgW21hdGNoWzFdLCBtYXRjaFsyXV1dO1xuICB9KTtcbn07XG5cbmhlbHBlcnMuZ2V0QmF0dGVyeUluZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRCYXR0ZXJ5SW5mbyAocmV0cmllcyA9IDIpIHtcbiAgcmV0dXJuIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgUkVUUllfUEFVU0VfTVMsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgY21kID0gWydkdW1wc3lzJywgJ2JhdHRlcnknLCAnfCcsICdncmVwJywgJ2xldmVsJ107XG4gICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChjbWQpO1xuICAgIGlmICghZGF0YSkgdGhyb3cgbmV3IEVycm9yKCdObyBkYXRhIGZyb20gZHVtcHN5cycpOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgIGxldCBwb3dlciA9IHBhcnNlSW50KChkYXRhLnNwbGl0KCc6JylbMV0gfHwgJycpLnRyaW0oKSwgMTApO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNOYU4ocG93ZXIpKSB7XG4gICAgICByZXR1cm4gW18uY2xvbmUoQkFUVEVSWV9LRVlTKSwgW3Bvd2VyLnRvU3RyaW5nKCldXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgYmF0dGVyeSBkYXRhOiAnJHtkYXRhfSdgKTtcbiAgICB9XG4gIH0pO1xufTtcblxuaGVscGVycy5nZXRNZW1vcnlJbmZvID0gYXN5bmMgZnVuY3Rpb24gZ2V0TWVtb3J5SW5mbyAocGFja2FnZU5hbWUsIHJldHJpZXMgPSAyKSB7XG4gIHJldHVybiBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIFJFVFJZX1BBVVNFX01TLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY21kID0gW1xuICAgICAgJ2R1bXBzeXMnLCAnbWVtaW5mbycsIGAnJHtwYWNrYWdlTmFtZX0nYCxcbiAgICAgICd8JywgJ2dyZXAnLCAnLUUnLFxuICAgICAgYCcke01FTUlORk9fVElUTEVTLk5BVElWRX18JHtNRU1JTkZPX1RJVExFUy5EQUxWSUt9fCR7TUVNSU5GT19USVRMRVMuRUdMfWAgK1xuICAgICAgYHwke01FTUlORk9fVElUTEVTLkdMfXwke01FTUlORk9fVElUTEVTLlRPVEFMfSdgXG4gICAgXTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoY21kKTtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZGF0YSBmcm9tIGR1bXBzeXMnKTtcbiAgICB9XG4gICAgY29uc3QgdmFsRGljdCA9IHt0b3RhbFByaXZhdGVEaXJ0eTogJyd9O1xuICAgIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZGF0YS5zcGxpdCgnXFxuJykpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBsaW5lLnRyaW0oKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGlmIChhcGlMZXZlbCA+PSAzMCkge1xuICAgICAgICBwYXJzZU1lbWluZm9Gb3JBcGlBYm92ZTI5KGVudHJpZXMsIHZhbERpY3QpO1xuICAgICAgfSBlbHNlIGlmIChhcGlMZXZlbCA+IDE4ICYmIGFwaUxldmVsIDwgMzApIHtcbiAgICAgICAgcGFyc2VNZW1pbmZvRm9yQXBpMTlUbzI5KGVudHJpZXMsIHZhbERpY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VNZW1pbmZvRm9yQXBpQmVsb3cxOShlbnRyaWVzLCB2YWxEaWN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZhbERpY3QudG90YWxQcml2YXRlRGlydHkgJiYgdmFsRGljdC50b3RhbFByaXZhdGVEaXJ0eSAhPT0gJ25vZGV4Jykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IF8uY2xvbmUoTUVNT1JZX0tFWVMpO1xuICAgICAgY29uc3QgdmFsdWVzID0gaGVhZGVycy5tYXAoKGhlYWRlcikgPT4gdmFsRGljdFtoZWFkZXJdKTtcbiAgICAgIHJldHVybiBbaGVhZGVycywgdmFsdWVzXTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBtZW1vcnkgZGF0YTogJyR7ZGF0YX0nYCk7XG4gIH0pO1xufTtcblxuaGVscGVycy5nZXROZXR3b3JrVHJhZmZpY0luZm8gPSBhc3luYyBmdW5jdGlvbiBnZXROZXR3b3JrVHJhZmZpY0luZm8gKHJldHJpZXMgPSAyKSB7XG4gIHJldHVybiBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIFJFVFJZX1BBVVNFX01TLCBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHJldHVyblZhbHVlID0gW107XG4gICAgbGV0IGJ1Y2tldER1cmF0aW9uLCBidWNrZXRTdGFydCwgYWN0aXZlVGltZSwgcnhCeXRlcywgcnhQYWNrZXRzLCB0eEJ5dGVzLCB0eFBhY2tldHMsIG9wZXJhdGlvbnM7XG5cbiAgICBsZXQgY21kID0gWydkdW1wc3lzJywgJ25ldHN0YXRzJ107XG4gICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChjbWQpO1xuICAgIGlmICghZGF0YSkgdGhyb3cgbmV3IEVycm9yKCdObyBkYXRhIGZyb20gZHVtcHN5cycpOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgIC8vIEluIGNhc2Ugb2YgbmV0d29yayB0cmFmZmljIGluZm9ybWF0aW9uLCBpdCBpcyBkaWZmZXJlbnQgZm9yIHRoZSByZXR1cm4gZGF0YSBiZXR3ZWVuIGVtdWxhdG9yIGFuZCByZWFsIGRldmljZS5cbiAgICAvLyB0aGUgcmV0dXJuIGRhdGEgb2YgZW11bGF0b3JcbiAgICAvLyAgIFh0IHN0YXRzOlxuICAgIC8vICAgUGVuZGluZyBieXRlczogMzkyNTBcbiAgICAvLyAgIEhpc3Rvcnkgc2luY2UgYm9vdDpcbiAgICAvLyAgIGlkZW50PVtbdHlwZT1XSUZJLCBzdWJUeXBlPUNPTUJJTkVELCBuZXR3b3JrSWQ9XCJXaXJlZFNTSURcIl1dIHVpZD0tMSBzZXQ9QUxMIHRhZz0weDBcbiAgICAvLyAgIE5ldHdvcmtTdGF0c0hpc3Rvcnk6IGJ1Y2tldER1cmF0aW9uPTM2MDAwMDBcbiAgICAvLyAgIGJ1Y2tldFN0YXJ0PTE0NzgwOTg4MDAwMDAgYWN0aXZlVGltZT0zMTgyNCByeEJ5dGVzPTIxNTAyIHJ4UGFja2V0cz03OCB0eEJ5dGVzPTE3NzQ4IHR4UGFja2V0cz05MCBvcGVyYXRpb25zPTBcbiAgICAvL1xuICAgIC8vIDcuMVxuICAgIC8vICAgWHQgc3RhdHM6XG4gICAgLy8gICBQZW5kaW5nIGJ5dGVzOiA0ODE0ODdcbiAgICAvLyAgIEhpc3Rvcnkgc2luY2UgYm9vdDpcbiAgICAvLyAgIGlkZW50PVt7dHlwZT1NT0JJTEUsIHN1YlR5cGU9Q09NQklORUQsIHN1YnNjcmliZXJJZD0zMTAyNjAuLi4sIG1ldGVyZWQ9dHJ1ZX1dIHVpZD0tMSBzZXQ9QUxMIHRhZz0weDBcbiAgICAvLyAgICAgTmV0d29ya1N0YXRzSGlzdG9yeTogYnVja2V0RHVyYXRpb249MzYwMFxuICAgIC8vICAgICAgIHN0PTE0ODM5ODQ4MDAgcmI9MCBycD0wIHRiPTEyMDMxIHRwPTE4NCBvcD0wXG4gICAgLy8gICAgICAgc3Q9MTQ4Mzk4ODQwMCByYj0wIHJwPTAgdGI9Mzg0NzYgdHA9NTg3IG9wPTBcbiAgICAvLyAgICAgICBzdD0xNDgzOTk5MjAwIHJiPTMxNTYxNiBycD00MDAgdGI9OTQ4MDAgdHA9MzYyIG9wPTBcbiAgICAvLyAgICAgICBzdD0xNDg0MDAyODAwIHJiPTE1ODI2IHJwPTIwIHRiPTQ3MzggdHA9MTYgb3A9MFxuICAgIC8vXG4gICAgLy8gdGhlIHJldHVybiBkYXRhIG9mIHJlYWwgZGV2aWNlXG4gICAgLy8gICBYdCBzdGF0czpcbiAgICAvLyAgIFBlbmRpbmcgYnl0ZXM6IDBcbiAgICAvLyAgIEhpc3Rvcnkgc2luY2UgYm9vdDpcbiAgICAvLyAgIGlkZW50PVt7dHlwZT1NT0JJTEUsIHN1YlR5cGU9Q09NQklORUQsIHN1YnNjcmliZXJJZD00NTAwNTAuLi59XSB1aWQ9LTEgc2V0PUFMTCB0YWc9MHgwXG4gICAgLy8gICBOZXR3b3JrU3RhdHNIaXN0b3J5OiBidWNrZXREdXJhdGlvbj0zNjAwXG4gICAgLy8gICBzdD0xNDc4MDg4MDAwIHJiPTMyMTE1Mjk2IHJwPTM0MjkxIHRiPTI5NTY4MDUgdHA9MjU3MDUgb3A9MFxuICAgIC8vICAgc3Q9MTQ3ODA5MTYwMCByYj0yNzE0NjgzIHJwPTExODIxIHRiPTE0MjA1NjQgdHA9MTI2NTAgb3A9MFxuICAgIC8vICAgc3Q9MTQ3ODA5NTIwMCByYj0xMDA3OTIxMyBycD0xOTk2MiB0Yj0yNDg3NzA1IHRwPTIwMDE1IG9wPTBcbiAgICAvLyAgIHN0PTE0NzgwOTg4MDAgcmI9NDQ0NDQzMyBycD0xMDIyNyB0Yj0xNDMwMzU2IHRwPTEwNDkzIG9wPTBcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBmcm9tWHRzdGF0cyA9IGRhdGEuaW5kZXhPZignWHQgc3RhdHM6Jyk7XG5cbiAgICBsZXQgc3RhcnQgPSBkYXRhLmluZGV4T2YoJ1BlbmRpbmcgYnl0ZXM6JywgZnJvbVh0c3RhdHMpO1xuICAgIGxldCBkZWxpbWl0ZXIgPSBkYXRhLmluZGV4T2YoJzonLCBzdGFydCArIDEpO1xuICAgIGxldCBlbmQgPSBkYXRhLmluZGV4T2YoJ1xcbicsIGRlbGltaXRlciArIDEpO1xuICAgIGxldCBwZW5kaW5nQnl0ZXMgPSBkYXRhLnN1YnN0cmluZyhkZWxpbWl0ZXIgKyAxLCBlbmQpLnRyaW0oKTtcblxuICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgIHN0YXJ0ID0gZGF0YS5pbmRleE9mKCdidWNrZXREdXJhdGlvbicsIGVuZCArIDEpO1xuICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgIGVuZCA9IGRhdGEuaW5kZXhPZignXFxuJywgZGVsaW1pdGVyICsgMSk7XG4gICAgICBidWNrZXREdXJhdGlvbiA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICBkYXRhID0gZGF0YS5zdWJzdHJpbmcoZW5kICsgMSwgZGF0YS5sZW5ndGgpO1xuICAgICAgbGV0IGFycmF5TGlzdCA9IGRhdGEuc3BsaXQoJ1xcbicpO1xuXG4gICAgICBpZiAoYXJyYXlMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RhcnQgPSAtMTtcblxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IE5FVFdPUktfS0VZUy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIHN0YXJ0ID0gYXJyYXlMaXN0WzBdLmluZGV4T2YoTkVUV09SS19LRVlTW2pdWzBdKTtcblxuICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICBpbmRleCA9IGo7XG4gICAgICAgICAgICByZXR1cm5WYWx1ZVswXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IE5FVFdPUktfS0VZU1tqXS5sZW5ndGg7ICsraykge1xuICAgICAgICAgICAgICByZXR1cm5WYWx1ZVswXVtrXSA9IE5FVFdPUktfS0VZU1tqXVtrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXR1cm5JbmRleCA9IDE7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZGF0YSA9IGFycmF5TGlzdFtpXTtcbiAgICAgICAgICBzdGFydCA9IGRhdGEuaW5kZXhPZihORVRXT1JLX0tFWVNbaW5kZXhdWzBdKTtcblxuICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICBkZWxpbWl0ZXIgPSBkYXRhLmluZGV4T2YoJz0nLCBzdGFydCArIDEpO1xuICAgICAgICAgICAgZW5kID0gZGF0YS5pbmRleE9mKCcgJywgZGVsaW1pdGVyICsgMSk7XG4gICAgICAgICAgICBidWNrZXRTdGFydCA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuXG4gICAgICAgICAgICBpZiAoZW5kID4gZGVsaW1pdGVyKSB7XG4gICAgICAgICAgICAgIHN0YXJ0ID0gZGF0YS5pbmRleE9mKE5FVFdPUktfS0VZU1tpbmRleF1bMV0sIGVuZCArIDEpO1xuICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgICAgIGRlbGltaXRlciA9IGRhdGEuaW5kZXhPZignPScsIHN0YXJ0ICsgMSk7XG4gICAgICAgICAgICAgICAgZW5kID0gZGF0YS5pbmRleE9mKCcgJywgZGVsaW1pdGVyICsgMSk7XG4gICAgICAgICAgICAgICAgYWN0aXZlVGltZSA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBkYXRhLmluZGV4T2YoTkVUV09SS19LRVlTW2luZGV4XVsyXSwgZW5kICsgMSk7XG4gICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLmluZGV4T2YoJyAnLCBkZWxpbWl0ZXIgKyAxKTtcbiAgICAgICAgICAgICAgICByeEJ5dGVzID0gZGF0YS5zdWJzdHJpbmcoZGVsaW1pdGVyICsgMSwgZW5kKS50cmltKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVuZCA+IGRlbGltaXRlcikge1xuICAgICAgICAgICAgICBzdGFydCA9IGRhdGEuaW5kZXhPZihORVRXT1JLX0tFWVNbaW5kZXhdWzNdLCBlbmQgKyAxKTtcbiAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApIHtcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXIgPSBkYXRhLmluZGV4T2YoJz0nLCBzdGFydCArIDEpO1xuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEuaW5kZXhPZignICcsIGRlbGltaXRlciArIDEpO1xuICAgICAgICAgICAgICAgIHJ4UGFja2V0cyA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBkYXRhLmluZGV4T2YoTkVUV09SS19LRVlTW2luZGV4XVs0XSwgZW5kICsgMSk7XG4gICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLmluZGV4T2YoJyAnLCBkZWxpbWl0ZXIgKyAxKTtcbiAgICAgICAgICAgICAgICB0eEJ5dGVzID0gZGF0YS5zdWJzdHJpbmcoZGVsaW1pdGVyICsgMSwgZW5kKS50cmltKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVuZCA+IGRlbGltaXRlcikge1xuICAgICAgICAgICAgICBzdGFydCA9IGRhdGEuaW5kZXhPZihORVRXT1JLX0tFWVNbaW5kZXhdWzVdLCBlbmQgKyAxKTtcbiAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApIHtcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXIgPSBkYXRhLmluZGV4T2YoJz0nLCBzdGFydCArIDEpO1xuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEuaW5kZXhPZignICcsIGRlbGltaXRlciArIDEpO1xuICAgICAgICAgICAgICAgIHR4UGFja2V0cyA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBkYXRhLmluZGV4T2YoTkVUV09SS19LRVlTW2luZGV4XVs2XSwgZW5kICsgMSk7XG4gICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25zID0gZGF0YS5zdWJzdHJpbmcoZGVsaW1pdGVyICsgMSwgZW5kKS50cmltKCk7XG5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuVmFsdWVbcmV0dXJuSW5kZXgrK10gPSBbYnVja2V0U3RhcnQsIGFjdGl2ZVRpbWUsIHJ4Qnl0ZXMsIHJ4UGFja2V0cywgdHhCeXRlcywgdHhQYWNrZXRzLCBvcGVyYXRpb25zLCBidWNrZXREdXJhdGlvbl07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRXF1YWwocGVuZGluZ0J5dGVzLCAnJykgJiYgIV8uaXNVbmRlZmluZWQocGVuZGluZ0J5dGVzKSAmJiAhXy5pc0VxdWFsKHBlbmRpbmdCeXRlcywgJ25vZGV4JykpIHtcbiAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgbmV0d29yayB0cmFmZmljIGRhdGE6ICcke2RhdGF9J2ApO1xuICAgIH1cbiAgfSk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7XG4gIGNvbW1hbmRzLCBoZWxwZXJzLCBTVVBQT1JURURfUEVSRk9STUFOQ0VfREFUQV9UWVBFUywgQ1BVX0tFWVMsIE1FTU9SWV9LRVlTLFxuICBCQVRURVJZX0tFWVMsIE5FVFdPUktfS0VZUyxcbn07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuXG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9wZXJmb3JtYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.default = exports.helpers = exports.commands = void 0;
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.default = exports.helpers = exports.FINGERPRINT_UNLOCK = exports.PATTERN_UNLOCK = exports.PASSWORD_UNLOCK = exports.PIN_UNLOCK_KEY_EVENT = exports.PIN_UNLOCK = void 0;
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.KNOWN_CHROME_PACKAGE_NAMES = exports.CHROMIUM_WIN = exports.WEBVIEW_BASE = exports.WEBVIEW_WIN = exports.NATIVE_WIN = exports.helpers = exports.default = void 0;
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
package/lib/.DS_Store
ADDED
|
Binary file
|