appium-adb 8.16.2 → 8.17.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.
|
@@ -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;
|
|
@@ -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]);
|
|
@@ -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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QUFQO0FBQ0QsQ0FiRDs7QUFzQkF4RSxVQUFVLENBQUNzTCxhQUFYLEdBQTJCLGVBQWVBLGFBQWYsQ0FBOEJwSCxPQUE5QixFQUF1QztBQUNoRSxRQUFNOEcsSUFBSSxHQUFHLE1BQU1qSSxhQUFhLEVBQWhDOztBQUNBLE1BQUksQ0FBQ2lJLElBQUksQ0FBQ08sSUFBTCxDQUFVLENBQUM7QUFBQ2hILElBQUFBO0FBQUQsR0FBRCxLQUFZQSxJQUFJLEtBQUtMLE9BQS9CLENBQUwsRUFBOEM7QUFDNUMsUUFBSWdILEdBQUcsR0FBSSxRQUFPaEgsT0FBUSxzQkFBMUI7O0FBQ0EsUUFBSVEsZ0JBQUV5RyxPQUFGLENBQVVILElBQVYsQ0FBSixFQUFxQjtBQUNuQkUsTUFBQUEsR0FBRyxJQUFLLGdEQUFSO0FBQ0QsS0FGRCxNQUVPO0FBQ0xBLE1BQUFBLEdBQUcsSUFBSyxtREFBa0RGLElBQUksQ0FBQ2hILEdBQUwsQ0FBUyxDQUFDO0FBQUNPLFFBQUFBO0FBQUQsT0FBRCxLQUFZQSxJQUFyQixDQUEyQixHQUFyRjtBQUNEOztBQUNELFVBQU0sSUFBSWEsS0FBSixDQUFVOEYsR0FBVixDQUFOO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFQO0FBQ0QsQ0FaRDs7ZUFjZWxMLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBnZXRBbmRyb2lkUHJlZnNSb290LCBkaXJFeGlzdHMgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgeyB1dGlsLCBmcyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGluaSBmcm9tICdpbmknO1xuXG5jb25zdCBQSE9ORV9OVU1CRVJfUEFUVEVSTiA9IC9eWytdP1soXT9bMC05XSpbKV0/Wy1cXHMuXT9bMC05XSpbLVxccy5dP1swLTldezIsfSQvaW07XG5cbmNvbnN0IGVtdU1ldGhvZHMgPSB7fTtcbmVtdU1ldGhvZHMuUE9XRVJfQUNfU1RBVEVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIFBPV0VSX0FDX09OOiAnb24nLFxuICBQT1dFUl9BQ19PRkY6ICdvZmYnXG59KTtcbmVtdU1ldGhvZHMuR1NNX0NBTExfQUNUSU9OUyA9IE9iamVjdC5mcmVlemUoe1xuICBHU01fQ0FMTDogJ2NhbGwnLFxuICBHU01fQUNDRVBUOiAnYWNjZXB0JyxcbiAgR1NNX0NBTkNFTDogJ2NhbmNlbCcsXG4gIEdTTV9IT0xEOiAnaG9sZCdcbn0pO1xuZW11TWV0aG9kcy5HU01fVk9JQ0VfU1RBVEVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEdTTV9WT0lDRV9VTlJFR0lTVEVSRUQ6ICd1bnJlZ2lzdGVyZWQnLFxuICBHU01fVk9JQ0VfSE9NRTogJ2hvbWUnLFxuICBHU01fVk9JQ0VfUk9BTUlORzogJ3JvYW1pbmcnLFxuICBHU01fVk9JQ0VfU0VBUkNISU5HOiAnc2VhcmNoaW5nJyxcbiAgR1NNX1ZPSUNFX0RFTklFRDogJ2RlbmllZCcsXG4gIEdTTV9WT0lDRV9PRkY6ICdvZmYnLFxuICBHU01fVk9JQ0VfT046ICdvbidcbn0pO1xuZW11TWV0aG9kcy5HU01fU0lHTkFMX1NUUkVOR1RIUyA9IFswLCAxLCAyLCAzLCA0XTtcblxuZW11TWV0aG9kcy5ORVRXT1JLX1NQRUVEID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEdTTTogJ2dzbScsIC8vIEdTTS9DU0QgKHVwOiAxNC40LCBkb3duOiAxNC40KS5cbiAgU0NTRDogJ3Njc2QnLCAvLyBIU0NTRCAodXA6IDE0LjQsIGRvd246IDU3LjYpLlxuICBHUFJTOiAnZ3BycycsIC8vIEdQUlMgKHVwOiAyOC44LCBkb3duOiA1Ny42KS5cbiAgRURHRTogJ2VkZ2UnLCAvLyBFREdFL0VHUFJTICh1cDogNDczLjYsIGRvd246IDQ3My42KS5cbiAgVU1UUzogJ3VtdHMnLCAvLyBVTVRTLzNHICh1cDogMzg0LjAsIGRvd246IDM4NC4wKS5cbiAgSFNEUEE6ICdoc2RwYScsIC8vIEhTRFBBICh1cDogNTc2MC4wLCBkb3duOiAxMyw5ODAuMCkuXG4gIExURTogJ2x0ZScsIC8vIExURSAodXA6IDU4LDAwMCwgZG93bjogMTczLDAwMCkuXG4gIEVWRE86ICdldmRvJywgLy8gRVZETyAodXA6IDc1LDAwMCwgZG93bjogMjgwLDAwMCkuXG4gIEZVTEw6ICdmdWxsJyAvLyBObyBsaW1pdCwgdGhlIGRlZmF1bHQgKHVwOiAwLjAsIGRvd246IDAuMCkuXG59KTtcblxuZW11TWV0aG9kcy5TRU5TT1JTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEFDQ0VMRVJBVElPTjogJ2FjY2VsZXJhdGlvbicsXG4gIEdZUk9TQ09QRTogJ2d5cm9zY29wZScsXG4gIE1BR05FVElDX0ZJRUxEOiAnbWFnbmV0aWMtZmllbGQnLFxuICBPUklFTlRBVElPTjogJ29yaWVudGF0aW9uJyxcbiAgVEVNUEVSQVRVUkU6ICd0ZW1wZXJhdHVyZScsXG4gIFBST1hJTUlUWTogJ3Byb3hpbWl0eScsXG4gIExJR0hUOiAnbGlnaHQnLFxuICBQUkVTU1VSRTogJ3ByZXNzdXJlJyxcbiAgSFVNSURJVFk6ICdodW1pZGl0eScsXG4gIE1BR05FVElDX0ZJRUxEX1VOQ0FMSUJSQVRFRDogJ21hZ25ldGljLWZpZWxkLXVuY2FsaWJyYXRlZCcsXG4gIEdZUk9TQ09QRV9VTkNBTElCUkFURUQ6ICdneXJvc2NvcGUtdW5jYWxpYnJhdGVkJyxcbiAgSElOR0VfQU5HTEUwOiAnaGluZ2UtYW5nbGUwJyxcbiAgSElOR0VfQU5HTEUxOiAnaGluZ2UtYW5nbGUxJyxcbiAgSElOR0VfQU5HTEUyOiAnaGluZ2UtYW5nbGUyJyxcbiAgSEVBUlRfUkFURTogJ2hlYXJ0LXJhdGUnLFxuICBSR0JDX0xJR0hUOiAncmdiYy1saWdodCcsXG59KTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFbXVJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSBFbXVsYXRvciBuYW1lLCBmb3IgZXhhbXBsZSBgUGl4ZWxfWExfQVBJXzMwYFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbmZpZyBGdWxsIHBhdGggdG8gdGhlIGVtdWxhdG9yIGNvbmZpZyAuaW5pIGZpbGUsXG4gKiBmb3IgZXhhbXBsZSBgL1VzZXJzL3VzZXIvLmFuZHJvaWQvYXZkL1BpeGVsX1hMX0FQSV8zMC5pbmlgXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIEFuZHJvaWQgZW11bGF0b3JzXG4gKlxuICogQHJldHVybnMge0FycmF5PEVtdUluZm8+fVxuICovXG5hc3luYyBmdW5jdGlvbiBsaXN0RW11bGF0b3JzICgpIHtcbiAgbGV0IGF2ZHNSb290ID0gcHJvY2Vzcy5lbnYuQU5EUk9JRF9BVkRfSE9NRTtcbiAgaWYgKGF3YWl0IGRpckV4aXN0cyhhdmRzUm9vdCkpIHtcbiAgICByZXR1cm4gYXdhaXQgZ2V0QXZkQ29uZmlnUGF0aHMoYXZkc1Jvb3QpO1xuICB9XG5cbiAgaWYgKGF2ZHNSb290KSB7XG4gICAgbG9nLndhcm4oYFRoZSB2YWx1ZSBvZiB0aGUgQU5EUk9JRF9BVkRfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnJHthdmRzUm9vdH0nIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnlgKTtcbiAgfVxuXG4gIGNvbnN0IHByZWZzUm9vdCA9IGF3YWl0IGdldEFuZHJvaWRQcmVmc1Jvb3QoKTtcbiAgaWYgKCFwcmVmc1Jvb3QpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhdmRzUm9vdCA9IHBhdGgucmVzb2x2ZShwcmVmc1Jvb3QsICdhdmQnKTtcbiAgaWYgKCFhd2FpdCBkaXJFeGlzdHMoYXZkc1Jvb3QpKSB7XG4gICAgbG9nLmRlYnVnKGBWaXJ0dWFsIGRldmljZXMgY29uZmlnIHJvb3QgJyR7YXZkc1Jvb3R9JyBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGdldEF2ZENvbmZpZ1BhdGhzKGF2ZHNSb290KTtcbn1cblxuLyoqXG4gKiBHZXQgY29uZmlndXJhdGlvbiBwYXRocyBvZiBhbGwgdmlydHVhbCBkZXZpY2VzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF2ZHNSb290IFBhdGggdG8gdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBBVkQgLmluaSBmaWxlc1xuICogQHJldHVybnMge0FycmF5PEVtdUluZm8+fVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBdmRDb25maWdQYXRocyAoYXZkc1Jvb3QpIHtcbiAgY29uc3QgY29uZmlncyA9IGF3YWl0IGZzLmdsb2IoJyouaW5pJywge1xuICAgIGN3ZDogYXZkc1Jvb3QsXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gIH0pO1xuICByZXR1cm4gY29uZmlncy5tYXAoKGNvbmZQYXRoKSA9PiB7XG4gICAgY29uc3QgYXZkTmFtZSA9IHBhdGguYmFzZW5hbWUoY29uZlBhdGgpLnNwbGl0KCcuJykuc2xpY2UoMCwgLTEpLmpvaW4oJy4nKTtcbiAgICByZXR1cm4ge25hbWU6IGF2ZE5hbWUsIGNvbmZpZzogY29uZlBhdGh9O1xuICB9KS5maWx0ZXIoKHtuYW1lfSkgPT4gXy50cmltKG5hbWUpKTtcbn1cblxuLyoqXG4gKiBDaGVjayB0aGUgZW11bGF0b3Igc3RhdGUuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBFbXVsYXRvciBpcyB2aXNpYmxlIHRvIGFkYi5cbiAqL1xuZW11TWV0aG9kcy5pc0VtdWxhdG9yQ29ubmVjdGVkID0gYXN5bmMgZnVuY3Rpb24gaXNFbXVsYXRvckNvbm5lY3RlZCAoKSB7XG4gIGxldCBlbXVsYXRvcnMgPSBhd2FpdCB0aGlzLmdldENvbm5lY3RlZEVtdWxhdG9ycygpO1xuICByZXR1cm4gISFfLmZpbmQoZW11bGF0b3JzLCAoeCkgPT4geCAmJiB4LnVkaWQgPT09IHRoaXMuY3VyRGV2aWNlSWQpO1xufTtcblxuLyoqXG4gKiBWZXJpZnkgdGhlIGVtdWxhdG9yIGlzIGNvbm5lY3RlZC5cbiAqXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgRW11bGF0b3IgaXMgbm90IHZpc2libGUgdG8gYWRiLlxuICovXG5lbXVNZXRob2RzLnZlcmlmeUVtdWxhdG9yQ29ubmVjdGVkID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5RW11bGF0b3JDb25uZWN0ZWQgKCkge1xuICBpZiAoIShhd2FpdCB0aGlzLmlzRW11bGF0b3JDb25uZWN0ZWQoKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBlbXVsYXRvciBcIiR7dGhpcy5jdXJEZXZpY2VJZH1cIiB3YXMgdW5leHBlY3RlZGx5IGRpc2Nvbm5lY3RlZGApO1xuICB9XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgZmluZ2VycHJpbnQgdG91Y2ggZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmluZ2VycHJpbnRJZCAtIFRoZSBJRCBvZiB0aGUgZmluZ2VycHJpbnQuXG4gKi9cbmVtdU1ldGhvZHMuZmluZ2VycHJpbnQgPSBhc3luYyBmdW5jdGlvbiBmaW5nZXJwcmludCAoZmluZ2VycHJpbnRJZCkge1xuICBpZiAoIWZpbmdlcnByaW50SWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbmdlcnByaW50IGlkIHBhcmFtZXRlciBtdXN0IGJlIGRlZmluZWQnKTtcbiAgfVxuICAvLyB0aGUgbWV0aG9kIHVzZWQgb25seSB3b3JrcyBmb3IgQVBJIGxldmVsIDIzIGFuZCBhYm92ZVxuICBsZXQgbGV2ZWwgPSBhd2FpdCB0aGlzLmdldEFwaUxldmVsKCk7XG4gIGlmIChsZXZlbCA8IDIzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXZpY2UgQVBJIExldmVsIG11c3QgYmUgPj0gMjMuIEN1cnJlbnQgQXBpIGxldmVsICcke2xldmVsfSdgKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydmaW5nZXInLCAndG91Y2gnLCBmaW5nZXJwcmludElkXSk7XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgZGlzcGxheSBvcmllbnRhdGlvbiBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICogVGhlIG9yaWVudGF0aW9uIGlzIGNoYW5nZWQgKFBJLzIgaXMgYWRkZWQpIGV2ZXJ5IHRpbWVcbiAqIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqL1xuZW11TWV0aG9kcy5yb3RhdGUgPSBhc3luYyBmdW5jdGlvbiByb3RhdGUgKCkge1xuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydyb3RhdGUnXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgcG93ZXIgc3RhdGUgY2hhbmdlIG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlIFsnb24nXSAtIEVpdGhlciAnb24nIG9yICdvZmYnLlxuICovXG5lbXVNZXRob2RzLnBvd2VyQUMgPSBhc3luYyBmdW5jdGlvbiBwb3dlckFDIChzdGF0ZSA9ICdvbicpIHtcbiAgaWYgKF8udmFsdWVzKGVtdU1ldGhvZHMuUE9XRVJfQUNfU1RBVEVTKS5pbmRleE9mKHN0YXRlKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBXcm9uZyBwb3dlciBBQyBzdGF0ZSBzZW50ICcke3N0YXRlfScuIGBcbiAgICAgICsgYFN1cHBvcnRlZCB2YWx1ZXM6ICR7Xy52YWx1ZXMoZW11TWV0aG9kcy5QT1dFUl9BQ19TVEFURVMpfV1gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydwb3dlcicsICdhYycsIHN0YXRlXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgc2Vuc29ycyB2YWx1ZXMgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2Vuc29yIC0gU2Vuc29yIHR5cGUgZGVjbGFyZWQgaW4gU0VOU09SUyBpdGVtcy5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWUgIC0gTnVtYmVyIHRvIHNldCBhcyB0aGUgc2Vuc29yIHZhbHVlLlxuICogQHRocm93cyB7RXJyb3J9IC0gSWYgc2Vuc29yIHR5cGUgb3Igc2Vuc29yIHZhbHVlIGlzIG5vdCBkZWZpbmVkXG4gKi9cbmVtdU1ldGhvZHMuc2Vuc29yU2V0ID0gYXN5bmMgZnVuY3Rpb24gc2Vuc29yU2V0IChzZW5zb3IsIHZhbHVlKSB7XG4gIGlmICghXy5pbmNsdWRlcyhlbXVNZXRob2RzLlNFTlNPUlMsIHNlbnNvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbnN1cHBvcnRlZCBzZW5zb3Igc2VudCAnJHtzZW5zb3J9Jy4gYFxuICAgICAgKyBgU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhlbXVNZXRob2RzLlNFTlNPUlMpfV1gKTtcbiAgfVxuICBpZiAoXy5pc05pbCh2YWx1ZSkgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTWlzc2luZy9pbnZhbGlkIHNlbnNvciB2YWx1ZSBhcmd1bWVudC4gYFxuICAgICAgKyBgWW91IG5lZWQgdG8gcHJvdmlkZSBhIHZhbGlkIHZhbHVlIHRvIHNldCB0byB0aGUgc2Vuc29yIGluIGBcbiAgICAgICsgYGZvcm1hdCA8dmFsdWUtYT5bOjx2YWx1ZS1iPls6PHZhbHVlLWM+Wy4uLl1dXS5gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydzZW5zb3InLCAnc2V0Jywgc2Vuc29yLCB2YWx1ZV0pO1xufTtcblxuLyoqXG4gKiBFbXVsYXRlIHBvd2VyIGNhcGFjaXR5IGNoYW5nZSBvbiB0aGUgY29ubmVjdGVkIGVtdWxhdG9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcGVyY2VudCBbMTAwXSAtIFBlcmNlbnRhZ2UgdmFsdWUgaW4gcmFuZ2UgWzAsIDEwMF0uXG4gKi9cbmVtdU1ldGhvZHMucG93ZXJDYXBhY2l0eSA9IGFzeW5jIGZ1bmN0aW9uIHBvd2VyQ2FwYWNpdHkgKHBlcmNlbnQgPSAxMDApIHtcbiAgcGVyY2VudCA9IHBhcnNlSW50KHBlcmNlbnQsIDEwKTtcbiAgaWYgKGlzTmFOKHBlcmNlbnQpIHx8IHBlcmNlbnQgPCAwIHx8IHBlcmNlbnQgPiAxMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwZXJjZW50YWdlIHZhbHVlIHNob3VsZCBiZSB2YWxpZCBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTAwYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGJFeGVjRW11KFsncG93ZXInLCAnY2FwYWNpdHknLCBwZXJjZW50XSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgcG93ZXIgb2ZmIGV2ZW50IG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKi9cbmVtdU1ldGhvZHMucG93ZXJPRkYgPSBhc3luYyBmdW5jdGlvbiBwb3dlck9GRiAoKSB7XG4gIGF3YWl0IHRoaXMucG93ZXJBQyhlbXVNZXRob2RzLlBPV0VSX0FDX1NUQVRFUy5QT1dFUl9BQ19PRkYpO1xuICBhd2FpdCB0aGlzLnBvd2VyQ2FwYWNpdHkoMCk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgc2VuZCBTTVMgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHBob25lTnVtYmVyIC0gVGhlIHBob25lIG51bWJlciBvZiBtZXNzYWdlIHNlbmRlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFsnJ10gLSBUaGUgbWVzc2FnZSBjb250ZW50LlxuICogQHRocm93cyB7ZXJyb3J9IElmIHBob25lIG51bWJlciBoYXMgaW52YWxpZCBmb3JtYXQuXG4gKi9cbmVtdU1ldGhvZHMuc2VuZFNNUyA9IGFzeW5jIGZ1bmN0aW9uIHNlbmRTTVMgKHBob25lTnVtYmVyLCBtZXNzYWdlID0gJycpIHtcbiAgbWVzc2FnZSA9IG1lc3NhZ2UudHJpbSgpO1xuICBpZiAobWVzc2FnZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbmRpbmcgYW4gU01TIHJlcXVpcmVzIGEgbWVzc2FnZScpO1xuICB9XG4gIHBob25lTnVtYmVyID0gYCR7cGhvbmVOdW1iZXJ9YC5yZXBsYWNlKC9cXHMqLywgJycpO1xuICBpZiAoIVBIT05FX05VTUJFUl9QQVRURVJOLnRlc3QocGhvbmVOdW1iZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNlbmRTTVMgcGhvbmVOdW1iZXIgcGFyYW0gJHtwaG9uZU51bWJlcn1gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydzbXMnLCAnc2VuZCcsIHBob25lTnVtYmVyLCBtZXNzYWdlXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgR1NNIGNhbGwgZXZlbnQgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHBob25lTnVtYmVyIC0gVGhlIHBob25lIG51bWJlciBvZiB0aGUgY2FsbGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvbiBbJyddIC0gT25lIG9mIGF2YWlsYWJsZSBHU00gY2FsbCBhY3Rpb25zLlxuICogQHRocm93cyB7ZXJyb3J9IElmIHBob25lIG51bWJlciBoYXMgaW52YWxpZCBmb3JtYXQuXG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgX2FjdGlvbl8gdmFsdWUgaXMgaW52YWxpZC5cbiAqL1xuZW11TWV0aG9kcy5nc21DYWxsID0gYXN5bmMgZnVuY3Rpb24gZ3NtQ2FsbCAocGhvbmVOdW1iZXIsIGFjdGlvbiA9ICcnKSB7XG4gIGlmIChfLnZhbHVlcyhlbXVNZXRob2RzLkdTTV9DQUxMX0FDVElPTlMpLmluZGV4T2YoYWN0aW9uKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZ3NtIGFjdGlvbiBwYXJhbSAke2FjdGlvbn0uIFN1cHBvcnRlZCB2YWx1ZXM6ICR7Xy52YWx1ZXMoZW11TWV0aG9kcy5HU01fQ0FMTF9BQ1RJT05TKX1gKTtcbiAgfVxuICBwaG9uZU51bWJlciA9IGAke3Bob25lTnVtYmVyfWAucmVwbGFjZSgvXFxzKi8sICcnKTtcbiAgaWYgKCFQSE9ORV9OVU1CRVJfUEFUVEVSTi50ZXN0KHBob25lTnVtYmVyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnc21DYWxsIHBob25lTnVtYmVyIHBhcmFtICR7cGhvbmVOdW1iZXJ9YCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGJFeGVjRW11KFsnZ3NtJywgYWN0aW9uLCBwaG9uZU51bWJlcl0pO1xufTtcblxuLyoqXG4gKiBFbXVsYXRlIEdTTSBzaWduYWwgc3RyZW5ndGggY2hhbmdlIGV2ZW50IG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBzdHJlbmd0aCBbNF0gLSBBIG51bWJlciBpbiByYW5nZSBbMCwgNF07XG4gKiBAdGhyb3dzIHtlcnJvcn0gSWYgX3N0cmVuZ3RoXyB2YWx1ZSBpcyBpbnZhbGlkLlxuICovXG5lbXVNZXRob2RzLmdzbVNpZ25hbCA9IGFzeW5jIGZ1bmN0aW9uIGdzbVNpZ25hbCAoc3RyZW5ndGggPSA0KSB7XG4gIHN0cmVuZ3RoID0gcGFyc2VJbnQoc3RyZW5ndGgsIDEwKTtcbiAgaWYgKGVtdU1ldGhvZHMuR1NNX1NJR05BTF9TVFJFTkdUSFMuaW5kZXhPZihzdHJlbmd0aCkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNpZ25hbCBzdHJlbmd0aCBwYXJhbSAke3N0cmVuZ3RofS4gU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhlbXVNZXRob2RzLkdTTV9TSUdOQUxfU1RSRU5HVEhTKX1gKTtcbiAgfVxuICBsb2cuaW5mbygnZ3NtIHNpZ25hbC1wcm9maWxlIDxzdHJlbmd0aD4gY2hhbmdlcyB0aGUgcmVwb3J0ZWQgc3RyZW5ndGggb24gbmV4dCAoMTVzKSB1cGRhdGUuJyk7XG4gIGF3YWl0IHRoaXMuYWRiRXhlY0VtdShbJ2dzbScsICdzaWduYWwtcHJvZmlsZScsIHN0cmVuZ3RoXSk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgR1NNIHZvaWNlIGV2ZW50IG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlIFsnb24nXSAtIEVpdGhlciAnb24nIG9yICdvZmYnLlxuICogQHRocm93cyB7ZXJyb3J9IElmIF9zdGF0ZV8gdmFsdWUgaXMgaW52YWxpZC5cbiAqL1xuZW11TWV0aG9kcy5nc21Wb2ljZSA9IGFzeW5jIGZ1bmN0aW9uIGdzbVZvaWNlIChzdGF0ZSA9ICdvbicpIHtcbiAgLy8gZ3NtIHZvaWNlIDxzdGF0ZT4gYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIHlvdXIgR1BSUyBjb25uZWN0aW9uXG4gIGlmIChfLnZhbHVlcyhlbXVNZXRob2RzLkdTTV9WT0lDRV9TVEFURVMpLmluZGV4T2Yoc3RhdGUpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnc20gdm9pY2Ugc3RhdGUgcGFyYW0gJHtzdGF0ZX0uIFN1cHBvcnRlZCB2YWx1ZXM6ICR7Xy52YWx1ZXMoZW11TWV0aG9kcy5HU01fVk9JQ0VfU1RBVEVTKX1gKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYkV4ZWNFbXUoWydnc20nLCAndm9pY2UnLCBzdGF0ZV0pO1xufTtcblxuLyoqXG4gKiBFbXVsYXRlIG5ldHdvcmsgc3BlZWQgY2hhbmdlIGV2ZW50IG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNwZWVkIFsnZnVsbCddIC0gT25lIG9mIHBvc3NpYmxlIE5FVFdPUktfU1BFRUQgdmFsdWVzLlxuICogQHRocm93cyB7ZXJyb3J9IElmIF9zcGVlZF8gdmFsdWUgaXMgaW52YWxpZC5cbiAqL1xuZW11TWV0aG9kcy5uZXR3b3JrU3BlZWQgPSBhc3luYyBmdW5jdGlvbiBuZXR3b3JrU3BlZWQgKHNwZWVkID0gJ2Z1bGwnKSB7XG4gIC8vIG5ldHdvcmsgc3BlZWQgPHNwZWVkPiBhbGxvd3MgeW91IHRvIHNldCB0aGUgbmV0d29yayBzcGVlZCBlbXVsYXRpb24uXG4gIGlmIChfLnZhbHVlcyhlbXVNZXRob2RzLk5FVFdPUktfU1BFRUQpLmluZGV4T2Yoc3BlZWQpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXR3b3JrIHNwZWVkIHBhcmFtICR7c3BlZWR9LiBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGVtdU1ldGhvZHMuTkVUV09SS19TUEVFRCl9YCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGJFeGVjRW11KFsnbmV0d29yaycsICdzcGVlZCcsIHNwZWVkXSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEV4ZWNUZWxuZXRPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gZXhlY1RpbWVvdXQgWzYwMDAwXSBBIHRpbWVvdXQgdXNlZCB0byB3YWl0IGZvciBhIHNlcnZlclxuICogcmVwbHkgdG8gdGhlIGdpdmVuIGNvbW1hbmRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb25uVGltZW91dCBbNTAwMF0gQ29uc29sZSBjb25uZWN0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXG4gKiBAcHJvcGVydHkge251bWJlcn0gaW5pdFRpbWVvdXQgWzUwMDBdIFRlbG5ldCBjb25zb2xlIGluaXRpYWxpemF0aW9uIHRpbWVvdXRcbiAqIGluIG1pbGxpc2Vjb25kcyAodGhlIHRpbWUgYmV0d2VlbiBjb25uZWN0aW9uIGhhcHBlbnMgYW5kIHRoZSBjb21tYW5kIHByb21wdFxuICogaXMgYXZhaWxhYmxlKVxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gcG9ydCBUaGUgZW11bGF0b3IgcG9ydCBudW1iZXIuIFRoZSBtZXRob2Qgd2lsbCB0cnkgdG8gcGFyc2UgaXRcbiAqIGZyb20gdGhlIGN1cnJlbnQgZGV2aWNlIGlkZW50aWZpZXIgaWYgdW5zZXRcbiAqL1xuXG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZCB0aHJvdWdoIGVtdWxhdG9yIHRlbG5ldCBjb25zb2xlIGludGVyZmFjZSBhbmQgcmV0dXJucyBpdHMgb3V0cHV0XG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fHN0cmluZ30gY21kIC0gVGhlIGFjdHVhbCBjb21tYW5kIHRvIGV4ZWN1dGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL3J1bi9lbXVsYXRvci1jb25zb2xlIGZvciBtb3JlIGRldGFpbHNcbiAqIG9uIGF2YWlsYWJsZSBjb21tYW5kc1xuICogQHBhcmFtIHtFeGVjVGVsbmV0T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbW1hbmQgb3V0cHV0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGNvbm5lY3RpbmcgdG8gdGhlIFRlbG5ldCBjb25zb2xlXG4gKiBvciBpZiB0aGUgZ2l2ZW4gY29tbWFuZCByZXR1cm5lZCBub24tT0sgcmVzcG9uc2VcbiAqL1xuZW11TWV0aG9kcy5leGVjRW11Q29uc29sZUNvbW1hbmQgPSBhc3luYyBmdW5jdGlvbiBleGVjVGVsbmV0IChjbWQsIG9wdHMgPSB7fSkge1xuICBsZXQgcG9ydCA9IHBhcnNlSW50KG9wdHMucG9ydCwgMTApO1xuICBpZiAoIXBvcnQpIHtcbiAgICBjb25zdCBwb3J0TWF0Y2ggPSAvZW11bGF0b3ItKFxcZCspL2kuZXhlYyh0aGlzLmN1ckRldmljZUlkKTtcbiAgICBpZiAoIXBvcnRNYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGNvbnNvbGUgcG9ydCBudW1iZXIgZnJvbSB0aGUgZGV2aWNlIGlkZW50aWZpZXIgJyR7dGhpcy5jdXJEZXZpY2VJZH0nLiBgICtcbiAgICAgICAgYElzIGl0IGFuIGVtdWxhdG9yP2ApO1xuICAgIH1cbiAgICBwb3J0ID0gcGFyc2VJbnQocG9ydE1hdGNoWzFdLCAxMCk7XG4gIH1cbiAgY29uc3QgaG9zdCA9ICcxMjcuMC4wLjEnO1xuICBjb25zdCB7XG4gICAgZXhlY1RpbWVvdXQgPSA2MDAwMCxcbiAgICBjb25uVGltZW91dCA9IDUwMDAsXG4gICAgaW5pdFRpbWVvdXQgPSA1MDAwLFxuICB9ID0gb3B0cztcbiAgYXdhaXQgdGhpcy5yZXNldFRlbG5ldEF1dGhUb2tlbigpO1xuXG4gIGNvbnN0IG9rRmxhZyA9IC9eT0skL207XG4gIGNvbnN0IG5va0ZsYWcgPSAvXktPXFxiL207XG4gIGNvbnN0IGVvbCA9ICdcXHJcXG4nO1xuICBjb25zdCBjbGllbnQgPSBuZXQuY29ubmVjdCh7XG4gICAgaG9zdCxcbiAgICBwb3J0LFxuICB9KTtcblxuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNvbm5UaW1lb3V0T2JqID0gc2V0VGltZW91dChcbiAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoYENhbm5vdCBjb25uZWN0IHRvIHRoZSBFbXVsYXRvciBjb25zb2xlIGF0ICR7aG9zdH06JHtwb3J0fSBgICtcbiAgICAgICAgYGFmdGVyICR7Y29ublRpbWVvdXR9bXNgKSksIGNvbm5UaW1lb3V0KTtcbiAgICBsZXQgZXhlY1RpbWVvdXRPYmo7XG4gICAgbGV0IGluaXRUaW1lb3V0T2JqO1xuICAgIGxldCBpc0NvbW1hbmRTZW50ID0gZmFsc2U7XG4gICAgbGV0IHNlcnZlclJlc3BvbnNlID0gW107XG5cbiAgICBjbGllbnQub25jZSgnZXJyb3InLCAoZSkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGNvbm5UaW1lb3V0T2JqKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYENhbm5vdCBjb25uZWN0IHRvIHRoZSBFbXVsYXRvciBjb25zb2xlIGF0ICR7aG9zdH06JHtwb3J0fS4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCkpO1xuICAgIH0pO1xuXG4gICAgY2xpZW50Lm9uY2UoJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoY29ublRpbWVvdXRPYmopO1xuICAgICAgaW5pdFRpbWVvdXRPYmogPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiByZWplY3QobmV3IEVycm9yKGBEaWQgbm90IGdldCB0aGUgaW5pdGlhbCByZXNwb25zZSBmcm9tIHRoZSBFbXVsYXRvciBjb25zb2xlIGF0ICR7aG9zdH06JHtwb3J0fSBgICtcbiAgICAgICAgICBgYWZ0ZXIgJHtpbml0VGltZW91dH1tc2ApKSwgaW5pdFRpbWVvdXQpO1xuICAgIH0pO1xuXG4gICAgY2xpZW50Lm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICBzZXJ2ZXJSZXNwb25zZS5wdXNoKGNodW5rKTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IEJ1ZmZlci5jb25jYXQoc2VydmVyUmVzcG9uc2UpLnRvU3RyaW5nKCd1dGY4JykudHJpbSgpO1xuICAgICAgaWYgKG9rRmxhZy50ZXN0KG91dHB1dCkpIHtcbiAgICAgICAgLy8gVGhlIGluaXRpYWwgaW5jb21pbmcgZGF0YSBjaHVuayBjb25maXJtcyB0aGUgaW50ZXJmYWNlIGlzIHJlYWR5IGZvciBpbnB1dFxuICAgICAgICBpZiAoIWlzQ29tbWFuZFNlbnQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoaW5pdFRpbWVvdXRPYmopO1xuICAgICAgICAgIHNlcnZlclJlc3BvbnNlID0gW107XG4gICAgICAgICAgY29uc3QgY21kU3RyID0gXy5pc0FycmF5KGNtZCkgPyB1dGlsLnF1b3RlKGNtZCkgOiBgJHtjbWR9YDtcbiAgICAgICAgICBsb2cuZGVidWcoYEV4ZWN1dGluZyBFbXVsYXRvciBjb25zb2xlIGNvbW1hbmQ6ICR7Y21kU3RyfWApO1xuICAgICAgICAgIGNsaWVudC53cml0ZShjbWRTdHIpO1xuICAgICAgICAgIGNsaWVudC53cml0ZShlb2wpO1xuICAgICAgICAgIGlzQ29tbWFuZFNlbnQgPSB0cnVlO1xuICAgICAgICAgIGV4ZWNUaW1lb3V0T2JqID0gc2V0VGltZW91dChcbiAgICAgICAgICAgICgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpZCBub3QgZ2V0IGFueSByZXNwb25zZSBmcm9tIHRoZSBFbXVsYXRvciBjb25zb2xlIGF0ICR7aG9zdH06JHtwb3J0fSBgICtcbiAgICAgICAgICAgICAgYHRvICcke2NtZH0nIGNvbW1hbmQgYWZ0ZXIgJHtleGVjVGltZW91dH1tc2ApKSwgZXhlY1RpbWVvdXQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjbGVhclRpbWVvdXQoZXhlY1RpbWVvdXRPYmopO1xuICAgICAgICBjbGllbnQuZW5kKCk7XG4gICAgICAgIGNvbnN0IG91dHB1dEFyciA9IG91dHB1dC5zcGxpdChlb2wpO1xuICAgICAgICAvLyByZW1vdmUgdGhlIHJlZHVuZGFudCBPSyBmbGFnIGZyb20gdGhlIHJlc3VsdGluZyBjb21tYW5kIG91dHB1dFxuICAgICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXRBcnIuc2xpY2UoMCwgb3V0cHV0QXJyLmxlbmd0aCAtIDEpLmpvaW4oJ1xcbicpLnRyaW0oKSk7XG4gICAgICB9IGVsc2UgaWYgKG5va0ZsYWcudGVzdChvdXRwdXQpKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpbml0VGltZW91dE9iaik7XG4gICAgICAgIGNsZWFyVGltZW91dChleGVjVGltZW91dE9iaik7XG4gICAgICAgIGNsaWVudC5lbmQoKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0QXJyID0gb3V0cHV0LnNwbGl0KGVvbCk7XG4gICAgICAgIHJldHVybiByZWplY3QoXy50cmltKF8ubGFzdChvdXRwdXRBcnIpKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFbXVWZXJzaW9uSW5mb1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSByZXZpc2lvbiBUaGUgYWN0dWFsIHJldmlzaW9uIG51bWJlciwgZm9yIGV4YW1wbGUgJzMwLjAuNSdcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gYnVpbGRJZCBUaGUgYnVpbGQgaWRlbnRpZmllciwgZm9yIGV4YW1wbGUgNjMwNjA0N1xuICovXG5cbi8qKlxuICogUmV0cmlldmVzIGVtdWxhdG9yIHZlcnNpb24gZnJvbSB0aGUgZmlsZSBzeXN0ZW1cbiAqXG4gKiBAcmV0dXJucyB7RW11VmVyc2lvbkluZm99IElmIG5vIHZlcnNpb24gaW5mbyBjb3VsZCBiZSBwYXJzZWQgdGhlbiBhbiBlbXB0eVxuICogb2JqZWN0IGlzIHJldHVybmVkXG4gKi9cbmVtdU1ldGhvZHMuZ2V0RW11VmVyc2lvbkluZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRFbXVWZXJzaW9uSW5mbyAoKSB7XG4gIGNvbnN0IHByb3BzUGF0aCA9IHBhdGguam9pbih0aGlzLnNka1Jvb3QsICdlbXVsYXRvcicsICdzb3VyY2UucHJvcGVydGllcycpO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwcm9wc1BhdGgpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BzUGF0aCwgJ3V0ZjgnKTtcbiAgY29uc3QgcmV2aXNpb25NYXRjaCA9IC9eUGtnXFwuUmV2aXNpb249KFtcXGQuXSspJC9tLmV4ZWMoY29udGVudCk7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBpZiAocmV2aXNpb25NYXRjaCkge1xuICAgIHJlc3VsdC5yZXZpc2lvbiA9IHJldmlzaW9uTWF0Y2hbMV07XG4gIH1cbiAgY29uc3QgYnVpbGRJZE1hdGNoID0gL15Qa2dcXC5CdWlsZElkPShcXGQrKSQvbS5leGVjKGNvbnRlbnQpO1xuICBpZiAoYnVpbGRJZE1hdGNoKSB7XG4gICAgcmVzdWx0LmJ1aWxkSWQgPSBwYXJzZUludChidWlsZElkTWF0Y2hbMV0sIDEwKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgZW11bGF0b3IgaW1hZ2UgcHJvcGVydGllcyBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdmROYW1lIEVtdWxhdG9yIG5hbWUuIFNob3VsZCBOT1Qgc3RhcnQgd2l0aCAnQCcgY2hhcmFjdGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSBleHRyYWN0aW5nIHRoZSBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgY29udGVudCBvZiBlbXVsYXRvciBpbWFnZSBwcm9wZXJ0aWVzIGZpbGUuXG4gKiBVc3VhbGx5IHRoaXMgY29uZmlndXJhdGlvbiAuaW5pIGZpbGUgaGFzIHRoZSBmb2xsb3dpbmcgY29udGVudDpcbiAqICAgYXZkLmluaS5lbmNvZGluZz1VVEYtOFxuICogICBwYXRoPS9Vc2Vycy91c2VybmFtZS8uYW5kcm9pZC9hdmQvUGl4ZWxfWExfQVBJXzMwLmF2ZFxuICogICBwYXRoLnJlbD1hdmQvUGl4ZWxfWExfQVBJXzMwLmF2ZFxuICogICB0YXJnZXQ9YW5kcm9pZC0zMFxuICovXG5lbXVNZXRob2RzLmdldEVtdUltYWdlUHJvcGVydGllcyA9IGFzeW5jIGZ1bmN0aW9uIGdldEVtdUltYWdlUHJvcGVydGllcyAoYXZkTmFtZSkge1xuICBjb25zdCBhdmRzID0gYXdhaXQgbGlzdEVtdWxhdG9ycygpO1xuICBjb25zdCBhdmQgPSBhdmRzLmZpbmQoKHtuYW1lfSkgPT4gbmFtZSA9PT0gYXZkTmFtZSk7XG4gIGlmICghYXZkKSB7XG4gICAgbGV0IG1zZyA9IGBDYW5ub3QgZmluZCAnJHthdmROYW1lfScgZW11bGF0b3IuIGA7XG4gICAgaWYgKF8uaXNFbXB0eShhdmRzKSkge1xuICAgICAgbXNnICs9IGBObyBlbXVsYXRvcnMgaGF2ZSBiZWVuIGRldGVjdGVkIG9uIHlvdXIgc3lzdGVtYDtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnICs9IGBBdmFpbGFibGUgYXZkIG5hbWVzIGFyZTogJHthdmRzLm1hcCgoe25hbWV9KSA9PiBuYW1lKX1gO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxuICByZXR1cm4gaW5pLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKGF2ZC5jb25maWcsICd1dGY4JykpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBnaXZlbiBlbXVsYXRvciBleGlzdHMgaW4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGF2ZHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGF2ZE5hbWUgLSBUaGUgbmFtZSBvZiBlbXVsYXRvciB0byB2ZXJpZnkgZm9yIGV4aXN0ZW5jZS5cbiAqIFNob3VsZCBOT1Qgc3RhcnQgd2l0aCAnQCcgY2hhcmFjdGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGVtdWxhdG9yIHdpdGggZ2l2ZW4gbmFtZSBkb2VzIG5vdCBleGlzdC5cbiAqL1xuZW11TWV0aG9kcy5jaGVja0F2ZEV4aXN0ID0gYXN5bmMgZnVuY3Rpb24gY2hlY2tBdmRFeGlzdCAoYXZkTmFtZSkge1xuICBjb25zdCBhdmRzID0gYXdhaXQgbGlzdEVtdWxhdG9ycygpO1xuICBpZiAoIWF2ZHMuc29tZSgoe25hbWV9KSA9PiBuYW1lID09PSBhdmROYW1lKSkge1xuICAgIGxldCBtc2cgPSBgQXZkICcke2F2ZE5hbWV9JyBpcyBub3QgYXZhaWxhYmxlLiBgO1xuICAgIGlmIChfLmlzRW1wdHkoYXZkcykpIHtcbiAgICAgIG1zZyArPSBgTm8gZW11bGF0b3JzIGhhdmUgYmVlbiBkZXRlY3RlZCBvbiB5b3VyIHN5c3RlbWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1zZyArPSBgUGxlYXNlIHNlbGVjdCB5b3VyIGF2ZCBuYW1lIGZyb20gb25lIG9mIHRoZXNlOiAnJHthdmRzLm1hcCgoe25hbWV9KSA9PiBuYW1lKX0nYDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBlbXVNZXRob2RzO1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvYWRiLWVtdS1jb21tYW5kcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -39,6 +39,8 @@ const CLIPBOARD_RETRIEVAL_ACTION = `${SETTINGS_HELPER_ID}.clipboard.get`;
|
|
|
39
39
|
const NOTIFICATIONS_RETRIEVAL_ACTION = `${SETTINGS_HELPER_ID}.notifications`;
|
|
40
40
|
const SMS_LIST_RECEIVER = `${SETTINGS_HELPER_ID}/.receivers.SmsReader`;
|
|
41
41
|
const SMS_LIST_RETRIEVAL_ACTION = `${SETTINGS_HELPER_ID}.sms.read`;
|
|
42
|
+
const MEDIA_SCAN_RECEIVER = `${SETTINGS_HELPER_ID}/.receivers.MediaScannerReceiver`;
|
|
43
|
+
const MEDIA_SCAN_ACTION = `${SETTINGS_HELPER_ID}.scan_media`;
|
|
42
44
|
const APPIUM_IME = `${SETTINGS_HELPER_ID}/.AppiumIME`;
|
|
43
45
|
const UNICODE_IME = `${SETTINGS_HELPER_ID}/.UnicodeIME`;
|
|
44
46
|
const DEFAULT_SATELLITES_COUNT = 12;
|
|
@@ -291,8 +293,18 @@ commands.typeUnicode = async function typeUnicode(text) {
|
|
|
291
293
|
return true;
|
|
292
294
|
};
|
|
293
295
|
|
|
296
|
+
commands.scanMedia = async function scanMedia(destination) {
|
|
297
|
+
_logger.default.debug(`Scanning '${destination}' for media files`);
|
|
298
|
+
|
|
299
|
+
const output = await this.shell(['am', 'broadcast', '-n', MEDIA_SCAN_RECEIVER, '-a', MEDIA_SCAN_ACTION, '--es', 'path', destination]);
|
|
300
|
+
|
|
301
|
+
if (!_lodash.default.includes(output, 'result=-1')) {
|
|
302
|
+
throw new Error(`No media could be scanned at '${destination}'. ` + `Check the device logcat output for more details.`);
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
|
|
294
306
|
var _default = commands;
|
|
295
307
|
exports.default = _default;require('source-map-support').install();
|
|
296
308
|
|
|
297
309
|
|
|
298
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMuanMiXSwibmFtZXMiOlsiU0VUVElOR1NfSEVMUEVSX0lEIiwiU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFkiLCJXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiIsIldJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiIsIkRBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSIiwiREFUQV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OIiwiQU5JTUFUSU9OX1NFVFRJTkdfUkVDRUlWRVIiLCJBTklNQVRJT05fU0VUVElOR19BQ1RJT04iLCJMT0NBTEVfU0VUVElOR19SRUNFSVZFUiIsIkxPQ0FMRV9TRVRUSU5HX0FDVElPTiIsIkxPQ0FUSU9OX1NFUlZJQ0UiLCJMT0NBVElPTl9SRUNFSVZFUiIsIkxPQ0FUSU9OX1JFVFJJRVZBTF9BQ1RJT04iLCJDTElQQk9BUkRfUkVDRUlWRVIiLCJDTElQQk9BUkRfUkVUUklFVkFMX0FDVElPTiIsIk5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTiIsIlNNU19MSVNUX1JFQ0VJVkVSIiwiU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTiIsIkFQUElVTV9JTUUiLCJVTklDT0RFX0lNRSIsIkRFRkFVTFRfU0FURUxMSVRFU19DT1VOVCIsIkRFRkFVTFRfQUxUSVRVREUiLCJjb21tYW5kcyIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJvcHRzIiwicHJvY2Vzc0V4aXN0cyIsImxvZyIsImRlYnVnIiwidGltZW91dCIsInN0YXJ0QXBwIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJjYXRlZ29yeSIsInN0b3BBcHAiLCJ3YWl0Rm9yTGF1bmNoIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVyciIsIkVycm9yIiwic2V0V2lmaVN0YXRlIiwib24iLCJpc0VtdWxhdG9yIiwic2hlbGwiLCJwcml2aWxlZ2VkIiwiZ2V0QXBpTGV2ZWwiLCJzZXREYXRhU3RhdGUiLCJzZXRBbmltYXRpb25TdGF0ZSIsInNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJzY3JpcHQiLCJwYXJhbXMiLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwicHVzaCIsInNldEdlb0xvY2F0aW9uIiwibG9jYXRpb24iLCJmb3JtYXRMb2NhdGlvblZhbHVlIiwidmFsdWVOYW1lIiwiaXNSZXF1aXJlZCIsInV0aWwiLCJoYXNWYWx1ZSIsImZsb2F0VmFsdWUiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJfIiwiY2VpbCIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiYWx0aXR1ZGUiLCJzcGVlZCIsImFyZ3MiLCJpc05pbCIsInNhdGVsbGl0ZXMiLCJwYXJzZUludCIsIk51bWJlciIsImxlbmd0aCIsInJlc2V0VGVsbmV0QXV0aFRva2VuIiwiYWRiRXhlYyIsIm1hcCIsImFyZyIsInJlcGxhY2UiLCJnZXRHZW9Mb2NhdGlvbiIsIm91dHB1dCIsIm1lc3NhZ2UiLCJtYXRjaCIsImV4ZWMiLCJKU09OIiwic3RyaW5naWZ5IiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInJ1bkluSW1lQ29udGV4dCIsImdldENsaXBib2FyZCIsInJldHJpZXZlQ2xpcGJvYXJkIiwidHJpbSIsImdldE5vdGlmaWNhdGlvbnMiLCJnZXRTbXNMaXN0IiwibWF4IiwidHlwZVVuaWNvZGUiLCJ0ZXh0IiwicGx1cmFsaXplIiwiaW5wdXRUZXh0IiwiaW1hcCIsImVuY29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxrQkFBa0IsR0FBRyxvQkFBM0I7QUFDQSxNQUFNQyw2QkFBNkIsR0FBRyxXQUF0QztBQUNBLE1BQU1DLGdDQUFnQyxHQUFJLEdBQUVGLGtCQUFtQiwyQ0FBL0Q7QUFDQSxNQUFNRyw4QkFBOEIsR0FBSSxHQUFFSCxrQkFBbUIsT0FBN0Q7QUFDQSxN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LGVBQWVBLFdBQWYsQ0FBNEJDLElBQTVCLEVBQWtDO0FBQ3ZELE1BQUlqQyxnQkFBRU8sS0FBRixDQUFRMEIsSUFBUixDQUFKLEVBQW1CO0FBQ2pCLFdBQU8sS0FBUDtBQUNEOztBQUVEQSxFQUFBQSxJQUFJLEdBQUksR0FBRUEsSUFBSyxFQUFmOztBQUNBekUsa0JBQUlDLEtBQUosQ0FBVyxVQUFTa0Msb0JBQUt1QyxTQUFMLENBQWUsV0FBZixFQUE0QkQsSUFBSSxDQUFDdEIsTUFBakMsRUFBeUMsSUFBekMsQ0FBK0MsRUFBbkU7O0FBQ0EsTUFBSSxDQUFDc0IsSUFBTCxFQUFXO0FBQ1QsV0FBTyxLQUFQO0FBQ0Q7O0FBQ0QsUUFBTSxLQUFLUixlQUFMLENBQ0p4RSxXQURJLEVBQ1MsWUFBWSxNQUFNLEtBQUtrRixTQUFMLENBQWVDLFVBQUtDLE1BQUwsQ0FBWUosSUFBWixDQUFmLENBRDNCLENBQU47QUFHQSxTQUFPLElBQVA7QUFDRCxDQWREOztlQWdCZTdFLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUpzb25EYXRhIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBpbWFwIH0gZnJvbSAndXRmNyc7XG5cbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFkgPSAnLlNldHRpbmdzJztcbmNvbnN0IFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLldpRmlDb25uZWN0aW9uU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ud2lmaWA7XG5jb25zdCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5EYXRhQ29ubmVjdGlvblNldHRpbmdSZWNlaXZlcmA7XG5jb25zdCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmRhdGFfY29ubmVjdGlvbmA7XG5jb25zdCBBTklNQVRJT05fU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5BbmltYXRpb25TZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5hbmltYXRpb25gO1xuY29uc3QgTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuTG9jYWxlU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IExPQ0FMRV9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubG9jYWxlYDtcbmNvbnN0IExPQ0FUSU9OX1NFUlZJQ0UgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5Mb2NhdGlvblNlcnZpY2VgO1xuY29uc3QgTE9DQVRJT05fUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuTG9jYXRpb25JbmZvUmVjZWl2ZXJgO1xuY29uc3QgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubG9jYXRpb25gO1xuY29uc3QgQ0xJUEJPQVJEX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkNsaXBib2FyZFJlY2VpdmVyYDtcbmNvbnN0IENMSVBCT0FSRF9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5jbGlwYm9hcmQuZ2V0YDtcbmNvbnN0IE5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubm90aWZpY2F0aW9uc2A7XG5jb25zdCBTTVNfTElTVF9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5TbXNSZWFkZXJgO1xuY29uc3QgU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uc21zLnJlYWRgO1xuY29uc3QgQVBQSVVNX0lNRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLkFwcGl1bUlNRWA7XG5jb25zdCBVTklDT0RFX0lNRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLlVuaWNvZGVJTUVgO1xuY29uc3QgREVGQVVMVF9TQVRFTExJVEVTX0NPVU5UID0gMTI7XG5jb25zdCBERUZBVUxUX0FMVElUVURFID0gMC4wO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2V0dGluZ3NBcHBTdGFydHVwT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzUwMDBdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqIHRvIHdhaXQgdW50aWwgdGhlIGFwcCBoYXMgc3RhcnRlZFxuICovXG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIgYXBwbGljYXRpb24gaXMgcnVubmluZ1xuICogYW5kIHN0YXJ0cyBpdCBpZiBuZWNlc3NhcnlcbiAqXG4gKiBAcGFyYW0ge1NldHRpbmdzQXBwU3RhcnR1cE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBBcHBpdW0gU2V0dGluZ3MgaGFzIGZhaWxlZCB0byBzdGFydFxuICogQHJldHVybnMge0FEQn0gc2VsZiBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAqL1xuY29tbWFuZHMucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAgKG9wdHMgPSB7fSkge1xuICBpZiAoYXdhaXQgdGhpcy5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9JRCkpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnU3RhcnRpbmcgQXBwaXVtIFNldHRpbmdzIGFwcCcpO1xuICBjb25zdCB7XG4gICAgdGltZW91dCA9IDUwMDAsXG4gIH0gPSBvcHRzO1xuICBhd2FpdCB0aGlzLnN0YXJ0QXBwKHtcbiAgICBwa2c6IFNFVFRJTkdTX0hFTFBFUl9JRCxcbiAgICBhY3Rpdml0eTogU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFksXG4gICAgYWN0aW9uOiAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgIGNhdGVnb3J5OiAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgIHN0b3BBcHA6IGZhbHNlLFxuICAgIHdhaXRGb3JMYXVuY2g6IGZhbHNlLFxuICB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IGF3YWl0IHRoaXMucHJvY2Vzc0V4aXN0cyhTRVRUSU5HU19IRUxQRVJfSUQpLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXQsXG4gICAgICBpbnRlcnZhbE1zOiAzMDAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXBwaXVtIFNldHRpbmdzIGFwcCBpcyBub3QgcnVubmluZyBhZnRlciAke3RpbWVvdXR9bXNgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIFdpRmkgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldFdpZmlTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldFdpZmlTdGF0ZSAob24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBpZiAoaXNFbXVsYXRvcikge1xuICAgIC8vIFRoZSBzdmMgY29tbWFuZCBkb2VzIG5vdCByZXF1aXJlIHRvIGJlIHJvb3Qgc2luY2UgQVBJIDI2XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3N2YycsICd3aWZpJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ10sIHtcbiAgICAgIHByaXZpbGVnZWQ6IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA8IDI2LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04sXG4gICAgICAnLW4nLCBXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgICBdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIERhdGEgdHJhbnNmZXIgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldERhdGFTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldERhdGFTdGF0ZSAob24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBpZiAoaXNFbXVsYXRvcikge1xuICAgIC8vIFRoZSBzdmMgY29tbWFuZCBkb2VzIG5vdCByZXF1aXJlIHRvIGJlIHJvb3Qgc2luY2UgQVBJIDI2XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3N2YycsICdkYXRhJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ10sIHtcbiAgICAgIHByaXZpbGVnZWQ6IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA8IDI2LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04sXG4gICAgICAnLW4nLCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgICBdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIGFuaW1hdGlvbiBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKiBBbmltYXRpb24gb24gdGhlIGRldmljZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBmb2xsb3dpbmcgZ2xvYmFsIHByb3BlcnRpZXM6XG4gKiBbQU5JTUFUT1JfRFVSQVRJT05fU0NBTEVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLkdsb2JhbC5odG1sI0FOSU1BVE9SX0RVUkFUSU9OX1NDQUxFfSxcbiAqIFtUUkFOU0lUSU9OX0FOSU1BVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjVFJBTlNJVElPTl9BTklNQVRJT05fU0NBTEV9LFxuICogW1dJTkRPV19BTklNQVRJT05fU0NBTEVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLkdsb2JhbC5odG1sI1dJTkRPV19BTklNQVRJT05fU0NBTEV9LlxuICogVGhpcyBtZXRob2Qgc2V0cyBhbGwgdGhpcyBwcm9wZXJ0aWVzIHRvIDAuMCB0byBkaXNhYmxlICgxLjAgdG8gZW5hYmxlKSBhbmltYXRpb24uXG4gKlxuICogVHVybmluZyBvZmYgYW5pbWF0aW9uIG1pZ2h0IGJlIHVzZWZ1bCB0byBpbXByb3ZlIHN0YWJpbGl0eVxuICogYW5kIHJlZHVjZSB0ZXN0cyBleGVjdXRpb24gdGltZS5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9uIC0gVHJ1ZSB0byBlbmFibGUgYW5kIGZhbHNlIHRvIGRpc2FibGUgaXQuXG4gKi9cbmNvbW1hbmRzLnNldEFuaW1hdGlvblN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0QW5pbWF0aW9uU3RhdGUgKG9uKSB7XG4gIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctYScsIEFOSU1BVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAnLW4nLCBBTklNQVRJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAnLS1lcycsICdzZXRzdGF0dXMnLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXG4gIF0pO1xufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIGxvY2FsZSBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuIERvbid0IG5lZWQgdG8gcmVib290IHRoZSBkZXZpY2UgYWZ0ZXIgY2hhbmdpbmcgdGhlIGxvY2FsZS5cbiAqIFRoaXMgbWV0aG9kIHNldHMgYW4gYXJiaXRyYXJ5IGxvY2FsZSBmb2xsb3dpbmc6XG4gKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbCNMb2NhbGUoamF2YS5sYW5nLlN0cmluZywlMjBqYXZhLmxhbmcuU3RyaW5nKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlLiBlLmcuIGVuLCBqYVxuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50cnkgLSBDb3VudHJ5LiBlLmcuIFVTLCBKUFxuICogQHBhcmFtIHs/c3RyaW5nfSBzY3JpcHQgLSBTY3JpcHQuIGUuZy4gSGFucyBpbiBgemgtSGFucy1DTmBcbiAqL1xuY29tbWFuZHMuc2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAgKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAnLWEnLCBMT0NBTEVfU0VUVElOR19BQ1RJT04sXG4gICAgJy1uJywgTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIsXG4gICAgJy0tZXMnLCAnbGFuZycsIGxhbmd1YWdlLnRvTG93ZXJDYXNlKCksXG4gICAgJy0tZXMnLCAnY291bnRyeScsIGNvdW50cnkudG9VcHBlckNhc2UoKVxuICBdO1xuXG4gIGlmIChzY3JpcHQpIHtcbiAgICBwYXJhbXMucHVzaCgnLS1lcycsICdzY3JpcHQnLCBzY3JpcHQpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5zaGVsbChwYXJhbXMpO1xufTtcblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvY2F0aW9uXG4gKiBAcHJvcGVydHkge251bWJlcnxzdHJpbmd9IGxvbmdpdHVkZSAtIFZhbGlkIGxvbmdpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gbGF0aXR1ZGUgLSBWYWxpZCBsYXRpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IGFsdGl0dWRlIC0gVmFsaWQgYWx0aXR1ZGUgdmFsdWUuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBzYXRlbGxpdGVzIFsxMl0gLSBOdW1iZXIgb2Ygc2F0ZWxsaXRlcyBiZWluZyB0cmFja2VkICgxLTEyKS5cbiAqIFRoaXMgdmFsdWUgaXMgaWdub3JlZCBvbiByZWFsIGRldmljZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBzcGVlZCAtIFZhbGlkIHNwZWVkIHZhbHVlLlxuICogU2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwLjAgbWV0ZXJzL3NlY29uZCBmb3IgcmVhbCBkZXZpY2VzIG9yIDAuMCBrbm90c1xuICogZm9yIGVtdWxhdG9ycy5cbiAqL1xuXG4vKipcbiAqIEVtdWxhdGUgZ2VvbG9jYXRpb24gY29vcmRpbmF0ZXMgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7TG9jYXRpb259IGxvY2F0aW9uIC0gTG9jYXRpb24gb2JqZWN0LiBUaGUgYGFsdGl0dWRlYCB2YWx1ZSBpcyBpZ25vcmVkXG4gKiB3aGlsZSBtb2NraW5nIHRoZSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0R2VvTG9jYXRpb24gKGxvY2F0aW9uLCBpc0VtdWxhdG9yID0gZmFsc2UpIHtcbiAgY29uc3QgZm9ybWF0TG9jYXRpb25WYWx1ZSA9ICh2YWx1ZU5hbWUsIGlzUmVxdWlyZWQgPSB0cnVlKSA9PiB7XG4gICAgaWYgKCF1dGlsLmhhc1ZhbHVlKGxvY2F0aW9uW3ZhbHVlTmFtZV0pKSB7XG4gICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWVOYW1lfSBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZmxvYXRWYWx1ZSA9IHBhcnNlRmxvYXQobG9jYXRpb25bdmFsdWVOYW1lXSk7XG4gICAgaWYgKCFpc05hTihmbG9hdFZhbHVlKSkge1xuICAgICAgcmV0dXJuIGAke18uY2VpbChmbG9hdFZhbHVlLCA1KX1gO1xuICAgIH1cbiAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3ZhbHVlTmFtZX0gaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBmbG9hdCBudW1iZXIuIGAgK1xuICAgICAgICBgJyR7bG9jYXRpb25bdmFsdWVOYW1lXX0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIGNvbnN0IGxvbmdpdHVkZSA9IGZvcm1hdExvY2F0aW9uVmFsdWUoJ2xvbmdpdHVkZScpO1xuICBjb25zdCBsYXRpdHVkZSA9IGZvcm1hdExvY2F0aW9uVmFsdWUoJ2xhdGl0dWRlJyk7XG4gIGNvbnN0IGFsdGl0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnYWx0aXR1ZGUnLCBmYWxzZSk7XG4gIGNvbnN0IHNwZWVkID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnc3BlZWQnLCBmYWxzZSk7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgY29uc3QgYXJncyA9IFtsb25naXR1ZGUsIGxhdGl0dWRlXTtcbiAgICBpZiAoIV8uaXNOaWwoYWx0aXR1ZGUpKSB7XG4gICAgICBhcmdzLnB1c2goYWx0aXR1ZGUpO1xuICAgIH1cbiAgICBjb25zdCBzYXRlbGxpdGVzID0gcGFyc2VJbnQobG9jYXRpb24uc2F0ZWxsaXRlcywgMTApO1xuICAgIGlmICghTnVtYmVyLmlzTmFOKHNhdGVsbGl0ZXMpICYmIHNhdGVsbGl0ZXMgPiAwICYmIHNhdGVsbGl0ZXMgPD0gMTIpIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgYXJncy5wdXNoKGAke0RFRkFVTFRfQUxUSVRVREV9YCk7XG4gICAgICB9XG4gICAgICBhcmdzLnB1c2goYCR7c2F0ZWxsaXRlc31gKTtcbiAgICB9XG4gICAgaWYgKCFfLmlzTmlsKHNwZWVkKSkge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9BTFRJVFVERX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgYXJncy5wdXNoKGAke0RFRkFVTFRfU0FURUxMSVRFU19DT1VOVH1gKTtcbiAgICAgIH1cbiAgICAgIGFyZ3MucHVzaChzcGVlZCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVzZXRUZWxuZXRBdXRoVG9rZW4oKTtcbiAgICBhd2FpdCB0aGlzLmFkYkV4ZWMoWydlbXUnLCAnZ2VvJywgJ2ZpeCcsIC4uLmFyZ3NdKTtcbiAgICAvLyBBIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTIwNjE4MFxuICAgIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2VtdScsICdnZW8nLCAnZml4JywgLi4uKGFyZ3MubWFwKChhcmcpID0+IGFyZy5yZXBsYWNlKCcuJywgJywnKSkpXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICdhbScsICdzdGFydHNlcnZpY2UnLFxuICAgICAgJy1lJywgJ2xvbmdpdHVkZScsIGxvbmdpdHVkZSxcbiAgICAgICctZScsICdsYXRpdHVkZScsIGxhdGl0dWRlLFxuICAgIF07XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUoYWx0aXR1ZGUpKSB7XG4gICAgICBhcmdzLnB1c2goJy1lJywgJ2FsdGl0dWRlJywgYWx0aXR1ZGUpO1xuICAgIH1cbiAgICBpZiAodXRpbC5oYXNWYWx1ZShzcGVlZCkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLWUnLCAnc3BlZWQnLCBzcGVlZCk7XG4gICAgfVxuICAgIGFyZ3MucHVzaChMT0NBVElPTl9TRVJWSUNFKTtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKGFyZ3MpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBnZW8gbG9jYXRpb24gZnJvbSB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHJldHVybnMge0xvY2F0aW9ufSBUaGUgY3VycmVudCBsb2NhdGlvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjdXJyZW50IGxvY2F0aW9uIGNhbm5vdCBiZSByZXRyaWV2ZWRcbiAqL1xuY29tbWFuZHMuZ2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRHZW9Mb2NhdGlvbiAoKSB7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctbicsIExPQ0FUSU9OX1JFQ0VJVkVSLFxuICAgICAgJy1hJywgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTixcbiAgICBdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIGN1cnJlbnQgZ2VvIGNvb3JkaW5hdGVzIGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZSBhbmQgaGFzIGxvY2F0aW9uIHBlcm1pc3Npb25zLiBBbHNvIHRoZSBsb2NhdGlvbiBgICtcbiAgICAgIGBzZXJ2aWNlcyBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGRldmljZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IC9kYXRhPVwiKC0/W1xcZC5dKylcXHMrKC0/W1xcZC5dKylcXHMrKC0/W1xcZC5dKylcIi8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGFjdHVhbCBsb2NhdGlvbiB2YWx1ZXMgZnJvbSB0aGUgY29tbWFuZCBvdXRwdXQ6ICR7b3V0cHV0fWApO1xuICB9XG4gIGNvbnN0IGxvY2F0aW9uID0ge1xuICAgIGxhdGl0dWRlOiBtYXRjaFsxXSxcbiAgICBsb25naXR1ZGU6IG1hdGNoWzJdLFxuICAgIGFsdGl0dWRlOiBtYXRjaFszXSxcbiAgfTtcbiAgbG9nLmRlYnVnKGBHb3QgZ2VvIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KGxvY2F0aW9uKX1gKTtcbiAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgZ2l2ZW4gZWRpdG9yIGFjdGlvbiBvbiB0aGUgZm9jdXNlZCBpbnB1dCBmaWVsZC5cbiAqIFRoaXMgbWV0aG9kIHJlcXVpcmVzIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIgdG8gYmUgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2UuXG4gKiBObyBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcGVyZm9ybWluZyB0aGUgYWN0aW9uLlxuICogWW91IG11c3QgaW52ZXN0aWdhdGUgdGhlIGxvZ2NhdCBvdXRwdXQgaWYgc29tZXRoaW5nIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGFjdGlvbiAtIEVpdGhlciBhY3Rpb24gY29kZSBvciBuYW1lLiBUaGUgZm9sbG93aW5nIGFjdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcyBhcmUgc3VwcG9ydGVkOiBgbm9ybWFsLCB1bnNwZWNpZmllZCwgbm9uZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28sIHNlYXJjaCwgc2VuZCwgbmV4dCwgZG9uZSwgcHJldmlvdXNgXG4gKi9cbmNvbW1hbmRzLnBlcmZvcm1FZGl0b3JBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtRWRpdG9yQWN0aW9uIChhY3Rpb24pIHtcbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nIGVkaXRvciBhY3Rpb246ICR7YWN0aW9ufWApO1xuICBhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChBUFBJVU1fSU1FLFxuICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc2hlbGwoWydpbnB1dCcsICd0ZXh0JywgYC8ke2FjdGlvbn0vYF0pKTtcbn07XG5cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHRleHQgY29udGVudCBvZiB0aGUgZGV2aWNlJ3MgY2xpcGJvYXJkLlxuICogVGhlIG1ldGhvZCB3b3JrcyBmb3IgQW5kcm9pZCBiZWxvdyBhbmQgYWJvdmUgMjkuXG4gKiBJdCB0ZW1vcmFyaWx5IGVuZm9yY2VzIHRoZSBJTUUgc2V0dGluZyBpbiBvcmRlciB0byB3b3JrYXJvdW5kXG4gKiBzZWN1cml0eSBsaW1pdGF0aW9ucyBpZiBuZWVkZWQuXG4gKiBUaGlzIG1ldGhvZCBvbmx5IHdvcmtzIGlmIEFwcGl1bSBTZXR0aW5ncyB2LiAyLjE1KyBpcyBpbnN0YWxsZWRcbiAqIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhY3R1YWwgY29udGVudCBvZiB0aGUgbWFpbiBjbGlwYm9hcmQgYXNcbiAqIGJhc2U2NC1lbmNvZGVkIHN0cmluZyBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGNsaXBib2FyZCBpcyBlbXB0eVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIHByb2JsZW0gd2hpbGUgZ2V0dGluZyB0aGVcbiAqIGNsaXBib2FyZCBjb250YW50XG4gKi9cbmNvbW1hbmRzLmdldENsaXBib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGdldENsaXBib2FyZCAoKSB7XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyB0aGUgY2xpcGJvYXJkIGNvbnRlbnQnKTtcbiAgY29uc3QgcmV0cmlldmVDbGlwYm9hcmQgPSBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAnLW4nLCBDTElQQk9BUkRfUkVDRUlWRVIsXG4gICAgJy1hJywgQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04sXG4gIF0pO1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IChhd2FpdCB0aGlzLmdldEFwaUxldmVsKCkgPj0gMjkpXG4gICAgICA/IChhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChBUFBJVU1fSU1FLCByZXRyaWV2ZUNsaXBib2FyZCkpXG4gICAgICA6IChhd2FpdCByZXRyaWV2ZUNsaXBib2FyZCgpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIGN1cnJlbnQgY2xpcGJvYXJkIGNvbnRlbnQgZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyB1cCB0byBkYXRlLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gL2RhdGE9XCIoW15cIl0qKVwiLy5leGVjKG91dHB1dCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgYWN0dWFsIGNsaWJvYXJkIGNvbnRlbnQgZnJvbSB0aGUgY29tbWFuZCBvdXRwdXQ6ICR7b3V0cHV0fWApO1xuICB9XG4gIHJldHVybiBfLnRyaW0obWF0Y2hbMV0pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgQW5kcm9pZCBub3RpZmljYXRpb25zIHZpYSBBcHBpdW0gU2V0dGluZ3MgaGVscGVyLlxuICogQXBwaXVtIFNldHRpbmdzIGFwcCBpdHNlbGYgbXVzdCBiZSAqbWFudWFsbHkqIGdyYW50ZWQgdG8gYWNjZXNzIG5vdGlmaWNhdGlvbnNcbiAqIHVuZGVyIGRldmljZSBTZXR0aW5ncyBpbiBvcmRlciB0byBtYWtlIHRoaXMgZmVhdHVyZSB3b3JraW5nLlxuICogQXBwaXVtIFNldHRpbmdzIGhlbHBlciBrZWVwcyBhbGwgdGhlIGFjdGl2ZSBub3RpZmljYXRpb25zIHBsdXNcbiAqIG5vdGlmaWNhdGlvbnMgdGhhdCBhcHBlYXJlZCB3aGlsZSBpdCB3YXMgcnVubmluZyBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyLFxuICogYnV0IG5vIG1vcmUgdGhhbiAxMDAgaXRlbXMgYWx0b2dldGhlci4gTmV3bHkgYXBwZWFyZWQgbm90aWZpY2F0aW9uc1xuICogYXJlIGFsd2F5cyBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGUgbm90aWZpY2F0aW9ucyBhcnJheS5cbiAqIFRoZSBgaXNSZW1vdmVkYCBmbGFnIGlzIHNldCB0byBgdHJ1ZWAgZm9yIG5vdGlmaWNhdGlvbnMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vU3RhdHVzQmFyTm90aWZpY2F0aW9uXG4gKiBhbmQgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvYXBwL05vdGlmaWNhdGlvbi5odG1sXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhdmFpbGFibGUgbm90aWZpY2F0aW9uIHByb3BlcnRpZXMgYW5kIHRoZWlyIHZhbHVlcy5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXhhbXBsZSBvdXRwdXQgaXM6XG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwic3RhdHVzQmFyTm90aWZpY2F0aW9uc1wiOltcbiAqICAgICB7XG4gKiAgICAgICBcImlzR3JvdXBcIjpmYWxzZSxcbiAqICAgICAgIFwicGFja2FnZU5hbWVcIjpcImlvLmFwcGl1bS5zZXR0aW5nc1wiLFxuICogICAgICAgXCJpc0NsZWFyYWJsZVwiOmZhbHNlLFxuICogICAgICAgXCJpc09uZ29pbmdcIjp0cnVlLFxuICogICAgICAgXCJpZFwiOjEsXG4gKiAgICAgICBcInRhZ1wiOm51bGwsXG4gKiAgICAgICBcIm5vdGlmaWNhdGlvblwiOntcbiAqICAgICAgICAgXCJ0aXRsZVwiOm51bGwsXG4gKiAgICAgICAgIFwiYmlnVGl0bGVcIjpcIkFwcGl1bSBTZXR0aW5nc1wiLFxuICogICAgICAgICBcInRleHRcIjpudWxsLFxuICogICAgICAgICBcImJpZ1RleHRcIjpcIktlZXAgdGhpcyBzZXJ2aWNlIHJ1bm5pbmcsIHNvIEFwcGl1bSBmb3IgQW5kcm9pZCBjYW4gcHJvcGVybHkgaW50ZXJhY3Qgd2l0aCBzZXZlcmFsIHN5c3RlbSBBUElzXCIsXG4gKiAgICAgICAgIFwidGlja2VyVGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwic3ViVGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwiaW5mb1RleHRcIjpudWxsLFxuICogICAgICAgICBcInRlbXBsYXRlXCI6XCJhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24kQmlnVGV4dFN0eWxlXCJcbiAqICAgICAgIH0sXG4gKiAgICAgICBcInVzZXJIYW5kbGVcIjowLFxuICogICAgICAgXCJncm91cEtleVwiOlwiMHxpby5hcHBpdW0uc2V0dGluZ3N8MXxudWxsfDEwMTMzXCIsXG4gKiAgICAgICBcIm92ZXJyaWRlR3JvdXBLZXlcIjpudWxsLFxuICogICAgICAgXCJwb3N0VGltZVwiOjE1NzY4NTM1MTg4NTAsXG4gKiAgICAgICBcImtleVwiOlwiMHxpby5hcHBpdW0uc2V0dGluZ3N8MXxudWxsfDEwMTMzXCIsXG4gKiAgICAgICBcImlzUmVtb3ZlZFwiOmZhbHNlXG4gKiAgICAgfVxuICogICBdXG4gKiB9XG4gKiBgYGBcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgbm90aWZpY2F0aW9ucyBsaXN0XG4gKi9cbmNvbW1hbmRzLmdldE5vdGlmaWNhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBnZXROb3RpZmljYXRpb25zICgpIHtcbiAgbG9nLmRlYnVnKCdSZXRyaWV2aW5nIG5vdGlmaWNhdGlvbnMnKTtcbiAgLy8gU29tZWhvdyBwcm92aWRpbmcgdGhlIGAtbmAgYXJnIHRvIHRoZSBgYW1gIHVuZGVybmVhdGhcbiAgLy8gcmVuZGVycyB0aGUgYnJvYWRjYXN0IHRvIGZhaWwgaW5zdGVhZCBvZiBzdGFydGluZyB0aGVcbiAgLy8gQXBwaXVtIFNldHRpbmdzIGFwcC4gVGhpcyBvbmx5IGhhcHBlbnMgdG8gdGhlIG5vdGlmaWNhdGlvbnNcbiAgLy8gcmVjZWl2ZXJcbiAgYXdhaXQgdGhpcy5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwKCk7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIE5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTixcbiAgICBdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIGluc3RhbGxlZCBhbmQgaXMgdXAgdG8gZGF0ZS4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlSnNvbkRhdGEob3V0cHV0LCAnbm90aWZpY2F0aW9ucycpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTbXNMaXN0T3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IG1heCBbMTAwXSAtIFRoZSBtYXhpbXVtIGNvdW50IG9mIHJlY2VudCBtZXNzYWdlc1xuICogdG8gcmV0cmlldmVcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiB0aGUgbW9zdCByZWNlbnQgU01TXG4gKiBwcm9wZXJ0aWVzIGxpc3QgdmlhIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIuXG4gKiBNZXNzYWdlcyBhcmUgc29ydGVkIGJ5IGRhdGUgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAqXG4gKiBAcGFyYW0ge1Ntc0xpc3RPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXhhbXBsZSBvdXRwdXQgaXM6XG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwiaXRlbXNcIjpbXG4gKiAgICAge1xuICogICAgICAgXCJpZFwiOlwiMlwiLFxuICogICAgICAgXCJhZGRyZXNzXCI6XCIrMTIzNDU2Nzg5XCIsXG4gKiAgICAgICBcInBlcnNvblwiOm51bGwsXG4gKiAgICAgICBcImRhdGVcIjpcIjE1ODE5MzY0MjIyMDNcIixcbiAqICAgICAgIFwicmVhZFwiOlwiMFwiLFxuICogICAgICAgXCJzdGF0dXNcIjpcIi0xXCIsXG4gKiAgICAgICBcInR5cGVcIjpcIjFcIixcbiAqICAgICAgIFwic3ViamVjdFwiOm51bGwsXG4gKiAgICAgICBcImJvZHlcIjpcIlxcXCJ0ZXh0IG1lc3NhZ2UyXFxcIlwiLFxuICogICAgICAgXCJzZXJ2aWNlQ2VudGVyXCI6bnVsbFxuICogICAgIH0sXG4gKiAgICAge1xuICogICAgICAgXCJpZFwiOlwiMVwiLFxuICogICAgICAgXCJhZGRyZXNzXCI6XCIrMTIzNDU2Nzg5XCIsXG4gKiAgICAgICBcInBlcnNvblwiOm51bGwsXG4gKiAgICAgICBcImRhdGVcIjpcIjE1ODE5MzYzODI3NDBcIixcbiAqICAgICAgIFwicmVhZFwiOlwiMFwiLFxuICogICAgICAgXCJzdGF0dXNcIjpcIi0xXCIsXG4gKiAgICAgICBcInR5cGVcIjpcIjFcIixcbiAqICAgICAgIFwic3ViamVjdFwiOm51bGwsXG4gKiAgICAgICBcImJvZHlcIjpcIlxcXCJ0ZXh0IG1lc3NhZ2VcXFwiXCIsXG4gKiAgICAgICBcInNlcnZpY2VDZW50ZXJcIjpudWxsXG4gKiAgICAgfVxuICogICBdLFxuICogICBcInRvdGFsXCI6MlxuICogfVxuICogYGBgXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIFNNUyBsaXN0XG4gKi9cbmNvbW1hbmRzLmdldFNtc0xpc3QgPSBhc3luYyBmdW5jdGlvbiBnZXRTbXNMaXN0IChvcHRzID0ge30pIHtcbiAgbG9nLmRlYnVnKCdSZXRyaWV2aW5nIHRoZSByZWNlbnQgU01TIG1lc3NhZ2VzJyk7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1uJywgU01TX0xJU1RfUkVDRUlWRVIsXG4gICAgJy1hJywgU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTixcbiAgXTtcbiAgaWYgKG9wdHMubWF4KSB7XG4gICAgYXJncy5wdXNoKCctLWVzJywgJ21heCcsIG9wdHMubWF4KTtcbiAgfVxuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoYXJncyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIFNNUyBsaXN0IGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIGFuZCBpcyB1cCB0byBkYXRlLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gcGFyc2VKc29uRGF0YShvdXRwdXQsICdTTVMgbGlzdCcpO1xufTtcblxuLyoqXG4gKiBUeXBlcyB0aGUgZ2l2ZW4gVW5pY29kZSBzdHJpbmcuXG4gKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBmb2N1cyBpcyBhbHJlYWR5IHB1dFxuICogdG8gdGhlIGRlc3RpbmF0aW9uIGlucHV0IGZpZWxkIGJlZm9yZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIHN0cmluZyB0byB0eXBlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnB1dCB0ZXh0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50IHRvIGFkYlxuICovXG5jb21tYW5kcy50eXBlVW5pY29kZSA9IGFzeW5jIGZ1bmN0aW9uIHR5cGVVbmljb2RlICh0ZXh0KSB7XG4gIGlmIChfLmlzTmlsKHRleHQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdGV4dCA9IGAke3RleHR9YDtcbiAgbG9nLmRlYnVnKGBUeXBpbmcgJHt1dGlsLnBsdXJhbGl6ZSgnY2hhcmFjdGVyJywgdGV4dC5sZW5ndGgsIHRydWUpfWApO1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYXdhaXQgdGhpcy5ydW5JbkltZUNvbnRleHQoXG4gICAgVU5JQ09ERV9JTUUsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuaW5wdXRUZXh0KGltYXAuZW5jb2RlKHRleHQpKVxuICApO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvc2V0dGluZ3MtY2xpZW50LWNvbW1hbmRzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
310
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMuanMiXSwibmFtZXMiOlsiU0VUVElOR1NfSEVMUEVSX0lEIiwiU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFkiLCJXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiIsIldJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiIsIkRBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSIiwiREFUQV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OIiwiQU5JTUFUSU9OX1NFVFRJTkdfUkVDRUlWRVIiLCJBTklNQVRJT05fU0VUVElOR19BQ1RJT04iLCJMT0NBTEVfU0VUVElOR19SRUNFSVZFUiIsIkxPQ0FMRV9TRVRUSU5HX0FDVElPTiIsIkxPQ0FUSU9OX1NFUlZJQ0UiLCJMT0NBVElPTl9SRUNFSVZFUiIsIkxPQ0FUSU9OX1JFVFJJRVZBTF9BQ1RJT04iLCJDTElQQk9BUkRfUkVDRUlWRVIiLCJDTElQQk9BUkRfUkVUUklFVkFMX0FDVElPTiIsIk5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTiIsIlNNU19MSVNUX1JFQ0VJVkVSIiwiU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTiIsIk1FRElBX1NDQU5fUkVDRUlWRVIiLCJNRURJQV9TQ0FOX0FDVElPTiIsIkFQUElVTV9JTUUiLCJVTklDT0RFX0lNRSIsIkRFRkFVTFRfU0FURUxMSVRFU19DT1VOVCIsIkRFRkFVTFRfQUxUSVRVREUiLCJjb21tYW5kcyIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJvcHRzIiwicHJvY2Vzc0V4aXN0cyIsImxvZyIsImRlYnVnIiwidGltZW91dCIsInN0YXJ0QXBwIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJjYXRlZ29yeSIsInN0b3BBcHAiLCJ3YWl0Rm9yTGF1bmNoIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVyciIsIkVycm9yIiwic2V0V2lmaVN0YXRlIiwib24iLCJpc0VtdWxhdG9yIiwic2hlbGwiLCJwcml2aWxlZ2VkIiwiZ2V0QXBpTGV2ZWwiLCJzZXREYXRhU3RhdGUiLCJzZXRBbmltYXRpb25TdGF0ZSIsInNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJzY3JpcHQiLCJwYXJhbXMiLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwicHVzaCIsInNldEdlb0xvY2F0aW9uIiwibG9jYXRpb24iLCJmb3JtYXRMb2NhdGlvblZhbHVlIiwidmFsdWVOYW1lIiwiaXNSZXF1aXJlZCIsInV0aWwiLCJoYXNWYWx1ZSIsImZsb2F0VmFsdWUiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJfIiwiY2VpbCIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiYWx0aXR1ZGUiLCJzcGVlZCIsImFyZ3MiLCJpc05pbCIsInNhdGVsbGl0ZXMiLCJwYXJzZUludCIsIk51bWJlciIsImxlbmd0aCIsInJlc2V0VGVsbmV0QXV0aFRva2VuIiwiYWRiRXhlYyIsIm1hcCIsImFyZyIsInJlcGxhY2UiLCJnZXRHZW9Mb2NhdGlvbiIsIm91dHB1dCIsIm1lc3NhZ2UiLCJtYXRjaCIsImV4ZWMiLCJKU09OIiwic3RyaW5naWZ5IiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInJ1bkluSW1lQ29udGV4dCIsImdldENsaXBib2FyZCIsInJldHJpZXZlQ2xpcGJvYXJkIiwidHJpbSIsImdldE5vdGlmaWNhdGlvbnMiLCJnZXRTbXNMaXN0IiwibWF4IiwidHlwZVVuaWNvZGUiLCJ0ZXh0IiwicGx1cmFsaXplIiwiaW5wdXRUZXh0IiwiaW1hcCIsImVuY29kZSIsInNjYW5NZWRpYSIsImRlc3RpbmF0aW9uIiwiaW5jbHVkZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsa0JBQWtCLEdBQUcsb0JBQTNCO0FBQ0EsTUFBTUMsNkJBQTZCLEdBQUcsV0FBdEM7QUFDQSxNQUFNQyxn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QixNQUFYLEVBQW1CLFdBQW5CLENBQUwsRUFBc0M7QUFDcEMsVUFBTSxJQUFJN0MsS0FBSixDQUFXLGlDQUFnQ2tFLFdBQVksS0FBN0MsR0FDYixrREFERyxDQUFOO0FBRUQ7QUFDRixDQVpEOztlQWNlbkYsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IHBhcnNlSnNvbkRhdGEgfSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGltYXAgfSBmcm9tICd1dGY3JztcblxuY29uc3QgU0VUVElOR1NfSEVMUEVSX0lEID0gJ2lvLmFwcGl1bS5zZXR0aW5ncyc7XG5jb25zdCBTRVRUSU5HU19IRUxQRVJfTUFJTl9BQ1RJVklUWSA9ICcuU2V0dGluZ3MnO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuV2lGaUNvbm5lY3Rpb25TZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS53aWZpYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkRhdGFDb25uZWN0aW9uU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uZGF0YV9jb25uZWN0aW9uYDtcbmNvbnN0IEFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkFuaW1hdGlvblNldHRpbmdSZWNlaXZlcmA7XG5jb25zdCBBTklNQVRJT05fU0VUVElOR19BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmFuaW1hdGlvbmA7XG5jb25zdCBMT0NBTEVfU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhbGVTZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgTE9DQUxFX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhbGVgO1xuY29uc3QgTE9DQVRJT05fU0VSVklDRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLkxvY2F0aW9uU2VydmljZWA7XG5jb25zdCBMT0NBVElPTl9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhdGlvbkluZm9SZWNlaXZlcmA7XG5jb25zdCBMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhdGlvbmA7XG5jb25zdCBDTElQQk9BUkRfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuQ2xpcGJvYXJkUmVjZWl2ZXJgO1xuY29uc3QgQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmNsaXBib2FyZC5nZXRgO1xuY29uc3QgTk9USUZJQ0FUSU9OU19SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5ub3RpZmljYXRpb25zYDtcbmNvbnN0IFNNU19MSVNUX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLlNtc1JlYWRlcmA7XG5jb25zdCBTTVNfTElTVF9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zbXMucmVhZGA7XG5jb25zdCBNRURJQV9TQ0FOX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLk1lZGlhU2Nhbm5lclJlY2VpdmVyYDtcbmNvbnN0IE1FRElBX1NDQU5fQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zY2FuX21lZGlhYDtcbmNvbnN0IEFQUElVTV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5BcHBpdW1JTUVgO1xuY29uc3QgVU5JQ09ERV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5Vbmljb2RlSU1FYDtcbmNvbnN0IERFRkFVTFRfU0FURUxMSVRFU19DT1VOVCA9IDEyO1xuY29uc3QgREVGQVVMVF9BTFRJVFVERSA9IDAuMDtcblxuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNldHRpbmdzQXBwU3RhcnR1cE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFs1MDAwXSBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gKiB0byB3YWl0IHVudGlsIHRoZSBhcHAgaGFzIHN0YXJ0ZWRcbiAqL1xuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCBBcHBpdW0gU2V0dGluZ3MgaGVscGVyIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmdcbiAqIGFuZCBzdGFydHMgaXQgaWYgbmVjZXNzYXJ5XG4gKlxuICogQHBhcmFtIHtTZXR0aW5nc0FwcFN0YXJ0dXBPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgQXBwaXVtIFNldHRpbmdzIGhhcyBmYWlsZWQgdG8gc3RhcnRcbiAqIEByZXR1cm5zIHtBREJ9IHNlbGYgaW5zdGFuY2UgZm9yIGNoYWluaW5nXG4gKi9cbmNvbW1hbmRzLnJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAgPSBhc3luYyBmdW5jdGlvbiByZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwIChvcHRzID0ge30pIHtcbiAgaWYgKGF3YWl0IHRoaXMucHJvY2Vzc0V4aXN0cyhTRVRUSU5HU19IRUxQRVJfSUQpKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsb2cuZGVidWcoJ1N0YXJ0aW5nIEFwcGl1bSBTZXR0aW5ncyBhcHAnKTtcbiAgY29uc3Qge1xuICAgIHRpbWVvdXQgPSA1MDAwLFxuICB9ID0gb3B0cztcbiAgYXdhaXQgdGhpcy5zdGFydEFwcCh7XG4gICAgcGtnOiBTRVRUSU5HU19IRUxQRVJfSUQsXG4gICAgYWN0aXZpdHk6IFNFVFRJTkdTX0hFTFBFUl9NQUlOX0FDVElWSVRZLFxuICAgIGFjdGlvbjogJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICBjYXRlZ29yeTogJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICBzdG9wQXBwOiBmYWxzZSxcbiAgICB3YWl0Rm9yTGF1bmNoOiBmYWxzZSxcbiAgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnByb2Nlc3NFeGlzdHMoU0VUVElOR1NfSEVMUEVSX0lEKSwge1xuICAgICAgd2FpdE1zOiB0aW1lb3V0LFxuICAgICAgaW50ZXJ2YWxNczogMzAwLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEFwcGl1bSBTZXR0aW5ncyBhcHAgaXMgbm90IHJ1bm5pbmcgYWZ0ZXIgJHt0aW1lb3V0fW1zYCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlIHRoZSBzdGF0ZSBvZiBXaUZpIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9uIC0gVHJ1ZSB0byBlbmFibGUgYW5kIGZhbHNlIHRvIGRpc2FibGUgaXQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRW11bGF0b3IgW2ZhbHNlXSAtIFNldCBpdCB0byB0cnVlIGlmIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhbiBlbXVsYXRvciByYXRoZXIgdGhhbiBhIHJlYWwgZGV2aWNlLlxuICovXG5jb21tYW5kcy5zZXRXaWZpU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBzZXRXaWZpU3RhdGUgKG9uLCBpc0VtdWxhdG9yID0gZmFsc2UpIHtcbiAgaWYgKGlzRW11bGF0b3IpIHtcbiAgICAvLyBUaGUgc3ZjIGNvbW1hbmQgZG9lcyBub3QgcmVxdWlyZSB0byBiZSByb290IHNpbmNlIEFQSSAyNlxuICAgIGF3YWl0IHRoaXMuc2hlbGwoWydzdmMnLCAnd2lmaScsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSddLCB7XG4gICAgICBwcml2aWxlZ2VkOiBhd2FpdCB0aGlzLmdldEFwaUxldmVsKCkgPCAyNixcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICAgJy1hJywgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OLFxuICAgICAgJy1uJywgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIsXG4gICAgICAnLS1lcycsICdzZXRzdGF0dXMnLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXG4gICAgXSk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlIHRoZSBzdGF0ZSBvZiBEYXRhIHRyYW5zZmVyIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9uIC0gVHJ1ZSB0byBlbmFibGUgYW5kIGZhbHNlIHRvIGRpc2FibGUgaXQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRW11bGF0b3IgW2ZhbHNlXSAtIFNldCBpdCB0byB0cnVlIGlmIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhbiBlbXVsYXRvciByYXRoZXIgdGhhbiBhIHJlYWwgZGV2aWNlLlxuICovXG5jb21tYW5kcy5zZXREYXRhU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBzZXREYXRhU3RhdGUgKG9uLCBpc0VtdWxhdG9yID0gZmFsc2UpIHtcbiAgaWYgKGlzRW11bGF0b3IpIHtcbiAgICAvLyBUaGUgc3ZjIGNvbW1hbmQgZG9lcyBub3QgcmVxdWlyZSB0byBiZSByb290IHNpbmNlIEFQSSAyNlxuICAgIGF3YWl0IHRoaXMuc2hlbGwoWydzdmMnLCAnZGF0YScsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSddLCB7XG4gICAgICBwcml2aWxlZ2VkOiBhd2FpdCB0aGlzLmdldEFwaUxldmVsKCkgPCAyNixcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICAgJy1hJywgREFUQV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OLFxuICAgICAgJy1uJywgREFUQV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIsXG4gICAgICAnLS1lcycsICdzZXRzdGF0dXMnLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXG4gICAgXSk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2hhbmdlIHRoZSBzdGF0ZSBvZiBhbmltYXRpb24gb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICogQW5pbWF0aW9uIG9uIHRoZSBkZXZpY2UgaXMgY29udHJvbGxlZCBieSB0aGUgZm9sbG93aW5nIGdsb2JhbCBwcm9wZXJ0aWVzOlxuICogW0FOSU1BVE9SX0RVUkFUSU9OX1NDQUxFXXtAbGluayBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5HbG9iYWwuaHRtbCNBTklNQVRPUl9EVVJBVElPTl9TQ0FMRX0sXG4gKiBbVFJBTlNJVElPTl9BTklNQVRJT05fU0NBTEVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLkdsb2JhbC5odG1sI1RSQU5TSVRJT05fQU5JTUFUSU9OX1NDQUxFfSxcbiAqIFtXSU5ET1dfQU5JTUFUSU9OX1NDQUxFXXtAbGluayBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5HbG9iYWwuaHRtbCNXSU5ET1dfQU5JTUFUSU9OX1NDQUxFfS5cbiAqIFRoaXMgbWV0aG9kIHNldHMgYWxsIHRoaXMgcHJvcGVydGllcyB0byAwLjAgdG8gZGlzYWJsZSAoMS4wIHRvIGVuYWJsZSkgYW5pbWF0aW9uLlxuICpcbiAqIFR1cm5pbmcgb2ZmIGFuaW1hdGlvbiBtaWdodCBiZSB1c2VmdWwgdG8gaW1wcm92ZSBzdGFiaWxpdHlcbiAqIGFuZCByZWR1Y2UgdGVzdHMgZXhlY3V0aW9uIHRpbWUuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBvbiAtIFRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIGl0LlxuICovXG5jb21tYW5kcy5zZXRBbmltYXRpb25TdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldEFuaW1hdGlvblN0YXRlIChvbikge1xuICBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAnLWEnLCBBTklNQVRJT05fU0VUVElOR19BQ1RJT04sXG4gICAgJy1uJywgQU5JTUFUSU9OX1NFVFRJTkdfUkVDRUlWRVIsXG4gICAgJy0tZXMnLCAnc2V0c3RhdHVzJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ1xuICBdKTtcbn07XG5cbi8qKlxuICogQ2hhbmdlIHRoZSBsb2NhbGUgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LiBEb24ndCBuZWVkIHRvIHJlYm9vdCB0aGUgZGV2aWNlIGFmdGVyIGNoYW5naW5nIHRoZSBsb2NhbGUuXG4gKiBUaGlzIG1ldGhvZCBzZXRzIGFuIGFyYml0cmFyeSBsb2NhbGUgZm9sbG93aW5nOlxuICogICBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWwjTG9jYWxlKGphdmEubGFuZy5TdHJpbmcsJTIwamF2YS5sYW5nLlN0cmluZylcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZS4gZS5nLiBlbiwgamFcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb3VudHJ5IC0gQ291bnRyeS4gZS5nLiBVUywgSlBcbiAqIEBwYXJhbSB7P3N0cmluZ30gc2NyaXB0IC0gU2NyaXB0LiBlLmcuIEhhbnMgaW4gYHpoLUhhbnMtQ05gXG4gKi9cbmNvbW1hbmRzLnNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAgPSBhc3luYyBmdW5jdGlvbiBzZXREZXZpY2VTeXNMb2NhbGVWaWFTZXR0aW5nQXBwIChsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0ID0gbnVsbCkge1xuICBjb25zdCBwYXJhbXMgPSBbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1hJywgTE9DQUxFX1NFVFRJTkdfQUNUSU9OLFxuICAgICctbicsIExPQ0FMRV9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICctLWVzJywgJ2xhbmcnLCBsYW5ndWFnZS50b0xvd2VyQ2FzZSgpLFxuICAgICctLWVzJywgJ2NvdW50cnknLCBjb3VudHJ5LnRvVXBwZXJDYXNlKClcbiAgXTtcblxuICBpZiAoc2NyaXB0KSB7XG4gICAgcGFyYW1zLnB1c2goJy0tZXMnLCAnc2NyaXB0Jywgc2NyaXB0KTtcbiAgfVxuXG4gIGF3YWl0IHRoaXMuc2hlbGwocGFyYW1zKTtcbn07XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMb2NhdGlvblxuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSBsb25naXR1ZGUgLSBWYWxpZCBsb25naXR1ZGUgdmFsdWUuXG4gKiBAcHJvcGVydHkge251bWJlcnxzdHJpbmd9IGxhdGl0dWRlIC0gVmFsaWQgbGF0aXR1ZGUgdmFsdWUuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBhbHRpdHVkZSAtIFZhbGlkIGFsdGl0dWRlIHZhbHVlLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gc2F0ZWxsaXRlcyBbMTJdIC0gTnVtYmVyIG9mIHNhdGVsbGl0ZXMgYmVpbmcgdHJhY2tlZCAoMS0xMikuXG4gKiBUaGlzIHZhbHVlIGlzIGlnbm9yZWQgb24gcmVhbCBkZXZpY2VzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gc3BlZWQgLSBWYWxpZCBzcGVlZCB2YWx1ZS5cbiAqIFNob3VsZCBiZSBncmVhdGVyIHRoYW4gMC4wIG1ldGVycy9zZWNvbmQgZm9yIHJlYWwgZGV2aWNlcyBvciAwLjAga25vdHNcbiAqIGZvciBlbXVsYXRvcnMuXG4gKi9cblxuLyoqXG4gKiBFbXVsYXRlIGdlb2xvY2F0aW9uIGNvb3JkaW5hdGVzIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge0xvY2F0aW9ufSBsb2NhdGlvbiAtIExvY2F0aW9uIG9iamVjdC4gVGhlIGBhbHRpdHVkZWAgdmFsdWUgaXMgaWdub3JlZFxuICogd2hpbGUgbW9ja2luZyB0aGUgcG9zaXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRW11bGF0b3IgW2ZhbHNlXSAtIFNldCBpdCB0byB0cnVlIGlmIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhbiBlbXVsYXRvciByYXRoZXIgdGhhbiBhIHJlYWwgZGV2aWNlLlxuICovXG5jb21tYW5kcy5zZXRHZW9Mb2NhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHNldEdlb0xvY2F0aW9uIChsb2NhdGlvbiwgaXNFbXVsYXRvciA9IGZhbHNlKSB7XG4gIGNvbnN0IGZvcm1hdExvY2F0aW9uVmFsdWUgPSAodmFsdWVOYW1lLCBpc1JlcXVpcmVkID0gdHJ1ZSkgPT4ge1xuICAgIGlmICghdXRpbC5oYXNWYWx1ZShsb2NhdGlvblt2YWx1ZU5hbWVdKSkge1xuICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3ZhbHVlTmFtZX0gbXVzdCBiZSBwcm92aWRlZGApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZsb2F0VmFsdWUgPSBwYXJzZUZsb2F0KGxvY2F0aW9uW3ZhbHVlTmFtZV0pO1xuICAgIGlmICghaXNOYU4oZmxvYXRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBgJHtfLmNlaWwoZmxvYXRWYWx1ZSwgNSl9YDtcbiAgICB9XG4gICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt2YWx1ZU5hbWV9IGlzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgZmxvYXQgbnVtYmVyLiBgICtcbiAgICAgICAgYCcke2xvY2F0aW9uW3ZhbHVlTmFtZV19JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuICBjb25zdCBsb25naXR1ZGUgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdsb25naXR1ZGUnKTtcbiAgY29uc3QgbGF0aXR1ZGUgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdsYXRpdHVkZScpO1xuICBjb25zdCBhbHRpdHVkZSA9IGZvcm1hdExvY2F0aW9uVmFsdWUoJ2FsdGl0dWRlJywgZmFsc2UpO1xuICBjb25zdCBzcGVlZCA9IGZvcm1hdExvY2F0aW9uVmFsdWUoJ3NwZWVkJywgZmFsc2UpO1xuICBpZiAoaXNFbXVsYXRvcikge1xuICAgIGNvbnN0IGFyZ3MgPSBbbG9uZ2l0dWRlLCBsYXRpdHVkZV07XG4gICAgaWYgKCFfLmlzTmlsKGFsdGl0dWRlKSkge1xuICAgICAgYXJncy5wdXNoKGFsdGl0dWRlKTtcbiAgICB9XG4gICAgY29uc3Qgc2F0ZWxsaXRlcyA9IHBhcnNlSW50KGxvY2F0aW9uLnNhdGVsbGl0ZXMsIDEwKTtcbiAgICBpZiAoIU51bWJlci5pc05hTihzYXRlbGxpdGVzKSAmJiBzYXRlbGxpdGVzID4gMCAmJiBzYXRlbGxpdGVzIDw9IDEyKSB7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgIGFyZ3MucHVzaChgJHtERUZBVUxUX0FMVElUVURFfWApO1xuICAgICAgfVxuICAgICAgYXJncy5wdXNoKGAke3NhdGVsbGl0ZXN9YCk7XG4gICAgfVxuICAgIGlmICghXy5pc05pbChzcGVlZCkpIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgYXJncy5wdXNoKGAke0RFRkFVTFRfQUxUSVRVREV9YCk7XG4gICAgICB9XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCA0KSB7XG4gICAgICAgIGFyZ3MucHVzaChgJHtERUZBVUxUX1NBVEVMTElURVNfQ09VTlR9YCk7XG4gICAgICB9XG4gICAgICBhcmdzLnB1c2goc3BlZWQpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlc2V0VGVsbmV0QXV0aFRva2VuKCk7XG4gICAgYXdhaXQgdGhpcy5hZGJFeGVjKFsnZW11JywgJ2dlbycsICdmaXgnLCAuLi5hcmdzXSk7XG4gICAgLy8gQSB3b3JrYXJvdW5kIGZvciBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD0yMDYxODBcbiAgICBhd2FpdCB0aGlzLmFkYkV4ZWMoWydlbXUnLCAnZ2VvJywgJ2ZpeCcsIC4uLihhcmdzLm1hcCgoYXJnKSA9PiBhcmcucmVwbGFjZSgnLicsICcsJykpKV0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAnYW0nLCAnc3RhcnRzZXJ2aWNlJyxcbiAgICAgICctZScsICdsb25naXR1ZGUnLCBsb25naXR1ZGUsXG4gICAgICAnLWUnLCAnbGF0aXR1ZGUnLCBsYXRpdHVkZSxcbiAgICBdO1xuICAgIGlmICh1dGlsLmhhc1ZhbHVlKGFsdGl0dWRlKSkge1xuICAgICAgYXJncy5wdXNoKCctZScsICdhbHRpdHVkZScsIGFsdGl0dWRlKTtcbiAgICB9XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUoc3BlZWQpKSB7XG4gICAgICBhcmdzLnB1c2goJy1lJywgJ3NwZWVkJywgc3BlZWQpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goTE9DQVRJT05fU0VSVklDRSk7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChhcmdzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGN1cnJlbnQgZ2VvIGxvY2F0aW9uIGZyb20gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtMb2NhdGlvbn0gVGhlIGN1cnJlbnQgbG9jYXRpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY3VycmVudCBsb2NhdGlvbiBjYW5ub3QgYmUgcmV0cmlldmVkXG4gKi9cbmNvbW1hbmRzLmdldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gZ2V0R2VvTG9jYXRpb24gKCkge1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLW4nLCBMT0NBVElPTl9SRUNFSVZFUixcbiAgICAgICctYScsIExPQ0FUSU9OX1JFVFJJRVZBTF9BQ1RJT04sXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIHRoZSBjdXJyZW50IGdlbyBjb29yZGluYXRlcyBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIHVwIHRvIGRhdGUgYW5kIGhhcyBsb2NhdGlvbiBwZXJtaXNzaW9ucy4gQWxzbyB0aGUgbG9jYXRpb24gYCArXG4gICAgICBgc2VydmljZXMgbXVzdCBiZSBlbmFibGVkIG9uIHRoZSBkZXZpY2UuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSAvZGF0YT1cIigtP1tcXGQuXSspXFxzKygtP1tcXGQuXSspXFxzKygtP1tcXGQuXSspXCIvLmV4ZWMob3V0cHV0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIHRoZSBhY3R1YWwgbG9jYXRpb24gdmFsdWVzIGZyb20gdGhlIGNvbW1hbmQgb3V0cHV0OiAke291dHB1dH1gKTtcbiAgfVxuICBjb25zdCBsb2NhdGlvbiA9IHtcbiAgICBsYXRpdHVkZTogbWF0Y2hbMV0sXG4gICAgbG9uZ2l0dWRlOiBtYXRjaFsyXSxcbiAgICBhbHRpdHVkZTogbWF0Y2hbM10sXG4gIH07XG4gIGxvZy5kZWJ1ZyhgR290IGdlbyBjb29yZGluYXRlczogJHtKU09OLnN0cmluZ2lmeShsb2NhdGlvbil9YCk7XG4gIHJldHVybiBsb2NhdGlvbjtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgdGhlIGdpdmVuIGVkaXRvciBhY3Rpb24gb24gdGhlIGZvY3VzZWQgaW5wdXQgZmllbGQuXG4gKiBUaGlzIG1ldGhvZCByZXF1aXJlcyBBcHBpdW0gU2V0dGluZ3MgaGVscGVyIHRvIGJlIGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlLlxuICogTm8gZXhjZXB0aW9uIGlzIHRocm93biBpZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGFjdGlvbi5cbiAqIFlvdSBtdXN0IGludmVzdGlnYXRlIHRoZSBsb2djYXQgb3V0cHV0IGlmIHNvbWV0aGluZyBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBhY3Rpb24gLSBFaXRoZXIgYWN0aW9uIGNvZGUgb3IgbmFtZS4gVGhlIGZvbGxvd2luZyBhY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMgYXJlIHN1cHBvcnRlZDogYG5vcm1hbCwgdW5zcGVjaWZpZWQsIG5vbmUsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLCBzZWFyY2gsIHNlbmQsIG5leHQsIGRvbmUsIHByZXZpb3VzYFxuICovXG5jb21tYW5kcy5wZXJmb3JtRWRpdG9yQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUVkaXRvckFjdGlvbiAoYWN0aW9uKSB7XG4gIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyBlZGl0b3IgYWN0aW9uOiAke2FjdGlvbn1gKTtcbiAgYXdhaXQgdGhpcy5ydW5JbkltZUNvbnRleHQoQVBQSVVNX0lNRSxcbiAgICBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnNoZWxsKFsnaW5wdXQnLCAndGV4dCcsIGAvJHthY3Rpb259L2BdKSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBkZXZpY2UncyBjbGlwYm9hcmQuXG4gKiBUaGUgbWV0aG9kIHdvcmtzIGZvciBBbmRyb2lkIGJlbG93IGFuZCBhYm92ZSAyOS5cbiAqIEl0IHRlbW9yYXJpbHkgZW5mb3JjZXMgdGhlIElNRSBzZXR0aW5nIGluIG9yZGVyIHRvIHdvcmthcm91bmRcbiAqIHNlY3VyaXR5IGxpbWl0YXRpb25zIGlmIG5lZWRlZC5cbiAqIFRoaXMgbWV0aG9kIG9ubHkgd29ya3MgaWYgQXBwaXVtIFNldHRpbmdzIHYuIDIuMTUrIGlzIGluc3RhbGxlZFxuICogb24gdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGFjdHVhbCBjb250ZW50IG9mIHRoZSBtYWluIGNsaXBib2FyZCBhc1xuICogYmFzZTY0LWVuY29kZWQgc3RyaW5nIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgY2xpcGJvYXJkIGlzIGVtcHR5XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgcHJvYmxlbSB3aGlsZSBnZXR0aW5nIHRoZVxuICogY2xpcGJvYXJkIGNvbnRhbnRcbiAqL1xuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q2xpcGJvYXJkICgpIHtcbiAgbG9nLmRlYnVnKCdHZXR0aW5nIHRoZSBjbGlwYm9hcmQgY29udGVudCcpO1xuICBjb25zdCByZXRyaWV2ZUNsaXBib2FyZCA9IGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctbicsIENMSVBCT0FSRF9SRUNFSVZFUixcbiAgICAnLWEnLCBDTElQQk9BUkRfUkVUUklFVkFMX0FDVElPTixcbiAgXSk7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA+PSAyOSlcbiAgICAgID8gKGF3YWl0IHRoaXMucnVuSW5JbWVDb250ZXh0KEFQUElVTV9JTUUsIHJldHJpZXZlQ2xpcGJvYXJkKSlcbiAgICAgIDogKGF3YWl0IHJldHJpZXZlQ2xpcGJvYXJkKCkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSB0aGUgY3VycmVudCBjbGlwYm9hcmQgY29udGVudCBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIHVwIHRvIGRhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSAvZGF0YT1cIihbXlwiXSopXCIvLmV4ZWMob3V0cHV0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIHRoZSBhY3R1YWwgY2xpYm9hcmQgY29udGVudCBmcm9tIHRoZSBjb21tYW5kIG91dHB1dDogJHtvdXRwdXR9YCk7XG4gIH1cbiAgcmV0dXJuIF8udHJpbShtYXRjaFsxXSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBBbmRyb2lkIG5vdGlmaWNhdGlvbnMgdmlhIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIuXG4gKiBBcHBpdW0gU2V0dGluZ3MgYXBwIGl0c2VsZiBtdXN0IGJlICptYW51YWxseSogZ3JhbnRlZCB0byBhY2Nlc3Mgbm90aWZpY2F0aW9uc1xuICogdW5kZXIgZGV2aWNlIFNldHRpbmdzIGluIG9yZGVyIHRvIG1ha2UgdGhpcyBmZWF0dXJlIHdvcmtpbmcuXG4gKiBBcHBpdW0gU2V0dGluZ3MgaGVscGVyIGtlZXBzIGFsbCB0aGUgYWN0aXZlIG5vdGlmaWNhdGlvbnMgcGx1c1xuICogbm90aWZpY2F0aW9ucyB0aGF0IGFwcGVhcmVkIHdoaWxlIGl0IHdhcyBydW5uaW5nIGluIHRoZSBpbnRlcm5hbCBidWZmZXIsXG4gKiBidXQgbm8gbW9yZSB0aGFuIDEwMCBpdGVtcyBhbHRvZ2V0aGVyLiBOZXdseSBhcHBlYXJlZCBub3RpZmljYXRpb25zXG4gKiBhcmUgYWx3YXlzIGFkZGVkIHRvIHRoZSBoZWFkIG9mIHRoZSBub3RpZmljYXRpb25zIGFycmF5LlxuICogVGhlIGBpc1JlbW92ZWRgIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCBmb3Igbm90aWZpY2F0aW9ucyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLlxuICpcbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9TdGF0dXNCYXJOb3RpZmljYXRpb25cbiAqIGFuZCBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uLmh0bWxcbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGF2YWlsYWJsZSBub3RpZmljYXRpb24gcHJvcGVydGllcyBhbmQgdGhlaXIgdmFsdWVzLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBleGFtcGxlIG91dHB1dCBpczpcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJzdGF0dXNCYXJOb3RpZmljYXRpb25zXCI6W1xuICogICAgIHtcbiAqICAgICAgIFwiaXNHcm91cFwiOmZhbHNlLFxuICogICAgICAgXCJwYWNrYWdlTmFtZVwiOlwiaW8uYXBwaXVtLnNldHRpbmdzXCIsXG4gKiAgICAgICBcImlzQ2xlYXJhYmxlXCI6ZmFsc2UsXG4gKiAgICAgICBcImlzT25nb2luZ1wiOnRydWUsXG4gKiAgICAgICBcImlkXCI6MSxcbiAqICAgICAgIFwidGFnXCI6bnVsbCxcbiAqICAgICAgIFwibm90aWZpY2F0aW9uXCI6e1xuICogICAgICAgICBcInRpdGxlXCI6bnVsbCxcbiAqICAgICAgICAgXCJiaWdUaXRsZVwiOlwiQXBwaXVtIFNldHRpbmdzXCIsXG4gKiAgICAgICAgIFwidGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwiYmlnVGV4dFwiOlwiS2VlcCB0aGlzIHNlcnZpY2UgcnVubmluZywgc28gQXBwaXVtIGZvciBBbmRyb2lkIGNhbiBwcm9wZXJseSBpbnRlcmFjdCB3aXRoIHNldmVyYWwgc3lzdGVtIEFQSXNcIixcbiAqICAgICAgICAgXCJ0aWNrZXJUZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJzdWJUZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJpbmZvVGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwidGVtcGxhdGVcIjpcImFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbiRCaWdUZXh0U3R5bGVcIlxuICogICAgICAgfSxcbiAqICAgICAgIFwidXNlckhhbmRsZVwiOjAsXG4gKiAgICAgICBcImdyb3VwS2V5XCI6XCIwfGlvLmFwcGl1bS5zZXR0aW5nc3wxfG51bGx8MTAxMzNcIixcbiAqICAgICAgIFwib3ZlcnJpZGVHcm91cEtleVwiOm51bGwsXG4gKiAgICAgICBcInBvc3RUaW1lXCI6MTU3Njg1MzUxODg1MCxcbiAqICAgICAgIFwia2V5XCI6XCIwfGlvLmFwcGl1bS5zZXR0aW5nc3wxfG51bGx8MTAxMzNcIixcbiAqICAgICAgIFwiaXNSZW1vdmVkXCI6ZmFsc2VcbiAqICAgICB9XG4gKiAgIF1cbiAqIH1cbiAqIGBgYFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBub3RpZmljYXRpb25zIGxpc3RcbiAqL1xuY29tbWFuZHMuZ2V0Tm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvbnMgKCkge1xuICBsb2cuZGVidWcoJ1JldHJpZXZpbmcgbm90aWZpY2F0aW9ucycpO1xuICAvLyBTb21laG93IHByb3ZpZGluZyB0aGUgYC1uYCBhcmcgdG8gdGhlIGBhbWAgdW5kZXJuZWF0aFxuICAvLyByZW5kZXJzIHRoZSBicm9hZGNhc3QgdG8gZmFpbCBpbnN0ZWFkIG9mIHN0YXJ0aW5nIHRoZVxuICAvLyBBcHBpdW0gU2V0dGluZ3MgYXBwLiBUaGlzIG9ubHkgaGFwcGVucyB0byB0aGUgbm90aWZpY2F0aW9uc1xuICAvLyByZWNlaXZlclxuICBhd2FpdCB0aGlzLnJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAoKTtcbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICAgJy1hJywgTk9USUZJQ0FUSU9OU19SRVRSSUVWQUxfQUNUSU9OLFxuICAgIF0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSBub3RpZmljYXRpb25zIGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIGFuZCBpcyB1cCB0byBkYXRlLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gcGFyc2VKc29uRGF0YShvdXRwdXQsICdub3RpZmljYXRpb25zJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNtc0xpc3RPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWF4IFsxMDBdIC0gVGhlIG1heGltdW0gY291bnQgb2YgcmVjZW50IG1lc3NhZ2VzXG4gKiB0byByZXRyaWV2ZVxuICovXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHRoZSBtb3N0IHJlY2VudCBTTVNcbiAqIHByb3BlcnRpZXMgbGlzdCB2aWEgQXBwaXVtIFNldHRpbmdzIGhlbHBlci5cbiAqIE1lc3NhZ2VzIGFyZSBzb3J0ZWQgYnkgZGF0ZSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICpcbiAqIEBwYXJhbSB7U21zTGlzdE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBleGFtcGxlIG91dHB1dCBpczpcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJpdGVtc1wiOltcbiAqICAgICB7XG4gKiAgICAgICBcImlkXCI6XCIyXCIsXG4gKiAgICAgICBcImFkZHJlc3NcIjpcIisxMjM0NTY3ODlcIixcbiAqICAgICAgIFwicGVyc29uXCI6bnVsbCxcbiAqICAgICAgIFwiZGF0ZVwiOlwiMTU4MTkzNjQyMjIwM1wiLFxuICogICAgICAgXCJyZWFkXCI6XCIwXCIsXG4gKiAgICAgICBcInN0YXR1c1wiOlwiLTFcIixcbiAqICAgICAgIFwidHlwZVwiOlwiMVwiLFxuICogICAgICAgXCJzdWJqZWN0XCI6bnVsbCxcbiAqICAgICAgIFwiYm9keVwiOlwiXFxcInRleHQgbWVzc2FnZTJcXFwiXCIsXG4gKiAgICAgICBcInNlcnZpY2VDZW50ZXJcIjpudWxsXG4gKiAgICAgfSxcbiAqICAgICB7XG4gKiAgICAgICBcImlkXCI6XCIxXCIsXG4gKiAgICAgICBcImFkZHJlc3NcIjpcIisxMjM0NTY3ODlcIixcbiAqICAgICAgIFwicGVyc29uXCI6bnVsbCxcbiAqICAgICAgIFwiZGF0ZVwiOlwiMTU4MTkzNjM4Mjc0MFwiLFxuICogICAgICAgXCJyZWFkXCI6XCIwXCIsXG4gKiAgICAgICBcInN0YXR1c1wiOlwiLTFcIixcbiAqICAgICAgIFwidHlwZVwiOlwiMVwiLFxuICogICAgICAgXCJzdWJqZWN0XCI6bnVsbCxcbiAqICAgICAgIFwiYm9keVwiOlwiXFxcInRleHQgbWVzc2FnZVxcXCJcIixcbiAqICAgICAgIFwic2VydmljZUNlbnRlclwiOm51bGxcbiAqICAgICB9XG4gKiAgIF0sXG4gKiAgIFwidG90YWxcIjoyXG4gKiB9XG4gKiBgYGBcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgU01TIGxpc3RcbiAqL1xuY29tbWFuZHMuZ2V0U21zTGlzdCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNtc0xpc3QgKG9wdHMgPSB7fSkge1xuICBsb2cuZGVidWcoJ1JldHJpZXZpbmcgdGhlIHJlY2VudCBTTVMgbWVzc2FnZXMnKTtcbiAgY29uc3QgYXJncyA9IFtcbiAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAnLW4nLCBTTVNfTElTVF9SRUNFSVZFUixcbiAgICAnLWEnLCBTTVNfTElTVF9SRVRSSUVWQUxfQUNUSU9OLFxuICBdO1xuICBpZiAob3B0cy5tYXgpIHtcbiAgICBhcmdzLnB1c2goJy0tZXMnLCAnbWF4Jywgb3B0cy5tYXgpO1xuICB9XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChhcmdzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgU01TIGxpc3QgZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgYW5kIGlzIHVwIHRvIGRhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBwYXJzZUpzb25EYXRhKG91dHB1dCwgJ1NNUyBsaXN0Jyk7XG59O1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUaGUgc3RyaW5nIHRvIHR5cGVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKi9cbmNvbW1hbmRzLnR5cGVVbmljb2RlID0gYXN5bmMgZnVuY3Rpb24gdHlwZVVuaWNvZGUgKHRleHQpIHtcbiAgaWYgKF8uaXNOaWwodGV4dCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0ZXh0ID0gYCR7dGV4dH1gO1xuICBsb2cuZGVidWcoYFR5cGluZyAke3V0aWwucGx1cmFsaXplKCdjaGFyYWN0ZXInLCB0ZXh0Lmxlbmd0aCwgdHJ1ZSl9YCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChcbiAgICBVTklDT0RFX0lNRSwgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5pbnB1dFRleHQoaW1hcC5lbmNvZGUodGV4dCkpXG4gICk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyByZWN1cnNpdmUgbWVkaWEgc2NhbiBhdCB0aGUgZ2l2ZW4gZGVzdGluYXRpb24uXG4gKiBBbGwgc3VjY2Vzc2Z1bGx5IHNjYW5uZWQgaXRlbXMgYXJlIGJlaW5nIGFkZGVkIHRvIHRoZSBkZXZpY2Unc1xuICogbWVkaWEgbGlicmFyeS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdGluYXRpb24gRmlsZS9mb2xkZXIgcGF0aCBvbiB0aGUgcmVtb3RlIGRldmljZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gdW5leHBlY3RlZCBlcnJvciBieSBzY2FubmluZy5cbiAqL1xuY29tbWFuZHMuc2Nhbk1lZGlhID0gYXN5bmMgZnVuY3Rpb24gc2Nhbk1lZGlhIChkZXN0aW5hdGlvbikge1xuICBsb2cuZGVidWcoYFNjYW5uaW5nICcke2Rlc3RpbmF0aW9ufScgZm9yIG1lZGlhIGZpbGVzYCk7XG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctbicsIE1FRElBX1NDQU5fUkVDRUlWRVIsXG4gICAgJy1hJywgTUVESUFfU0NBTl9BQ1RJT04sXG4gICAgJy0tZXMnLCAncGF0aCcsIGRlc3RpbmF0aW9uXG4gIF0pO1xuICBpZiAoIV8uaW5jbHVkZXMob3V0cHV0LCAncmVzdWx0PS0xJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1lZGlhIGNvdWxkIGJlIHNjYW5uZWQgYXQgJyR7ZGVzdGluYXRpb259Jy4gYCArXG4gICAgICBgQ2hlY2sgdGhlIGRldmljZSBsb2djYXQgb3V0cHV0IGZvciBtb3JlIGRldGFpbHMuYCk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvc2V0dGluZ3MtY2xpZW50LWNvbW1hbmRzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
@@ -9,18 +9,18 @@ import ini from 'ini';
|
|
|
9
9
|
|
|
10
10
|
const PHONE_NUMBER_PATTERN = /^[+]?[(]?[0-9]*[)]?[-\s.]?[0-9]*[-\s.]?[0-9]{2,}$/im;
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
emuMethods.POWER_AC_STATES = {
|
|
12
|
+
const emuMethods = {};
|
|
13
|
+
emuMethods.POWER_AC_STATES = Object.freeze({
|
|
14
14
|
POWER_AC_ON: 'on',
|
|
15
15
|
POWER_AC_OFF: 'off'
|
|
16
|
-
};
|
|
17
|
-
emuMethods.GSM_CALL_ACTIONS = {
|
|
16
|
+
});
|
|
17
|
+
emuMethods.GSM_CALL_ACTIONS = Object.freeze({
|
|
18
18
|
GSM_CALL: 'call',
|
|
19
19
|
GSM_ACCEPT: 'accept',
|
|
20
20
|
GSM_CANCEL: 'cancel',
|
|
21
21
|
GSM_HOLD: 'hold'
|
|
22
|
-
};
|
|
23
|
-
emuMethods.GSM_VOICE_STATES = {
|
|
22
|
+
});
|
|
23
|
+
emuMethods.GSM_VOICE_STATES = Object.freeze({
|
|
24
24
|
GSM_VOICE_UNREGISTERED: 'unregistered',
|
|
25
25
|
GSM_VOICE_HOME: 'home',
|
|
26
26
|
GSM_VOICE_ROAMING: 'roaming',
|
|
@@ -28,10 +28,10 @@ emuMethods.GSM_VOICE_STATES = {
|
|
|
28
28
|
GSM_VOICE_DENIED: 'denied',
|
|
29
29
|
GSM_VOICE_OFF: 'off',
|
|
30
30
|
GSM_VOICE_ON: 'on'
|
|
31
|
-
};
|
|
31
|
+
});
|
|
32
32
|
emuMethods.GSM_SIGNAL_STRENGTHS = [0, 1, 2, 3, 4];
|
|
33
33
|
|
|
34
|
-
emuMethods.NETWORK_SPEED = {
|
|
34
|
+
emuMethods.NETWORK_SPEED = Object.freeze({
|
|
35
35
|
GSM: 'gsm', // GSM/CSD (up: 14.4, down: 14.4).
|
|
36
36
|
SCSD: 'scsd', // HSCSD (up: 14.4, down: 57.6).
|
|
37
37
|
GPRS: 'gprs', // GPRS (up: 28.8, down: 57.6).
|
|
@@ -41,16 +41,26 @@ emuMethods.NETWORK_SPEED = {
|
|
|
41
41
|
LTE: 'lte', // LTE (up: 58,000, down: 173,000).
|
|
42
42
|
EVDO: 'evdo', // EVDO (up: 75,000, down: 280,000).
|
|
43
43
|
FULL: 'full' // No limit, the default (up: 0.0, down: 0.0).
|
|
44
|
-
};
|
|
44
|
+
});
|
|
45
45
|
|
|
46
|
-
emuMethods.SENSORS = {
|
|
46
|
+
emuMethods.SENSORS = Object.freeze({
|
|
47
47
|
ACCELERATION: 'acceleration',
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
GYROSCOPE: 'gyroscope',
|
|
49
|
+
MAGNETIC_FIELD: 'magnetic-field',
|
|
50
|
+
ORIENTATION: 'orientation',
|
|
50
51
|
TEMPERATURE: 'temperature',
|
|
52
|
+
PROXIMITY: 'proximity',
|
|
53
|
+
LIGHT: 'light',
|
|
51
54
|
PRESSURE: 'pressure',
|
|
52
|
-
HUMIDITY: 'humidity'
|
|
53
|
-
|
|
55
|
+
HUMIDITY: 'humidity',
|
|
56
|
+
MAGNETIC_FIELD_UNCALIBRATED: 'magnetic-field-uncalibrated',
|
|
57
|
+
GYROSCOPE_UNCALIBRATED: 'gyroscope-uncalibrated',
|
|
58
|
+
HINGE_ANGLE0: 'hinge-angle0',
|
|
59
|
+
HINGE_ANGLE1: 'hinge-angle1',
|
|
60
|
+
HINGE_ANGLE2: 'hinge-angle2',
|
|
61
|
+
HEART_RATE: 'heart-rate',
|
|
62
|
+
RGBC_LIGHT: 'rgbc-light',
|
|
63
|
+
});
|
|
54
64
|
|
|
55
65
|
/**
|
|
56
66
|
* @typedef {Object} EmuInfo
|
|
@@ -159,7 +169,8 @@ emuMethods.rotate = async function rotate () {
|
|
|
159
169
|
*/
|
|
160
170
|
emuMethods.powerAC = async function powerAC (state = 'on') {
|
|
161
171
|
if (_.values(emuMethods.POWER_AC_STATES).indexOf(state) === -1) {
|
|
162
|
-
throw new
|
|
172
|
+
throw new TypeError(`Wrong power AC state sent '${state}'. `
|
|
173
|
+
+ `Supported values: ${_.values(emuMethods.POWER_AC_STATES)}]`);
|
|
163
174
|
}
|
|
164
175
|
await this.adbExecEmu(['power', 'ac', state]);
|
|
165
176
|
};
|
|
@@ -173,11 +184,13 @@ emuMethods.powerAC = async function powerAC (state = 'on') {
|
|
|
173
184
|
*/
|
|
174
185
|
emuMethods.sensorSet = async function sensorSet (sensor, value) {
|
|
175
186
|
if (!_.includes(emuMethods.SENSORS, sensor)) {
|
|
176
|
-
throw new
|
|
187
|
+
throw new TypeError(`Unsupported sensor sent '${sensor}'. `
|
|
188
|
+
+ `Supported values: ${_.values(emuMethods.SENSORS)}]`);
|
|
177
189
|
}
|
|
178
|
-
value
|
|
179
|
-
|
|
180
|
-
|
|
190
|
+
if (_.isNil(value) || value === '') {
|
|
191
|
+
throw new TypeError(`Missing/invalid sensor value argument. `
|
|
192
|
+
+ `You need to provide a valid value to set to the sensor in `
|
|
193
|
+
+ `format <value-a>[:<value-b>[:<value-c>[...]]].`);
|
|
181
194
|
}
|
|
182
195
|
await this.adbExecEmu(['sensor', 'set', sensor, value]);
|
|
183
196
|
};
|
|
@@ -23,6 +23,8 @@ const CLIPBOARD_RETRIEVAL_ACTION = `${SETTINGS_HELPER_ID}.clipboard.get`;
|
|
|
23
23
|
const NOTIFICATIONS_RETRIEVAL_ACTION = `${SETTINGS_HELPER_ID}.notifications`;
|
|
24
24
|
const SMS_LIST_RECEIVER = `${SETTINGS_HELPER_ID}/.receivers.SmsReader`;
|
|
25
25
|
const SMS_LIST_RETRIEVAL_ACTION = `${SETTINGS_HELPER_ID}.sms.read`;
|
|
26
|
+
const MEDIA_SCAN_RECEIVER = `${SETTINGS_HELPER_ID}/.receivers.MediaScannerReceiver`;
|
|
27
|
+
const MEDIA_SCAN_ACTION = `${SETTINGS_HELPER_ID}.scan_media`;
|
|
26
28
|
const APPIUM_IME = `${SETTINGS_HELPER_ID}/.AppiumIME`;
|
|
27
29
|
const UNICODE_IME = `${SETTINGS_HELPER_ID}/.UnicodeIME`;
|
|
28
30
|
const DEFAULT_SATELLITES_COUNT = 12;
|
|
@@ -301,7 +303,6 @@ commands.performEditorAction = async function performEditorAction (action) {
|
|
|
301
303
|
async () => await this.shell(['input', 'text', `/${action}/`]));
|
|
302
304
|
};
|
|
303
305
|
|
|
304
|
-
|
|
305
306
|
/**
|
|
306
307
|
* Retrieves the text content of the device's clipboard.
|
|
307
308
|
* The method works for Android below and above 29.
|
|
@@ -499,4 +500,26 @@ commands.typeUnicode = async function typeUnicode (text) {
|
|
|
499
500
|
return true;
|
|
500
501
|
};
|
|
501
502
|
|
|
503
|
+
/**
|
|
504
|
+
* Performs recursive media scan at the given destination.
|
|
505
|
+
* All successfully scanned items are being added to the device's
|
|
506
|
+
* media library.
|
|
507
|
+
*
|
|
508
|
+
* @param {string} destination File/folder path on the remote device.
|
|
509
|
+
* @throws {Error} If there was an unexpected error by scanning.
|
|
510
|
+
*/
|
|
511
|
+
commands.scanMedia = async function scanMedia (destination) {
|
|
512
|
+
log.debug(`Scanning '${destination}' for media files`);
|
|
513
|
+
const output = await this.shell([
|
|
514
|
+
'am', 'broadcast',
|
|
515
|
+
'-n', MEDIA_SCAN_RECEIVER,
|
|
516
|
+
'-a', MEDIA_SCAN_ACTION,
|
|
517
|
+
'--es', 'path', destination
|
|
518
|
+
]);
|
|
519
|
+
if (!_.includes(output, 'result=-1')) {
|
|
520
|
+
throw new Error(`No media could be scanned at '${destination}'. ` +
|
|
521
|
+
`Check the device logcat output for more details.`);
|
|
522
|
+
}
|
|
523
|
+
};
|
|
524
|
+
|
|
502
525
|
export default commands;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-adb",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.17.0",
|
|
4
4
|
"description": "Android Debug Bridge interface",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"mocha-junit-reporter": "^2.0.0",
|
|
73
73
|
"mocha-multi-reporters": "^1.1.7",
|
|
74
74
|
"pre-commit": "^1.1.3",
|
|
75
|
-
"sinon": "^
|
|
75
|
+
"sinon": "^12.0.0",
|
|
76
76
|
"temp": "^0.9.0"
|
|
77
77
|
}
|
|
78
78
|
}
|