appium-adb 8.16.2 → 9.1.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/README.md +0 -2
- package/build/index.js +1 -1
- package/build/lib/adb.js +1 -1
- package/build/lib/helpers.js +54 -49
- package/build/lib/logcat.js +4 -4
- package/build/lib/logger.js +3 -3
- package/build/lib/tools/aab-utils.js +157 -0
- package/build/lib/tools/adb-commands.js +11 -11
- package/build/lib/tools/adb-emu-commands.js +35 -27
- package/build/lib/tools/android-manifest.js +13 -13
- package/build/lib/tools/apk-signing.js +19 -19
- package/build/lib/tools/apk-utils.js +13 -13
- package/build/lib/tools/apks-utils.js +13 -14
- package/build/lib/tools/index.js +5 -3
- package/build/lib/tools/lockmgmt.js +3 -3
- package/build/lib/tools/settings-client-commands.js +72 -8
- package/build/lib/tools/system-calls.js +27 -27
- package/lib/helpers.js +1 -1
- package/lib/logcat.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/tools/aab-utils.js +158 -0
- package/lib/tools/adb-commands.js +1 -1
- package/lib/tools/adb-emu-commands.js +33 -20
- package/lib/tools/android-manifest.js +1 -1
- package/lib/tools/apk-signing.js +1 -1
- package/lib/tools/apk-utils.js +6 -7
- package/lib/tools/apks-utils.js +6 -6
- package/lib/tools/index.js +2 -0
- package/lib/tools/lockmgmt.js +1 -1
- package/lib/tools/settings-client-commands.js +106 -5
- package/lib/tools/system-calls.js +1 -1
- package/package.json +14 -8
- package/lib/.DS_Store +0 -0
|
@@ -17,7 +17,7 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
17
17
|
|
|
18
18
|
var _net = _interopRequireDefault(require("net"));
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _support = require("@appium/support");
|
|
21
21
|
|
|
22
22
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
23
23
|
|
|
@@ -26,18 +26,18 @@ var _path = _interopRequireDefault(require("path"));
|
|
|
26
26
|
var _ini = _interopRequireDefault(require("ini"));
|
|
27
27
|
|
|
28
28
|
const PHONE_NUMBER_PATTERN = /^[+]?[(]?[0-9]*[)]?[-\s.]?[0-9]*[-\s.]?[0-9]{2,}$/im;
|
|
29
|
-
|
|
30
|
-
emuMethods.POWER_AC_STATES = {
|
|
29
|
+
const emuMethods = {};
|
|
30
|
+
emuMethods.POWER_AC_STATES = Object.freeze({
|
|
31
31
|
POWER_AC_ON: 'on',
|
|
32
32
|
POWER_AC_OFF: 'off'
|
|
33
|
-
};
|
|
34
|
-
emuMethods.GSM_CALL_ACTIONS = {
|
|
33
|
+
});
|
|
34
|
+
emuMethods.GSM_CALL_ACTIONS = Object.freeze({
|
|
35
35
|
GSM_CALL: 'call',
|
|
36
36
|
GSM_ACCEPT: 'accept',
|
|
37
37
|
GSM_CANCEL: 'cancel',
|
|
38
38
|
GSM_HOLD: 'hold'
|
|
39
|
-
};
|
|
40
|
-
emuMethods.GSM_VOICE_STATES = {
|
|
39
|
+
});
|
|
40
|
+
emuMethods.GSM_VOICE_STATES = Object.freeze({
|
|
41
41
|
GSM_VOICE_UNREGISTERED: 'unregistered',
|
|
42
42
|
GSM_VOICE_HOME: 'home',
|
|
43
43
|
GSM_VOICE_ROAMING: 'roaming',
|
|
@@ -45,9 +45,9 @@ emuMethods.GSM_VOICE_STATES = {
|
|
|
45
45
|
GSM_VOICE_DENIED: 'denied',
|
|
46
46
|
GSM_VOICE_OFF: 'off',
|
|
47
47
|
GSM_VOICE_ON: 'on'
|
|
48
|
-
};
|
|
48
|
+
});
|
|
49
49
|
emuMethods.GSM_SIGNAL_STRENGTHS = [0, 1, 2, 3, 4];
|
|
50
|
-
emuMethods.NETWORK_SPEED = {
|
|
50
|
+
emuMethods.NETWORK_SPEED = Object.freeze({
|
|
51
51
|
GSM: 'gsm',
|
|
52
52
|
SCSD: 'scsd',
|
|
53
53
|
GPRS: 'gprs',
|
|
@@ -57,15 +57,25 @@ emuMethods.NETWORK_SPEED = {
|
|
|
57
57
|
LTE: 'lte',
|
|
58
58
|
EVDO: 'evdo',
|
|
59
59
|
FULL: 'full'
|
|
60
|
-
};
|
|
61
|
-
emuMethods.SENSORS = {
|
|
60
|
+
});
|
|
61
|
+
emuMethods.SENSORS = Object.freeze({
|
|
62
62
|
ACCELERATION: 'acceleration',
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
GYROSCOPE: 'gyroscope',
|
|
64
|
+
MAGNETIC_FIELD: 'magnetic-field',
|
|
65
|
+
ORIENTATION: 'orientation',
|
|
65
66
|
TEMPERATURE: 'temperature',
|
|
67
|
+
PROXIMITY: 'proximity',
|
|
68
|
+
LIGHT: 'light',
|
|
66
69
|
PRESSURE: 'pressure',
|
|
67
|
-
HUMIDITY: 'humidity'
|
|
68
|
-
|
|
70
|
+
HUMIDITY: 'humidity',
|
|
71
|
+
MAGNETIC_FIELD_UNCALIBRATED: 'magnetic-field-uncalibrated',
|
|
72
|
+
GYROSCOPE_UNCALIBRATED: 'gyroscope-uncalibrated',
|
|
73
|
+
HINGE_ANGLE0: 'hinge-angle0',
|
|
74
|
+
HINGE_ANGLE1: 'hinge-angle1',
|
|
75
|
+
HINGE_ANGLE2: 'hinge-angle2',
|
|
76
|
+
HEART_RATE: 'heart-rate',
|
|
77
|
+
RGBC_LIGHT: 'rgbc-light'
|
|
78
|
+
});
|
|
69
79
|
|
|
70
80
|
async function listEmulators() {
|
|
71
81
|
let avdsRoot = process.env.ANDROID_AVD_HOME;
|
|
@@ -96,7 +106,7 @@ async function listEmulators() {
|
|
|
96
106
|
}
|
|
97
107
|
|
|
98
108
|
async function getAvdConfigPaths(avdsRoot) {
|
|
99
|
-
const configs = await
|
|
109
|
+
const configs = await _support.fs.glob('*.ini', {
|
|
100
110
|
cwd: avdsRoot,
|
|
101
111
|
absolute: true
|
|
102
112
|
});
|
|
@@ -143,7 +153,7 @@ emuMethods.rotate = async function rotate() {
|
|
|
143
153
|
|
|
144
154
|
emuMethods.powerAC = async function powerAC(state = 'on') {
|
|
145
155
|
if (_lodash.default.values(emuMethods.POWER_AC_STATES).indexOf(state) === -1) {
|
|
146
|
-
throw new
|
|
156
|
+
throw new TypeError(`Wrong power AC state sent '${state}'. ` + `Supported values: ${_lodash.default.values(emuMethods.POWER_AC_STATES)}]`);
|
|
147
157
|
}
|
|
148
158
|
|
|
149
159
|
await this.adbExecEmu(['power', 'ac', state]);
|
|
@@ -151,13 +161,11 @@ emuMethods.powerAC = async function powerAC(state = 'on') {
|
|
|
151
161
|
|
|
152
162
|
emuMethods.sensorSet = async function sensorSet(sensor, value) {
|
|
153
163
|
if (!_lodash.default.includes(emuMethods.SENSORS, sensor)) {
|
|
154
|
-
throw new
|
|
164
|
+
throw new TypeError(`Unsupported sensor sent '${sensor}'. ` + `Supported values: ${_lodash.default.values(emuMethods.SENSORS)}]`);
|
|
155
165
|
}
|
|
156
166
|
|
|
157
|
-
value
|
|
158
|
-
|
|
159
|
-
if (isNaN(value)) {
|
|
160
|
-
throw new Error(`Missing sensor value argument. You need to provide a valid number to set to the sensor.`);
|
|
167
|
+
if (_lodash.default.isNil(value) || value === '') {
|
|
168
|
+
throw new TypeError(`Missing/invalid sensor value argument. ` + `You need to provide a valid value to set to the sensor in ` + `format <value-a>[:<value-b>[:<value-c>[...]]].`);
|
|
161
169
|
}
|
|
162
170
|
|
|
163
171
|
await this.adbExecEmu(['sensor', 'set', sensor, value]);
|
|
@@ -287,7 +295,7 @@ emuMethods.execEmuConsoleCommand = async function execTelnet(cmd, opts = {}) {
|
|
|
287
295
|
if (!isCommandSent) {
|
|
288
296
|
clearTimeout(initTimeoutObj);
|
|
289
297
|
serverResponse = [];
|
|
290
|
-
const cmdStr = _lodash.default.isArray(cmd) ?
|
|
298
|
+
const cmdStr = _lodash.default.isArray(cmd) ? _support.util.quote(cmd) : `${cmd}`;
|
|
291
299
|
|
|
292
300
|
_logger.default.debug(`Executing Emulator console command: ${cmdStr}`);
|
|
293
301
|
|
|
@@ -316,11 +324,11 @@ emuMethods.execEmuConsoleCommand = async function execTelnet(cmd, opts = {}) {
|
|
|
316
324
|
emuMethods.getEmuVersionInfo = async function getEmuVersionInfo() {
|
|
317
325
|
const propsPath = _path.default.join(this.sdkRoot, 'emulator', 'source.properties');
|
|
318
326
|
|
|
319
|
-
if (!(await
|
|
327
|
+
if (!(await _support.fs.exists(propsPath))) {
|
|
320
328
|
return {};
|
|
321
329
|
}
|
|
322
330
|
|
|
323
|
-
const content = await
|
|
331
|
+
const content = await _support.fs.readFile(propsPath, 'utf8');
|
|
324
332
|
const revisionMatch = /^Pkg\.Revision=([\d.]+)$/m.exec(content);
|
|
325
333
|
const result = {};
|
|
326
334
|
|
|
@@ -357,7 +365,7 @@ emuMethods.getEmuImageProperties = async function getEmuImageProperties(avdName)
|
|
|
357
365
|
throw new Error(msg);
|
|
358
366
|
}
|
|
359
367
|
|
|
360
|
-
return _ini.default.parse(await
|
|
368
|
+
return _ini.default.parse(await _support.fs.readFile(avd.config, 'utf8'));
|
|
361
369
|
};
|
|
362
370
|
|
|
363
371
|
emuMethods.checkAvdExist = async function checkAvdExist(avdName) {
|
|
@@ -386,4 +394,4 @@ var _default = emuMethods;
|
|
|
386
394
|
exports.default = _default;require('source-map-support').install();
|
|
387
395
|
|
|
388
396
|
|
|
389
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hZGItZW11LWNvbW1hbmRzLmpzIl0sIm5hbWVzIjpbIlBIT05FX05VTUJFUl9QQVRURVJOIiwiZW11TWV0aG9kcyIsIlBPV0VSX0FDX1NUQVRFUyIsIlBPV0VSX0FDX09OIiwiUE9XRVJfQUNfT0ZGIiwiR1NNX0NBTExfQUNUSU9OUyIsIkdTTV9DQUxMIiwiR1NNX0FDQ0VQVCIsIkdTTV9DQU5DRUwiLCJHU01fSE9MRCIsIkdTTV9WT0lDRV9TVEFURVMiLCJHU01fVk9JQ0VfVU5SRUdJU1RFUkVEIiwiR1NNX1ZPSUNFX0hPTUUiLCJHU01fVk9JQ0VfUk9BTUlORyIsIkdTTV9WT0lDRV9TRUFSQ0hJTkciLCJHU01fVk9JQ0VfREVOSUVEIiwiR1NNX1ZPSUNFX09GRiIsIkdTTV9WT0lDRV9PTiIsIkdTTV9TSUdOQUxfU1RSRU5HVEhTIiwiTkVUV09SS19TUEVFRCIsIkdTTSIsIlNDU0QiLCJHUFJTIiwiRURHRSIsIlVNVFMiLCJIU0RQQSIsIkxURSIsIkVWRE8iLCJGVUxMIiwiU0VOU09SUyIsIkFDQ0VMRVJBVElPTiIsIkxJR0hUIiwiUFJPWElNSVRZIiwiVEVNUEVSQVRVUkUiLCJQUkVTU1VSRSIsIkhVTUlESVRZIiwibGlzdEVtdWxhdG9ycyIsImF2ZHNSb290IiwicHJvY2VzcyIsImVudiIsIkFORFJPSURfQVZEX0hPTUUiLCJnZXRBdmRDb25maWdQYXRocyIsImxvZyIsIndhcm4iLCJwcmVmc1Jvb3QiLCJwYXRoIiwicmVzb2x2ZSIsImRlYnVnIiwiY29uZmlncyIsImZzIiwiZ2xvYiIsImN3ZCIsImFic29sdXRlIiwibWFwIiwiY29uZlBhdGgiLCJhdmROYW1lIiwiYmFzZW5hbWUiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsIm5hbWUiLCJjb25maWciLCJmaWx0ZXIiLCJfIiwidHJpbSIsImlzRW11bGF0b3JDb25uZWN0ZWQiLCJlbXVsYXRvcnMiLCJnZXRDb25uZWN0ZWRFbXVsYXRvcnMiLCJmaW5kIiwieCIsInVkaWQiLCJjdXJEZXZpY2VJZCIsInZlcmlmeUVtdWxhdG9yQ29ubmVjdGVkIiwiRXJyb3IiLCJmaW5nZXJwcmludCIsImZpbmdlcnByaW50SWQiLCJsZXZlbCIsImdldEFwaUxldmVsIiwiYWRiRXhlY0VtdSIsInJvdGF0ZSIsInBvd2VyQUMiLCJzdGF0ZSIsInZhbHVlcyIsImluZGV4T2YiLCJzZW5zb3JTZXQiLCJzZW5zb3IiLCJ2YWx1ZSIsImluY2x1ZGVzIiwicGFyc2VGbG9hdCIsImlzTmFOIiwicG93ZXJDYXBhY2l0eSIsInBlcmNlbnQiLCJwYXJzZUludCIsInBvd2VyT0ZGIiwic2VuZFNNUyIsInBob25lTnVtYmVyIiwibWVzc2FnZSIsInJlcGxhY2UiLCJ0ZXN0IiwiZ3NtQ2FsbCIsImFjdGlvbiIsImdzbVNpZ25hbCIsInN0cmVuZ3RoIiwiaW5mbyIsImdzbVZvaWNlIiwibmV0d29ya1NwZWVkIiwic3BlZWQiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiLCJleGVjVGVsbmV0IiwiY21kIiwib3B0cyIsInBvcnQiLCJwb3J0TWF0Y2giLCJleGVjIiwiaG9zdCIsImV4ZWNUaW1lb3V0IiwiY29ublRpbWVvdXQiLCJpbml0VGltZW91dCIsInJlc2V0VGVsbmV0QXV0aFRva2VuIiwib2tGbGFnIiwibm9rRmxhZyIsImVvbCIsImNsaWVudCIsIm5ldCIsImNvbm5lY3QiLCJCIiwicmVqZWN0IiwiY29ublRpbWVvdXRPYmoiLCJzZXRUaW1lb3V0IiwiZXhlY1RpbWVvdXRPYmoiLCJpbml0VGltZW91dE9iaiIsImlzQ29tbWFuZFNlbnQiLCJzZXJ2ZXJSZXNwb25zZSIsIm9uY2UiLCJlIiwiY2xlYXJUaW1lb3V0Iiwib24iLCJjaHVuayIsInB1c2giLCJvdXRwdXQiLCJCdWZmZXIiLCJjb25jYXQiLCJ0b1N0cmluZyIsImNtZFN0ciIsImlzQXJyYXkiLCJ1dGlsIiwicXVvdGUiLCJ3cml0ZSIsImVuZCIsIm91dHB1dEFyciIsImxlbmd0aCIsImxhc3QiLCJnZXRFbXVWZXJzaW9uSW5mbyIsInByb3BzUGF0aCIsInNka1Jvb3QiLCJleGlzdHMiLCJjb250ZW50IiwicmVhZEZpbGUiLCJyZXZpc2lvbk1hdGNoIiwicmVzdWx0IiwicmV2aXNpb24iLCJidWlsZElkTWF0Y2giLCJidWlsZElkIiwiZ2V0RW11SW1hZ2VQcm9wZXJ0aWVzIiwiYXZkcyIsImF2ZCIsIm1zZyIsImlzRW1wdHkiLCJpbmkiLCJwYXJzZSIsImNoZWNrQXZkRXhpc3QiLCJzb21lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLG9CQUFvQixHQUFHLHFEQUE3QjtBQUVBLElBQUlDLFVBQVUsR0FBRyxFQUFqQjtBQUNBQSxVQUFVLENBQUNDLGVBQVgsR0FBNkI7QUFDM0JDLEVBQUFBLFdBQVcsRUFBRSxJQURjO0FBRTNCQyxFQUFBQSxZQUFZLEVBQUU7QUFGYSxDQUE3QjtBQUlBSCxVQUFVLENBQUNJLGdCQUFYLEdBQThCO0FBQzVCQyxFQUFBQSxRQUFRLEVBQUUsTUFEa0I7QUFFNUJDLEVBQUFBLFVBQVUsRUFBRSxRQUZnQjtBQUc1QkMsRUFBQUEsVUFBVSxFQUFFLFFBSGdCO0FBSTVCQyxFQUFBQSxRQUFRLEVBQUU7QUFKa0IsQ0FBOUI7QUFNQVIsVUFBVSxDQUFDUyxnQkFBWCxHQUE4QjtBQUM1QkMsRUFBQUEsc0JBQXNCLEVBQUUsY0FESTtBQUU1QkMsRUFBQUEsY0FBYyxFQUFFLE1BRlk7QUFHNUJDLEVBQUFBLGlCQUFpQixFQUFFLFNBSFM7QUFJNUJDLEVBQUFBLG1CQUFtQixFQUFFLFdBSk87QUFLNUJDLEVBQUFBLGdCQUFnQixFQUFFLFFBTFU7QUFNNUJDLEVBQUFBLGFBQWEsRUFBRSxLQU5hO0FBTzVCQyxFQUFBQSxZQUFZLEVBQUU7QUFQYyxDQUE5QjtBQVNBaEIsVUFBVSxDQUFDaUIsb0JBQVgsR0FBa0MsQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLENBQVAsRUFBVSxDQUFWLEVBQWEsQ0FBYixDQUFsQztBQUVBakIsVUFBVSxDQUFD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R0FBRyxJQUFLLDRCQUEyQkYsSUFBSSxDQUFDL0csR0FBTCxDQUFTLENBQUM7QUFBQ08sUUFBQUE7QUFBRCxPQUFELEtBQVlBLElBQXJCLENBQTJCLEVBQTlEO0FBQ0Q7O0FBQ0QsVUFBTSxJQUFJYSxLQUFKLENBQVU2RixHQUFWLENBQU47QUFDRDs7QUFDRCxTQUFPRSxhQUFJQyxLQUFKLENBQVUsTUFBTXhILGtCQUFHNEcsUUFBSCxDQUFZUSxHQUFHLENBQUN4RyxNQUFoQixFQUF3QixNQUF4QixDQUFoQixDQUFQO0FBQ0QsQ0FiRDs7QUFzQkE1RCxVQUFVLENBQUN5SyxhQUFYLEdBQTJCLGVBQWVBLGFBQWYsQ0FBOEJuSCxPQUE5QixFQUF1QztBQUNoRSxRQUFNNkcsSUFBSSxHQUFHLE1BQU1oSSxhQUFhLEVBQWhDOztBQUNBLE1BQUksQ0FBQ2dJLElBQUksQ0FBQ08sSUFBTCxDQUFVLENBQUM7QUFBQy9HLElBQUFBO0FBQUQsR0FBRCxLQUFZQSxJQUFJLEtBQUtMLE9BQS9CLENBQUwsRUFBOEM7QUFDNUMsUUFBSStHLEdBQUcsR0FBSSxRQUFPL0csT0FBUSxzQkFBMUI7O0FBQ0EsUUFBSVEsZ0JBQUV3RyxPQUFGLENBQVVILElBQVYsQ0FBSixFQUFxQjtBQUNuQkUsTUFBQUEsR0FBRyxJQUFLLGdEQUFSO0FBQ0QsS0FGRCxNQUVPO0FBQ0xBLE1BQUFBLEdBQUcsSUFBSyxtREFBa0RGLElBQUksQ0FBQy9HLEdBQUwsQ0FBUyxDQUFDO0FBQUNPLFFBQUFBO0FBQUQsT0FBRCxLQUFZQSxJQUFyQixDQUEyQixHQUFyRjtBQUNEOztBQUNELFVBQU0sSUFBSWEsS0FBSixDQUFVNkYsR0FBVixDQUFOO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFQO0FBQ0QsQ0FaRDs7ZUFjZXJLLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBnZXRBbmRyb2lkUHJlZnNSb290LCBkaXJFeGlzdHMgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgeyB1dGlsLCBmcyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGluaSBmcm9tICdpbmknO1xuXG5jb25zdCBQSE9ORV9OVU1CRVJfUEFUVEVSTiA9IC9eWytdP1soXT9bMC05XSpbKV0/Wy1cXHMuXT9bMC05XSpbLVxccy5dP1swLTldezIsfSQvaW07XG5cbmxldCBlbXVNZXRob2RzID0ge307XG5lbXVNZXRob2RzLlBPV0VSX0FDX1NUQVRFUyA9IHtcbiAgUE9XRVJfQUNfT046ICdvbicsXG4gIFBPV0VSX0FDX09GRjogJ29mZidcbn07XG5lbXVNZXRob2RzLkdTTV9DQUxMX0FDVElPTlMgPSB7XG4gIEdTTV9DQUxMOiAnY2FsbCcsXG4gIEdTTV9BQ0NFUFQ6ICdhY2NlcHQnLFxuICBHU01fQ0FOQ0VMOiAnY2FuY2VsJyxcbiAgR1NNX0hPTEQ6ICdob2xkJ1xufTtcbmVtdU1ldGhvZHMuR1NNX1ZPSUNFX1NUQVRFUyA9IHtcbiAgR1NNX1ZPSUNFX1VOUkVHSVNURVJFRDogJ3VucmVnaXN0ZXJlZCcsXG4gIEdTTV9WT0lDRV9IT01FOiAnaG9tZScsXG4gIEdTTV9WT0lDRV9ST0FNSU5HOiAncm9hbWluZycsXG4gIEdTTV9WT0lDRV9TRUFSQ0hJTkc6ICdzZWFyY2hpbmcnLFxuICBHU01fVk9JQ0VfREVOSUVEOiAnZGVuaWVkJyxcbiAgR1NNX1ZPSUNFX09GRjogJ29mZicsXG4gIEdTTV9WT0lDRV9PTjogJ29uJ1xufTtcbmVtdU1ldGhvZHMuR1NNX1NJR05BTF9TVFJFTkdUSFMgPSBbMCwgMSwgMiwgMywgNF07XG5cbmVtdU1ldGhvZHMuTkVUV09SS19TUEVFRCA9IHtcbiAgR1NNOiAnZ3NtJywgLy8gR1NNL0NTRCAodXA6IDE0LjQsIGRvd246IDE0LjQpLlxuICBTQ1NEOiAnc2NzZCcsIC8vIEhTQ1NEICh1cDogMTQuNCwgZG93bjogNTcuNikuXG4gIEdQUlM6ICdncHJzJywgLy8gR1BSUyAodXA6IDI4LjgsIGRvd246IDU3LjYpLlxuICBFREdFOiAnZWRnZScsIC8vIEVER0UvRUdQUlMgKHVwOiA0NzMuNiwgZG93bjogNDczLjYpLlxuICBVTVRTOiAndW10cycsIC8vIFVNVFMvM0cgKHVwOiAzODQuMCwgZG93bjogMzg0LjApLlxuICBIU0RQQTogJ2hzZHBhJywgLy8gSFNEUEEgKHVwOiA1NzYwLjAsIGRvd246IDEzLDk4MC4wKS5cbiAgTFRFOiAnbHRlJywgLy8gTFRFICh1cDogNTgsMDAwLCBkb3duOiAxNzMsMDAwKS5cbiAgRVZETzogJ2V2ZG8nLCAvLyBFVkRPICh1cDogNzUsMDAwLCBkb3duOiAyODAsMDAwKS5cbiAgRlVMTDogJ2Z1bGwnIC8vIE5vIGxpbWl0LCB0aGUgZGVmYXVsdCAodXA6IDAuMCwgZG93bjogMC4wKS5cbn07XG5cbmVtdU1ldGhvZHMuU0VOU09SUyA9IHtcbiAgQUNDRUxFUkFUSU9OOiAnYWNjZWxlcmF0aW9uJyxcbiAgTElHSFQ6ICdsaWdodCcsXG4gIFBST1hJTUlUWTogJ3Byb3hpbWl0eScsXG4gIFRFTVBFUkFUVVJFOiAndGVtcGVyYXR1cmUnLFxuICBQUkVTU1VSRTogJ3ByZXNzdXJlJyxcbiAgSFVNSURJVFk6ICdodW1pZGl0eSdcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRW11SW5mb1xuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgRW11bGF0b3IgbmFtZSwgZm9yIGV4YW1wbGUgYFBpeGVsX1hMX0FQSV8zMGBcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb25maWcgRnVsbCBwYXRoIHRvIHRoZSBlbXVsYXRvciBjb25maWcgLmluaSBmaWxlLFxuICogZm9yIGV4YW1wbGUgYC9Vc2Vycy91c2VyLy5hbmRyb2lkL2F2ZC9QaXhlbF9YTF9BUElfMzAuaW5pYFxuICovXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBBbmRyb2lkIGVtdWxhdG9yc1xuICpcbiAqIEByZXR1cm5zIHtBcnJheTxFbXVJbmZvPn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbGlzdEVtdWxhdG9ycyAoKSB7XG4gIGxldCBhdmRzUm9vdCA9IHByb2Nlc3MuZW52LkFORFJPSURfQVZEX0hPTUU7XG4gIGlmIChhd2FpdCBkaXJFeGlzdHMoYXZkc1Jvb3QpKSB7XG4gICAgcmV0dXJuIGF3YWl0IGdldEF2ZENvbmZpZ1BhdGhzKGF2ZHNSb290KTtcbiAgfVxuXG4gIGlmIChhdmRzUm9vdCkge1xuICAgIGxvZy53YXJuKGBUaGUgdmFsdWUgb2YgdGhlIEFORFJPSURfQVZEX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgJyR7YXZkc1Jvb3R9JyBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5YCk7XG4gIH1cblxuICBjb25zdCBwcmVmc1Jvb3QgPSBhd2FpdCBnZXRBbmRyb2lkUHJlZnNSb290KCk7XG4gIGlmICghcHJlZnNSb290KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgYXZkc1Jvb3QgPSBwYXRoLnJlc29sdmUocHJlZnNSb290LCAnYXZkJyk7XG4gIGlmICghYXdhaXQgZGlyRXhpc3RzKGF2ZHNSb290KSkge1xuICAgIGxvZy5kZWJ1ZyhgVmlydHVhbCBkZXZpY2VzIGNvbmZpZyByb290ICcke2F2ZHNSb290fScgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeWApO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBnZXRBdmRDb25maWdQYXRocyhhdmRzUm9vdCk7XG59XG5cbi8qKlxuICogR2V0IGNvbmZpZ3VyYXRpb24gcGF0aHMgb2YgYWxsIHZpcnR1YWwgZGV2aWNlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdmRzUm9vdCBQYXRoIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgQVZEIC5pbmkgZmlsZXNcbiAqIEByZXR1cm5zIHtBcnJheTxFbXVJbmZvPn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QXZkQ29uZmlnUGF0aHMgKGF2ZHNSb290KSB7XG4gIGNvbnN0IGNvbmZpZ3MgPSBhd2FpdCBmcy5nbG9iKCcqLmluaScsIHtcbiAgICBjd2Q6IGF2ZHNSb290LFxuICAgIGFic29sdXRlOiB0cnVlLFxuICB9KTtcbiAgcmV0dXJuIGNvbmZpZ3MubWFwKChjb25mUGF0aCkgPT4ge1xuICAgIGNvbnN0IGF2ZE5hbWUgPSBwYXRoLmJhc2VuYW1lKGNvbmZQYXRoKS5zcGxpdCgnLicpLnNsaWNlKDAsIC0xKS5qb2luKCcuJyk7XG4gICAgcmV0dXJuIHtuYW1lOiBhdmROYW1lLCBjb25maWc6IGNvbmZQYXRofTtcbiAgfSkuZmlsdGVyKCh7bmFtZX0pID0+IF8udHJpbShuYW1lKSk7XG59XG5cbi8qKlxuICogQ2hlY2sgdGhlIGVtdWxhdG9yIHN0YXRlLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgRW11bGF0b3IgaXMgdmlzaWJsZSB0byBhZGIuXG4gKi9cbmVtdU1ldGhvZHMuaXNFbXVsYXRvckNvbm5lY3RlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzRW11bGF0b3JDb25uZWN0ZWQgKCkge1xuICBsZXQgZW11bGF0b3JzID0gYXdhaXQgdGhpcy5nZXRDb25uZWN0ZWRFbXVsYXRvcnMoKTtcbiAgcmV0dXJuICEhXy5maW5kKGVtdWxhdG9ycywgKHgpID0+IHggJiYgeC51ZGlkID09PSB0aGlzLmN1ckRldmljZUlkKTtcbn07XG5cbi8qKlxuICogVmVyaWZ5IHRoZSBlbXVsYXRvciBpcyBjb25uZWN0ZWQuXG4gKlxuICogQHRocm93cyB7ZXJyb3J9IElmIEVtdWxhdG9yIGlzIG5vdCB2aXNpYmxlIHRvIGFkYi5cbiAqL1xuZW11TWV0aG9kcy52ZXJpZnlFbXVsYXRvckNvbm5lY3RlZCA9IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUVtdWxhdG9yQ29ubmVjdGVkICgpIHtcbiAgaWYgKCEoYXdhaXQgdGhpcy5pc0VtdWxhdG9yQ29ubmVjdGVkKCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZW11bGF0b3IgXCIke3RoaXMuY3VyRGV2aWNlSWR9XCIgd2FzIHVuZXhwZWN0ZWRseSBkaXNjb25uZWN0ZWRgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFbXVsYXRlIGZpbmdlcnByaW50IHRvdWNoIGV2ZW50IG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbmdlcnByaW50SWQgLSBUaGUgSUQgb2YgdGhlIGZpbmdlcnByaW50LlxuICovXG5lbXVNZXRob2RzLmZpbmdlcnByaW50ID0gYXN5bmMgZnVuY3Rpb24gZmluZ2VycHJpbnQgKGZpbmdlcnByaW50SWQpIHtcbiAgaWYgKCFmaW5nZXJwcmludElkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaW5nZXJwcmludCBpZCBwYXJhbWV0ZXIgbXVzdCBiZSBkZWZpbmVkJyk7XG4gIH1cbiAgLy8gdGhlIG1ldGhvZCB1c2VkIG9ubHkgd29ya3MgZm9yIEFQSSBsZXZlbCAyMyBhbmQgYWJvdmVcbiAgbGV0IGxldmVsID0gYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpO1xuICBpZiAobGV2ZWwgPCAyMykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGV2aWNlIEFQSSBMZXZlbCBtdXN0IGJlID49IDIzLiBDdXJyZW50IEFwaSBsZXZlbCAnJHtsZXZlbH0nYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGJFeGVjRW11KFsnZmluZ2VyJywgJ3RvdWNoJywgZmluZ2VycHJpbnRJZF0pO1xufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIGRpc3BsYXkgb3JpZW50YXRpb24gb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqIFRoZSBvcmllbnRhdGlvbiBpcyBjaGFuZ2VkIChQSS8yIGlzIGFkZGVkKSBldmVyeSB0aW1lXG4gKiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuXG4gKi9cbmVtdU1ldGhvZHMucm90YXRlID0gYXN5bmMgZnVuY3Rpb24gcm90YXRlICgpIHtcbiAgYXdhaXQgdGhpcy5hZGJFeGVjRW11KFsncm90YXRlJ10pO1xufTtcblxuLyoqXG4gKiBFbXVsYXRlIHBvd2VyIHN0YXRlIGNoYW5nZSBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSBbJ29uJ10gLSBFaXRoZXIgJ29uJyBvciAnb2ZmJy5cbiAqL1xuZW11TWV0aG9kcy5wb3dlckFDID0gYXN5bmMgZnVuY3Rpb24gcG93ZXJBQyAoc3RhdGUgPSAnb24nKSB7XG4gIGlmIChfLnZhbHVlcyhlbXVNZXRob2RzLlBPV0VSX0FDX1NUQVRFUykuaW5kZXhPZihzdGF0ZSkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBXcm9uZyBwb3dlciBBQyBzdGF0ZSBzZW50ICcke3N0YXRlfScuIFN1cHBvcnRlZCB2YWx1ZXM6ICR7Xy52YWx1ZXMoZW11TWV0aG9kcy5QT1dFUl9BQ19TVEFURVMpfV1gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydwb3dlcicsICdhYycsIHN0YXRlXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgc2Vuc29ycyB2YWx1ZXMgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2Vuc29yIC0gU2Vuc29yIHR5cGUgZGVjbGFyZWQgaW4gU0VOU09SUyBpdGVtcy5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWUgIC0gTnVtYmVyIHRvIHNldCBhcyB0aGUgc2Vuc29yIHZhbHVlLlxuICogQHRocm93cyB7RXJyb3J9IC0gSWYgc2Vuc29yIHR5cGUgb3Igc2Vuc29yIHZhbHVlIGlzIG5vdCBkZWZpbmVkXG4gKi9cbmVtdU1ldGhvZHMuc2Vuc29yU2V0ID0gYXN5bmMgZnVuY3Rpb24gc2Vuc29yU2V0IChzZW5zb3IsIHZhbHVlKSB7XG4gIGlmICghXy5pbmNsdWRlcyhlbXVNZXRob2RzLlNFTlNPUlMsIHNlbnNvcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHNlbnNvciBzZW50ICcke3NlbnNvcn0nLiBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGVtdU1ldGhvZHMuU0VOU09SUyl9XWApO1xuICB9XG4gIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgc2Vuc29yIHZhbHVlIGFyZ3VtZW50LiBZb3UgbmVlZCB0byBwcm92aWRlIGEgdmFsaWQgbnVtYmVyIHRvIHNldCB0byB0aGUgc2Vuc29yLmApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ3NlbnNvcicsICdzZXQnLCBzZW5zb3IsIHZhbHVlXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgcG93ZXIgY2FwYWNpdHkgY2hhbmdlIG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBwZXJjZW50IFsxMDBdIC0gUGVyY2VudGFnZSB2YWx1ZSBpbiByYW5nZSBbMCwgMTAwXS5cbiAqL1xuZW11TWV0aG9kcy5wb3dlckNhcGFjaXR5ID0gYXN5bmMgZnVuY3Rpb24gcG93ZXJDYXBhY2l0eSAocGVyY2VudCA9IDEwMCkge1xuICBwZXJjZW50ID0gcGFyc2VJbnQocGVyY2VudCwgMTApO1xuICBpZiAoaXNOYU4ocGVyY2VudCkgfHwgcGVyY2VudCA8IDAgfHwgcGVyY2VudCA+IDEwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHBlcmNlbnRhZ2UgdmFsdWUgc2hvdWxkIGJlIHZhbGlkIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxMDBgKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydwb3dlcicsICdjYXBhY2l0eScsIHBlcmNlbnRdKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBwb3dlciBvZmYgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqL1xuZW11TWV0aG9kcy5wb3dlck9GRiA9IGFzeW5jIGZ1bmN0aW9uIHBvd2VyT0ZGICgpIHtcbiAgYXdhaXQgdGhpcy5wb3dlckFDKGVtdU1ldGhvZHMuUE9XRVJfQUNfU1RBVEVTLlBPV0VSX0FDX09GRik7XG4gIGF3YWl0IHRoaXMucG93ZXJDYXBhY2l0eSgwKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBzZW5kIFNNUyBldmVudCBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcGhvbmVOdW1iZXIgLSBUaGUgcGhvbmUgbnVtYmVyIG9mIG1lc3NhZ2Ugc2VuZGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgWycnXSAtIFRoZSBtZXNzYWdlIGNvbnRlbnQuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgcGhvbmUgbnVtYmVyIGhhcyBpbnZhbGlkIGZvcm1hdC5cbiAqL1xuZW11TWV0aG9kcy5zZW5kU01TID0gYXN5bmMgZnVuY3Rpb24gc2VuZFNNUyAocGhvbmVOdW1iZXIsIG1lc3NhZ2UgPSAnJykge1xuICBtZXNzYWdlID0gbWVzc2FnZS50cmltKCk7XG4gIGlmIChtZXNzYWdlID09PSAnJykge1xuICAgIHRocm93IG5ldyBFcnJvcignU2VuZGluZyBhbiBTTVMgcmVxdWlyZXMgYSBtZXNzYWdlJyk7XG4gIH1cbiAgcGhvbmVOdW1iZXIgPSBgJHtwaG9uZU51bWJlcn1gLnJlcGxhY2UoL1xccyovLCAnJyk7XG4gIGlmICghUEhPTkVfTlVNQkVSX1BBVFRFUk4udGVzdChwaG9uZU51bWJlcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2VuZFNNUyBwaG9uZU51bWJlciBwYXJhbSAke3Bob25lTnVtYmVyfWApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ3NtcycsICdzZW5kJywgcGhvbmVOdW1iZXIsIG1lc3NhZ2VdKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBHU00gY2FsbCBldmVudCBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcGhvbmVOdW1iZXIgLSBUaGUgcGhvbmUgbnVtYmVyIG9mIHRoZSBjYWxsZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIFsnJ10gLSBPbmUgb2YgYXZhaWxhYmxlIEdTTSBjYWxsIGFjdGlvbnMuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgcGhvbmUgbnVtYmVyIGhhcyBpbnZhbGlkIGZvcm1hdC5cbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiBfYWN0aW9uXyB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5lbXVNZXRob2RzLmdzbUNhbGwgPSBhc3luYyBmdW5jdGlvbiBnc21DYWxsIChwaG9uZU51bWJlciwgYWN0aW9uID0gJycpIHtcbiAgaWYgKF8udmFsdWVzKGVtdU1ldGhvZHMuR1NNX0NBTExfQUNUSU9OUykuaW5kZXhPZihhY3Rpb24pID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnc20gYWN0aW9uIHBhcmFtICR7YWN0aW9ufS4gU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhlbXVNZXRob2RzLkdTTV9DQUxMX0FDVElPTlMpfWApO1xuICB9XG4gIHBob25lTnVtYmVyID0gYCR7cGhvbmVOdW1iZXJ9YC5yZXBsYWNlKC9cXHMqLywgJycpO1xuICBpZiAoIVBIT05FX05VTUJFUl9QQVRURVJOLnRlc3QocGhvbmVOdW1iZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdzbUNhbGwgcGhvbmVOdW1iZXIgcGFyYW0gJHtwaG9uZU51bWJlcn1gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydnc20nLCBhY3Rpb24sIHBob25lTnVtYmVyXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgR1NNIHNpZ25hbCBzdHJlbmd0aCBjaGFuZ2UgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHN0cmVuZ3RoIFs0XSAtIEEgbnVtYmVyIGluIHJhbmdlIFswLCA0XTtcbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiBfc3RyZW5ndGhfIHZhbHVlIGlzIGludmFsaWQuXG4gKi9cbmVtdU1ldGhvZHMuZ3NtU2lnbmFsID0gYXN5bmMgZnVuY3Rpb24gZ3NtU2lnbmFsIChzdHJlbmd0aCA9IDQpIHtcbiAgc3RyZW5ndGggPSBwYXJzZUludChzdHJlbmd0aCwgMTApO1xuICBpZiAoZW11TWV0aG9kcy5HU01fU0lHTkFMX1NUUkVOR1RIUy5pbmRleE9mKHN0cmVuZ3RoKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2lnbmFsIHN0cmVuZ3RoIHBhcmFtICR7c3RyZW5ndGh9LiBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGVtdU1ldGhvZHMuR1NNX1NJR05BTF9TVFJFTkdUSFMpfWApO1xuICB9XG4gIGxvZy5pbmZvKCdnc20gc2lnbmFsLXByb2ZpbGUgPHN0cmVuZ3RoPiBjaGFuZ2VzIHRoZSByZXBvcnRlZCBzdHJlbmd0aCBvbiBuZXh0ICgxNXMpIHVwZGF0ZS4nKTtcbiAgYXdhaXQgdGhpcy5hZGJFeGVjRW11KFsnZ3NtJywgJ3NpZ25hbC1wcm9maWxlJywgc3RyZW5ndGhdKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBHU00gdm9pY2UgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgWydvbiddIC0gRWl0aGVyICdvbicgb3IgJ29mZicuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgX3N0YXRlXyB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5lbXVNZXRob2RzLmdzbVZvaWNlID0gYXN5bmMgZnVuY3Rpb24gZ3NtVm9pY2UgKHN0YXRlID0gJ29uJykge1xuICAvLyBnc20gdm9pY2UgPHN0YXRlPiBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgeW91ciBHUFJTIGNvbm5lY3Rpb25cbiAgaWYgKF8udmFsdWVzKGVtdU1ldGhvZHMuR1NNX1ZPSUNFX1NUQVRFUykuaW5kZXhPZihzdGF0ZSkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdzbSB2b2ljZSBzdGF0ZSBwYXJhbSAke3N0YXRlfS4gU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhlbXVNZXRob2RzLkdTTV9WT0lDRV9TVEFURVMpfWApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ2dzbScsICd2b2ljZScsIHN0YXRlXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgbmV0d29yayBzcGVlZCBjaGFuZ2UgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3BlZWQgWydmdWxsJ10gLSBPbmUgb2YgcG9zc2libGUgTkVUV09SS19TUEVFRCB2YWx1ZXMuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgX3NwZWVkXyB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5lbXVNZXRob2RzLm5ldHdvcmtTcGVlZCA9IGFzeW5jIGZ1bmN0aW9uIG5ldHdvcmtTcGVlZCAoc3BlZWQgPSAnZnVsbCcpIHtcbiAgLy8gbmV0d29yayBzcGVlZCA8c3BlZWQ+IGFsbG93cyB5b3UgdG8gc2V0IHRoZSBuZXR3b3JrIHNwZWVkIGVtdWxhdGlvbi5cbiAgaWYgKF8udmFsdWVzKGVtdU1ldGhvZHMuTkVUV09SS19TUEVFRCkuaW5kZXhPZihzcGVlZCkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5ldHdvcmsgc3BlZWQgcGFyYW0gJHtzcGVlZH0uIFN1cHBvcnRlZCB2YWx1ZXM6ICR7Xy52YWx1ZXMoZW11TWV0aG9kcy5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWyduZXR3b3JrJywgJ3NwZWVkJywgc3BlZWRdKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRXhlY1RlbG5ldE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBleGVjVGltZW91dCBbNjAwMDBdIEEgdGltZW91dCB1c2VkIHRvIHdhaXQgZm9yIGEgc2VydmVyXG4gKiByZXBseSB0byB0aGUgZ2l2ZW4gY29tbWFuZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbm5UaW1lb3V0IFs1MDAwXSBDb25zb2xlIGNvbm5lY3Rpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbml0VGltZW91dCBbNTAwMF0gVGVsbmV0IGNvbnNvbGUgaW5pdGlhbGl6YXRpb24gdGltZW91dFxuICogaW4gbWlsbGlzZWNvbmRzICh0aGUgdGltZSBiZXR3ZWVuIGNvbm5lY3Rpb24gaGFwcGVucyBhbmQgdGhlIGNvbW1hbmQgcHJvbXB0XG4gKiBpcyBhdmFpbGFibGUpXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBwb3J0IFRoZSBlbXVsYXRvciBwb3J0IG51bWJlci4gVGhlIG1ldGhvZCB3aWxsIHRyeSB0byBwYXJzZSBpdFxuICogZnJvbSB0aGUgY3VycmVudCBkZXZpY2UgaWRlbnRpZmllciBpZiB1bnNldFxuICovXG5cbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kIHRocm91Z2ggZW11bGF0b3IgdGVsbmV0IGNvbnNvbGUgaW50ZXJmYWNlIGFuZCByZXR1cm5zIGl0cyBvdXRwdXRcbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz58c3RyaW5nfSBjbWQgLSBUaGUgYWN0dWFsIGNvbW1hbmQgdG8gZXhlY3V0ZS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vcnVuL2VtdWxhdG9yLWNvbnNvbGUgZm9yIG1vcmUgZGV0YWlsc1xuICogb24gYXZhaWxhYmxlIGNvbW1hbmRzXG4gKiBAcGFyYW0ge0V4ZWNUZWxuZXRPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tbWFuZCBvdXRwdXRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY29ubmVjdGluZyB0byB0aGUgVGVsbmV0IGNvbnNvbGVcbiAqIG9yIGlmIHRoZSBnaXZlbiBjb21tYW5kIHJldHVybmVkIG5vbi1PSyByZXNwb25zZVxuICovXG5lbXVNZXRob2RzLmV4ZWNFbXVDb25zb2xlQ29tbWFuZCA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWNUZWxuZXQgKGNtZCwgb3B0cyA9IHt9KSB7XG4gIGxldCBwb3J0ID0gcGFyc2VJbnQob3B0cy5wb3J0LCAxMCk7XG4gIGlmICghcG9ydCkge1xuICAgIGNvbnN0IHBvcnRNYXRjaCA9IC9lbXVsYXRvci0oXFxkKykvaS5leGVjKHRoaXMuY3VyRGV2aWNlSWQpO1xuICAgIGlmICghcG9ydE1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgY29uc29sZSBwb3J0IG51bWJlciBmcm9tIHRoZSBkZXZpY2UgaWRlbnRpZmllciAnJHt0aGlzLmN1ckRldmljZUlkfScuIGAgK1xuICAgICAgICBgSXMgaXQgYW4gZW11bGF0b3I/YCk7XG4gICAgfVxuICAgIHBvcnQgPSBwYXJzZUludChwb3J0TWF0Y2hbMV0sIDEwKTtcbiAgfVxuICBjb25zdCBob3N0ID0gJzEyNy4wLjAuMSc7XG4gIGNvbnN0IHtcbiAgICBleGVjVGltZW91dCA9IDYwMDAwLFxuICAgIGNvbm5UaW1lb3V0ID0gNTAwMCxcbiAgICBpbml0VGltZW91dCA9IDUwMDAsXG4gIH0gPSBvcHRzO1xuICBhd2FpdCB0aGlzLnJlc2V0VGVsbmV0QXV0aFRva2VuKCk7XG5cbiAgY29uc3Qgb2tGbGFnID0gL15PSyQvbTtcbiAgY29uc3Qgbm9rRmxhZyA9IC9eS09cXGIvbTtcbiAgY29uc3QgZW9sID0gJ1xcclxcbic7XG4gIGNvbnN0IGNsaWVudCA9IG5ldC5jb25uZWN0KHtcbiAgICBob3N0LFxuICAgIHBvcnQsXG4gIH0pO1xuXG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY29ublRpbWVvdXRPYmogPSBzZXRUaW1lb3V0KFxuICAgICAgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgQ2Fubm90IGNvbm5lY3QgdG8gdGhlIEVtdWxhdG9yIGNvbnNvbGUgYXQgJHtob3N0fToke3BvcnR9IGAgK1xuICAgICAgICBgYWZ0ZXIgJHtjb25uVGltZW91dH1tc2ApKSwgY29ublRpbWVvdXQpO1xuICAgIGxldCBleGVjVGltZW91dE9iajtcbiAgICBsZXQgaW5pdFRpbWVvdXRPYmo7XG4gICAgbGV0IGlzQ29tbWFuZFNlbnQgPSBmYWxzZTtcbiAgICBsZXQgc2VydmVyUmVzcG9uc2UgPSBbXTtcblxuICAgIGNsaWVudC5vbmNlKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoY29ublRpbWVvdXRPYmopO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ2Fubm90IGNvbm5lY3QgdG8gdGhlIEVtdWxhdG9yIGNvbnNvbGUgYXQgJHtob3N0fToke3BvcnR9LiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKSk7XG4gICAgfSk7XG5cbiAgICBjbGllbnQub25jZSgnY29ubmVjdCcsICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChjb25uVGltZW91dE9iaik7XG4gICAgICBpbml0VGltZW91dE9iaiA9IHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpZCBub3QgZ2V0IHRoZSBpbml0aWFsIHJlc3BvbnNlIGZyb20gdGhlIEVtdWxhdG9yIGNvbnNvbGUgYXQgJHtob3N0fToke3BvcnR9IGAgK1xuICAgICAgICAgIGBhZnRlciAke2luaXRUaW1lb3V0fW1zYCkpLCBpbml0VGltZW91dCk7XG4gICAgfSk7XG5cbiAgICBjbGllbnQub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgIHNlcnZlclJlc3BvbnNlLnB1c2goY2h1bmspO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gQnVmZmVyLmNvbmNhdChzZXJ2ZXJSZXNwb25zZSkudG9TdHJpbmcoJ3V0ZjgnKS50cmltKCk7XG4gICAgICBpZiAob2tGbGFnLnRlc3Qob3V0cHV0KSkge1xuICAgICAgICAvLyBUaGUgaW5pdGlhbCBpbmNvbWluZyBkYXRhIGNodW5rIGNvbmZpcm1zIHRoZSBpbnRlcmZhY2UgaXMgcmVhZHkgZm9yIGlucHV0XG4gICAgICAgIGlmICghaXNDb21tYW5kU2VudCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dChpbml0VGltZW91dE9iaik7XG4gICAgICAgICAgc2VydmVyUmVzcG9uc2UgPSBbXTtcbiAgICAgICAgICBjb25zdCBjbWRTdHIgPSBfLmlzQXJyYXkoY21kKSA/IHV0aWwucXVvdGUoY21kKSA6IGAke2NtZH1gO1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIEVtdWxhdG9yIGNvbnNvbGUgY29tbWFuZDogJHtjbWRTdHJ9YCk7XG4gICAgICAgICAgY2xpZW50LndyaXRlKGNtZFN0cik7XG4gICAgICAgICAgY2xpZW50LndyaXRlKGVvbCk7XG4gICAgICAgICAgaXNDb21tYW5kU2VudCA9IHRydWU7XG4gICAgICAgICAgZXhlY1RpbWVvdXRPYmogPSBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlkIG5vdCBnZXQgYW55IHJlc3BvbnNlIGZyb20gdGhlIEVtdWxhdG9yIGNvbnNvbGUgYXQgJHtob3N0fToke3BvcnR9IGAgK1xuICAgICAgICAgICAgICBgdG8gJyR7Y21kfScgY29tbWFuZCBhZnRlciAke2V4ZWNUaW1lb3V0fW1zYCkpLCBleGVjVGltZW91dCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyVGltZW91dChleGVjVGltZW91dE9iaik7XG4gICAgICAgIGNsaWVudC5lbmQoKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0QXJyID0gb3V0cHV0LnNwbGl0KGVvbCk7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgcmVkdW5kYW50IE9LIGZsYWcgZnJvbSB0aGUgcmVzdWx0aW5nIGNvbW1hbmQgb3V0cHV0XG4gICAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dEFyci5zbGljZSgwLCBvdXRwdXRBcnIubGVuZ3RoIC0gMSkuam9pbignXFxuJykudHJpbSgpKTtcbiAgICAgIH0gZWxzZSBpZiAobm9rRmxhZy50ZXN0KG91dHB1dCkpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGluaXRUaW1lb3V0T2JqKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGV4ZWNUaW1lb3V0T2JqKTtcbiAgICAgICAgY2xpZW50LmVuZCgpO1xuICAgICAgICBjb25zdCBvdXRwdXRBcnIgPSBvdXRwdXQuc3BsaXQoZW9sKTtcbiAgICAgICAgcmV0dXJuIHJlamVjdChfLnRyaW0oXy5sYXN0KG91dHB1dEFycikpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEVtdVZlcnNpb25JbmZvXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHJldmlzaW9uIFRoZSBhY3R1YWwgcmV2aXNpb24gbnVtYmVyLCBmb3IgZXhhbXBsZSAnMzAuMC41J1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSBidWlsZElkIFRoZSBidWlsZCBpZGVudGlmaWVyLCBmb3IgZXhhbXBsZSA2MzA2MDQ3XG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgZW11bGF0b3IgdmVyc2lvbiBmcm9tIHRoZSBmaWxlIHN5c3RlbVxuICpcbiAqIEByZXR1cm5zIHtFbXVWZXJzaW9uSW5mb30gSWYgbm8gdmVyc2lvbiBpbmZvIGNvdWxkIGJlIHBhcnNlZCB0aGVuIGFuIGVtcHR5XG4gKiBvYmplY3QgaXMgcmV0dXJuZWRcbiAqL1xuZW11TWV0aG9kcy5nZXRFbXVWZXJzaW9uSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldEVtdVZlcnNpb25JbmZvICgpIHtcbiAgY29uc3QgcHJvcHNQYXRoID0gcGF0aC5qb2luKHRoaXMuc2RrUm9vdCwgJ2VtdWxhdG9yJywgJ3NvdXJjZS5wcm9wZXJ0aWVzJyk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHByb3BzUGF0aCkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocHJvcHNQYXRoLCAndXRmOCcpO1xuICBjb25zdCByZXZpc2lvbk1hdGNoID0gL15Qa2dcXC5SZXZpc2lvbj0oW1xcZC5dKykkL20uZXhlYyhjb250ZW50KTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGlmIChyZXZpc2lvbk1hdGNoKSB7XG4gICAgcmVzdWx0LnJldmlzaW9uID0gcmV2aXNpb25NYXRjaFsxXTtcbiAgfVxuICBjb25zdCBidWlsZElkTWF0Y2ggPSAvXlBrZ1xcLkJ1aWxkSWQ9KFxcZCspJC9tLmV4ZWMoY29udGVudCk7XG4gIGlmIChidWlsZElkTWF0Y2gpIHtcbiAgICByZXN1bHQuYnVpbGRJZCA9IHBhcnNlSW50KGJ1aWxkSWRNYXRjaFsxXSwgMTApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBlbXVsYXRvciBpbWFnZSBwcm9wZXJ0aWVzIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF2ZE5hbWUgRW11bGF0b3IgbmFtZS4gU2hvdWxkIE5PVCBzdGFydCB3aXRoICdAJyBjaGFyYWN0ZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIGV4dHJhY3RpbmcgdGhlIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBjb250ZW50IG9mIGVtdWxhdG9yIGltYWdlIHByb3BlcnRpZXMgZmlsZS5cbiAqIFVzdWFsbHkgdGhpcyBjb25maWd1cmF0aW9uIC5pbmkgZmlsZSBoYXMgdGhlIGZvbGxvd2luZyBjb250ZW50OlxuICogICBhdmQuaW5pLmVuY29kaW5nPVVURi04XG4gKiAgIHBhdGg9L1VzZXJzL3VzZXJuYW1lLy5hbmRyb2lkL2F2ZC9QaXhlbF9YTF9BUElfMzAuYXZkXG4gKiAgIHBhdGgucmVsPWF2ZC9QaXhlbF9YTF9BUElfMzAuYXZkXG4gKiAgIHRhcmdldD1hbmRyb2lkLTMwXG4gKi9cbmVtdU1ldGhvZHMuZ2V0RW11SW1hZ2VQcm9wZXJ0aWVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0RW11SW1hZ2VQcm9wZXJ0aWVzIChhdmROYW1lKSB7XG4gIGNvbnN0IGF2ZHMgPSBhd2FpdCBsaXN0RW11bGF0b3JzKCk7XG4gIGNvbnN0IGF2ZCA9IGF2ZHMuZmluZCgoe25hbWV9KSA9PiBuYW1lID09PSBhdmROYW1lKTtcbiAgaWYgKCFhdmQpIHtcbiAgICBsZXQgbXNnID0gYENhbm5vdCBmaW5kICcke2F2ZE5hbWV9JyBlbXVsYXRvci4gYDtcbiAgICBpZiAoXy5pc0VtcHR5KGF2ZHMpKSB7XG4gICAgICBtc2cgKz0gYE5vIGVtdWxhdG9ycyBoYXZlIGJlZW4gZGV0ZWN0ZWQgb24geW91ciBzeXN0ZW1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgKz0gYEF2YWlsYWJsZSBhdmQgbmFtZXMgYXJlOiAke2F2ZHMubWFwKCh7bmFtZX0pID0+IG5hbWUpfWA7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICB9XG4gIHJldHVybiBpbmkucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUoYXZkLmNvbmZpZywgJ3V0ZjgnKSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGdpdmVuIGVtdWxhdG9yIGV4aXN0cyBpbiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgYXZkcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXZkTmFtZSAtIFRoZSBuYW1lIG9mIGVtdWxhdG9yIHRvIHZlcmlmeSBmb3IgZXhpc3RlbmNlLlxuICogU2hvdWxkIE5PVCBzdGFydCB3aXRoICdAJyBjaGFyYWN0ZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZW11bGF0b3Igd2l0aCBnaXZlbiBuYW1lIGRvZXMgbm90IGV4aXN0LlxuICovXG5lbXVNZXRob2RzLmNoZWNrQXZkRXhpc3QgPSBhc3luYyBmdW5jdGlvbiBjaGVja0F2ZEV4aXN0IChhdmROYW1lKSB7XG4gIGNvbnN0IGF2ZHMgPSBhd2FpdCBsaXN0RW11bGF0b3JzKCk7XG4gIGlmICghYXZkcy5zb21lKCh7bmFtZX0pID0+IG5hbWUgPT09IGF2ZE5hbWUpKSB7XG4gICAgbGV0IG1zZyA9IGBBdmQgJyR7YXZkTmFtZX0nIGlzIG5vdCBhdmFpbGFibGUuIGA7XG4gICAgaWYgKF8uaXNFbXB0eShhdmRzKSkge1xuICAgICAgbXNnICs9IGBObyBlbXVsYXRvcnMgaGF2ZSBiZWVuIGRldGVjdGVkIG9uIHlvdXIgc3lzdGVtYDtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnICs9IGBQbGVhc2Ugc2VsZWN0IHlvdXIgYXZkIG5hbWUgZnJvbSBvbmUgb2YgdGhlc2U6ICcke2F2ZHMubWFwKCh7bmFtZX0pID0+IG5hbWUpfSdgO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVtdU1ldGhvZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9hZGItZW11LWNvbW1hbmRzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
397
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hZGItZW11LWNvbW1hbmRzLmpzIl0sIm5hbWVzIjpbIlBIT05FX05VTUJFUl9QQVRURVJOIiwiZW11TWV0aG9kcyIsIlBPV0VSX0FDX1NUQVRFUyIsIk9iamVjdCIsImZyZWV6ZSIsIlBPV0VSX0FDX09OIiwiUE9XRVJfQUNfT0ZGIiwiR1NNX0NBTExfQUNUSU9OUyIsIkdTTV9DQUxMIiwiR1NNX0FDQ0VQVCIsIkdTTV9DQU5DRUwiLCJHU01fSE9MRCIsIkdTTV9WT0lDRV9TVEFURVMiLCJHU01fVk9JQ0VfVU5SRUdJU1RFUkVEIiwiR1NNX1ZPSUNFX0hPTUUiLCJHU01fVk9JQ0VfUk9BTUlORyIsIkdTTV9WT0lDRV9TRUFSQ0hJTkciLCJHU01fVk9JQ0VfREVOSUVEIiwiR1NNX1ZPSUNFX09GRiIsIkdTTV9WT0lDRV9PTiIsIkdTTV9TSUdOQUxfU1RSRU5HVEhTIiwiTkVUV09SS19TUEVFRCIsIkdTTSIsIlNDU0QiLCJHUFJTIiwiRURHRSIsIlVNVFMiLCJIU0RQQSIsIkxURSIsIkVWRE8iLCJGVUxMIiwiU0VOU09SUyIsIkFDQ0VMRVJBVElPTiIsIkdZUk9TQ09QRSIsIk1BR05FVElDX0ZJRUxEIiwiT1JJRU5UQVRJT04iLCJURU1QRVJBVFVSRSIsIlBST1hJTUlUWSIsIkxJR0hUIiwiUFJFU1NVUkUiLCJIVU1JRElUWSIsIk1BR05FVElDX0ZJRUxEX1VOQ0FMSUJSQVRFRCIsIkdZUk9TQ09QRV9VTkNBTElCUkFURUQiLCJISU5HRV9BTkdMRTAiLCJISU5HRV9BTkdMRTEiLCJISU5HRV9BTkdMRTIiLCJIRUFSVF9SQVRFIiwiUkdCQ19MSUdIVCIsImxpc3RFbXVsYXRvcnMiLCJhdmRzUm9vdCIsInByb2Nlc3MiLCJlbnYiLCJBTkRST0lEX0FWRF9IT01FIiwiZ2V0QXZkQ29uZmlnUGF0aHMiLCJsb2ciLCJ3YXJuIiwicHJlZnNSb290IiwicGF0aCIsInJlc29sdmUiLCJkZWJ1ZyIsImNvbmZpZ3MiLCJmcyIsImdsb2IiLCJjd2QiLCJhYnNvbHV0ZSIsIm1hcCIsImNvbmZQYXRoIiwiYXZkTmFtZSIsImJhc2VuYW1lIiwic3BsaXQiLCJzbGljZSIsImpvaW4iLCJuYW1lIiwiY29uZmlnIiwiZmlsdGVyIiwiXyIsInRyaW0iLCJpc0VtdWxhdG9yQ29ubmVjdGVkIiwiZW11bGF0b3JzIiwiZ2V0Q29ubmVjdGVkRW11bGF0b3JzIiwiZmluZCIsIngiLCJ1ZGlkIiwiY3VyRGV2aWNlSWQiLCJ2ZXJpZnlFbXVsYXRvckNvbm5lY3RlZCIsIkVycm9yIiwiZmluZ2VycHJpbnQiLCJmaW5nZXJwcmludElkIiwibGV2ZWwiLCJnZXRBcGlMZXZlbCIsImFkYkV4ZWNFbXUiLCJyb3RhdGUiLCJwb3dlckFDIiwic3RhdGUiLCJ2YWx1ZXMiLCJpbmRleE9mIiwiVHlwZUVycm9yIiwic2Vuc29yU2V0Iiwic2Vuc29yIiwidmFsdWUiLCJpbmNsdWRlcyIsImlzTmlsIiwicG93ZXJDYXBhY2l0eSIsInBlcmNlbnQiLCJwYXJzZUludCIsImlzTmFOIiwicG93ZXJPRkYiLCJzZW5kU01TIiwicGhvbmVOdW1iZXIiLCJtZXNzYWdlIiwicmVwbGFjZSIsInRlc3QiLCJnc21DYWxsIiwiYWN0aW9uIiwiZ3NtU2lnbmFsIiwic3RyZW5ndGgiLCJpbmZvIiwiZ3NtVm9pY2UiLCJuZXR3b3JrU3BlZWQiLCJzcGVlZCIsImV4ZWNFbXVDb25zb2xlQ29tbWFuZCIsImV4ZWNUZWxuZXQiLCJjbWQiLCJvcHRzIiwicG9ydCIsInBvcnRNYXRjaCIsImV4ZWMiLCJob3N0IiwiZXhlY1RpbWVvdXQiLCJjb25uVGltZW91dCIsImluaXRUaW1lb3V0IiwicmVzZXRUZWxuZXRBdXRoVG9rZW4iLCJva0ZsYWciLCJub2tGbGFnIiwiZW9sIiwiY2xpZW50IiwibmV0IiwiY29ubmVjdCIsIkIiLCJyZWplY3QiLCJjb25uVGltZW91dE9iaiIsInNldFRpbWVvdXQiLCJleGVjVGltZW91dE9iaiIsImluaXRUaW1lb3V0T2JqIiwiaXNDb21tYW5kU2VudCIsInNlcnZlclJlc3BvbnNlIiwib25jZSIsImUiLCJjbGVhclRpbWVvdXQiLCJvbiIsImNodW5rIiwicHVzaCIsIm91dHB1dCIsIkJ1ZmZlciIsImNvbmNhdCIsInRvU3RyaW5nIiwiY21kU3RyIiwiaXNBcnJheSIsInV0aWwiLCJxdW90ZSIsIndyaXRlIiwiZW5kIiwib3V0cHV0QXJyIiwibGVuZ3RoIiwibGFzdCIsImdldEVtdVZlcnNpb25JbmZvIiwicHJvcHNQYXRoIiwic2RrUm9vdCIsImV4aXN0cyIsImNvbnRlbnQiLCJyZWFkRmlsZSIsInJldmlzaW9uTWF0Y2giLCJyZXN1bHQiLCJyZXZpc2lvbiIsImJ1aWxkSWRNYXRjaCIsImJ1aWxkSWQiLCJnZXRFbXVJbWFnZVByb3BlcnRpZXMiLCJhdmRzIiwiYXZkIiwibXNnIiwiaXNFbXB0eSIsImluaSIsInBhcnNlIiwiY2hlY2tBdmRFeGlzdCIsInNvbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsb0JBQW9CLEdBQUcscURBQTdCO0FBRUEsTUFBTUMsVUFBVSxHQUFHLEVBQW5CO0FBQ0FBLFVBQVUsQ0FBQ0MsZUFBWCxHQUE2QkMsTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFDekNDLEVBQUFBLFdBQVcsRUFBRSxJQUQ0QjtBQUV6Q0MsRUFBQUEsWUFBWSxFQUFFO0FBRjJCLENBQWQsQ0FBN0I7QUFJQUwsVUFBVSxDQUFDTSxnQkFBWCxHQUE4QkosTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFDMUNJLEVBQUFBLFFBQVEsRUFBRSxNQURnQztBQUUxQ0MsRUFBQUEsVUFBVSxFQUFFLFFBRjhCO0FBRzFDQyxFQUFBQSxVQUFVLEVBQUUsUUFIOEI7QUFJMUNDLEVBQUFBLFFBQVEsRUFBRTtBQUpnQyxDQUFkLENBQTlCO0FBTUFWLFVBQVUsQ0FBQ1csZ0JBQVgsR0FBOEJULE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQzFDUyxFQUFBQSxzQkFBc0IsRUFBRSxjQURrQjtBQUUxQ0MsRUFB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QUNELENBYkQ7O0FBc0JBeEUsVUFBVSxDQUFDc0wsYUFBWCxHQUEyQixlQUFlQSxhQUFmLENBQThCcEgsT0FBOUIsRUFBdUM7QUFDaEUsUUFBTThHLElBQUksR0FBRyxNQUFNakksYUFBYSxFQUFoQzs7QUFDQSxNQUFJLENBQUNpSSxJQUFJLENBQUNPLElBQUwsQ0FBVSxDQUFDO0FBQUNoSCxJQUFBQTtBQUFELEdBQUQsS0FBWUEsSUFBSSxLQUFLTCxPQUEvQixDQUFMLEVBQThDO0FBQzVDLFFBQUlnSCxHQUFHLEdBQUksUUFBT2hILE9BQVEsc0JBQTFCOztBQUNBLFFBQUlRLGdCQUFFeUcsT0FBRixDQUFVSCxJQUFWLENBQUosRUFBcUI7QUFDbkJFLE1BQUFBLEdBQUcsSUFBSyxnREFBUjtBQUNELEtBRkQsTUFFTztBQUNMQSxNQUFBQSxHQUFHLElBQUssbURBQWtERixJQUFJLENBQUNoSCxHQUFMLENBQVMsQ0FBQztBQUFDTyxRQUFBQTtBQUFELE9BQUQsS0FBWUEsSUFBckIsQ0FBMkIsR0FBckY7QUFDRDs7QUFDRCxVQUFNLElBQUlhLEtBQUosQ0FBVThGLEdBQVYsQ0FBTjtBQUNEOztBQUNELFNBQU8sSUFBUDtBQUNELENBWkQ7O2VBY2VsTCxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZ2V0QW5kcm9pZFByZWZzUm9vdCwgZGlyRXhpc3RzIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG5ldCBmcm9tICduZXQnO1xuaW1wb3J0IHsgdXRpbCwgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgaW5pIGZyb20gJ2luaSc7XG5cbmNvbnN0IFBIT05FX05VTUJFUl9QQVRURVJOID0gL15bK10/WyhdP1swLTldKlspXT9bLVxccy5dP1swLTldKlstXFxzLl0/WzAtOV17Mix9JC9pbTtcblxuY29uc3QgZW11TWV0aG9kcyA9IHt9O1xuZW11TWV0aG9kcy5QT1dFUl9BQ19TVEFURVMgPSBPYmplY3QuZnJlZXplKHtcbiAgUE9XRVJfQUNfT046ICdvbicsXG4gIFBPV0VSX0FDX09GRjogJ29mZidcbn0pO1xuZW11TWV0aG9kcy5HU01fQ0FMTF9BQ1RJT05TID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEdTTV9DQUxMOiAnY2FsbCcsXG4gIEdTTV9BQ0NFUFQ6ICdhY2NlcHQnLFxuICBHU01fQ0FOQ0VMOiAnY2FuY2VsJyxcbiAgR1NNX0hPTEQ6ICdob2xkJ1xufSk7XG5lbXVNZXRob2RzLkdTTV9WT0lDRV9TVEFURVMgPSBPYmplY3QuZnJlZXplKHtcbiAgR1NNX1ZPSUNFX1VOUkVHSVNURVJFRDogJ3VucmVnaXN0ZXJlZCcsXG4gIEdTTV9WT0lDRV9IT01FOiAnaG9tZScsXG4gIEdTTV9WT0lDRV9ST0FNSU5HOiAncm9hbWluZycsXG4gIEdTTV9WT0lDRV9TRUFSQ0hJTkc6ICdzZWFyY2hpbmcnLFxuICBHU01fVk9JQ0VfREVOSUVEOiAnZGVuaWVkJyxcbiAgR1NNX1ZPSUNFX09GRjogJ29mZicsXG4gIEdTTV9WT0lDRV9PTjogJ29uJ1xufSk7XG5lbXVNZXRob2RzLkdTTV9TSUdOQUxfU1RSRU5HVEhTID0gWzAsIDEsIDIsIDMsIDRdO1xuXG5lbXVNZXRob2RzLk5FVFdPUktfU1BFRUQgPSBPYmplY3QuZnJlZXplKHtcbiAgR1NNOiAnZ3NtJywgLy8gR1NNL0NTRCAodXA6IDE0LjQsIGRvd246IDE0LjQpLlxuICBTQ1NEOiAnc2NzZCcsIC8vIEhTQ1NEICh1cDogMTQuNCwgZG93bjogNTcuNikuXG4gIEdQUlM6ICdncHJzJywgLy8gR1BSUyAodXA6IDI4LjgsIGRvd246IDU3LjYpLlxuICBFREdFOiAnZWRnZScsIC8vIEVER0UvRUdQUlMgKHVwOiA0NzMuNiwgZG93bjogNDczLjYpLlxuICBVTVRTOiAndW10cycsIC8vIFVNVFMvM0cgKHVwOiAzODQuMCwgZG93bjogMzg0LjApLlxuICBIU0RQQTogJ2hzZHBhJywgLy8gSFNEUEEgKHVwOiA1NzYwLjAsIGRvd246IDEzLDk4MC4wKS5cbiAgTFRFOiAnbHRlJywgLy8gTFRFICh1cDogNTgsMDAwLCBkb3duOiAxNzMsMDAwKS5cbiAgRVZETzogJ2V2ZG8nLCAvLyBFVkRPICh1cDogNzUsMDAwLCBkb3duOiAyODAsMDAwKS5cbiAgRlVMTDogJ2Z1bGwnIC8vIE5vIGxpbWl0LCB0aGUgZGVmYXVsdCAodXA6IDAuMCwgZG93bjogMC4wKS5cbn0pO1xuXG5lbXVNZXRob2RzLlNFTlNPUlMgPSBPYmplY3QuZnJlZXplKHtcbiAgQUNDRUxFUkFUSU9OOiAnYWNjZWxlcmF0aW9uJyxcbiAgR1lST1NDT1BFOiAnZ3lyb3Njb3BlJyxcbiAgTUFHTkVUSUNfRklFTEQ6ICdtYWduZXRpYy1maWVsZCcsXG4gIE9SSUVOVEFUSU9OOiAnb3JpZW50YXRpb24nLFxuICBURU1QRVJBVFVSRTogJ3RlbXBlcmF0dXJlJyxcbiAgUFJPWElNSVRZOiAncHJveGltaXR5JyxcbiAgTElHSFQ6ICdsaWdodCcsXG4gIFBSRVNTVVJFOiAncHJlc3N1cmUnLFxuICBIVU1JRElUWTogJ2h1bWlkaXR5JyxcbiAgTUFHTkVUSUNfRklFTERfVU5DQUxJQlJBVEVEOiAnbWFnbmV0aWMtZmllbGQtdW5jYWxpYnJhdGVkJyxcbiAgR1lST1NDT1BFX1VOQ0FMSUJSQVRFRDogJ2d5cm9zY29wZS11bmNhbGlicmF0ZWQnLFxuICBISU5HRV9BTkdMRTA6ICdoaW5nZS1hbmdsZTAnLFxuICBISU5HRV9BTkdMRTE6ICdoaW5nZS1hbmdsZTEnLFxuICBISU5HRV9BTkdMRTI6ICdoaW5nZS1hbmdsZTInLFxuICBIRUFSVF9SQVRFOiAnaGVhcnQtcmF0ZScsXG4gIFJHQkNfTElHSFQ6ICdyZ2JjLWxpZ2h0Jyxcbn0pO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEVtdUluZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIEVtdWxhdG9yIG5hbWUsIGZvciBleGFtcGxlIGBQaXhlbF9YTF9BUElfMzBgXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29uZmlnIEZ1bGwgcGF0aCB0byB0aGUgZW11bGF0b3IgY29uZmlnIC5pbmkgZmlsZSxcbiAqIGZvciBleGFtcGxlIGAvVXNlcnMvdXNlci8uYW5kcm9pZC9hdmQvUGl4ZWxfWExfQVBJXzMwLmluaWBcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgQW5kcm9pZCBlbXVsYXRvcnNcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8RW11SW5mbz59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxpc3RFbXVsYXRvcnMgKCkge1xuICBsZXQgYXZkc1Jvb3QgPSBwcm9jZXNzLmVudi5BTkRST0lEX0FWRF9IT01FO1xuICBpZiAoYXdhaXQgZGlyRXhpc3RzKGF2ZHNSb290KSkge1xuICAgIHJldHVybiBhd2FpdCBnZXRBdmRDb25maWdQYXRocyhhdmRzUm9vdCk7XG4gIH1cblxuICBpZiAoYXZkc1Jvb3QpIHtcbiAgICBsb2cud2FybihgVGhlIHZhbHVlIG9mIHRoZSBBTkRST0lEX0FWRF9IT01FIGVudmlyb25tZW50IHZhcmlhYmxlICcke2F2ZHNSb290fScgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeWApO1xuICB9XG5cbiAgY29uc3QgcHJlZnNSb290ID0gYXdhaXQgZ2V0QW5kcm9pZFByZWZzUm9vdCgpO1xuICBpZiAoIXByZWZzUm9vdCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGF2ZHNSb290ID0gcGF0aC5yZXNvbHZlKHByZWZzUm9vdCwgJ2F2ZCcpO1xuICBpZiAoIWF3YWl0IGRpckV4aXN0cyhhdmRzUm9vdCkpIHtcbiAgICBsb2cuZGVidWcoYFZpcnR1YWwgZGV2aWNlcyBjb25maWcgcm9vdCAnJHthdmRzUm9vdH0nIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnlgKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gYXdhaXQgZ2V0QXZkQ29uZmlnUGF0aHMoYXZkc1Jvb3QpO1xufVxuXG4vKipcbiAqIEdldCBjb25maWd1cmF0aW9uIHBhdGhzIG9mIGFsbCB2aXJ0dWFsIGRldmljZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXZkc1Jvb3QgUGF0aCB0byB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIEFWRCAuaW5pIGZpbGVzXG4gKiBAcmV0dXJucyB7QXJyYXk8RW11SW5mbz59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEF2ZENvbmZpZ1BhdGhzIChhdmRzUm9vdCkge1xuICBjb25zdCBjb25maWdzID0gYXdhaXQgZnMuZ2xvYignKi5pbmknLCB7XG4gICAgY3dkOiBhdmRzUm9vdCxcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgfSk7XG4gIHJldHVybiBjb25maWdzLm1hcCgoY29uZlBhdGgpID0+IHtcbiAgICBjb25zdCBhdmROYW1lID0gcGF0aC5iYXNlbmFtZShjb25mUGF0aCkuc3BsaXQoJy4nKS5zbGljZSgwLCAtMSkuam9pbignLicpO1xuICAgIHJldHVybiB7bmFtZTogYXZkTmFtZSwgY29uZmlnOiBjb25mUGF0aH07XG4gIH0pLmZpbHRlcigoe25hbWV9KSA9PiBfLnRyaW0obmFtZSkpO1xufVxuXG4vKipcbiAqIENoZWNrIHRoZSBlbXVsYXRvciBzdGF0ZS5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIEVtdWxhdG9yIGlzIHZpc2libGUgdG8gYWRiLlxuICovXG5lbXVNZXRob2RzLmlzRW11bGF0b3JDb25uZWN0ZWQgPSBhc3luYyBmdW5jdGlvbiBpc0VtdWxhdG9yQ29ubmVjdGVkICgpIHtcbiAgbGV0IGVtdWxhdG9ycyA9IGF3YWl0IHRoaXMuZ2V0Q29ubmVjdGVkRW11bGF0b3JzKCk7XG4gIHJldHVybiAhIV8uZmluZChlbXVsYXRvcnMsICh4KSA9PiB4ICYmIHgudWRpZCA9PT0gdGhpcy5jdXJEZXZpY2VJZCk7XG59O1xuXG4vKipcbiAqIFZlcmlmeSB0aGUgZW11bGF0b3IgaXMgY29ubmVjdGVkLlxuICpcbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiBFbXVsYXRvciBpcyBub3QgdmlzaWJsZSB0byBhZGIuXG4gKi9cbmVtdU1ldGhvZHMudmVyaWZ5RW11bGF0b3JDb25uZWN0ZWQgPSBhc3luYyBmdW5jdGlvbiB2ZXJpZnlFbXVsYXRvckNvbm5lY3RlZCAoKSB7XG4gIGlmICghKGF3YWl0IHRoaXMuaXNFbXVsYXRvckNvbm5lY3RlZCgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGVtdWxhdG9yIFwiJHt0aGlzLmN1ckRldmljZUlkfVwiIHdhcyB1bmV4cGVjdGVkbHkgZGlzY29ubmVjdGVkYCk7XG4gIH1cbn07XG5cbi8qKlxuICogRW11bGF0ZSBmaW5nZXJwcmludCB0b3VjaCBldmVudCBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaW5nZXJwcmludElkIC0gVGhlIElEIG9mIHRoZSBmaW5nZXJwcmludC5cbiAqL1xuZW11TWV0aG9kcy5maW5nZXJwcmludCA9IGFzeW5jIGZ1bmN0aW9uIGZpbmdlcnByaW50IChmaW5nZXJwcmludElkKSB7XG4gIGlmICghZmluZ2VycHJpbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmluZ2VycHJpbnQgaWQgcGFyYW1ldGVyIG11c3QgYmUgZGVmaW5lZCcpO1xuICB9XG4gIC8vIHRoZSBtZXRob2QgdXNlZCBvbmx5IHdvcmtzIGZvciBBUEkgbGV2ZWwgMjMgYW5kIGFib3ZlXG4gIGxldCBsZXZlbCA9IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKTtcbiAgaWYgKGxldmVsIDwgMjMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERldmljZSBBUEkgTGV2ZWwgbXVzdCBiZSA+PSAyMy4gQ3VycmVudCBBcGkgbGV2ZWwgJyR7bGV2ZWx9J2ApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ2ZpbmdlcicsICd0b3VjaCcsIGZpbmdlcnByaW50SWRdKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlIHRoZSBkaXNwbGF5IG9yaWVudGF0aW9uIG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKiBUaGUgb3JpZW50YXRpb24gaXMgY2hhbmdlZCAoUEkvMiBpcyBhZGRlZCkgZXZlcnkgdGltZVxuICogdGhpcyBtZXRob2QgaXMgY2FsbGVkLlxuICovXG5lbXVNZXRob2RzLnJvdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHJvdGF0ZSAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ3JvdGF0ZSddKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBwb3dlciBzdGF0ZSBjaGFuZ2Ugb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgWydvbiddIC0gRWl0aGVyICdvbicgb3IgJ29mZicuXG4gKi9cbmVtdU1ldGhvZHMucG93ZXJBQyA9IGFzeW5jIGZ1bmN0aW9uIHBvd2VyQUMgKHN0YXRlID0gJ29uJykge1xuICBpZiAoXy52YWx1ZXMoZW11TWV0aG9kcy5QT1dFUl9BQ19TVEFURVMpLmluZGV4T2Yoc3RhdGUpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFdyb25nIHBvd2VyIEFDIHN0YXRlIHNlbnQgJyR7c3RhdGV9Jy4gYFxuICAgICAgKyBgU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhlbXVNZXRob2RzLlBPV0VSX0FDX1NUQVRFUyl9XWApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ3Bvd2VyJywgJ2FjJywgc3RhdGVdKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBzZW5zb3JzIHZhbHVlcyBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZW5zb3IgLSBTZW5zb3IgdHlwZSBkZWNsYXJlZCBpbiBTRU5TT1JTIGl0ZW1zLlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZSAgLSBOdW1iZXIgdG8gc2V0IGFzIHRoZSBzZW5zb3IgdmFsdWUuXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiBzZW5zb3IgdHlwZSBvciBzZW5zb3IgdmFsdWUgaXMgbm90IGRlZmluZWRcbiAqL1xuZW11TWV0aG9kcy5zZW5zb3JTZXQgPSBhc3luYyBmdW5jdGlvbiBzZW5zb3JTZXQgKHNlbnNvciwgdmFsdWUpIHtcbiAgaWYgKCFfLmluY2x1ZGVzKGVtdU1ldGhvZHMuU0VOU09SUywgc2Vuc29yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHNlbnNvciBzZW50ICcke3NlbnNvcn0nLiBgXG4gICAgICArIGBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGVtdU1ldGhvZHMuU0VOU09SUyl9XWApO1xuICB9XG4gIGlmIChfLmlzTmlsKHZhbHVlKSB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nL2ludmFsaWQgc2Vuc29yIHZhbHVlIGFyZ3VtZW50LiBgXG4gICAgICArIGBZb3UgbmVlZCB0byBwcm92aWRlIGEgdmFsaWQgdmFsdWUgdG8gc2V0IHRvIHRoZSBzZW5zb3IgaW4gYFxuICAgICAgKyBgZm9ybWF0IDx2YWx1ZS1hPls6PHZhbHVlLWI+Wzo8dmFsdWUtYz5bLi4uXV1dLmApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ3NlbnNvcicsICdzZXQnLCBzZW5zb3IsIHZhbHVlXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgcG93ZXIgY2FwYWNpdHkgY2hhbmdlIG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBwZXJjZW50IFsxMDBdIC0gUGVyY2VudGFnZSB2YWx1ZSBpbiByYW5nZSBbMCwgMTAwXS5cbiAqL1xuZW11TWV0aG9kcy5wb3dlckNhcGFjaXR5ID0gYXN5bmMgZnVuY3Rpb24gcG93ZXJDYXBhY2l0eSAocGVyY2VudCA9IDEwMCkge1xuICBwZXJjZW50ID0gcGFyc2VJbnQocGVyY2VudCwgMTApO1xuICBpZiAoaXNOYU4ocGVyY2VudCkgfHwgcGVyY2VudCA8IDAgfHwgcGVyY2VudCA+IDEwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHBlcmNlbnRhZ2UgdmFsdWUgc2hvdWxkIGJlIHZhbGlkIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxMDBgKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydwb3dlcicsICdjYXBhY2l0eScsIHBlcmNlbnRdKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBwb3dlciBvZmYgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqL1xuZW11TWV0aG9kcy5wb3dlck9GRiA9IGFzeW5jIGZ1bmN0aW9uIHBvd2VyT0ZGICgpIHtcbiAgYXdhaXQgdGhpcy5wb3dlckFDKGVtdU1ldGhvZHMuUE9XRVJfQUNfU1RBVEVTLlBPV0VSX0FDX09GRik7XG4gIGF3YWl0IHRoaXMucG93ZXJDYXBhY2l0eSgwKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBzZW5kIFNNUyBldmVudCBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcGhvbmVOdW1iZXIgLSBUaGUgcGhvbmUgbnVtYmVyIG9mIG1lc3NhZ2Ugc2VuZGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgWycnXSAtIFRoZSBtZXNzYWdlIGNvbnRlbnQuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgcGhvbmUgbnVtYmVyIGhhcyBpbnZhbGlkIGZvcm1hdC5cbiAqL1xuZW11TWV0aG9kcy5zZW5kU01TID0gYXN5bmMgZnVuY3Rpb24gc2VuZFNNUyAocGhvbmVOdW1iZXIsIG1lc3NhZ2UgPSAnJykge1xuICBtZXNzYWdlID0gbWVzc2FnZS50cmltKCk7XG4gIGlmIChtZXNzYWdlID09PSAnJykge1xuICAgIHRocm93IG5ldyBFcnJvcignU2VuZGluZyBhbiBTTVMgcmVxdWlyZXMgYSBtZXNzYWdlJyk7XG4gIH1cbiAgcGhvbmVOdW1iZXIgPSBgJHtwaG9uZU51bWJlcn1gLnJlcGxhY2UoL1xccyovLCAnJyk7XG4gIGlmICghUEhPTkVfTlVNQkVSX1BBVFRFUk4udGVzdChwaG9uZU51bWJlcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2VuZFNNUyBwaG9uZU51bWJlciBwYXJhbSAke3Bob25lTnVtYmVyfWApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ3NtcycsICdzZW5kJywgcGhvbmVOdW1iZXIsIG1lc3NhZ2VdKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBHU00gY2FsbCBldmVudCBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcGhvbmVOdW1iZXIgLSBUaGUgcGhvbmUgbnVtYmVyIG9mIHRoZSBjYWxsZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIFsnJ10gLSBPbmUgb2YgYXZhaWxhYmxlIEdTTSBjYWxsIGFjdGlvbnMuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgcGhvbmUgbnVtYmVyIGhhcyBpbnZhbGlkIGZvcm1hdC5cbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiBfYWN0aW9uXyB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5lbXVNZXRob2RzLmdzbUNhbGwgPSBhc3luYyBmdW5jdGlvbiBnc21DYWxsIChwaG9uZU51bWJlciwgYWN0aW9uID0gJycpIHtcbiAgaWYgKF8udmFsdWVzKGVtdU1ldGhvZHMuR1NNX0NBTExfQUNUSU9OUykuaW5kZXhPZihhY3Rpb24pID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnc20gYWN0aW9uIHBhcmFtICR7YWN0aW9ufS4gU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhlbXVNZXRob2RzLkdTTV9DQUxMX0FDVElPTlMpfWApO1xuICB9XG4gIHBob25lTnVtYmVyID0gYCR7cGhvbmVOdW1iZXJ9YC5yZXBsYWNlKC9cXHMqLywgJycpO1xuICBpZiAoIVBIT05FX05VTUJFUl9QQVRURVJOLnRlc3QocGhvbmVOdW1iZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdzbUNhbGwgcGhvbmVOdW1iZXIgcGFyYW0gJHtwaG9uZU51bWJlcn1gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydnc20nLCBhY3Rpb24sIHBob25lTnVtYmVyXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgR1NNIHNpZ25hbCBzdHJlbmd0aCBjaGFuZ2UgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHN0cmVuZ3RoIFs0XSAtIEEgbnVtYmVyIGluIHJhbmdlIFswLCA0XTtcbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiBfc3RyZW5ndGhfIHZhbHVlIGlzIGludmFsaWQuXG4gKi9cbmVtdU1ldGhvZHMuZ3NtU2lnbmFsID0gYXN5bmMgZnVuY3Rpb24gZ3NtU2lnbmFsIChzdHJlbmd0aCA9IDQpIHtcbiAgc3RyZW5ndGggPSBwYXJzZUludChzdHJlbmd0aCwgMTApO1xuICBpZiAoZW11TWV0aG9kcy5HU01fU0lHTkFMX1NUUkVOR1RIUy5pbmRleE9mKHN0cmVuZ3RoKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2lnbmFsIHN0cmVuZ3RoIHBhcmFtICR7c3RyZW5ndGh9LiBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGVtdU1ldGhvZHMuR1NNX1NJR05BTF9TVFJFTkdUSFMpfWApO1xuICB9XG4gIGxvZy5pbmZvKCdnc20gc2lnbmFsLXByb2ZpbGUgPHN0cmVuZ3RoPiBjaGFuZ2VzIHRoZSByZXBvcnRlZCBzdHJlbmd0aCBvbiBuZXh0ICgxNXMpIHVwZGF0ZS4nKTtcbiAgYXdhaXQgdGhpcy5hZGJFeGVjRW11KFsnZ3NtJywgJ3NpZ25hbC1wcm9maWxlJywgc3RyZW5ndGhdKTtcbn07XG5cbi8qKlxuICogRW11bGF0ZSBHU00gdm9pY2UgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgWydvbiddIC0gRWl0aGVyICdvbicgb3IgJ29mZicuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgX3N0YXRlXyB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5lbXVNZXRob2RzLmdzbVZvaWNlID0gYXN5bmMgZnVuY3Rpb24gZ3NtVm9pY2UgKHN0YXRlID0gJ29uJykge1xuICAvLyBnc20gdm9pY2UgPHN0YXRlPiBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgeW91ciBHUFJTIGNvbm5lY3Rpb25cbiAgaWYgKF8udmFsdWVzKGVtdU1ldGhvZHMuR1NNX1ZPSUNFX1NUQVRFUykuaW5kZXhPZihzdGF0ZSkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdzbSB2b2ljZSBzdGF0ZSBwYXJhbSAke3N0YXRlfS4gU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhlbXVNZXRob2RzLkdTTV9WT0lDRV9TVEFURVMpfWApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ2dzbScsICd2b2ljZScsIHN0YXRlXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgbmV0d29yayBzcGVlZCBjaGFuZ2UgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3BlZWQgWydmdWxsJ10gLSBPbmUgb2YgcG9zc2libGUgTkVUV09SS19TUEVFRCB2YWx1ZXMuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgX3NwZWVkXyB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5lbXVNZXRob2RzLm5ldHdvcmtTcGVlZCA9IGFzeW5jIGZ1bmN0aW9uIG5ldHdvcmtTcGVlZCAoc3BlZWQgPSAnZnVsbCcpIHtcbiAgLy8gbmV0d29yayBzcGVlZCA8c3BlZWQ+IGFsbG93cyB5b3UgdG8gc2V0IHRoZSBuZXR3b3JrIHNwZWVkIGVtdWxhdGlvbi5cbiAgaWYgKF8udmFsdWVzKGVtdU1ldGhvZHMuTkVUV09SS19TUEVFRCkuaW5kZXhPZihzcGVlZCkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5ldHdvcmsgc3BlZWQgcGFyYW0gJHtzcGVlZH0uIFN1cHBvcnRlZCB2YWx1ZXM6ICR7Xy52YWx1ZXMoZW11TWV0aG9kcy5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWyduZXR3b3JrJywgJ3NwZWVkJywgc3BlZWRdKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRXhlY1RlbG5ldE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBleGVjVGltZW91dCBbNjAwMDBdIEEgdGltZW91dCB1c2VkIHRvIHdhaXQgZm9yIGEgc2VydmVyXG4gKiByZXBseSB0byB0aGUgZ2l2ZW4gY29tbWFuZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbm5UaW1lb3V0IFs1MDAwXSBDb25zb2xlIGNvbm5lY3Rpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbml0VGltZW91dCBbNTAwMF0gVGVsbmV0IGNvbnNvbGUgaW5pdGlhbGl6YXRpb24gdGltZW91dFxuICogaW4gbWlsbGlzZWNvbmRzICh0aGUgdGltZSBiZXR3ZWVuIGNvbm5lY3Rpb24gaGFwcGVucyBhbmQgdGhlIGNvbW1hbmQgcHJvbXB0XG4gKiBpcyBhdmFpbGFibGUpXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBwb3J0IFRoZSBlbXVsYXRvciBwb3J0IG51bWJlci4gVGhlIG1ldGhvZCB3aWxsIHRyeSB0byBwYXJzZSBpdFxuICogZnJvbSB0aGUgY3VycmVudCBkZXZpY2UgaWRlbnRpZmllciBpZiB1bnNldFxuICovXG5cbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kIHRocm91Z2ggZW11bGF0b3IgdGVsbmV0IGNvbnNvbGUgaW50ZXJmYWNlIGFuZCByZXR1cm5zIGl0cyBvdXRwdXRcbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz58c3RyaW5nfSBjbWQgLSBUaGUgYWN0dWFsIGNvbW1hbmQgdG8gZXhlY3V0ZS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vcnVuL2VtdWxhdG9yLWNvbnNvbGUgZm9yIG1vcmUgZGV0YWlsc1xuICogb24gYXZhaWxhYmxlIGNvbW1hbmRzXG4gKiBAcGFyYW0ge0V4ZWNUZWxuZXRPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tbWFuZCBvdXRwdXRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY29ubmVjdGluZyB0byB0aGUgVGVsbmV0IGNvbnNvbGVcbiAqIG9yIGlmIHRoZSBnaXZlbiBjb21tYW5kIHJldHVybmVkIG5vbi1PSyByZXNwb25zZVxuICovXG5lbXVNZXRob2RzLmV4ZWNFbXVDb25zb2xlQ29tbWFuZCA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWNUZWxuZXQgKGNtZCwgb3B0cyA9IHt9KSB7XG4gIGxldCBwb3J0ID0gcGFyc2VJbnQob3B0cy5wb3J0LCAxMCk7XG4gIGlmICghcG9ydCkge1xuICAgIGNvbnN0IHBvcnRNYXRjaCA9IC9lbXVsYXRvci0oXFxkKykvaS5leGVjKHRoaXMuY3VyRGV2aWNlSWQpO1xuICAgIGlmICghcG9ydE1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgY29uc29sZSBwb3J0IG51bWJlciBmcm9tIHRoZSBkZXZpY2UgaWRlbnRpZmllciAnJHt0aGlzLmN1ckRldmljZUlkfScuIGAgK1xuICAgICAgICBgSXMgaXQgYW4gZW11bGF0b3I/YCk7XG4gICAgfVxuICAgIHBvcnQgPSBwYXJzZUludChwb3J0TWF0Y2hbMV0sIDEwKTtcbiAgfVxuICBjb25zdCBob3N0ID0gJzEyNy4wLjAuMSc7XG4gIGNvbnN0IHtcbiAgICBleGVjVGltZW91dCA9IDYwMDAwLFxuICAgIGNvbm5UaW1lb3V0ID0gNTAwMCxcbiAgICBpbml0VGltZW91dCA9IDUwMDAsXG4gIH0gPSBvcHRzO1xuICBhd2FpdCB0aGlzLnJlc2V0VGVsbmV0QXV0aFRva2VuKCk7XG5cbiAgY29uc3Qgb2tGbGFnID0gL15PSyQvbTtcbiAgY29uc3Qgbm9rRmxhZyA9IC9eS09cXGIvbTtcbiAgY29uc3QgZW9sID0gJ1xcclxcbic7XG4gIGNvbnN0IGNsaWVudCA9IG5ldC5jb25uZWN0KHtcbiAgICBob3N0LFxuICAgIHBvcnQsXG4gIH0pO1xuXG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY29ublRpbWVvdXRPYmogPSBzZXRUaW1lb3V0KFxuICAgICAgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgQ2Fubm90IGNvbm5lY3QgdG8gdGhlIEVtdWxhdG9yIGNvbnNvbGUgYXQgJHtob3N0fToke3BvcnR9IGAgK1xuICAgICAgICBgYWZ0ZXIgJHtjb25uVGltZW91dH1tc2ApKSwgY29ublRpbWVvdXQpO1xuICAgIGxldCBleGVjVGltZW91dE9iajtcbiAgICBsZXQgaW5pdFRpbWVvdXRPYmo7XG4gICAgbGV0IGlzQ29tbWFuZFNlbnQgPSBmYWxzZTtcbiAgICBsZXQgc2VydmVyUmVzcG9uc2UgPSBbXTtcblxuICAgIGNsaWVudC5vbmNlKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoY29ublRpbWVvdXRPYmopO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ2Fubm90IGNvbm5lY3QgdG8gdGhlIEVtdWxhdG9yIGNvbnNvbGUgYXQgJHtob3N0fToke3BvcnR9LiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKSk7XG4gICAgfSk7XG5cbiAgICBjbGllbnQub25jZSgnY29ubmVjdCcsICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChjb25uVGltZW91dE9iaik7XG4gICAgICBpbml0VGltZW91dE9iaiA9IHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpZCBub3QgZ2V0IHRoZSBpbml0aWFsIHJlc3BvbnNlIGZyb20gdGhlIEVtdWxhdG9yIGNvbnNvbGUgYXQgJHtob3N0fToke3BvcnR9IGAgK1xuICAgICAgICAgIGBhZnRlciAke2luaXRUaW1lb3V0fW1zYCkpLCBpbml0VGltZW91dCk7XG4gICAgfSk7XG5cbiAgICBjbGllbnQub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgIHNlcnZlclJlc3BvbnNlLnB1c2goY2h1bmspO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gQnVmZmVyLmNvbmNhdChzZXJ2ZXJSZXNwb25zZSkudG9TdHJpbmcoJ3V0ZjgnKS50cmltKCk7XG4gICAgICBpZiAob2tGbGFnLnRlc3Qob3V0cHV0KSkge1xuICAgICAgICAvLyBUaGUgaW5pdGlhbCBpbmNvbWluZyBkYXRhIGNodW5rIGNvbmZpcm1zIHRoZSBpbnRlcmZhY2UgaXMgcmVhZHkgZm9yIGlucHV0XG4gICAgICAgIGlmICghaXNDb21tYW5kU2VudCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dChpbml0VGltZW91dE9iaik7XG4gICAgICAgICAgc2VydmVyUmVzcG9uc2UgPSBbXTtcbiAgICAgICAgICBjb25zdCBjbWRTdHIgPSBfLmlzQXJyYXkoY21kKSA/IHV0aWwucXVvdGUoY21kKSA6IGAke2NtZH1gO1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIEVtdWxhdG9yIGNvbnNvbGUgY29tbWFuZDogJHtjbWRTdHJ9YCk7XG4gICAgICAgICAgY2xpZW50LndyaXRlKGNtZFN0cik7XG4gICAgICAgICAgY2xpZW50LndyaXRlKGVvbCk7XG4gICAgICAgICAgaXNDb21tYW5kU2VudCA9IHRydWU7XG4gICAgICAgICAgZXhlY1RpbWVvdXRPYmogPSBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlkIG5vdCBnZXQgYW55IHJlc3BvbnNlIGZyb20gdGhlIEVtdWxhdG9yIGNvbnNvbGUgYXQgJHtob3N0fToke3BvcnR9IGAgK1xuICAgICAgICAgICAgICBgdG8gJyR7Y21kfScgY29tbWFuZCBhZnRlciAke2V4ZWNUaW1lb3V0fW1zYCkpLCBleGVjVGltZW91dCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyVGltZW91dChleGVjVGltZW91dE9iaik7XG4gICAgICAgIGNsaWVudC5lbmQoKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0QXJyID0gb3V0cHV0LnNwbGl0KGVvbCk7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgcmVkdW5kYW50IE9LIGZsYWcgZnJvbSB0aGUgcmVzdWx0aW5nIGNvbW1hbmQgb3V0cHV0XG4gICAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dEFyci5zbGljZSgwLCBvdXRwdXRBcnIubGVuZ3RoIC0gMSkuam9pbignXFxuJykudHJpbSgpKTtcbiAgICAgIH0gZWxzZSBpZiAobm9rRmxhZy50ZXN0KG91dHB1dCkpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGluaXRUaW1lb3V0T2JqKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGV4ZWNUaW1lb3V0T2JqKTtcbiAgICAgICAgY2xpZW50LmVuZCgpO1xuICAgICAgICBjb25zdCBvdXRwdXRBcnIgPSBvdXRwdXQuc3BsaXQoZW9sKTtcbiAgICAgICAgcmV0dXJuIHJlamVjdChfLnRyaW0oXy5sYXN0KG91dHB1dEFycikpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEVtdVZlcnNpb25JbmZvXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHJldmlzaW9uIFRoZSBhY3R1YWwgcmV2aXNpb24gbnVtYmVyLCBmb3IgZXhhbXBsZSAnMzAuMC41J1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSBidWlsZElkIFRoZSBidWlsZCBpZGVudGlmaWVyLCBmb3IgZXhhbXBsZSA2MzA2MDQ3XG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgZW11bGF0b3IgdmVyc2lvbiBmcm9tIHRoZSBmaWxlIHN5c3RlbVxuICpcbiAqIEByZXR1cm5zIHtFbXVWZXJzaW9uSW5mb30gSWYgbm8gdmVyc2lvbiBpbmZvIGNvdWxkIGJlIHBhcnNlZCB0aGVuIGFuIGVtcHR5XG4gKiBvYmplY3QgaXMgcmV0dXJuZWRcbiAqL1xuZW11TWV0aG9kcy5nZXRFbXVWZXJzaW9uSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldEVtdVZlcnNpb25JbmZvICgpIHtcbiAgY29uc3QgcHJvcHNQYXRoID0gcGF0aC5qb2luKHRoaXMuc2RrUm9vdCwgJ2VtdWxhdG9yJywgJ3NvdXJjZS5wcm9wZXJ0aWVzJyk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHByb3BzUGF0aCkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocHJvcHNQYXRoLCAndXRmOCcpO1xuICBjb25zdCByZXZpc2lvbk1hdGNoID0gL15Qa2dcXC5SZXZpc2lvbj0oW1xcZC5dKykkL20uZXhlYyhjb250ZW50KTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGlmIChyZXZpc2lvbk1hdGNoKSB7XG4gICAgcmVzdWx0LnJldmlzaW9uID0gcmV2aXNpb25NYXRjaFsxXTtcbiAgfVxuICBjb25zdCBidWlsZElkTWF0Y2ggPSAvXlBrZ1xcLkJ1aWxkSWQ9KFxcZCspJC9tLmV4ZWMoY29udGVudCk7XG4gIGlmIChidWlsZElkTWF0Y2gpIHtcbiAgICByZXN1bHQuYnVpbGRJZCA9IHBhcnNlSW50KGJ1aWxkSWRNYXRjaFsxXSwgMTApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBlbXVsYXRvciBpbWFnZSBwcm9wZXJ0aWVzIGZyb20gdGhlIGxvY2FsIGZpbGUgc3lzdGVtXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF2ZE5hbWUgRW11bGF0b3IgbmFtZS4gU2hvdWxkIE5PVCBzdGFydCB3aXRoICdAJyBjaGFyYWN0ZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIGV4dHJhY3RpbmcgdGhlIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBjb250ZW50IG9mIGVtdWxhdG9yIGltYWdlIHByb3BlcnRpZXMgZmlsZS5cbiAqIFVzdWFsbHkgdGhpcyBjb25maWd1cmF0aW9uIC5pbmkgZmlsZSBoYXMgdGhlIGZvbGxvd2luZyBjb250ZW50OlxuICogICBhdmQuaW5pLmVuY29kaW5nPVVURi04XG4gKiAgIHBhdGg9L1VzZXJzL3VzZXJuYW1lLy5hbmRyb2lkL2F2ZC9QaXhlbF9YTF9BUElfMzAuYXZkXG4gKiAgIHBhdGgucmVsPWF2ZC9QaXhlbF9YTF9BUElfMzAuYXZkXG4gKiAgIHRhcmdldD1hbmRyb2lkLTMwXG4gKi9cbmVtdU1ldGhvZHMuZ2V0RW11SW1hZ2VQcm9wZXJ0aWVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0RW11SW1hZ2VQcm9wZXJ0aWVzIChhdmROYW1lKSB7XG4gIGNvbnN0IGF2ZHMgPSBhd2FpdCBsaXN0RW11bGF0b3JzKCk7XG4gIGNvbnN0IGF2ZCA9IGF2ZHMuZmluZCgoe25hbWV9KSA9PiBuYW1lID09PSBhdmROYW1lKTtcbiAgaWYgKCFhdmQpIHtcbiAgICBsZXQgbXNnID0gYENhbm5vdCBmaW5kICcke2F2ZE5hbWV9JyBlbXVsYXRvci4gYDtcbiAgICBpZiAoXy5pc0VtcHR5KGF2ZHMpKSB7XG4gICAgICBtc2cgKz0gYE5vIGVtdWxhdG9ycyBoYXZlIGJlZW4gZGV0ZWN0ZWQgb24geW91ciBzeXN0ZW1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgKz0gYEF2YWlsYWJsZSBhdmQgbmFtZXMgYXJlOiAke2F2ZHMubWFwKCh7bmFtZX0pID0+IG5hbWUpfWA7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICB9XG4gIHJldHVybiBpbmkucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUoYXZkLmNvbmZpZywgJ3V0ZjgnKSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGdpdmVuIGVtdWxhdG9yIGV4aXN0cyBpbiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgYXZkcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXZkTmFtZSAtIFRoZSBuYW1lIG9mIGVtdWxhdG9yIHRvIHZlcmlmeSBmb3IgZXhpc3RlbmNlLlxuICogU2hvdWxkIE5PVCBzdGFydCB3aXRoICdAJyBjaGFyYWN0ZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZW11bGF0b3Igd2l0aCBnaXZlbiBuYW1lIGRvZXMgbm90IGV4aXN0LlxuICovXG5lbXVNZXRob2RzLmNoZWNrQXZkRXhpc3QgPSBhc3luYyBmdW5jdGlvbiBjaGVja0F2ZEV4aXN0IChhdmROYW1lKSB7XG4gIGNvbnN0IGF2ZHMgPSBhd2FpdCBsaXN0RW11bGF0b3JzKCk7XG4gIGlmICghYXZkcy5zb21lKCh7bmFtZX0pID0+IG5hbWUgPT09IGF2ZE5hbWUpKSB7XG4gICAgbGV0IG1zZyA9IGBBdmQgJyR7YXZkTmFtZX0nIGlzIG5vdCBhdmFpbGFibGUuIGA7XG4gICAgaWYgKF8uaXNFbXB0eShhdmRzKSkge1xuICAgICAgbXNnICs9IGBObyBlbXVsYXRvcnMgaGF2ZSBiZWVuIGRldGVjdGVkIG9uIHlvdXIgc3lzdGVtYDtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnICs9IGBQbGVhc2Ugc2VsZWN0IHlvdXIgYXZkIG5hbWUgZnJvbSBvbmUgb2YgdGhlc2U6ICcke2F2ZHMubWFwKCh7bmFtZX0pID0+IG5hbWUpfSdgO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVtdU1ldGhvZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9hZGItZW11LWNvbW1hbmRzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
@@ -15,7 +15,7 @@ var _logger = _interopRequireDefault(require("../logger.js"));
|
|
|
15
15
|
|
|
16
16
|
var _helpers = require("../helpers.js");
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var _support = require("@appium/support");
|
|
19
19
|
|
|
20
20
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
21
21
|
|
|
@@ -133,15 +133,15 @@ manifestMethods.compileManifest = async function compileManifest(manifest, manif
|
|
|
133
133
|
|
|
134
134
|
const androidJarPath = _path.default.resolve(platformPath, 'android.jar');
|
|
135
135
|
|
|
136
|
-
if (await
|
|
137
|
-
await
|
|
136
|
+
if (await _support.fs.exists(resultPath)) {
|
|
137
|
+
await _support.fs.rimraf(resultPath);
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
try {
|
|
141
141
|
await this.initAapt2();
|
|
142
142
|
const args = ['link', '-o', resultPath, '--manifest', manifest, '--rename-manifest-package', manifestPackage, '--rename-instrumentation-target-package', targetPackage, '-I', androidJarPath, '-v'];
|
|
143
143
|
|
|
144
|
-
_logger.default.debug(`Compiling the manifest using '${
|
|
144
|
+
_logger.default.debug(`Compiling the manifest using '${_support.util.quote([this.binaries.aapt2, ...args])}'`);
|
|
145
145
|
|
|
146
146
|
await (0, _teen_process.exec)(this.binaries.aapt2, args);
|
|
147
147
|
} catch (e) {
|
|
@@ -150,7 +150,7 @@ manifestMethods.compileManifest = async function compileManifest(manifest, manif
|
|
|
150
150
|
await this.initAapt();
|
|
151
151
|
const args = ['package', '-M', manifest, '--rename-manifest-package', manifestPackage, '--rename-instrumentation-target-package', targetPackage, '-I', androidJarPath, '-F', resultPath, '-f'];
|
|
152
152
|
|
|
153
|
-
_logger.default.debug(`Compiling the manifest using '${
|
|
153
|
+
_logger.default.debug(`Compiling the manifest using '${_support.util.quote([this.binaries.aapt, ...args])}'`);
|
|
154
154
|
|
|
155
155
|
try {
|
|
156
156
|
await (0, _teen_process.exec)(this.binaries.aapt, args);
|
|
@@ -165,14 +165,14 @@ manifestMethods.compileManifest = async function compileManifest(manifest, manif
|
|
|
165
165
|
manifestMethods.insertManifest = async function insertManifest(manifest, srcApk, dstApk) {
|
|
166
166
|
_logger.default.debug(`Inserting manifest '${manifest}', src: '${srcApk}', dst: '${dstApk}'`);
|
|
167
167
|
|
|
168
|
-
await
|
|
168
|
+
await _support.zip.assertValidZip(srcApk);
|
|
169
169
|
await (0, _helpers.unzipFile)(`${manifest}.apk`);
|
|
170
170
|
|
|
171
171
|
const manifestName = _path.default.basename(manifest);
|
|
172
172
|
|
|
173
173
|
try {
|
|
174
174
|
await this.initAapt();
|
|
175
|
-
await
|
|
175
|
+
await _support.fs.copyFile(srcApk, dstApk);
|
|
176
176
|
|
|
177
177
|
_logger.default.debug('Moving manifest');
|
|
178
178
|
|
|
@@ -186,24 +186,24 @@ manifestMethods.insertManifest = async function insertManifest(manifest, srcApk,
|
|
|
186
186
|
} catch (e) {
|
|
187
187
|
_logger.default.debug('Cannot insert manifest using aapt. Defaulting to zip. ' + `Original error: ${e.stderr || e.message}`);
|
|
188
188
|
|
|
189
|
-
const tmpRoot = await
|
|
189
|
+
const tmpRoot = await _support.tempDir.openDir();
|
|
190
190
|
|
|
191
191
|
try {
|
|
192
192
|
_logger.default.debug(`Extracting the source apk at '${srcApk}'`);
|
|
193
193
|
|
|
194
|
-
await
|
|
194
|
+
await _support.zip.extractAllTo(srcApk, tmpRoot);
|
|
195
195
|
|
|
196
196
|
_logger.default.debug('Moving manifest');
|
|
197
197
|
|
|
198
|
-
await
|
|
198
|
+
await _support.fs.mv(manifest, _path.default.resolve(tmpRoot, manifestName));
|
|
199
199
|
|
|
200
200
|
_logger.default.debug(`Collecting the destination apk at '${dstApk}'`);
|
|
201
201
|
|
|
202
|
-
await
|
|
202
|
+
await _support.zip.toArchive(dstApk, {
|
|
203
203
|
cwd: tmpRoot
|
|
204
204
|
});
|
|
205
205
|
} finally {
|
|
206
|
-
await
|
|
206
|
+
await _support.fs.rimraf(tmpRoot);
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
209
|
|
|
@@ -228,4 +228,4 @@ var _default = manifestMethods;
|
|
|
228
228
|
exports.default = _default;require('source-map-support').install();
|
|
229
229
|
|
|
230
230
|
|
|
231
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hbmRyb2lkLW1hbmlmZXN0LmpzIl0sIm5hbWVzIjpbIm1hbmlmZXN0TWV0aG9kcyIsInBhY2thZ2VBbmRMYXVuY2hBY3Rpdml0eUZyb21NYW5pZmVzdCIsImFwcFBhdGgiLCJlbmRzV2l0aCIsIkFQS1NfRVhURU5TSU9OIiwiZXh0cmFjdEJhc2VBcGsiLCJtYW5pZmVzdCIsImFwa1JlYWRlciIsIkFwa1JlYWRlciIsIm9wZW4iLCJyZWFkTWFuaWZlc3QiLCJlIiwibG9nIiwiZGVidWciLCJFcnJvciIsInBrZyIsImFjdGl2aXR5IiwiaW5mbyIsImFwa1BhY2thZ2UiLCJhcGtBY3Rpdml0eSIsInRhcmdldFNka1ZlcnNpb25Gcm9tTWFuaWZlc3QiLCJvcmlnaW5hbEFwcFBhdGgiLCJnZXRUYXJnZXRTZGtWaWFBcGtSZWFkZXIiLCJ1c2VzU2RrIiwiXyIsImlzSW50ZWdlciIsInRhcmdldFNka1ZlcnNpb24iLCJnZXRUYXJnZXRTZGtWaWFBYXB0IiwiaW5pdEFhcHQiLCJhcmdzIiwic3Rkb3V0IiwiYmluYXJpZXMiLCJhYXB0IiwiZXhlYyIsInBhcnNlSW50IiwidmVyc2lvbkdldHRlcnMiLCJ0b29sTmFtZSIsInZlcnNpb25HZXR0ZXIiLCJtZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1hcCIsInBhaXIiLCJ0YXJnZXRTZGtWZXJzaW9uVXNpbmdQS0ciLCJjbWRPdXRwdXQiLCJzaGVsbCIsIlJlZ0V4cCIsImxlbmd0aCIsImNvbXBpbGVNYW5pZmVzdCIsIm1hbmlmZXN0UGFja2FnZSIsInRhcmdldFBhY2thZ2UiLCJwbGF0Zm9ybSIsInBsYXRmb3JtUGF0aCIsInNka1Jvb3QiLCJyZXN1bHRQYXRoIiwiYW5kcm9pZEphclBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImZzIiwiZXhpc3RzIiwicmltcmFmIiwiaW5pdEFhcHQyIiwidXRpbCIsInF1b3RlIiwiYWFwdDIiLCJzdGRlcnIiLCJlMSIsImluc2VydE1hbmlmZXN0Iiwic3JjQXBrIiwiZHN0QXBrIiwiemlwIiwiYXNzZXJ0VmFsaWRaaXAiLCJtYW5pZmVzdE5hbWUiLCJiYXNlbmFtZSIsImNvcHlGaWxlIiwiaWduIiwiY3dkIiwiZGlybmFtZSIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsImV4dHJhY3RBbGxUbyIsIm12IiwidG9BcmNoaXZlIiwiaGFzSW50ZXJuZXRQZXJtaXNzaW9uRnJvbU1hbmlmZXN0IiwidXNlc1Blcm1pc3Npb25zIiwic29tZSIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSUEsZUFBZSxHQUFHLEVBQXRCOztBQWdCQUEsZUFBZSxDQUFDQyxvQ0FBaEIsR0FBdUQsZUFBZUEsb0NBQWYsQ0FBcURDLE9BQXJELEVBQThEO0FBQ25ILE1BQUlBLE9BQU8sQ0FBQ0MsUUFBUixDQUFpQkMsdUJBQWpCLENBQUosRUFBc0M7QUFDcENGLElBQUFBLE9BQU8sR0FBRyxNQUFNLEtBQUtHLGNBQUwsQ0FBb0JILE9BQXBCLENBQWhCO0FBQ0Q7O0FBRUQsTUFBSUksUUFBSjs7QUFDQSxNQUFJO0FBQ0YsVUFBTUMsU0FBUyxHQUFHLE1BQU1DLHlCQUFVQyxJQUFWLENBQWVQLE9BQWYsQ0FBeEI7QUFDQUksSUFBQUEsUUFBUSxHQUFHLE1BQU1DLFNBQVMsQ0FBQ0csWUFBVixFQUFqQjtBQUNELEdBSEQsQ0FHRSxPQUFPQyxDQUFQLEVBQVU7QUFDVkMsb0JBQUlDLEtBQUosQ0FBVUYsQ0FBVjs7QUFDQSxVQUFNLElBQUlHLEtBQUosQ0FBVyxtQ0FBa0NaLE9BQVEsS0FBM0MsR0FDYixvQ0FERyxDQUFOO0FBRUQ7O0FBQ0QsUUFBTTtBQUFDYSxJQUFBQSxHQUFEO0FBQU1DLElBQUFBO0FBQU4sTUFBa0IsNEJBQWNWLFFBQWQsQ0FBeEI7O0FBQ0FNLGtCQUFJSyxJQUFKLENBQVUsa0JBQWlCRixHQUFJLEdBQS9COztBQUNBSCxrQkFBSUssSUFBSixDQUFVLHdCQUF1QkQsUUFBUyxHQUExQzs7QUFDQSxTQUFPO0FBQ0xFLElBQUFBLFVBQVUsRUFBRUgsR0FEUDtBQUVMSSxJQUFBQSxXQUFXLEVBQUVIO0FBRlIsR0FBUDtBQUlELENBckJEOztBQStCQWhCLGVBQWUsQ0FBQ29CLDRCQUFoQixHQUErQyxlQUFlQSw0QkFBZixDQUE2Q2xCLE9BQTdDLEVBQXNEO0FBQ25HVSxrQkFBSUMsS0FBSixDQUFXLHFDQUFvQ1gsT0FBUSxHQUF2RDs7QUFDQSxRQUFNbUIsZUFBZSxHQUFHbkIsT0FBeEI7O0FBQ0EsTUFBSUEsT0FBTyxDQUFDQyxRQUFSLENBQWlCQyx1QkFBakIsQ0FBSixFQUFzQztBQUNwQ0YsSUFBQUEsT0FBTyxHQUFHLE1BQU0sS0FBS0csY0FBTCxDQUFvQkgsT0FBcEIsQ0FBaEI7QUFDRDs7QUFFRCxRQUFNb0Isd0JBQXdCLEdBQUcsWUFBWTtBQUMzQyxVQUFNZixTQUFTLEdBQUcsTUFBTUMseUJBQVVDLElBQVYsQ0FBZVAsT0FBZixDQUF4QjtBQUNBLFVBQU1JLFFBQVEsR0FBRyxNQUFNQyxTQUFTLENBQUNHLFlBQVYsRUFBdkI7O0FBQ0EsUUFBSUosUUFBUSxDQUFDaUIsT0FBVCxJQUFvQkMsZ0JBQUVDLFNBQUYsQ0FBWW5CLFFBQVEsQ0FBQ2lCLE9BQVQsQ0FBaUJHLGdCQUE3QixDQUF4QixFQUF3RTtBQUN0RSxhQUFPcEIsUUFBUSxDQUFDaUIsT0FBVCxDQUFpQkcsZ0JBQXhCO0FBQ0Q7O0FBQ0QsVUFBTSxJQUFJWixLQUFKLENBQVUsb0VBQVYsQ0FBTjtBQUNELEdBUEQ7O0FBUUEsUUFBTWEsbUJBQW1CLEdBQUcsWUFBWTtBQUN0QyxVQUFNLEtBQUtDLFFBQUwsRUFBTjtBQUNBLFVBQU1DLElBQUksR0FBRyxDQUFDLE1BQUQsRUFBUyxTQUFULEVBQW9CM0IsT0FBcEIsQ0FBYjtBQUNBLFVBQU07QUFBQzRCLE1BQUFBO0FBQUQsUUFBVyxNQUFNLHdCQUFLLEtBQUtDLFFBQUwsQ0FBY0MsSUFBbkIsRUFBeUJILElBQXpCLENBQXZCO0FBQ0EsVUFBTUgsZ0JBQWdCLEdBQUcsOEJBQThCTyxJQUE5QixDQUFtQ0gsTUFBbkMsQ0FBekI7O0FBQ0EsUUFBSSxDQUFDSixnQkFBTCxFQUF1QjtBQUNyQmQsc0JBQUlDLEtBQUosQ0FBVWlCLE1BQVY7O0FBQ0EsWUFBTSxJQUFJaEIsS0FBSixDQUFVLGlDQUFWLENBQU47QUFDRDs7QUFDRCxXQUFPb0IsUUFBUSxDQUFDUixnQkFBZ0IsQ0FBQyxDQUFELENBQWpCLEVBQXNCLEVBQXRCLENBQWY7QUFDRCxHQVZEOztBQVdBLFFBQU1TLGNBQWMsR0FBRyxDQUNyQixDQUFDLFdBQUQsRUFBY2Isd0JBQWQsQ0FEcUIsRUFFckIsQ0FBQyxNQUFELEVBQVNLLG1CQUFULENBRnFCLENBQXZCOztBQUlBLE9BQUssTUFBTSxDQUFDUyxRQUFELEVBQVdDLGFBQVgsQ0FBWCxJQUF3Q0YsY0FBeEMsRUFBd0Q7QUFDdEQsUUFBSTtBQUNGLGFBQU8sTUFBTUUsYUFBYSxFQUExQjtBQUNELEtBRkQsQ0FFRSxPQUFPMUIsQ0FBUCxFQUFVO0FBQ1ZDLHNCQUFJSyxJQUFKLENBQVUsdUNBQXNDSSxlQUFnQixXQUFVZSxRQUFTLElBQTFFLEdBQ04sbUJBQWtCekIsQ0FBQyxDQUFDMkIsT0FBUSxFQUQvQjtBQUVEO0FBQ0Y7O0FBQ0QsUUFBTSxJQUFJeEIsS0FBSixDQUFXLG9EQUFtRE8sZUFBZ0Isb0JBQXBFLEdBQ2IsR0FBRWtCLElBQUksQ0FBQ0MsU0FBTCxDQUFlTCxjQUFjLENBQUNNLEdBQWYsQ0FBb0JDLElBQUQsSUFBVUEsSUFBSSxDQUFDLENBQUQsQ0FBakMsQ0FBZixDQUFzRCxVQUQzQyxHQUViLHVDQUZHLENBQU47QUFHRCxDQXpDRDs7QUFtREExQyxlQUFlLENBQUMyQyx3QkFBaEIsR0FBMkMsZUFBZUEsd0JBQWYsQ0FBeUM1QixHQUF6QyxFQUE4QzZCLFNBQVMsR0FBRyxJQUExRCxFQUFnRTtBQUN6RyxNQUFJZCxNQUFNLEdBQUdjLFNBQVMsS0FBSSxNQUFNLEtBQUtDLEtBQUwsQ0FBVyxDQUFDLFNBQUQsRUFBWSxTQUFaLEVBQXVCOUIsR0FBdkIsQ0FBWCxDQUFWLENBQXRCO0FBQ0EsTUFBSVcsZ0JBQWdCLEdBQUcsSUFBSW9CLE1BQUosQ0FBVyx1QkFBWCxFQUFvQ2IsSUFBcEMsQ0FBeUNILE1BQXpDLENBQXZCOztBQUNBLE1BQUlKLGdCQUFnQixJQUFJQSxnQkFBZ0IsQ0FBQ3FCLE1BQWpCLElBQTJCLENBQW5ELEVBQXNEO0FBQ3BEckIsSUFBQUEsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDLENBQUQsQ0FBbkM7QUFDRCxHQUZELE1BRU87QUFFTEEsSUFBQUEsZ0JBQWdCLEdBQUcsQ0FBbkI7QUFDRDs7QUFDRCxTQUFPUSxRQUFRLENBQUNSLGdCQUFELEVBQW1CLEVBQW5CLENBQWY7QUFDRCxDQVZEOztBQXFCQTFCLGVBQWUsQ0FBQ2dELGVBQWhCLEdBQWtDLGVBQWVBLGVBQWYsQ0FBZ0MxQyxRQUFoQyxFQUEwQzJDLGVBQTFDLEVBQTJEQyxhQUEzRCxFQUEwRTtBQUMxRyxRQUFNO0FBQUNDLElBQUFBLFFBQUQ7QUFBV0MsSUFBQUE7QUFBWCxNQUEyQixNQUFNLHdDQUEwQixLQUFLQyxPQUEvQixDQUF2Qzs7QUFDQSxNQUFJLENBQUNGLFFBQUwsRUFBZTtBQUNiLFVBQU0sSUFBSXJDLEtBQUosQ0FBVSxxRkFBVixDQUFOO0FBQ0Q7O0FBQ0QsUUFBTXdDLFVBQVUsR0FBSSxHQUFFaEQsUUFBUyxNQUEvQjs7QUFDQSxRQUFNaUQsY0FBYyxHQUFHQyxjQUFLQyxPQUFMLENBQWFMLFlBQWIsRUFBMkIsYUFBM0IsQ0FBdkI7O0FBQ0EsTUFBSSxNQUFNTSxrQkFBR0MsTUFBSCxDQUFVTCxVQUFWLENBQVYsRUFBaUM7QUFDL0IsVUFBTUksa0JBQUdFLE1BQUgsQ0FBVU4sVUFBVixDQUFOO0FBQ0Q7O0FBQ0QsTUFBSTtBQUNGLFVBQU0sS0FBS08sU0FBTCxFQUFOO0FBRUEsVUFBTWhDLElBQUksR0FBRyxDQUNYLE1BRFcsRUFFWCxJQUZXLEVBRUx5QixVQUZLLEVBR1gsWUFIVyxFQUdHaEQsUUFISCxFQUlYLDJCQUpXLEVBSWtCMkMsZUFKbEIsRUFLWCx5Q0FMVyxFQUtnQ0MsYUFMaEMsRUFNWCxJQU5XLEVBTUxLLGNBTkssRUFPWCxJQVBXLENBQWI7O0FBU0EzQyxvQkFBSUMsS0FBSixDQUFXLGlDQUFnQ2lELG9CQUFLQyxLQUFMLENBQVcsQ0FBQyxLQUFLaEMsUUFBTCxDQUFjaUMsS0FBZixFQUFzQixHQUFHbkMsSUFBekIsQ0FBWCxDQUEyQyxHQUF0Rjs7QUFDQSxVQUFNLHdCQUFLLEtBQUtFLFFBQUwsQ0FBY2lDLEtBQW5CLEVBQTBCbkMsSUFBMUIsQ0FBTjtBQUNELEdBZEQsQ0FjRSxPQUFPbEIsQ0FBUCxFQUFVO0FBQ1ZDLG9CQUFJQyxLQUFKLENBQVUsa0VBQ1AsbUJBQWtCRixDQUFDLENBQUNzRCxNQUFGLElBQVl0RCxDQUFDLENBQUMyQixPQUFRLEVBRDNDOztBQUVBLFVBQU0sS0FBS1YsUUFBTCxFQUFOO0FBQ0EsVUFBTUMsSUFBSSxHQUFHLENBQ1gsU0FEVyxFQUVYLElBRlcsRUFFTHZCLFFBRkssRUFHWCwyQkFIVyxFQUdrQjJDLGVBSGxCLEVBSVgseUNBSlcsRUFJZ0NDLGFBSmhDLEVBS1gsSUFMVyxFQUtMSyxjQUxLLEVBTVgsSUFOVyxFQU1MRCxVQU5LLEVBT1gsSUFQVyxDQUFiOztBQVNBMUMsb0JBQUlDLEtBQUosQ0FBVyxpQ0FBZ0NpRCxvQkFBS0MsS0FBTCxDQUFXLENBQUMsS0FBS2hDLFFBQUwsQ0FBY0MsSUFBZixFQUFxQixHQUFHSCxJQUF4QixDQUFYLENBQTBDLEdBQXJGOztBQUNBLFFBQUk7QUFDRixZQUFNLHdCQUFLLEtBQUtFLFFBQUwsQ0FBY0MsSUFBbkIsRUFBeUJILElBQXpCLENBQU47QUFDRCxLQUZELENBRUUsT0FBT3FDLEVBQVAsRUFBVztBQUNYLFlBQU0sSUFBSXBELEtBQUosQ0FBVyxnREFBK0NvRCxFQUFFLENBQUNELE1BQUgsSUFBYUMsRUFBRSxDQUFDNUIsT0FBUSxFQUFsRixDQUFOO0FBQ0Q7QUFDRjs7QUFDRDFCLGtCQUFJQyxLQUFKLENBQVcsNkJBQTRCeUMsVUFBVyxHQUFsRDtBQUNELENBN0NEOztBQTREQXRELGVBQWUsQ0FBQ21FLGNBQWhCLEdBQWlDLGVBQWVBLGNBQWYsQ0FBK0I3RCxRQUEvQixFQUF5QzhELE1BQXpDLEVBQWlEQyxNQUFqRCxFQUF5RDtBQUN4RnpELGtCQUFJQyxLQUFKLENBQVcsdUJBQXNCUCxRQUFTLFlBQVc4RCxNQUFPLFlBQVdDLE1BQU8sR0FBOUU7O0FBQ0EsUUFBTUMsbUJBQUlDLGNBQUosQ0FBbUJILE1BQW5CLENBQU47QUFDQSxRQUFNLHdCQUFXLEdBQUU5RCxRQUFTLE1BQXRCLENBQU47O0FBQ0EsUUFBTWtFLFlBQVksR0FBR2hCLGNBQUtpQixRQUFMLENBQWNuRSxRQUFkLENBQXJCOztBQUNBLE1BQUk7QUFDRixVQUFNLEtBQUtzQixRQUFMLEVBQU47QUFDQSxVQUFNOEIsa0JBQUdnQixRQUFILENBQVlOLE1BQVosRUFBb0JDLE1BQXBCLENBQU47O0FBQ0F6RCxvQkFBSUMsS0FBSixDQUFVLGlCQUFWOztBQUNBLFFBQUk7QUFDRixZQUFNLHdCQUFLLEtBQUtrQixRQUFMLENBQWNDLElBQW5CLEVBQXlCLENBQzdCLFFBRDZCLEVBQ25CcUMsTUFEbUIsRUFDWEcsWUFEVyxDQUF6QixDQUFOO0FBR0QsS0FKRCxDQUlFLE9BQU9HLEdBQVAsRUFBWSxDQUFFOztBQUNoQixVQUFNLHdCQUFLLEtBQUs1QyxRQUFMLENBQWNDLElBQW5CLEVBQXlCLENBQzdCLEtBRDZCLEVBQ3RCcUMsTUFEc0IsRUFDZEcsWUFEYyxDQUF6QixFQUVIO0FBQUNJLE1BQUFBLEdBQUcsRUFBRXBCLGNBQUtxQixPQUFMLENBQWF2RSxRQUFiO0FBQU4sS0FGRyxDQUFOO0FBR0QsR0FaRCxDQVlFLE9BQU9LLENBQVAsRUFBVTtBQUNWQyxvQkFBSUMsS0FBSixDQUFVLDJEQUNQLG1CQUFrQkYsQ0FBQyxDQUFDc0QsTUFBRixJQUFZdEQsQ0FBQyxDQUFDMkIsT0FBUSxFQUQzQzs7QUFFQSxVQUFNd0MsT0FBTyxHQUFHLE1BQU1DLHVCQUFRQyxPQUFSLEVBQXRCOztBQUNBLFFBQUk7QUFJRnBFLHNCQUFJQyxLQUFKLENBQVcsaUNBQWdDdUQsTUFBTyxHQUFsRDs7QUFDQSxZQUFNRSxtQkFBSVcsWUFBSixDQUFpQmIsTUFBakIsRUFBeUJVLE9BQXpCLENBQU47O0FBQ0FsRSxzQkFBSUMsS0FBSixDQUFVLGlCQUFWOztBQUNBLFlBQU02QyxrQkFBR3dCLEVBQUgsQ0FBTTVFLFFBQU4sRUFBZ0JrRCxjQUFLQyxPQUFMLENBQWFxQixPQUFiLEVBQXNCTixZQUF0QixDQUFoQixDQUFOOztBQUNBNUQsc0JBQUlDLEtBQUosQ0FBVyxzQ0FBcUN3RCxNQUFPLEdBQXZEOztBQUNBLFlBQU1DLG1CQUFJYSxTQUFKLENBQWNkLE1BQWQsRUFBc0I7QUFDMUJPLFFBQUFBLEdBQUcsRUFBRUU7QUFEcUIsT0FBdEIsQ0FBTjtBQUdELEtBWkQsU0FZVTtBQUNSLFlBQU1wQixrQkFBR0UsTUFBSCxDQUFVa0IsT0FBVixDQUFOO0FBQ0Q7QUFDRjs7QUFDRGxFLGtCQUFJQyxLQUFKLENBQVcsNEJBQTJCd0QsTUFBTyxnQkFBN0M7QUFDRCxDQXRDRDs7QUE4Q0FyRSxlQUFlLENBQUNvRixpQ0FBaEIsR0FBb0QsZUFBZUEsaUNBQWYsQ0FBa0RsRixPQUFsRCxFQUEyRDtBQUM3R1Usa0JBQUlDLEtBQUosQ0FBVyxnQkFBZVgsT0FBUSx1REFBbEM7O0FBQ0EsTUFBSUEsT0FBTyxDQUFDQyxRQUFSLENBQWlCQyx1QkFBakIsQ0FBSixFQUFzQztBQUNwQ0YsSUFBQUEsT0FBTyxHQUFHLE1BQU0sS0FBS0csY0FBTCxDQUFvQkgsT0FBcEIsQ0FBaEI7QUFDRDs7QUFFRCxRQUFNSyxTQUFTLEdBQUcsTUFBTUMseUJBQVVDLElBQVYsQ0FBZVAsT0FBZixDQUF4QjtBQUNBLFFBQU1JLFFBQVEsR0FBRyxNQUFNQyxTQUFTLENBQUNHLFlBQVYsRUFBdkI7QUFDQSxTQUFPLENBQUNKLFFBQVEsQ0FBQytFLGVBQVQsSUFBNEIsRUFBN0IsRUFBaUNDLElBQWpDLENBQXNDLENBQUM7QUFBQ0MsSUFBQUE7QUFBRCxHQUFELEtBQVlBLElBQUksS0FBSyw2QkFBM0QsQ0FBUDtBQUNELENBVEQ7O2VBV2V2RixlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICBnZXRBbmRyb2lkUGxhdGZvcm1BbmRQYXRoLCB1bnppcEZpbGUsXG4gIEFQS1NfRVhURU5TSU9OLCBwYXJzZU1hbmlmZXN0IH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgeyBmcywgemlwLCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEFwa1JlYWRlciBmcm9tICdhZGJraXQtYXBrcmVhZGVyJztcblxubGV0IG1hbmlmZXN0TWV0aG9kcyA9IHt9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFQS0luZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcGtQYWNrYWdlIC0gVGhlIG5hbWUgb2YgYXBwbGljYXRpb24gcGFja2FnZSwgZm9yIGV4YW1wbGUgJ2NvbS5hY21lLmFwcCcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBrQWN0aXZpdHkgLSBUaGUgbmFtZSBvZiBtYWluIGFwcGxpY2F0aW9uIGFjdGl2aXR5LlxuICovXG5cbi8qKlxuICogRXh0cmFjdCBwYWNrYWdlIGFuZCBtYWluIGFjdGl2aXR5IG5hbWUgZnJvbSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gYXBwbGljYXRpb24gLmFwayhzKSBwYWNrYWdlXG4gKiBAcmV0dXJuIHtBUEtJbmZvfSBUaGUgcGFyc2VkIGFwcGxpY2F0aW9uIGluZm8uXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIGRhdGEgZnJvbSB0aGUgZ2l2ZW5cbiAqICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBwYWNrYWdlLlxuICovXG5tYW5pZmVzdE1ldGhvZHMucGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gcGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0IChhcHBQYXRoKSB7XG4gIGlmIChhcHBQYXRoLmVuZHNXaXRoKEFQS1NfRVhURU5TSU9OKSkge1xuICAgIGFwcFBhdGggPSBhd2FpdCB0aGlzLmV4dHJhY3RCYXNlQXBrKGFwcFBhdGgpO1xuICB9XG5cbiAgbGV0IG1hbmlmZXN0O1xuICB0cnkge1xuICAgIGNvbnN0IGFwa1JlYWRlciA9IGF3YWl0IEFwa1JlYWRlci5vcGVuKGFwcFBhdGgpO1xuICAgIG1hbmlmZXN0ID0gYXdhaXQgYXBrUmVhZGVyLnJlYWRNYW5pZmVzdCgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGUpO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGV4dHJhY3QgYSBtYW5pZmVzdCBmcm9tICcke2FwcFBhdGh9Jy4gYCArXG4gICAgICBgSXMgaXQgYSB2YWxpZCBBbmRyb2lkIGFwcGxpY2F0aW9uP2ApO1xuICB9XG4gIGNvbnN0IHtwa2csIGFjdGl2aXR5fSA9IHBhcnNlTWFuaWZlc3QobWFuaWZlc3QpO1xuICBsb2cuaW5mbyhgUGFja2FnZSBuYW1lOiAnJHtwa2d9J2ApO1xuICBsb2cuaW5mbyhgTWFpbiBhY3Rpdml0eSBuYW1lOiAnJHthY3Rpdml0eX0nYCk7XG4gIHJldHVybiB7XG4gICAgYXBrUGFja2FnZTogcGtnLFxuICAgIGFwa0FjdGl2aXR5OiBhY3Rpdml0eSxcbiAgfTtcbn07XG5cbi8qKlxuICogRXh0cmFjdCB0YXJnZXQgU0RLIHZlcnNpb24gZnJvbSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gLmFwayhzKSBwYWNrYWdlLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmVyc2lvbiBvZiB0aGUgdGFyZ2V0IFNESy5cbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgZGF0YSBmcm9tIHRoZSBnaXZlblxuICogICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHBhY2thZ2UuXG4gKi9cbm1hbmlmZXN0TWV0aG9kcy50YXJnZXRTZGtWZXJzaW9uRnJvbU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gdGFyZ2V0U2RrVmVyc2lvbkZyb21NYW5pZmVzdCAoYXBwUGF0aCkge1xuICBsb2cuZGVidWcoYEV4dHJhY3RpbmcgdGFyZ2V0IFNESyB2ZXJzaW9uIG9mICcke2FwcFBhdGh9J2ApO1xuICBjb25zdCBvcmlnaW5hbEFwcFBhdGggPSBhcHBQYXRoO1xuICBpZiAoYXBwUGF0aC5lbmRzV2l0aChBUEtTX0VYVEVOU0lPTikpIHtcbiAgICBhcHBQYXRoID0gYXdhaXQgdGhpcy5leHRyYWN0QmFzZUFwayhhcHBQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IGdldFRhcmdldFNka1ZpYUFwa1JlYWRlciA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhcGtSZWFkZXIgPSBhd2FpdCBBcGtSZWFkZXIub3BlbihhcHBQYXRoKTtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGFwa1JlYWRlci5yZWFkTWFuaWZlc3QoKTtcbiAgICBpZiAobWFuaWZlc3QudXNlc1NkayAmJiBfLmlzSW50ZWdlcihtYW5pZmVzdC51c2VzU2RrLnRhcmdldFNka1ZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gbWFuaWZlc3QudXNlc1Nkay50YXJnZXRTZGtWZXJzaW9uO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0YXJnZXRTZGtWZXJzaW9uIGluIHRoZSBtYW5pZmVzdCcpO1xuICB9O1xuICBjb25zdCBnZXRUYXJnZXRTZGtWaWFBYXB0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdEFhcHQoKTtcbiAgICBjb25zdCBhcmdzID0gWydkdW1wJywgJ2JhZGdpbmcnLCBhcHBQYXRoXTtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWModGhpcy5iaW5hcmllcy5hYXB0LCBhcmdzKTtcbiAgICBjb25zdCB0YXJnZXRTZGtWZXJzaW9uID0gL3RhcmdldFNka1ZlcnNpb246JyhbXiddKyknL2cuZXhlYyhzdGRvdXQpO1xuICAgIGlmICghdGFyZ2V0U2RrVmVyc2lvbikge1xuICAgICAgbG9nLmRlYnVnKHN0ZG91dCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSB0aGUgY29tbWFuZCBvdXRwdXQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KHRhcmdldFNka1ZlcnNpb25bMV0sIDEwKTtcbiAgfTtcbiAgY29uc3QgdmVyc2lvbkdldHRlcnMgPSBbXG4gICAgWydBcGtSZWFkZXInLCBnZXRUYXJnZXRTZGtWaWFBcGtSZWFkZXJdLFxuICAgIFsnYWFwdCcsIGdldFRhcmdldFNka1ZpYUFhcHRdLFxuICBdO1xuICBmb3IgKGNvbnN0IFt0b29sTmFtZSwgdmVyc2lvbkdldHRlcl0gb2YgdmVyc2lvbkdldHRlcnMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHZlcnNpb25HZXR0ZXIoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuaW5mbyhgQ2Fubm90IGV4dHJhY3QgdGFyZ2V0U2RrVmVyc2lvbiBvZiAnJHtvcmlnaW5hbEFwcFBhdGh9JyB1c2luZyAke3Rvb2xOYW1lfS4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGV4dHJhY3QgdGhlIHRhcmdldCBTREsgdmVyc2lvbiBudW1iZXIgb2YgJyR7b3JpZ2luYWxBcHBQYXRofScgdXNpbmcgZWl0aGVyIG9mIGAgK1xuICAgIGAke0pTT04uc3RyaW5naWZ5KHZlcnNpb25HZXR0ZXJzLm1hcCgocGFpcikgPT4gcGFpclswXSkpfSB0b29scy4gYCArXG4gICAgYENoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHNgKTtcbn07XG5cbi8qKlxuICogRXh0cmFjdCB0YXJnZXQgU0RLIHZlcnNpb24gZnJvbSBwYWNrYWdlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwa2cgLSBUaGUgY2xhc3MgbmFtZSBvZiB0aGUgcGFja2FnZSBpbnN0YWxsZWQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICogQHBhcmFtIHs/c3RyaW5nfSBjbWRPdXRwdXQgLSBPcHRpb25hbCBwYXJhbWV0ZXIgY29udGFpbmluZyB0aGUgb3V0cHV0IG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kdW1wc3lzIHBhY2thZ2VfIGNvbW1hbmQuIEl0IG1heSBzcGVlZCB1cCB0aGUgbWV0aG9kIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZlcnNpb24gb2YgdGhlIHRhcmdldCBTREsuXG4gKi9cbm1hbmlmZXN0TWV0aG9kcy50YXJnZXRTZGtWZXJzaW9uVXNpbmdQS0cgPSBhc3luYyBmdW5jdGlvbiB0YXJnZXRTZGtWZXJzaW9uVXNpbmdQS0cgKHBrZywgY21kT3V0cHV0ID0gbnVsbCkge1xuICBsZXQgc3Rkb3V0ID0gY21kT3V0cHV0IHx8IGF3YWl0IHRoaXMuc2hlbGwoWydkdW1wc3lzJywgJ3BhY2thZ2UnLCBwa2ddKTtcbiAgbGV0IHRhcmdldFNka1ZlcnNpb24gPSBuZXcgUmVnRXhwKC90YXJnZXRTZGs9KFteXFxzXFxzXSspL2cpLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKHRhcmdldFNka1ZlcnNpb24gJiYgdGFyZ2V0U2RrVmVyc2lvbi5sZW5ndGggPj0gMikge1xuICAgIHRhcmdldFNka1ZlcnNpb24gPSB0YXJnZXRTZGtWZXJzaW9uWzFdO1xuICB9IGVsc2Uge1xuICAgIC8vIHRhcmdldFNkayBub3QgZm91bmQgaW4gdGhlIGR1bXAsIGFzc2lnbmluZyAwIHRvIHRhcmdldFNka1ZlcnNpb25cbiAgICB0YXJnZXRTZGtWZXJzaW9uID0gMDtcbiAgfVxuICByZXR1cm4gcGFyc2VJbnQodGFyZ2V0U2RrVmVyc2lvbiwgMTApO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHBhY2thZ2UgbWFuaWZlc3QgKHVzdWFsbHkgQW5kcm9pZE1hbmlmZXN0LnhtbCkuXG4gKiBgJHttYW5pZmVzdH0uYXBrYCBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kXG4gKiBjb250YWluaW5nIHRoZSBjb21waWxlZCBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFuaWZlc3QgLSBGdWxsIHBhdGggdG8gdGhlIGluaXRpYWwgbWFuaWZlc3QgdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYW5pZmVzdFBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgbWFuaWZlc3QgcGFja2FnZVxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldFBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gcGFja2FnZVxuICovXG5tYW5pZmVzdE1ldGhvZHMuY29tcGlsZU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gY29tcGlsZU1hbmlmZXN0IChtYW5pZmVzdCwgbWFuaWZlc3RQYWNrYWdlLCB0YXJnZXRQYWNrYWdlKSB7XG4gIGNvbnN0IHtwbGF0Zm9ybSwgcGxhdGZvcm1QYXRofSA9IGF3YWl0IGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgodGhpcy5zZGtSb290KTtcbiAgaWYgKCFwbGF0Zm9ybSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBpbGUgdGhlIG1hbmlmZXN0LiBUaGUgcmVxdWlyZWQgcGxhdGZvcm0gZG9lcyBub3QgZXhpc3QgKEFQSSBsZXZlbCA+PSAxNyknKTtcbiAgfVxuICBjb25zdCByZXN1bHRQYXRoID0gYCR7bWFuaWZlc3R9LmFwa2A7XG4gIGNvbnN0IGFuZHJvaWRKYXJQYXRoID0gcGF0aC5yZXNvbHZlKHBsYXRmb3JtUGF0aCwgJ2FuZHJvaWQuamFyJyk7XG4gIGlmIChhd2FpdCBmcy5leGlzdHMocmVzdWx0UGF0aCkpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYocmVzdWx0UGF0aCk7XG4gIH1cbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmluaXRBYXB0MigpO1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9jb21tYW5kLWxpbmUvYWFwdDJcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgJ2xpbmsnLFxuICAgICAgJy1vJywgcmVzdWx0UGF0aCxcbiAgICAgICctLW1hbmlmZXN0JywgbWFuaWZlc3QsXG4gICAgICAnLS1yZW5hbWUtbWFuaWZlc3QtcGFja2FnZScsIG1hbmlmZXN0UGFja2FnZSxcbiAgICAgICctLXJlbmFtZS1pbnN0cnVtZW50YXRpb24tdGFyZ2V0LXBhY2thZ2UnLCB0YXJnZXRQYWNrYWdlLFxuICAgICAgJy1JJywgYW5kcm9pZEphclBhdGgsXG4gICAgICAnLXYnLFxuICAgIF07XG4gICAgbG9nLmRlYnVnKGBDb21waWxpbmcgdGhlIG1hbmlmZXN0IHVzaW5nICcke3V0aWwucXVvdGUoW3RoaXMuYmluYXJpZXMuYWFwdDIsIC4uLmFyZ3NdKX0nYCk7XG4gICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQyLCBhcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZygnQ2Fubm90IGNvbXBpbGUgdGhlIG1hbmlmZXN0IHVzaW5nIGFhcHQyLiBEZWZhdWx0aW5nIHRvIGFhcHQuICcgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgICBhd2FpdCB0aGlzLmluaXRBYXB0KCk7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICdwYWNrYWdlJyxcbiAgICAgICctTScsIG1hbmlmZXN0LFxuICAgICAgJy0tcmVuYW1lLW1hbmlmZXN0LXBhY2thZ2UnLCBtYW5pZmVzdFBhY2thZ2UsXG4gICAgICAnLS1yZW5hbWUtaW5zdHJ1bWVudGF0aW9uLXRhcmdldC1wYWNrYWdlJywgdGFyZ2V0UGFja2FnZSxcbiAgICAgICctSScsIGFuZHJvaWRKYXJQYXRoLFxuICAgICAgJy1GJywgcmVzdWx0UGF0aCxcbiAgICAgICctZicsXG4gICAgXTtcbiAgICBsb2cuZGVidWcoYENvbXBpbGluZyB0aGUgbWFuaWZlc3QgdXNpbmcgJyR7dXRpbC5xdW90ZShbdGhpcy5iaW5hcmllcy5hYXB0LCAuLi5hcmdzXSl9J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKHRoaXMuYmluYXJpZXMuYWFwdCwgYXJncyk7XG4gICAgfSBjYXRjaCAoZTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbXBpbGUgdGhlIG1hbmlmZXN0LiBPcmlnaW5hbCBlcnJvcjogJHtlMS5zdGRlcnIgfHwgZTEubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgbG9nLmRlYnVnKGBDb21waWxlZCB0aGUgbWFuaWZlc3QgYXQgJyR7cmVzdWx0UGF0aH0nYCk7XG59O1xuXG4vKipcbiAqIFJlcGxhY2UvaW5zZXJ0IHRoZSBzcGVjaWFsbHkgcHJlY29tcGlsZWQgbWFuaWZlc3QgZmlsZSBpbnRvIHRoZVxuICogcGFydGljdWxhciBwYWNrYWdlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYW5pZmVzdCAtIEZ1bGwgcGF0aCB0byB0aGUgcHJlY29tcGlsZWQgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgYGNvbXBpbGVNYW5pZmVzdGAgbWV0aG9kIGNhbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgLmFwayBleHRlbnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmNBcGsgLSBGdWxsIHBhdGggdG8gdGhlIGV4aXN0aW5nIHZhbGlkIGFwcGxpY2F0aW9uIHBhY2thZ2UsIHdoZXJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBtYW5pZmVzdCBoYXMgdG8gYmUgaW5zZXRyZWQgdG8uIFRoaXMgcGFja2FnZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgTk9UIGJlIG1vZGlmaWVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGRzdEFwayAtIEZ1bGwgcGF0aCB0byB0aGUgcmVzdWx0aW5nIHBhY2thZ2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGUgd2lsbCBiZSBvdmVycmlkZGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxuICovXG5tYW5pZmVzdE1ldGhvZHMuaW5zZXJ0TWFuaWZlc3QgPSBhc3luYyBmdW5jdGlvbiBpbnNlcnRNYW5pZmVzdCAobWFuaWZlc3QsIHNyY0FwaywgZHN0QXBrKSB7XG4gIGxvZy5kZWJ1ZyhgSW5zZXJ0aW5nIG1hbmlmZXN0ICcke21hbmlmZXN0fScsIHNyYzogJyR7c3JjQXBrfScsIGRzdDogJyR7ZHN0QXBrfSdgKTtcbiAgYXdhaXQgemlwLmFzc2VydFZhbGlkWmlwKHNyY0Fwayk7XG4gIGF3YWl0IHVuemlwRmlsZShgJHttYW5pZmVzdH0uYXBrYCk7XG4gIGNvbnN0IG1hbmlmZXN0TmFtZSA9IHBhdGguYmFzZW5hbWUobWFuaWZlc3QpO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW5pdEFhcHQoKTtcbiAgICBhd2FpdCBmcy5jb3B5RmlsZShzcmNBcGssIGRzdEFwayk7XG4gICAgbG9nLmRlYnVnKCdNb3ZpbmcgbWFuaWZlc3QnKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQsIFtcbiAgICAgICAgJ3JlbW92ZScsIGRzdEFwaywgbWFuaWZlc3ROYW1lXG4gICAgICBdKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQsIFtcbiAgICAgICdhZGQnLCBkc3RBcGssIG1hbmlmZXN0TmFtZVxuICAgIF0sIHtjd2Q6IHBhdGguZGlybmFtZShtYW5pZmVzdCl9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZygnQ2Fubm90IGluc2VydCBtYW5pZmVzdCB1c2luZyBhYXB0LiBEZWZhdWx0aW5nIHRvIHppcC4gJyArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICB0cnkge1xuICAgICAgLy8gVW5mb3J0dW5hdGVseSBOb2RlSlMgZG9lcyBub3QgcHJvdmlkZSBhbnkgcmVsaWFibGUgbWV0aG9kc1xuICAgICAgLy8gdG8gcmVwbGFjZSBmaWxlcyBpbnNpZGUgemlwIGFyY2hpdmVzIHdpdGhvdXQgbG9hZGluZyB0aGVcbiAgICAgIC8vIHdob2xlIGFyY2hpdmUgY29udGVudCBpbnRvIFJBTVxuICAgICAgbG9nLmRlYnVnKGBFeHRyYWN0aW5nIHRoZSBzb3VyY2UgYXBrIGF0ICcke3NyY0Fwa30nYCk7XG4gICAgICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHNyY0FwaywgdG1wUm9vdCk7XG4gICAgICBsb2cuZGVidWcoJ01vdmluZyBtYW5pZmVzdCcpO1xuICAgICAgYXdhaXQgZnMubXYobWFuaWZlc3QsIHBhdGgucmVzb2x2ZSh0bXBSb290LCBtYW5pZmVzdE5hbWUpKTtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29sbGVjdGluZyB0aGUgZGVzdGluYXRpb24gYXBrIGF0ICcke2RzdEFwa30nYCk7XG4gICAgICBhd2FpdCB6aXAudG9BcmNoaXZlKGRzdEFwaywge1xuICAgICAgICBjd2Q6IHRtcFJvb3QsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfVxuICBsb2cuZGVidWcoYE1hbmlmZXN0IGluc2VydGlvbiBpbnRvICcke2RzdEFwa30nIGlzIGNvbXBsZXRlZGApO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHBhY2thZ2UgbWFuaWZlc3QgY29udGFpbnMgSW50ZXJuZXQgcGVybWlzc2lvbnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggLSBUaGUgZnVsbCBwYXRoIHRvIC5hcGsocykgcGFja2FnZS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIG1hbmlmZXN0IHJlcXVpcmVzIEludGVybmV0IGFjY2VzcyBwZXJtaXNzaW9uLlxuICovXG5tYW5pZmVzdE1ldGhvZHMuaGFzSW50ZXJuZXRQZXJtaXNzaW9uRnJvbU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gaGFzSW50ZXJuZXRQZXJtaXNzaW9uRnJvbU1hbmlmZXN0IChhcHBQYXRoKSB7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgaWYgJyR7YXBwUGF0aH0nIHJlcXVpcmVzIGludGVybmV0IGFjY2VzcyBwZXJtaXNzaW9uIGluIHRoZSBtYW5pZmVzdGApO1xuICBpZiAoYXBwUGF0aC5lbmRzV2l0aChBUEtTX0VYVEVOU0lPTikpIHtcbiAgICBhcHBQYXRoID0gYXdhaXQgdGhpcy5leHRyYWN0QmFzZUFwayhhcHBQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IGFwa1JlYWRlciA9IGF3YWl0IEFwa1JlYWRlci5vcGVuKGFwcFBhdGgpO1xuICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGFwa1JlYWRlci5yZWFkTWFuaWZlc3QoKTtcbiAgcmV0dXJuIChtYW5pZmVzdC51c2VzUGVybWlzc2lvbnMgfHwgW10pLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gJ2FuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVCcpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbWFuaWZlc3RNZXRob2RzO1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvYW5kcm9pZC1tYW5pZmVzdC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
231
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hbmRyb2lkLW1hbmlmZXN0LmpzIl0sIm5hbWVzIjpbIm1hbmlmZXN0TWV0aG9kcyIsInBhY2thZ2VBbmRMYXVuY2hBY3Rpdml0eUZyb21NYW5pZmVzdCIsImFwcFBhdGgiLCJlbmRzV2l0aCIsIkFQS1NfRVhURU5TSU9OIiwiZXh0cmFjdEJhc2VBcGsiLCJtYW5pZmVzdCIsImFwa1JlYWRlciIsIkFwa1JlYWRlciIsIm9wZW4iLCJyZWFkTWFuaWZlc3QiLCJlIiwibG9nIiwiZGVidWciLCJFcnJvciIsInBrZyIsImFjdGl2aXR5IiwiaW5mbyIsImFwa1BhY2thZ2UiLCJhcGtBY3Rpdml0eSIsInRhcmdldFNka1ZlcnNpb25Gcm9tTWFuaWZlc3QiLCJvcmlnaW5hbEFwcFBhdGgiLCJnZXRUYXJnZXRTZGtWaWFBcGtSZWFkZXIiLCJ1c2VzU2RrIiwiXyIsImlzSW50ZWdlciIsInRhcmdldFNka1ZlcnNpb24iLCJnZXRUYXJnZXRTZGtWaWFBYXB0IiwiaW5pdEFhcHQiLCJhcmdzIiwic3Rkb3V0IiwiYmluYXJpZXMiLCJhYXB0IiwiZXhlYyIsInBhcnNlSW50IiwidmVyc2lvbkdldHRlcnMiLCJ0b29sTmFtZSIsInZlcnNpb25HZXR0ZXIiLCJtZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1hcCIsInBhaXIiLCJ0YXJnZXRTZGtWZXJzaW9uVXNpbmdQS0ciLCJjbWRPdXRwdXQiLCJzaGVsbCIsIlJlZ0V4cCIsImxlbmd0aCIsImNvbXBpbGVNYW5pZmVzdCIsIm1hbmlmZXN0UGFja2FnZSIsInRhcmdldFBhY2thZ2UiLCJwbGF0Zm9ybSIsInBsYXRmb3JtUGF0aCIsInNka1Jvb3QiLCJyZXN1bHRQYXRoIiwiYW5kcm9pZEphclBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImZzIiwiZXhpc3RzIiwicmltcmFmIiwiaW5pdEFhcHQyIiwidXRpbCIsInF1b3RlIiwiYWFwdDIiLCJzdGRlcnIiLCJlMSIsImluc2VydE1hbmlmZXN0Iiwic3JjQXBrIiwiZHN0QXBrIiwiemlwIiwiYXNzZXJ0VmFsaWRaaXAiLCJtYW5pZmVzdE5hbWUiLCJiYXNlbmFtZSIsImNvcHlGaWxlIiwiaWduIiwiY3dkIiwiZGlybmFtZSIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsImV4dHJhY3RBbGxUbyIsIm12IiwidG9BcmNoaXZlIiwiaGFzSW50ZXJuZXRQZXJtaXNzaW9uRnJvbU1hbmlmZXN0IiwidXNlc1Blcm1pc3Npb25zIiwic29tZSIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsSUFBSUEsZUFBZSxHQUFHLEVBQXRCOztBQWdCQUEsZUFBZSxDQUFDQyxvQ0FBaEIsR0FBdUQsZUFBZUEsb0NBQWYsQ0FBcURDLE9BQXJELEVBQThEO0FBQ25ILE1BQUlBLE9BQU8sQ0FBQ0MsUUFBUixDQUFpQkMsdUJBQWpCLENBQUosRUFBc0M7QUFDcENGLElBQUFBLE9BQU8sR0FBRyxNQUFNLEtBQUtHLGNBQUwsQ0FBb0JILE9BQXBCLENBQWhCO0FBQ0Q7O0FBRUQsTUFBSUksUUFBSjs7QUFDQSxNQUFJO0FBQ0YsVUFBTUMsU0FBUyxHQUFHLE1BQU1DLHlCQUFVQyxJQUFWLENBQWVQLE9BQWYsQ0FBeEI7QUFDQUksSUFBQUEsUUFBUSxHQUFHLE1BQU1DLFNBQVMsQ0FBQ0csWUFBVixFQUFqQjtBQUNELEdBSEQsQ0FHRSxPQUFPQyxDQUFQLEVBQVU7QUFDVkMsb0JBQUlDLEtBQUosQ0FBVUYsQ0FBVjs7QUFDQSxVQUFNLElBQUlHLEtBQUosQ0FBVyxtQ0FBa0NaLE9BQVEsS0FBM0MsR0FDYixvQ0FERyxDQUFOO0FBRUQ7O0FBQ0QsUUFBTTtBQUFDYSxJQUFBQSxHQUFEO0FBQU1DLElBQUFBO0FBQU4sTUFBa0IsNEJBQWNWLFFBQWQsQ0FBeEI7O0FBQ0FNLGtCQUFJSyxJQUFKLENBQVUsa0JBQWlCRixHQUFJLEdBQS9COztBQUNBSCxrQkFBSUssSUFBSixDQUFVLHdCQUF1QkQs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RCxDQUFQO0FBQ0QsQ0FURDs7ZUFXZXZGLGUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCB7XG4gIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgsIHVuemlwRmlsZSxcbiAgQVBLU19FWFRFTlNJT04sIHBhcnNlTWFuaWZlc3QgfSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7IGZzLCB6aXAsIHRlbXBEaXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEFwa1JlYWRlciBmcm9tICdhZGJraXQtYXBrcmVhZGVyJztcblxubGV0IG1hbmlmZXN0TWV0aG9kcyA9IHt9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFQS0luZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcGtQYWNrYWdlIC0gVGhlIG5hbWUgb2YgYXBwbGljYXRpb24gcGFja2FnZSwgZm9yIGV4YW1wbGUgJ2NvbS5hY21lLmFwcCcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBrQWN0aXZpdHkgLSBUaGUgbmFtZSBvZiBtYWluIGFwcGxpY2F0aW9uIGFjdGl2aXR5LlxuICovXG5cbi8qKlxuICogRXh0cmFjdCBwYWNrYWdlIGFuZCBtYWluIGFjdGl2aXR5IG5hbWUgZnJvbSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gYXBwbGljYXRpb24gLmFwayhzKSBwYWNrYWdlXG4gKiBAcmV0dXJuIHtBUEtJbmZvfSBUaGUgcGFyc2VkIGFwcGxpY2F0aW9uIGluZm8uXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIGRhdGEgZnJvbSB0aGUgZ2l2ZW5cbiAqICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBwYWNrYWdlLlxuICovXG5tYW5pZmVzdE1ldGhvZHMucGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gcGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0IChhcHBQYXRoKSB7XG4gIGlmIChhcHBQYXRoLmVuZHNXaXRoKEFQS1NfRVhURU5TSU9OKSkge1xuICAgIGFwcFBhdGggPSBhd2FpdCB0aGlzLmV4dHJhY3RCYXNlQXBrKGFwcFBhdGgpO1xuICB9XG5cbiAgbGV0IG1hbmlmZXN0O1xuICB0cnkge1xuICAgIGNvbnN0IGFwa1JlYWRlciA9IGF3YWl0IEFwa1JlYWRlci5vcGVuKGFwcFBhdGgpO1xuICAgIG1hbmlmZXN0ID0gYXdhaXQgYXBrUmVhZGVyLnJlYWRNYW5pZmVzdCgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGUpO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGV4dHJhY3QgYSBtYW5pZmVzdCBmcm9tICcke2FwcFBhdGh9Jy4gYCArXG4gICAgICBgSXMgaXQgYSB2YWxpZCBBbmRyb2lkIGFwcGxpY2F0aW9uP2ApO1xuICB9XG4gIGNvbnN0IHtwa2csIGFjdGl2aXR5fSA9IHBhcnNlTWFuaWZlc3QobWFuaWZlc3QpO1xuICBsb2cuaW5mbyhgUGFja2FnZSBuYW1lOiAnJHtwa2d9J2ApO1xuICBsb2cuaW5mbyhgTWFpbiBhY3Rpdml0eSBuYW1lOiAnJHthY3Rpdml0eX0nYCk7XG4gIHJldHVybiB7XG4gICAgYXBrUGFja2FnZTogcGtnLFxuICAgIGFwa0FjdGl2aXR5OiBhY3Rpdml0eSxcbiAgfTtcbn07XG5cbi8qKlxuICogRXh0cmFjdCB0YXJnZXQgU0RLIHZlcnNpb24gZnJvbSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gLmFwayhzKSBwYWNrYWdlLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmVyc2lvbiBvZiB0aGUgdGFyZ2V0IFNESy5cbiAqIEB0aHJvd3Mge2Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgZGF0YSBmcm9tIHRoZSBnaXZlblxuICogICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIHBhY2thZ2UuXG4gKi9cbm1hbmlmZXN0TWV0aG9kcy50YXJnZXRTZGtWZXJzaW9uRnJvbU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gdGFyZ2V0U2RrVmVyc2lvbkZyb21NYW5pZmVzdCAoYXBwUGF0aCkge1xuICBsb2cuZGVidWcoYEV4dHJhY3RpbmcgdGFyZ2V0IFNESyB2ZXJzaW9uIG9mICcke2FwcFBhdGh9J2ApO1xuICBjb25zdCBvcmlnaW5hbEFwcFBhdGggPSBhcHBQYXRoO1xuICBpZiAoYXBwUGF0aC5lbmRzV2l0aChBUEtTX0VYVEVOU0lPTikpIHtcbiAgICBhcHBQYXRoID0gYXdhaXQgdGhpcy5leHRyYWN0QmFzZUFwayhhcHBQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IGdldFRhcmdldFNka1ZpYUFwa1JlYWRlciA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhcGtSZWFkZXIgPSBhd2FpdCBBcGtSZWFkZXIub3BlbihhcHBQYXRoKTtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGFwa1JlYWRlci5yZWFkTWFuaWZlc3QoKTtcbiAgICBpZiAobWFuaWZlc3QudXNlc1NkayAmJiBfLmlzSW50ZWdlcihtYW5pZmVzdC51c2VzU2RrLnRhcmdldFNka1ZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gbWFuaWZlc3QudXNlc1Nkay50YXJnZXRTZGtWZXJzaW9uO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0YXJnZXRTZGtWZXJzaW9uIGluIHRoZSBtYW5pZmVzdCcpO1xuICB9O1xuICBjb25zdCBnZXRUYXJnZXRTZGtWaWFBYXB0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdEFhcHQoKTtcbiAgICBjb25zdCBhcmdzID0gWydkdW1wJywgJ2JhZGdpbmcnLCBhcHBQYXRoXTtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWModGhpcy5iaW5hcmllcy5hYXB0LCBhcmdzKTtcbiAgICBjb25zdCB0YXJnZXRTZGtWZXJzaW9uID0gL3RhcmdldFNka1ZlcnNpb246JyhbXiddKyknL2cuZXhlYyhzdGRvdXQpO1xuICAgIGlmICghdGFyZ2V0U2RrVmVyc2lvbikge1xuICAgICAgbG9nLmRlYnVnKHN0ZG91dCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSB0aGUgY29tbWFuZCBvdXRwdXQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KHRhcmdldFNka1ZlcnNpb25bMV0sIDEwKTtcbiAgfTtcbiAgY29uc3QgdmVyc2lvbkdldHRlcnMgPSBbXG4gICAgWydBcGtSZWFkZXInLCBnZXRUYXJnZXRTZGtWaWFBcGtSZWFkZXJdLFxuICAgIFsnYWFwdCcsIGdldFRhcmdldFNka1ZpYUFhcHRdLFxuICBdO1xuICBmb3IgKGNvbnN0IFt0b29sTmFtZSwgdmVyc2lvbkdldHRlcl0gb2YgdmVyc2lvbkdldHRlcnMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHZlcnNpb25HZXR0ZXIoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuaW5mbyhgQ2Fubm90IGV4dHJhY3QgdGFyZ2V0U2RrVmVyc2lvbiBvZiAnJHtvcmlnaW5hbEFwcFBhdGh9JyB1c2luZyAke3Rvb2xOYW1lfS4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGV4dHJhY3QgdGhlIHRhcmdldCBTREsgdmVyc2lvbiBudW1iZXIgb2YgJyR7b3JpZ2luYWxBcHBQYXRofScgdXNpbmcgZWl0aGVyIG9mIGAgK1xuICAgIGAke0pTT04uc3RyaW5naWZ5KHZlcnNpb25HZXR0ZXJzLm1hcCgocGFpcikgPT4gcGFpclswXSkpfSB0b29scy4gYCArXG4gICAgYENoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHNgKTtcbn07XG5cbi8qKlxuICogRXh0cmFjdCB0YXJnZXQgU0RLIHZlcnNpb24gZnJvbSBwYWNrYWdlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwa2cgLSBUaGUgY2xhc3MgbmFtZSBvZiB0aGUgcGFja2FnZSBpbnN0YWxsZWQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICogQHBhcmFtIHs/c3RyaW5nfSBjbWRPdXRwdXQgLSBPcHRpb25hbCBwYXJhbWV0ZXIgY29udGFpbmluZyB0aGUgb3V0cHV0IG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kdW1wc3lzIHBhY2thZ2VfIGNvbW1hbmQuIEl0IG1heSBzcGVlZCB1cCB0aGUgbWV0aG9kIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZlcnNpb24gb2YgdGhlIHRhcmdldCBTREsuXG4gKi9cbm1hbmlmZXN0TWV0aG9kcy50YXJnZXRTZGtWZXJzaW9uVXNpbmdQS0cgPSBhc3luYyBmdW5jdGlvbiB0YXJnZXRTZGtWZXJzaW9uVXNpbmdQS0cgKHBrZywgY21kT3V0cHV0ID0gbnVsbCkge1xuICBsZXQgc3Rkb3V0ID0gY21kT3V0cHV0IHx8IGF3YWl0IHRoaXMuc2hlbGwoWydkdW1wc3lzJywgJ3BhY2thZ2UnLCBwa2ddKTtcbiAgbGV0IHRhcmdldFNka1ZlcnNpb24gPSBuZXcgUmVnRXhwKC90YXJnZXRTZGs9KFteXFxzXFxzXSspL2cpLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKHRhcmdldFNka1ZlcnNpb24gJiYgdGFyZ2V0U2RrVmVyc2lvbi5sZW5ndGggPj0gMikge1xuICAgIHRhcmdldFNka1ZlcnNpb24gPSB0YXJnZXRTZGtWZXJzaW9uWzFdO1xuICB9IGVsc2Uge1xuICAgIC8vIHRhcmdldFNkayBub3QgZm91bmQgaW4gdGhlIGR1bXAsIGFzc2lnbmluZyAwIHRvIHRhcmdldFNka1ZlcnNpb25cbiAgICB0YXJnZXRTZGtWZXJzaW9uID0gMDtcbiAgfVxuICByZXR1cm4gcGFyc2VJbnQodGFyZ2V0U2RrVmVyc2lvbiwgMTApO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHBhY2thZ2UgbWFuaWZlc3QgKHVzdWFsbHkgQW5kcm9pZE1hbmlmZXN0LnhtbCkuXG4gKiBgJHttYW5pZmVzdH0uYXBrYCBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhcyB0aGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kXG4gKiBjb250YWluaW5nIHRoZSBjb21waWxlZCBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFuaWZlc3QgLSBGdWxsIHBhdGggdG8gdGhlIGluaXRpYWwgbWFuaWZlc3QgdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYW5pZmVzdFBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgbWFuaWZlc3QgcGFja2FnZVxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldFBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gcGFja2FnZVxuICovXG5tYW5pZmVzdE1ldGhvZHMuY29tcGlsZU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gY29tcGlsZU1hbmlmZXN0IChtYW5pZmVzdCwgbWFuaWZlc3RQYWNrYWdlLCB0YXJnZXRQYWNrYWdlKSB7XG4gIGNvbnN0IHtwbGF0Zm9ybSwgcGxhdGZvcm1QYXRofSA9IGF3YWl0IGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgodGhpcy5zZGtSb290KTtcbiAgaWYgKCFwbGF0Zm9ybSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBpbGUgdGhlIG1hbmlmZXN0LiBUaGUgcmVxdWlyZWQgcGxhdGZvcm0gZG9lcyBub3QgZXhpc3QgKEFQSSBsZXZlbCA+PSAxNyknKTtcbiAgfVxuICBjb25zdCByZXN1bHRQYXRoID0gYCR7bWFuaWZlc3R9LmFwa2A7XG4gIGNvbnN0IGFuZHJvaWRKYXJQYXRoID0gcGF0aC5yZXNvbHZlKHBsYXRmb3JtUGF0aCwgJ2FuZHJvaWQuamFyJyk7XG4gIGlmIChhd2FpdCBmcy5leGlzdHMocmVzdWx0UGF0aCkpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYocmVzdWx0UGF0aCk7XG4gIH1cbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmluaXRBYXB0MigpO1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9jb21tYW5kLWxpbmUvYWFwdDJcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgJ2xpbmsnLFxuICAgICAgJy1vJywgcmVzdWx0UGF0aCxcbiAgICAgICctLW1hbmlmZXN0JywgbWFuaWZlc3QsXG4gICAgICAnLS1yZW5hbWUtbWFuaWZlc3QtcGFja2FnZScsIG1hbmlmZXN0UGFja2FnZSxcbiAgICAgICctLXJlbmFtZS1pbnN0cnVtZW50YXRpb24tdGFyZ2V0LXBhY2thZ2UnLCB0YXJnZXRQYWNrYWdlLFxuICAgICAgJy1JJywgYW5kcm9pZEphclBhdGgsXG4gICAgICAnLXYnLFxuICAgIF07XG4gICAgbG9nLmRlYnVnKGBDb21waWxpbmcgdGhlIG1hbmlmZXN0IHVzaW5nICcke3V0aWwucXVvdGUoW3RoaXMuYmluYXJpZXMuYWFwdDIsIC4uLmFyZ3NdKX0nYCk7XG4gICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQyLCBhcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZygnQ2Fubm90IGNvbXBpbGUgdGhlIG1hbmlmZXN0IHVzaW5nIGFhcHQyLiBEZWZhdWx0aW5nIHRvIGFhcHQuICcgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgICBhd2FpdCB0aGlzLmluaXRBYXB0KCk7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICdwYWNrYWdlJyxcbiAgICAgICctTScsIG1hbmlmZXN0LFxuICAgICAgJy0tcmVuYW1lLW1hbmlmZXN0LXBhY2thZ2UnLCBtYW5pZmVzdFBhY2thZ2UsXG4gICAgICAnLS1yZW5hbWUtaW5zdHJ1bWVudGF0aW9uLXRhcmdldC1wYWNrYWdlJywgdGFyZ2V0UGFja2FnZSxcbiAgICAgICctSScsIGFuZHJvaWRKYXJQYXRoLFxuICAgICAgJy1GJywgcmVzdWx0UGF0aCxcbiAgICAgICctZicsXG4gICAgXTtcbiAgICBsb2cuZGVidWcoYENvbXBpbGluZyB0aGUgbWFuaWZlc3QgdXNpbmcgJyR7dXRpbC5xdW90ZShbdGhpcy5iaW5hcmllcy5hYXB0LCAuLi5hcmdzXSl9J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKHRoaXMuYmluYXJpZXMuYWFwdCwgYXJncyk7XG4gICAgfSBjYXRjaCAoZTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbXBpbGUgdGhlIG1hbmlmZXN0LiBPcmlnaW5hbCBlcnJvcjogJHtlMS5zdGRlcnIgfHwgZTEubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgbG9nLmRlYnVnKGBDb21waWxlZCB0aGUgbWFuaWZlc3QgYXQgJyR7cmVzdWx0UGF0aH0nYCk7XG59O1xuXG4vKipcbiAqIFJlcGxhY2UvaW5zZXJ0IHRoZSBzcGVjaWFsbHkgcHJlY29tcGlsZWQgbWFuaWZlc3QgZmlsZSBpbnRvIHRoZVxuICogcGFydGljdWxhciBwYWNrYWdlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYW5pZmVzdCAtIEZ1bGwgcGF0aCB0byB0aGUgcHJlY29tcGlsZWQgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgYGNvbXBpbGVNYW5pZmVzdGAgbWV0aG9kIGNhbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgLmFwayBleHRlbnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmNBcGsgLSBGdWxsIHBhdGggdG8gdGhlIGV4aXN0aW5nIHZhbGlkIGFwcGxpY2F0aW9uIHBhY2thZ2UsIHdoZXJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBtYW5pZmVzdCBoYXMgdG8gYmUgaW5zZXRyZWQgdG8uIFRoaXMgcGFja2FnZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgTk9UIGJlIG1vZGlmaWVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGRzdEFwayAtIEZ1bGwgcGF0aCB0byB0aGUgcmVzdWx0aW5nIHBhY2thZ2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGUgd2lsbCBiZSBvdmVycmlkZGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxuICovXG5tYW5pZmVzdE1ldGhvZHMuaW5zZXJ0TWFuaWZlc3QgPSBhc3luYyBmdW5jdGlvbiBpbnNlcnRNYW5pZmVzdCAobWFuaWZlc3QsIHNyY0FwaywgZHN0QXBrKSB7XG4gIGxvZy5kZWJ1ZyhgSW5zZXJ0aW5nIG1hbmlmZXN0ICcke21hbmlmZXN0fScsIHNyYzogJyR7c3JjQXBrfScsIGRzdDogJyR7ZHN0QXBrfSdgKTtcbiAgYXdhaXQgemlwLmFzc2VydFZhbGlkWmlwKHNyY0Fwayk7XG4gIGF3YWl0IHVuemlwRmlsZShgJHttYW5pZmVzdH0uYXBrYCk7XG4gIGNvbnN0IG1hbmlmZXN0TmFtZSA9IHBhdGguYmFzZW5hbWUobWFuaWZlc3QpO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW5pdEFhcHQoKTtcbiAgICBhd2FpdCBmcy5jb3B5RmlsZShzcmNBcGssIGRzdEFwayk7XG4gICAgbG9nLmRlYnVnKCdNb3ZpbmcgbWFuaWZlc3QnKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQsIFtcbiAgICAgICAgJ3JlbW92ZScsIGRzdEFwaywgbWFuaWZlc3ROYW1lXG4gICAgICBdKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLmFhcHQsIFtcbiAgICAgICdhZGQnLCBkc3RBcGssIG1hbmlmZXN0TmFtZVxuICAgIF0sIHtjd2Q6IHBhdGguZGlybmFtZShtYW5pZmVzdCl9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZygnQ2Fubm90IGluc2VydCBtYW5pZmVzdCB1c2luZyBhYXB0LiBEZWZhdWx0aW5nIHRvIHppcC4gJyArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICB0cnkge1xuICAgICAgLy8gVW5mb3J0dW5hdGVseSBOb2RlSlMgZG9lcyBub3QgcHJvdmlkZSBhbnkgcmVsaWFibGUgbWV0aG9kc1xuICAgICAgLy8gdG8gcmVwbGFjZSBmaWxlcyBpbnNpZGUgemlwIGFyY2hpdmVzIHdpdGhvdXQgbG9hZGluZyB0aGVcbiAgICAgIC8vIHdob2xlIGFyY2hpdmUgY29udGVudCBpbnRvIFJBTVxuICAgICAgbG9nLmRlYnVnKGBFeHRyYWN0aW5nIHRoZSBzb3VyY2UgYXBrIGF0ICcke3NyY0Fwa30nYCk7XG4gICAgICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHNyY0FwaywgdG1wUm9vdCk7XG4gICAgICBsb2cuZGVidWcoJ01vdmluZyBtYW5pZmVzdCcpO1xuICAgICAgYXdhaXQgZnMubXYobWFuaWZlc3QsIHBhdGgucmVzb2x2ZSh0bXBSb290LCBtYW5pZmVzdE5hbWUpKTtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29sbGVjdGluZyB0aGUgZGVzdGluYXRpb24gYXBrIGF0ICcke2RzdEFwa30nYCk7XG4gICAgICBhd2FpdCB6aXAudG9BcmNoaXZlKGRzdEFwaywge1xuICAgICAgICBjd2Q6IHRtcFJvb3QsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfVxuICBsb2cuZGVidWcoYE1hbmlmZXN0IGluc2VydGlvbiBpbnRvICcke2RzdEFwa30nIGlzIGNvbXBsZXRlZGApO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHBhY2thZ2UgbWFuaWZlc3QgY29udGFpbnMgSW50ZXJuZXQgcGVybWlzc2lvbnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggLSBUaGUgZnVsbCBwYXRoIHRvIC5hcGsocykgcGFja2FnZS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIG1hbmlmZXN0IHJlcXVpcmVzIEludGVybmV0IGFjY2VzcyBwZXJtaXNzaW9uLlxuICovXG5tYW5pZmVzdE1ldGhvZHMuaGFzSW50ZXJuZXRQZXJtaXNzaW9uRnJvbU1hbmlmZXN0ID0gYXN5bmMgZnVuY3Rpb24gaGFzSW50ZXJuZXRQZXJtaXNzaW9uRnJvbU1hbmlmZXN0IChhcHBQYXRoKSB7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgaWYgJyR7YXBwUGF0aH0nIHJlcXVpcmVzIGludGVybmV0IGFjY2VzcyBwZXJtaXNzaW9uIGluIHRoZSBtYW5pZmVzdGApO1xuICBpZiAoYXBwUGF0aC5lbmRzV2l0aChBUEtTX0VYVEVOU0lPTikpIHtcbiAgICBhcHBQYXRoID0gYXdhaXQgdGhpcy5leHRyYWN0QmFzZUFwayhhcHBQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IGFwa1JlYWRlciA9IGF3YWl0IEFwa1JlYWRlci5vcGVuKGFwcFBhdGgpO1xuICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGFwa1JlYWRlci5yZWFkTWFuaWZlc3QoKTtcbiAgcmV0dXJuIChtYW5pZmVzdC51c2VzUGVybWlzc2lvbnMgfHwgW10pLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gJ2FuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVCcpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbWFuaWZlc3RNZXRob2RzO1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvYW5kcm9pZC1tYW5pZmVzdC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|