appium-android-driver 4.52.0 → 4.52.1

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