appium-android-driver 5.7.2 → 5.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/build/index.js +1 -2
- package/build/lib/android-helpers.js +2 -26
- package/build/lib/android-helpers.js.map +1 -1
- package/build/lib/bootstrap.js +1 -8
- package/build/lib/bootstrap.js.map +1 -1
- package/build/lib/commands/actions.js +1 -2
- package/build/lib/commands/actions.js.map +1 -1
- package/build/lib/commands/alert.js +1 -2
- package/build/lib/commands/alert.js.map +1 -1
- package/build/lib/commands/app-management.js +2 -16
- package/build/lib/commands/app-management.js.map +1 -1
- package/build/lib/commands/context.js +1 -15
- package/build/lib/commands/context.js.map +1 -1
- package/build/lib/commands/element.js +1 -4
- package/build/lib/commands/element.js.map +1 -1
- package/build/lib/commands/emu-console.js +1 -3
- package/build/lib/commands/emu-console.js.map +1 -1
- package/build/lib/commands/file-actions.js +1 -13
- package/build/lib/commands/file-actions.js.map +1 -1
- package/build/lib/commands/find.js +1 -5
- package/build/lib/commands/find.js.map +1 -1
- package/build/lib/commands/general.js +1 -83
- package/build/lib/commands/general.js.map +1 -1
- package/build/lib/commands/index.js +3 -3
- package/build/lib/commands/index.js.map +1 -1
- package/build/lib/commands/intent.js +1 -5
- package/build/lib/commands/intent.js.map +1 -1
- package/build/lib/commands/log.js +1 -4
- package/build/lib/commands/log.js.map +1 -1
- package/build/lib/commands/media-projection.js +1 -5
- package/build/lib/commands/media-projection.js.map +1 -1
- package/build/lib/commands/network.js +1 -7
- package/build/lib/commands/network.js.map +1 -1
- package/build/lib/commands/performance.js +1 -8
- package/build/lib/commands/performance.js.map +1 -1
- package/build/lib/commands/permissions.js +116 -0
- package/build/lib/commands/permissions.js.map +1 -0
- package/build/lib/commands/recordscreen.js +1 -3
- package/build/lib/commands/recordscreen.js.map +1 -1
- package/build/lib/commands/shell.js +4 -4
- package/build/lib/commands/shell.js.map +1 -1
- package/build/lib/commands/streamscreen.js +4 -9
- package/build/lib/commands/streamscreen.js.map +1 -1
- package/build/lib/commands/system-bars.js +1 -4
- package/build/lib/commands/system-bars.js.map +1 -1
- package/build/lib/commands/touch.js +1 -9
- package/build/lib/commands/touch.js.map +1 -1
- package/build/lib/desired-caps.js +2 -4
- package/build/lib/desired-caps.js.map +1 -1
- package/build/lib/driver.js +1 -20
- package/build/lib/driver.js.map +1 -1
- package/build/lib/uiautomator.js +1 -3
- package/build/lib/uiautomator.js.map +1 -1
- package/build/lib/unlock-helpers.js +1 -3
- package/build/lib/unlock-helpers.js.map +1 -1
- package/build/lib/utils.js +4 -1
- package/build/lib/utils.js.map +1 -1
- package/build/lib/webview-helpers.js +1 -13
- package/build/lib/webview-helpers.js.map +1 -1
- package/lib/commands/general.js +0 -112
- package/lib/commands/index.js +2 -0
- package/lib/commands/permissions.js +169 -0
- package/lib/commands/shell.js +2 -3
- package/lib/utils.js +2 -1
- package/package.json +2 -2
|
@@ -10,12 +10,10 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
10
10
|
var _driver = require("appium/driver");
|
|
11
11
|
let helpers = {},
|
|
12
12
|
extensions = {};
|
|
13
|
-
|
|
14
13
|
exports.helpers = helpers;
|
|
15
14
|
helpers.doFindElementOrEls = async function doFindElementOrEls(params) {
|
|
16
15
|
return await this.bootstrap.sendAction('find', params);
|
|
17
16
|
};
|
|
18
|
-
|
|
19
17
|
helpers.findElOrEls = async function findElOrEls(strategy, selector, mult, context = '') {
|
|
20
18
|
if (!selector) {
|
|
21
19
|
throw new Error('Must provide a selector when finding elements');
|
|
@@ -34,13 +32,11 @@ helpers.findElOrEls = async function findElOrEls(strategy, selector, mult, conte
|
|
|
34
32
|
if ((0, _driver.isErrorType)(err, _driver.errors.ProxyRequestError)) {
|
|
35
33
|
err = err.getActualError();
|
|
36
34
|
}
|
|
37
|
-
|
|
38
35
|
if ((0, _driver.isErrorType)(err, _driver.errors.NoSuchElementError)) {
|
|
39
36
|
return false;
|
|
40
37
|
}
|
|
41
38
|
throw err;
|
|
42
39
|
}
|
|
43
|
-
|
|
44
40
|
return !_lodash.default.isEmpty(element);
|
|
45
41
|
};
|
|
46
42
|
try {
|
|
@@ -63,4 +59,4 @@ helpers.findElOrEls = async function findElOrEls(strategy, selector, mult, conte
|
|
|
63
59
|
Object.assign(extensions, helpers);
|
|
64
60
|
var _default = extensions;
|
|
65
61
|
exports.default = _default;
|
|
66
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImRvRmluZEVsZW1lbnRPckVscyIsInBhcmFtcyIsImJvb3RzdHJhcCIsInNlbmRBY3Rpb24iLCJmaW5kRWxPckVscyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtdWx0IiwiY29udGV4dCIsIkVycm9yIiwibXVsdGlwbGUiLCJlbGVtZW50IiwiZG9GaW5kIiwiZXJyIiwiaXNFcnJvclR5cGUiLCJlcnJvcnMiLCJQcm94eVJlcXVlc3RFcnJvciIsImdldEFjdHVhbEVycm9yIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiXyIsImlzRW1wdHkiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwibWF0Y2giLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZmluZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5cbmxldCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuLyoqXG4gKiBSZWFzb24gZm9yIGlzb2xhdGluZyBkb0ZpbmRFbGVtZW50T3JFbHMgZnJvbSBmaW5kRWxPckVscyBpcyBmb3IgcmV1c2luZyBmaW5kRWxPckVsc1xuICogYWNyb3NzIGFuZHJvaWQtZHJpdmVycyAobGlrZSBhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcikgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvbi5cbiAqIE90aGVyIGFuZHJvaWQtZHJpdmVycyAobGlrZSBhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcikgbmVlZCB0byBvdmVycmlkZSBkb0ZpbmRFbGVtZW50T3JFbHNcbiAqIHRvIGZhY2lsaXRhdGUgZmluZEVsT3JFbHMuXG4gKi9cbmhlbHBlcnMuZG9GaW5kRWxlbWVudE9yRWxzID0gYXN5bmMgZnVuY3Rpb24gZG9GaW5kRWxlbWVudE9yRWxzIChwYXJhbXMpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2ZpbmQnLCBwYXJhbXMpO1xufTtcblxuLy8gc3RhdGVneTogbG9jYXRvciBzdHJhdGVneVxuLy8gc2VsZWN0b3I6IHRoZSBhY3R1YWwgc2VsZWN0b3IgZm9yIGZpbmRpbmcgYW4gZWxlbWVudFxuLy8gbXVsdDogbXVsdGlwbGUgZWxlbWVudHMgb3IganVzdCBvbmU/
|
|
62
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImRvRmluZEVsZW1lbnRPckVscyIsInBhcmFtcyIsImJvb3RzdHJhcCIsInNlbmRBY3Rpb24iLCJmaW5kRWxPckVscyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtdWx0IiwiY29udGV4dCIsIkVycm9yIiwibXVsdGlwbGUiLCJlbGVtZW50IiwiZG9GaW5kIiwiZXJyIiwiaXNFcnJvclR5cGUiLCJlcnJvcnMiLCJQcm94eVJlcXVlc3RFcnJvciIsImdldEFjdHVhbEVycm9yIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiXyIsImlzRW1wdHkiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwibWF0Y2giLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZmluZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5cbmxldCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuLyoqXG4gKiBSZWFzb24gZm9yIGlzb2xhdGluZyBkb0ZpbmRFbGVtZW50T3JFbHMgZnJvbSBmaW5kRWxPckVscyBpcyBmb3IgcmV1c2luZyBmaW5kRWxPckVsc1xuICogYWNyb3NzIGFuZHJvaWQtZHJpdmVycyAobGlrZSBhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcikgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvbi5cbiAqIE90aGVyIGFuZHJvaWQtZHJpdmVycyAobGlrZSBhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcikgbmVlZCB0byBvdmVycmlkZSBkb0ZpbmRFbGVtZW50T3JFbHNcbiAqIHRvIGZhY2lsaXRhdGUgZmluZEVsT3JFbHMuXG4gKi9cbmhlbHBlcnMuZG9GaW5kRWxlbWVudE9yRWxzID0gYXN5bmMgZnVuY3Rpb24gZG9GaW5kRWxlbWVudE9yRWxzIChwYXJhbXMpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2ZpbmQnLCBwYXJhbXMpO1xufTtcblxuLy8gc3RhdGVneTogbG9jYXRvciBzdHJhdGVneVxuLy8gc2VsZWN0b3I6IHRoZSBhY3R1YWwgc2VsZWN0b3IgZm9yIGZpbmRpbmcgYW4gZWxlbWVudFxuLy8gbXVsdDogbXVsdGlwbGUgZWxlbWVudHMgb3IganVzdCBvbmU/XG4vLyBjb250ZXh0OiBmaW5kaW5nIGFuIGVsZW1lbnQgZnJvbSB0aGUgcm9vdCBjb250ZXh0PyBvciBzdGFydGluZyBmcm9tIGFub3RoZXIgZWxlbWVudFxuaGVscGVycy5maW5kRWxPckVscyA9IGFzeW5jIGZ1bmN0aW9uIGZpbmRFbE9yRWxzIChzdHJhdGVneSwgc2VsZWN0b3IsIG11bHQsIGNvbnRleHQgPSAnJykge1xuICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgYSBzZWxlY3RvciB3aGVuIGZpbmRpbmcgZWxlbWVudHMnKTtcbiAgfVxuXG4gIGxldCBwYXJhbXMgPSB7XG4gICAgc3RyYXRlZ3ksXG4gICAgc2VsZWN0b3IsXG4gICAgY29udGV4dCxcbiAgICBtdWx0aXBsZTogbXVsdFxuICB9O1xuXG4gIGxldCBlbGVtZW50O1xuICBsZXQgZG9GaW5kID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5kb0ZpbmRFbGVtZW50T3JFbHMocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcblxuICAgICAgLy8gaWYgdGhlIGVycm9yIHRoYXQgY29tZXMgYmFjayBpcyBmcm9tIGEgcHJveGllZCByZXF1ZXN0LCB3ZSBuZWVkIHRvXG4gICAgICAvLyB1bndyYXAgaXQgdG8gaXRzIGFjdHVhbCBwcm90b2NvbCBlcnJvciBmaXJzdFxuICAgICAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlByb3h5UmVxdWVzdEVycm9yKSkge1xuICAgICAgICBlcnIgPSBlcnIuZ2V0QWN0dWFsRXJyb3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1leC1hc3NpZ25cbiAgICAgIH1cblxuICAgICAgLy8gbm93IHdlIGhhdmUgdG8gaW5zcGVjdCB0aGUgZXJyb3IgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgbm8gc3VjaFxuICAgICAgLy8gZWxlbWVudCBlcnJvciwgYmFzZWQgb24gdGhlIHNoYXBlIG9mIHRoZSBlcnJvciBvYmplY3QgZnJvbVxuICAgICAgLy8gYXBwaXVtL2RyaXZlclxuICAgICAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLk5vU3VjaEVsZW1lbnRFcnJvcikpIHtcbiAgICAgICAgLy8gd2UgYXJlIGZpbmUgd2l0aCB0aGlzLCBqdXN0IGluZGljYXRlIGEgcmV0cnlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIC8vIHdlIHdhbnQgdG8gcmV0dXJuIGZhbHNlIGlmIHdlIHdhbnQgdG8gcG90ZW50aWFsbHkgdHJ5IGFnYWluXG4gICAgcmV0dXJuICFfLmlzRW1wdHkoZWxlbWVudCk7XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmltcGxpY2l0V2FpdEZvckNvbmRpdGlvbihkb0ZpbmQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UubWF0Y2goL0NvbmRpdGlvbiB1bm1ldC8pKSB7XG4gICAgICAvLyBvbmx5IGdldCBoZXJlIGlmIHdlIGFyZSBsb29raW5nIGZvciBtdWx0aXBsZSBlbGVtZW50c1xuICAgICAgLy8gY29uZGl0aW9uIHdhcyBub3QgbWV0IHNldHRpbmcgcmVzIHRvIGVtcHR5IGFycmF5XG4gICAgICBlbGVtZW50ID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBpZiAobXVsdCkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIGlmIChfLmlzRW1wdHkoZWxlbWVudCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaEVsZW1lbnRFcnJvcigpO1xuICB9XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUdBLElBQUlBLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFBRUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUFDO0FBUWxDRCxPQUFPLENBQUNFLGtCQUFrQixHQUFHLGVBQWVBLGtCQUFrQixDQUFFQyxNQUFNLEVBQUU7RUFDdEUsT0FBTyxNQUFNLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxVQUFVLENBQUMsTUFBTSxFQUFFRixNQUFNLENBQUM7QUFDeEQsQ0FBQztBQU1ESCxPQUFPLENBQUNNLFdBQVcsR0FBRyxlQUFlQSxXQUFXLENBQUVDLFFBQVEsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sR0FBRyxFQUFFLEVBQUU7RUFDeEYsSUFBSSxDQUFDRixRQUFRLEVBQUU7SUFDYixNQUFNLElBQUlHLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQztFQUNsRTtFQUVBLElBQUlSLE1BQU0sR0FBRztJQUNYSSxRQUFRO0lBQ1JDLFFBQVE7SUFDUkUsT0FBTztJQUNQRSxRQUFRLEVBQUVIO0VBQ1osQ0FBQztFQUVELElBQUlJLE9BQU87RUFDWCxJQUFJQyxNQUFNLEdBQUcsWUFBWTtJQUN2QixJQUFJO01BQ0ZELE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQ1gsa0JBQWtCLENBQUNDLE1BQU0sQ0FBQztJQUNqRCxDQUFDLENBQUMsT0FBT1ksR0FBRyxFQUFFO01BSVosSUFBSSxJQUFBQyxtQkFBVyxFQUFDRCxHQUFHLEVBQUVFLGNBQU0sQ0FBQ0MsaUJBQWlCLENBQUMsRUFBRTtRQUM5Q0gsR0FBRyxHQUFHQSxHQUFHLENBQUNJLGNBQWMsRUFBRTtNQUM1QjtNQUtBLElBQUksSUFBQUgsbUJBQVcsRUFBQ0QsR0FBRyxFQUFFRSxjQUFNLENBQUNHLGtCQUFrQixDQUFDLEVBQUU7UUFFL0MsT0FBTyxLQUFLO01BQ2Q7TUFDQSxNQUFNTCxHQUFHO0lBQ1g7SUFHQSxPQUFPLENBQUNNLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDVCxPQUFPLENBQUM7RUFDNUIsQ0FBQztFQUVELElBQUk7SUFDRixNQUFNLElBQUksQ0FBQ1Usd0JBQXdCLENBQUNULE1BQU0sQ0FBQztFQUM3QyxDQUFDLENBQUMsT0FBT0MsR0FBRyxFQUFFO0lBQ1osSUFBSUEsR0FBRyxDQUFDUyxPQUFPLElBQUlULEdBQUcsQ0FBQ1MsT0FBTyxDQUFDQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRTtNQUd2RFosT0FBTyxHQUFHLEVBQUU7SUFDZCxDQUFDLE1BQU07TUFDTCxNQUFNRSxHQUFHO0lBQ1g7RUFDRjtFQUVBLElBQUlOLElBQUksRUFBRTtJQUNSLE9BQU9JLE9BQU87RUFDaEI7RUFDQSxJQUFJUSxlQUFDLENBQUNDLE9BQU8sQ0FBQ1QsT0FBTyxDQUFDLEVBQUU7SUFDdEIsTUFBTSxJQUFJSSxjQUFNLENBQUNHLGtCQUFrQixFQUFFO0VBQ3ZDO0VBQ0EsT0FBT1AsT0FBTztBQUNoQixDQUFDO0FBRURhLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDMUIsVUFBVSxFQUFFRCxPQUFPLENBQUM7QUFBQyxlQUVwQkMsVUFBVTtBQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find.js","names":["helpers","extensions","doFindElementOrEls","params","bootstrap","sendAction","findElOrEls","strategy","selector","mult","context","Error","multiple","element","doFind","err","isErrorType","errors","ProxyRequestError","getActualError","NoSuchElementError","_","isEmpty","implicitWaitForCondition","message","match","Object","assign"],"sources":["../../../lib/commands/find.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors, isErrorType } from 'appium/driver';\n\n\nlet helpers = {}, extensions = {};\n\n/**\n * Reason for isolating doFindElementOrEls from findElOrEls is for reusing findElOrEls\n * across android-drivers (like appium-uiautomator2-driver) to avoid code duplication.\n * Other android-drivers (like appium-uiautomator2-driver) need to override doFindElementOrEls\n * to facilitate findElOrEls.\n */\nhelpers.doFindElementOrEls = async function doFindElementOrEls (params) {\n return await this.bootstrap.sendAction('find', params);\n};\n\n// stategy: locator strategy\n// selector: the actual selector for finding an element\n// mult: multiple elements or just one?\n// context: finding an element from the root context? or starting from another element\nhelpers.findElOrEls = async function findElOrEls (strategy, selector, mult, context = '') {\n if (!selector) {\n throw new Error('Must provide a selector when finding elements');\n }\n\n let params = {\n strategy,\n selector,\n context,\n multiple: mult\n };\n\n let element;\n let doFind = async () => {\n try {\n element = await this.doFindElementOrEls(params);\n } catch (err) {\n\n // if the error that comes back is from a proxied request, we need to\n // unwrap it to its actual protocol error first\n if (isErrorType(err, errors.ProxyRequestError)) {\n err = err.getActualError(); // eslint-disable-line no-ex-assign\n }\n\n // now we have to inspect the error to determine if it is a no such\n // element error, based on the shape of the error object from\n // appium/driver\n if (isErrorType(err, errors.NoSuchElementError)) {\n // we are fine with this, just indicate a retry\n return false;\n }\n throw err;\n }\n\n // we want to return false if we want to potentially try again\n return !_.isEmpty(element);\n };\n\n try {\n await this.implicitWaitForCondition(doFind);\n } catch (err) {\n if (err.message && err.message.match(/Condition unmet/)) {\n // only get here if we are looking for multiple elements\n // condition was not met setting res to empty array\n element = [];\n } else {\n throw err;\n }\n }\n\n if (mult) {\n return element;\n }\n if (_.isEmpty(element)) {\n throw new errors.NoSuchElementError();\n }\n return element;\n};\n\nObject.assign(extensions, helpers);\nexport { helpers };\nexport default extensions;\n"],"mappings":";;;;;;;;AAAA;AACA;AAGA,IAAIA,OAAO,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"find.js","names":["helpers","extensions","doFindElementOrEls","params","bootstrap","sendAction","findElOrEls","strategy","selector","mult","context","Error","multiple","element","doFind","err","isErrorType","errors","ProxyRequestError","getActualError","NoSuchElementError","_","isEmpty","implicitWaitForCondition","message","match","Object","assign"],"sources":["../../../lib/commands/find.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors, isErrorType } from 'appium/driver';\n\n\nlet helpers = {}, extensions = {};\n\n/**\n * Reason for isolating doFindElementOrEls from findElOrEls is for reusing findElOrEls\n * across android-drivers (like appium-uiautomator2-driver) to avoid code duplication.\n * Other android-drivers (like appium-uiautomator2-driver) need to override doFindElementOrEls\n * to facilitate findElOrEls.\n */\nhelpers.doFindElementOrEls = async function doFindElementOrEls (params) {\n return await this.bootstrap.sendAction('find', params);\n};\n\n// stategy: locator strategy\n// selector: the actual selector for finding an element\n// mult: multiple elements or just one?\n// context: finding an element from the root context? or starting from another element\nhelpers.findElOrEls = async function findElOrEls (strategy, selector, mult, context = '') {\n if (!selector) {\n throw new Error('Must provide a selector when finding elements');\n }\n\n let params = {\n strategy,\n selector,\n context,\n multiple: mult\n };\n\n let element;\n let doFind = async () => {\n try {\n element = await this.doFindElementOrEls(params);\n } catch (err) {\n\n // if the error that comes back is from a proxied request, we need to\n // unwrap it to its actual protocol error first\n if (isErrorType(err, errors.ProxyRequestError)) {\n err = err.getActualError(); // eslint-disable-line no-ex-assign\n }\n\n // now we have to inspect the error to determine if it is a no such\n // element error, based on the shape of the error object from\n // appium/driver\n if (isErrorType(err, errors.NoSuchElementError)) {\n // we are fine with this, just indicate a retry\n return false;\n }\n throw err;\n }\n\n // we want to return false if we want to potentially try again\n return !_.isEmpty(element);\n };\n\n try {\n await this.implicitWaitForCondition(doFind);\n } catch (err) {\n if (err.message && err.message.match(/Condition unmet/)) {\n // only get here if we are looking for multiple elements\n // condition was not met setting res to empty array\n element = [];\n } else {\n throw err;\n }\n }\n\n if (mult) {\n return element;\n }\n if (_.isEmpty(element)) {\n throw new errors.NoSuchElementError();\n }\n return element;\n};\n\nObject.assign(extensions, helpers);\nexport { helpers };\nexport default extensions;\n"],"mappings":";;;;;;;;AAAA;AACA;AAGA,IAAIA,OAAO,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAAC;AAQlCD,OAAO,CAACE,kBAAkB,GAAG,eAAeA,kBAAkB,CAAEC,MAAM,EAAE;EACtE,OAAO,MAAM,IAAI,CAACC,SAAS,CAACC,UAAU,CAAC,MAAM,EAAEF,MAAM,CAAC;AACxD,CAAC;AAMDH,OAAO,CAACM,WAAW,GAAG,eAAeA,WAAW,CAAEC,QAAQ,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,OAAO,GAAG,EAAE,EAAE;EACxF,IAAI,CAACF,QAAQ,EAAE;IACb,MAAM,IAAIG,KAAK,CAAC,+CAA+C,CAAC;EAClE;EAEA,IAAIR,MAAM,GAAG;IACXI,QAAQ;IACRC,QAAQ;IACRE,OAAO;IACPE,QAAQ,EAAEH;EACZ,CAAC;EAED,IAAII,OAAO;EACX,IAAIC,MAAM,GAAG,YAAY;IACvB,IAAI;MACFD,OAAO,GAAG,MAAM,IAAI,CAACX,kBAAkB,CAACC,MAAM,CAAC;IACjD,CAAC,CAAC,OAAOY,GAAG,EAAE;MAIZ,IAAI,IAAAC,mBAAW,EAACD,GAAG,EAAEE,cAAM,CAACC,iBAAiB,CAAC,EAAE;QAC9CH,GAAG,GAAGA,GAAG,CAACI,cAAc,EAAE;MAC5B;MAKA,IAAI,IAAAH,mBAAW,EAACD,GAAG,EAAEE,cAAM,CAACG,kBAAkB,CAAC,EAAE;QAE/C,OAAO,KAAK;MACd;MACA,MAAML,GAAG;IACX;IAGA,OAAO,CAACM,eAAC,CAACC,OAAO,CAACT,OAAO,CAAC;EAC5B,CAAC;EAED,IAAI;IACF,MAAM,IAAI,CAACU,wBAAwB,CAACT,MAAM,CAAC;EAC7C,CAAC,CAAC,OAAOC,GAAG,EAAE;IACZ,IAAIA,GAAG,CAACS,OAAO,IAAIT,GAAG,CAACS,OAAO,CAACC,KAAK,CAAC,iBAAiB,CAAC,EAAE;MAGvDZ,OAAO,GAAG,EAAE;IACd,CAAC,MAAM;MACL,MAAME,GAAG;IACX;EACF;EAEA,IAAIN,IAAI,EAAE;IACR,OAAOI,OAAO;EAChB;EACA,IAAIQ,eAAC,CAACC,OAAO,CAACT,OAAO,CAAC,EAAE;IACtB,MAAM,IAAII,cAAM,CAACG,kBAAkB,EAAE;EACvC;EACA,OAAOP,OAAO;AAChB,CAAC;AAEDa,MAAM,CAACC,MAAM,CAAC1B,UAAU,EAAED,OAAO,CAAC;AAAC,eAEpBC,UAAU;AAAA"}
|
|
@@ -12,9 +12,7 @@ var _support = require("@appium/support");
|
|
|
12
12
|
var _moment = _interopRequireDefault(require("moment"));
|
|
13
13
|
var _asyncbox = require("asyncbox");
|
|
14
14
|
var _driver = require("appium/driver");
|
|
15
|
-
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
16
15
|
const MOMENT_FORMAT_ISO8601 = 'YYYY-MM-DDTHH:mm:ssZ';
|
|
17
|
-
const ALL_PERMISSIONS_MAGIC = 'all';
|
|
18
16
|
let commands = {},
|
|
19
17
|
helpers = {},
|
|
20
18
|
extensions = {};
|
|
@@ -34,7 +32,6 @@ commands.keys = async function keys(keys) {
|
|
|
34
32
|
commands.doSendKeys = async function doSendKeys(params) {
|
|
35
33
|
return await this.bootstrap.sendAction('setText', params);
|
|
36
34
|
};
|
|
37
|
-
|
|
38
35
|
commands.getDeviceTime = async function getDeviceTime(format = MOMENT_FORMAT_ISO8601) {
|
|
39
36
|
this.log.debug('Attempting to capture android device date and time. ' + `The format specifier is '${format}'`);
|
|
40
37
|
const deviceTimestamp = (await this.adb.shell(['date', '+%Y-%m-%dT%T%z'])).trim();
|
|
@@ -46,7 +43,6 @@ commands.getDeviceTime = async function getDeviceTime(format = MOMENT_FORMAT_ISO
|
|
|
46
43
|
}
|
|
47
44
|
return parsedTimestamp.utcOffset(parsedTimestamp._tzm || 0).format(format);
|
|
48
45
|
};
|
|
49
|
-
|
|
50
46
|
commands.mobileGetDeviceTime = async function mobileGetDeviceTime(opts = {}) {
|
|
51
47
|
return await this.getDeviceTime(opts.format);
|
|
52
48
|
};
|
|
@@ -76,7 +72,6 @@ commands.openSettingsActivity = async function openSettingsActivity(setting) {
|
|
|
76
72
|
commands.getWindowSize = async function getWindowSize() {
|
|
77
73
|
return await this.bootstrap.sendAction('getDeviceSize');
|
|
78
74
|
};
|
|
79
|
-
|
|
80
75
|
commands.getWindowRect = async function getWindowRect() {
|
|
81
76
|
const {
|
|
82
77
|
width,
|
|
@@ -105,7 +100,6 @@ commands.background = async function background(seconds) {
|
|
|
105
100
|
appActivity
|
|
106
101
|
} = await this.adb.getFocusedPackageAndActivity();
|
|
107
102
|
await this.adb.goToHome();
|
|
108
|
-
|
|
109
103
|
const sleepMs = seconds * 1000;
|
|
110
104
|
const thresholdMs = 30 * 1000;
|
|
111
105
|
const intervalMs = _lodash.default.min([30 * 1000, parseInt(sleepMs / 100, 10)]);
|
|
@@ -161,7 +155,6 @@ commands.getStrings = async function getStrings(language) {
|
|
|
161
155
|
language = await this.adb.getDeviceLanguage();
|
|
162
156
|
this.log.info(`No language specified, returning strings for: ${language}`);
|
|
163
157
|
}
|
|
164
|
-
|
|
165
158
|
const preprocessStringsMap = mapping => {
|
|
166
159
|
const result = {};
|
|
167
160
|
for (const [key, value] of _lodash.default.toPairs(mapping)) {
|
|
@@ -184,7 +177,6 @@ commands.launchApp = async function launchApp() {
|
|
|
184
177
|
};
|
|
185
178
|
commands.startActivity = async function startActivity(appPackage, appActivity, appWaitPackage, appWaitActivity, intentAction, intentCategory, intentFlags, optionalIntentArguments, dontStopAppOnReset) {
|
|
186
179
|
this.log.debug(`Starting package '${appPackage}' and activity '${appActivity}'`);
|
|
187
|
-
|
|
188
180
|
if (!_support.util.hasValue(dontStopAppOnReset)) {
|
|
189
181
|
dontStopAppOnReset = !!this.opts.dontStopAppOnReset;
|
|
190
182
|
}
|
|
@@ -226,11 +218,9 @@ commands.startAUT = async function startAUT() {
|
|
|
226
218
|
user: this.opts.userProfile
|
|
227
219
|
});
|
|
228
220
|
};
|
|
229
|
-
|
|
230
221
|
commands.setUrl = async function setUrl(uri) {
|
|
231
222
|
await this.adb.startUri(uri, this.opts.appPackage);
|
|
232
223
|
};
|
|
233
|
-
|
|
234
224
|
commands.closeApp = async function closeApp() {
|
|
235
225
|
await this.adb.forceStop(this.opts.appPackage);
|
|
236
226
|
await this.setContext();
|
|
@@ -263,84 +253,12 @@ commands.mobilePerformEditorAction = async function mobilePerformEditorAction(op
|
|
|
263
253
|
}
|
|
264
254
|
await this.adb.performEditorAction(action);
|
|
265
255
|
};
|
|
266
|
-
const PERMISSION_ACTION = {
|
|
267
|
-
GRANT: 'grant',
|
|
268
|
-
REVOKE: 'revoke'
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
commands.mobileChangePermissions = async function mobileChangePermissions(opts = {}) {
|
|
272
|
-
const {
|
|
273
|
-
permissions,
|
|
274
|
-
appPackage = this.opts.appPackage,
|
|
275
|
-
action = PERMISSION_ACTION.GRANT
|
|
276
|
-
} = opts;
|
|
277
|
-
if (_lodash.default.isNil(permissions)) {
|
|
278
|
-
throw new _driver.errors.InvalidArgumentError(`'permissions' argument is required`);
|
|
279
|
-
}
|
|
280
|
-
if (_lodash.default.isEmpty(permissions)) {
|
|
281
|
-
throw new _driver.errors.InvalidArgumentError(`'permissions' argument must not be empty`);
|
|
282
|
-
}
|
|
283
|
-
const lowerAction = _lodash.default.toLower(action);
|
|
284
|
-
if (![PERMISSION_ACTION.GRANT, PERMISSION_ACTION.REVOKE].includes(lowerAction)) {
|
|
285
|
-
throw new _driver.errors.InvalidArgumentError(`Unknown action '${action}'. ` + `Only ${JSON.stringify(_lodash.default.values(PERMISSION_ACTION))} actions are supported`);
|
|
286
|
-
}
|
|
287
|
-
let affectedPermissions = _lodash.default.isArray(permissions) ? permissions : [permissions];
|
|
288
|
-
if (_lodash.default.toLower(permissions) === ALL_PERMISSIONS_MAGIC) {
|
|
289
|
-
const dumpsys = await this.adb.shell(['dumpsys', 'package', appPackage]);
|
|
290
|
-
const grantedPermissions = await this.adb.getGrantedPermissions(appPackage, dumpsys);
|
|
291
|
-
if (lowerAction === PERMISSION_ACTION.GRANT) {
|
|
292
|
-
const reqPermissons = await this.adb.getReqPermissions(appPackage, dumpsys);
|
|
293
|
-
affectedPermissions = _lodash.default.difference(reqPermissons, grantedPermissions);
|
|
294
|
-
} else {
|
|
295
|
-
affectedPermissions = grantedPermissions;
|
|
296
|
-
}
|
|
297
|
-
if (_lodash.default.isEmpty(affectedPermissions)) {
|
|
298
|
-
this.log.info(`'${appPackage}' contains no permissions to ${lowerAction}`);
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
if (lowerAction === PERMISSION_ACTION.GRANT) {
|
|
303
|
-
await this.adb.grantPermissions(appPackage, affectedPermissions);
|
|
304
|
-
} else {
|
|
305
|
-
await _bluebird.default.all(affectedPermissions.map(name => this.adb.revokePermission(appPackage, name)));
|
|
306
|
-
}
|
|
307
|
-
};
|
|
308
|
-
const PERMISSIONS_TYPE = {
|
|
309
|
-
DENIED: 'denied',
|
|
310
|
-
GRANTED: 'granted',
|
|
311
|
-
REQUESTED: 'requested'
|
|
312
|
-
};
|
|
313
|
-
|
|
314
|
-
commands.mobileGetPermissions = async function mobileGetPermissions(opts = {}) {
|
|
315
|
-
const {
|
|
316
|
-
type = PERMISSIONS_TYPE.REQUESTED,
|
|
317
|
-
appPackage = this.opts.appPackage
|
|
318
|
-
} = opts;
|
|
319
|
-
let actionFunc;
|
|
320
|
-
switch (_lodash.default.toLower(type)) {
|
|
321
|
-
case PERMISSIONS_TYPE.REQUESTED:
|
|
322
|
-
actionFunc = appPackage => this.adb.getReqPermissions(appPackage);
|
|
323
|
-
break;
|
|
324
|
-
case PERMISSIONS_TYPE.GRANTED:
|
|
325
|
-
actionFunc = appPackage => this.adb.getGrantedPermissions(appPackage);
|
|
326
|
-
break;
|
|
327
|
-
case PERMISSIONS_TYPE.DENIED:
|
|
328
|
-
actionFunc = appPackage => this.adb.getDeniedPermissions(appPackage);
|
|
329
|
-
break;
|
|
330
|
-
default:
|
|
331
|
-
throw new _driver.errors.InvalidArgumentError(`Unknown permissions type '${type}'. ` + `Only ${JSON.stringify(_lodash.default.values(PERMISSIONS_TYPE))} types are supported`);
|
|
332
|
-
}
|
|
333
|
-
return await actionFunc(appPackage);
|
|
334
|
-
};
|
|
335
|
-
|
|
336
256
|
commands.mobileGetNotifications = async function mobileGetNotifications() {
|
|
337
257
|
return await this.adb.getNotifications();
|
|
338
258
|
};
|
|
339
|
-
|
|
340
259
|
commands.mobileListSms = async function mobileListSms(opts = {}) {
|
|
341
260
|
return await this.adb.getSmsList(opts);
|
|
342
261
|
};
|
|
343
|
-
|
|
344
262
|
commands.mobileUnlock = async function mobileUnlock(opts = {}) {
|
|
345
263
|
const {
|
|
346
264
|
key,
|
|
@@ -358,4 +276,4 @@ commands.mobileUnlock = async function mobileUnlock(opts = {}) {
|
|
|
358
276
|
Object.assign(extensions, commands, helpers);
|
|
359
277
|
var _default = extensions;
|
|
360
278
|
exports.default = _default;
|
|
361
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNT01FTlRfRk9STUFUX0lTTzg2MDEiLCJBTExfUEVSTUlTU0lPTlNfTUFHSUMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwia2V5cyIsIl8iLCJpc0FycmF5Iiwiam9pbiIsInBhcmFtcyIsInRleHQiLCJyZXBsYWNlIiwib3B0cyIsInVuaWNvZGVLZXlib2FyZCIsImRvU2VuZEtleXMiLCJib290c3RyYXAiLCJzZW5kQWN0aW9uIiwiZ2V0RGV2aWNlVGltZSIsImZvcm1hdCIsImxvZyIsImRlYnVnIiwiZGV2aWNlVGltZXN0YW1wIiwiYWRiIiwic2hlbGwiLCJ0cmltIiwicGFyc2VkVGltZXN0YW1wIiwibW9tZW50IiwidXRjIiwiaXNWYWxpZCIsIndhcm4iLCJ1dGNPZmZzZXQiLCJfdHptIiwibW9iaWxlR2V0RGV2aWNlVGltZSIsImdldFBhZ2VTb3VyY2UiLCJiYWNrIiwiaXNLZXlib2FyZFNob3duIiwiaXNTb2Z0S2V5Ym9hcmRQcmVzZW50IiwiaGlkZUtleWJvYXJkIiwib3BlblNldHRpbmdzQWN0aXZpdHkiLCJzZXR0aW5nIiwiYXBwUGFja2FnZSIsImFwcEFjdGl2aXR5IiwiZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSIsIndhaXRGb3JOb3RBY3Rpdml0eSIsImdldFdpbmRvd1NpemUiLCJnZXRXaW5kb3dSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJ4IiwieSIsImdldEN1cnJlbnRBY3Rpdml0eSIsImdldEN1cnJlbnRQYWNrYWdlIiwiYmFja2dyb3VuZCIsInNlY29uZHMiLCJnb1RvSG9tZSIsInNsZWVwTXMiLCJ0aHJlc2hvbGRNcyIsImludGVydmFsTXMiLCJtaW4iLCJwYXJzZUludCIsInByb2dyZXNzQ2IiLCJlbGFwc2VkTXMiLCJwcm9ncmVzcyIsIndhaXRTZWNzIiwidG9GaXhlZCIsInByb2dyZXNzUGN0IiwibG9uZ1NsZWVwIiwiYXJncyIsIl9jYWNoZWRBY3Rpdml0eUFyZ3MiLCJhY3RpdmF0ZUFwcCIsImlnbiIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5Iiwic3BsaXQiLCJpbmNsdWRlcyIsInBrZyIsImFjdGl2aXR5IiwiYWN0aW9uIiwiaW50ZW50QWN0aW9uIiwiY2F0ZWdvcnkiLCJpbnRlbnRDYXRlZ29yeSIsImZsYWdzIiwiaW50ZW50RmxhZ3MiLCJ3YWl0UGtnIiwid2FpdEFjdGl2aXR5Iiwid2FpdEZvckxhdW5jaCIsImFwcFdhaXRGb3JMYXVuY2giLCJ3YWl0RHVyYXRpb24iLCJhcHBXYWl0RHVyYXRpb24iLCJvcHRpb25hbEludGVudEFyZ3VtZW50cyIsInN0b3BBcHAiLCJ1c2VyIiwidXNlclByb2ZpbGUiLCJ1dGlsIiwiZmlsdGVyT2JqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXJ0QXBwIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJ0b1BhaXJzIiwiaXNTdHJpbmciLCJhcGtTdHJpbmdzIiwiYW5kcm9pZEhlbHBlcnMiLCJwdXNoU3RyaW5ncyIsImxhdW5jaEFwcCIsImluaXRBVVQiLCJzdGFydEFVVCIsInN0YXJ0QWN0aXZpdHkiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJoYXNWYWx1ZSIsInJlc2V0IiwicmVzZXRBcHAiLCJPYmplY3QiLCJhc3NpZ24iLCJmYXN0UmVzZXQiLCJzZXRDb250ZXh0IiwiaXNDaHJvbWVTZXNzaW9uIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwic2V0VXJsIiwidXJpIiwic3RhcnRVcmkiLCJjbG9zZUFwcCIsImZvcmNlU3RvcCIsImdldERpc3BsYXlEZW5zaXR5Iiwib3V0IiwidmFsIiwiaXNOYU4iLCJlcnJvckFuZFRocm93IiwibW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiIsImVycm9ycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsIlBFUk1JU1NJT05fQUNUSU9OIiwiR1JBTlQiLCJSRVZPS0UiLCJtb2JpbGVDaGFuZ2VQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiaXNOaWwiLCJpc0VtcHR5IiwibG93ZXJBY3Rpb24iLCJ0b0xvd2VyIiwidmFsdWVzIiwiYWZmZWN0ZWRQZXJtaXNzaW9ucyIsImR1bXBzeXMiLCJncmFudGVkUGVybWlzc2lvbnMiLCJnZXRHcmFudGVkUGVybWlzc2lvbnMiLCJyZXFQZXJtaXNzb25zIiwiZ2V0UmVxUGVybWlzc2lvbnMiLCJkaWZmZXJlbmNlIiwiZ3JhbnRQZXJtaXNzaW9ucyIsIkIiLCJhbGwiLCJtYXAiLCJuYW1lIiwicmV2b2tlUGVybWlzc2lvbiIsIlBFUk1JU1NJT05TX1RZUEUiLCJERU5JRUQiLCJHUkFOVEVEIiwiUkVRVUVTVEVEIiwibW9iaWxlR2V0UGVybWlzc2lvbnMiLCJ0eXBlIiwiYWN0aW9uRnVuYyIsImdldERlbmllZFBlcm1pc3Npb25zIiwibW9iaWxlR2V0Tm90aWZpY2F0aW9ucyIsImdldE5vdGlmaWNhdGlvbnMiLCJtb2JpbGVMaXN0U21zIiwiZ2V0U21zTGlzdCIsIm1vYmlsZVVubG9jayIsInN0cmF0ZWd5IiwidGltZW91dE1zIiwidW5sb2NrIiwidW5sb2NrS2V5IiwidW5sb2NrVHlwZSIsInVubG9ja1N0cmF0ZWd5IiwidW5sb2NrU3VjY2Vzc1RpbWVvdXQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGFuZHJvaWRIZWxwZXJzIGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGxvbmdTbGVlcCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5jb25zdCBNT01FTlRfRk9STUFUX0lTTzg2MDEgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuY29uc3QgQUxMX1BFUk1JU1NJT05TX01BR0lDID0gJ2FsbCc7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29tbWFuZHMua2V5cyA9IGFzeW5jIGZ1bmN0aW9uIGtleXMgKGtleXMpIHtcbiAgLy8gUHJvdG9jb2wgc2VuZHMgYW4gYXJyYXk7IHJldGhpbmsgYXBwcm9hY2hcbiAga2V5cyA9IF8uaXNBcnJheShrZXlzKSA/IGtleXMuam9pbignJykgOiBrZXlzO1xuICBsZXQgcGFyYW1zID0ge1xuICAgIHRleHQ6IGtleXMsXG4gICAgcmVwbGFjZTogZmFsc2VcbiAgfTtcbiAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQpIHtcbiAgICBwYXJhbXMudW5pY29kZUtleWJvYXJkID0gdHJ1ZTtcbiAgfVxuICBhd2FpdCB0aGlzLmRvU2VuZEtleXMocGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLmRvU2VuZEtleXMgPSBhc3luYyBmdW5jdGlvbiBkb1NlbmRLZXlzIChwYXJhbXMpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3NldFRleHQnLCBwYXJhbXMpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZGV2aWNlJ3MgdGltZXN0YW1wLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBUaGUgc2V0IG9mIGZvcm1hdCBzcGVjaWZpZXJzLiBSZWFkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9tb21lbnRqcy5jb20vZG9jcy8gdG8gZ2V0IHRoZSBmdWxsIGxpc3Qgb2Ygc3VwcG9ydGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUgZm9ybWF0IHNwZWNpZmllcnMuIFRoZSBkZWZhdWx0IGZvcm1hdCBpc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIGBZWVlZLU1NLUREVEhIOm1tOnNzWmAsIHdoaWNoIGNvbXBsaWVzIHRvIElTTy04NjAxXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZvcm1hdHRlZCBkYXRldGltZSBzdHJpbmcgb3IgdGhlIHJhdyBjb21tYW5kIG91dHB1dCBpZiBmb3JtYXR0aW5nIGZhaWxzXG4gKi9cbmNvbW1hbmRzLmdldERldmljZVRpbWUgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VUaW1lIChmb3JtYXQgPSBNT01FTlRfRk9STUFUX0lTTzg2MDEpIHtcbiAgdGhpcy5sb2cuZGVidWcoJ0F0dGVtcHRpbmcgdG8gY2FwdHVyZSBhbmRyb2lkIGRldmljZSBkYXRlIGFuZCB0aW1lLiAnICtcbiAgICBgVGhlIGZvcm1hdCBzcGVjaWZpZXIgaXMgJyR7Zm9ybWF0fSdgKTtcbiAgY29uc3QgZGV2aWNlVGltZXN0YW1wID0gKGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZGF0ZScsICcrJVktJW0tJWRUJVQleiddKSkudHJpbSgpO1xuICB0aGlzLmxvZy5kZWJ1ZyhgR290IGRldmljZSB0aW1lc3RhbXA6ICR7ZGV2aWNlVGltZXN0YW1wfWApO1xuICBjb25zdCBwYXJzZWRUaW1lc3RhbXAgPSBtb21lbnQudXRjKGRldmljZVRpbWVzdGFtcCwgJ1lZWVktTU0tRERUSEg6bW06c3NaWicpO1xuICBpZiAoIXBhcnNlZFRpbWVzdGFtcC5pc1ZhbGlkKCkpIHtcbiAgICB0aGlzLmxvZy53YXJuKCdDYW5ub3QgcGFyc2UgdGhlIHJldHVybmVkIHRpbWVzdGFtcC4gUmV0dXJuaW5nIGFzIGlzJyk7XG4gICAgcmV0dXJuIGRldmljZVRpbWVzdGFtcDtcbiAgfVxuICByZXR1cm4gcGFyc2VkVGltZXN0YW1wLnV0Y09mZnNldChwYXJzZWRUaW1lc3RhbXAuX3R6bSB8fCAwKS5mb3JtYXQoZm9ybWF0KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRGV2aWNlVGltZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmb3JtYXQgW1lZWVktTU0tRERUSEg6bW06c3NaXSAtIFNlZSBnZXREZXZpY2VUaW1lI2Zvcm1hdFxuICovXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGRldmljZSB0aW1lXG4gKlxuICogQHBhcmFtIHtEZXZpY2VUaW1lT3B0aW9uc30gb3B0c1xuICogQHJldHVybiB7c3RyaW5nfSBGb3JtYXR0ZWQgZGF0ZXRpbWUgc3RyaW5nIG9yIHRoZSByYXcgY29tbWFuZCBvdXRwdXQgaWYgZm9ybWF0dGluZyBmYWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXREZXZpY2VUaW1lID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0RGV2aWNlVGltZSAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldERldmljZVRpbWUob3B0cy5mb3JtYXQpO1xufTtcblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VTb3VyY2UgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignc291cmNlJyk7XG59O1xuXG5jb21tYW5kcy5iYWNrID0gYXN5bmMgZnVuY3Rpb24gYmFjayAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdwcmVzc0JhY2snKTtcbn07XG5cbmNvbW1hbmRzLmlzS2V5Ym9hcmRTaG93biA9IGFzeW5jIGZ1bmN0aW9uIGlzS2V5Ym9hcmRTaG93biAoKSB7XG4gIGNvbnN0IHtpc0tleWJvYXJkU2hvd259ID0gYXdhaXQgdGhpcy5hZGIuaXNTb2Z0S2V5Ym9hcmRQcmVzZW50KCk7XG4gIHJldHVybiBpc0tleWJvYXJkU2hvd247XG59O1xuXG5jb21tYW5kcy5oaWRlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBoaWRlS2V5Ym9hcmQgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaGlkZUtleWJvYXJkKCk7XG59O1xuXG5jb21tYW5kcy5vcGVuU2V0dGluZ3NBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIG9wZW5TZXR0aW5nc0FjdGl2aXR5IChzZXR0aW5nKSB7XG4gIGxldCB7YXBwUGFja2FnZSwgYXBwQWN0aXZpdHl9ID0gYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpO1xuICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2FtJywgJ3N0YXJ0JywgJy1hJywgYGFuZHJvaWQuc2V0dGluZ3MuJHtzZXR0aW5nfWBdKTtcbiAgYXdhaXQgdGhpcy5hZGIud2FpdEZvck5vdEFjdGl2aXR5KGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LCA1MDAwKTtcbn07XG5cbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiBnZXRXaW5kb3dTaXplICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2dldERldmljZVNpemUnKTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiBnZXRXaW5kb3dSZWN0ICgpIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBhd2FpdCB0aGlzLmdldFdpbmRvd1NpemUoKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG59O1xuXG5jb21tYW5kcy5nZXRDdXJyZW50QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50QWN0aXZpdHkgKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKSkuYXBwQWN0aXZpdHk7XG59O1xuXG5jb21tYW5kcy5nZXRDdXJyZW50UGFja2FnZSA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRQYWNrYWdlICgpIHtcbiAgcmV0dXJuIChhd2FpdCB0aGlzLmFkYi5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5KCkpLmFwcFBhY2thZ2U7XG59O1xuXG5jb21tYW5kcy5iYWNrZ3JvdW5kID0gYXN5bmMgZnVuY3Rpb24gYmFja2dyb3VuZCAoc2Vjb25kcykge1xuICBpZiAoc2Vjb25kcyA8IDApIHtcbiAgICAvLyBpZiB1c2VyIHBhc3NlcyBpbiBhIG5lZ2F0aXZlIHNlY29uZHMgdmFsdWUsIGludGVycHJldCB0aGF0IGFzIHRoZSBpbnN0cnVjdGlvblxuICAgIC8vIHRvIG5vdCBicmluZyB0aGUgYXBwIGJhY2sgYXQgYWxsXG4gICAgYXdhaXQgdGhpcy5hZGIuZ29Ub0hvbWUoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQge2FwcFBhY2thZ2UsIGFwcEFjdGl2aXR5fSA9IGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKTtcbiAgYXdhaXQgdGhpcy5hZGIuZ29Ub0hvbWUoKTtcblxuICAvLyBwZW9wbGUgY2FuIHdhaXQgZm9yIGEgbG9uZyB0aW1lLCBzbyB0byBiZSBzYWZlIGxldCdzIHVzZSB0aGUgbG9uZ1NsZWVwIGZ1bmN0aW9uIGFuZCBsb2dcbiAgLy8gcHJvZ3Jlc3MgcGVyaW9kaWNhbGx5LlxuICBjb25zdCBzbGVlcE1zID0gc2Vjb25kcyAqIDEwMDA7XG4gIGNvbnN0IHRocmVzaG9sZE1zID0gMzAgKiAxMDAwOyAvLyB1c2UgdGhlIHNwaW4td2FpdCBmb3IgYW55dGhpbmcgb3ZlciB0aGlzIHRocmVzaG9sZFxuICAvLyBmb3Igb3VyIHNwaW4gaW50ZXJ2YWwsIHVzZSAxJSBvZiB0aGUgdG90YWwgd2FpdCB0aW1lLCBidXQgbm90aGluZyBiaWdnZXIgdGhhbiAzMHNcbiAgY29uc3QgaW50ZXJ2YWxNcyA9IF8ubWluKFszMCAqIDEwMDAsIHBhcnNlSW50KHNsZWVwTXMgLyAxMDAsIDEwKV0pO1xuICBjb25zdCBwcm9ncmVzc0NiID0gKHtlbGFwc2VkTXMsIHByb2dyZXNzfSkgPT4ge1xuICAgIGNvbnN0IHdhaXRTZWNzID0gKGVsYXBzZWRNcyAvIDEwMDApLnRvRml4ZWQoMCk7XG4gICAgY29uc3QgcHJvZ3Jlc3NQY3QgPSAocHJvZ3Jlc3MgKiAxMDApLnRvRml4ZWQoMik7XG4gICAgdGhpcy5sb2cuZGVidWcoYFdhaXRlZCAke3dhaXRTZWNzfXMgc28gZmFyICgke3Byb2dyZXNzUGN0fSUpYCk7XG4gIH07XG4gIGF3YWl0IGxvbmdTbGVlcChzbGVlcE1zLCB7dGhyZXNob2xkTXMsIGludGVydmFsTXMsIHByb2dyZXNzQ2J9KTtcblxuICBsZXQgYXJncztcbiAgaWYgKHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJncyAmJiB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3NbYCR7YXBwUGFja2FnZX0vJHthcHBBY3Rpdml0eX1gXSkge1xuICAgIC8vIHRoZSBhY3Rpdml0eSB3YXMgc3RhcnRlZCB3aXRoIGBzdGFydEFjdGl2aXR5YCwgc28gdXNlIHRob3NlIGFyZ3MgdG8gcmVzdGFydFxuICAgIGFyZ3MgPSB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3NbYCR7YXBwUGFja2FnZX0vJHthcHBBY3Rpdml0eX1gXTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEFjdGl2YXRpbmcgYXBwICcke2FwcFBhY2thZ2V9JyBpbiBvcmRlciB0byByZXN0b3JlIGl0YCk7XG4gICAgICBhd2FpdCB0aGlzLmFjdGl2YXRlQXBwKGFwcFBhY2thZ2UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIGFyZ3MgPSAoKGFwcFBhY2thZ2UgPT09IHRoaXMub3B0cy5hcHBQYWNrYWdlICYmIGFwcEFjdGl2aXR5ID09PSB0aGlzLm9wdHMuYXBwQWN0aXZpdHkpIHx8XG4gICAgICAgICAgICAoYXBwUGFja2FnZSA9PT0gdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlICYmICh0aGlzLm9wdHMuYXBwV2FpdEFjdGl2aXR5IHx8ICcnKS5zcGxpdCgnLCcpLmluY2x1ZGVzKGFwcEFjdGl2aXR5KSkpXG4gICAgICA/IHsvLyB0aGUgYWN0aXZpdHkgaXMgdGhlIG9yaWdpbmFsIHNlc3Npb24gYWN0aXZpdHksIHNvIHVzZSB0aGUgb3JpZ2luYWwgYXJnc1xuICAgICAgICBwa2c6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgICBhY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgICAgICBhY3Rpb246IHRoaXMub3B0cy5pbnRlbnRBY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiB0aGlzLm9wdHMuaW50ZW50Q2F0ZWdvcnksXG4gICAgICAgIGZsYWdzOiB0aGlzLm9wdHMuaW50ZW50RmxhZ3MsXG4gICAgICAgIHdhaXRQa2c6IHRoaXMub3B0cy5hcHBXYWl0UGFja2FnZSxcbiAgICAgICAgd2FpdEFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwV2FpdEFjdGl2aXR5LFxuICAgICAgICB3YWl0Rm9yTGF1bmNoOiB0aGlzLm9wdHMuYXBwV2FpdEZvckxhdW5jaCxcbiAgICAgICAgd2FpdER1cmF0aW9uOiB0aGlzLm9wdHMuYXBwV2FpdER1cmF0aW9uLFxuICAgICAgICBvcHRpb25hbEludGVudEFyZ3VtZW50czogdGhpcy5vcHRzLm9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgICAgICBzdG9wQXBwOiBmYWxzZSxcbiAgICAgICAgdXNlcjogdGhpcy5vcHRzLnVzZXJQcm9maWxlfVxuICAgICAgOiB7Ly8gdGhlIGFjdGl2aXR5IHdhcyBzdGFydGVkIHNvbWUgb3RoZXIgd2F5LCBzbyB1c2UgZGVmYXVsdHNcbiAgICAgICAgcGtnOiBhcHBQYWNrYWdlLFxuICAgICAgICBhY3Rpdml0eTogYXBwQWN0aXZpdHksXG4gICAgICAgIHdhaXRQa2c6IGFwcFBhY2thZ2UsXG4gICAgICAgIHdhaXRBY3Rpdml0eTogYXBwQWN0aXZpdHksXG4gICAgICAgIHN0b3BBcHA6IGZhbHNlfTtcbiAgfVxuICBhcmdzID0gYXdhaXQgdXRpbC5maWx0ZXJPYmplY3QoYXJncyk7XG4gIHRoaXMubG9nLmRlYnVnKGBCcmluZ2luZyBhcHBsaWNhdGlvbiBiYWNrIHRvIGZvcmVncm91bmQgd2l0aCBhcmd1bWVudHM6ICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9YCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zdGFydEFwcChhcmdzKTtcbn07XG5cbmNvbW1hbmRzLmdldFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiBnZXRTdHJpbmdzIChsYW5ndWFnZSkge1xuICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmFkYi5nZXREZXZpY2VMYW5ndWFnZSgpO1xuICAgIHRoaXMubG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gKG1hcHBpbmcpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0gPSBhd2FpdCBhbmRyb2lkSGVscGVycy5wdXNoU3RyaW5ncyhsYW5ndWFnZSwgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIGlmICh0aGlzLmJvb3RzdHJhcCkge1xuICAgIC8vIFRPRE86IFRoaXMgaXMgbXV0YXRpbmcgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UsIGJ1dCBpdCdzIGhvdyBhcHBpdW0gY3VycmVudGx5IHdvcmtzXG4gICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbigndXBkYXRlU3RyaW5ncycpO1xuICB9XG5cbiAgcmV0dXJuIHByZXByb2Nlc3NTdHJpbmdzTWFwKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pO1xufTtcblxuY29tbWFuZHMubGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbGF1bmNoQXBwICgpIHtcbiAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG4gIGF3YWl0IHRoaXMuc3RhcnRBVVQoKTtcbn07XG5cbmNvbW1hbmRzLnN0YXJ0QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBzdGFydEFjdGl2aXR5IChhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSxcbiAgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSwgaW50ZW50QWN0aW9uLCBpbnRlbnRDYXRlZ29yeSwgaW50ZW50RmxhZ3MsXG4gIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBkb250U3RvcEFwcE9uUmVzZXQpIHtcbiAgdGhpcy5sb2cuZGVidWcoYFN0YXJ0aW5nIHBhY2thZ2UgJyR7YXBwUGFja2FnZX0nIGFuZCBhY3Rpdml0eSAnJHthcHBBY3Rpdml0eX0nYCk7XG5cbiAgLy8gZG9udFN0b3BBcHBPblJlc2V0IGlzIGJvdGggYW4gYXJndW1lbnQgaGVyZSwgYW5kIGEgZGVzaXJlZCBjYXBhYmlsaXR5XG4gIC8vIGlmIHRoZSBhcmd1bWVudCBpcyBzZXQsIHVzZSBpdCwgb3RoZXJ3aXNlIHVzZSB0aGUgY2FwXG4gIGlmICghdXRpbC5oYXNWYWx1ZShkb250U3RvcEFwcE9uUmVzZXQpKSB7XG4gICAgZG9udFN0b3BBcHBPblJlc2V0ID0gISF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0O1xuICB9XG5cbiAgbGV0IGFyZ3MgPSB7XG4gICAgcGtnOiBhcHBQYWNrYWdlLFxuICAgIGFjdGl2aXR5OiBhcHBBY3Rpdml0eSxcbiAgICB3YWl0UGtnOiBhcHBXYWl0UGFja2FnZSB8fCBhcHBQYWNrYWdlLFxuICAgIHdhaXRBY3Rpdml0eTogYXBwV2FpdEFjdGl2aXR5IHx8IGFwcEFjdGl2aXR5LFxuICAgIGFjdGlvbjogaW50ZW50QWN0aW9uLFxuICAgIGNhdGVnb3J5OiBpbnRlbnRDYXRlZ29yeSxcbiAgICBmbGFnczogaW50ZW50RmxhZ3MsXG4gICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsXG4gICAgc3RvcEFwcDogIWRvbnRTdG9wQXBwT25SZXNldFxuICB9O1xuICB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3MgPSB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3MgfHwge307XG4gIHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJnc1tgJHthcmdzLndhaXRQa2d9LyR7YXJncy53YWl0QWN0aXZpdHl9YF0gPSBhcmdzO1xuICBhd2FpdCB0aGlzLmFkYi5zdGFydEFwcChhcmdzKTtcbn07XG5cbmNvbW1hbmRzLnJlc2V0ID0gYXN5bmMgZnVuY3Rpb24gcmVzZXQgKCkge1xuICBhd2FpdCBhbmRyb2lkSGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRzLCB7ZmFzdFJlc2V0OiB0cnVlfSkpO1xuICAvLyByZXNldCBjb250ZXh0IHNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCBraW5kIG9uIGNvbnRleHQgd2Ugd2lsbCBlbmQgdXAgYWZ0ZXIgYXBwIGxhdW5jaC5cbiAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmlzQ2hyb21lU2Vzc2lvbiA/IHRoaXMuc3RhcnRDaHJvbWVTZXNzaW9uKCkgOiB0aGlzLnN0YXJ0QVVUKCk7XG59O1xuXG5jb21tYW5kcy5zdGFydEFVVCA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0QVVUICgpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRBcHAoe1xuICAgIHBrZzogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgYWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICBhY3Rpb246IHRoaXMub3B0cy5pbnRlbnRBY3Rpb24sXG4gICAgY2F0ZWdvcnk6IHRoaXMub3B0cy5pbnRlbnRDYXRlZ29yeSxcbiAgICBmbGFnczogdGhpcy5vcHRzLmludGVudEZsYWdzLFxuICAgIHdhaXRQa2c6IHRoaXMub3B0cy5hcHBXYWl0UGFja2FnZSxcbiAgICB3YWl0QWN0aXZpdHk6IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHksXG4gICAgd2FpdEZvckxhdW5jaDogdGhpcy5vcHRzLmFwcFdhaXRGb3JMYXVuY2gsXG4gICAgd2FpdER1cmF0aW9uOiB0aGlzLm9wdHMuYXBwV2FpdER1cmF0aW9uLFxuICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB0aGlzLm9wdHMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsXG4gICAgc3RvcEFwcDogIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQsXG4gICAgdXNlcjogdGhpcy5vcHRzLnVzZXJQcm9maWxlLFxuICB9KTtcbn07XG5cbi8vIHdlIG92ZXJyaWRlIHNldFVybCB0byB0YWtlIGFuIGFuZHJvaWQgVVJJIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBkZWVwLWxpbmtpbmdcbi8vIGluc2lkZSBhbiBhcHAsIHNpbWlsYXIgdG8gc3RhcnRpbmcgYW4gaW50ZW50XG5jb21tYW5kcy5zZXRVcmwgPSBhc3luYyBmdW5jdGlvbiBzZXRVcmwgKHVyaSkge1xuICBhd2FpdCB0aGlzLmFkYi5zdGFydFVyaSh1cmksIHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbn07XG5cbi8vIGNsb3NpbmcgYXBwIHVzaW5nIGZvcmNlIHN0b3BcbmNvbW1hbmRzLmNsb3NlQXBwID0gYXN5bmMgZnVuY3Rpb24gY2xvc2VBcHAgKCkge1xuICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAvLyByZXNldCBjb250ZXh0IHNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCBraW5kIG9uIGNvbnRleHQgd2Ugd2lsbCBlbmQgdXAgYWZ0ZXIgYXBwIGxhdW5jaC5cbiAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KCk7XG59O1xuXG5jb21tYW5kcy5nZXREaXNwbGF5RGVuc2l0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldERpc3BsYXlEZW5zaXR5ICgpIHtcbiAgLy8gZmlyc3QgdHJ5IHRoZSBwcm9wZXJ0eSBmb3IgZGV2aWNlc1xuICBsZXQgb3V0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydnZXRwcm9wJywgJ3JvLnNmLmxjZF9kZW5zaXR5J10pO1xuICBpZiAob3V0KSB7XG4gICAgbGV0IHZhbCA9IHBhcnNlSW50KG91dCwgMTApO1xuICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBOYU4sIHRyeSBnZXR0aW5nIHRoZSBlbXVsYXRvciBwcm9wZXJ0eVxuICAgIGlmICghaXNOYU4odmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBkZW5zaXR5IHZhbHVlIHdhcyBOYU46IFwiJHtvdXR9XCJgKTtcbiAgfVxuICAvLyBmYWxsYmFjayB0byB0cnlpbmcgcHJvcGVydHkgZm9yIGVtdWxhdG9yc1xuICBvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2dldHByb3AnLCAncWVtdS5zZi5sY2RfZGVuc2l0eSddKTtcbiAgaWYgKG91dCkge1xuICAgIGxldCB2YWwgPSBwYXJzZUludChvdXQsIDEwKTtcbiAgICBpZiAoIWlzTmFOKHZhbCkpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHRoaXMubG9nLmRlYnVnKGBQYXJzZWQgZGVuc2l0eSB2YWx1ZSB3YXMgTmFOOiBcIiR7b3V0fVwiYCk7XG4gIH1cbiAgLy8gY291bGRuJ3QgZ2V0IGFueXRoaW5nLCBzbyBlcnJvciBvdXRcbiAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnRmFpbGVkIHRvIGdldCBkaXNwbGF5IGRlbnNpdHkgcHJvcGVydHkuJyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHthY3Rpb259ID0gb3B0cztcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGFjdGlvbikpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnYWN0aW9uJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5hZGIucGVyZm9ybUVkaXRvckFjdGlvbihhY3Rpb24pO1xufTtcblxuY29uc3QgUEVSTUlTU0lPTl9BQ1RJT04gPSB7XG4gIEdSQU5UOiAnZ3JhbnQnLFxuICBSRVZPS0U6ICdyZXZva2UnLFxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDaGFuZ2VQZXJtaXNzaW9uc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ3xBcnJheTxzdHJpbmc+fSBwZXJtaXNzaW9ucyAtIFRoZSBmdWxsIG5hbWUgb2YgdGhlIHBlcm1pc3Npb24gdG8gYmUgY2hhbmdlZFxuICogb3IgYSBsaXN0IG9mIHBlcm1pc3Npb25zLiBDaGVjayBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9NYW5pZmVzdC5wZXJtaXNzaW9uXG4gKiB0byBnZXQgdGhlIGZ1bGwgbGlzdCBvZiBzdGFuZGFyZCBBbmRyb2lkIHBlcm1zc2lvbiBuYW1lcy4gTWFuZGF0b3J5IGFyZ3VtZW50LlxuICogSWYgJ2FsbCcgbWFnaWMgc3RyaW5nIGlzIHBhc3NlZCB0aGVuIHRoZSBjaG9zZW4gYWN0aW9uIGlzIGdvaW5nIHRvIGJlIGFwcGxpZWQgdG8gYWxsXG4gKiBwZXJtaXNpc29ucyByZXF1ZXN0ZWQvZ3JhbnRlZCBieSAnYXBwUGFja2FnZScuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwUGFja2FnZSBbdGhpcy5vcHRzLmFwcFBhY2thZ2VdIC0gVGhlIGFwcGxpY2F0aW9uIHBhY2thZ2UgdG8gc2V0IGNoYW5nZVxuICogcGVybWlzc2lvbnMgb24uIERlZmF1bHRzIHRvIHRoZSBwYWNrYWdlIG5hbWUgdW5kZXIgdGVzdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb24gW2dyYW50XSAtIE9uZSBvZiBgUEVSTUlTU0lPTl9BQ1RJT05gIHZhbHVlc1xuICovXG5cbi8qKlxuICogQ2hhbmdlcyBwYWNrYWdlIHBlcm1pc3Npb25zIGluIHJ1bnRpbWUuXG4gKlxuICogQHBhcmFtIHs/Q2hhbmdlUGVybWlzc2lvbnNPcHRpb25zfSBvcHRzIC0gQXZhaWxhYmxlIG9wdGlvbnMgbWFwcGluZy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIGNoYW5naW5nIHBlcm1pc3Npb25zXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUNoYW5nZVBlcm1pc3Npb25zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgcGVybWlzc2lvbnMsXG4gICAgYXBwUGFja2FnZSA9IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgIGFjdGlvbiA9IFBFUk1JU1NJT05fQUNUSU9OLkdSQU5ULFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNOaWwocGVybWlzc2lvbnMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ3Blcm1pc3Npb25zJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG4gIGlmIChfLmlzRW1wdHkocGVybWlzc2lvbnMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ3Blcm1pc3Npb25zJyBhcmd1bWVudCBtdXN0IG5vdCBiZSBlbXB0eWApO1xuICB9XG4gIGNvbnN0IGxvd2VyQWN0aW9uID0gXy50b0xvd2VyKGFjdGlvbik7XG4gIGlmICghW1BFUk1JU1NJT05fQUNUSU9OLkdSQU5ULCBQRVJNSVNTSU9OX0FDVElPTi5SRVZPS0VdLmluY2x1ZGVzKGxvd2VyQWN0aW9uKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFVua25vd24gYWN0aW9uICcke2FjdGlvbn0nLiBgICtcbiAgICAgIGBPbmx5ICR7SlNPTi5zdHJpbmdpZnkoXy52YWx1ZXMoUEVSTUlTU0lPTl9BQ1RJT04pKX0gYWN0aW9ucyBhcmUgc3VwcG9ydGVkYCk7XG4gIH1cblxuICBsZXQgYWZmZWN0ZWRQZXJtaXNzaW9ucyA9IF8uaXNBcnJheShwZXJtaXNzaW9ucykgPyBwZXJtaXNzaW9ucyA6IFtwZXJtaXNzaW9uc107XG4gIGlmIChfLnRvTG93ZXIocGVybWlzc2lvbnMpID09PSBBTExfUEVSTUlTU0lPTlNfTUFHSUMpIHtcbiAgICBjb25zdCBkdW1wc3lzID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydkdW1wc3lzJywgJ3BhY2thZ2UnLCBhcHBQYWNrYWdlXSk7XG4gICAgY29uc3QgZ3JhbnRlZFBlcm1pc3Npb25zID0gYXdhaXQgdGhpcy5hZGIuZ2V0R3JhbnRlZFBlcm1pc3Npb25zKGFwcFBhY2thZ2UsIGR1bXBzeXMpO1xuICAgIGlmIChsb3dlckFjdGlvbiA9PT0gUEVSTUlTU0lPTl9BQ1RJT04uR1JBTlQpIHtcbiAgICAgIGNvbnN0IHJlcVBlcm1pc3NvbnMgPSBhd2FpdCB0aGlzLmFkYi5nZXRSZXFQZXJtaXNzaW9ucyhhcHBQYWNrYWdlLCBkdW1wc3lzKTtcbiAgICAgIGFmZmVjdGVkUGVybWlzc2lvbnMgPSBfLmRpZmZlcmVuY2UocmVxUGVybWlzc29ucywgZ3JhbnRlZFBlcm1pc3Npb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWZmZWN0ZWRQZXJtaXNzaW9ucyA9IGdyYW50ZWRQZXJtaXNzaW9ucztcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eShhZmZlY3RlZFBlcm1pc3Npb25zKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgJyR7YXBwUGFja2FnZX0nIGNvbnRhaW5zIG5vIHBlcm1pc3Npb25zIHRvICR7bG93ZXJBY3Rpb259YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvd2VyQWN0aW9uID09PSBQRVJNSVNTSU9OX0FDVElPTi5HUkFOVCkge1xuICAgIGF3YWl0IHRoaXMuYWRiLmdyYW50UGVybWlzc2lvbnMoYXBwUGFja2FnZSwgYWZmZWN0ZWRQZXJtaXNzaW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgQi5hbGwoYWZmZWN0ZWRQZXJtaXNzaW9ucy5tYXAoKG5hbWUpID0+IHRoaXMuYWRiLnJldm9rZVBlcm1pc3Npb24oYXBwUGFja2FnZSwgbmFtZSkpKTtcbiAgfVxufTtcblxuY29uc3QgUEVSTUlTU0lPTlNfVFlQRSA9IHtcbiAgREVOSUVEOiAnZGVuaWVkJyxcbiAgR1JBTlRFRDogJ2dyYW50ZWQnLFxuICBSRVFVRVNURUQ6ICdyZXF1ZXN0ZWQnLFxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBHZXRQZXJtaXNzaW9uc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFtyZXF1ZXN0ZWRdIC0gT25lIG9mIHBvc3NpYmxlIHBlcm1pc3Npb24gdHlwZXMgdG8gZ2V0LlxuICogQ2FuIGJlIGFueSBvZiBgUEVSTUlTU0lPTlNfVFlQRWAgdmFsdWVzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcFBhY2thZ2UgW3RoaXMub3B0cy5hcHBQYWNrYWdlXSAtIFRoZSBhcHBsaWNhdGlvbiBwYWNrYWdlIHRvIHNldCBjaGFuZ2VcbiAqIHBlcm1pc3Npb25zIG9uLiBEZWZhdWx0cyB0byB0aGUgcGFja2FnZSBuYW1lIHVuZGVyIHRlc3QuXG4gKi9cblxuLyoqXG4gKiBHZXRzIHJ1bnRpbWUgcGVybWlzc2lvbnMgbGlzdCBmb3IgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIHBhY2thZ2UuXG4gKlxuICogQHBhcmFtIHtHZXRQZXJtaXNzaW9uc09wdGlvbnN9IG9wdHMgLSBBdmFpbGFibGUgb3B0aW9ucyBtYXBwaW5nLlxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBsaXN0IG9mIHJldHJpZXZlZCBwZXJtaXNzaW9ucyBmb3IgdGhlIGdpdmVuIHR5cGVcbiAqIChjYW4gYWxzbyBiZSBlbXB0eSkuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgcGVybWlzc2lvbnMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldFBlcm1pc3Npb25zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0UGVybWlzc2lvbnMgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdHlwZSA9IFBFUk1JU1NJT05TX1RZUEUuUkVRVUVTVEVELFxuICAgIGFwcFBhY2thZ2UgPSB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgfSA9IG9wdHM7XG5cbiAgbGV0IGFjdGlvbkZ1bmM7XG4gIHN3aXRjaCAoXy50b0xvd2VyKHR5cGUpKSB7XG4gICAgY2FzZSBQRVJNSVNTSU9OU19UWVBFLlJFUVVFU1RFRDpcbiAgICAgIGFjdGlvbkZ1bmMgPSAoYXBwUGFja2FnZSkgPT4gdGhpcy5hZGIuZ2V0UmVxUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFBFUk1JU1NJT05TX1RZUEUuR1JBTlRFRDpcbiAgICAgIGFjdGlvbkZ1bmMgPSAoYXBwUGFja2FnZSkgPT4gdGhpcy5hZGIuZ2V0R3JhbnRlZFBlcm1pc3Npb25zKGFwcFBhY2thZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBQRVJNSVNTSU9OU19UWVBFLkRFTklFRDpcbiAgICAgIGFjdGlvbkZ1bmMgPSAoYXBwUGFja2FnZSkgPT4gdGhpcy5hZGIuZ2V0RGVuaWVkUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgVW5rbm93biBwZXJtaXNzaW9ucyB0eXBlICcke3R5cGV9Jy4gYCArXG4gICAgICAgIGBPbmx5ICR7SlNPTi5zdHJpbmdpZnkoXy52YWx1ZXMoUEVSTUlTU0lPTlNfVFlQRSkpfSB0eXBlcyBhcmUgc3VwcG9ydGVkYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IGFjdGlvbkZ1bmMoYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiByZWNlbnQgc3lzdGVtIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogQHJldHVybnMge09iamVjdH0gU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uIGBhZGIuZ2V0Tm90aWZpY2F0aW9uc2AgZm9yXG4gKiBtb3JlIGRldGFpbHNcbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0Tm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldE5vdGlmaWNhdGlvbnMgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuZ2V0Tm90aWZpY2F0aW9ucygpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTbXNMaXN0T3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IG1heCBbMTAwXSAtIFRoZSBtYXhpbXVtIGNvdW50IG9mIHJlY2VudCBTTVMgbWVzc2FnZXNcbiAqIHRvIHJldHJpZXZlXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgcmVjZW50IFNNUyBtZXNzYWdlcyB3aXRoIHRoZWlyIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtTbXNMaXN0T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge09iamVjdH0gU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uIGBhZGIuZ2V0U21zTGlzdGAgZm9yXG4gKiBtb3JlIGRldGFpbHNcbiAqL1xuY29tbWFuZHMubW9iaWxlTGlzdFNtcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUxpc3RTbXMgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuZ2V0U21zTGlzdChvcHRzKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVW5sb2NrT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleSBUaGUgdW5sb2NrIGtleS4gVGhlIHZhbHVlIG9mIHRoaXMga2V5IGRlcGVuZHNcbiAqIG9uIHRoZSBhY3R1YWwgdW5sb2NrIHR5cGUgYW5kIGNvdWxkIGJlIGEgcGluL3Bhc3N3b3JkL3BhdHRlcm4gdmFsdWUgb3JcbiAqIGEgYmlvbWV0cmljIGZpbmdlciBpZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFRoZSB1bmxvY2sgdHlwZS4gVGhlIGZvbGxvd2luZyB1bmxvY2sgdHlwZXNcbiAqIGFyZSBzdXBwb3J0ZWQ6IGBwaW5gLCBgcGluV2l0aEtleUV2ZW50YCwgYHBhc3N3b3JkYCwgYHBhdHRlcm5gIGFuZCBgZmluZ2VycHJpbnRgLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzdHJhdGVneSBFaXRoZXIgJ2xvY2tzZXR0aW5ncycgKGRlZmF1bHQpIG9yICd1aWF1dG9tYXRvcicuXG4gKiBTZXR0aW5nIGl0IHRvICd1aWF1dG9tYXRvcicgd2lsbCBlbmZvcmNlIHRoZSBkcml2ZXIgdG8gYXZvaWQgdXNpbmcgc3BlY2lhbFxuICogQURCIHNob3J0Y3V0cyBpbiBvcmRlciB0byBzcGVlZCB1cCB0aGUgdW5sb2NrIHByb2NlZHVyZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdGltZW91dE1zIFsyMDAwXSBUaGUgbWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kc1xuICogdG8gd2FpdCB1bnRpbCB0aGUgc2NyZWVuIGdldHMgdW5sb2NrZWRcbiAqL1xuXG4vKipcbiAqIFVubG9ja3MgdGhlIGRldmljZSBpZiBpdCBpcyBsb2NrZWQuIE5vb3AgaWYgdGhlIGRldmljZSdzIHNjcmVlbiBpcyBub3QgbG9ja2VkLlxuICpcbiAqIEBwYXJhbSB7P1VubG9ja09wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB1bmxvY2sgb3BlcmF0aW9uIGZhaWxzIG9yIHRoZSBwcm92aWRlZFxuICogYXJndW1lbnRzIGFyZSBub3QgdmFsaWRcbiAqL1xuY29tbWFuZHMubW9iaWxlVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVW5sb2NrIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBrZXksIHR5cGUsIHN0cmF0ZWd5LCB0aW1lb3V0TXMgfSA9IG9wdHM7XG4gIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwge1xuICAgIHVubG9ja0tleToga2V5LFxuICAgIHVubG9ja1R5cGU6IHR5cGUsXG4gICAgdW5sb2NrU3RyYXRlZ3k6IHN0cmF0ZWd5LFxuICAgIHVubG9ja1N1Y2Nlc3NUaW1lb3V0OiB0aW1lb3V0TXMsXG4gIH0pO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLHFCQUFxQixHQUFHLHNCQUFzQjtBQUNwRCxNQUFNQyxxQkFBcUIsR0FBRyxLQUFLO0FBRW5DLElBQUlDLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFBRUMsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUFFQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQUM7QUFBQTtBQUVqREYsUUFBUSxDQUFDRyxJQUFJLEdBQUcsZUFBZUEsSUFBSSxDQUFFQSxJQUFJLEVBQUU7RUFFekNBLElBQUksR0FBR0MsZUFBQyxDQUFDQyxPQUFPLENBQUNGLElBQUksQ0FBQyxHQUFHQSxJQUFJLENBQUNHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBR0gsSUFBSTtFQUM3QyxJQUFJSSxNQUFNLEdBQUc7SUFDWEMsSUFBSSxFQUFFTCxJ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
|
|
279
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNT01FTlRfRk9STUFUX0lTTzg2MDEiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwia2V5cyIsIl8iLCJpc0FycmF5Iiwiam9pbiIsInBhcmFtcyIsInRleHQiLCJyZXBsYWNlIiwib3B0cyIsInVuaWNvZGVLZXlib2FyZCIsImRvU2VuZEtleXMiLCJib290c3RyYXAiLCJzZW5kQWN0aW9uIiwiZ2V0RGV2aWNlVGltZSIsImZvcm1hdCIsImxvZyIsImRlYnVnIiwiZGV2aWNlVGltZXN0YW1wIiwiYWRiIiwic2hlbGwiLCJ0cmltIiwicGFyc2VkVGltZXN0YW1wIiwibW9tZW50IiwidXRjIiwiaXNWYWxpZCIsIndhcm4iLCJ1dGNPZmZzZXQiLCJfdHptIiwibW9iaWxlR2V0RGV2aWNlVGltZSIsImdldFBhZ2VTb3VyY2UiLCJiYWNrIiwiaXNLZXlib2FyZFNob3duIiwiaXNTb2Z0S2V5Ym9hcmRQcmVzZW50IiwiaGlkZUtleWJvYXJkIiwib3BlblNldHRpbmdzQWN0aXZpdHkiLCJzZXR0aW5nIiwiYXBwUGFja2FnZSIsImFwcEFjdGl2aXR5IiwiZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSIsIndhaXRGb3JOb3RBY3Rpdml0eSIsImdldFdpbmRvd1NpemUiLCJnZXRXaW5kb3dSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJ4IiwieSIsImdldEN1cnJlbnRBY3Rpdml0eSIsImdldEN1cnJlbnRQYWNrYWdlIiwiYmFja2dyb3VuZCIsInNlY29uZHMiLCJnb1RvSG9tZSIsInNsZWVwTXMiLCJ0aHJlc2hvbGRNcyIsImludGVydmFsTXMiLCJtaW4iLCJwYXJzZUludCIsInByb2dyZXNzQ2IiLCJlbGFwc2VkTXMiLCJwcm9ncmVzcyIsIndhaXRTZWNzIiwidG9GaXhlZCIsInByb2dyZXNzUGN0IiwibG9uZ1NsZWVwIiwiYXJncyIsIl9jYWNoZWRBY3Rpdml0eUFyZ3MiLCJhY3RpdmF0ZUFwcCIsImlnbiIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5Iiwic3BsaXQiLCJpbmNsdWRlcyIsInBrZyIsImFjdGl2aXR5IiwiYWN0aW9uIiwiaW50ZW50QWN0aW9uIiwiY2F0ZWdvcnkiLCJpbnRlbnRDYXRlZ29yeSIsImZsYWdzIiwiaW50ZW50RmxhZ3MiLCJ3YWl0UGtnIiwid2FpdEFjdGl2aXR5Iiwid2FpdEZvckxhdW5jaCIsImFwcFdhaXRGb3JMYXVuY2giLCJ3YWl0RHVyYXRpb24iLCJhcHBXYWl0RHVyYXRpb24iLCJvcHRpb25hbEludGVudEFyZ3VtZW50cyIsInN0b3BBcHAiLCJ1c2VyIiwidXNlclByb2ZpbGUiLCJ1dGlsIiwiZmlsdGVyT2JqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXJ0QXBwIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJ0b1BhaXJzIiwiaXNTdHJpbmciLCJhcGtTdHJpbmdzIiwiYW5kcm9pZEhlbHBlcnMiLCJwdXNoU3RyaW5ncyIsImxhdW5jaEFwcCIsImluaXRBVVQiLCJzdGFydEFVVCIsInN0YXJ0QWN0aXZpdHkiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJoYXNWYWx1ZSIsInJlc2V0IiwicmVzZXRBcHAiLCJPYmplY3QiLCJhc3NpZ24iLCJmYXN0UmVzZXQiLCJzZXRDb250ZXh0IiwiaXNDaHJvbWVTZXNzaW9uIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwic2V0VXJsIiwidXJpIiwic3RhcnRVcmkiLCJjbG9zZUFwcCIsImZvcmNlU3RvcCIsImdldERpc3BsYXlEZW5zaXR5Iiwib3V0IiwidmFsIiwiaXNOYU4iLCJlcnJvckFuZFRocm93IiwibW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiIsImVycm9ycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsIm1vYmlsZUdldE5vdGlmaWNhdGlvbnMiLCJnZXROb3RpZmljYXRpb25zIiwibW9iaWxlTGlzdFNtcyIsImdldFNtc0xpc3QiLCJtb2JpbGVVbmxvY2siLCJ0eXBlIiwic3RyYXRlZ3kiLCJ0aW1lb3V0TXMiLCJ1bmxvY2siLCJ1bmxvY2tLZXkiLCJ1bmxvY2tUeXBlIiwidW5sb2NrU3RyYXRlZ3kiLCJ1bmxvY2tTdWNjZXNzVGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9nZW5lcmFsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgYW5kcm9pZEhlbHBlcnMgZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgbG9uZ1NsZWVwIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmNvbnN0IE1PTUVOVF9GT1JNQVRfSVNPODYwMSA9ICdZWVlZLU1NLUREVEhIOm1tOnNzWic7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29tbWFuZHMua2V5cyA9IGFzeW5jIGZ1bmN0aW9uIGtleXMgKGtleXMpIHtcbiAgLy8gUHJvdG9jb2wgc2VuZHMgYW4gYXJyYXk7IHJldGhpbmsgYXBwcm9hY2hcbiAga2V5cyA9IF8uaXNBcnJheShrZXlzKSA/IGtleXMuam9pbignJykgOiBrZXlzO1xuICBsZXQgcGFyYW1zID0ge1xuICAgIHRleHQ6IGtleXMsXG4gICAgcmVwbGFjZTogZmFsc2VcbiAgfTtcbiAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQpIHtcbiAgICBwYXJhbXMudW5pY29kZUtleWJvYXJkID0gdHJ1ZTtcbiAgfVxuICBhd2FpdCB0aGlzLmRvU2VuZEtleXMocGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLmRvU2VuZEtleXMgPSBhc3luYyBmdW5jdGlvbiBkb1NlbmRLZXlzIChwYXJhbXMpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3NldFRleHQnLCBwYXJhbXMpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZGV2aWNlJ3MgdGltZXN0YW1wLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBUaGUgc2V0IG9mIGZvcm1hdCBzcGVjaWZpZXJzLiBSZWFkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9tb21lbnRqcy5jb20vZG9jcy8gdG8gZ2V0IHRoZSBmdWxsIGxpc3Qgb2Ygc3VwcG9ydGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUgZm9ybWF0IHNwZWNpZmllcnMuIFRoZSBkZWZhdWx0IGZvcm1hdCBpc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIGBZWVlZLU1NLUREVEhIOm1tOnNzWmAsIHdoaWNoIGNvbXBsaWVzIHRvIElTTy04NjAxXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZvcm1hdHRlZCBkYXRldGltZSBzdHJpbmcgb3IgdGhlIHJhdyBjb21tYW5kIG91dHB1dCBpZiBmb3JtYXR0aW5nIGZhaWxzXG4gKi9cbmNvbW1hbmRzLmdldERldmljZVRpbWUgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VUaW1lIChmb3JtYXQgPSBNT01FTlRfRk9STUFUX0lTTzg2MDEpIHtcbiAgdGhpcy5sb2cuZGVidWcoJ0F0dGVtcHRpbmcgdG8gY2FwdHVyZSBhbmRyb2lkIGRldmljZSBkYXRlIGFuZCB0aW1lLiAnICtcbiAgICBgVGhlIGZvcm1hdCBzcGVjaWZpZXIgaXMgJyR7Zm9ybWF0fSdgKTtcbiAgY29uc3QgZGV2aWNlVGltZXN0YW1wID0gKGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZGF0ZScsICcrJVktJW0tJWRUJVQleiddKSkudHJpbSgpO1xuICB0aGlzLmxvZy5kZWJ1ZyhgR290IGRldmljZSB0aW1lc3RhbXA6ICR7ZGV2aWNlVGltZXN0YW1wfWApO1xuICBjb25zdCBwYXJzZWRUaW1lc3RhbXAgPSBtb21lbnQudXRjKGRldmljZVRpbWVzdGFtcCwgJ1lZWVktTU0tRERUSEg6bW06c3NaWicpO1xuICBpZiAoIXBhcnNlZFRpbWVzdGFtcC5pc1ZhbGlkKCkpIHtcbiAgICB0aGlzLmxvZy53YXJuKCdDYW5ub3QgcGFyc2UgdGhlIHJldHVybmVkIHRpbWVzdGFtcC4gUmV0dXJuaW5nIGFzIGlzJyk7XG4gICAgcmV0dXJuIGRldmljZVRpbWVzdGFtcDtcbiAgfVxuICByZXR1cm4gcGFyc2VkVGltZXN0YW1wLnV0Y09mZnNldChwYXJzZWRUaW1lc3RhbXAuX3R6bSB8fCAwKS5mb3JtYXQoZm9ybWF0KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRGV2aWNlVGltZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmb3JtYXQgW1lZWVktTU0tRERUSEg6bW06c3NaXSAtIFNlZSBnZXREZXZpY2VUaW1lI2Zvcm1hdFxuICovXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGRldmljZSB0aW1lXG4gKlxuICogQHBhcmFtIHtEZXZpY2VUaW1lT3B0aW9uc30gb3B0c1xuICogQHJldHVybiB7c3RyaW5nfSBGb3JtYXR0ZWQgZGF0ZXRpbWUgc3RyaW5nIG9yIHRoZSByYXcgY29tbWFuZCBvdXRwdXQgaWYgZm9ybWF0dGluZyBmYWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXREZXZpY2VUaW1lID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0RGV2aWNlVGltZSAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldERldmljZVRpbWUob3B0cy5mb3JtYXQpO1xufTtcblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VTb3VyY2UgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignc291cmNlJyk7XG59O1xuXG5jb21tYW5kcy5iYWNrID0gYXN5bmMgZnVuY3Rpb24gYmFjayAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdwcmVzc0JhY2snKTtcbn07XG5cbmNvbW1hbmRzLmlzS2V5Ym9hcmRTaG93biA9IGFzeW5jIGZ1bmN0aW9uIGlzS2V5Ym9hcmRTaG93biAoKSB7XG4gIGNvbnN0IHtpc0tleWJvYXJkU2hvd259ID0gYXdhaXQgdGhpcy5hZGIuaXNTb2Z0S2V5Ym9hcmRQcmVzZW50KCk7XG4gIHJldHVybiBpc0tleWJvYXJkU2hvd247XG59O1xuXG5jb21tYW5kcy5oaWRlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBoaWRlS2V5Ym9hcmQgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaGlkZUtleWJvYXJkKCk7XG59O1xuXG5jb21tYW5kcy5vcGVuU2V0dGluZ3NBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIG9wZW5TZXR0aW5nc0FjdGl2aXR5IChzZXR0aW5nKSB7XG4gIGxldCB7YXBwUGFja2FnZSwgYXBwQWN0aXZpdHl9ID0gYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpO1xuICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2FtJywgJ3N0YXJ0JywgJy1hJywgYGFuZHJvaWQuc2V0dGluZ3MuJHtzZXR0aW5nfWBdKTtcbiAgYXdhaXQgdGhpcy5hZGIud2FpdEZvck5vdEFjdGl2aXR5KGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LCA1MDAwKTtcbn07XG5cbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiBnZXRXaW5kb3dTaXplICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2dldERldmljZVNpemUnKTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiBnZXRXaW5kb3dSZWN0ICgpIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBhd2FpdCB0aGlzLmdldFdpbmRvd1NpemUoKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG59O1xuXG5jb21tYW5kcy5nZXRDdXJyZW50QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50QWN0aXZpdHkgKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKSkuYXBwQWN0aXZpdHk7XG59O1xuXG5jb21tYW5kcy5nZXRDdXJyZW50UGFja2FnZSA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRQYWNrYWdlICgpIHtcbiAgcmV0dXJuIChhd2FpdCB0aGlzLmFkYi5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5KCkpLmFwcFBhY2thZ2U7XG59O1xuXG5jb21tYW5kcy5iYWNrZ3JvdW5kID0gYXN5bmMgZnVuY3Rpb24gYmFja2dyb3VuZCAoc2Vjb25kcykge1xuICBpZiAoc2Vjb25kcyA8IDApIHtcbiAgICAvLyBpZiB1c2VyIHBhc3NlcyBpbiBhIG5lZ2F0aXZlIHNlY29uZHMgdmFsdWUsIGludGVycHJldCB0aGF0IGFzIHRoZSBpbnN0cnVjdGlvblxuICAgIC8vIHRvIG5vdCBicmluZyB0aGUgYXBwIGJhY2sgYXQgYWxsXG4gICAgYXdhaXQgdGhpcy5hZGIuZ29Ub0hvbWUoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQge2FwcFBhY2thZ2UsIGFwcEFjdGl2aXR5fSA9IGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKTtcbiAgYXdhaXQgdGhpcy5hZGIuZ29Ub0hvbWUoKTtcblxuICAvLyBwZW9wbGUgY2FuIHdhaXQgZm9yIGEgbG9uZyB0aW1lLCBzbyB0byBiZSBzYWZlIGxldCdzIHVzZSB0aGUgbG9uZ1NsZWVwIGZ1bmN0aW9uIGFuZCBsb2dcbiAgLy8gcHJvZ3Jlc3MgcGVyaW9kaWNhbGx5LlxuICBjb25zdCBzbGVlcE1zID0gc2Vjb25kcyAqIDEwMDA7XG4gIGNvbnN0IHRocmVzaG9sZE1zID0gMzAgKiAxMDAwOyAvLyB1c2UgdGhlIHNwaW4td2FpdCBmb3IgYW55dGhpbmcgb3ZlciB0aGlzIHRocmVzaG9sZFxuICAvLyBmb3Igb3VyIHNwaW4gaW50ZXJ2YWwsIHVzZSAxJSBvZiB0aGUgdG90YWwgd2FpdCB0aW1lLCBidXQgbm90aGluZyBiaWdnZXIgdGhhbiAzMHNcbiAgY29uc3QgaW50ZXJ2YWxNcyA9IF8ubWluKFszMCAqIDEwMDAsIHBhcnNlSW50KHNsZWVwTXMgLyAxMDAsIDEwKV0pO1xuICBjb25zdCBwcm9ncmVzc0NiID0gKHtlbGFwc2VkTXMsIHByb2dyZXNzfSkgPT4ge1xuICAgIGNvbnN0IHdhaXRTZWNzID0gKGVsYXBzZWRNcyAvIDEwMDApLnRvRml4ZWQoMCk7XG4gICAgY29uc3QgcHJvZ3Jlc3NQY3QgPSAocHJvZ3Jlc3MgKiAxMDApLnRvRml4ZWQoMik7XG4gICAgdGhpcy5sb2cuZGVidWcoYFdhaXRlZCAke3dhaXRTZWNzfXMgc28gZmFyICgke3Byb2dyZXNzUGN0fSUpYCk7XG4gIH07XG4gIGF3YWl0IGxvbmdTbGVlcChzbGVlcE1zLCB7dGhyZXNob2xkTXMsIGludGVydmFsTXMsIHByb2dyZXNzQ2J9KTtcblxuICBsZXQgYXJncztcbiAgaWYgKHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJncyAmJiB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3NbYCR7YXBwUGFja2FnZX0vJHthcHBBY3Rpdml0eX1gXSkge1xuICAgIC8vIHRoZSBhY3Rpdml0eSB3YXMgc3RhcnRlZCB3aXRoIGBzdGFydEFjdGl2aXR5YCwgc28gdXNlIHRob3NlIGFyZ3MgdG8gcmVzdGFydFxuICAgIGFyZ3MgPSB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3NbYCR7YXBwUGFja2FnZX0vJHthcHBBY3Rpdml0eX1gXTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEFjdGl2YXRpbmcgYXBwICcke2FwcFBhY2thZ2V9JyBpbiBvcmRlciB0byByZXN0b3JlIGl0YCk7XG4gICAgICBhd2FpdCB0aGlzLmFjdGl2YXRlQXBwKGFwcFBhY2thZ2UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIGFyZ3MgPSAoKGFwcFBhY2thZ2UgPT09IHRoaXMub3B0cy5hcHBQYWNrYWdlICYmIGFwcEFjdGl2aXR5ID09PSB0aGlzLm9wdHMuYXBwQWN0aXZpdHkpIHx8XG4gICAgICAgICAgICAoYXBwUGFja2FnZSA9PT0gdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlICYmICh0aGlzLm9wdHMuYXBwV2FpdEFjdGl2aXR5IHx8ICcnKS5zcGxpdCgnLCcpLmluY2x1ZGVzKGFwcEFjdGl2aXR5KSkpXG4gICAgICA/IHsvLyB0aGUgYWN0aXZpdHkgaXMgdGhlIG9yaWdpbmFsIHNlc3Npb24gYWN0aXZpdHksIHNvIHVzZSB0aGUgb3JpZ2luYWwgYXJnc1xuICAgICAgICBwa2c6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgICBhY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgICAgICBhY3Rpb246IHRoaXMub3B0cy5pbnRlbnRBY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiB0aGlzLm9wdHMuaW50ZW50Q2F0ZWdvcnksXG4gICAgICAgIGZsYWdzOiB0aGlzLm9wdHMuaW50ZW50RmxhZ3MsXG4gICAgICAgIHdhaXRQa2c6IHRoaXMub3B0cy5hcHBXYWl0UGFja2FnZSxcbiAgICAgICAgd2FpdEFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwV2FpdEFjdGl2aXR5LFxuICAgICAgICB3YWl0Rm9yTGF1bmNoOiB0aGlzLm9wdHMuYXBwV2FpdEZvckxhdW5jaCxcbiAgICAgICAgd2FpdER1cmF0aW9uOiB0aGlzLm9wdHMuYXBwV2FpdER1cmF0aW9uLFxuICAgICAgICBvcHRpb25hbEludGVudEFyZ3VtZW50czogdGhpcy5vcHRzLm9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgICAgICBzdG9wQXBwOiBmYWxzZSxcbiAgICAgICAgdXNlcjogdGhpcy5vcHRzLnVzZXJQcm9maWxlfVxuICAgICAgOiB7Ly8gdGhlIGFjdGl2aXR5IHdhcyBzdGFydGVkIHNvbWUgb3RoZXIgd2F5LCBzbyB1c2UgZGVmYXVsdHNcbiAgICAgICAgcGtnOiBhcHBQYWNrYWdlLFxuICAgICAgICBhY3Rpdml0eTogYXBwQWN0aXZpdHksXG4gICAgICAgIHdhaXRQa2c6IGFwcFBhY2thZ2UsXG4gICAgICAgIHdhaXRBY3Rpdml0eTogYXBwQWN0aXZpdHksXG4gICAgICAgIHN0b3BBcHA6IGZhbHNlfTtcbiAgfVxuICBhcmdzID0gYXdhaXQgdXRpbC5maWx0ZXJPYmplY3QoYXJncyk7XG4gIHRoaXMubG9nLmRlYnVnKGBCcmluZ2luZyBhcHBsaWNhdGlvbiBiYWNrIHRvIGZvcmVncm91bmQgd2l0aCBhcmd1bWVudHM6ICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9YCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zdGFydEFwcChhcmdzKTtcbn07XG5cbmNvbW1hbmRzLmdldFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiBnZXRTdHJpbmdzIChsYW5ndWFnZSkge1xuICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmFkYi5nZXREZXZpY2VMYW5ndWFnZSgpO1xuICAgIHRoaXMubG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gKG1hcHBpbmcpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0gPSBhd2FpdCBhbmRyb2lkSGVscGVycy5wdXNoU3RyaW5ncyhsYW5ndWFnZSwgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIGlmICh0aGlzLmJvb3RzdHJhcCkge1xuICAgIC8vIFRPRE86IFRoaXMgaXMgbXV0YXRpbmcgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UsIGJ1dCBpdCdzIGhvdyBhcHBpdW0gY3VycmVudGx5IHdvcmtzXG4gICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbigndXBkYXRlU3RyaW5ncycpO1xuICB9XG5cbiAgcmV0dXJuIHByZXByb2Nlc3NTdHJpbmdzTWFwKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pO1xufTtcblxuY29tbWFuZHMubGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbGF1bmNoQXBwICgpIHtcbiAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG4gIGF3YWl0IHRoaXMuc3RhcnRBVVQoKTtcbn07XG5cbmNvbW1hbmRzLnN0YXJ0QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBzdGFydEFjdGl2aXR5IChhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSxcbiAgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSwgaW50ZW50QWN0aW9uLCBpbnRlbnRDYXRlZ29yeSwgaW50ZW50RmxhZ3MsXG4gIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBkb250U3RvcEFwcE9uUmVzZXQpIHtcbiAgdGhpcy5sb2cuZGVidWcoYFN0YXJ0aW5nIHBhY2thZ2UgJyR7YXBwUGFja2FnZX0nIGFuZCBhY3Rpdml0eSAnJHthcHBBY3Rpdml0eX0nYCk7XG5cbiAgLy8gZG9udFN0b3BBcHBPblJlc2V0IGlzIGJvdGggYW4gYXJndW1lbnQgaGVyZSwgYW5kIGEgZGVzaXJlZCBjYXBhYmlsaXR5XG4gIC8vIGlmIHRoZSBhcmd1bWVudCBpcyBzZXQsIHVzZSBpdCwgb3RoZXJ3aXNlIHVzZSB0aGUgY2FwXG4gIGlmICghdXRpbC5oYXNWYWx1ZShkb250U3RvcEFwcE9uUmVzZXQpKSB7XG4gICAgZG9udFN0b3BBcHBPblJlc2V0ID0gISF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0O1xuICB9XG5cbiAgbGV0IGFyZ3MgPSB7XG4gICAgcGtnOiBhcHBQYWNrYWdlLFxuICAgIGFjdGl2aXR5OiBhcHBBY3Rpdml0eSxcbiAgICB3YWl0UGtnOiBhcHBXYWl0UGFja2FnZSB8fCBhcHBQYWNrYWdlLFxuICAgIHdhaXRBY3Rpdml0eTogYXBwV2FpdEFjdGl2aXR5IHx8IGFwcEFjdGl2aXR5LFxuICAgIGFjdGlvbjogaW50ZW50QWN0aW9uLFxuICAgIGNhdGVnb3J5OiBpbnRlbnRDYXRlZ29yeSxcbiAgICBmbGFnczogaW50ZW50RmxhZ3MsXG4gICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsXG4gICAgc3RvcEFwcDogIWRvbnRTdG9wQXBwT25SZXNldFxuICB9O1xuICB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3MgPSB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3MgfHwge307XG4gIHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJnc1tgJHthcmdzLndhaXRQa2d9LyR7YXJncy53YWl0QWN0aXZpdHl9YF0gPSBhcmdzO1xuICBhd2FpdCB0aGlzLmFkYi5zdGFydEFwcChhcmdzKTtcbn07XG5cbmNvbW1hbmRzLnJlc2V0ID0gYXN5bmMgZnVuY3Rpb24gcmVzZXQgKCkge1xuICBhd2FpdCBhbmRyb2lkSGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRzLCB7ZmFzdFJlc2V0OiB0cnVlfSkpO1xuICAvLyByZXNldCBjb250ZXh0IHNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCBraW5kIG9uIGNvbnRleHQgd2Ugd2lsbCBlbmQgdXAgYWZ0ZXIgYXBwIGxhdW5jaC5cbiAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmlzQ2hyb21lU2Vzc2lvbiA/IHRoaXMuc3RhcnRDaHJvbWVTZXNzaW9uKCkgOiB0aGlzLnN0YXJ0QVVUKCk7XG59O1xuXG5jb21tYW5kcy5zdGFydEFVVCA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0QVVUICgpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRBcHAoe1xuICAgIHBrZzogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgYWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICBhY3Rpb246IHRoaXMub3B0cy5pbnRlbnRBY3Rpb24sXG4gICAgY2F0ZWdvcnk6IHRoaXMub3B0cy5pbnRlbnRDYXRlZ29yeSxcbiAgICBmbGFnczogdGhpcy5vcHRzLmludGVudEZsYWdzLFxuICAgIHdhaXRQa2c6IHRoaXMub3B0cy5hcHBXYWl0UGFja2FnZSxcbiAgICB3YWl0QWN0aXZpdHk6IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHksXG4gICAgd2FpdEZvckxhdW5jaDogdGhpcy5vcHRzLmFwcFdhaXRGb3JMYXVuY2gsXG4gICAgd2FpdER1cmF0aW9uOiB0aGlzLm9wdHMuYXBwV2FpdER1cmF0aW9uLFxuICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB0aGlzLm9wdHMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsXG4gICAgc3RvcEFwcDogIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQsXG4gICAgdXNlcjogdGhpcy5vcHRzLnVzZXJQcm9maWxlLFxuICB9KTtcbn07XG5cbi8vIHdlIG92ZXJyaWRlIHNldFVybCB0byB0YWtlIGFuIGFuZHJvaWQgVVJJIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBkZWVwLWxpbmtpbmdcbi8vIGluc2lkZSBhbiBhcHAsIHNpbWlsYXIgdG8gc3RhcnRpbmcgYW4gaW50ZW50XG5jb21tYW5kcy5zZXRVcmwgPSBhc3luYyBmdW5jdGlvbiBzZXRVcmwgKHVyaSkge1xuICBhd2FpdCB0aGlzLmFkYi5zdGFydFVyaSh1cmksIHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbn07XG5cbi8vIGNsb3NpbmcgYXBwIHVzaW5nIGZvcmNlIHN0b3BcbmNvbW1hbmRzLmNsb3NlQXBwID0gYXN5bmMgZnVuY3Rpb24gY2xvc2VBcHAgKCkge1xuICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAvLyByZXNldCBjb250ZXh0IHNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCBraW5kIG9uIGNvbnRleHQgd2Ugd2lsbCBlbmQgdXAgYWZ0ZXIgYXBwIGxhdW5jaC5cbiAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KCk7XG59O1xuXG5jb21tYW5kcy5nZXREaXNwbGF5RGVuc2l0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldERpc3BsYXlEZW5zaXR5ICgpIHtcbiAgLy8gZmlyc3QgdHJ5IHRoZSBwcm9wZXJ0eSBmb3IgZGV2aWNlc1xuICBsZXQgb3V0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydnZXRwcm9wJywgJ3JvLnNmLmxjZF9kZW5zaXR5J10pO1xuICBpZiAob3V0KSB7XG4gICAgbGV0IHZhbCA9IHBhcnNlSW50KG91dCwgMTApO1xuICAgIC8vIGlmIHRoZSB2YWx1ZSBpcyBOYU4sIHRyeSBnZXR0aW5nIHRoZSBlbXVsYXRvciBwcm9wZXJ0eVxuICAgIGlmICghaXNOYU4odmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBkZW5zaXR5IHZhbHVlIHdhcyBOYU46IFwiJHtvdXR9XCJgKTtcbiAgfVxuICAvLyBmYWxsYmFjayB0byB0cnlpbmcgcHJvcGVydHkgZm9yIGVtdWxhdG9yc1xuICBvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2dldHByb3AnLCAncWVtdS5zZi5sY2RfZGVuc2l0eSddKTtcbiAgaWYgKG91dCkge1xuICAgIGxldCB2YWwgPSBwYXJzZUludChvdXQsIDEwKTtcbiAgICBpZiAoIWlzTmFOKHZhbCkpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHRoaXMubG9nLmRlYnVnKGBQYXJzZWQgZGVuc2l0eSB2YWx1ZSB3YXMgTmFOOiBcIiR7b3V0fVwiYCk7XG4gIH1cbiAgLy8gY291bGRuJ3QgZ2V0IGFueXRoaW5nLCBzbyBlcnJvciBvdXRcbiAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnRmFpbGVkIHRvIGdldCBkaXNwbGF5IGRlbnNpdHkgcHJvcGVydHkuJyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHthY3Rpb259ID0gb3B0cztcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGFjdGlvbikpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnYWN0aW9uJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5hZGIucGVyZm9ybUVkaXRvckFjdGlvbihhY3Rpb24pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgcmVjZW50IHN5c3RlbSBub3RpZmljYXRpb25zLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiBgYWRiLmdldE5vdGlmaWNhdGlvbnNgIGZvclxuICogbW9yZSBkZXRhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldE5vdGlmaWNhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXROb3RpZmljYXRpb25zICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmdldE5vdGlmaWNhdGlvbnMoKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU21zTGlzdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXggWzEwMF0gLSBUaGUgbWF4aW11bSBjb3VudCBvZiByZWNlbnQgU01TIG1lc3NhZ2VzXG4gKiB0byByZXRyaWV2ZVxuICovXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHJlY2VudCBTTVMgbWVzc2FnZXMgd2l0aCB0aGVpciBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7U21zTGlzdE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiBgYWRiLmdldFNtc0xpc3RgIGZvclxuICogbW9yZSBkZXRhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RTbXMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0U21zIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmdldFNtc0xpc3Qob3B0cyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFVubG9ja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXkgVGhlIHVubG9jayBrZXkuIFRoZSB2YWx1ZSBvZiB0aGlzIGtleSBkZXBlbmRzXG4gKiBvbiB0aGUgYWN0dWFsIHVubG9jayB0eXBlIGFuZCBjb3VsZCBiZSBhIHBpbi9wYXNzd29yZC9wYXR0ZXJuIHZhbHVlIG9yXG4gKiBhIGJpb21ldHJpYyBmaW5nZXIgaWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSBUaGUgdW5sb2NrIHR5cGUuIFRoZSBmb2xsb3dpbmcgdW5sb2NrIHR5cGVzXG4gKiBhcmUgc3VwcG9ydGVkOiBgcGluYCwgYHBpbldpdGhLZXlFdmVudGAsIGBwYXNzd29yZGAsIGBwYXR0ZXJuYCBhbmQgYGZpbmdlcnByaW50YC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gc3RyYXRlZ3kgRWl0aGVyICdsb2Nrc2V0dGluZ3MnIChkZWZhdWx0KSBvciAndWlhdXRvbWF0b3InLlxuICogU2V0dGluZyBpdCB0byAndWlhdXRvbWF0b3InIHdpbGwgZW5mb3JjZSB0aGUgZHJpdmVyIHRvIGF2b2lkIHVzaW5nIHNwZWNpYWxcbiAqIEFEQiBzaG9ydGN1dHMgaW4gb3JkZXIgdG8gc3BlZWQgdXAgdGhlIHVubG9jayBwcm9jZWR1cmUuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRpbWVvdXRNcyBbMjAwMF0gVGhlIG1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHNcbiAqIHRvIHdhaXQgdW50aWwgdGhlIHNjcmVlbiBnZXRzIHVubG9ja2VkXG4gKi9cblxuLyoqXG4gKiBVbmxvY2tzIHRoZSBkZXZpY2UgaWYgaXQgaXMgbG9ja2VkLiBOb29wIGlmIHRoZSBkZXZpY2UncyBzY3JlZW4gaXMgbm90IGxvY2tlZC5cbiAqXG4gKiBAcGFyYW0gez9VbmxvY2tPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdW5sb2NrIG9wZXJhdGlvbiBmYWlscyBvciB0aGUgcHJvdmlkZWRcbiAqIGFyZ3VtZW50cyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVubG9jayAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsga2V5LCB0eXBlLCBzdHJhdGVneSwgdGltZW91dE1zIH0gPSBvcHRzO1xuICBhd2FpdCBhbmRyb2lkSGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHtcbiAgICB1bmxvY2tLZXk6IGtleSxcbiAgICB1bmxvY2tUeXBlOiB0eXBlLFxuICAgIHVubG9ja1N0cmF0ZWd5OiBzdHJhdGVneSxcbiAgICB1bmxvY2tTdWNjZXNzVGltZW91dDogdGltZW91dE1zLFxuICB9KTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsc0JBQXNCO0FBRXBELElBQUlDLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFBRUMsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUFFQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQUM7QUFBQTtBQUVqREYsUUFBUSxDQUFDRyxJQUFJLEdBQUcsZUFBZUEsSUFBSSxDQUFFQSxJQUFJLEVBQUU7RUFFekNBLElBQUksR0FBR0MsZUFBQyxDQUFDQyxPQUFPLENBQUNGLElBQUksQ0FBQyxHQUFHQSxJQUFJLENBQUNHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBR0gsSUFBSTtFQUM3QyxJQUFJSSxNQUFNLEdBQUc7SUFDWEMsSUFBSSxFQUFFTCxJQUFJO0lBQ1ZNLE9BQU8sRUFBRTtFQUNYLENBQUM7RUFDRCxJQUFJLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxlQUFlLEVBQUU7SUFDN0JKLE1BQU0sQ0FBQ0ksZUFBZSxHQUFHLElBQUk7RUFDL0I7RUFDQSxNQUFNLElBQUksQ0FBQ0MsVUFBVSxDQUFDTCxNQUFNLENBQUM7QUFDL0IsQ0FBQztBQUVEUCxRQUFRLENBQUNZLFVBQVUsR0FBRyxlQUFlQSxVQUFVLENBQUVMLE1BQU0sRUFBRTtFQUN2RCxPQUFPLE1BQU0sSUFBSSxDQUFDTSxTQUFTLENBQUNDLFVBQVUsQ0FBQyxTQUFTLEVBQUVQLE1BQU0sQ0FBQztBQUMzRCxDQUFDO0FBV0RQLFFBQVEsQ0FBQ2UsYUFBYSxHQUFHLGVBQWVBLGFBQWEsQ0FBRUMsTUFBTSxHQUFHakIscUJBQXFCLEVBQUU7RUFDckYsSUFBSSxDQUFDa0IsR0FBRyxDQUFDQyxLQUFLLENBQUMsc0RBQXNELEdB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"general.js","names":["MOMENT_FORMAT_ISO8601","ALL_PERMISSIONS_MAGIC","commands","helpers","extensions","keys","_","isArray","join","params","text","replace","opts","unicodeKeyboard","doSendKeys","bootstrap","sendAction","getDeviceTime","format","log","debug","deviceTimestamp","adb","shell","trim","parsedTimestamp","moment","utc","isValid","warn","utcOffset","_tzm","mobileGetDeviceTime","getPageSource","back","isKeyboardShown","isSoftKeyboardPresent","hideKeyboard","openSettingsActivity","setting","appPackage","appActivity","getFocusedPackageAndActivity","waitForNotActivity","getWindowSize","getWindowRect","width","height","x","y","getCurrentActivity","getCurrentPackage","background","seconds","goToHome","sleepMs","thresholdMs","intervalMs","min","parseInt","progressCb","elapsedMs","progress","waitSecs","toFixed","progressPct","longSleep","args","_cachedActivityArgs","activateApp","ign","appWaitPackage","appWaitActivity","split","includes","pkg","activity","action","intentAction","category","intentCategory","flags","intentFlags","waitPkg","waitActivity","waitForLaunch","appWaitForLaunch","waitDuration","appWaitDuration","optionalIntentArguments","stopApp","user","userProfile","util","filterObject","JSON","stringify","startApp","getStrings","language","getDeviceLanguage","info","preprocessStringsMap","mapping","result","key","value","toPairs","isString","apkStrings","androidHelpers","pushStrings","launchApp","initAUT","startAUT","startActivity","dontStopAppOnReset","hasValue","reset","resetApp","Object","assign","fastReset","setContext","isChromeSession","startChromeSession","setUrl","uri","startUri","closeApp","forceStop","getDisplayDensity","out","val","isNaN","errorAndThrow","mobilePerformEditorAction","errors","InvalidArgumentError","performEditorAction","PERMISSION_ACTION","GRANT","REVOKE","mobileChangePermissions","permissions","isNil","isEmpty","lowerAction","toLower","values","affectedPermissions","dumpsys","grantedPermissions","getGrantedPermissions","reqPermissons","getReqPermissions","difference","grantPermissions","B","all","map","name","revokePermission","PERMISSIONS_TYPE","DENIED","GRANTED","REQUESTED","mobileGetPermissions","type","actionFunc","getDeniedPermissions","mobileGetNotifications","getNotifications","mobileListSms","getSmsList","mobileUnlock","strategy","timeoutMs","unlock","unlockKey","unlockType","unlockStrategy","unlockSuccessTimeout"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport androidHelpers from '../android-helpers';\nimport { util } from '@appium/support';\nimport moment from 'moment';\nimport { longSleep } from 'asyncbox';\nimport { errors } from 'appium/driver';\nimport B from 'bluebird';\n\nconst MOMENT_FORMAT_ISO8601 = 'YYYY-MM-DDTHH:mm:ssZ';\nconst ALL_PERMISSIONS_MAGIC = 'all';\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.keys = async function keys (keys) {\n // Protocol sends an array; rethink approach\n keys = _.isArray(keys) ? keys.join('') : keys;\n let params = {\n text: keys,\n replace: false\n };\n if (this.opts.unicodeKeyboard) {\n params.unicodeKeyboard = true;\n }\n await this.doSendKeys(params);\n};\n\ncommands.doSendKeys = async function doSendKeys (params) {\n return await this.bootstrap.sendAction('setText', params);\n};\n\n/**\n * Retrieves the current device's timestamp.\n *\n * @param {string} format - The set of format specifiers. Read\n * https://momentjs.com/docs/ to get the full list of supported\n * datetime format specifiers. The default format is\n * `YYYY-MM-DDTHH:mm:ssZ`, which complies to ISO-8601\n * @return {string} Formatted datetime string or the raw command output if formatting fails\n */\ncommands.getDeviceTime = async function getDeviceTime (format = MOMENT_FORMAT_ISO8601) {\n this.log.debug('Attempting to capture android device date and time. ' +\n `The format specifier is '${format}'`);\n const deviceTimestamp = (await this.adb.shell(['date', '+%Y-%m-%dT%T%z'])).trim();\n this.log.debug(`Got device timestamp: ${deviceTimestamp}`);\n const parsedTimestamp = moment.utc(deviceTimestamp, 'YYYY-MM-DDTHH:mm:ssZZ');\n if (!parsedTimestamp.isValid()) {\n this.log.warn('Cannot parse the returned timestamp. Returning as is');\n return deviceTimestamp;\n }\n return parsedTimestamp.utcOffset(parsedTimestamp._tzm || 0).format(format);\n};\n\n/**\n * @typedef {Object} DeviceTimeOptions\n * @property {string} format [YYYY-MM-DDTHH:mm:ssZ] - See getDeviceTime#format\n */\n\n/**\n * Retrieves the current device time\n *\n * @param {DeviceTimeOptions} opts\n * @return {string} Formatted datetime string or the raw command output if formatting fails\n */\ncommands.mobileGetDeviceTime = async function mobileGetDeviceTime (opts = {}) {\n return await this.getDeviceTime(opts.format);\n};\n\ncommands.getPageSource = async function getPageSource () {\n return await this.bootstrap.sendAction('source');\n};\n\ncommands.back = async function back () {\n return await this.bootstrap.sendAction('pressBack');\n};\n\ncommands.isKeyboardShown = async function isKeyboardShown () {\n const {isKeyboardShown} = await this.adb.isSoftKeyboardPresent();\n return isKeyboardShown;\n};\n\ncommands.hideKeyboard = async function hideKeyboard () {\n return await this.adb.hideKeyboard();\n};\n\ncommands.openSettingsActivity = async function openSettingsActivity (setting) {\n let {appPackage, appActivity} = await this.adb.getFocusedPackageAndActivity();\n await this.adb.shell(['am', 'start', '-a', `android.settings.${setting}`]);\n await this.adb.waitForNotActivity(appPackage, appActivity, 5000);\n};\n\ncommands.getWindowSize = async function getWindowSize () {\n return await this.bootstrap.sendAction('getDeviceSize');\n};\n\n// For W3C\ncommands.getWindowRect = async function getWindowRect () {\n const { width, height } = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0\n };\n};\n\ncommands.getCurrentActivity = async function getCurrentActivity () {\n return (await this.adb.getFocusedPackageAndActivity()).appActivity;\n};\n\ncommands.getCurrentPackage = async function getCurrentPackage () {\n return (await this.adb.getFocusedPackageAndActivity()).appPackage;\n};\n\ncommands.background = async function background (seconds) {\n if (seconds < 0) {\n // if user passes in a negative seconds value, interpret that as the instruction\n // to not bring the app back at all\n await this.adb.goToHome();\n return true;\n }\n let {appPackage, appActivity} = await this.adb.getFocusedPackageAndActivity();\n await this.adb.goToHome();\n\n // people can wait for a long time, so to be safe let's use the longSleep function and log\n // progress periodically.\n const sleepMs = seconds * 1000;\n const thresholdMs = 30 * 1000; // use the spin-wait for anything over this threshold\n // for our spin interval, use 1% of the total wait time, but nothing bigger than 30s\n const intervalMs = _.min([30 * 1000, parseInt(sleepMs / 100, 10)]);\n const progressCb = ({elapsedMs, progress}) => {\n const waitSecs = (elapsedMs / 1000).toFixed(0);\n const progressPct = (progress * 100).toFixed(2);\n this.log.debug(`Waited ${waitSecs}s so far (${progressPct}%)`);\n };\n await longSleep(sleepMs, {thresholdMs, intervalMs, progressCb});\n\n let args;\n if (this._cachedActivityArgs && this._cachedActivityArgs[`${appPackage}/${appActivity}`]) {\n // the activity was started with `startActivity`, so use those args to restart\n args = this._cachedActivityArgs[`${appPackage}/${appActivity}`];\n } else {\n try {\n this.log.debug(`Activating app '${appPackage}' in order to restore it`);\n await this.activateApp(appPackage);\n return true;\n } catch (ign) {}\n args = ((appPackage === this.opts.appPackage && appActivity === this.opts.appActivity) ||\n (appPackage === this.opts.appWaitPackage && (this.opts.appWaitActivity || '').split(',').includes(appActivity)))\n ? {// the activity is the original session activity, so use the original args\n pkg: this.opts.appPackage,\n activity: this.opts.appActivity,\n action: this.opts.intentAction,\n category: this.opts.intentCategory,\n flags: this.opts.intentFlags,\n waitPkg: this.opts.appWaitPackage,\n waitActivity: this.opts.appWaitActivity,\n waitForLaunch: this.opts.appWaitForLaunch,\n waitDuration: this.opts.appWaitDuration,\n optionalIntentArguments: this.opts.optionalIntentArguments,\n stopApp: false,\n user: this.opts.userProfile}\n : {// the activity was started some other way, so use defaults\n pkg: appPackage,\n activity: appActivity,\n waitPkg: appPackage,\n waitActivity: appActivity,\n stopApp: false};\n }\n args = await util.filterObject(args);\n this.log.debug(`Bringing application back to foreground with arguments: ${JSON.stringify(args)}`);\n return await this.adb.startApp(args);\n};\n\ncommands.getStrings = async function getStrings (language) {\n if (!language) {\n language = await this.adb.getDeviceLanguage();\n this.log.info(`No language specified, returning strings for: ${language}`);\n }\n\n // Clients require the resulting mapping to have both keys\n // and values of type string\n const preprocessStringsMap = (mapping) => {\n const result = {};\n for (const [key, value] of _.toPairs(mapping)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n };\n\n if (this.apkStrings[language]) {\n // Return cached strings\n return preprocessStringsMap(this.apkStrings[language]);\n }\n\n this.apkStrings[language] = await androidHelpers.pushStrings(language, this.adb, this.opts);\n if (this.bootstrap) {\n // TODO: This is mutating the current language, but it's how appium currently works\n await this.bootstrap.sendAction('updateStrings');\n }\n\n return preprocessStringsMap(this.apkStrings[language]);\n};\n\ncommands.launchApp = async function launchApp () {\n await this.initAUT();\n await this.startAUT();\n};\n\ncommands.startActivity = async function startActivity (appPackage, appActivity,\n appWaitPackage, appWaitActivity, intentAction, intentCategory, intentFlags,\n optionalIntentArguments, dontStopAppOnReset) {\n this.log.debug(`Starting package '${appPackage}' and activity '${appActivity}'`);\n\n // dontStopAppOnReset is both an argument here, and a desired capability\n // if the argument is set, use it, otherwise use the cap\n if (!util.hasValue(dontStopAppOnReset)) {\n dontStopAppOnReset = !!this.opts.dontStopAppOnReset;\n }\n\n let args = {\n pkg: appPackage,\n activity: appActivity,\n waitPkg: appWaitPackage || appPackage,\n waitActivity: appWaitActivity || appActivity,\n action: intentAction,\n category: intentCategory,\n flags: intentFlags,\n optionalIntentArguments,\n stopApp: !dontStopAppOnReset\n };\n this._cachedActivityArgs = this._cachedActivityArgs || {};\n this._cachedActivityArgs[`${args.waitPkg}/${args.waitActivity}`] = args;\n await this.adb.startApp(args);\n};\n\ncommands.reset = async function reset () {\n await androidHelpers.resetApp(this.adb, Object.assign({}, this.opts, {fastReset: true}));\n // reset context since we don't know what kind on context we will end up after app launch.\n await this.setContext();\n return await this.isChromeSession ? this.startChromeSession() : this.startAUT();\n};\n\ncommands.startAUT = async function startAUT () {\n await this.adb.startApp({\n pkg: this.opts.appPackage,\n activity: this.opts.appActivity,\n action: this.opts.intentAction,\n category: this.opts.intentCategory,\n flags: this.opts.intentFlags,\n waitPkg: this.opts.appWaitPackage,\n waitActivity: this.opts.appWaitActivity,\n waitForLaunch: this.opts.appWaitForLaunch,\n waitDuration: this.opts.appWaitDuration,\n optionalIntentArguments: this.opts.optionalIntentArguments,\n stopApp: !this.opts.dontStopAppOnReset,\n user: this.opts.userProfile,\n });\n};\n\n// we override setUrl to take an android URI which can be used for deep-linking\n// inside an app, similar to starting an intent\ncommands.setUrl = async function setUrl (uri) {\n await this.adb.startUri(uri, this.opts.appPackage);\n};\n\n// closing app using force stop\ncommands.closeApp = async function closeApp () {\n await this.adb.forceStop(this.opts.appPackage);\n // reset context since we don't know what kind on context we will end up after app launch.\n await this.setContext();\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n // first try the property for devices\n let out = await this.adb.shell(['getprop', 'ro.sf.lcd_density']);\n if (out) {\n let val = parseInt(out, 10);\n // if the value is NaN, try getting the emulator property\n if (!isNaN(val)) {\n return val;\n }\n this.log.debug(`Parsed density value was NaN: \"${out}\"`);\n }\n // fallback to trying property for emulators\n out = await this.adb.shell(['getprop', 'qemu.sf.lcd_density']);\n if (out) {\n let val = parseInt(out, 10);\n if (!isNaN(val)) {\n return val;\n }\n this.log.debug(`Parsed density value was NaN: \"${out}\"`);\n }\n // couldn't get anything, so error out\n this.log.errorAndThrow('Failed to get display density property.');\n};\n\ncommands.mobilePerformEditorAction = async function mobilePerformEditorAction (opts = {}) {\n const {action} = opts;\n if (!util.hasValue(action)) {\n throw new errors.InvalidArgumentError(`'action' argument is required`);\n }\n\n await this.adb.performEditorAction(action);\n};\n\nconst PERMISSION_ACTION = {\n GRANT: 'grant',\n REVOKE: 'revoke',\n};\n\n/**\n * @typedef {Object} ChangePermissionsOptions\n * @property {!string|Array<string>} permissions - The full name of the permission to be changed\n * or a list of permissions. Check https://developer.android.com/reference/android/Manifest.permission\n * to get the full list of standard Android permssion names. Mandatory argument.\n * If 'all' magic string is passed then the chosen action is going to be applied to all\n * permisisons requested/granted by 'appPackage'.\n * @property {string} appPackage [this.opts.appPackage] - The application package to set change\n * permissions on. Defaults to the package name under test.\n * @property {string} action [grant] - One of `PERMISSION_ACTION` values\n */\n\n/**\n * Changes package permissions in runtime.\n *\n * @param {?ChangePermissionsOptions} opts - Available options mapping.\n * @throws {Error} if there was a failure while changing permissions\n */\ncommands.mobileChangePermissions = async function mobileChangePermissions (opts = {}) {\n const {\n permissions,\n appPackage = this.opts.appPackage,\n action = PERMISSION_ACTION.GRANT,\n } = opts;\n if (_.isNil(permissions)) {\n throw new errors.InvalidArgumentError(`'permissions' argument is required`);\n }\n if (_.isEmpty(permissions)) {\n throw new errors.InvalidArgumentError(`'permissions' argument must not be empty`);\n }\n const lowerAction = _.toLower(action);\n if (![PERMISSION_ACTION.GRANT, PERMISSION_ACTION.REVOKE].includes(lowerAction)) {\n throw new errors.InvalidArgumentError(`Unknown action '${action}'. ` +\n `Only ${JSON.stringify(_.values(PERMISSION_ACTION))} actions are supported`);\n }\n\n let affectedPermissions = _.isArray(permissions) ? permissions : [permissions];\n if (_.toLower(permissions) === ALL_PERMISSIONS_MAGIC) {\n const dumpsys = await this.adb.shell(['dumpsys', 'package', appPackage]);\n const grantedPermissions = await this.adb.getGrantedPermissions(appPackage, dumpsys);\n if (lowerAction === PERMISSION_ACTION.GRANT) {\n const reqPermissons = await this.adb.getReqPermissions(appPackage, dumpsys);\n affectedPermissions = _.difference(reqPermissons, grantedPermissions);\n } else {\n affectedPermissions = grantedPermissions;\n }\n if (_.isEmpty(affectedPermissions)) {\n this.log.info(`'${appPackage}' contains no permissions to ${lowerAction}`);\n return;\n }\n }\n\n if (lowerAction === PERMISSION_ACTION.GRANT) {\n await this.adb.grantPermissions(appPackage, affectedPermissions);\n } else {\n await B.all(affectedPermissions.map((name) => this.adb.revokePermission(appPackage, name)));\n }\n};\n\nconst PERMISSIONS_TYPE = {\n DENIED: 'denied',\n GRANTED: 'granted',\n REQUESTED: 'requested',\n};\n\n/**\n * @typedef {Object} GetPermissionsOptions\n * @property {string} type [requested] - One of possible permission types to get.\n * Can be any of `PERMISSIONS_TYPE` values.\n * @property {string} appPackage [this.opts.appPackage] - The application package to set change\n * permissions on. Defaults to the package name under test.\n */\n\n/**\n * Gets runtime permissions list for the given application package.\n *\n * @param {GetPermissionsOptions} opts - Available options mapping.\n * @returns {Array<string>} The list of retrieved permissions for the given type\n * (can also be empty).\n * @throws {Error} if there was an error while getting permissions.\n */\ncommands.mobileGetPermissions = async function mobileGetPermissions (opts = {}) {\n const {\n type = PERMISSIONS_TYPE.REQUESTED,\n appPackage = this.opts.appPackage,\n } = opts;\n\n let actionFunc;\n switch (_.toLower(type)) {\n case PERMISSIONS_TYPE.REQUESTED:\n actionFunc = (appPackage) => this.adb.getReqPermissions(appPackage);\n break;\n case PERMISSIONS_TYPE.GRANTED:\n actionFunc = (appPackage) => this.adb.getGrantedPermissions(appPackage);\n break;\n case PERMISSIONS_TYPE.DENIED:\n actionFunc = (appPackage) => this.adb.getDeniedPermissions(appPackage);\n break;\n default:\n throw new errors.InvalidArgumentError(`Unknown permissions type '${type}'. ` +\n `Only ${JSON.stringify(_.values(PERMISSIONS_TYPE))} types are supported`);\n }\n return await actionFunc(appPackage);\n};\n\n/**\n * Retrieves the list of recent system notifications.\n *\n * @returns {Object} See the documentation on `adb.getNotifications` for\n * more details\n */\ncommands.mobileGetNotifications = async function mobileGetNotifications () {\n return await this.adb.getNotifications();\n};\n\n/**\n * @typedef {Object} SmsListOptions\n * @property {number} max [100] - The maximum count of recent SMS messages\n * to retrieve\n */\n\n/**\n * Retrieves the list of recent SMS messages with their properties.\n *\n * @param {SmsListOptions} opts\n * @returns {Object} See the documentation on `adb.getSmsList` for\n * more details\n */\ncommands.mobileListSms = async function mobileListSms (opts = {}) {\n return await this.adb.getSmsList(opts);\n};\n\n/**\n * @typedef {Object} UnlockOptions\n * @property {string} key The unlock key. The value of this key depends\n * on the actual unlock type and could be a pin/password/pattern value or\n * a biometric finger id.\n * @property {string} type The unlock type. The following unlock types\n * are supported: `pin`, `pinWithKeyEvent`, `password`, `pattern` and `fingerprint`.\n * @property {?string} strategy Either 'locksettings' (default) or 'uiautomator'.\n * Setting it to 'uiautomator' will enforce the driver to avoid using special\n * ADB shortcuts in order to speed up the unlock procedure.\n * @property {?number} timeoutMs [2000] The maximum time in milliseconds\n * to wait until the screen gets unlocked\n */\n\n/**\n * Unlocks the device if it is locked. Noop if the device's screen is not locked.\n *\n * @param {?UnlockOptions} opts\n * @throws {Error} if unlock operation fails or the provided\n * arguments are not valid\n */\ncommands.mobileUnlock = async function mobileUnlock (opts = {}) {\n const { key, type, strategy, timeoutMs } = opts;\n await androidHelpers.unlock(this, this.adb, {\n unlockKey: key,\n unlockType: type,\n unlockStrategy: strategy,\n unlockSuccessTimeout: timeoutMs,\n });\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"general.js","names":["MOMENT_FORMAT_ISO8601","commands","helpers","extensions","keys","_","isArray","join","params","text","replace","opts","unicodeKeyboard","doSendKeys","bootstrap","sendAction","getDeviceTime","format","log","debug","deviceTimestamp","adb","shell","trim","parsedTimestamp","moment","utc","isValid","warn","utcOffset","_tzm","mobileGetDeviceTime","getPageSource","back","isKeyboardShown","isSoftKeyboardPresent","hideKeyboard","openSettingsActivity","setting","appPackage","appActivity","getFocusedPackageAndActivity","waitForNotActivity","getWindowSize","getWindowRect","width","height","x","y","getCurrentActivity","getCurrentPackage","background","seconds","goToHome","sleepMs","thresholdMs","intervalMs","min","parseInt","progressCb","elapsedMs","progress","waitSecs","toFixed","progressPct","longSleep","args","_cachedActivityArgs","activateApp","ign","appWaitPackage","appWaitActivity","split","includes","pkg","activity","action","intentAction","category","intentCategory","flags","intentFlags","waitPkg","waitActivity","waitForLaunch","appWaitForLaunch","waitDuration","appWaitDuration","optionalIntentArguments","stopApp","user","userProfile","util","filterObject","JSON","stringify","startApp","getStrings","language","getDeviceLanguage","info","preprocessStringsMap","mapping","result","key","value","toPairs","isString","apkStrings","androidHelpers","pushStrings","launchApp","initAUT","startAUT","startActivity","dontStopAppOnReset","hasValue","reset","resetApp","Object","assign","fastReset","setContext","isChromeSession","startChromeSession","setUrl","uri","startUri","closeApp","forceStop","getDisplayDensity","out","val","isNaN","errorAndThrow","mobilePerformEditorAction","errors","InvalidArgumentError","performEditorAction","mobileGetNotifications","getNotifications","mobileListSms","getSmsList","mobileUnlock","type","strategy","timeoutMs","unlock","unlockKey","unlockType","unlockStrategy","unlockSuccessTimeout"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport androidHelpers from '../android-helpers';\nimport { util } from '@appium/support';\nimport moment from 'moment';\nimport { longSleep } from 'asyncbox';\nimport { errors } from 'appium/driver';\n\nconst MOMENT_FORMAT_ISO8601 = 'YYYY-MM-DDTHH:mm:ssZ';\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.keys = async function keys (keys) {\n // Protocol sends an array; rethink approach\n keys = _.isArray(keys) ? keys.join('') : keys;\n let params = {\n text: keys,\n replace: false\n };\n if (this.opts.unicodeKeyboard) {\n params.unicodeKeyboard = true;\n }\n await this.doSendKeys(params);\n};\n\ncommands.doSendKeys = async function doSendKeys (params) {\n return await this.bootstrap.sendAction('setText', params);\n};\n\n/**\n * Retrieves the current device's timestamp.\n *\n * @param {string} format - The set of format specifiers. Read\n * https://momentjs.com/docs/ to get the full list of supported\n * datetime format specifiers. The default format is\n * `YYYY-MM-DDTHH:mm:ssZ`, which complies to ISO-8601\n * @return {string} Formatted datetime string or the raw command output if formatting fails\n */\ncommands.getDeviceTime = async function getDeviceTime (format = MOMENT_FORMAT_ISO8601) {\n this.log.debug('Attempting to capture android device date and time. ' +\n `The format specifier is '${format}'`);\n const deviceTimestamp = (await this.adb.shell(['date', '+%Y-%m-%dT%T%z'])).trim();\n this.log.debug(`Got device timestamp: ${deviceTimestamp}`);\n const parsedTimestamp = moment.utc(deviceTimestamp, 'YYYY-MM-DDTHH:mm:ssZZ');\n if (!parsedTimestamp.isValid()) {\n this.log.warn('Cannot parse the returned timestamp. Returning as is');\n return deviceTimestamp;\n }\n return parsedTimestamp.utcOffset(parsedTimestamp._tzm || 0).format(format);\n};\n\n/**\n * @typedef {Object} DeviceTimeOptions\n * @property {string} format [YYYY-MM-DDTHH:mm:ssZ] - See getDeviceTime#format\n */\n\n/**\n * Retrieves the current device time\n *\n * @param {DeviceTimeOptions} opts\n * @return {string} Formatted datetime string or the raw command output if formatting fails\n */\ncommands.mobileGetDeviceTime = async function mobileGetDeviceTime (opts = {}) {\n return await this.getDeviceTime(opts.format);\n};\n\ncommands.getPageSource = async function getPageSource () {\n return await this.bootstrap.sendAction('source');\n};\n\ncommands.back = async function back () {\n return await this.bootstrap.sendAction('pressBack');\n};\n\ncommands.isKeyboardShown = async function isKeyboardShown () {\n const {isKeyboardShown} = await this.adb.isSoftKeyboardPresent();\n return isKeyboardShown;\n};\n\ncommands.hideKeyboard = async function hideKeyboard () {\n return await this.adb.hideKeyboard();\n};\n\ncommands.openSettingsActivity = async function openSettingsActivity (setting) {\n let {appPackage, appActivity} = await this.adb.getFocusedPackageAndActivity();\n await this.adb.shell(['am', 'start', '-a', `android.settings.${setting}`]);\n await this.adb.waitForNotActivity(appPackage, appActivity, 5000);\n};\n\ncommands.getWindowSize = async function getWindowSize () {\n return await this.bootstrap.sendAction('getDeviceSize');\n};\n\n// For W3C\ncommands.getWindowRect = async function getWindowRect () {\n const { width, height } = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0\n };\n};\n\ncommands.getCurrentActivity = async function getCurrentActivity () {\n return (await this.adb.getFocusedPackageAndActivity()).appActivity;\n};\n\ncommands.getCurrentPackage = async function getCurrentPackage () {\n return (await this.adb.getFocusedPackageAndActivity()).appPackage;\n};\n\ncommands.background = async function background (seconds) {\n if (seconds < 0) {\n // if user passes in a negative seconds value, interpret that as the instruction\n // to not bring the app back at all\n await this.adb.goToHome();\n return true;\n }\n let {appPackage, appActivity} = await this.adb.getFocusedPackageAndActivity();\n await this.adb.goToHome();\n\n // people can wait for a long time, so to be safe let's use the longSleep function and log\n // progress periodically.\n const sleepMs = seconds * 1000;\n const thresholdMs = 30 * 1000; // use the spin-wait for anything over this threshold\n // for our spin interval, use 1% of the total wait time, but nothing bigger than 30s\n const intervalMs = _.min([30 * 1000, parseInt(sleepMs / 100, 10)]);\n const progressCb = ({elapsedMs, progress}) => {\n const waitSecs = (elapsedMs / 1000).toFixed(0);\n const progressPct = (progress * 100).toFixed(2);\n this.log.debug(`Waited ${waitSecs}s so far (${progressPct}%)`);\n };\n await longSleep(sleepMs, {thresholdMs, intervalMs, progressCb});\n\n let args;\n if (this._cachedActivityArgs && this._cachedActivityArgs[`${appPackage}/${appActivity}`]) {\n // the activity was started with `startActivity`, so use those args to restart\n args = this._cachedActivityArgs[`${appPackage}/${appActivity}`];\n } else {\n try {\n this.log.debug(`Activating app '${appPackage}' in order to restore it`);\n await this.activateApp(appPackage);\n return true;\n } catch (ign) {}\n args = ((appPackage === this.opts.appPackage && appActivity === this.opts.appActivity) ||\n (appPackage === this.opts.appWaitPackage && (this.opts.appWaitActivity || '').split(',').includes(appActivity)))\n ? {// the activity is the original session activity, so use the original args\n pkg: this.opts.appPackage,\n activity: this.opts.appActivity,\n action: this.opts.intentAction,\n category: this.opts.intentCategory,\n flags: this.opts.intentFlags,\n waitPkg: this.opts.appWaitPackage,\n waitActivity: this.opts.appWaitActivity,\n waitForLaunch: this.opts.appWaitForLaunch,\n waitDuration: this.opts.appWaitDuration,\n optionalIntentArguments: this.opts.optionalIntentArguments,\n stopApp: false,\n user: this.opts.userProfile}\n : {// the activity was started some other way, so use defaults\n pkg: appPackage,\n activity: appActivity,\n waitPkg: appPackage,\n waitActivity: appActivity,\n stopApp: false};\n }\n args = await util.filterObject(args);\n this.log.debug(`Bringing application back to foreground with arguments: ${JSON.stringify(args)}`);\n return await this.adb.startApp(args);\n};\n\ncommands.getStrings = async function getStrings (language) {\n if (!language) {\n language = await this.adb.getDeviceLanguage();\n this.log.info(`No language specified, returning strings for: ${language}`);\n }\n\n // Clients require the resulting mapping to have both keys\n // and values of type string\n const preprocessStringsMap = (mapping) => {\n const result = {};\n for (const [key, value] of _.toPairs(mapping)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n };\n\n if (this.apkStrings[language]) {\n // Return cached strings\n return preprocessStringsMap(this.apkStrings[language]);\n }\n\n this.apkStrings[language] = await androidHelpers.pushStrings(language, this.adb, this.opts);\n if (this.bootstrap) {\n // TODO: This is mutating the current language, but it's how appium currently works\n await this.bootstrap.sendAction('updateStrings');\n }\n\n return preprocessStringsMap(this.apkStrings[language]);\n};\n\ncommands.launchApp = async function launchApp () {\n await this.initAUT();\n await this.startAUT();\n};\n\ncommands.startActivity = async function startActivity (appPackage, appActivity,\n appWaitPackage, appWaitActivity, intentAction, intentCategory, intentFlags,\n optionalIntentArguments, dontStopAppOnReset) {\n this.log.debug(`Starting package '${appPackage}' and activity '${appActivity}'`);\n\n // dontStopAppOnReset is both an argument here, and a desired capability\n // if the argument is set, use it, otherwise use the cap\n if (!util.hasValue(dontStopAppOnReset)) {\n dontStopAppOnReset = !!this.opts.dontStopAppOnReset;\n }\n\n let args = {\n pkg: appPackage,\n activity: appActivity,\n waitPkg: appWaitPackage || appPackage,\n waitActivity: appWaitActivity || appActivity,\n action: intentAction,\n category: intentCategory,\n flags: intentFlags,\n optionalIntentArguments,\n stopApp: !dontStopAppOnReset\n };\n this._cachedActivityArgs = this._cachedActivityArgs || {};\n this._cachedActivityArgs[`${args.waitPkg}/${args.waitActivity}`] = args;\n await this.adb.startApp(args);\n};\n\ncommands.reset = async function reset () {\n await androidHelpers.resetApp(this.adb, Object.assign({}, this.opts, {fastReset: true}));\n // reset context since we don't know what kind on context we will end up after app launch.\n await this.setContext();\n return await this.isChromeSession ? this.startChromeSession() : this.startAUT();\n};\n\ncommands.startAUT = async function startAUT () {\n await this.adb.startApp({\n pkg: this.opts.appPackage,\n activity: this.opts.appActivity,\n action: this.opts.intentAction,\n category: this.opts.intentCategory,\n flags: this.opts.intentFlags,\n waitPkg: this.opts.appWaitPackage,\n waitActivity: this.opts.appWaitActivity,\n waitForLaunch: this.opts.appWaitForLaunch,\n waitDuration: this.opts.appWaitDuration,\n optionalIntentArguments: this.opts.optionalIntentArguments,\n stopApp: !this.opts.dontStopAppOnReset,\n user: this.opts.userProfile,\n });\n};\n\n// we override setUrl to take an android URI which can be used for deep-linking\n// inside an app, similar to starting an intent\ncommands.setUrl = async function setUrl (uri) {\n await this.adb.startUri(uri, this.opts.appPackage);\n};\n\n// closing app using force stop\ncommands.closeApp = async function closeApp () {\n await this.adb.forceStop(this.opts.appPackage);\n // reset context since we don't know what kind on context we will end up after app launch.\n await this.setContext();\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n // first try the property for devices\n let out = await this.adb.shell(['getprop', 'ro.sf.lcd_density']);\n if (out) {\n let val = parseInt(out, 10);\n // if the value is NaN, try getting the emulator property\n if (!isNaN(val)) {\n return val;\n }\n this.log.debug(`Parsed density value was NaN: \"${out}\"`);\n }\n // fallback to trying property for emulators\n out = await this.adb.shell(['getprop', 'qemu.sf.lcd_density']);\n if (out) {\n let val = parseInt(out, 10);\n if (!isNaN(val)) {\n return val;\n }\n this.log.debug(`Parsed density value was NaN: \"${out}\"`);\n }\n // couldn't get anything, so error out\n this.log.errorAndThrow('Failed to get display density property.');\n};\n\ncommands.mobilePerformEditorAction = async function mobilePerformEditorAction (opts = {}) {\n const {action} = opts;\n if (!util.hasValue(action)) {\n throw new errors.InvalidArgumentError(`'action' argument is required`);\n }\n\n await this.adb.performEditorAction(action);\n};\n\n/**\n * Retrieves the list of recent system notifications.\n *\n * @returns {Object} See the documentation on `adb.getNotifications` for\n * more details\n */\ncommands.mobileGetNotifications = async function mobileGetNotifications () {\n return await this.adb.getNotifications();\n};\n\n/**\n * @typedef {Object} SmsListOptions\n * @property {number} max [100] - The maximum count of recent SMS messages\n * to retrieve\n */\n\n/**\n * Retrieves the list of recent SMS messages with their properties.\n *\n * @param {SmsListOptions} opts\n * @returns {Object} See the documentation on `adb.getSmsList` for\n * more details\n */\ncommands.mobileListSms = async function mobileListSms (opts = {}) {\n return await this.adb.getSmsList(opts);\n};\n\n/**\n * @typedef {Object} UnlockOptions\n * @property {string} key The unlock key. The value of this key depends\n * on the actual unlock type and could be a pin/password/pattern value or\n * a biometric finger id.\n * @property {string} type The unlock type. The following unlock types\n * are supported: `pin`, `pinWithKeyEvent`, `password`, `pattern` and `fingerprint`.\n * @property {?string} strategy Either 'locksettings' (default) or 'uiautomator'.\n * Setting it to 'uiautomator' will enforce the driver to avoid using special\n * ADB shortcuts in order to speed up the unlock procedure.\n * @property {?number} timeoutMs [2000] The maximum time in milliseconds\n * to wait until the screen gets unlocked\n */\n\n/**\n * Unlocks the device if it is locked. Noop if the device's screen is not locked.\n *\n * @param {?UnlockOptions} opts\n * @throws {Error} if unlock operation fails or the provided\n * arguments are not valid\n */\ncommands.mobileUnlock = async function mobileUnlock (opts = {}) {\n const { key, type, strategy, timeoutMs } = opts;\n await androidHelpers.unlock(this, this.adb, {\n unlockKey: key,\n unlockType: type,\n unlockStrategy: strategy,\n unlockSuccessTimeout: timeoutMs,\n });\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
|
|
@@ -28,10 +28,10 @@ var _intent = _interopRequireDefault(require("./intent"));
|
|
|
28
28
|
var _systemBars = _interopRequireDefault(require("./system-bars"));
|
|
29
29
|
var _log = _interopRequireDefault(require("./log"));
|
|
30
30
|
var _mediaProjection = _interopRequireDefault(require("./media-projection"));
|
|
31
|
+
var _permissions = _interopRequireDefault(require("./permissions"));
|
|
31
32
|
let commands = {};
|
|
32
33
|
exports.commands = commands;
|
|
33
|
-
Object.assign(commands, _find.default, _general.default, _alert.default, _element.default, _context.default, _actions.default, _touch.default, _ime.default, _network.default, _coverage.default, _recordscreen.default, _intent.default, _streamscreen.default, _performance.default, _execute.default, _shell.default, _emuConsole.default, _systemBars.default, _appManagement.default, _fileActions.default, _log.default, _mediaProjection.default
|
|
34
|
-
);
|
|
34
|
+
Object.assign(commands, _find.default, _general.default, _alert.default, _element.default, _context.default, _actions.default, _touch.default, _ime.default, _network.default, _coverage.default, _recordscreen.default, _intent.default, _streamscreen.default, _performance.default, _execute.default, _shell.default, _emuConsole.default, _systemBars.default, _appManagement.default, _fileActions.default, _log.default, _mediaProjection.default, _permissions.default);
|
|
35
35
|
var _default = commands;
|
|
36
36
|
exports.default = _default;
|
|
37
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsIk9iamVjdCIsImFzc2lnbiIsImZpbmRDbWRzIiwiZ2VuZXJhbENtZHMiLCJhbGVydENtZHMiLCJlbGVtZW50Q21kcyIsImNvbnRleHRDbWRzIiwiYWN0aW9uQ21kcyIsInRvdWNoQ21kcyIsImltZUNtZHMiLCJuZXR3b3JrQ21kcyIsImNvdmVyYWdlQ21kcyIsInJlY29yZHNjcmVlbkNtZHMiLCJpbnRlbnRDbWRzIiwic2NyZWVuU3RyZWFtQ21kcyIsInBlcmZvcm1hbmNlQ21kcyIsImV4ZWN1dGVDbWRzIiwic2hlbGxDbWRzIiwiZW11Q29uc29sZUNtZHMiLCJzeXN0ZW1CYXJzQ21kcyIsImFwcE1hbmFnZW1lbnRDbWRzIiwiZmlsZUFjdGlvbnNDbWRzIiwibG9nQ21kcyIsIm1lZGlhUHJvamVjdGlvbkNtZHMiLCJwZXJtaXNzaW9uc0NvbW1hbmRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmaW5kQ21kcyBmcm9tICcuL2ZpbmQnO1xuaW1wb3J0IGdlbmVyYWxDbWRzIGZyb20gJy4vZ2VuZXJhbCc7XG5pbXBvcnQgYWxlcnRDbWRzIGZyb20gJy4vYWxlcnQnO1xuaW1wb3J0IGVsZW1lbnRDbWRzIGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgY29udGV4dENtZHMgZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCBhY3Rpb25DbWRzIGZyb20gJy4vYWN0aW9ucyc7XG5pbXBvcnQgdG91Y2hDbWRzIGZyb20gJy4vdG91Y2gnO1xuaW1wb3J0IGltZUNtZHMgZnJvbSAnLi9pbWUnO1xuaW1wb3J0IG5ldHdvcmtDbWRzIGZyb20gJy4vbmV0d29yayc7XG5pbXBvcnQgY292ZXJhZ2VDbWRzIGZyb20gJy4vY292ZXJhZ2UnO1xuaW1wb3J0IHJlY29yZHNjcmVlbkNtZHMgZnJvbSAnLi9yZWNvcmRzY3JlZW4nO1xuaW1wb3J0IHNjcmVlblN0cmVhbUNtZHMgZnJvbSAnLi9zdHJlYW1zY3JlZW4nO1xuaW1wb3J0IHBlcmZvcm1hbmNlQ21kcyBmcm9tICcuL3BlcmZvcm1hbmNlJztcbmltcG9ydCBleGVjdXRlQ21kcyBmcm9tICcuL2V4ZWN1dGUnO1xuaW1wb3J0IHNoZWxsQ21kcyBmcm9tICcuL3NoZWxsJztcbmltcG9ydCBlbXVDb25zb2xlQ21kcyBmcm9tICcuL2VtdS1jb25zb2xlJztcbmltcG9ydCBmaWxlQWN0aW9uc0NtZHMgZnJvbSAnLi9maWxlLWFjdGlvbnMnO1xuaW1wb3J0IGFwcE1hbmFnZW1lbnRDbWRzIGZyb20gJy4vYXBwLW1hbmFnZW1lbnQnO1xuaW1wb3J0IGludGVudENtZHMgZnJvbSAnLi9pbnRlbnQnO1xuaW1wb3J0IHN5c3RlbUJhcnNDbWRzIGZyb20gJy4vc3lzdGVtLWJhcnMnO1xuaW1wb3J0IGxvZ0NtZHMgZnJvbSAnLi9sb2cnO1xuaW1wb3J0IG1lZGlhUHJvamVjdGlvbkNtZHMgZnJvbSAnLi9tZWRpYS1wcm9qZWN0aW9uJztcbmltcG9ydCBwZXJtaXNzaW9uc0NvbW1hbmRzIGZyb20gJy4vcGVybWlzc2lvbnMnO1xuXG5cbmxldCBjb21tYW5kcyA9IHt9O1xuT2JqZWN0LmFzc2lnbihcbiAgY29tbWFuZHMsXG4gIGZpbmRDbWRzLFxuICBnZW5lcmFsQ21kcyxcbiAgYWxlcnRDbWRzLFxuICBlbGVtZW50Q21kcyxcbiAgY29udGV4dENtZHMsXG4gIGFjdGlvbkNtZHMsXG4gIHRvdWNoQ21kcyxcbiAgaW1lQ21kcyxcbiAgbmV0d29ya0NtZHMsXG4gIGNvdmVyYWdlQ21kcyxcbiAgcmVjb3Jkc2NyZWVuQ21kcyxcbiAgaW50ZW50Q21kcyxcbiAgc2NyZWVuU3RyZWFtQ21kcyxcbiAgcGVyZm9ybWFuY2VDbWRzLFxuICBleGVjdXRlQ21kcyxcbiAgc2hlbGxDbWRzLFxuICBlbXVDb25zb2xlQ21kcyxcbiAgc3lzdGVtQmFyc0NtZHMsXG4gIGFwcE1hbmFnZW1lbnRDbWRzLFxuICBmaWxlQWN0aW9uc0NtZHMsXG4gIGxvZ0NtZHMsXG4gIG1lZGlhUHJvamVjdGlvbkNtZHMsXG4gIHBlcm1pc3Npb25zQ29tbWFuZHMsXG4gIC8vIGFkZCBvdGhlciBjb21tYW5kIHR5cGVzIGhlcmVcbik7XG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsSUFBSUEsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFDO0FBQ2xCQyxNQUFNLENBQUNDLE1BQU0sQ0FDWEYsUUFBUSxFQUNSRyxhQUFRLEVBQ1JDLGdCQUFXLEVBQ1hDLGNBQVMsRUFDVEMsZ0JBQVcsRUFDWEMsZ0JBQVcsRUFDWEMsZ0JBQVUsRUFDVkMsY0FBUyxFQUNUQyxZQUFPLEVBQ1BDLGdCQUFXLEVBQ1hDLGlCQUFZLEVBQ1pDLHFCQUFnQixFQUNoQkMsZUFBVSxFQUNWQyxxQkFBZ0IsRUFDaEJDLG9CQUFlLEVBQ2ZDLGdCQUFXLEVBQ1hDLGNBQVMsRUFDVEMsbUJBQWMsRUFDZEMsbUJBQWMsRUFDZEMsc0JBQWlCLEVBQ2pCQyxvQkFBZSxFQUNmQyxZQUFPLEVBQ1BDLHdCQUFtQixFQUNuQkMsb0JBQW1CLENBRXBCO0FBQUMsZUFHYXpCLFFBQVE7QUFBQSJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["commands","Object","assign","findCmds","generalCmds","alertCmds","elementCmds","contextCmds","actionCmds","touchCmds","imeCmds","networkCmds","coverageCmds","recordscreenCmds","intentCmds","screenStreamCmds","performanceCmds","executeCmds","shellCmds","emuConsoleCmds","systemBarsCmds","appManagementCmds","fileActionsCmds","logCmds","mediaProjectionCmds"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import findCmds from './find';\nimport generalCmds from './general';\nimport alertCmds from './alert';\nimport elementCmds from './element';\nimport contextCmds from './context';\nimport actionCmds from './actions';\nimport touchCmds from './touch';\nimport imeCmds from './ime';\nimport networkCmds from './network';\nimport coverageCmds from './coverage';\nimport recordscreenCmds from './recordscreen';\nimport screenStreamCmds from './streamscreen';\nimport performanceCmds from './performance';\nimport executeCmds from './execute';\nimport shellCmds from './shell';\nimport emuConsoleCmds from './emu-console';\nimport fileActionsCmds from './file-actions';\nimport appManagementCmds from './app-management';\nimport intentCmds from './intent';\nimport systemBarsCmds from './system-bars';\nimport logCmds from './log';\nimport mediaProjectionCmds from './media-projection';\n\n\nlet commands = {};\nObject.assign(\n commands,\n findCmds,\n generalCmds,\n alertCmds,\n elementCmds,\n contextCmds,\n actionCmds,\n touchCmds,\n imeCmds,\n networkCmds,\n coverageCmds,\n recordscreenCmds,\n intentCmds,\n screenStreamCmds,\n performanceCmds,\n executeCmds,\n shellCmds,\n emuConsoleCmds,\n systemBarsCmds,\n appManagementCmds,\n fileActionsCmds,\n logCmds,\n mediaProjectionCmds,\n // add other command types here\n);\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,IAAIA,QAAQ,GAAG,CAAC,CAAC;AAAC;AAClBC,MAAM,CAACC,MAAM,CACXF,QAAQ,EACRG,aAAQ,EACRC,gBAAW,EACXC,cAAS,EACTC,gBAAW,EACXC,gBAAW,EACXC,gBAAU,EACVC,cAAS,EACTC,YAAO,EACPC,gBAAW,EACXC,iBAAY,EACZC,qBAAgB,EAChBC,eAAU,EACVC,qBAAgB,EAChBC,oBAAe,EACfC,gBAAW,EACXC,cAAS,EACTC,mBAAc,EACdC,mBAAc,EACdC,sBAAiB,EACjBC,oBAAe,EACfC,YAAO,EACPC
|
|
1
|
+
{"version":3,"file":"index.js","names":["commands","Object","assign","findCmds","generalCmds","alertCmds","elementCmds","contextCmds","actionCmds","touchCmds","imeCmds","networkCmds","coverageCmds","recordscreenCmds","intentCmds","screenStreamCmds","performanceCmds","executeCmds","shellCmds","emuConsoleCmds","systemBarsCmds","appManagementCmds","fileActionsCmds","logCmds","mediaProjectionCmds","permissionsCommands"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import findCmds from './find';\nimport generalCmds from './general';\nimport alertCmds from './alert';\nimport elementCmds from './element';\nimport contextCmds from './context';\nimport actionCmds from './actions';\nimport touchCmds from './touch';\nimport imeCmds from './ime';\nimport networkCmds from './network';\nimport coverageCmds from './coverage';\nimport recordscreenCmds from './recordscreen';\nimport screenStreamCmds from './streamscreen';\nimport performanceCmds from './performance';\nimport executeCmds from './execute';\nimport shellCmds from './shell';\nimport emuConsoleCmds from './emu-console';\nimport fileActionsCmds from './file-actions';\nimport appManagementCmds from './app-management';\nimport intentCmds from './intent';\nimport systemBarsCmds from './system-bars';\nimport logCmds from './log';\nimport mediaProjectionCmds from './media-projection';\nimport permissionsCommands from './permissions';\n\n\nlet commands = {};\nObject.assign(\n commands,\n findCmds,\n generalCmds,\n alertCmds,\n elementCmds,\n contextCmds,\n actionCmds,\n touchCmds,\n imeCmds,\n networkCmds,\n coverageCmds,\n recordscreenCmds,\n intentCmds,\n screenStreamCmds,\n performanceCmds,\n executeCmds,\n shellCmds,\n emuConsoleCmds,\n systemBarsCmds,\n appManagementCmds,\n fileActionsCmds,\n logCmds,\n mediaProjectionCmds,\n permissionsCommands,\n // add other command types here\n);\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,IAAIA,QAAQ,GAAG,CAAC,CAAC;AAAC;AAClBC,MAAM,CAACC,MAAM,CACXF,QAAQ,EACRG,aAAQ,EACRC,gBAAW,EACXC,cAAS,EACTC,gBAAW,EACXC,gBAAW,EACXC,gBAAU,EACVC,cAAS,EACTC,YAAO,EACPC,gBAAW,EACXC,iBAAY,EACZC,qBAAgB,EAChBC,eAAU,EACVC,qBAAgB,EAChBC,oBAAe,EACfC,gBAAW,EACXC,cAAS,EACTC,mBAAc,EACdC,mBAAc,EACdC,sBAAiB,EACjBC,oBAAe,EACfC,YAAO,EACPC,wBAAmB,EACnBC,oBAAmB,CAEpB;AAAC,eAGazB,QAAQ;AAAA"}
|