appium-xcuitest-driver 4.4.4 → 4.5.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.
Files changed (93) hide show
  1. package/README.md +2 -1
  2. package/build/index.js +10 -38
  3. package/build/lib/app-utils.js +5 -2
  4. package/build/lib/commands/app-management.js +7 -43
  5. package/build/lib/commands/appearance.js +2 -2
  6. package/build/lib/commands/certificate.js +2 -2
  7. package/build/lib/commands/context.js +8 -8
  8. package/build/lib/commands/cookies.js +5 -5
  9. package/build/lib/commands/element.js +4 -4
  10. package/build/lib/commands/execute.js +8 -8
  11. package/build/lib/commands/file-movement.js +7 -7
  12. package/build/lib/commands/find.js +4 -4
  13. package/build/lib/commands/general.js +10 -10
  14. package/build/lib/commands/gesture.js +16 -16
  15. package/build/lib/commands/iohid.js +5 -5
  16. package/build/lib/commands/location.js +5 -5
  17. package/build/lib/commands/log.js +3 -3
  18. package/build/lib/commands/navigation.js +3 -3
  19. package/build/lib/commands/notifications.js +5 -5
  20. package/build/lib/commands/pcap.js +4 -4
  21. package/build/lib/commands/performance.js +2 -2
  22. package/build/lib/commands/proxy-helper.js +4 -4
  23. package/build/lib/commands/record-audio.js +2 -2
  24. package/build/lib/commands/recordscreen.js +2 -2
  25. package/build/lib/commands/screenshots.js +2 -2
  26. package/build/lib/commands/web.js +20 -20
  27. package/build/lib/commands/xctest.js +5 -5
  28. package/build/lib/cookies.js +2 -2
  29. package/build/lib/css-converter.js +5 -5
  30. package/build/lib/device-connections-factory.js +2 -2
  31. package/build/lib/device-log/ios-crash-log.js +2 -2
  32. package/build/lib/device-log/ios-device-log.js +2 -2
  33. package/build/lib/device-log/ios-performance-log.js +2 -2
  34. package/build/lib/device-log/ios-simulator-log.js +2 -2
  35. package/build/lib/device-log/rotating-log.js +2 -2
  36. package/build/lib/device-log/safari-console-log.js +2 -2
  37. package/build/lib/device-log/safari-network-log.js +2 -2
  38. package/build/lib/driver.js +12 -17
  39. package/build/lib/ios-deploy.js +52 -7
  40. package/build/lib/ios-fs-helpers.js +2 -2
  41. package/build/lib/logger.js +2 -2
  42. package/build/lib/py-ios-device-client.js +2 -2
  43. package/build/lib/real-device-management.js +19 -3
  44. package/build/lib/simulator-management.js +2 -2
  45. package/build/lib/utils.js +2 -2
  46. package/index.js +2 -26
  47. package/lib/app-utils.js +6 -2
  48. package/lib/commands/app-management.js +4 -34
  49. package/lib/commands/appearance.js +1 -1
  50. package/lib/commands/certificate.js +1 -1
  51. package/lib/commands/context.js +2 -2
  52. package/lib/commands/cookies.js +1 -1
  53. package/lib/commands/element.js +2 -2
  54. package/lib/commands/execute.js +2 -2
  55. package/lib/commands/file-movement.js +2 -2
  56. package/lib/commands/find.js +2 -2
  57. package/lib/commands/general.js +2 -2
  58. package/lib/commands/gesture.js +2 -2
  59. package/lib/commands/iohid.js +1 -1
  60. package/lib/commands/location.js +2 -2
  61. package/lib/commands/log.js +1 -1
  62. package/lib/commands/navigation.js +1 -1
  63. package/lib/commands/notifications.js +1 -1
  64. package/lib/commands/pcap.js +2 -2
  65. package/lib/commands/performance.js +1 -1
  66. package/lib/commands/proxy-helper.js +1 -1
  67. package/lib/commands/record-audio.js +1 -1
  68. package/lib/commands/recordscreen.js +1 -1
  69. package/lib/commands/screenshots.js +1 -1
  70. package/lib/commands/web.js +2 -2
  71. package/lib/commands/xctest.js +2 -2
  72. package/lib/cookies.js +1 -1
  73. package/lib/css-converter.js +1 -1
  74. package/lib/device-connections-factory.js +1 -1
  75. package/lib/device-log/ios-crash-log.js +1 -1
  76. package/lib/device-log/ios-device-log.js +1 -1
  77. package/lib/device-log/ios-performance-log.js +1 -1
  78. package/lib/device-log/ios-simulator-log.js +1 -1
  79. package/lib/device-log/rotating-log.js +1 -1
  80. package/lib/device-log/safari-console-log.js +1 -1
  81. package/lib/device-log/safari-network-log.js +1 -1
  82. package/lib/driver.js +16 -16
  83. package/lib/ios-deploy.js +42 -8
  84. package/lib/ios-fs-helpers.js +1 -1
  85. package/lib/logger.js +1 -1
  86. package/lib/py-ios-device-client.js +1 -1
  87. package/lib/real-device-management.js +13 -2
  88. package/lib/simulator-management.js +1 -1
  89. package/lib/utils.js +1 -1
  90. package/package.json +6 -3
  91. package/build/lib/server.js +0 -37
  92. package/lib/server.js +0 -20
  93. package/npm-shrinkwrap.json +0 -39999
package/README.md CHANGED
@@ -22,6 +22,7 @@ On top of standard Appium requirements XCUITest driver also expects the followin
22
22
  - Only macOS is supported as the host platform
23
23
  - Xcode and developer tools must be installed. Note, that usually some time is needed for the Appium team to pick up with the support of the most recent Xcode versions, especially beta ones.
24
24
  - Connected real devices must be trusted, added to your developer profile and configured properly along with WebDriverAgent signing. Read [Real devices](#real-devices) section _carefully_ to set them up properly before running your tests.
25
+ - Starting from iOS/iPadOS version iOS/iPadOS 16 real devices require enabling of _Developer Mode_ option in _Settings -> Privacy & Security_
25
26
  - The minimum supported Xcode SDK version for the current driver snapshot is *10.2 (iOS 12.2)*. Consider using earlier releases of the driver (see [Xcode version support](#xcode-version-support) section below) if it is necessary to test older iOS versions on real devices. Also, it is highly recommended to always use the same major version of Xcode SDK, which was used to build the particular iOS/tvOS version on your real device under test (for example Xcode 11 for iOS 13, Xcode 12 for iOS 14, etc).
26
27
  - Web views must be debuggable in order to test them. If it is not possible to connect to your web view(s) using [Safari remote debugger](https://appletoolbox.com/use-web-inspector-debug-mobile-safari/) then XCUITest won't be able to connect to them as well.
27
28
  - Since version 3.33.0 (included into Appium 1.20.0+) of XCUITest driver the [Carthage](https://github.com/Carthage/Carthage) dependency *is not needed anymore*. Prior to that version it was required and could be installed using [brew](https://brew.sh/): `brew install carthage`.
@@ -216,7 +217,7 @@ Capability | Description
216
217
  |`appium:safariIgnoreWebHostnames`| Provide a list of hostnames (comma-separated) that the Safari automation tools should ignore. This is to provide a workaround to prevent a webkit bug where the web context is unintentionally changed to a 3rd party website and the test gets stuck. The common culprits are search engines (yahoo, bing, google) and `about:blank` |e.g. `'www.yahoo.com, www.bing.com, www.google.com, about:blank'`|
217
218
  |`appium:nativeWebTap` | Enable native, non-javascript-based taps being in web context mode. Defaults to `false`. Warning: sometimes the preciseness of native taps could be broken, because there is no reliable way to map web element coordinates to native ones. | `true` |
218
219
  |`appium:nativeWebTapStrict` | Enforce native taps to be done by XCUITest driver rather than WebDriverAgent. Only applicable if `nativeWebTap` is enabled. `false` by default | `false` |
219
- |`appium:safariInitialUrl`| Initial safari url, default is a local welcome page | e.g. `https://www.github.com` |
220
+ |`appium:safariInitialUrl`| Initial safari url, default is a local welcome page. Setting it to an empty string will skip the initial navigation. | e.g. `https://www.github.com` |
220
221
  |`appium:safariAllowPopups`| Allow javascript to open new windows in Safari. Default keeps current sim setting|`true` or `false`|
221
222
  |`appium:safariIgnoreFraudWarning`| Prevent Safari from showing a fraudulent website warning. Default keeps current sim setting.|`true` or `false`|
222
223
  |`appium:safariOpenLinksInBackground`| Whether Safari should allow links to open in new windows. Default keeps current sim setting.|`true` or `false`|
package/build/index.js CHANGED
@@ -3,48 +3,20 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.startServer = exports.default = exports.XCUITestDriver = void 0;
6
+ Object.defineProperty(exports, "XCUITestDriver", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _driver.XCUITestDriver;
10
+ }
11
+ });
12
+ exports.default = void 0;
7
13
 
8
14
  require("source-map-support/register");
9
15
 
10
- var _asyncbox = require("asyncbox");
11
-
12
- var driver = _interopRequireWildcard(require("./lib/driver"));
13
-
14
- var server = _interopRequireWildcard(require("./lib/server"));
15
-
16
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
-
18
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
-
20
- const {
21
- XCUITestDriver
22
- } = driver;
23
- exports.XCUITestDriver = XCUITestDriver;
24
- const {
25
- startServer
26
- } = server;
27
- exports.startServer = startServer;
28
- const DEFAULT_HOST = 'localhost';
29
- const DEFAULT_PORT = 4723;
30
-
31
- async function main() {
32
- const getArgValue = argName => {
33
- const argIndex = process.argv.indexOf(argName);
34
- return argIndex > 0 ? process.argv[argIndex + 1] : null;
35
- };
36
-
37
- const port = parseInt(getArgValue('--port'), 10) || DEFAULT_PORT;
38
- const host = getArgValue('--host') || DEFAULT_HOST;
39
- return await startServer(port, host);
40
- }
41
-
42
- if (require.main === module) {
43
- (0, _asyncbox.asyncify)(main);
44
- }
16
+ var _driver = require("./lib/driver");
45
17
 
46
- var _default = XCUITestDriver;
18
+ var _default = _driver.XCUITestDriver;
47
19
  exports.default = _default;require('source-map-support').install();
48
20
 
49
21
 
50
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJYQ1VJVGVzdERyaXZlciIsImRyaXZlciIsInN0YXJ0U2VydmVyIiwic2VydmVyIiwiREVGQVVMVF9IT1NUIiwiREVGQVVMVF9QT1JUIiwibWFpbiIsImdldEFyZ1ZhbHVlIiwiYXJnTmFtZSIsImFyZ0luZGV4IiwicHJvY2VzcyIsImFyZ3YiLCJpbmRleE9mIiwicG9ydCIsInBhcnNlSW50IiwiaG9zdCIsInJlcXVpcmUiLCJtb2R1bGUiLCJhc3luY2lmeSJdLCJzb3VyY2VSb290IjoiLi4iLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5cbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0ICogYXMgZHJpdmVyIGZyb20gJy4vbGliL2RyaXZlcic7XG5pbXBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSAnLi9saWIvc2VydmVyJztcblxuXG5jb25zdCB7IFhDVUlUZXN0RHJpdmVyIH0gPSBkcml2ZXI7XG5jb25zdCB7IHN0YXJ0U2VydmVyIH0gPSBzZXJ2ZXI7XG5cbmNvbnN0IERFRkFVTFRfSE9TVCA9ICdsb2NhbGhvc3QnO1xuY29uc3QgREVGQVVMVF9QT1JUID0gNDcyMztcblxuYXN5bmMgZnVuY3Rpb24gbWFpbiAoKSB7XG4gIGNvbnN0IGdldEFyZ1ZhbHVlID0gKGFyZ05hbWUpID0+IHtcbiAgICBjb25zdCBhcmdJbmRleCA9IHByb2Nlc3MuYXJndi5pbmRleE9mKGFyZ05hbWUpO1xuICAgIHJldHVybiBhcmdJbmRleCA+IDAgPyBwcm9jZXNzLmFyZ3ZbYXJnSW5kZXggKyAxXSA6IG51bGw7XG4gIH07XG4gIGNvbnN0IHBvcnQgPSBwYXJzZUludChnZXRBcmdWYWx1ZSgnLS1wb3J0JyksIDEwKSB8fCBERUZBVUxUX1BPUlQ7XG4gIGNvbnN0IGhvc3QgPSBnZXRBcmdWYWx1ZSgnLS1ob3N0JykgfHwgREVGQVVMVF9IT1NUO1xuICByZXR1cm4gYXdhaXQgc3RhcnRTZXJ2ZXIocG9ydCwgaG9zdCk7XG59XG5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBhc3luY2lmeShtYWluKTtcbn1cblxuZXhwb3J0IHsgWENVSVRlc3REcml2ZXIsIHN0YXJ0U2VydmVyIH07XG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7Ozs7OztBQUdBLE1BQU07RUFBRUE7QUFBRixJQUFxQkMsTUFBM0I7O0FBQ0EsTUFBTTtFQUFFQztBQUFGLElBQWtCQyxNQUF4Qjs7QUFFQSxNQUFNQyxZQUFZLEdBQUcsV0FBckI7QUFDQSxNQUFNQyxZQUFZLEdBQUcsSUFBckI7O0FBRUEsZUFBZUMsSUFBZixHQUF1QjtFQUNyQixNQUFNQyxXQUFXLEdBQUlDLE9BQUQsSUFBYTtJQUMvQixNQUFNQyxRQUFRLEdBQUdDLE9BQU8sQ0FBQ0MsSUFBUixDQUFhQyxPQUFiLENBQXFCSixPQUFyQixDQUFqQjtJQUNBLE9BQU9DLFFBQVEsR0FBRyxDQUFYLEdBQWVDLE9BQU8sQ0FBQ0MsSUFBUixDQUFhRixRQUFRLEdBQUcsQ0FBeEIsQ0FBZixHQUE0QyxJQUFuRDtFQUNELENBSEQ7O0VBSUEsTUFBTUksSUFBSSxHQUFHQyxRQUFRLENBQUNQLFdBQVcsQ0FBQyxRQUFELENBQVosRUFBd0IsRUFBeEIsQ0FBUixJQUF1Q0YsWUFBcEQ7RUFDQSxNQUFNVSxJQUFJLEdBQUdSLFdBQVcsQ0FBQyxRQUFELENBQVgsSUFBeUJILFlBQXRDO0VBQ0EsT0FBTyxNQUFNRixXQUFXLENBQUNXLElBQUQsRUFBT0UsSUFBUCxDQUF4QjtBQUNEOztBQUVELElBQUlDLE9BQU8sQ0FBQ1YsSUFBUixLQUFpQlcsTUFBckIsRUFBNkI7RUFDM0IsSUFBQUMsa0JBQUEsRUFBU1osSUFBVDtBQUNEOztlQUdjTixjIn0=
22
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJYQ1VJVGVzdERyaXZlciJdLCJzb3VyY2VSb290IjoiLi4iLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5pbXBvcnQgeyBYQ1VJVGVzdERyaXZlciB9IGZyb20gJy4vbGliL2RyaXZlcic7XG5cbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7O2VBR2VBLHNCIn0=
@@ -5,6 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.SAFARI_BUNDLE_ID = void 0;
8
9
  exports.extractBundleId = extractBundleId;
9
10
  exports.parseLocalizableStrings = parseLocalizableStrings;
10
11
  exports.verifyApplicationPlatform = verifyApplicationPlatform;
@@ -15,12 +16,14 @@ var _lodash = _interopRequireDefault(require("lodash"));
15
16
 
16
17
  var _path = _interopRequireDefault(require("path"));
17
18
 
18
- var _support = require("@appium/support");
19
+ var _support = require("appium/support");
19
20
 
20
21
  var _logger = _interopRequireDefault(require("./logger.js"));
21
22
 
22
23
  const STRINGSDICT_RESOURCE = '.stringsdict';
23
24
  const STRINGS_RESOURCE = '.strings';
25
+ const SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';
26
+ exports.SAFARI_BUNDLE_ID = SAFARI_BUNDLE_ID;
24
27
 
25
28
  async function extractPlistEntry(app, entryName) {
26
29
  const plistPath = _path.default.resolve(app, 'Info.plist');
@@ -185,4 +188,4 @@ async function parseLocalizableStrings(opts) {
185
188
  }require('source-map-support').install();
186
189
 
187
190
 
188
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2FwcC11dGlscy5qcyIsIm5hbWVzIjpbIlNUUklOR1NESUNUX1JFU09VUkNFIiwiU1RSSU5HU19SRVNPVVJDRSIsImV4dHJhY3RQbGlzdEVudHJ5IiwiYXBwIiwiZW50cnlOYW1lIiwicGxpc3RQYXRoIiwicGF0aCIsInJlc29sdmUiLCJwbGlzdCIsInBhcnNlUGxpc3RGaWxlIiwiZXJyIiwiRXJyb3IiLCJiYXNlbmFtZSIsIm1lc3NhZ2UiLCJleHRyYWN0QnVuZGxlSWQiLCJidW5kbGVJZCIsImxvZyIsImRlYnVnIiwidmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSIsImV4cGVjdGVkUGxhdGZvcm0iLCJzdXBwb3J0ZWRQbGF0Zm9ybXMiLCJKU09OIiwic3RyaW5naWZ5IiwiXyIsImlzQXJyYXkiLCJpc1NpbXVsYXRvciIsImlzVHZPUyIsInByZWZpeCIsInN1ZmZpeCIsImRzdFBsYXRmb3JtIiwiaW5jbHVkZXMiLCJyZWFkUmVzb3VyY2UiLCJyZXNvdXJjZVBhdGgiLCJkYXRhIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJ0b1BhaXJzIiwiaXNTdHJpbmciLCJwYXJzZUxvY2FsaXphYmxlU3RyaW5ncyIsIm9wdHMiLCJsYW5ndWFnZSIsImxvY2FsaXphYmxlU3RyaW5nc0RpciIsInN0cmluZ0ZpbGUiLCJzdHJpY3RNb2RlIiwiaW5mbyIsImxwcm9qUm9vdCIsInN1YmZvbGRlciIsImZzIiwiZXhpc3RzIiwicmVzb3VyY2VQYXRocyIsImRzdFBhdGgiLCJwdXNoIiwiaXNFbXB0eSIsInJlc291cmNlRmlsZXMiLCJyZWFkZGlyIiwiZmlsdGVyIiwibmFtZSIsInNvbWUiLCJ4IiwiZW5kc1dpdGgiLCJtYXAiLCJsZW5ndGgiLCJyZXN1bHRTdHJpbmdzIiwidG9BYnNvbHV0ZVBhdGgiLCJwIiwiaXNBYnNvbHV0ZSIsInByb2Nlc3MiLCJjd2QiLCJ1dGlsIiwiaXNTdWJQYXRoIiwia2V5cyIsIm1lcmdlIiwiZSIsIndhcm4iXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvYXBwLXV0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHBsaXN0LCBmcywgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyLmpzJztcblxuY29uc3QgU1RSSU5HU0RJQ1RfUkVTT1VSQ0UgPSAnLnN0cmluZ3NkaWN0JztcbmNvbnN0IFNUUklOR1NfUkVTT1VSQ0UgPSAnLnN0cmluZ3MnO1xuXG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RQbGlzdEVudHJ5IChhcHAsIGVudHJ5TmFtZSkge1xuICBjb25zdCBwbGlzdFBhdGggPSBwYXRoLnJlc29sdmUoYXBwLCAnSW5mby5wbGlzdCcpO1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocGxpc3RQYXRoKSlbZW50cnlOYW1lXTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZXh0cmFjdCBJbmZvLnBsaXN0IGZyb20gJyR7cGF0aC5iYXNlbmFtZShhcHApfSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdEJ1bmRsZUlkIChhcHApIHtcbiAgY29uc3QgYnVuZGxlSWQgPSBhd2FpdCBleHRyYWN0UGxpc3RFbnRyeShhcHAsICdDRkJ1bmRsZUlkZW50aWZpZXInKTtcbiAgbG9nLmRlYnVnKGBHZXR0aW5nIGJ1bmRsZSBJRCBmcm9tIGFwcCAnJHthcHB9JzogJyR7YnVuZGxlSWR9J2ApO1xuICByZXR1cm4gYnVuZGxlSWQ7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGxhdGZvcm1PcHRzXG4gKlxuICogQHByb3BlcnR5IHtib29sZWFufSBpc1NpbXVsYXRvciAtIFdoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIHBsYXRmb3JtIGlzIGEgU2ltdWxhdG9yXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzVHZPUyAtIFdoZXRoZXIgdGhlIGRlc3RpbmF0aW9uIHBsYXRmb3JtIGlzIGEgU2ltdWxhdG9yXG4gKi9cblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gaXMgY29tcGF0aWJsZSB0byB0aGVcbiAqIHBsYXRmb3JtIHdoZXJlIGl0IGlzIGdvaW5nIHRvIGJlIGluc3RhbGxlZCBhbmQgdGVzdGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHAgLSBUaGUgYWN0dWFsIHBhdGggdG8gdGhlIGFwcGxpY2F0aW9uIGJ1bmRsZVxuICogQHBhcmFtIHtQbGF0Zm9ybU9wdHN9IGV4cGVjdGVkUGxhdGZvcm1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBidW5kbGUgYXJjaGl0ZWN0dXJlIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBkZXZpY2UgYXJjaGl0ZWN0dXJlLlxuICovXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtIChhcHAsIGV4cGVjdGVkUGxhdGZvcm0pIHtcbiAgbG9nLmRlYnVnKCdWZXJpZnlpbmcgYXBwbGljYXRpb24gcGxhdGZvcm0nKTtcblxuICBsZXQgc3VwcG9ydGVkUGxhdGZvcm1zO1xuICB0cnkge1xuICAgIHN1cHBvcnRlZFBsYXRmb3JtcyA9IGF3YWl0IGV4dHJhY3RQbGlzdEVudHJ5KGFwcCwgJ0NGQnVuZGxlU3VwcG9ydGVkUGxhdGZvcm1zJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhlcnIubWVzc2FnZSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZy5kZWJ1ZyhgQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXM6ICR7SlNPTi5zdHJpbmdpZnkoc3VwcG9ydGVkUGxhdGZvcm1zKX1gKTtcbiAgaWYgKCFfLmlzQXJyYXkoc3VwcG9ydGVkUGxhdGZvcm1zKSkge1xuICAgIGxvZy5kZWJ1ZyhgQ0ZCdW5kbGVTdXBwb3J0ZWRQbGF0Zm9ybXMga2V5IGRvZXMgbm90IGV4aXN0IGluICcke3BhdGguYmFzZW5hbWUoYXBwKX0nYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzU2ltdWxhdG9yLFxuICAgIGlzVHZPUyxcbiAgfSA9IGV4cGVjdGVkUGxhdGZvcm07XG4gIGNvbnN0IHByZWZpeCA9IGlzVHZPUyA/ICdBcHBsZVRWJyA6ICdpUGhvbmUnO1xuICBjb25zdCBzdWZmaXggPSBpc1NpbXVsYXRvciA/ICdTaW11bGF0b3InIDogJ09TJztcbiAgY29uc3QgZHN0UGxhdGZvcm0gPSBgJHtwcmVmaXh9JHtzdWZmaXh9YDtcbiAgaWYgKCFzdXBwb3J0ZWRQbGF0Zm9ybXMuaW5jbHVkZXMoZHN0UGxhdGZvcm0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2lzU2ltdWxhdG9yID8gJ1NpbXVsYXRvcicgOiAnUmVhbCBkZXZpY2UnfSBhcmNoaXRlY3R1cmUgaXMgdW5zdXBwb3J0ZWQgYnkgdGhlICcke2FwcH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIGNvcnJlY3QgZGVwbG95bWVudCB0YXJnZXQgaGFzIGJlZW4gc2VsZWN0ZWQgZm9yIGl0cyBjb21waWxhdGlvbiBpbiBYY29kZS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUmVzb3VyY2UgKHJlc291cmNlUGF0aCkge1xuICBjb25zdCBkYXRhID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocmVzb3VyY2VQYXRoKTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhkYXRhKSkge1xuICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZUxvY2FsaXphYmxlU3RyaW5ncyAob3B0cykge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGxhbmd1YWdlID0gJ2VuJyxcbiAgICBsb2NhbGl6YWJsZVN0cmluZ3NEaXIsXG4gICAgc3RyaW5nRmlsZSxcbiAgICBzdHJpY3RNb2RlLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgU3RyaW5ncyBleHRyYWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaWYgJ2FwcCcgY2FwYWJpbGl0eSBpcyBub3Qgc2V0YDtcbiAgICBpZiAoc3RyaWN0TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBsb2cuaW5mbyhtZXNzYWdlKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBsZXQgbHByb2pSb290O1xuICBmb3IgKGNvbnN0IHN1YmZvbGRlciBvZiBbYCR7bGFuZ3VhZ2V9Lmxwcm9qYCwgbG9jYWxpemFibGVTdHJpbmdzRGlyLCAnJ10pIHtcbiAgICBscHJvalJvb3QgPSBwYXRoLnJlc29sdmUoYXBwLCBzdWJmb2xkZXIpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7bHByb2pSb290fScgcmVzb3VyY2VzIGZvbGRlciBoYXMgYmVlbiBmb3VuZGA7XG4gICAgaWYgKHN0cmljdE1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKG1lc3NhZ2UpO1xuICB9XG4gIGxvZy5pbmZvKGBXaWxsIGV4dHJhY3QgcmVzb3VyY2Ugc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgY29uc3QgcmVzb3VyY2VQYXRocyA9IFtdO1xuICBpZiAoc3RyaW5nRmlsZSkge1xuICAgIGNvbnN0IGRzdFBhdGggPSBwYXRoLnJlc29sdmUobHByb2pSb290LCBzdHJpbmdGaWxlKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGRzdFBhdGgpKSB7XG4gICAgICByZXNvdXJjZVBhdGhzLnB1c2goZHN0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm8gJyR7ZHN0UGF0aH0nIHJlc291cmNlIGZpbGUgaGFzIGJlZW4gZm91bmQgZm9yICcke2FwcH0nYDtcbiAgICAgIGlmIChzdHJpY3RNb2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKG1lc3NhZ2UpO1xuICAgICAgbG9nLmluZm8oYEdldHRpbmcgYWxsIHRoZSBhdmFpbGFibGUgc3RyaW5ncyBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSAmJiBhd2FpdCBmcy5leGlzdHMobHByb2pSb290KSkge1xuICAgIGNvbnN0IHJlc291cmNlRmlsZXMgPSAoYXdhaXQgZnMucmVhZGRpcihscHJvalJvb3QpKVxuICAgICAgLmZpbHRlcigobmFtZSkgPT4gXy5zb21lKFtTVFJJTkdTX1JFU09VUkNFLCBTVFJJTkdTRElDVF9SRVNPVVJDRV0sICh4KSA9PiBuYW1lLmVuZHNXaXRoKHgpKSlcbiAgICAgIC5tYXAoKG5hbWUpID0+IHBhdGgucmVzb2x2ZShscHJvalJvb3QsIG5hbWUpKTtcbiAgICByZXNvdXJjZVBhdGhzLnB1c2goLi4ucmVzb3VyY2VGaWxlcyk7XG4gIH1cbiAgbG9nLmluZm8oYEdvdCAke3Jlc291cmNlUGF0aHMubGVuZ3RofSByZXNvdXJjZSBmaWxlKHMpIGluICcke2xwcm9qUm9vdH0nYCk7XG5cbiAgaWYgKF8uaXNFbXB0eShyZXNvdXJjZVBhdGhzKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdFN0cmluZ3MgPSB7fTtcbiAgY29uc3QgdG9BYnNvbHV0ZVBhdGggPSBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBwYXRoLmlzQWJzb2x1dGUocCkgPyBwIDogcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHApO1xuICB9O1xuICBmb3IgKGNvbnN0IHJlc291cmNlUGF0aCBvZiByZXNvdXJjZVBhdGhzKSB7XG4gICAgaWYgKCF1dGlsLmlzU3ViUGF0aCh0b0Fic29sdXRlUGF0aChyZXNvdXJjZVBhdGgpLCB0b0Fic29sdXRlUGF0aChhcHApKSkge1xuICAgICAgLy8gc2VjdXJpdHkgcHJlY2F1dGlvblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtyZXNvdXJjZVBhdGh9JyBpcyBleHBlY3RlZCB0byBiZSBsb2NhdGVkIHVuZGVyICcke2FwcH0nYCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZFJlc291cmNlKHJlc291cmNlUGF0aCk7XG4gICAgICBsb2cuZGVidWcoYFBhcnNlZCAke18ua2V5cyhkYXRhKS5sZW5ndGh9IHN0cmluZyhzKSBmcm9tICcke3Jlc291cmNlUGF0aH0nYCk7XG4gICAgICBfLm1lcmdlKHJlc3VsdFN0cmluZ3MsIGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcGFyc2UgJyR7cmVzb3VyY2VQYXRofScgcmVzb3VyY2UuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBsb2cuaW5mbyhgR290ICR7Xy5rZXlzKHJlc3VsdFN0cmluZ3MpLmxlbmd0aH0gc3RyaW5nKHMpIGZyb20gJyR7bHByb2pSb290fSdgKTtcbiAgcmV0dXJuIHJlc3VsdFN0cmluZ3M7XG59XG5cbmV4cG9ydCB7IGV4dHJhY3RCdW5kbGVJZCwgdmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSwgcGFyc2VMb2NhbGl6YWJsZVN0cmluZ3MgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLG9CQUFvQixHQUFHLGNBQTdCO0FBQ0EsTUFBTUMs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
191
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2FwcC11dGlscy5qcyIsIm5hbWVzIjpbIlNUUklOR1NESUNUX1JFU09VUkNFIiwiU1RSSU5HU19SRVNPVVJDRSIsIlNBRkFSSV9CVU5ETEVfSUQiLCJleHRyYWN0UGxpc3RFbnRyeSIsImFwcCIsImVudHJ5TmFtZSIsInBsaXN0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwicGxpc3QiLCJwYXJzZVBsaXN0RmlsZSIsImVyciIsIkVycm9yIiwiYmFzZW5hbWUiLCJtZXNzYWdlIiwiZXh0cmFjdEJ1bmRsZUlkIiwiYnVuZGxlSWQiLCJsb2ciLCJkZWJ1ZyIsInZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0iLCJleHBlY3RlZFBsYXRmb3JtIiwic3VwcG9ydGVkUGxhdGZvcm1zIiwiSlNPTiIsInN0cmluZ2lmeSIsIl8iLCJpc0FycmF5IiwiaXNTaW11bGF0b3IiLCJpc1R2T1MiLCJwcmVmaXgiLCJzdWZmaXgiLCJkc3RQbGF0Zm9ybSIsImluY2x1ZGVzIiwicmVhZFJlc291cmNlIiwicmVzb3VyY2VQYXRoIiwiZGF0YSIsInJlc3VsdCIsImtleSIsInZhbHVlIiwidG9QYWlycyIsImlzU3RyaW5nIiwicGFyc2VMb2NhbGl6YWJsZVN0cmluZ3MiLCJvcHRzIiwibGFuZ3VhZ2UiLCJsb2NhbGl6YWJsZVN0cmluZ3NEaXIiLCJzdHJpbmdGaWxlIiwic3RyaWN0TW9kZSIsImluZm8iLCJscHJvalJvb3QiLCJzdWJmb2xkZXIiLCJmcyIsImV4aXN0cyIsInJlc291cmNlUGF0aHMiLCJkc3RQYXRoIiwicHVzaCIsImlzRW1wdHkiLCJyZXNvdXJjZUZpbGVzIiwicmVhZGRpciIsImZpbHRlciIsIm5hbWUiLCJzb21lIiwieCIsImVuZHNXaXRoIiwibWFwIiwibGVuZ3RoIiwicmVzdWx0U3RyaW5ncyIsInRvQWJzb2x1dGVQYXRoIiwicCIsImlzQWJzb2x1dGUiLCJwcm9jZXNzIiwiY3dkIiwidXRpbCIsImlzU3ViUGF0aCIsImtleXMiLCJtZXJnZSIsImUiLCJ3YXJuIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2FwcC11dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwbGlzdCwgZnMsIHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyLmpzJztcblxuY29uc3QgU1RSSU5HU0RJQ1RfUkVTT1VSQ0UgPSAnLnN0cmluZ3NkaWN0JztcbmNvbnN0IFNUUklOR1NfUkVTT1VSQ0UgPSAnLnN0cmluZ3MnO1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcblxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0UGxpc3RFbnRyeSAoYXBwLCBlbnRyeU5hbWUpIHtcbiAgY29uc3QgcGxpc3RQYXRoID0gcGF0aC5yZXNvbHZlKGFwcCwgJ0luZm8ucGxpc3QnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHBsaXN0UGF0aCkpW2VudHJ5TmFtZV07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGV4dHJhY3QgSW5mby5wbGlzdCBmcm9tICcke3BhdGguYmFzZW5hbWUoYXBwKX0nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RCdW5kbGVJZCAoYXBwKSB7XG4gIGNvbnN0IGJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdFBsaXN0RW50cnkoYXBwLCAnQ0ZCdW5kbGVJZGVudGlmaWVyJyk7XG4gIGxvZy5kZWJ1ZyhgR2V0dGluZyBidW5kbGUgSUQgZnJvbSBhcHAgJyR7YXBwfSc6ICcke2J1bmRsZUlkfSdgKTtcbiAgcmV0dXJuIGJ1bmRsZUlkO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBsYXRmb3JtT3B0c1xuICpcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNTaW11bGF0b3IgLSBXaGV0aGVyIHRoZSBkZXN0aW5hdGlvbiBwbGF0Zm9ybSBpcyBhIFNpbXVsYXRvclxuICogQHByb3BlcnR5IHtib29sZWFufSBpc1R2T1MgLSBXaGV0aGVyIHRoZSBkZXN0aW5hdGlvbiBwbGF0Zm9ybSBpcyBhIFNpbXVsYXRvclxuICovXG5cbi8qKlxuICogVmVyaWZ5IHdoZXRoZXIgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIGlzIGNvbXBhdGlibGUgdG8gdGhlXG4gKiBwbGF0Zm9ybSB3aGVyZSBpdCBpcyBnb2luZyB0byBiZSBpbnN0YWxsZWQgYW5kIHRlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwIC0gVGhlIGFjdHVhbCBwYXRoIHRvIHRoZSBhcHBsaWNhdGlvbiBidW5kbGVcbiAqIEBwYXJhbSB7UGxhdGZvcm1PcHRzfSBleHBlY3RlZFBsYXRmb3JtXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYnVuZGxlIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZGV2aWNlIGFyY2hpdGVjdHVyZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSAoYXBwLCBleHBlY3RlZFBsYXRmb3JtKSB7XG4gIGxvZy5kZWJ1ZygnVmVyaWZ5aW5nIGFwcGxpY2F0aW9uIHBsYXRmb3JtJyk7XG5cbiAgbGV0IHN1cHBvcnRlZFBsYXRmb3JtcztcbiAgdHJ5IHtcbiAgICBzdXBwb3J0ZWRQbGF0Zm9ybXMgPSBhd2FpdCBleHRyYWN0UGxpc3RFbnRyeShhcHAsICdDRkJ1bmRsZVN1cHBvcnRlZFBsYXRmb3JtcycpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoZXJyLm1lc3NhZ2UpO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2cuZGVidWcoYENGQnVuZGxlU3VwcG9ydGVkUGxhdGZvcm1zOiAke0pTT04uc3RyaW5naWZ5KHN1cHBvcnRlZFBsYXRmb3Jtcyl9YCk7XG4gIGlmICghXy5pc0FycmF5KHN1cHBvcnRlZFBsYXRmb3JtcykpIHtcbiAgICBsb2cuZGVidWcoYENGQnVuZGxlU3VwcG9ydGVkUGxhdGZvcm1zIGtleSBkb2VzIG5vdCBleGlzdCBpbiAnJHtwYXRoLmJhc2VuYW1lKGFwcCl9J2ApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBpc1NpbXVsYXRvcixcbiAgICBpc1R2T1MsXG4gIH0gPSBleHBlY3RlZFBsYXRmb3JtO1xuICBjb25zdCBwcmVmaXggPSBpc1R2T1MgPyAnQXBwbGVUVicgOiAnaVBob25lJztcbiAgY29uc3Qgc3VmZml4ID0gaXNTaW11bGF0b3IgPyAnU2ltdWxhdG9yJyA6ICdPUyc7XG4gIGNvbnN0IGRzdFBsYXRmb3JtID0gYCR7cHJlZml4fSR7c3VmZml4fWA7XG4gIGlmICghc3VwcG9ydGVkUGxhdGZvcm1zLmluY2x1ZGVzKGRzdFBsYXRmb3JtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtpc1NpbXVsYXRvciA/ICdTaW11bGF0b3InIDogJ1JlYWwgZGV2aWNlJ30gYXJjaGl0ZWN0dXJlIGlzIHVuc3VwcG9ydGVkIGJ5IHRoZSAnJHthcHB9JyBhcHBsaWNhdGlvbi4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBjb3JyZWN0IGRlcGxveW1lbnQgdGFyZ2V0IGhhcyBiZWVuIHNlbGVjdGVkIGZvciBpdHMgY29tcGlsYXRpb24gaW4gWGNvZGUuYCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFJlc291cmNlIChyZXNvdXJjZVBhdGgpIHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHJlc291cmNlUGF0aCk7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMoZGF0YSkpIHtcbiAgICByZXN1bHRba2V5XSA9IF8uaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFyc2VMb2NhbGl6YWJsZVN0cmluZ3MgKG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBsYW5ndWFnZSA9ICdlbicsXG4gICAgbG9jYWxpemFibGVTdHJpbmdzRGlyLFxuICAgIHN0cmluZ0ZpbGUsXG4gICAgc3RyaWN0TW9kZSxcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFhcHApIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYFN0cmluZ3MgZXh0cmFjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGlmICdhcHAnIGNhcGFiaWxpdHkgaXMgbm90IHNldGA7XG4gICAgaWYgKHN0cmljdE1vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgbG9nLmluZm8obWVzc2FnZSk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgbGV0IGxwcm9qUm9vdDtcbiAgZm9yIChjb25zdCBzdWJmb2xkZXIgb2YgW2Ake2xhbmd1YWdlfS5scHJvamAsIGxvY2FsaXphYmxlU3RyaW5nc0RpciwgJyddKSB7XG4gICAgbHByb2pSb290ID0gcGF0aC5yZXNvbHZlKGFwcCwgc3ViZm9sZGVyKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxwcm9qUm9vdCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlID0gYE5vICcke2xwcm9qUm9vdH0nIHJlc291cmNlcyBmb2xkZXIgaGFzIGJlZW4gZm91bmRgO1xuICAgIGlmIChzdHJpY3RNb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhtZXNzYWdlKTtcbiAgfVxuICBsb2cuaW5mbyhgV2lsbCBleHRyYWN0IHJlc291cmNlIHN0cmluZ3MgZnJvbSAnJHtscHJvalJvb3R9J2ApO1xuXG4gIGNvbnN0IHJlc291cmNlUGF0aHMgPSBbXTtcbiAgaWYgKHN0cmluZ0ZpbGUpIHtcbiAgICBjb25zdCBkc3RQYXRoID0gcGF0aC5yZXNvbHZlKGxwcm9qUm9vdCwgc3RyaW5nRmlsZSk7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhkc3RQYXRoKSkge1xuICAgICAgcmVzb3VyY2VQYXRocy5wdXNoKGRzdFBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYE5vICcke2RzdFBhdGh9JyByZXNvdXJjZSBmaWxlIGhhcyBiZWVuIGZvdW5kIGZvciAnJHthcHB9J2A7XG4gICAgICBpZiAoc3RyaWN0TW9kZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBsb2cuaW5mbyhtZXNzYWdlKTtcbiAgICAgIGxvZy5pbmZvKGBHZXR0aW5nIGFsbCB0aGUgYXZhaWxhYmxlIHN0cmluZ3MgZnJvbSAnJHtscHJvalJvb3R9J2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChfLmlzRW1wdHkocmVzb3VyY2VQYXRocykgJiYgYXdhaXQgZnMuZXhpc3RzKGxwcm9qUm9vdCkpIHtcbiAgICBjb25zdCByZXNvdXJjZUZpbGVzID0gKGF3YWl0IGZzLnJlYWRkaXIobHByb2pSb290KSlcbiAgICAgIC5maWx0ZXIoKG5hbWUpID0+IF8uc29tZShbU1RSSU5HU19SRVNPVVJDRSwgU1RSSU5HU0RJQ1RfUkVTT1VSQ0VdLCAoeCkgPT4gbmFtZS5lbmRzV2l0aCh4KSkpXG4gICAgICAubWFwKChuYW1lKSA9PiBwYXRoLnJlc29sdmUobHByb2pSb290LCBuYW1lKSk7XG4gICAgcmVzb3VyY2VQYXRocy5wdXNoKC4uLnJlc291cmNlRmlsZXMpO1xuICB9XG4gIGxvZy5pbmZvKGBHb3QgJHtyZXNvdXJjZVBhdGhzLmxlbmd0aH0gcmVzb3VyY2UgZmlsZShzKSBpbiAnJHtscHJvalJvb3R9J2ApO1xuXG4gIGlmIChfLmlzRW1wdHkocmVzb3VyY2VQYXRocykpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCByZXN1bHRTdHJpbmdzID0ge307XG4gIGNvbnN0IHRvQWJzb2x1dGVQYXRoID0gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gcGF0aC5pc0Fic29sdXRlKHApID8gcCA6IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBwKTtcbiAgfTtcbiAgZm9yIChjb25zdCByZXNvdXJjZVBhdGggb2YgcmVzb3VyY2VQYXRocykge1xuICAgIGlmICghdXRpbC5pc1N1YlBhdGgodG9BYnNvbHV0ZVBhdGgocmVzb3VyY2VQYXRoKSwgdG9BYnNvbHV0ZVBhdGgoYXBwKSkpIHtcbiAgICAgIC8vIHNlY3VyaXR5IHByZWNhdXRpb25cbiAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7cmVzb3VyY2VQYXRofScgaXMgZXhwZWN0ZWQgdG8gYmUgbG9jYXRlZCB1bmRlciAnJHthcHB9J2ApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRSZXNvdXJjZShyZXNvdXJjZVBhdGgpO1xuICAgICAgbG9nLmRlYnVnKGBQYXJzZWQgJHtfLmtleXMoZGF0YSkubGVuZ3RofSBzdHJpbmcocykgZnJvbSAnJHtyZXNvdXJjZVBhdGh9J2ApO1xuICAgICAgXy5tZXJnZShyZXN1bHRTdHJpbmdzLCBkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgQ2Fubm90IHBhcnNlICcke3Jlc291cmNlUGF0aH0nIHJlc291cmNlLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgbG9nLmluZm8oYEdvdCAke18ua2V5cyhyZXN1bHRTdHJpbmdzKS5sZW5ndGh9IHN0cmluZyhzKSBmcm9tICcke2xwcm9qUm9vdH0nYCk7XG4gIHJldHVybiByZXN1bHRTdHJpbmdzO1xufVxuXG5leHBvcnQge1xuICBleHRyYWN0QnVuZGxlSWQsIHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0sIHBhcnNlTG9jYWxpemFibGVTdHJpbmdzLFxuICBTQUZBUklfQlVORExFX0lEXG59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
@@ -11,9 +11,9 @@ require("source-map-support/register");
11
11
 
12
12
  var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
- var _support = require("@appium/support");
14
+ var _support = require("appium/support");
15
15
 
16
- var _baseDriver = require("@appium/base-driver");
16
+ var _driver = require("appium/driver");
17
17
 
18
18
  var _appiumIosDevice = require("appium-ios-device");
19
19
 
@@ -22,7 +22,7 @@ const commands = {};
22
22
  function requireOptions(opts = {}, reqKeys = []) {
23
23
  for (const key of reqKeys) {
24
24
  if (!_lodash.default.isString(opts[key]) || _lodash.default.isEmpty(opts[key])) {
25
- throw new _baseDriver.errors.InvalidArgumentError(`'${key}' is expected to be a valid string. '${opts[key]}' is given instead`);
25
+ throw new _driver.errors.InvalidArgumentError(`'${key}' is expected to be a valid string. '${opts[key]}' is given instead`);
26
26
  }
27
27
  }
28
28
 
@@ -95,49 +95,13 @@ commands.mobileActivateApp = async function mobileActivateApp(opts = {}) {
95
95
 
96
96
  commands.mobileKillApp = async function mobileKillApp(opts = {}) {
97
97
  if (!this.isRealDevice()) {
98
- throw new _baseDriver.errors.UnsupportedOperationError('A real device is required');
98
+ throw new _driver.errors.UnsupportedOperationError('A real device is required');
99
99
  }
100
100
 
101
101
  const {
102
102
  bundleId
103
103
  } = requireOptions(opts, ['bundleId']);
104
- let instrumentService;
105
- let installProxyService;
106
-
107
- try {
108
- installProxyService = await _appiumIosDevice.services.startInstallationProxyService(this.opts.device.udid);
109
- const apps = await installProxyService.listApplications();
110
-
111
- if (!apps[bundleId]) {
112
- this.log.info(`The bundle id '${bundleId}' did not exist`);
113
- return false;
114
- }
115
-
116
- const executableName = apps[bundleId].CFBundleExecutable;
117
- this.log.debug(`The executable name for the bundle id '${bundleId}' was '${executableName}'`);
118
- instrumentService = await _appiumIosDevice.services.startInstrumentService(this.opts.device.udid);
119
- const processes = await instrumentService.callChannel(_appiumIosDevice.INSTRUMENT_CHANNEL.DEVICE_INFO, 'runningProcesses');
120
- const process = processes.selector.find(process => process.name === executableName);
121
-
122
- if (!process) {
123
- this.log.info(`The process of the bundle id '${bundleId}' was not running`);
124
- return false;
125
- }
126
-
127
- await instrumentService.callChannel(_appiumIosDevice.INSTRUMENT_CHANNEL.PROCESS_CONTROL, 'killPid:', `${process.pid}`);
128
- return true;
129
- } catch (err) {
130
- this.log.warn(`Failed to kill '${bundleId}'. Original error: ${err.stderr || err.message}`);
131
- return false;
132
- } finally {
133
- if (installProxyService) {
134
- installProxyService.close();
135
- }
136
-
137
- if (instrumentService) {
138
- instrumentService.close();
139
- }
140
- }
104
+ return await this.opts.device.terminateApp(bundleId);
141
105
  };
142
106
 
143
107
  commands.mobileQueryAppState = async function mobileQueryAppState(opts = {}) {
@@ -176,7 +140,7 @@ commands.queryAppState = async function queryAppState(bundleId) {
176
140
 
177
141
  commands.mobileListApps = async function mobileListApps(opts = {}) {
178
142
  if (!this.isRealDevice()) {
179
- throw new _baseDriver.errors.NotImplementedError(`This extension is only supported on real devices`);
143
+ throw new _driver.errors.NotImplementedError(`This extension is only supported on real devices`);
180
144
  }
181
145
 
182
146
  const {
@@ -197,4 +161,4 @@ var _default = commands;
197
161
  exports.default = _default;require('source-map-support').install();
198
162
 
199
163
 
200
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIiwibmFtZXMiOlsiY29tbWFuZHMiLCJyZXF1aXJlT3B0aW9ucyIsIm9wdHMiLCJyZXFLZXlzIiwia2V5IiwiXyIsImlzU3RyaW5nIiwiaXNFbXB0eSIsImVycm9ycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwibW9iaWxlSW5zdGFsbEFwcCIsImFwcCIsInRpbWVvdXRNcyIsInN0cmF0ZWd5Iiwic3JjQXBwUGF0aCIsImhlbHBlcnMiLCJjb25maWd1cmVBcHAiLCJsb2ciLCJpbmZvIiwiaXNSZWFsRGV2aWNlIiwiZGV2aWNlIiwidWRpZCIsImZzIiwiZXhpc3RzIiwiZXJyb3JBbmRUaHJvdyIsImluc3RhbGxBcHAiLCJhcHBQdXNoVGltZW91dCIsImFwcEluc3RhbGxTdHJhdGVneSIsIm1vYmlsZUlzQXBwSW5zdGFsbGVkIiwiYnVuZGxlSWQiLCJpbnN0YWxsZWQiLCJpc0FwcEluc3RhbGxlZCIsIm1vYmlsZVJlbW92ZUFwcCIsInJlbW92ZUFwcCIsImVyciIsIndhcm4iLCJtZXNzYWdlIiwibW9iaWxlTGF1bmNoQXBwIiwibGF1bmNoT3B0aW9ucyIsImFyZ3VtZW50cyIsImlzQXJyYXkiLCJlbnZpcm9ubWVudCIsInByb3h5Q29tbWFuZCIsIm1vYmlsZVRlcm1pbmF0ZUFwcCIsIm1vYmlsZUFjdGl2YXRlQXBwIiwibW9iaWxlS2lsbEFwcCIsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IiLCJpbnN0cnVtZW50U2VydmljZSIsImluc3RhbGxQcm94eVNlcnZpY2UiLCJzZXJ2aWNlcyIsInN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwiYXBwcyIsImxpc3RBcHBsaWNhdGlvbnMiLCJleGVjdXRhYmxlTmFtZSIsIkNGQnVuZGxlRXhlY3V0YWJsZSIsImRlYnVnIiwic3RhcnRJbnN0cnVtZW50U2VydmljZSIsInByb2Nlc3NlcyIsImNhbGxDaGFubmVsIiwiSU5TVFJVTUVOVF9DSEFOTkVMIiwiREVWSUNFX0lORk8iLCJwcm9jZXNzIiwic2VsZWN0b3IiLCJmaW5kIiwibmFtZSIsIlBST0NFU1NfQ09OVFJPTCIsInBpZCIsInN0ZGVyciIsImNsb3NlIiwibW9iaWxlUXVlcnlBcHBTdGF0ZSIsImFwcFBhdGgiLCJpc1BsYWluT2JqZWN0IiwiYWN0aXZhdGVBcHAiLCJPYmplY3QiLCJhc3NpZ24iLCJ0ZXJtaW5hdGVBcHAiLCJxdWVyeUFwcFN0YXRlIiwibW9iaWxlTGlzdEFwcHMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiYXBwbGljYXRpb25UeXBlIiwic2VydmljZSJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBzZXJ2aWNlcywgSU5TVFJVTUVOVF9DSEFOTkVMIH0gZnJvbSAnYXBwaXVtLWlvcy1kZXZpY2UnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5mdW5jdGlvbiByZXF1aXJlT3B0aW9ucyAob3B0cyA9IHt9LCByZXFLZXlzID0gW10pIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgcmVxS2V5cykge1xuICAgIGlmICghXy5pc1N0cmluZyhvcHRzW2tleV0pIHx8IF8uaXNFbXB0eShvcHRzW2tleV0pKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgJyR7a2V5fScgaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBzdHJpbmcuICcke29wdHNba2V5XX0nIGlzIGdpdmVuIGluc3RlYWRgXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0cztcbn1cblxuY29tbWFuZHMubW9iaWxlSW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUluc3RhbGxBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcCwgdGltZW91dE1zLCBzdHJhdGVneSB9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydhcHAnXSk7XG4gIGNvbnN0IHNyY0FwcFBhdGggPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgJy5hcHAnKTtcbiAgdGhpcy5sb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtzcmNBcHBQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNBcHBQYXRoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZSBhcHBsaWNhdGlvbiBhdCAnJHtzcmNBcHBQYXRofScgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgfVxuICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmluc3RhbGxBcHAoXG4gICAgc3JjQXBwUGF0aCwgdGltZW91dE1zID8/IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCwgc3RyYXRlZ3kgPz8gdGhpcy5vcHRzLmFwcEluc3RhbGxTdHJhdGVneVxuICApO1xuICB0aGlzLmxvZy5pbmZvKGBJbnN0YWxsYXRpb24gb2YgJyR7c3JjQXBwUGF0aH0nIHN1Y2NlZWRlZGApO1xufTtcblxuY29tbWFuZHMubW9iaWxlSXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJc0FwcEluc3RhbGxlZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBjb25zdCBpbnN0YWxsZWQgPSBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmlzQXBwSW5zdGFsbGVkKGJ1bmRsZUlkKTtcbiAgdGhpcy5sb2cuaW5mbyhgQXBwICcke2J1bmRsZUlkfScgaXMke2luc3RhbGxlZCA/ICcnIDogJyBub3QnfSBpbnN0YWxsZWRgKTtcbiAgcmV0dXJuIGluc3RhbGxlZDtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICB0aGlzLmxvZy5pbmZvKGBVbmluc3RhbGxpbmcgdGhlIGFwcGxpY2F0aW9uIHdpdGggYnVuZGxlIGlkZW50aWZpZXIgJyR7YnVuZGxlSWR9JyBgICtcbiAgICBgZnJvbSB0aGUgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdTaW11bGF0b3InfSB3aXRoIFVESUQgJyR7dGhpcy5vcHRzLmRldmljZS51ZGlkfSdgKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnJlbW92ZUFwcChidW5kbGVJZCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgUmVtb3ZhbCBvZiAnJHtidW5kbGVJZH0nIHN1Y2NlZWRlZGApO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmVtb3ZlICcke2J1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29tbWFuZHMubW9iaWxlTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgbGF1bmNoT3B0aW9ucyA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGlmIChvcHRzLmFyZ3VtZW50cykge1xuICAgIGxhdW5jaE9wdGlvbnMuYXJndW1lbnRzID0gXy5pc0FycmF5KG9wdHMuYXJndW1lbnRzKSA/IG9wdHMuYXJndW1lbnRzIDogW29wdHMuYXJndW1lbnRzXTtcbiAgfVxuICBpZiAob3B0cy5lbnZpcm9ubWVudCkge1xuICAgIGxhdW5jaE9wdGlvbnMuZW52aXJvbm1lbnQgPSBvcHRzLmVudmlyb25tZW50O1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2xhdW5jaCcsICdQT1NUJywgbGF1bmNoT3B0aW9ucyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy90ZXJtaW5hdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVBY3RpdmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2FjdGl2YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbi8qKlxuICogS2lsbCB0aGUgZ2l2ZW4gYnVuZGxlIGlkIHByb2Nlc3MgdmlhIGluc3RydW1lbnRzIHNlcnZpY2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vWXVlQ2hlbi1DL3B5LWlvcy1kZXZpY2UvYmxvYi81MWY0NjgzYzVjM2MzODVhMDE1ODU4YWRhMDdhNWYxYzYyZDNjZjU3L2lvc19kZXZpY2UvY2xpL2Jhc2UucHkjTDIyMFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBidW5kbGUgaWQgcHJvY2VzcyB3YXMga2lsbGVkLiBPdGhlcndpc2UgZmFsc2UuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUtpbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVLaWxsQXBwIChvcHRzID0ge30pIHtcbiAgaWYgKCF0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5VbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKCdBIHJlYWwgZGV2aWNlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBjb25zdCB7YnVuZGxlSWR9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKTtcbiAgbGV0IGluc3RydW1lbnRTZXJ2aWNlO1xuICBsZXQgaW5zdGFsbFByb3h5U2VydmljZTtcbiAgdHJ5IHtcbiAgICBpbnN0YWxsUHJveHlTZXJ2aWNlID0gYXdhaXQgc2VydmljZXMuc3RhcnRJbnN0YWxsYXRpb25Qcm94eVNlcnZpY2UodGhpcy5vcHRzLmRldmljZS51ZGlkKTtcbiAgICBjb25zdCBhcHBzID0gYXdhaXQgaW5zdGFsbFByb3h5U2VydmljZS5saXN0QXBwbGljYXRpb25zKCk7XG4gICAgaWYgKCFhcHBzW2J1bmRsZUlkXSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVGhlIGJ1bmRsZSBpZCAnJHtidW5kbGVJZH0nIGRpZCBub3QgZXhpc3RgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZXhlY3V0YWJsZU5hbWUgPSBhcHBzW2J1bmRsZUlkXS5DRkJ1bmRsZUV4ZWN1dGFibGU7XG4gICAgdGhpcy5sb2cuZGVidWcoYFRoZSBleGVjdXRhYmxlIG5hbWUgZm9yIHRoZSBidW5kbGUgaWQgJyR7YnVuZGxlSWR9JyB3YXMgJyR7ZXhlY3V0YWJsZU5hbWV9J2ApO1xuICAgIGluc3RydW1lbnRTZXJ2aWNlID0gYXdhaXQgc2VydmljZXMuc3RhcnRJbnN0cnVtZW50U2VydmljZSh0aGlzLm9wdHMuZGV2aWNlLnVkaWQpO1xuICAgIGNvbnN0IHByb2Nlc3NlcyA9IGF3YWl0IGluc3RydW1lbnRTZXJ2aWNlLmNhbGxDaGFubmVsKElOU1RSVU1FTlRfQ0hBTk5FTC5ERVZJQ0VfSU5GTywgJ3J1bm5pbmdQcm9jZXNzZXMnKTtcbiAgICBjb25zdCBwcm9jZXNzID0gcHJvY2Vzc2VzLnNlbGVjdG9yLmZpbmQoKHByb2Nlc3MpID0+IHByb2Nlc3MubmFtZSA9PT0gZXhlY3V0YWJsZU5hbWUpO1xuICAgIGlmICghcHJvY2Vzcykge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVGhlIHByb2Nlc3Mgb2YgdGhlIGJ1bmRsZSBpZCAnJHtidW5kbGVJZH0nIHdhcyBub3QgcnVubmluZ2ApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhd2FpdCBpbnN0cnVtZW50U2VydmljZS5jYWxsQ2hhbm5lbChJTlNUUlVNRU5UX0NIQU5ORUwuUFJPQ0VTU19DT05UUk9MLCAna2lsbFBpZDonLCBgJHtwcm9jZXNzLnBpZH1gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5sb2cud2FybihgRmFpbGVkIHRvIGtpbGwgJyR7YnVuZGxlSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLnN0ZGVyciB8fCBlcnIubWVzc2FnZX1gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGluc3RhbGxQcm94eVNlcnZpY2UpIHtcbiAgICAgIGluc3RhbGxQcm94eVNlcnZpY2UuY2xvc2UoKTtcbiAgICB9XG4gICAgaWYgKGluc3RydW1lbnRTZXJ2aWNlKSB7XG4gICAgICBpbnN0cnVtZW50U2VydmljZS5jbG9zZSgpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIHN0YXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBPcHRpb25zIHNldCwgd2hpY2ggbXVzdCBjb250YWluIGBidW5kbGVJZGAgcHJvcGVydHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBhY3R1YWwgYXBwbGljYXRpb24gc3RhdGUgY29kZS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGU/bGFuZ3VhZ2U9b2JqY1xuICogdG8gZ2V0IHRoZSBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlUXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVF1ZXJ5QXBwU3RhdGUgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy9zdGF0ZScsICdQT1NUJywgcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKSk7XG59O1xuXG5jb21tYW5kcy5pbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwcCAoYXBwUGF0aCwgb3B0cyA9IHt9KSB7XG4gIGF3YWl0IHRoaXMubW9iaWxlSW5zdGFsbEFwcCh7XG4gICAgLi4uKF8uaXNQbGFpbk9iamVjdChvcHRzKSA/IG9wdHMgOiB7fSksXG4gICAgYXBwOiBhcHBQYXRoLFxuICB9KTtcbn07XG5cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGJ1bmRsZUlkLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlTGF1bmNoQXBwKE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtidW5kbGVJZH0pKTtcbn07XG5cbmNvbW1hbmRzLmlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnN0YWxsZWQgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUlzQXBwSW5zdGFsbGVkKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMudGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gdGVybWluYXRlQXBwIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVUZXJtaW5hdGVBcHAoe2J1bmRsZUlkfSk7XG59O1xuXG5jb21tYW5kcy5xdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gcXVlcnlBcHBTdGF0ZSAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlUXVlcnlBcHBTdGF0ZSh7YnVuZGxlSWR9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTGlzdEFwcHNPcHRpb25zXG4gKiBAcHJvcGVydHkgeydTeXN0ZW0nfCdVc2VyJ30gYXBwbGljYXRpb25UeXBlIFtVc2VyXSBUaGUgdHlwZSBvZiBhcHBsaWNhdGlvbnMgdG8gbGlzdFxuICovXG5cbi8qKlxuICogTGlzdCBhcHBsaWNhdGlvbnMgaW5zdGFsbGVkIG9uIHRoZSByZWFsIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtMaXN0QXBwc09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBIGxpc3Qgb2YgYXBwcywgd2hlcmUgZWFjaCBpdGVtIGlzIGEgbWFwIHdoZXJlIGtleXMgYXJlXG4gKiBidW5kbGUgaWRlbnRpZmllcnMgYW5kIHZhbHVlcyBhcmUgbWFwcyBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBhcHAgcHJvcGVydGllcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlTGlzdEFwcHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0QXBwcyAob3B0cyA9IHt9KSB7XG4gIGlmICghdGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcihgVGhpcyBleHRlbnNpb24gaXMgb25seSBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzYCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgYXBwbGljYXRpb25UeXBlID0gJ1VzZXInLFxuICB9ID0gb3B0cztcbiAgY29uc3Qgc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlKHRoaXMub3B0cy5kZXZpY2UudWRpZCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHNlcnZpY2UubGlzdEFwcGxpY2F0aW9ucyh7YXBwbGljYXRpb25UeXBlfSk7XG4gIH0gZmluYWxseSB7XG4gICAgc2VydmljZS5jbG9zZSgpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxRQUFRLEdBQUcsRUFBakI7O0FBRUEsU0FBU0MsY0FBVCxDQUF5QkMsSUFBSSxHQUFHLEVBQWhDLEVBQW9DQyxPQUFPLEdBQUcsRUFBOUMsRUFBa0Q7RUFDaEQsS0FBSyxNQUFNQyxHQUFYLElBQWtCRCxPQUFsQixFQUEyQjtJQUN6QixJQUFJLENBQUNFLGVBQUEsQ0FBRUMsUUFBRixDQUFXSixJQUFJLENBQUNFLEdBQUQsQ0FBZixDQUFELElBQTBCQyxlQUFBLENBQUVFLE9BQUYsQ0FBVUwsSUFBSSxDQUFDRSxHQUFELENBQWQsQ0FBOUIsRUFBb0Q7TUFDbEQsTUFBTSxJQUFJSSxrQkFBQSxDQUFPQyxvQkFBWCxDQUNILElBQUdMLEdBQUksd0NBQXVDRixJQUFJLENBQUNFLEdBQUQsQ0FBTSxvQkFEckQsQ0FBTjtJQUdEO0VBQ0Y7O0VBQ0QsT0FBT0YsSUFBUDtBQUNEOztBQUVERixRQUFRLENBQUNVLGdCQUFULEdBQTRCLGVBQWVBLGdCQUFmLENBQWlDUixJQUFJLEdBQUcsRUFBeEMsRUFBNEM7RUFDdEUsTUFBTTtJQUFFUyxHQUFGO0lBQU9DLFNBQVA7SUFBa0JDO0VBQWxCLElBQStCWixjQUFjLENBQUNDLElBQUQsRUFBTyxDQUFDLEtBQUQsQ0FBUCxDQUFuRDtFQUNBLE1BQU1ZLFVBQVUsR0FBRyxNQUFNLEtBQUtDLE9BQUwsQ0FBYUMsWUFBYixDQUEwQkwsR0FBMUIsRUFBK0IsTUFBL0IsQ0FB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
164
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIiwibmFtZXMiOlsiY29tbWFuZHMiLCJyZXF1aXJlT3B0aW9ucyIsIm9wdHMiLCJyZXFLZXlzIiwia2V5IiwiXyIsImlzU3RyaW5nIiwiaXNFbXB0eSIsImVycm9ycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwibW9iaWxlSW5zdGFsbEFwcCIsImFwcCIsInRpbWVvdXRNcyIsInN0cmF0ZWd5Iiwic3JjQXBwUGF0aCIsImhlbHBlcnMiLCJjb25maWd1cmVBcHAiLCJsb2ciLCJpbmZvIiwiaXNSZWFsRGV2aWNlIiwiZGV2aWNlIiwidWRpZCIsImZzIiwiZXhpc3RzIiwiZXJyb3JBbmRUaHJvdyIsImluc3RhbGxBcHAiLCJhcHBQdXNoVGltZW91dCIsImFwcEluc3RhbGxTdHJhdGVneSIsIm1vYmlsZUlzQXBwSW5zdGFsbGVkIiwiYnVuZGxlSWQiLCJpbnN0YWxsZWQiLCJpc0FwcEluc3RhbGxlZCIsIm1vYmlsZVJlbW92ZUFwcCIsInJlbW92ZUFwcCIsImVyciIsIndhcm4iLCJtZXNzYWdlIiwibW9iaWxlTGF1bmNoQXBwIiwibGF1bmNoT3B0aW9ucyIsImFyZ3VtZW50cyIsImlzQXJyYXkiLCJlbnZpcm9ubWVudCIsInByb3h5Q29tbWFuZCIsIm1vYmlsZVRlcm1pbmF0ZUFwcCIsIm1vYmlsZUFjdGl2YXRlQXBwIiwibW9iaWxlS2lsbEFwcCIsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IiLCJ0ZXJtaW5hdGVBcHAiLCJtb2JpbGVRdWVyeUFwcFN0YXRlIiwiYXBwUGF0aCIsImlzUGxhaW5PYmplY3QiLCJhY3RpdmF0ZUFwcCIsIk9iamVjdCIsImFzc2lnbiIsInF1ZXJ5QXBwU3RhdGUiLCJtb2JpbGVMaXN0QXBwcyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJhcHBsaWNhdGlvblR5cGUiLCJzZXJ2aWNlIiwic2VydmljZXMiLCJzdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSIsImxpc3RBcHBsaWNhdGlvbnMiLCJjbG9zZSJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHNlcnZpY2VzIH0gZnJvbSAnYXBwaXVtLWlvcy1kZXZpY2UnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5mdW5jdGlvbiByZXF1aXJlT3B0aW9ucyAob3B0cyA9IHt9LCByZXFLZXlzID0gW10pIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgcmVxS2V5cykge1xuICAgIGlmICghXy5pc1N0cmluZyhvcHRzW2tleV0pIHx8IF8uaXNFbXB0eShvcHRzW2tleV0pKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgJyR7a2V5fScgaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBzdHJpbmcuICcke29wdHNba2V5XX0nIGlzIGdpdmVuIGluc3RlYWRgXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0cztcbn1cblxuY29tbWFuZHMubW9iaWxlSW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUluc3RhbGxBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcCwgdGltZW91dE1zLCBzdHJhdGVneSB9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydhcHAnXSk7XG4gIGNvbnN0IHNyY0FwcFBhdGggPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgJy5hcHAnKTtcbiAgdGhpcy5sb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtzcmNBcHBQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNBcHBQYXRoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZSBhcHBsaWNhdGlvbiBhdCAnJHtzcmNBcHBQYXRofScgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgfVxuICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmluc3RhbGxBcHAoXG4gICAgc3JjQXBwUGF0aCwgdGltZW91dE1zID8/IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCwgc3RyYXRlZ3kgPz8gdGhpcy5vcHRzLmFwcEluc3RhbGxTdHJhdGVneVxuICApO1xuICB0aGlzLmxvZy5pbmZvKGBJbnN0YWxsYXRpb24gb2YgJyR7c3JjQXBwUGF0aH0nIHN1Y2NlZWRlZGApO1xufTtcblxuY29tbWFuZHMubW9iaWxlSXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJc0FwcEluc3RhbGxlZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBjb25zdCBpbnN0YWxsZWQgPSBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmlzQXBwSW5zdGFsbGVkKGJ1bmRsZUlkKTtcbiAgdGhpcy5sb2cuaW5mbyhgQXBwICcke2J1bmRsZUlkfScgaXMke2luc3RhbGxlZCA/ICcnIDogJyBub3QnfSBpbnN0YWxsZWRgKTtcbiAgcmV0dXJuIGluc3RhbGxlZDtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICB0aGlzLmxvZy5pbmZvKGBVbmluc3RhbGxpbmcgdGhlIGFwcGxpY2F0aW9uIHdpdGggYnVuZGxlIGlkZW50aWZpZXIgJyR7YnVuZGxlSWR9JyBgICtcbiAgICBgZnJvbSB0aGUgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdTaW11bGF0b3InfSB3aXRoIFVESUQgJyR7dGhpcy5vcHRzLmRldmljZS51ZGlkfSdgKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnJlbW92ZUFwcChidW5kbGVJZCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgUmVtb3ZhbCBvZiAnJHtidW5kbGVJZH0nIHN1Y2NlZWRlZGApO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmVtb3ZlICcke2J1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29tbWFuZHMubW9iaWxlTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgbGF1bmNoT3B0aW9ucyA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGlmIChvcHRzLmFyZ3VtZW50cykge1xuICAgIGxhdW5jaE9wdGlvbnMuYXJndW1lbnRzID0gXy5pc0FycmF5KG9wdHMuYXJndW1lbnRzKSA/IG9wdHMuYXJndW1lbnRzIDogW29wdHMuYXJndW1lbnRzXTtcbiAgfVxuICBpZiAob3B0cy5lbnZpcm9ubWVudCkge1xuICAgIGxhdW5jaE9wdGlvbnMuZW52aXJvbm1lbnQgPSBvcHRzLmVudmlyb25tZW50O1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2xhdW5jaCcsICdQT1NUJywgbGF1bmNoT3B0aW9ucyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy90ZXJtaW5hdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVBY3RpdmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2FjdGl2YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbi8qKlxuICogS2lsbCB0aGUgZ2l2ZW4gYnVuZGxlIGlkIHByb2Nlc3MgdmlhIGluc3RydW1lbnRzIHNlcnZpY2UuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vWXVlQ2hlbi1DL3B5LWlvcy1kZXZpY2UvYmxvYi81MWY0NjgzYzVjM2MzODVhMDE1ODU4YWRhMDdhNWYxYzYyZDNjZjU3L2lvc19kZXZpY2UvY2xpL2Jhc2UucHkjTDIyMFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBidW5kbGUgaWQgcHJvY2VzcyB3YXMga2lsbGVkLiBPdGhlcndpc2UgZmFsc2UuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUtpbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVLaWxsQXBwIChvcHRzID0ge30pIHtcbiAgaWYgKCF0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5VbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKCdBIHJlYWwgZGV2aWNlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBjb25zdCB7YnVuZGxlSWR9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydidW5kbGVJZCddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UudGVybWluYXRlQXBwKGJ1bmRsZUlkKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWN0dWFsIGFwcGxpY2F0aW9uIHN0YXRlIGNvZGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlP2xhbmd1YWdlPW9iamNcbiAqIHRvIGdldCB0aGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvc3RhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgsIG9wdHMgPSB7fSkge1xuICBhd2FpdCB0aGlzLm1vYmlsZUluc3RhbGxBcHAoe1xuICAgIC4uLihfLmlzUGxhaW5PYmplY3Qob3B0cykgPyBvcHRzIDoge30pLFxuICAgIGFwcDogYXBwUGF0aCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5hY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChidW5kbGVJZCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUxhdW5jaEFwcChPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7YnVuZGxlSWR9KSk7XG59O1xuXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVJc0FwcEluc3RhbGxlZCh7YnVuZGxlSWR9KTtcbn07XG5cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlVGVybWluYXRlQXBwKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMucXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QXBwU3RhdGUgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUoe2J1bmRsZUlkfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExpc3RBcHBzT3B0aW9uc1xuICogQHByb3BlcnR5IHsnU3lzdGVtJ3wnVXNlcid9IGFwcGxpY2F0aW9uVHlwZSBbVXNlcl0gVGhlIHR5cGUgb2YgYXBwbGljYXRpb25zIHRvIGxpc3RcbiAqL1xuXG4vKipcbiAqIExpc3QgYXBwbGljYXRpb25zIGluc3RhbGxlZCBvbiB0aGUgcmVhbCBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7TGlzdEFwcHNPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gQSBsaXN0IG9mIGFwcHMsIHdoZXJlIGVhY2ggaXRlbSBpcyBhIG1hcCB3aGVyZSBrZXlzIGFyZVxuICogYnVuZGxlIGlkZW50aWZpZXJzIGFuZCB2YWx1ZXMgYXJlIG1hcHMgb2YgcGxhdGZvcm0tc3BlY2lmaWMgYXBwIHByb3BlcnRpZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RBcHBzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGlzdEFwcHMgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoYFRoaXMgZXh0ZW5zaW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHJlYWwgZGV2aWNlc2ApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGFwcGxpY2F0aW9uVHlwZSA9ICdVc2VyJyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSh0aGlzLm9wdHMuZGV2aWNlLnVkaWQpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBzZXJ2aWNlLmxpc3RBcHBsaWNhdGlvbnMoe2FwcGxpY2F0aW9uVHlwZX0pO1xuICB9IGZpbmFsbHkge1xuICAgIHNlcnZpY2UuY2xvc2UoKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOztBQUVBLFNBQVNDLGNBQVQsQ0FBeUJDLElBQUksR0FBRyxFQUFoQyxFQUFvQ0MsT0FBTyxHQUFHLEVBQTlDLEVBQWtEO0VBQ2hELEtBQUssTUFBTUMsR0FBWCxJQUFrQkQsT0FBbEIsRUFBMkI7SUFDekIsSUFBSSxDQUFDRSxlQUFBLENBQUVDLFFBQUYsQ0FBV0osSUFBSSxDQUFDRSxHQUFELENBQWYsQ0FBRCxJQUEwQkMsZUFBQSxDQUFFRSxPQUFGLENBQVVMLElBQUksQ0FBQ0UsR0FBRCxDQUFkLENBQTlCLEVBQW9EO01BQ2xELE1BQU0sSUFBSUksY0FBQSxDQUFPQyxvQkFBWCxDQUNILElBQUdMLEdBQUksd0NBQXVDRixJQUFJLENBQUNFLEdBQUQsQ0FBTSxvQkFEckQsQ0FBTjtJQUdEO0VBQ0Y7O0VBQ0QsT0FBT0YsSUFBUDtBQUNEOztBQUVERixRQUFRLENBQUNVLGdCQUFU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
@@ -11,7 +11,7 @@ require("source-map-support/register");
11
11
 
12
12
  var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
- var _support = require("@appium/support");
14
+ var _support = require("appium/support");
15
15
 
16
16
  const commands = {};
17
17
  exports.commands = commands;
@@ -76,4 +76,4 @@ var _default = commands;
76
76
  exports.default = _default;require('source-map-support').install();
77
77
 
78
78
 
79
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcGVhcmFuY2UuanMiLCJuYW1lcyI6WyJjb21tYW5kcyIsIm1vYmlsZVNldEFwcGVhcmFuY2UiLCJvcHRzIiwic3R5bGUiLCJpbmNsdWRlcyIsIl8iLCJ0b0xvd2VyIiwiRXJyb3IiLCJ1dGlsIiwiY29tcGFyZVZlcnNpb25zIiwicGxhdGZvcm1WZXJzaW9uIiwiaXNTaW11bGF0b3IiLCJkZXZpY2UiLCJzZXRBcHBlYXJhbmNlIiwiZSIsImxvZyIsImRlYnVnIiwic3RhY2siLCJwcm94eUNvbW1hbmQiLCJuYW1lIiwibW9iaWxlU2lyaUNvbW1hbmQiLCJ0ZXh0IiwibW9iaWxlR2V0QXBwZWFyYW5jZSIsImdldEFwcGVhcmFuY2UiLCJpZ24iLCJ1c2VySW50ZXJmYWNlU3R5bGUiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvY29tbWFuZHMvYXBwZWFyYW5jZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXRBcHBlYXJhbmNlT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdHlsZSAtIEN1cnJlbnRseSB0d28gc3R5bGVzIGFyZSBzdXBwb3J0ZWQ6XG4gKiAtIGRhcmtcbiAqIC0gbGlnaHRcbiAqL1xuXG4vKipcbiAqIFNldCB0aGUgZGV2aWNlJ3MgVUkgYXBwZWFyYW5jZSBzdHlsZVxuICpcbiAqIEBzaW5jZSBpT1MgMTIuMFxuICogQHBhcmFtIHtTZXRBcHBlYXJhbmNlT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBjdXJyZW50IHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgVUlcbiAqIGFwcGVhcmFuY2UgY2hhbmdlc1xuICovXG5jb21tYW5kcy5tb2JpbGVTZXRBcHBlYXJhbmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2V0QXBwZWFyYW5jZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBzdHlsZSxcbiAgfSA9IG9wdHM7XG4gIGlmICghWydsaWdodCcsICdkYXJrJ10uaW5jbHVkZXMoXy50b0xvd2VyKHN0eWxlKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnc3R5bGUnIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGVxdWFsIGVpdGhlciAnbGlnaHQnIG9yICdkYXJrJ2ApO1xuICB9XG4gIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICcxMi4wJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5naW5nIGFwcGVhcmFuY2UgaXMgb25seSBzdXBwb3J0ZWQgc2luY2UgaU9TIDEyJyk7XG4gIH1cblxuICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB2b2lkIChhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNldEFwcGVhcmFuY2Uoc3R5bGUpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlLnN0YWNrKTtcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gdm9pZCAoYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvZGV2aWNlL2FwcGVhcmFuY2UnLCAnUE9TVCcsIHtuYW1lOiBzdHlsZX0pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRoaXMubG9nLmRlYnVnKGUuc3RhY2spO1xuICB9XG4gIC8vIEZhbGwgYmFjayB0byB0aGUgdWdseSBTaXJpIHdvcmthcm91bmQgaWYgdGhlIGN1cnJlbnQgU0RLIGlzIHRvbyBvbGRcbiAgYXdhaXQgdGhpcy5tb2JpbGVTaXJpQ29tbWFuZCh7XG4gICAgdGV4dDogYFR1cm4gJHtfLnRvTG93ZXIoc3R5bGUpID09PSAnZGFyaycgPyAnb24nIDogJ29mZid9IGRhcmsgbW9kZWAsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBcHBlYXJhbmNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3R5bGUgLSBUaGUgZGV2aWNlJ3MgVUkgYXBwZWFyYW5jZSB2YWx1ZS5cbiAqIFRoaXMgY291bGQgYmUgb25lIG9mOlxuICogLSBgbGlnaHRgXG4gKiAtIGBkYXJrYFxuICogLSBgdW5rbm93bmBcbiAqIC0gYHVuc3VwcG9ydGVkYFxuICovXG5cbi8qKlxuICogR2V0IHRoZSBkZXZpY2UncyBVSSBhcHBlYXJhbmNlIHN0eWxlLlxuICpcbiAqIEBzaW5jZSBYY29kZSBTREsgMTFcbiAqIEByZXR1cm5zIHtBcHBlYXJhbmNlfVxuICovXG5jb21tYW5kcy5tb2JpbGVHZXRBcHBlYXJhbmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0QXBwZWFyYW5jZSAoKSB7XG4gIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICcxMi4wJykpIHtcbiAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkJztcbiAgfVxuXG4gIGxldCBzdHlsZTtcbiAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgIHRyeSB7XG4gICAgICBzdHlsZSA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZ2V0QXBwZWFyYW5jZSgpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICBpZiAoIXN0eWxlKSB7XG4gICAgc3R5bGUgPSAoYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvZGV2aWNlL2luZm8nLCAnR0VUJykpLnVzZXJJbnRlcmZhY2VTdHlsZSB8fCAndW5rbm93bic7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdHlsZSxcbiAgfTtcbn07XG5cblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUdBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjs7O0FBa0JBQSxRQUFRLENBQUNDLG1CQUFULEdBQStCLGVBQWVBLG1CQUFmLENBQW9DQyxJQUFJLEdBQUcsRUFBM0MsRUFBK0M7RUFDNUUsTUFBTTtJQUNKQztFQURJLElBRUZELElBRko7O0VBR0EsSUFBSSxDQUFDLENBQUMsT0FBRCxFQUFVLE1BQVYsRUFBa0JFLFFBQWxCLENBQTJCQyxlQUFBLENBQUVDLE9BQUYsQ0FBVUgsS0FBVixDQUEzQixDQUFMLEVBQW1EO0lBQ2pELE1BQU0sSUFBSUksS0FBSixDQUFXLGlFQUFYLENBQU47RUFDRDs7RUFDRCxJQUFJQyxhQUFBLENBQUtDLGVBQUwsQ0FBcUIsS0FBS1AsSUFBTCxDQUFVUSxlQUEvQixFQUFnRCxHQUFoRCxFQUFxRCxNQUFyRCxDQUFKLEVBQWtFO0lBQ2hFLE1BQU0sSUFBSUgsS0FBSixDQUFVLG9EQUFWLENBQU47RUFDRDs7RUFFRCxJQUFJLEtBQUtJLFdBQUwsRUFBSixFQUF3QjtJQUN0QixJQUFJO01BQ0YsT0FBTyxNQUFNLE1BQU0sS0FBS1QsSUFBTCxDQUFVVSxNQUFWLENBQWlCQyxhQUFqQixDQUErQlYsS0FBL0IsQ0FBWixDQUFQO0lBQ0QsQ0FGRCxDQUVFLE9BQU9XLENBQVAsRUFBVTtNQUNWLEtBQUtDLEdBQUwsQ0FBU0MsS0FBVCxDQUFlRixDQUFDLENBQUNHLEtBQWpCO0lBQ0Q7RUFDRjs7RUFDRCxJQUFJO0lBQ0YsT0FBTyxNQUFNLE1BQU0sS0FBS0MsWUFBTCxDQUFrQix3QkFBbEIsRUFBNEMsTUFBNUMsRUFBb0Q7TUFBQ0MsSUFBSSxFQUFFaEI7SUFBUCxDQUFwRCxDQUFaLENBQVA7RUFDRCxDQUZELENBRUUsT0FBT1csQ0FBUCxFQUFVO0lBQ1YsS0FBS0MsR0FBTCxDQUFTQyxLQUFULENBQWVGLENBQUMsQ0FBQ0csS0FBakI7RUFDRDs7RUFFRCxNQUFNLEtBQUtHLGlCQUFMLENBQXVCO0lBQzNCQyxJQUFJLEVBQUcsUUFBT2hCLGVBQUEsQ0FBRUMsT0FBRixDQUFVSCxLQUFWLE1BQXFCLE1BQXJCLEdBQThCLElBQTlCLEdBQXFDLEtBQU07RUFEOUIsQ0FBdkIsQ0FBTjtBQUdELENBM0JEOztBQTZDQUgsUUFBUSxDQUFDc0IsbUJBQVQsR0FBK0IsZUFBZUEsbUJBQWYsR0FBc0M7RUFDbkUsSUFBSWQsYUFBQSxDQUFLQyxlQUFMLENBQXFCLEtBQUtQLElBQUwsQ0FBVVEsZUFBL0IsRUFBZ0QsR0FBaEQsRUFBcUQsTUFBckQsQ0FBSixFQUFrRTtJQUNoRSxPQUFPLGFBQVA7RUFDRDs7RUFFRCxJQUFJUCxLQUFKOztFQUNBLElBQUksS0FBS1EsV0FBTCxFQUFKLEVBQXdCO0lBQ3RCLElBQUk7TUFDRlIsS0FBSyxHQUFHLE1BQU0sS0FBS0QsSUFBTCxDQUFVVSxNQUFWLENBQWlCVyxhQUFqQixFQUFkO0lBQ0QsQ0FGRCxDQUVFLE9BQU9DLEdBQVAsRUFBWSxDQUFFO0VBQ2pCOztFQUNELElBQUksQ0FBQ3JCLEtBQUwsRUFBWTtJQUNWQSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEtBQUtlLFlBQUwsQ0FBa0Isa0JBQWxCLEVBQXNDLEtBQXRDLENBQVAsRUFBcURPLGtCQUFyRCxJQUEyRSxTQUFuRjtFQUNEOztFQUNELE9BQU87SUFDTHRCO0VBREssQ0FBUDtBQUdELENBakJEOztlQXFCZUgsUSJ9
79
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcGVhcmFuY2UuanMiLCJuYW1lcyI6WyJjb21tYW5kcyIsIm1vYmlsZVNldEFwcGVhcmFuY2UiLCJvcHRzIiwic3R5bGUiLCJpbmNsdWRlcyIsIl8iLCJ0b0xvd2VyIiwiRXJyb3IiLCJ1dGlsIiwiY29tcGFyZVZlcnNpb25zIiwicGxhdGZvcm1WZXJzaW9uIiwiaXNTaW11bGF0b3IiLCJkZXZpY2UiLCJzZXRBcHBlYXJhbmNlIiwiZSIsImxvZyIsImRlYnVnIiwic3RhY2siLCJwcm94eUNvbW1hbmQiLCJuYW1lIiwibW9iaWxlU2lyaUNvbW1hbmQiLCJ0ZXh0IiwibW9iaWxlR2V0QXBwZWFyYW5jZSIsImdldEFwcGVhcmFuY2UiLCJpZ24iLCJ1c2VySW50ZXJmYWNlU3R5bGUiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvY29tbWFuZHMvYXBwZWFyYW5jZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNldEFwcGVhcmFuY2VPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0eWxlIC0gQ3VycmVudGx5IHR3byBzdHlsZXMgYXJlIHN1cHBvcnRlZDpcbiAqIC0gZGFya1xuICogLSBsaWdodFxuICovXG5cbi8qKlxuICogU2V0IHRoZSBkZXZpY2UncyBVSSBhcHBlYXJhbmNlIHN0eWxlXG4gKlxuICogQHNpbmNlIGlPUyAxMi4wXG4gKiBAcGFyYW0ge1NldEFwcGVhcmFuY2VPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGN1cnJlbnQgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBVSVxuICogYXBwZWFyYW5jZSBjaGFuZ2VzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVNldEFwcGVhcmFuY2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZXRBcHBlYXJhbmNlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHN0eWxlLFxuICB9ID0gb3B0cztcbiAgaWYgKCFbJ2xpZ2h0JywgJ2RhcmsnXS5pbmNsdWRlcyhfLnRvTG93ZXIoc3R5bGUpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlICdzdHlsZScgdmFsdWUgaXMgZXhwZWN0ZWQgdG8gZXF1YWwgZWl0aGVyICdsaWdodCcgb3IgJ2RhcmsnYCk7XG4gIH1cbiAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzEyLjAnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbmdpbmcgYXBwZWFyYW5jZSBpcyBvbmx5IHN1cHBvcnRlZCBzaW5jZSBpT1MgMTInKTtcbiAgfVxuXG4gIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHZvaWQgKGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2V0QXBwZWFyYW5jZShzdHlsZSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUuc3RhY2spO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHJldHVybiB2b2lkIChhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kZXZpY2UvYXBwZWFyYW5jZScsICdQT1NUJywge25hbWU6IHN0eWxlfSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoZS5zdGFjayk7XG4gIH1cbiAgLy8gRmFsbCBiYWNrIHRvIHRoZSB1Z2x5IFNpcmkgd29ya2Fyb3VuZCBpZiB0aGUgY3VycmVudCBTREsgaXMgdG9vIG9sZFxuICBhd2FpdCB0aGlzLm1vYmlsZVNpcmlDb21tYW5kKHtcbiAgICB0ZXh0OiBgVHVybiAke18udG9Mb3dlcihzdHlsZSkgPT09ICdkYXJrJyA/ICdvbicgOiAnb2ZmJ30gZGFyayBtb2RlYCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwcGVhcmFuY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdHlsZSAtIFRoZSBkZXZpY2UncyBVSSBhcHBlYXJhbmNlIHZhbHVlLlxuICogVGhpcyBjb3VsZCBiZSBvbmUgb2Y6XG4gKiAtIGBsaWdodGBcbiAqIC0gYGRhcmtgXG4gKiAtIGB1bmtub3duYFxuICogLSBgdW5zdXBwb3J0ZWRgXG4gKi9cblxuLyoqXG4gKiBHZXQgdGhlIGRldmljZSdzIFVJIGFwcGVhcmFuY2Ugc3R5bGUuXG4gKlxuICogQHNpbmNlIFhjb2RlIFNESyAxMVxuICogQHJldHVybnMge0FwcGVhcmFuY2V9XG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldEFwcGVhcmFuY2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRBcHBlYXJhbmNlICgpIHtcbiAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzEyLjAnKSkge1xuICAgIHJldHVybiAndW5zdXBwb3J0ZWQnO1xuICB9XG5cbiAgbGV0IHN0eWxlO1xuICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN0eWxlID0gYXdhaXQgdGhpcy5vcHRzLmRldmljZS5nZXRBcHBlYXJhbmNlKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG4gIGlmICghc3R5bGUpIHtcbiAgICBzdHlsZSA9IChhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9kZXZpY2UvaW5mbycsICdHRVQnKSkudXNlckludGVyZmFjZVN0eWxlIHx8ICd1bmtub3duJztcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0eWxlLFxuICB9O1xufTtcblxuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0EsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOzs7QUFrQkFBLFFBQVEsQ0FBQ0MsbUJBQVQsR0FBK0IsZUFBZUEsbUJBQWYsQ0FBb0NDLElBQUksR0FBRyxFQUEzQyxFQUErQztFQUM1RSxNQUFNO0lBQ0pDO0VBREksSUFFRkQsSUFGSjs7RUFHQSxJQUFJLENBQUMsQ0FBQyxPQUFELEVBQVUsTUFBVixFQUFrQkUsUUFBbEIsQ0FBMkJDLGVBQUEsQ0FBRUMsT0FBRixDQUFVSCxLQUFWLENBQTNCLENBQUwsRUFBbUQ7SUFDakQsTUFBTSxJQUFJSSxLQUFKLENBQVcsaUVBQVgsQ0FBTjtFQUNEOztFQUNELElBQUlDLGFBQUEsQ0FBS0MsZUFBTCxDQUFxQixLQUFLUCxJQUFMLENBQVVRLGVBQS9CLEVBQWdELEdBQWhELEVBQXFELE1BQXJELENBQUosRUFBa0U7SUFDaEUsTUFBTSxJQUFJSCxLQUFKLENBQVUsb0RBQVYsQ0FBTjtFQUNEOztFQUVELElBQUksS0FBS0ksV0FBTCxFQUFKLEVBQXdCO0lBQ3RCLElBQUk7TUFDRixPQUFPLE1BQU0sTUFBTSxLQUFLVCxJQUFMLENBQVVVLE1BQVYsQ0FBaUJDLGFBQWpCLENBQStCVixLQUEvQixDQUFaLENBQVA7SUFDRCxDQUZELENBRUUsT0FBT1csQ0FBUCxFQUFVO01BQ1YsS0FBS0MsR0FBTCxDQUFTQyxLQUFULENBQWVGLENBQUMsQ0FBQ0csS0FBakI7SUFDRDtFQUNGOztFQUNELElBQUk7SUFDRixPQUFPLE1BQU0sTUFBTSxLQUFLQyxZQUFMLENBQWtCLHdCQUFsQixFQUE0QyxNQUE1QyxFQUFvRDtNQUFDQyxJQUFJLEVBQUVoQjtJQUFQLENBQXBELENBQVosQ0FBUDtFQUNELENBRkQsQ0FFRSxPQUFPVyxDQUFQLEVBQVU7SUFDVixLQUFLQyxHQUFMLENBQVNDLEtBQVQsQ0FBZUYsQ0FBQyxDQUFDRyxLQUFqQjtFQUNEOztFQUVELE1BQU0sS0FBS0csaUJBQUwsQ0FBdUI7SUFDM0JDLElBQUksRUFBRyxRQUFPaEIsZUFBQSxDQUFFQyxPQUFGLENBQVVILEtBQVYsTUFBcUIsTUFBckIsR0FBOEIsSUFBOUIsR0FBcUMsS0FBTTtFQUQ5QixDQUF2QixDQUFOO0FBR0QsQ0EzQkQ7O0FBNkNBSCxRQUFRLENBQUNzQixtQkFBVCxHQUErQixlQUFlQSxtQkFBZixHQUFzQztFQUNuRSxJQUFJZCxhQUFBLENBQUtDLGVBQUwsQ0FBcUIsS0FBS1AsSUFBTCxDQUFVUSxlQUEvQixFQUFnRCxHQUFoRCxFQUFxRCxNQUFyRCxDQUFKLEVBQWtFO0lBQ2hFLE9BQU8sYUFBUDtFQUNEOztFQUVELElBQUlQLEtBQUo7O0VBQ0EsSUFBSSxLQUFLUSxXQUFMLEVBQUosRUFBd0I7SUFDdEIsSUFBSTtNQUNGUixLQUFLLEdBQUcsTUFBTSxLQUFLRCxJQUFMLENBQVVVLE1BQVYsQ0FBaUJXLGFBQWpCLEVBQWQ7SUFDRCxDQUZELENBRUUsT0FBT0MsR0FBUCxFQUFZLENBQUU7RUFDakI7O0VBQ0QsSUFBSSxDQUFDckIsS0FBTCxFQUFZO0lBQ1ZBLEtBQUssR0FBRyxDQUFDLE1BQU0sS0FBS2UsWUFBTCxDQUFrQixrQkFBbEIsRUFBc0MsS0FBdEMsQ0FBUCxFQUFxRE8sa0JBQXJELElBQTJFLFNBQW5GO0VBQ0Q7O0VBQ0QsT0FBTztJQUNMdEI7RUFESyxDQUFQO0FBR0QsQ0FqQkQ7O2VBcUJlSCxRIn0=
@@ -12,7 +12,7 @@ require("source-map-support/register");
12
12
 
13
13
  var _lodash = _interopRequireDefault(require("lodash"));
14
14
 
15
- var _support = require("@appium/support");
15
+ var _support = require("appium/support");
16
16
 
17
17
  var _asyncbox = require("asyncbox");
18
18
 
@@ -396,4 +396,4 @@ var _default = extensions;
396
396
  exports.default = _default;require('source-map-support').install();
397
397
 
398
398
 
399
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2NlcnRpZmljYXRlLmpzIiwibmFtZXMiOlsiZXh0ZW5zaW9ucyIsImNvbW1hbmRzIiwiQ09ORklHX0VYVEVOU0lPTiIsIkhPU1RfUE9SVF9SQU5HRSIsIlRNUFNFUlZFUl9TVEFSVFVQX1RJTUVPVVQiLCJTZXR0aW5ncyIsIkdlbmVyYWwiLCJ0eXBlIiwidmFsdWUiLCJQcm9maWxlIiwiQWJvdXQiLCJDZXJ0aWZpY2F0ZV9UcnVzdF9TZXR0aW5ncyIsIkJ1dHRvbiIsIkluc3RhbGwiLCJBbGxvdyIsIkRvbmUiLCJSZXR1cm5fdG9fU2V0dGluZ3MiLCJBbGVydCIsImV4dHJhY3RDb21tb25OYW1lIiwiY2VydEJ1ZmZlciIsInRlbXBDZXJ0IiwidGVtcERpciIsIm9wZW4iLCJwcmVmaXgiLCJzdWZmaXgiLCJmcyIsIndyaXRlRmlsZSIsInBhdGgiLCJzdGRvdXQiLCJleGVjIiwicGFyc2VDb21tb25OYW1lIiwiZXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwicmltcmFmIiwiTElCUkVfU1NMX1BBVFRFUk4iLCJPUEVOX1NTTF9QQVRURVJOIiwic3RyaW5nQ2VydGlmaWNhdGUiLCJyZXN1bHQiLCJyZWR1Y2UiLCJhY2MiLCJyIiwibWF0Y2giLCJ0b01vYmlsZUNvbmZpZyIsImNvbW1vbk5hbWUiLCJnZXRVVUlEIiwidXRpbCIsInV1aWRWNCIsInRvVXBwZXJDYXNlIiwiY29udGVudFV1aWQiLCJQYXlsb2FkQ29udGVudCIsIlBheWxvYWRDZXJ0aWZpY2F0ZUZpbGVOYW1lIiwiUGF5bG9hZERlc2NyaXB0aW9uIiwiUGF5bG9hZERpc3BsYXlOYW1lIiwiUGF5bG9hZElkZW50aWZpZXIiLCJQYXlsb2FkVHlwZSIsIlBheWxvYWRVVUlEIiwiUGF5bG9hZFZlcnNpb24iLCJvcyIsImhvc3RuYW1lIiwic3BsaXQiLCJQYXlsb2FkUmVtb3ZhbERpc2FsbG93ZWQiLCJjbGlja0VsZW1lbnQiLCJkcml2ZXIiLCJsb2NhdG9yIiwib3B0aW9ucyIsImVsZW1lbnQiLCJ0aW1lb3V0Iiwic2tpcElmSW52aXNpYmxlIiwibG9va3VwRGVsYXkiLCJyZXRyeUludGVydmFsIiwiZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzIiwiSlNPTiIsInN0cmluZ2lmeSIsIm5hdGl2ZUNsaWNrIiwiaW5zdGFsbFByZTEyMkNlcnRpZmljYXRlIiwiQiIsImRlbGF5IiwidHJ1c3RDZXJ0aWZpY2F0ZUluUHJlZmVyZW5jZXMiLCJuYW1lIiwic3dpdGNoTG9jYXRvciIsInJldHJ5IiwibW9iaWxlU3dpcGUiLCJkaXJlY3Rpb24iLCJwb3N0QWNjZXB0QWxlcnQiLCJpbnN0YWxsUG9zdDEyMkNlcnRpZmljYXRlIiwiYWN0aXZhdGVBcHAiLCJpc0NlcnRGb3VuZCIsInN3aXBlTnVtIiwibW9iaWxlSW5zdGFsbENlcnRpZmljYXRlIiwib3B0cyIsImNvbnRlbnQiLCJpc1Jvb3QiLCJfIiwiaXNFbXB0eSIsImlzU2ltdWxhdG9yIiwibWV0aG9kTmFtZSIsImRldmljZSIsInNpbWN0bCIsIkJ1ZmZlciIsImZyb20iLCJ0b1N0cmluZyIsInJhdyIsImUiLCJsb2ciLCJkZWJ1ZyIsImluZm8iLCJjbGllbnQiLCJQeWlkZXZpY2UiLCJ1ZGlkIiwiYXNzZXJ0RXhpc3RzIiwiaW5zdGFsbFByb2ZpbGUiLCJwYXlsb2FkIiwidG1wUm9vdCIsIm9wZW5EaXIiLCJ0bXBQb3J0IiwiZmluZEFQb3J0Tm90SW5Vc2UiLCJjb25maWdOYW1lIiwiY29uZmlnUGF0aCIsInJlc29sdmUiLCJ0bXBTZXJ2ZXIiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwicmVzIiwiY29uZmlnRmlsZSIsInJlYWRGaWxlIiwiZW5kIiwiY24iLCJtb2JpbGVDb25maWciLCJwbGlzdCIsInVwZGF0ZVBsaXN0RmlsZSIsImhvc3QiLCJjZXJ0VXJsIiwibGlzdGVuIiwid2FpdEZvckNvbmRpdGlvbiIsImNoZWNrUG9ydFN0YXR1cyIsImlnbiIsIndhaXRNcyIsImludGVydmFsTXMiLCJpc1JlYWxEZXZpY2UiLCJwcm94eUNvbW1hbmQiLCJ1cmwiLCJpc1dlYkNvbnRleHQiLCJzZXRVcmwiLCJvcGVuVXJsIiwiaXNDZXJ0QWxyZWFkeUluc3RhbGxlZCIsImNvbXBhcmVWZXJzaW9ucyIsInBsYXRmb3JtVmVyc2lvbiIsImJ1bmRsZUlkIiwid2FybiIsInRvSW5NZW1vcnlCYXNlNjQiLCJjbG9zZSIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jZXJ0aWZpY2F0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMsIHBsaXN0LCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIHJldHJ5LCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlLCBjaGVja1BvcnRTdGF0dXMgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgUHlpZGV2aWNlIGZyb20gJy4uL3B5LWlvcy1kZXZpY2UtY2xpZW50JztcblxubGV0IGV4dGVuc2lvbnMgPSB7fSwgY29tbWFuZHMgPSB7fTtcblxuY29uc3QgQ09ORklHX0VYVEVOU0lPTiA9ICdtb2JpbGVjb25maWcnO1xuY29uc3QgSE9TVF9QT1JUX1JBTkdFID0gWzM4MjAwLCAzODI5OV07XG5jb25zdCBUTVBTRVJWRVJfU1RBUlRVUF9USU1FT1VUID0gNTAwMDtcbmNvbnN0IFNldHRpbmdzID0ge1xuICBHZW5lcmFsOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnR2VuZXJhbCcsXG4gIH0sXG4gIFByb2ZpbGU6IHtcbiAgICB0eXBlOiAnLWlvcyBwcmVkaWNhdGUgc3RyaW5nJyxcbiAgICB2YWx1ZTogYG5hbWUgQkVHSU5TV0lUSCAnUHJvZmlsZSdgLFxuICB9LFxuICBBYm91dDoge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ0Fib3V0JyxcbiAgfSxcbiAgQ2VydGlmaWNhdGVfVHJ1c3RfU2V0dGluZ3M6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdDZXJ0aWZpY2F0ZSBUcnVzdCBTZXR0aW5ncycsXG4gIH0sXG59O1xuY29uc3QgQnV0dG9uID0ge1xuICBJbnN0YWxsOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnSW5zdGFsbCcsXG4gIH0sXG4gIEFsbG93OiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnQWxsb3cnLFxuICB9LFxuICBEb25lOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnRG9uZScsXG4gIH0sXG4gIFJldHVybl90b19TZXR0aW5nczoge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ1JldHVybiB0byBTZXR0aW5ncycsXG4gIH0sXG59O1xuY29uc3QgQWxlcnQgPSB7XG4gIEluc3RhbGw6IHtcbiAgICB0eXBlOiAnLWlvcyBjbGFzcyBjaGFpbicsXG4gICAgdmFsdWU6ICcqKi9YQ1VJRWxlbWVudFR5cGVBbnlbYHR5cGUgPT0gXFwnWENVSUVsZW1lbnRUeXBlQWxlcnRcXCcgT1IgdHlwZSA9PSBcXCdYQ1VJRWxlbWVudFR5cGVTaGVldFxcJ2BdLyoqL1hDVUlFbGVtZW50VHlwZUJ1dHRvbltgbGFiZWwgPT0gXFwnSW5zdGFsbFxcJ2BdJyxcbiAgfSxcbn07XG5cblxuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdENvbW1vbk5hbWUgKGNlcnRCdWZmZXIpIHtcbiAgY29uc3QgdGVtcENlcnQgPSBhd2FpdCB0ZW1wRGlyLm9wZW4oe1xuICAgIHByZWZpeDogJ2NlcnQnLFxuICAgIHN1ZmZpeDogJy5jZXInXG4gIH0pO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0ZW1wQ2VydC5wYXRoLCBjZXJ0QnVmZmVyKTtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ29wZW5zc2wnLCBbJ3g1MDknLCAnLW5vb3V0JywgJy1zdWJqZWN0JywgJy1pbicsIHRlbXBDZXJ0LnBhdGhdKTtcbiAgICByZXR1cm4gcGFyc2VDb21tb25OYW1lKHN0ZG91dCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIGNvbW1vbiBuYW1lIHZhbHVlIGZyb20gdGhlIGNlcnRpZmljYXRlLiBJcyBpdCB2YWxpZCBhbmQgYmFzZTY0LWVuY29kZWQ/IGAgK1xuICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRlbXBDZXJ0LnBhdGgpO1xuICB9XG59XG5cbmNvbnN0IExJQlJFX1NTTF9QQVRURVJOID0gL1xcL0NOPShbXlxcL10rKS87IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbmNvbnN0IE9QRU5fU1NMX1BBVFRFUk4gPSAvLFxcc0NOXFxzPVxccyhbXixdKykvO1xuXG5mdW5jdGlvbiBwYXJzZUNvbW1vbk5hbWUgKHN0cmluZ0NlcnRpZmljYXRlKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtMSUJSRV9TU0xfUEFUVEVSTiwgT1BFTl9TU0xfUEFUVEVSTl0ucmVkdWNlKChhY2MsIHIpID0+IHtcbiAgICBpZiAoYWNjKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaCA9IHIuZXhlYyhzdHJpbmdDZXJ0aWZpY2F0ZSk7XG4gICAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdO1xuICB9LCBudWxsKTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIGNvbW1vbiBuYW1lIHZhbHVlIGluICcke3N0cmluZ0NlcnRpZmljYXRlfScgb3V0cHV0YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgQXBwbGUncyBvdmVyLXRoZS1haXIgY29uZmlndXJhdGlvbiBwcm9maWxlXG4gKiBmb3IgY2VydGlmaWNhdGUgZGVwbG95bWVudCBiYXNlZCBvbiB0aGUgZ2l2ZW4gUEVNIGNlcnRpZmljYXRlIGNvbnRlbnQuXG4gKiBSZWFkIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L2NvbnRlbnQvZG9jdW1lbnRhdGlvbi9OZXR3b3JraW5nSW50ZXJuZXQvQ29uY2VwdHVhbC9pUGhvbmVPVEFDb25maWd1cmF0aW9uL0ludHJvZHVjdGlvbi9JbnRyb2R1Y3Rpb24uaHRtbFxuICogZm9yIG1vcmUgZGV0YWlscyBvbiBzdWNoIHByb2ZpbGVzLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBjZXJ0QnVmZmVyIC0gVGhlIGFjdHVhbCBjb250ZW50IG9mIFBFTSBjZXJ0aWZpY2F0ZSBlbmNvZGVkIGludG8gTm9kZUpTIGJ1ZmZlclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbW1vbk5hbWUgLSBDZXJ0aWZpY2F0ZSdzIGNvbW1vbiBuYW1lXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZW5jb2RlZCBzdHJ1Y3R1cmUgb2YgdGhlIGdpdmVuIGNlcnRpZmljYXRlLCB3aGljaCBpcyByZWFkeSB0byBiZSBwYXNzZWRcbiAqIGFzIGFuIGFyZ3VtZW50IHRvIHBsaXN0IGJ1aWxkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUgY2Fubm90IGJlIHBhcnNlZFxuICovXG5mdW5jdGlvbiB0b01vYmlsZUNvbmZpZyAoY2VydEJ1ZmZlciwgY29tbW9uTmFtZSkge1xuICBjb25zdCBnZXRVVUlEID0gKCkgPT4gdXRpbC51dWlkVjQoKS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBjb250ZW50VXVpZCA9IGdldFVVSUQoKTtcbiAgcmV0dXJuIHtcbiAgICBQYXlsb2FkQ29udGVudDogW3tcbiAgICAgIFBheWxvYWRDZXJ0aWZpY2F0ZUZpbGVOYW1lOiBgJHtjb21tb25OYW1lfS5jZXJgLFxuICAgICAgUGF5bG9hZENvbnRlbnQ6IGNlcnRCdWZmZXIsXG4gICAgICBQYXlsb2FkRGVzY3JpcHRpb246ICdBZGRzIGEgQ0Egcm9vdCBjZXJ0aWZpY2F0ZScsXG4gICAgICBQYXlsb2FkRGlzcGxheU5hbWU6IGNvbW1vbk5hbWUsXG4gICAgICBQYXlsb2FkSWRlbnRpZmllcjogYGNvbS5hcHBsZS5zZWN1cml0eS5yb290LiR7Y29udGVudFV1aWR9YCxcbiAgICAgIFBheWxvYWRUeXBlOiAnY29tLmFwcGxlLnNlY3VyaXR5LnJvb3QnLFxuICAgICAgUGF5bG9hZFVVSUQ6IGNvbnRlbnRVdWlkLFxuICAgICAgUGF5bG9hZFZlcnNpb246IDFcbiAgICB9XSxcbiAgICBQYXlsb2FkRGlzcGxheU5hbWU6IGNvbW1vbk5hbWUsXG4gICAgUGF5bG9hZElkZW50aWZpZXI6IGAke29zLmhvc3RuYW1lKCkuc3BsaXQoJy4nKVswXX0uJHtnZXRVVUlEKCl9YCxcbiAgICBQYXlsb2FkUmVtb3ZhbERpc2FsbG93ZWQ6IGZhbHNlLFxuICAgIFBheWxvYWRUeXBlOiAnQ29uZmlndXJhdGlvbicsXG4gICAgUGF5bG9hZFVVSUQ6IGdldFVVSUQoKSxcbiAgICBQYXlsb2FkVmVyc2lvbjogMVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGlja0VsZW1lbnQgKGRyaXZlciwgbG9jYXRvciwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCBlbGVtZW50ID0gbnVsbDtcbiAgY29uc3Qge1xuICAgIHRpbWVvdXQgPSA1MDAwLFxuICAgIHNraXBJZkludmlzaWJsZSA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBsb29rdXBEZWxheSA9IDUwMDtcbiAgdHJ5IHtcbiAgICBlbGVtZW50ID0gYXdhaXQgcmV0cnlJbnRlcnZhbCh0aW1lb3V0IDwgbG9va3VwRGVsYXkgPyAxIDogdGltZW91dCAvIGxvb2t1cERlbGF5LCBsb29rdXBEZWxheSxcbiAgICAgICgpID0+IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMobG9jYXRvci50eXBlLCBsb2NhdG9yLnZhbHVlLCBmYWxzZSlcbiAgICApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoc2tpcElmSW52aXNpYmxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgJHtKU09OLnN0cmluZ2lmeShsb2NhdG9yKX0gd2l0aGluICR7dGltZW91dH1tcyB0aW1lb3V0YCk7XG4gIH1cbiAgYXdhaXQgZHJpdmVyLm5hdGl2ZUNsaWNrKGVsZW1lbnQpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFByZTEyMkNlcnRpZmljYXRlIChkcml2ZXIpIHtcbiAgLy8gQWNjZXB0IFNhZmFyaSBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uQWxsb3csIHtcbiAgICAvLyBjZXJ0aWZpY2F0ZSBsb2FkIG1pZ2h0IHRha2Ugc29tZSB0aW1lIG9uIHNsb3cgbWFjaGluZXNcbiAgICB0aW1lb3V0OiAxNTAwMCxcbiAgfSk7XG4gIC8vIFdhaXQgdW50aWwgUHJlZmVyZW5jZXMgYXJlIG9wZW5lZFxuICBhd2FpdCBCLmRlbGF5KDIwMDApO1xuXG4gIC8vIEdvIHRocm91Z2ggUHJlZmVyZW5jZXMgd2l6YXJkXG4gIGlmICghYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkluc3RhbGwsIHtcbiAgICBza2lwSWZJbnZpc2libGU6IHRydWUsXG4gIH0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFdlIG5lZWQgdG8gY2xpY2sgSW5zdGFsbCBidXR0b24gb24gdHdvIGRpZmZlcmVudCB0YWJzXG4gIC8vIFRoZSBzZWNvbmQgb25lIGNvbmZpcm1zIHRoZSBwcmV2aW91c1xuICBhd2FpdCBCLmRlbGF5KDE1MDApO1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uSW5zdGFsbCk7XG4gIC8vIEFjY2VwdCBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBBbGVydC5JbnN0YWxsKTtcbiAgLy8gRmluaXNoIGFkZGluZyBjZXJ0aWZpY2F0ZVxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uRG9uZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB0cnVzdENlcnRpZmljYXRlSW5QcmVmZXJlbmNlcyAoZHJpdmVyLCBuYW1lKSB7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkdlbmVyYWwpO1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBTZXR0aW5ncy5BYm91dCk7XG4gIGNvbnN0IHN3aXRjaExvY2F0b3IgPSB7XG4gICAgdHlwZTogJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgIHZhbHVlOiBgKiovWENVSUVsZW1lbnRUeXBlQ2VsbFtcXGBsYWJlbCA9PSAnJHtuYW1lfSdcXGBdLyoqL1hDVUlFbGVtZW50VHlwZVN3aXRjaGAsXG4gIH07XG4gIGF3YWl0IHJldHJ5KDUsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBkcml2ZXIubW9iaWxlU3dpcGUoe1xuICAgICAgZWxlbWVudDogYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnY2xhc3MgbmFtZScsICdYQ1VJRWxlbWVudFR5cGVUYWJsZScsIGZhbHNlKSxcbiAgICAgIGRpcmVjdGlvbjogJ3VwJ1xuICAgIH0pO1xuICAgIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkNlcnRpZmljYXRlX1RydXN0X1NldHRpbmdzLCB7XG4gICAgICB0aW1lb3V0OiA1MDAsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKHN3aXRjaExvY2F0b3IudHlwZSwgc3dpdGNoTG9jYXRvci52YWx1ZSwgZmFsc2UpO1xuICB9KTtcbiAgLy8gT25seSBjbGljayB0aGUgc3dpdGNoIGlmIGl0IGlzIHNldCB0byBPZmZcbiAgaWYgKGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIHtcbiAgICB0eXBlOiBzd2l0Y2hMb2NhdG9yLnR5cGUsXG4gICAgdmFsdWU6IGAke3N3aXRjaExvY2F0b3IudmFsdWV9W1xcYHZhbHVlID09ICcwJ1xcYF1gXG4gIH0sIHtcbiAgICB0aW1lb3V0OiAxMDAwLFxuICAgIHNraXBJZkludmlzaWJsZTogdHJ1ZSxcbiAgfSkpIHtcbiAgICBhd2FpdCBkcml2ZXIucG9zdEFjY2VwdEFsZXJ0KCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFBvc3QxMjJDZXJ0aWZpY2F0ZSAoZHJpdmVyLCBuYW1lKSB7XG4gIC8vIEFjY2VwdCBTYWZhcmkgYWxlcnRcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkFsbG93LCB7XG4gICAgLy8gY2VydGlmaWNhdGUgbG9hZCBtaWdodCB0YWtlIHNvbWUgdGltZSBvbiBzbG93IG1hY2hpbmVzXG4gICAgdGltZW91dDogMTUwMDAsXG4gIH0pO1xuICAvLyBXYWl0IGZvciB0aGUgc2Vjb25kIGFsZXJ0XG4gIGF3YWl0IEIuZGVsYXkoMjAwMCk7XG5cbiAgYXdhaXQgZHJpdmVyLnBvc3RBY2NlcHRBbGVydCgpO1xuICBhd2FpdCBkcml2ZXIuYWN0aXZhdGVBcHAoJ2NvbS5hcHBsZS5QcmVmZXJlbmNlcycpO1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBTZXR0aW5ncy5HZW5lcmFsKTtcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgU2V0dGluZ3MuUHJvZmlsZSk7XG4gIC8vIFNlbGVjdCB0aGUgdGFyZ2V0IGNlcnRcbiAgbGV0IGlzQ2VydEZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IHN3aXBlTnVtID0gMDsgc3dpcGVOdW0gPCA1OyArK3N3aXBlTnVtKSB7XG4gICAgaWYgKGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIHtcbiAgICAgIHR5cGU6ICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICAgIHZhbHVlOiBgKiovWENVSUVsZW1lbnRUeXBlQ2VsbFtcXGBsYWJlbCA9PSAnJHtuYW1lfSdcXGBdYCxcbiAgICB9LCB7XG4gICAgICB0aW1lb3V0OiA1MDAsXG4gICAgICBza2lwSWZJbnZpc2libGU6IHRydWUsXG4gICAgfSkpIHtcbiAgICAgIGlzQ2VydEZvdW5kID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGF3YWl0IGRyaXZlci5tb2JpbGVTd2lwZSh7XG4gICAgICBlbGVtZW50OiBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdjbGFzcyBuYW1lJywgJ1hDVUlFbGVtZW50VHlwZVRhYmxlJywgZmFsc2UpLFxuICAgICAgZGlyZWN0aW9uOiAndXAnXG4gICAgfSk7XG4gIH1cbiAgaWYgKCFpc0NlcnRGb3VuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7bmFtZX0nIGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgY2VydGlmaWNhdGVzIGxpc3RgKTtcbiAgfVxuXG4gIC8vIEluc3RhbGwgb3B0aW9uIGlzIG9ubHkgdmlzaWJsZSBpZiB0aGUgY2VydCBpcyBub3QgaW5zdGFsbGVkIHlldFxuICBpZiAoIWF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5JbnN0YWxsLCB7XG4gICAgc2tpcElmSW52aXNpYmxlOiB0cnVlLFxuICB9KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCBCLmRlbGF5KDE1MDApO1xuICAvLyBDb25maXJtIHVudHJ1c3RlZCBjZXJ0IGluc3RhbGxcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkluc3RhbGwpO1xuICAvLyBBY2NlcHQgYWxlcnRcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQWxlcnQuSW5zdGFsbCk7XG4gIC8vIEZpbmlzaCBhZGRpbmcgY2VydGlmaWNhdGVcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkRvbmUpO1xuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENlcnRpZmljYXRlSW5zdGFsbGF0aW9uT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gY29udGVudCAtIEJhc2U2NC1lbmNvZGVkIGNvbnRlbnQgb2YgdGhlIHB1YmxpYyBjZXJ0aWZpY2F0ZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBjb21tb25OYW1lIC0gQ29tbW9uIG5hbWUgb2YgdGhlIGNlcnRpZmljYXRlLiBJZiB0aGlzIGlzIG5vdCBzZXRcbiAqIHRoZW4gdGhlIHNjcmlwdCB3aWxsIHRyeSB0byBwYXJzZSBpdCBmcm9tIHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZSBjb250ZW50LlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gaXNSb290IFt0cnVlXSAtIFRoaXMgb3B0aW9uIGRlZmluZXMgd2hlcmUgdGhlIGNlcnRpZmljYXRlIHNob3VsZCBiZVxuICogaW5zdGFsbGVkIHRvOiBlaXRoZXIgVHJ1c3RlZCBSb290IFN0b3JlIChgdHJ1ZWAsIHRoZSBkZWZhdWx0IG9wdGlvbikgb3JcbiAqIHRoZSBLZXljaGFpbiAoYGZhbHNlYCkuIE9uIGVudmlyb25tZW50cyBvdGhlciB0aGFuIFhjb2RlIDExLjQrIFNpbXVsYXRvciB0aGlzXG4gKiBvcHRpb24gaXMgaWdub3JlZC5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIGEgY3VzdG9tIGNlcnRpZmljYXRlIG9udG8gdGhlIGRldmljZS5cbiAqIFNpbmNlIFhjb2RlIFNESyAxMS40IEFwcGxlIGhhcyBhZGRlZCBhIGRlZGljYXRlZCBzaW1jdGwgc3ViY29tbWFuZCB0byBxdWlja2x5IGhhbmRsZVxuICogY2VydGlmaWNhdGVzIG9uIFNpbXVsYXRvciBvdmVyIENMSS5cbiAqIE9uIHJlYWwgZGV2aWNlcyBvciBzaW11bGF0b3JzIGJlZm9yZSBYY29kZSAxMS40IFNES1xuICogQXBwbGUgcHJvdmlkZXMgbm8gb2ZmaWNpYWwgd2F5IHRvIGRvIGl0IHZpYSB0aGUgY29tbWFuZCBsaW5lLlxuICogSW4gc3VjaCBjYXNlIChhbmQgYWxzbyBhcyBhIGZhbGxiYWNrIGlmIENMSSBzZXR1cCBmYWlscylcbiAqIHRoaXMgbWV0aG9kIHRyaWVzIHRvIHdyYXAgdGhlIGNlcnRpZmljYXRlIGludG8gLm1vYmlsZWNvbmZpZyBmb3JtYXRcbiAqIGFuZCB0aGVuIGRlcGxveXMgdGhlIHdyYXBwZWQgZmlsZSB0byB0aGUgaW50ZXJuYWwgSFRUUCBzZXJ2ZXIsXG4gKiBzbyBvbmUgY2FuIG9wZW4gaXQgdmlhIG1vYmlsZSBTYWZhcmkuXG4gKiBUaGVuIHRoZSBhbGdvcml0aG0gZ29lcyB0aHJvdWdoIHRoZSBwcm9maWxlIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUgYnlcbiAqIGNsaWNraW5nIHRoZSBuZWNlc3NhcnkgYnV0dG9ucyB1c2luZyBXZWJEcml2ZXJBZ2VudC5cbiAqXG4gKiBAcGFyYW0ge0NlcnRpZmljYXRlSW5zdGFsbGF0aW9uT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMgez9zdHJpbmd9IFRoZSBjb250ZW50IG9mIHRoZSBnZW5lcmF0ZWQgLm1vYmlsZWNvbmZpZyBmaWxlIGFzXG4gKiBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuIFRoaXMgY29uZmlnIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuICogSWYgdGhlIGNlcnRpZmljYXRlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZXQgdmlhIENMSSB0aGVuIG5vdGhpbmcgaXMgcmV0dXJuZWQuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUluc3RhbGxDZXJ0aWZpY2F0ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUluc3RhbGxDZXJ0aWZpY2F0ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjb250ZW50LFxuICAgIGNvbW1vbk5hbWUsXG4gICAgaXNSb290ID0gdHJ1ZSxcbiAgfSA9IG9wdHM7XG4gIGlmIChfLmlzRW1wdHkoY29udGVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NlcnRpZmljYXRlIGNvbnRlbnQgc2hvdWxkIG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gaXNSb290ID8gJ2FkZFJvb3RDZXJ0aWZpY2F0ZScgOiAnYWRkQ2VydGlmaWNhdGUnO1xuICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaW1jdGxbbWV0aG9kTmFtZV0oXG4gICAgICAgIEJ1ZmZlci5mcm9tKGNvbnRlbnQsICdiYXNlNjQnKS50b1N0cmluZygpLCB7cmF3OiB0cnVlfVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlKTtcbiAgICAgIHRoaXMubG9nLmluZm8oYFRoZSBjZXJ0aWZpY2F0ZSBjYW5ub3QgYmUgaW5zdGFsbGVkIHZpYSBDTEkuIGAgK1xuICAgICAgICBgRmFsbGluZyBiYWNrIHRvIFVJLWJhc2VkIGRlcGxveW1lbnRgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFB5aWRldmljZSh0aGlzLm9wdHMudWRpZCk7XG4gICAgaWYgKGF3YWl0IGNsaWVudC5hc3NlcnRFeGlzdHMoZmFsc2UpKSB7XG4gICAgICBhd2FpdCBjbGllbnQuaW5zdGFsbFByb2ZpbGUoe3BheWxvYWQ6IEJ1ZmZlci5mcm9tKGNvbnRlbnQsICdiYXNlNjQnKX0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdweWlkZXZpY2UgaXMgbm90IGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbS4gJyArXG4gICAgICAgICdGYWxsaW5nIGJhY2sgdG8gdGhlIChzbG93KSBVSS1iYXNlZCBpbnN0YWxsYXRpb24nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIGNvbnN0IHRtcFBvcnQgPSBhd2FpdCBmaW5kQVBvcnROb3RJblVzZShIT1NUX1BPUlRfUkFOR0VbMF0sIEhPU1RfUE9SVF9SQU5HRVsxXSk7XG4gIGNvbnN0IGNvbmZpZ05hbWUgPSBgYXBwaXVtLiR7Q09ORklHX0VYVEVOU0lPTn1gO1xuICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5yZXNvbHZlKHRtcFJvb3QsIGNvbmZpZ05hbWUpO1xuICBjb25zdCB0bXBTZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcihhc3luYyBmdW5jdGlvbiAoXywgcmVzKSB7XG4gICAgY29uc3QgY29uZmlnRmlsZSA9IGF3YWl0IGZzLnJlYWRGaWxlKGNvbmZpZ1BhdGgpO1xuICAgIHJlcy5lbmQoY29uZmlnRmlsZSk7XG4gIH0pO1xuICB0cnkge1xuICAgIGNvbnN0IGNlcnRCdWZmZXIgPSBCdWZmZXIuZnJvbShjb250ZW50LCAnYmFzZTY0Jyk7XG4gICAgY29uc3QgY24gPSBjb21tb25OYW1lIHx8IGF3YWl0IGV4dHJhY3RDb21tb25OYW1lKGNlcnRCdWZmZXIpO1xuICAgIGNvbnN0IG1vYmlsZUNvbmZpZyA9IHRvTW9iaWxlQ29uZmlnKGNlcnRCdWZmZXIsIGNuKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcGxpc3QudXBkYXRlUGxpc3RGaWxlKGNvbmZpZ1BhdGgsIG1vYmlsZUNvbmZpZywgZmFsc2UsIGZhbHNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHN0b3JlIHRoZSBnZW5lcmF0ZWQgY29uZmlnIGFzICcke2NvbmZpZ1BhdGh9Jy4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBob3N0ID0gb3MuaG9zdG5hbWUoKTtcbiAgICAgIGNvbnN0IGNlcnRVcmwgPSBgaHR0cDovLyR7aG9zdH06JHt0bXBQb3J0fS8ke2NvbmZpZ05hbWV9YDtcbiAgICAgIGF3YWl0IHRtcFNlcnZlci5saXN0ZW4odG1wUG9ydCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIChhd2FpdCBjaGVja1BvcnRTdGF0dXModG1wUG9ydCwgaG9zdCkpID09PSAnb3Blbic7XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgd2FpdE1zOiBUTVBTRVJWRVJfU1RBUlRVUF9USU1FT1VULFxuICAgICAgICAgIGludGVydmFsTXM6IDMwMCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgdGVtcG9yYXJ5IHdlYiBzZXJ2ZXIgaXMgcnVubmluZyBhdCBodHRwOi8vJHtob3N0fToke3RtcFBvcnR9YCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHRlbXBvcmFyeSB3ZWIgc2VydmVyIGNhbm5vdCBiZSBzdGFydGVkIGF0IGh0dHA6Ly8ke2hvc3R9OiR7dG1wUG9ydH0uYCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvdXJsJywgJ1BPU1QnLCB7dXJsOiBjZXJ0VXJsfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgICAgICAgICAvLyBUaGUgY29tbWFuZCBhYm92ZSBkb2VzIG5vdCBhbHdheXMgd29yayBvbiByZWFsIGRldmljZXNcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0VXJsKGNlcnRVcmwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLm9wZW5VcmwoY2VydFVybCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBpc0NlcnRBbHJlYWR5SW5zdGFsbGVkID0gZmFsc2U7XG4gICAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgICBpZiAoYXdhaXQgaW5zdGFsbFBvc3QxMjJDZXJ0aWZpY2F0ZSh0aGlzLCBjbikpIHtcbiAgICAgICAgICBhd2FpdCBjbGlja0VsZW1lbnQodGhpcywgU2V0dGluZ3MuUHJvZmlsZSk7XG4gICAgICAgICAgYXdhaXQgdHJ1c3RDZXJ0aWZpY2F0ZUluUHJlZmVyZW5jZXModGhpcywgY24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzQ2VydEFscmVhZHlJbnN0YWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYXdhaXQgaW5zdGFsbFByZTEyMkNlcnRpZmljYXRlKHRoaXMpKSB7XG4gICAgICAgICAgYXdhaXQgY2xpY2tFbGVtZW50KHRoaXMsIEJ1dHRvbi5SZXR1cm5fdG9fU2V0dGluZ3MpO1xuICAgICAgICAgIGF3YWl0IHRydXN0Q2VydGlmaWNhdGVJblByZWZlcmVuY2VzKHRoaXMsIGNuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc0NlcnRBbHJlYWR5SW5zdGFsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQ2VydEFscmVhZHlJbnN0YWxsZWQpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgSXQgbG9va3MgbGlrZSB0aGUgJyR7Y259JyBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiBhbHJlYWR5IGFkZGVkIHRvIHRoZSBDQSByb290YCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFjdGl2YXRlQXBwKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmVzdG9yZSB0aGUgYXBwbGljYXRpb24gJyR7dGhpcy5vcHRzLmJ1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoYXdhaXQgdXRpbC50b0luTWVtb3J5QmFzZTY0KGNvbmZpZ1BhdGgpKS50b1N0cmluZygpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHRtcFNlcnZlci5jbG9zZSgpO1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcyk7XG5leHBvcnQgeyBjb21tYW5kcywgcGFyc2VDb21tb25OYW1lIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFJQSxVQUFVLEdBQUcsRUFBakI7QUFBQSxJQUFxQkMsUUFBUSxHQUFHLEVBQWhDOztBQUVBLE1BQU1DLGdCQUFnQixHQUFHLGNB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
399
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2NlcnRpZmljYXRlLmpzIiwibmFtZXMiOlsiZXh0ZW5zaW9ucyIsImNvbW1hbmRzIiwiQ09ORklHX0VYVEVOU0lPTiIsIkhPU1RfUE9SVF9SQU5HRSIsIlRNUFNFUlZFUl9TVEFSVFVQX1RJTUVPVVQiLCJTZXR0aW5ncyIsIkdlbmVyYWwiLCJ0eXBlIiwidmFsdWUiLCJQcm9maWxlIiwiQWJvdXQiLCJDZXJ0aWZpY2F0ZV9UcnVzdF9TZXR0aW5ncyIsIkJ1dHRvbiIsIkluc3RhbGwiLCJBbGxvdyIsIkRvbmUiLCJSZXR1cm5fdG9fU2V0dGluZ3MiLCJBbGVydCIsImV4dHJhY3RDb21tb25OYW1lIiwiY2VydEJ1ZmZlciIsInRlbXBDZXJ0IiwidGVtcERpciIsIm9wZW4iLCJwcmVmaXgiLCJzdWZmaXgiLCJmcyIsIndyaXRlRmlsZSIsInBhdGgiLCJzdGRvdXQiLCJleGVjIiwicGFyc2VDb21tb25OYW1lIiwiZXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwicmltcmFmIiwiTElCUkVfU1NMX1BBVFRFUk4iLCJPUEVOX1NTTF9QQVRURVJOIiwic3RyaW5nQ2VydGlmaWNhdGUiLCJyZXN1bHQiLCJyZWR1Y2UiLCJhY2MiLCJyIiwibWF0Y2giLCJ0b01vYmlsZUNvbmZpZyIsImNvbW1vbk5hbWUiLCJnZXRVVUlEIiwidXRpbCIsInV1aWRWNCIsInRvVXBwZXJDYXNlIiwiY29udGVudFV1aWQiLCJQYXlsb2FkQ29udGVudCIsIlBheWxvYWRDZXJ0aWZpY2F0ZUZpbGVOYW1lIiwiUGF5bG9hZERlc2NyaXB0aW9uIiwiUGF5bG9hZERpc3BsYXlOYW1lIiwiUGF5bG9hZElkZW50aWZpZXIiLCJQYXlsb2FkVHlwZSIsIlBheWxvYWRVVUlEIiwiUGF5bG9hZFZlcnNpb24iLCJvcyIsImhvc3RuYW1lIiwic3BsaXQiLCJQYXlsb2FkUmVtb3ZhbERpc2FsbG93ZWQiLCJjbGlja0VsZW1lbnQiLCJkcml2ZXIiLCJsb2NhdG9yIiwib3B0aW9ucyIsImVsZW1lbnQiLCJ0aW1lb3V0Iiwic2tpcElmSW52aXNpYmxlIiwibG9va3VwRGVsYXkiLCJyZXRyeUludGVydmFsIiwiZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzIiwiSlNPTiIsInN0cmluZ2lmeSIsIm5hdGl2ZUNsaWNrIiwiaW5zdGFsbFByZTEyMkNlcnRpZmljYXRlIiwiQiIsImRlbGF5IiwidHJ1c3RDZXJ0aWZpY2F0ZUluUHJlZmVyZW5jZXMiLCJuYW1lIiwic3dpdGNoTG9jYXRvciIsInJldHJ5IiwibW9iaWxlU3dpcGUiLCJkaXJlY3Rpb24iLCJwb3N0QWNjZXB0QWxlcnQiLCJpbnN0YWxsUG9zdDEyMkNlcnRpZmljYXRlIiwiYWN0aXZhdGVBcHAiLCJpc0NlcnRGb3VuZCIsInN3aXBlTnVtIiwibW9iaWxlSW5zdGFsbENlcnRpZmljYXRlIiwib3B0cyIsImNvbnRlbnQiLCJpc1Jvb3QiLCJfIiwiaXNFbXB0eSIsImlzU2ltdWxhdG9yIiwibWV0aG9kTmFtZSIsImRldmljZSIsInNpbWN0bCIsIkJ1ZmZlciIsImZyb20iLCJ0b1N0cmluZyIsInJhdyIsImUiLCJsb2ciLCJkZWJ1ZyIsImluZm8iLCJjbGllbnQiLCJQeWlkZXZpY2UiLCJ1ZGlkIiwiYXNzZXJ0RXhpc3RzIiwiaW5zdGFsbFByb2ZpbGUiLCJwYXlsb2FkIiwidG1wUm9vdCIsIm9wZW5EaXIiLCJ0bXBQb3J0IiwiZmluZEFQb3J0Tm90SW5Vc2UiLCJjb25maWdOYW1lIiwiY29uZmlnUGF0aCIsInJlc29sdmUiLCJ0bXBTZXJ2ZXIiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwicmVzIiwiY29uZmlnRmlsZSIsInJlYWRGaWxlIiwiZW5kIiwiY24iLCJtb2JpbGVDb25maWciLCJwbGlzdCIsInVwZGF0ZVBsaXN0RmlsZSIsImhvc3QiLCJjZXJ0VXJsIiwibGlzdGVuIiwid2FpdEZvckNvbmRpdGlvbiIsImNoZWNrUG9ydFN0YXR1cyIsImlnbiIsIndhaXRNcyIsImludGVydmFsTXMiLCJpc1JlYWxEZXZpY2UiLCJwcm94eUNvbW1hbmQiLCJ1cmwiLCJpc1dlYkNvbnRleHQiLCJzZXRVcmwiLCJvcGVuVXJsIiwiaXNDZXJ0QWxyZWFkeUluc3RhbGxlZCIsImNvbXBhcmVWZXJzaW9ucyIsInBsYXRmb3JtVmVyc2lvbiIsImJ1bmRsZUlkIiwid2FybiIsInRvSW5NZW1vcnlCYXNlNjQiLCJjbG9zZSIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jZXJ0aWZpY2F0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMsIHBsaXN0LCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgcmV0cnksIHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UsIGNoZWNrUG9ydFN0YXR1cyB9IGZyb20gJ3BvcnRzY2FubmVyJztcbmltcG9ydCBQeWlkZXZpY2UgZnJvbSAnLi4vcHktaW9zLWRldmljZS1jbGllbnQnO1xuXG5sZXQgZXh0ZW5zaW9ucyA9IHt9LCBjb21tYW5kcyA9IHt9O1xuXG5jb25zdCBDT05GSUdfRVhURU5TSU9OID0gJ21vYmlsZWNvbmZpZyc7XG5jb25zdCBIT1NUX1BPUlRfUkFOR0UgPSBbMzgyMDAsIDM4Mjk5XTtcbmNvbnN0IFRNUFNFUlZFUl9TVEFSVFVQX1RJTUVPVVQgPSA1MDAwO1xuY29uc3QgU2V0dGluZ3MgPSB7XG4gIEdlbmVyYWw6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdHZW5lcmFsJyxcbiAgfSxcbiAgUHJvZmlsZToge1xuICAgIHR5cGU6ICctaW9zIHByZWRpY2F0ZSBzdHJpbmcnLFxuICAgIHZhbHVlOiBgbmFtZSBCRUdJTlNXSVRIICdQcm9maWxlJ2AsXG4gIH0sXG4gIEFib3V0OiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnQWJvdXQnLFxuICB9LFxuICBDZXJ0aWZpY2F0ZV9UcnVzdF9TZXR0aW5nczoge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ0NlcnRpZmljYXRlIFRydXN0IFNldHRpbmdzJyxcbiAgfSxcbn07XG5jb25zdCBCdXR0b24gPSB7XG4gIEluc3RhbGw6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdJbnN0YWxsJyxcbiAgfSxcbiAgQWxsb3c6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdBbGxvdycsXG4gIH0sXG4gIERvbmU6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdEb25lJyxcbiAgfSxcbiAgUmV0dXJuX3RvX1NldHRpbmdzOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnUmV0dXJuIHRvIFNldHRpbmdzJyxcbiAgfSxcbn07XG5jb25zdCBBbGVydCA9IHtcbiAgSW5zdGFsbDoge1xuICAgIHR5cGU6ICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICB2YWx1ZTogJyoqL1hDVUlFbGVtZW50VHlwZUFueVtgdHlwZSA9PSBcXCdYQ1VJRWxlbWVudFR5cGVBbGVydFxcJyBPUiB0eXBlID09IFxcJ1hDVUlFbGVtZW50VHlwZVNoZWV0XFwnYF0vKiovWENVSUVsZW1lbnRUeXBlQnV0dG9uW2BsYWJlbCA9PSBcXCdJbnN0YWxsXFwnYF0nLFxuICB9LFxufTtcblxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0Q29tbW9uTmFtZSAoY2VydEJ1ZmZlcikge1xuICBjb25zdCB0ZW1wQ2VydCA9IGF3YWl0IHRlbXBEaXIub3Blbih7XG4gICAgcHJlZml4OiAnY2VydCcsXG4gICAgc3VmZml4OiAnLmNlcidcbiAgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHRlbXBDZXJ0LnBhdGgsIGNlcnRCdWZmZXIpO1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygnb3BlbnNzbCcsIFsneDUwOScsICctbm9vdXQnLCAnLXN1YmplY3QnLCAnLWluJywgdGVtcENlcnQucGF0aF0pO1xuICAgIHJldHVybiBwYXJzZUNvbW1vbk5hbWUoc3Rkb3V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgY29tbW9uIG5hbWUgdmFsdWUgZnJvbSB0aGUgY2VydGlmaWNhdGUuIElzIGl0IHZhbGlkIGFuZCBiYXNlNjQtZW5jb2RlZD8gYCArXG4gICAgICAgICAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodGVtcENlcnQucGF0aCk7XG4gIH1cbn1cblxuY29uc3QgTElCUkVfU1NMX1BBVFRFUk4gPSAvXFwvQ049KFteXFwvXSspLzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuY29uc3QgT1BFTl9TU0xfUEFUVEVSTiA9IC8sXFxzQ05cXHM9XFxzKFteLF0rKS87XG5cbmZ1bmN0aW9uIHBhcnNlQ29tbW9uTmFtZSAoc3RyaW5nQ2VydGlmaWNhdGUpIHtcbiAgY29uc3QgcmVzdWx0ID0gW0xJQlJFX1NTTF9QQVRURVJOLCBPUEVOX1NTTF9QQVRURVJOXS5yZWR1Y2UoKGFjYywgcikgPT4ge1xuICAgIGlmIChhY2MpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gci5leGVjKHN0cmluZ0NlcnRpZmljYXRlKTtcbiAgICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG4gIH0sIG51bGwpO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gY29tbW9uIG5hbWUgdmFsdWUgaW4gJyR7c3RyaW5nQ2VydGlmaWNhdGV9JyBvdXRwdXRgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBBcHBsZSdzIG92ZXItdGhlLWFpciBjb25maWd1cmF0aW9uIHByb2ZpbGVcbiAqIGZvciBjZXJ0aWZpY2F0ZSBkZXBsb3ltZW50IGJhc2VkIG9uIHRoZSBnaXZlbiBQRU0gY2VydGlmaWNhdGUgY29udGVudC5cbiAqIFJlYWQgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvY29udGVudC9kb2N1bWVudGF0aW9uL05ldHdvcmtpbmdJbnRlcm5ldC9Db25jZXB0dWFsL2lQaG9uZU9UQUNvbmZpZ3VyYXRpb24vSW50cm9kdWN0aW9uL0ludHJvZHVjdGlvbi5odG1sXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHN1Y2ggcHJvZmlsZXMuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGNlcnRCdWZmZXIgLSBUaGUgYWN0dWFsIGNvbnRlbnQgb2YgUEVNIGNlcnRpZmljYXRlIGVuY29kZWQgaW50byBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbW9uTmFtZSAtIENlcnRpZmljYXRlJ3MgY29tbW9uIG5hbWVcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBlbmNvZGVkIHN0cnVjdHVyZSBvZiB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUsIHdoaWNoIGlzIHJlYWR5IHRvIGJlIHBhc3NlZFxuICogYXMgYW4gYXJndW1lbnQgdG8gcGxpc3QgYnVpbGRlclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZSBjYW5ub3QgYmUgcGFyc2VkXG4gKi9cbmZ1bmN0aW9uIHRvTW9iaWxlQ29uZmlnIChjZXJ0QnVmZmVyLCBjb21tb25OYW1lKSB7XG4gIGNvbnN0IGdldFVVSUQgPSAoKSA9PiB1dGlsLnV1aWRWNCgpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IGNvbnRlbnRVdWlkID0gZ2V0VVVJRCgpO1xuICByZXR1cm4ge1xuICAgIFBheWxvYWRDb250ZW50OiBbe1xuICAgICAgUGF5bG9hZENlcnRpZmljYXRlRmlsZU5hbWU6IGAke2NvbW1vbk5hbWV9LmNlcmAsXG4gICAgICBQYXlsb2FkQ29udGVudDogY2VydEJ1ZmZlcixcbiAgICAgIFBheWxvYWREZXNjcmlwdGlvbjogJ0FkZHMgYSBDQSByb290IGNlcnRpZmljYXRlJyxcbiAgICAgIFBheWxvYWREaXNwbGF5TmFtZTogY29tbW9uTmFtZSxcbiAgICAgIFBheWxvYWRJZGVudGlmaWVyOiBgY29tLmFwcGxlLnNlY3VyaXR5LnJvb3QuJHtjb250ZW50VXVpZH1gLFxuICAgICAgUGF5bG9hZFR5cGU6ICdjb20uYXBwbGUuc2VjdXJpdHkucm9vdCcsXG4gICAgICBQYXlsb2FkVVVJRDogY29udGVudFV1aWQsXG4gICAgICBQYXlsb2FkVmVyc2lvbjogMVxuICAgIH1dLFxuICAgIFBheWxvYWREaXNwbGF5TmFtZTogY29tbW9uTmFtZSxcbiAgICBQYXlsb2FkSWRlbnRpZmllcjogYCR7b3MuaG9zdG5hbWUoKS5zcGxpdCgnLicpWzBdfS4ke2dldFVVSUQoKX1gLFxuICAgIFBheWxvYWRSZW1vdmFsRGlzYWxsb3dlZDogZmFsc2UsXG4gICAgUGF5bG9hZFR5cGU6ICdDb25maWd1cmF0aW9uJyxcbiAgICBQYXlsb2FkVVVJRDogZ2V0VVVJRCgpLFxuICAgIFBheWxvYWRWZXJzaW9uOiAxXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsaWNrRWxlbWVudCAoZHJpdmVyLCBsb2NhdG9yLCBvcHRpb25zID0ge30pIHtcbiAgbGV0IGVsZW1lbnQgPSBudWxsO1xuICBjb25zdCB7XG4gICAgdGltZW91dCA9IDUwMDAsXG4gICAgc2tpcElmSW52aXNpYmxlID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxvb2t1cERlbGF5ID0gNTAwO1xuICB0cnkge1xuICAgIGVsZW1lbnQgPSBhd2FpdCByZXRyeUludGVydmFsKHRpbWVvdXQgPCBsb29rdXBEZWxheSA/IDEgOiB0aW1lb3V0IC8gbG9va3VwRGVsYXksIGxvb2t1cERlbGF5LFxuICAgICAgKCkgPT4gZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyhsb2NhdG9yLnR5cGUsIGxvY2F0b3IudmFsdWUsIGZhbHNlKVxuICAgICk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChza2lwSWZJbnZpc2libGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCAke0pTT04uc3RyaW5naWZ5KGxvY2F0b3IpfSB3aXRoaW4gJHt0aW1lb3V0fW1zIHRpbWVvdXRgKTtcbiAgfVxuICBhd2FpdCBkcml2ZXIubmF0aXZlQ2xpY2soZWxlbWVudCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsUHJlMTIyQ2VydGlmaWNhdGUgKGRyaXZlcikge1xuICAvLyBBY2NlcHQgU2FmYXJpIGFsZXJ0XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5BbGxvdywge1xuICAgIC8vIGNlcnRpZmljYXRlIGxvYWQgbWlnaHQgdGFrZSBzb21lIHRpbWUgb24gc2xvdyBtYWNoaW5lc1xuICAgIHRpbWVvdXQ6IDE1MDAwLFxuICB9KTtcbiAgLy8gV2FpdCB1bnRpbCBQcmVmZXJlbmNlcyBhcmUgb3BlbmVkXG4gIGF3YWl0IEIuZGVsYXkoMjAwMCk7XG5cbiAgLy8gR28gdGhyb3VnaCBQcmVmZXJlbmNlcyB3aXphcmRcbiAgaWYgKCFhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uSW5zdGFsbCwge1xuICAgIHNraXBJZkludmlzaWJsZTogdHJ1ZSxcbiAgfSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gV2UgbmVlZCB0byBjbGljayBJbnN0YWxsIGJ1dHRvbiBvbiB0d28gZGlmZmVyZW50IHRhYnNcbiAgLy8gVGhlIHNlY29uZCBvbmUgY29uZmlybXMgdGhlIHByZXZpb3VzXG4gIGF3YWl0IEIuZGVsYXkoMTUwMCk7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5JbnN0YWxsKTtcbiAgLy8gQWNjZXB0IGFsZXJ0XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEFsZXJ0Lkluc3RhbGwpO1xuICAvLyBGaW5pc2ggYWRkaW5nIGNlcnRpZmljYXRlXG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5Eb25lKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRydXN0Q2VydGlmaWNhdGVJblByZWZlcmVuY2VzIChkcml2ZXIsIG5hbWUpIHtcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgU2V0dGluZ3MuR2VuZXJhbCk7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkFib3V0KTtcbiAgY29uc3Qgc3dpdGNoTG9jYXRvciA9IHtcbiAgICB0eXBlOiAnLWlvcyBjbGFzcyBjaGFpbicsXG4gICAgdmFsdWU6IGAqKi9YQ1VJRWxlbWVudFR5cGVDZWxsW1xcYGxhYmVsID09ICcke25hbWV9J1xcYF0vKiovWENVSUVsZW1lbnRUeXBlU3dpdGNoYCxcbiAgfTtcbiAgYXdhaXQgcmV0cnkoNSwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRyaXZlci5tb2JpbGVTd2lwZSh7XG4gICAgICBlbGVtZW50OiBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdjbGFzcyBuYW1lJywgJ1hDVUlFbGVtZW50VHlwZVRhYmxlJywgZmFsc2UpLFxuICAgICAgZGlyZWN0aW9uOiAndXAnXG4gICAgfSk7XG4gICAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgU2V0dGluZ3MuQ2VydGlmaWNhdGVfVHJ1c3RfU2V0dGluZ3MsIHtcbiAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICB9KTtcblxuICAgIGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoc3dpdGNoTG9jYXRvci50eXBlLCBzd2l0Y2hMb2NhdG9yLnZhbHVlLCBmYWxzZSk7XG4gIH0pO1xuICAvLyBPbmx5IGNsaWNrIHRoZSBzd2l0Y2ggaWYgaXQgaXMgc2V0IHRvIE9mZlxuICBpZiAoYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwge1xuICAgIHR5cGU6IHN3aXRjaExvY2F0b3IudHlwZSxcbiAgICB2YWx1ZTogYCR7c3dpdGNoTG9jYXRvci52YWx1ZX1bXFxgdmFsdWUgPT0gJzAnXFxgXWBcbiAgfSwge1xuICAgIHRpbWVvdXQ6IDEwMDAsXG4gICAgc2tpcElmSW52aXNpYmxlOiB0cnVlLFxuICB9KSkge1xuICAgIGF3YWl0IGRyaXZlci5wb3N0QWNjZXB0QWxlcnQoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsUG9zdDEyMkNlcnRpZmljYXRlIChkcml2ZXIsIG5hbWUpIHtcbiAgLy8gQWNjZXB0IFNhZmFyaSBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uQWxsb3csIHtcbiAgICAvLyBjZXJ0aWZpY2F0ZSBsb2FkIG1pZ2h0IHRha2Ugc29tZSB0aW1lIG9uIHNsb3cgbWFjaGluZXNcbiAgICB0aW1lb3V0OiAxNTAwMCxcbiAgfSk7XG4gIC8vIFdhaXQgZm9yIHRoZSBzZWNvbmQgYWxlcnRcbiAgYXdhaXQgQi5kZWxheSgyMDAwKTtcblxuICBhd2FpdCBkcml2ZXIucG9zdEFjY2VwdEFsZXJ0KCk7XG4gIGF3YWl0IGRyaXZlci5hY3RpdmF0ZUFwcCgnY29tLmFwcGxlLlByZWZlcmVuY2VzJyk7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkdlbmVyYWwpO1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBTZXR0aW5ncy5Qcm9maWxlKTtcbiAgLy8gU2VsZWN0IHRoZSB0YXJnZXQgY2VydFxuICBsZXQgaXNDZXJ0Rm91bmQgPSBmYWxzZTtcbiAgZm9yIChsZXQgc3dpcGVOdW0gPSAwOyBzd2lwZU51bSA8IDU7ICsrc3dpcGVOdW0pIHtcbiAgICBpZiAoYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwge1xuICAgICAgdHlwZTogJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgICAgdmFsdWU6IGAqKi9YQ1VJRWxlbWVudFR5cGVDZWxsW1xcYGxhYmVsID09ICcke25hbWV9J1xcYF1gLFxuICAgIH0sIHtcbiAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICAgIHNraXBJZkludmlzaWJsZTogdHJ1ZSxcbiAgICB9KSkge1xuICAgICAgaXNDZXJ0Rm91bmQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXdhaXQgZHJpdmVyLm1vYmlsZVN3aXBlKHtcbiAgICAgIGVsZW1lbnQ6IGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2NsYXNzIG5hbWUnLCAnWENVSUVsZW1lbnRUeXBlVGFibGUnLCBmYWxzZSksXG4gICAgICBkaXJlY3Rpb246ICd1cCdcbiAgICB9KTtcbiAgfVxuICBpZiAoIWlzQ2VydEZvdW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtuYW1lfScgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBjZXJ0aWZpY2F0ZXMgbGlzdGApO1xuICB9XG5cbiAgLy8gSW5zdGFsbCBvcHRpb24gaXMgb25seSB2aXNpYmxlIGlmIHRoZSBjZXJ0IGlzIG5vdCBpbnN0YWxsZWQgeWV0XG4gIGlmICghYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkluc3RhbGwsIHtcbiAgICBza2lwSWZJbnZpc2libGU6IHRydWUsXG4gIH0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGF3YWl0IEIuZGVsYXkoMTUwMCk7XG4gIC8vIENvbmZpcm0gdW50cnVzdGVkIGNlcnQgaW5zdGFsbFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uSW5zdGFsbCk7XG4gIC8vIEFjY2VwdCBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBBbGVydC5JbnN0YWxsKTtcbiAgLy8gRmluaXNoIGFkZGluZyBjZXJ0aWZpY2F0ZVxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uRG9uZSk7XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2VydGlmaWNhdGVJbnN0YWxsYXRpb25PcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHshc3RyaW5nfSBjb250ZW50IC0gQmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgcHVibGljIGNlcnRpZmljYXRlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvbW1vbk5hbWUgLSBDb21tb24gbmFtZSBvZiB0aGUgY2VydGlmaWNhdGUuIElmIHRoaXMgaXMgbm90IHNldFxuICogdGhlbiB0aGUgc2NyaXB0IHdpbGwgdHJ5IHRvIHBhcnNlIGl0IGZyb20gdGhlIGdpdmVuIGNlcnRpZmljYXRlIGNvbnRlbnQuXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBpc1Jvb3QgW3RydWVdIC0gVGhpcyBvcHRpb24gZGVmaW5lcyB3aGVyZSB0aGUgY2VydGlmaWNhdGUgc2hvdWxkIGJlXG4gKiBpbnN0YWxsZWQgdG86IGVpdGhlciBUcnVzdGVkIFJvb3QgU3RvcmUgKGB0cnVlYCwgdGhlIGRlZmF1bHQgb3B0aW9uKSBvclxuICogdGhlIEtleWNoYWluIChgZmFsc2VgKS4gT24gZW52aXJvbm1lbnRzIG90aGVyIHRoYW4gWGNvZGUgMTEuNCsgU2ltdWxhdG9yIHRoaXNcbiAqIG9wdGlvbiBpcyBpZ25vcmVkLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgYSBjdXN0b20gY2VydGlmaWNhdGUgb250byB0aGUgZGV2aWNlLlxuICogU2luY2UgWGNvZGUgU0RLIDExLjQgQXBwbGUgaGFzIGFkZGVkIGEgZGVkaWNhdGVkIHNpbWN0bCBzdWJjb21tYW5kIHRvIHF1aWNrbHkgaGFuZGxlXG4gKiBjZXJ0aWZpY2F0ZXMgb24gU2ltdWxhdG9yIG92ZXIgQ0xJLlxuICogT24gcmVhbCBkZXZpY2VzIG9yIHNpbXVsYXRvcnMgYmVmb3JlIFhjb2RlIDExLjQgU0RLXG4gKiBBcHBsZSBwcm92aWRlcyBubyBvZmZpY2lhbCB3YXkgdG8gZG8gaXQgdmlhIHRoZSBjb21tYW5kIGxpbmUuXG4gKiBJbiBzdWNoIGNhc2UgKGFuZCBhbHNvIGFzIGEgZmFsbGJhY2sgaWYgQ0xJIHNldHVwIGZhaWxzKVxuICogdGhpcyBtZXRob2QgdHJpZXMgdG8gd3JhcCB0aGUgY2VydGlmaWNhdGUgaW50byAubW9iaWxlY29uZmlnIGZvcm1hdFxuICogYW5kIHRoZW4gZGVwbG95cyB0aGUgd3JhcHBlZCBmaWxlIHRvIHRoZSBpbnRlcm5hbCBIVFRQIHNlcnZlcixcbiAqIHNvIG9uZSBjYW4gb3BlbiBpdCB2aWEgbW9iaWxlIFNhZmFyaS5cbiAqIFRoZW4gdGhlIGFsZ29yaXRobSBnb2VzIHRocm91Z2ggdGhlIHByb2ZpbGUgaW5zdGFsbGF0aW9uIHByb2NlZHVyZSBieVxuICogY2xpY2tpbmcgdGhlIG5lY2Vzc2FyeSBidXR0b25zIHVzaW5nIFdlYkRyaXZlckFnZW50LlxuICpcbiAqIEBwYXJhbSB7Q2VydGlmaWNhdGVJbnN0YWxsYXRpb25PcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGNvbnRlbnQgb2YgdGhlIGdlbmVyYXRlZCAubW9iaWxlY29uZmlnIGZpbGUgYXNcbiAqIGJhc2U2NC1lbmNvZGVkIHN0cmluZy4gVGhpcyBjb25maWcgbWlnaHQgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4gKiBJZiB0aGUgY2VydGlmaWNhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldCB2aWEgQ0xJIHRoZW4gbm90aGluZyBpcyByZXR1cm5lZC5cbiAqL1xuY29tbWFuZHMubW9iaWxlSW5zdGFsbENlcnRpZmljYXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbENlcnRpZmljYXRlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGNvbnRlbnQsXG4gICAgY29tbW9uTmFtZSxcbiAgICBpc1Jvb3QgPSB0cnVlLFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNFbXB0eShjb250ZW50KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2VydGlmaWNhdGUgY29udGVudCBzaG91bGQgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpc1Jvb3QgPyAnYWRkUm9vdENlcnRpZmljYXRlJyA6ICdhZGRDZXJ0aWZpY2F0ZSc7XG4gICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNpbWN0bFttZXRob2ROYW1lXShcbiAgICAgICAgQnVmZmVyLmZyb20oY29udGVudCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCksIHtyYXc6IHRydWV9XG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUpO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVGhlIGNlcnRpZmljYXRlIGNhbm5vdCBiZSBpbnN0YWxsZWQgdmlhIENMSS4gYCArXG4gICAgICAgIGBGYWxsaW5nIGJhY2sgdG8gVUktYmFzZWQgZGVwbG95bWVudGApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgUHlpZGV2aWNlKHRoaXMub3B0cy51ZGlkKTtcbiAgICBpZiAoYXdhaXQgY2xpZW50LmFzc2VydEV4aXN0cyhmYWxzZSkpIHtcbiAgICAgIGF3YWl0IGNsaWVudC5pbnN0YWxsUHJvZmlsZSh7cGF5bG9hZDogQnVmZmVyLmZyb20oY29udGVudCwgJ2Jhc2U2NCcpfSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ3B5aWRldmljZSBpcyBub3QgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLiAnICtcbiAgICAgICAgJ0ZhbGxpbmcgYmFjayB0byB0aGUgKHNsb3cpIFVJLWJhc2VkIGluc3RhbGxhdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgdG1wUG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKEhPU1RfUE9SVF9SQU5HRVswXSwgSE9TVF9QT1JUX1JBTkdFWzFdKTtcbiAgY29uc3QgY29uZmlnTmFtZSA9IGBhcHBpdW0uJHtDT05GSUdfRVhURU5TSU9OfWA7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgY29uZmlnTmFtZSk7XG4gIGNvbnN0IHRtcFNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKGFzeW5jIGZ1bmN0aW9uIChfLCByZXMpIHtcbiAgICBjb25zdCBjb25maWdGaWxlID0gYXdhaXQgZnMucmVhZEZpbGUoY29uZmlnUGF0aCk7XG4gICAgcmVzLmVuZChjb25maWdGaWxlKTtcbiAgfSk7XG4gIHRyeSB7XG4gICAgY29uc3QgY2VydEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGNvbnRlbnQsICdiYXNlNjQnKTtcbiAgICBjb25zdCBjbiA9IGNvbW1vbk5hbWUgfHwgYXdhaXQgZXh0cmFjdENvbW1vbk5hbWUoY2VydEJ1ZmZlcik7XG4gICAgY29uc3QgbW9iaWxlQ29uZmlnID0gdG9Nb2JpbGVDb25maWcoY2VydEJ1ZmZlciwgY24pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwbGlzdC51cGRhdGVQbGlzdEZpbGUoY29uZmlnUGF0aCwgbW9iaWxlQ29uZmlnLCBmYWxzZSwgZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc3RvcmUgdGhlIGdlbmVyYXRlZCBjb25maWcgYXMgJyR7Y29uZmlnUGF0aH0nLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhvc3QgPSBvcy5ob3N0bmFtZSgpO1xuICAgICAgY29uc3QgY2VydFVybCA9IGBodHRwOi8vJHtob3N0fToke3RtcFBvcnR9LyR7Y29uZmlnTmFtZX1gO1xuICAgICAgYXdhaXQgdG1wU2VydmVyLmxpc3Rlbih0bXBQb3J0KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gKGF3YWl0IGNoZWNrUG9ydFN0YXR1cyh0bXBQb3J0LCBob3N0KSkgPT09ICdvcGVuJztcbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB3YWl0TXM6IFRNUFNFUlZFUl9TVEFSVFVQX1RJTUVPVVQsXG4gICAgICAgICAgaW50ZXJ2YWxNczogMzAwLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFRoZSB0ZW1wb3Jhcnkgd2ViIHNlcnZlciBpcyBydW5uaW5nIGF0IGh0dHA6Ly8ke2hvc3R9OiR7dG1wUG9ydH1gKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdGVtcG9yYXJ5IHdlYiBzZXJ2ZXIgY2Fubm90IGJlIHN0YXJ0ZWQgYXQgaHR0cDovLyR7aG9zdH06JHt0bXBQb3J0fS5gKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy91cmwnLCAnUE9TVCcsIHt1cmw6IGNlcnRVcmx9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb21tYW5kIGFib3ZlIGRvZXMgbm90IGFsd2F5cyB3b3JrIG9uIHJlYWwgZGV2aWNlc1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRVcmwoY2VydFVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uub3BlblVybChjZXJ0VXJsKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzQ2VydEFscmVhZHlJbnN0YWxsZWQgPSBmYWxzZTtcbiAgICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTIuMicpKSB7XG4gICAgICAgIGlmIChhd2FpdCBpbnN0YWxsUG9zdDEyMkNlcnRpZmljYXRlKHRoaXMsIGNuKSkge1xuICAgICAgICAgIGF3YWl0IGNsaWNrRWxlbWVudCh0aGlzLCBTZXR0aW5ncy5Qcm9maWxlKTtcbiAgICAgICAgICBhd2FpdCB0cnVzdENlcnRpZmljYXRlSW5QcmVmZXJlbmNlcyh0aGlzLCBjbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNDZXJ0QWxyZWFkeUluc3RhbGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhd2FpdCBpbnN0YWxsUHJlMTIyQ2VydGlmaWNhdGUodGhpcykpIHtcbiAgICAgICAgICBhd2FpdCBjbGlja0VsZW1lbnQodGhpcywgQnV0dG9uLlJldHVybl90b19TZXR0aW5ncyk7XG4gICAgICAgICAgYXdhaXQgdHJ1c3RDZXJ0aWZpY2F0ZUluUHJlZmVyZW5jZXModGhpcywgY24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzQ2VydEFscmVhZHlJbnN0YWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNDZXJ0QWxyZWFkeUluc3RhbGxlZCkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBJdCBsb29rcyBsaWtlIHRoZSAnJHtjbn0nIGNlcnRpZmljYXRlIGhhcyBiZWVuIGFscmVhZHkgYWRkZWQgdG8gdGhlIENBIHJvb3RgKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aXZhdGVBcHAodGhpcy5vcHRzLmJ1bmRsZUlkKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCByZXN0b3JlIHRoZSBhcHBsaWNhdGlvbiAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChhd2FpdCB1dGlsLnRvSW5NZW1vcnlCYXNlNjQoY29uZmlnUGF0aCkpLnRvU3RyaW5nKCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgdG1wU2VydmVyLmNsb3NlKCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBwYXJzZUNvbW1vbk5hbWUgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFVBQVUsR0FBRyxFQUFqQjtBQUFBLElBQXFCQyxRQUFRLEdBQUcsRUFBaEM7O0FBRUEsTUFBTUMsZ0JBQWdCLEdBQUcsY0FB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