appium-webdriveragent 4.8.2 → 4.8.5

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.
Binary file
package/build/index.js CHANGED
@@ -17,8 +17,6 @@ var constants = _interopRequireWildcard(require("./lib/constants"));
17
17
 
18
18
  var utils = _interopRequireWildcard(require("./lib/utils"));
19
19
 
20
- var _asyncbox = require("asyncbox");
21
-
22
20
  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); }
23
21
 
24
22
  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; }
@@ -38,7 +36,6 @@ const {
38
36
  } = driver;
39
37
  exports.WebDriverAgent = WebDriverAgent;
40
38
  const {
41
- BOOTSTRAP_PATH,
42
39
  WDA_BASE_URL,
43
40
  WDA_RUNNER_BUNDLE_ID,
44
41
  PROJECT_FILE
@@ -46,15 +43,10 @@ const {
46
43
  exports.PROJECT_FILE = PROJECT_FILE;
47
44
  exports.WDA_RUNNER_BUNDLE_ID = WDA_RUNNER_BUNDLE_ID;
48
45
  exports.WDA_BASE_URL = WDA_BASE_URL;
49
- exports.BOOTSTRAP_PATH = BOOTSTRAP_PATH;
50
46
  const {
51
- resetTestProcesses
47
+ resetTestProcesses,
48
+ BOOTSTRAP_PATH
52
49
  } = utils;
50
+ exports.BOOTSTRAP_PATH = BOOTSTRAP_PATH;
53
51
  exports.resetTestProcesses = resetTestProcesses;
54
-
55
- if (require.main === module) {
56
- (0, _asyncbox.asyncify)(checkForDependencies);
57
- }require('source-map-support').install();
58
-
59
-
60
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJjaGVja0ZvckRlcGVuZGVuY2llcyIsImJ1bmRsZVdEQVNpbSIsImRlcGVuZGVuY2llcyIsIk5vU2Vzc2lvblByb3h5IiwicHJveGllcyIsIldlYkRyaXZlckFnZW50IiwiZHJpdmVyIiwiQk9PVFNUUkFQX1BBVEgiLCJXREFfQkFTRV9VUkwiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIlBST0pFQ1RfRklMRSIsImNvbnN0YW50cyIsInJlc2V0VGVzdFByb2Nlc3NlcyIsInV0aWxzIiwicmVxdWlyZSIsIm1haW4iLCJtb2R1bGUiLCJhc3luY2lmeSJdLCJzb3VyY2VSb290IjoiLi4iLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGRlcGVuZGVuY2llcyBmcm9tICcuL2xpYi9jaGVjay1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0ICogYXMgcHJveGllcyBmcm9tICcuL2xpYi9uby1zZXNzaW9uLXByb3h5JztcbmltcG9ydCAqIGFzIGRyaXZlciBmcm9tICcuL2xpYi93ZWJkcml2ZXJhZ2VudCc7XG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi9saWIvY29uc3RhbnRzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuXG5cbmNvbnN0IHsgY2hlY2tGb3JEZXBlbmRlbmNpZXMsIGJ1bmRsZVdEQVNpbSB9ID0gZGVwZW5kZW5jaWVzO1xuY29uc3QgeyBOb1Nlc3Npb25Qcm94eSB9ID0gcHJveGllcztcbmNvbnN0IHsgV2ViRHJpdmVyQWdlbnQgfSA9IGRyaXZlcjtcbmNvbnN0IHsgQk9PVFNUUkFQX1BBVEgsIFdEQV9CQVNFX1VSTCwgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFBST0pFQ1RfRklMRSB9ID0gY29uc3RhbnRzO1xuY29uc3QgeyByZXNldFRlc3RQcm9jZXNzZXMgfSA9IHV0aWxzO1xuXG5cbi8vIFdoZW4gcnVuIGFzIGEgY29tbWFuZCBsaW5lIHV0aWxpdHksIHRoaXMgc2hvdWxkIGNoZWNrIGZvciB0aGUgZGVwZW5kZW5jaWVzXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgYXN5bmNpZnkoY2hlY2tGb3JEZXBlbmRlbmNpZXMpO1xufVxuXG5leHBvcnQge1xuICBXZWJEcml2ZXJBZ2VudCxcbiAgTm9TZXNzaW9uUHJveHksXG4gIGNoZWNrRm9yRGVwZW5kZW5jaWVzLCBidW5kbGVXREFTaW0sXG4gIHJlc2V0VGVzdFByb2Nlc3NlcyxcbiAgQk9PVFNUUkFQX1BBVEgsXG4gIFdEQV9SVU5ORVJfQlVORExFX0lELCBQUk9KRUNUX0ZJTEUsXG4gIFdEQV9CQVNFX1VSTCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFHQSxNQUFNO0VBQUVBLG9CQUFGO0VBQXdCQztBQUF4QixJQUF5Q0MsWUFBL0M7OztBQUNBLE1BQU07RUFBRUM7QUFBRixJQUFxQkMsT0FBM0I7O0FBQ0EsTUFBTTtFQUFFQztBQUFGLElBQXFCQyxNQUEzQjs7QUFDQSxNQUFNO0VBQUVDLGNBQUY7RUFBa0JDLFlBQWxCO0VBQWdDQyxvQkFBaEM7RUFBc0RDO0FBQXRELElBQXVFQyxTQUE3RTs7Ozs7QUFDQSxNQUFNO0VBQUVDO0FBQUYsSUFBeUJDLEtBQS9COzs7QUFJQSxJQUFJQyxPQUFPLENBQUNDLElBQVIsS0FBaUJDLE1BQXJCLEVBQTZCO0VBQzNCLElBQUFDLGtCQUFBLEVBQVNqQixvQkFBVDtBQUNEIn0=
52
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjaGVja0ZvckRlcGVuZGVuY2llcyIsImJ1bmRsZVdEQVNpbSIsImRlcGVuZGVuY2llcyIsIk5vU2Vzc2lvblByb3h5IiwicHJveGllcyIsIldlYkRyaXZlckFnZW50IiwiZHJpdmVyIiwiV0RBX0JBU0VfVVJMIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJQUk9KRUNUX0ZJTEUiLCJjb25zdGFudHMiLCJyZXNldFRlc3RQcm9jZXNzZXMiLCJCT09UU1RSQVBfUEFUSCIsInV0aWxzIl0sInNvdXJjZXMiOlsiLi4vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZGVwZW5kZW5jaWVzIGZyb20gJy4vbGliL2NoZWNrLWRlcGVuZGVuY2llcyc7XG5pbXBvcnQgKiBhcyBwcm94aWVzIGZyb20gJy4vbGliL25vLXNlc3Npb24tcHJveHknO1xuaW1wb3J0ICogYXMgZHJpdmVyIGZyb20gJy4vbGliL3dlYmRyaXZlcmFnZW50JztcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi9saWIvdXRpbHMnO1xuXG5cbmNvbnN0IHsgY2hlY2tGb3JEZXBlbmRlbmNpZXMsIGJ1bmRsZVdEQVNpbSB9ID0gZGVwZW5kZW5jaWVzO1xuY29uc3QgeyBOb1Nlc3Npb25Qcm94eSB9ID0gcHJveGllcztcbmNvbnN0IHsgV2ViRHJpdmVyQWdlbnQgfSA9IGRyaXZlcjtcbmNvbnN0IHsgV0RBX0JBU0VfVVJMLCBXREFfUlVOTkVSX0JVTkRMRV9JRCwgUFJPSkVDVF9GSUxFIH0gPSBjb25zdGFudHM7XG5jb25zdCB7IHJlc2V0VGVzdFByb2Nlc3NlcywgQk9PVFNUUkFQX1BBVEggfSA9IHV0aWxzO1xuXG5leHBvcnQge1xuICBXZWJEcml2ZXJBZ2VudCxcbiAgTm9TZXNzaW9uUHJveHksXG4gIGNoZWNrRm9yRGVwZW5kZW5jaWVzLCBidW5kbGVXREFTaW0sXG4gIHJlc2V0VGVzdFByb2Nlc3NlcyxcbiAgQk9PVFNUUkFQX1BBVEgsXG4gIFdEQV9SVU5ORVJfQlVORExFX0lELCBQUk9KRUNUX0ZJTEUsXG4gIFdEQV9CQVNFX1VSTCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFHQSxNQUFNO0VBQUVBLG9CQUFGO0VBQXdCQztBQUF4QixJQUF5Q0MsWUFBL0M7OztBQUNBLE1BQU07RUFBRUM7QUFBRixJQUFxQkMsT0FBM0I7O0FBQ0EsTUFBTTtFQUFFQztBQUFGLElBQXFCQyxNQUEzQjs7QUFDQSxNQUFNO0VBQUVDLFlBQUY7RUFBZ0JDLG9CQUFoQjtFQUFzQ0M7QUFBdEMsSUFBdURDLFNBQTdEOzs7O0FBQ0EsTUFBTTtFQUFFQyxrQkFBRjtFQUFzQkM7QUFBdEIsSUFBeUNDLEtBQS9DIn0=
@@ -22,10 +22,12 @@ var _xcodebuild = _interopRequireDefault(require("./xcodebuild"));
22
22
 
23
23
  var _constants = require("./constants");
24
24
 
25
+ var _utils = require("./utils");
26
+
25
27
  var _logger = _interopRequireDefault(require("./logger"));
26
28
 
27
29
  async function buildWDASim() {
28
- const args = ['-project', _constants.WDA_PROJECT, '-scheme', _constants.WDA_SCHEME, '-sdk', _constants.SDK_SIMULATOR, 'CODE_SIGN_IDENTITY=""', 'CODE_SIGNING_REQUIRED="NO"', 'GCC_TREAT_WARNINGS_AS_ERRORS=0'];
30
+ const args = ['-project', _path.default.join(_utils.BOOTSTRAP_PATH, 'WebDriverAgent.xcodeproj'), '-scheme', _constants.WDA_SCHEME, '-sdk', _constants.SDK_SIMULATOR, 'CODE_SIGN_IDENTITY=""', 'CODE_SIGNING_REQUIRED="NO"', 'GCC_TREAT_WARNINGS_AS_ERRORS=0'];
29
31
  await (0, _teen_process.exec)('xcodebuild', args);
30
32
  }
31
33
 
@@ -49,10 +51,7 @@ async function bundleWDASim(xcodebuild, opts = {}) {
49
51
  return wdaBundlePath;
50
52
  }
51
53
 
52
- await checkForDependencies(opts);
53
54
  await buildWDASim(xcodebuild, opts);
54
55
  return wdaBundlePath;
55
- }require('source-map-support').install();
56
-
57
-
58
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NoZWNrLWRlcGVuZGVuY2llcy5qcyIsIm5hbWVzIjpbImJ1aWxkV0RBU2ltIiwiYXJncyIsIldEQV9QUk9KRUNUIiwiV0RBX1NDSEVNRSIsIlNES19TSU1VTEFUT1IiLCJleGVjIiwiY2hlY2tGb3JEZXBlbmRlbmNpZXMiLCJsb2ciLCJkZWJ1ZyIsImJ1bmRsZVdEQVNpbSIsInhjb2RlYnVpbGQiLCJvcHRzIiwiXyIsImlzRnVuY3Rpb24iLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsIlhjb2RlQnVpbGQiLCJkZXJpdmVkRGF0YVBhdGgiLCJ3ZGFCdW5kbGVQYXRoIiwicGF0aCIsImpvaW4iLCJXREFfUlVOTkVSX0FQUCIsImZzIiwiZXhpc3RzIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2NoZWNrLWRlcGVuZGVuY2llcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IFhjb2RlQnVpbGQgZnJvbSAnLi94Y29kZWJ1aWxkJztcbmltcG9ydCB7XG4gIFdEQV9QUk9KRUNULCBXREFfU0NIRU1FLCBTREtfU0lNVUxBVE9SLCBXREFfUlVOTkVSX0FQUFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRXREFTaW0gKCkge1xuICBjb25zdCBhcmdzID0gW1xuICAgICctcHJvamVjdCcsIFdEQV9QUk9KRUNULFxuICAgICctc2NoZW1lJywgV0RBX1NDSEVNRSxcbiAgICAnLXNkaycsIFNES19TSU1VTEFUT1IsXG4gICAgJ0NPREVfU0lHTl9JREVOVElUWT1cIlwiJyxcbiAgICAnQ09ERV9TSUdOSU5HX1JFUVVJUkVEPVwiTk9cIicsXG4gICAgJ0dDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlM9MCcsXG4gIF07XG4gIGF3YWl0IGV4ZWMoJ3hjb2RlYnVpbGQnLCBhcmdzKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmFzeW5jIGZ1bmN0aW9uIGNoZWNrRm9yRGVwZW5kZW5jaWVzICgpIHtcbiAgbG9nLmRlYnVnKCdEZXBlbmRlbmNpZXMgYXJlIHVwIHRvIGRhdGUnKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidW5kbGVXREFTaW0gKHhjb2RlYnVpbGQsIG9wdHMgPSB7fSkge1xuICBpZiAoeGNvZGVidWlsZCAmJiAhXy5pc0Z1bmN0aW9uKHhjb2RlYnVpbGQucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgpKSB7XG4gICAgeGNvZGVidWlsZCA9IG5ldyBYY29kZUJ1aWxkKCk7XG4gICAgb3B0cyA9IHhjb2RlYnVpbGQ7XG4gIH1cblxuICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB4Y29kZWJ1aWxkLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gIGNvbnN0IHdkYUJ1bmRsZVBhdGggPSBwYXRoLmpvaW4oZGVyaXZlZERhdGFQYXRoLCAnQnVpbGQnLCAnUHJvZHVjdHMnLCAnRGVidWctaXBob25lc2ltdWxhdG9yJywgV0RBX1JVTk5FUl9BUFApO1xuICBpZiAoYXdhaXQgZnMuZXhpc3RzKHdkYUJ1bmRsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHdkYUJ1bmRsZVBhdGg7XG4gIH1cbiAgYXdhaXQgY2hlY2tGb3JEZXBlbmRlbmNpZXMob3B0cyk7XG4gIGF3YWl0IGJ1aWxkV0RBU2ltKHhjb2RlYnVpbGQsIG9wdHMpO1xuICByZXR1cm4gd2RhQnVuZGxlUGF0aDtcbn1cblxuZXhwb3J0IHsgY2hlY2tGb3JEZXBlbmRlbmNpZXMsIGJ1bmRsZVdEQVNpbSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFFQSxlQUFlQSxXQUFmLEdBQThCO0VBQzVCLE1BQU1DLElBQUksR0FBRyxDQUNYLFVBRFcsRUFDQ0Msc0JBREQsRUFFWCxTQUZXLEVBRUFDLHFCQUZBLEVBR1gsTUFIVyxFQUdIQyx3QkFIRyxFQUlYLHVCQUpXLEVBS1gsNEJBTFcsRUFNWCxnQ0FOVyxDQUFiO0VBUUEsTUFBTSxJQUFBQyxrQkFBQSxFQUFLLFlBQUwsRUFBbUJKLElBQW5CLENBQU47QUFDRDs7QUFHRCxlQUFlSyxvQkFBZixHQUF1QztFQUNyQ0MsZUFBQSxDQUFJQyxLQUFKLENBQVUsNkJBQVY7O0VBQ0EsT0FBTyxLQUFQO0FBQ0Q7O0FBRUQsZUFBZUMsWUFBZixDQUE2QkMsVUFBN0IsRUFBeUNDLElBQUksR0FBRyxFQUFoRCxFQUFvRDtFQUNsRCxJQUFJRCxVQUFVLElBQUksQ0FBQ0UsZUFBQSxDQUFFQyxVQUFGLENBQWFILFVBQVUsQ0FBQ0ksdUJBQXhCLENBQW5CLEVBQXFFO0lBQ25FSixVQUFVLEdBQUcsSUFBSUssbUJBQUosRUFBYjtJQUNBSixJQUFJLEdBQUdELFVBQVA7RUFDRDs7RUFFRCxNQUFNTSxlQUFlLEdBQUcsTUFBTU4sVUFBVSxDQUFDSSx1QkFBWCxFQUE5Qjs7RUFDQSxNQUFNRyxhQUFhLEdBQUdDLGFBQUEsQ0FBS0MsSUFBTCxDQUFVSCxlQUFWLEVBQTJCLE9BQTNCLEVBQW9DLFVBQXBDLEVBQWdELHVCQUFoRCxFQUF5RUkseUJBQXpFLENBQXRCOztFQUNBLElBQUksTUFBTUMsV0FBQSxDQUFHQyxNQUFILENBQVVMLGFBQVYsQ0FBVixFQUFvQztJQUNsQyxPQUFPQSxhQUFQO0VBQ0Q7O0VBQ0QsTUFBTVgsb0JBQW9CLENBQUNLLElBQUQsQ0FBMUI7RUFDQSxNQUFNWCxXQUFXLENBQUNVLFVBQUQsRUFBYUMsSUFBYixDQUFqQjtFQUNBLE9BQU9NLGFBQVA7QUFDRCJ9
56
+ }
57
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZFdEQVNpbSIsImFyZ3MiLCJwYXRoIiwiam9pbiIsIkJPT1RTVFJBUF9QQVRIIiwiV0RBX1NDSEVNRSIsIlNES19TSU1VTEFUT1IiLCJleGVjIiwiY2hlY2tGb3JEZXBlbmRlbmNpZXMiLCJsb2ciLCJkZWJ1ZyIsImJ1bmRsZVdEQVNpbSIsInhjb2RlYnVpbGQiLCJvcHRzIiwiXyIsImlzRnVuY3Rpb24iLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsIlhjb2RlQnVpbGQiLCJkZXJpdmVkRGF0YVBhdGgiLCJ3ZGFCdW5kbGVQYXRoIiwiV0RBX1JVTk5FUl9BUFAiLCJmcyIsImV4aXN0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jaGVjay1kZXBlbmRlbmNpZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBYY29kZUJ1aWxkIGZyb20gJy4veGNvZGVidWlsZCc7XG5pbXBvcnQge1xuICBXREFfU0NIRU1FLCBTREtfU0lNVUxBVE9SLCBXREFfUlVOTkVSX0FQUFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBCT09UU1RSQVBfUEFUSCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkV0RBU2ltICgpIHtcbiAgY29uc3QgYXJncyA9IFtcbiAgICAnLXByb2plY3QnLCBwYXRoLmpvaW4oQk9PVFNUUkFQX1BBVEgsICdXZWJEcml2ZXJBZ2VudC54Y29kZXByb2onKSxcbiAgICAnLXNjaGVtZScsIFdEQV9TQ0hFTUUsXG4gICAgJy1zZGsnLCBTREtfU0lNVUxBVE9SLFxuICAgICdDT0RFX1NJR05fSURFTlRJVFk9XCJcIicsXG4gICAgJ0NPREVfU0lHTklOR19SRVFVSVJFRD1cIk5PXCInLFxuICAgICdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTPTAnLFxuICBdO1xuICBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgYXJncyk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG5hc3luYyBmdW5jdGlvbiBjaGVja0ZvckRlcGVuZGVuY2llcyAoKSB7XG4gIGxvZy5kZWJ1ZygnRGVwZW5kZW5jaWVzIGFyZSB1cCB0byBkYXRlJyk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVuZGxlV0RBU2ltICh4Y29kZWJ1aWxkLCBvcHRzID0ge30pIHtcbiAgaWYgKHhjb2RlYnVpbGQgJiYgIV8uaXNGdW5jdGlvbih4Y29kZWJ1aWxkLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKSkge1xuICAgIHhjb2RlYnVpbGQgPSBuZXcgWGNvZGVCdWlsZCgpO1xuICAgIG9wdHMgPSB4Y29kZWJ1aWxkO1xuICB9XG5cbiAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgeGNvZGVidWlsZC5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICBjb25zdCB3ZGFCdW5kbGVQYXRoID0gcGF0aC5qb2luKGRlcml2ZWREYXRhUGF0aCwgJ0J1aWxkJywgJ1Byb2R1Y3RzJywgJ0RlYnVnLWlwaG9uZXNpbXVsYXRvcicsIFdEQV9SVU5ORVJfQVBQKTtcbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyh3ZGFCdW5kbGVQYXRoKSkge1xuICAgIHJldHVybiB3ZGFCdW5kbGVQYXRoO1xuICB9XG4gIGF3YWl0IGJ1aWxkV0RBU2ltKHhjb2RlYnVpbGQsIG9wdHMpO1xuICByZXR1cm4gd2RhQnVuZGxlUGF0aDtcbn1cblxuZXhwb3J0IHsgY2hlY2tGb3JEZXBlbmRlbmNpZXMsIGJ1bmRsZVdEQVNpbSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFFQSxlQUFlQSxXQUFmLEdBQThCO0VBQzVCLE1BQU1DLElBQUksR0FBRyxDQUNYLFVBRFcsRUFDQ0MsYUFBQSxDQUFLQyxJQUFMLENBQVVDLHFCQUFWLEVBQTBCLDBCQUExQixDQURELEVBRVgsU0FGVyxFQUVBQyxxQkFGQSxFQUdYLE1BSFcsRUFHSEMsd0JBSEcsRUFJWCx1QkFKVyxFQUtYLDRCQUxXLEVBTVgsZ0NBTlcsQ0FBYjtFQVFBLE1BQU0sSUFBQUMsa0JBQUEsRUFBSyxZQUFMLEVBQW1CTixJQUFuQixDQUFOO0FBQ0Q7O0FBR0QsZUFBZU8sb0JBQWYsR0FBdUM7RUFDckNDLGVBQUEsQ0FBSUMsS0FBSixDQUFVLDZCQUFWOztFQUNBLE9BQU8sS0FBUDtBQUNEOztBQUVELGVBQWVDLFlBQWYsQ0FBNkJDLFVBQTdCLEVBQXlDQyxJQUFJLEdBQUcsRUFBaEQsRUFBb0Q7RUFDbEQsSUFBSUQsVUFBVSxJQUFJLENBQUNFLGVBQUEsQ0FBRUMsVUFBRixDQUFhSCxVQUFVLENBQUNJLHVCQUF4QixDQUFuQixFQUFxRTtJQUNuRUosVUFBVSxHQUFHLElBQUlLLG1CQUFKLEVBQWI7SUFDQUosSUFBSSxHQUFHRCxVQUFQO0VBQ0Q7O0VBRUQsTUFBTU0sZUFBZSxHQUFHLE1BQU1OLFVBQVUsQ0FBQ0ksdUJBQVgsRUFBOUI7O0VBQ0EsTUFBTUcsYUFBYSxHQUFHakIsYUFBQSxDQUFLQyxJQUFMLENBQVVlLGVBQVYsRUFBMkIsT0FBM0IsRUFBb0MsVUFBcEMsRUFBZ0QsdUJBQWhELEVBQXlFRSx5QkFBekUsQ0FBdEI7O0VBQ0EsSUFBSSxNQUFNQyxXQUFBLENBQUdDLE1BQUgsQ0FBVUgsYUFBVixDQUFWLEVBQW9DO0lBQ2xDLE9BQU9BLGFBQVA7RUFDRDs7RUFDRCxNQUFNbkIsV0FBVyxDQUFDWSxVQUFELEVBQWFDLElBQWIsQ0FBakI7RUFDQSxPQUFPTSxhQUFQO0FBQ0QifQ==
@@ -5,22 +5,12 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.WDA_UPGRADE_TIMESTAMP_PATH = exports.WDA_SCRIPTS_ROOT = exports.WDA_SCHEME = exports.WDA_RUNNER_BUNDLE_ID = exports.WDA_RUNNER_APP = exports.WDA_PROJECT = exports.WDA_BASE_URL = exports.SDK_SIMULATOR = exports.SDK_DEVICE = exports.PROJECT_FILE = exports.PLATFORM_NAME_TVOS = exports.PLATFORM_NAME_IOS = exports.BOOTSTRAP_PATH = void 0;
8
+ exports.WDA_UPGRADE_TIMESTAMP_PATH = exports.WDA_SCHEME = exports.WDA_RUNNER_BUNDLE_ID = exports.WDA_RUNNER_APP = exports.WDA_BASE_URL = exports.SDK_SIMULATOR = exports.SDK_DEVICE = exports.PROJECT_FILE = exports.PLATFORM_NAME_TVOS = exports.PLATFORM_NAME_IOS = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
12
12
  var _path = _interopRequireDefault(require("path"));
13
13
 
14
- const BOOTSTRAP_PATH = __dirname.endsWith('build') ? _path.default.resolve(__dirname, '..', '..', '..') : _path.default.resolve(__dirname, '..', '..');
15
- exports.BOOTSTRAP_PATH = BOOTSTRAP_PATH;
16
-
17
- const WDA_PROJECT = _path.default.join(BOOTSTRAP_PATH, 'WebDriverAgent.xcodeproj');
18
-
19
- exports.WDA_PROJECT = WDA_PROJECT;
20
-
21
- const WDA_SCRIPTS_ROOT = _path.default.join(BOOTSTRAP_PATH, 'Scripts');
22
-
23
- exports.WDA_SCRIPTS_ROOT = WDA_SCRIPTS_ROOT;
24
14
  const WDA_RUNNER_BUNDLE_ID = 'com.facebook.WebDriverAgentRunner';
25
15
  exports.WDA_RUNNER_BUNDLE_ID = WDA_RUNNER_BUNDLE_ID;
26
16
  const WDA_RUNNER_APP = 'WebDriverAgentRunner-Runner.app';
@@ -42,7 +32,5 @@ exports.SDK_DEVICE = SDK_DEVICE;
42
32
 
43
33
  const WDA_UPGRADE_TIMESTAMP_PATH = _path.default.join('.appium', 'webdriveragent', 'upgrade.time');
44
34
 
45
- exports.WDA_UPGRADE_TIMESTAMP_PATH = WDA_UPGRADE_TIMESTAMP_PATH;require('source-map-support').install();
46
-
47
-
48
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbnN0YW50cy5qcyIsIm5hbWVzIjpbIkJPT1RTVFJBUF9QQVRIIiwiX19kaXJuYW1lIiwiZW5kc1dpdGgiLCJwYXRoIiwicmVzb2x2ZSIsIldEQV9QUk9KRUNUIiwiam9pbiIsIldEQV9TQ1JJUFRTX1JPT1QiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIldEQV9SVU5ORVJfQVBQIiwiV0RBX1NDSEVNRSIsIlBST0pFQ1RfRklMRSIsIldEQV9CQVNFX1VSTCIsIlBMQVRGT1JNX05BTUVfVFZPUyIsIlBMQVRGT1JNX05BTUVfSU9TIiwiU0RLX1NJTVVMQVRPUiIsIlNES19ERVZJQ0UiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cblxuY29uc3QgQk9PVFNUUkFQX1BBVEggPSBfX2Rpcm5hbWUuZW5kc1dpdGgoJ2J1aWxkJylcbiAgPyBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nKVxuICA6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicpO1xuY29uc3QgV0RBX1BST0pFQ1QgPSBwYXRoLmpvaW4oQk9PVFNUUkFQX1BBVEgsICdXZWJEcml2ZXJBZ2VudC54Y29kZXByb2onKTtcbmNvbnN0IFdEQV9TQ1JJUFRTX1JPT1QgPSBwYXRoLmpvaW4oQk9PVFNUUkFQX1BBVEgsICdTY3JpcHRzJyk7XG5jb25zdCBXREFfUlVOTkVSX0JVTkRMRV9JRCA9ICdjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXInO1xuY29uc3QgV0RBX1JVTk5FUl9BUFAgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXItUnVubmVyLmFwcCc7XG5jb25zdCBXREFfU0NIRU1FID0gJ1dlYkRyaXZlckFnZW50UnVubmVyJztcbmNvbnN0IFBST0pFQ1RfRklMRSA9ICdwcm9qZWN0LnBieHByb2onO1xuY29uc3QgV0RBX0JBU0VfVVJMID0gJ2h0dHA6Ly8xMjcuMC4wLjEnO1xuXG5jb25zdCBQTEFURk9STV9OQU1FX1RWT1MgPSAndHZPUyc7XG5jb25zdCBQTEFURk9STV9OQU1FX0lPUyA9ICdpT1MnO1xuXG5jb25zdCBTREtfU0lNVUxBVE9SID0gJ2lwaG9uZXNpbXVsYXRvcic7XG5jb25zdCBTREtfREVWSUNFID0gJ2lwaG9uZW9zJztcblxuY29uc3QgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEggPSBwYXRoLmpvaW4oJy5hcHBpdW0nLCAnd2ViZHJpdmVyYWdlbnQnLCAndXBncmFkZS50aW1lJyk7XG5cbmV4cG9ydCB7XG4gIEJPT1RTVFJBUF9QQVRILFxuICBXREFfUlVOTkVSX0JVTkRMRV9JRCwgV0RBX1JVTk5FUl9BUFAsIFBST0pFQ1RfRklMRSxcbiAgV0RBX1BST0pFQ1QsIFdEQV9TQ0hFTUUsXG4gIFBMQVRGT1JNX05BTUVfVFZPUywgUExBVEZPUk1fTkFNRV9JT1MsXG4gIFNES19TSU1VTEFUT1IsIFNES19ERVZJQ0UsXG4gIFdEQV9CQVNFX1VSTCwgV0RBX1NDUklQVFNfUk9PVCwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEhcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBR0EsTUFBTUEsY0FBYyxHQUFHQyxTQUFTLENBQUNDLFFBQVYsQ0FBbUIsT0FBbkIsSUFDbkJDLGFBQUEsQ0FBS0MsT0FBTCxDQUFhSCxTQUFiLEVBQXdCLElBQXhCLEVBQThCLElBQTlCLEVBQW9DLElBQXBDLENBRG1CLEdBRW5CRSxhQUFBLENBQUtDLE9BQUwsQ0FBYUgsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixDQUZKOzs7QUFHQSxNQUFNSSxXQUFXLEdBQUdGLGFBQUEsQ0FBS0csSUFBTCxDQUFVTixjQUFWLEVBQTBCLDBCQUExQixDQUFwQjs7OztBQUNBLE1BQU1PLGdCQUFnQixHQUFHSixhQUFBLENBQUtHLElBQUwsQ0FBVU4sY0FBVixFQUEwQixTQUExQixDQUF6Qjs7O0FBQ0EsTUFBTVEsb0JBQW9CLEdBQUcsbUNBQTdCOztBQUNBLE1BQU1DLGNBQWMsR0FBRyxpQ0FBdkI7O0FBQ0EsTUFBTUMsVUFBVSxHQUFHLHNCQUFuQjs7QUFDQSxNQUFNQyxZQUFZLEdBQUcsaUJBQXJCOztBQUNBLE1BQU1DLFlBQVksR0FBRyxrQkFBckI7O0FBRUEsTUFBTUMsa0JBQWtCLEdBQUcsTUFBM0I7O0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsS0FBMUI7O0FBRUEsTUFBTUMsYUFBYSxHQUFHLGlCQUF0Qjs7QUFDQSxNQUFNQyxVQUFVLEdBQUcsVUFBbkI7OztBQUVBLE1BQU1DLDBCQUEwQixHQUFHZCxhQUFBLENBQUtHLElBQUwsQ0FBVSxTQUFWLEVBQXFCLGdCQUFyQixFQUF1QyxjQUF2QyxDQUFuQyJ9
35
+ exports.WDA_UPGRADE_TIMESTAMP_PATH = WDA_UPGRADE_TIMESTAMP_PATH;
36
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIldEQV9SVU5ORVJfQVBQIiwiV0RBX1NDSEVNRSIsIlBST0pFQ1RfRklMRSIsIldEQV9CQVNFX1VSTCIsIlBMQVRGT1JNX05BTUVfVFZPUyIsIlBMQVRGT1JNX05BTUVfSU9TIiwiU0RLX1NJTVVMQVRPUiIsIlNES19ERVZJQ0UiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCIsInBhdGgiLCJqb2luIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2NvbnN0YW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuY29uc3QgV0RBX1JVTk5FUl9CVU5ETEVfSUQgPSAnY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyJztcbmNvbnN0IFdEQV9SVU5ORVJfQVBQID0gJ1dlYkRyaXZlckFnZW50UnVubmVyLVJ1bm5lci5hcHAnO1xuY29uc3QgV0RBX1NDSEVNRSA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcic7XG5jb25zdCBQUk9KRUNUX0ZJTEUgPSAncHJvamVjdC5wYnhwcm9qJztcbmNvbnN0IFdEQV9CQVNFX1VSTCA9ICdodHRwOi8vMTI3LjAuMC4xJztcblxuY29uc3QgUExBVEZPUk1fTkFNRV9UVk9TID0gJ3R2T1MnO1xuY29uc3QgUExBVEZPUk1fTkFNRV9JT1MgPSAnaU9TJztcblxuY29uc3QgU0RLX1NJTVVMQVRPUiA9ICdpcGhvbmVzaW11bGF0b3InO1xuY29uc3QgU0RLX0RFVklDRSA9ICdpcGhvbmVvcyc7XG5cbmNvbnN0IFdEQV9VUEdSQURFX1RJTUVTVEFNUF9QQVRIID0gcGF0aC5qb2luKCcuYXBwaXVtJywgJ3dlYmRyaXZlcmFnZW50JywgJ3VwZ3JhZGUudGltZScpO1xuXG5leHBvcnQge1xuICBXREFfUlVOTkVSX0JVTkRMRV9JRCwgV0RBX1JVTk5FUl9BUFAsIFBST0pFQ1RfRklMRSxcbiAgV0RBX1NDSEVNRSwgUExBVEZPUk1fTkFNRV9UVk9TLCBQTEFURk9STV9OQU1FX0lPUyxcbiAgU0RLX1NJTVVMQVRPUiwgU0RLX0RFVklDRSwgV0RBX0JBU0VfVVJMLCBXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxvQkFBb0IsR0FBRyxtQ0FBN0I7O0FBQ0EsTUFBTUMsY0FBYyxHQUFHLGlDQUF2Qjs7QUFDQSxNQUFNQyxVQUFVLEdBQUcsc0JBQW5COztBQUNBLE1BQU1DLFlBQVksR0FBRyxpQkFBckI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLGtCQUFyQjs7QUFFQSxNQUFNQyxrQkFBa0IsR0FBRyxNQUEzQjs7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxLQUExQjs7QUFFQSxNQUFNQyxhQUFhLEdBQUcsaUJBQXRCOztBQUNBLE1BQU1DLFVBQVUsR0FBRyxVQUFuQjs7O0FBRUEsTUFBTUMsMEJBQTBCLEdBQUdDLGFBQUEsQ0FBS0MsSUFBTCxDQUFVLFNBQVYsRUFBcUIsZ0JBQXJCLEVBQXVDLGNBQXZDLENBQW5DIn0=
@@ -12,7 +12,5 @@ var _support = require("appium/support");
12
12
  const log = _support.logger.getLogger('WebDriverAgent');
13
13
 
14
14
  var _default = log;
15
- exports.default = _default;require('source-map-support').install();
16
-
17
-
18
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdXZWJEcml2ZXJBZ2VudCcpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVBLE1BQU1BLEdBQUcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLGdCQUFqQixDQUFaOztlQUVlRixHIn0=
15
+ exports.default = _default;
16
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignV2ViRHJpdmVyQWdlbnQnKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxHQUFHLEdBQUdDLGVBQUEsQ0FBT0MsU0FBUCxDQUFpQixnQkFBakIsQ0FBWjs7ZUFFZUYsRyJ9
@@ -36,7 +36,5 @@ class NoSessionProxy extends _driver.JWProxy {
36
36
 
37
37
  exports.NoSessionProxy = NoSessionProxy;
38
38
  var _default = NoSessionProxy;
39
- exports.default = _default;require('source-map-support').install();
40
-
41
-
42
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL25vLXNlc3Npb24tcHJveHkuanMiLCJuYW1lcyI6WyJOb1Nlc3Npb25Qcm94eSIsIkpXUHJveHkiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJnZXRVcmxGb3JQcm94eSIsInVybCIsInByb3h5QmFzZSIsInNjaGVtZSIsInNlcnZlciIsInBvcnQiLCJiYXNlIiwicmVtYWluaW5nVXJsIiwiUmVnRXhwIiwidGVzdCIsIkVycm9yIiwicmVwbGFjZSJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9uby1zZXNzaW9uLXByb3h5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEpXUHJveHkgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuXG5jbGFzcyBOb1Nlc3Npb25Qcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICBnZXRVcmxGb3JQcm94eSAodXJsKSB7XG4gICAgaWYgKHVybCA9PT0gJycpIHtcbiAgICAgIHVybCA9ICcvJztcbiAgICB9XG4gICAgY29uc3QgcHJveHlCYXNlID0gYCR7dGhpcy5zY2hlbWV9Oi8vJHt0aGlzLnNlcnZlcn06JHt0aGlzLnBvcnR9JHt0aGlzLmJhc2V9YDtcbiAgICBsZXQgcmVtYWluaW5nVXJsID0gJyc7XG4gICAgaWYgKChuZXcgUmVnRXhwKCdeLycpKS50ZXN0KHVybCkpIHtcbiAgICAgIHJlbWFpbmluZ1VybCA9IHVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGtub3cgd2hhdCB0byBkbyB3aXRoIHVybCAnJHt1cmx9J2ApO1xuICAgIH1cbiAgICByZW1haW5pbmdVcmwgPSByZW1haW5pbmdVcmwucmVwbGFjZSgvXFwvJC8sICcnKTsgLy8gY2FuJ3QgaGF2ZSB0cmFpbGluZyBzbGFzaGVzXG4gICAgcmV0dXJuIHByb3h5QmFzZSArIHJlbWFpbmluZ1VybDtcbiAgfVxufVxuXG5leHBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9O1xuZXhwb3J0IGRlZmF1bHQgTm9TZXNzaW9uUHJveHk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUdBLE1BQU1BLGNBQU4sU0FBNkJDLGVBQTdCLENBQXFDO0VBQ25DQyxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7SUFDdEIsTUFBTUEsSUFBTjtFQUNEOztFQUVEQyxjQUFjLENBQUVDLEdBQUYsRUFBTztJQUNuQixJQUFJQSxHQUFHLEtBQUssRUFBWixFQUFnQjtNQUNkQSxHQUFHLEdBQUcsR0FBTjtJQUNEOztJQUNELE1BQU1DLFNBQVMsR0FBSSxHQUFFLEtBQUtDLE1BQU8sTUFBSyxLQUFLQyxNQUFPLElBQUcsS0FBS0MsSUFBSyxHQUFFLEtBQUtDLElBQUssRUFBM0U7SUFDQSxJQUFJQyxZQUFZLEdBQUcsRUFBbkI7O0lBQ0EsSUFBSyxJQUFJQyxNQUFKLENBQVcsSUFBWCxDQUFELENBQW1CQyxJQUFuQixDQUF3QlIsR0FBeEIsQ0FBSixFQUFrQztNQUNoQ00sWUFBWSxHQUFHTixHQUFmO0lBQ0QsQ0FGRCxNQUVPO01BQ0wsTUFBTSxJQUFJUyxLQUFKLENBQVcscUNBQW9DVCxHQUFJLEdBQW5ELENBQU47SUFDRDs7SUFDRE0sWUFBWSxHQUFHQSxZQUFZLENBQUNJLE9BQWIsQ0FBcUIsS0FBckIsRUFBNEIsRUFBNUIsQ0FBZjtJQUNBLE9BQU9ULFNBQVMsR0FBR0ssWUFBbkI7RUFDRDs7QUFsQmtDOzs7ZUFzQnRCWCxjIn0=
39
+ exports.default = _default;
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOb1Nlc3Npb25Qcm94eSIsIkpXUHJveHkiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJnZXRVcmxGb3JQcm94eSIsInVybCIsInByb3h5QmFzZSIsInNjaGVtZSIsInNlcnZlciIsInBvcnQiLCJiYXNlIiwicmVtYWluaW5nVXJsIiwiUmVnRXhwIiwidGVzdCIsIkVycm9yIiwicmVwbGFjZSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9uby1zZXNzaW9uLXByb3h5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEpXUHJveHkgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuXG5jbGFzcyBOb1Nlc3Npb25Qcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICBnZXRVcmxGb3JQcm94eSAodXJsKSB7XG4gICAgaWYgKHVybCA9PT0gJycpIHtcbiAgICAgIHVybCA9ICcvJztcbiAgICB9XG4gICAgY29uc3QgcHJveHlCYXNlID0gYCR7dGhpcy5zY2hlbWV9Oi8vJHt0aGlzLnNlcnZlcn06JHt0aGlzLnBvcnR9JHt0aGlzLmJhc2V9YDtcbiAgICBsZXQgcmVtYWluaW5nVXJsID0gJyc7XG4gICAgaWYgKChuZXcgUmVnRXhwKCdeLycpKS50ZXN0KHVybCkpIHtcbiAgICAgIHJlbWFpbmluZ1VybCA9IHVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGtub3cgd2hhdCB0byBkbyB3aXRoIHVybCAnJHt1cmx9J2ApO1xuICAgIH1cbiAgICByZW1haW5pbmdVcmwgPSByZW1haW5pbmdVcmwucmVwbGFjZSgvXFwvJC8sICcnKTsgLy8gY2FuJ3QgaGF2ZSB0cmFpbGluZyBzbGFzaGVzXG4gICAgcmV0dXJuIHByb3h5QmFzZSArIHJlbWFpbmluZ1VybDtcbiAgfVxufVxuXG5leHBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9O1xuZXhwb3J0IGRlZmF1bHQgTm9TZXNzaW9uUHJveHk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUdBLE1BQU1BLGNBQU4sU0FBNkJDLGVBQTdCLENBQXFDO0VBQ25DQyxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7SUFDdEIsTUFBTUEsSUFBTjtFQUNEOztFQUVEQyxjQUFjLENBQUVDLEdBQUYsRUFBTztJQUNuQixJQUFJQSxHQUFHLEtBQUssRUFBWixFQUFnQjtNQUNkQSxHQUFHLEdBQUcsR0FBTjtJQUNEOztJQUNELE1BQU1DLFNBQVMsR0FBSSxHQUFFLEtBQUtDLE1BQU8sTUFBSyxLQUFLQyxNQUFPLElBQUcsS0FBS0MsSUFBSyxHQUFFLEtBQUtDLElBQUssRUFBM0U7SUFDQSxJQUFJQyxZQUFZLEdBQUcsRUFBbkI7O0lBQ0EsSUFBSyxJQUFJQyxNQUFKLENBQVcsSUFBWCxDQUFELENBQW1CQyxJQUFuQixDQUF3QlIsR0FBeEIsQ0FBSixFQUFrQztNQUNoQ00sWUFBWSxHQUFHTixHQUFmO0lBQ0QsQ0FGRCxNQUVPO01BQ0wsTUFBTSxJQUFJUyxLQUFKLENBQVcscUNBQW9DVCxHQUFJLEdBQW5ELENBQU47SUFDRDs7SUFDRE0sWUFBWSxHQUFHQSxZQUFZLENBQUNJLE9BQWIsQ0FBcUIsS0FBckIsRUFBNEIsRUFBNUIsQ0FBZjtJQUNBLE9BQU9ULFNBQVMsR0FBR0ssWUFBbkI7RUFDRDs7QUFsQmtDOzs7ZUFzQnRCWCxjIn0=
@@ -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.BOOTSTRAP_PATH = void 0;
8
9
  exports.generateXcodeConfigFile = generateXcodeConfigFile;
9
10
  exports.getAdditionalRunContent = getAdditionalRunContent;
10
11
  exports.getPIDsListeningOnPort = getPIDsListeningOnPort;
@@ -37,11 +38,36 @@ var _constants = require("./constants");
37
38
 
38
39
  var _bluebird = _interopRequireDefault(require("bluebird"));
39
40
 
41
+ var _fs2 = _interopRequireDefault(require("fs"));
42
+
40
43
  var _asyncbox = require("asyncbox");
41
44
 
42
- const ROOT_DIR = _path.default.basename(__dirname) === 'lib' ? _path.default.resolve(__dirname, process.env.NO_PRECOMPILE ? '..' : '../..') : __dirname;
43
45
  const PROJECT_FILE = 'project.pbxproj';
44
46
 
47
+ const getModuleRoot = _lodash.default.memoize(function getModuleRoot() {
48
+ let currentDir = _path.default.dirname(_path.default.resolve(__filename));
49
+
50
+ let isAtFsRoot = false;
51
+
52
+ while (!isAtFsRoot) {
53
+ const manifestPath = _path.default.join(currentDir, 'package.json');
54
+
55
+ try {
56
+ if (_fs2.default.existsSync(manifestPath) && JSON.parse(_fs2.default.readFileSync(manifestPath, 'utf8')).name === 'appium-webdriveragent') {
57
+ return currentDir;
58
+ }
59
+ } catch (ign) {}
60
+
61
+ currentDir = _path.default.dirname(currentDir);
62
+ isAtFsRoot = currentDir.length <= _path.default.dirname(currentDir).length;
63
+ }
64
+
65
+ throw new Error('Cannot find the root folder of the appium-webdriveragent Node.js module');
66
+ });
67
+
68
+ const BOOTSTRAP_PATH = getModuleRoot();
69
+ exports.BOOTSTRAP_PATH = BOOTSTRAP_PATH;
70
+
45
71
  async function getPIDsUsingPattern(pattern) {
46
72
  const args = ['-if', pattern];
47
73
 
@@ -249,7 +275,7 @@ function randomInt(low, high) {
249
275
  }
250
276
 
251
277
  async function getWDAUpgradeTimestamp() {
252
- const packageManifest = _path.default.resolve(ROOT_DIR, 'package.json');
278
+ const packageManifest = _path.default.resolve(getModuleRoot(), 'package.json');
253
279
 
254
280
  if (!(await _support.fs.exists(packageManifest))) {
255
281
  return null;
@@ -311,7 +337,5 @@ async function getPIDsListeningOnPort(port, filteringFunc = null) {
311
337
 
312
338
  return await filteringFunc(stdout);
313
339
  });
314
- }require('source-map-support').install();
315
-
316
-
317
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsiUk9PVF9ESVIiLCJwYXRoIiwiYmFzZW5hbWUiLCJfX2Rpcm5hbWUiLCJyZXNvbHZlIiwicHJvY2VzcyIsImVudiIsIk5PX1BSRUNPTVBJTEUiLCJQUk9KRUNUX0ZJTEUiLCJnZXRQSURzVXNpbmdQYXR0ZXJuIiwicGF0dGVybiIsImFyZ3MiLCJzdGRvdXQiLCJleGVjIiwic3BsaXQiLCJtYXAiLCJ4IiwicGFyc2VJbnQiLCJmaWx0ZXIiLCJfIiwiaXNJbnRlZ2VyIiwiZXJyIiwibG9nIiwiZGVidWciLCJqb2luIiwiY29kZSIsImtpbGxBcHBVc2luZ1BhdHRlcm4iLCJwZ3JlcFBhdHRlcm4iLCJzaWduYWxzIiwic2lnbmFsIiwibWF0Y2hlZFBpZHMiLCJpc0VtcHR5IiwibWVzc2FnZSIsImxhc3QiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwicGlkQ2hlY2tQcm9taXNlcyIsInBpZCIsInRoZW4iLCJjYXRjaCIsIkIiLCJhbGwiLCJldmVyeSIsIndhaXRNcyIsImludGVydmFsTXMiLCJpZ24iLCJpc1R2T1MiLCJwbGF0Zm9ybU5hbWUiLCJ0b0xvd2VyIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwicmVwbGFjZUluRmlsZSIsImZpbGUiLCJmaW5kIiwicmVwbGFjZSIsImNvbnRlbnRzIiwiZnMiLCJyZWFkRmlsZSIsIm5ld0NvbnRlbnRzIiwid3JpdGVGaWxlIiwidXBkYXRlUHJvamVjdEZpbGUiLCJhZ2VudFBhdGgiLCJuZXdCdW5kbGVJZCIsInByb2plY3RGaWxlUGF0aCIsImNvcHlGaWxlIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJ3YXJuIiwicmVzZXRQcm9qZWN0RmlsZSIsImV4aXN0cyIsIm12Iiwic2V0UmVhbERldmljZVNlY3VyaXR5Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImdlbmVyYXRlWGNvZGVDb25maWdGaWxlIiwib3JnSWQiLCJzaWduaW5nSWQiLCJ4Y2NvbmZpZ1BhdGgiLCJ0ZW1wRGlyIiwic2V0WGN0ZXN0cnVuRmlsZSIsImRldmljZUluZm8iLCJzZGtWZXJzaW9uIiwiYm9vdHN0cmFwUGF0aCIsIndkYVJlbW90ZVBvcnQiLCJ4Y3Rlc3RydW5GaWxlUGF0aCIsImdldFhjdGVzdHJ1bkZpbGVQYXRoIiwieGN0ZXN0UnVuQ29udGVudCIsInBsaXN0IiwicGFyc2VQbGlzdEZpbGUiLCJ1cGRhdGVXREFQb3J0IiwiZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQiLCJuZXdYY3Rlc3RSdW5Db250ZW50IiwibWVyZ2UiLCJ1cGRhdGVQbGlzdEZpbGUiLCJydW5uZXIiLCJFbnZpcm9ubWVudFZhcmlhYmxlcyIsIlVTRV9QT1JUIiwic2RrQmFzZWQiLCJ1ZGlkIiwicGxhdGZvcm1CYXNlZCIsInBsYXRmb3JtVmVyc2lvbiIsImZpbGVQYXRoIiwidmVyc2lvbiIsImluZm8iLCJvcmlnaW5hbFhjdGVzdHJ1bkZpbGUiLCJnZXRYY3Rlc3RydW5GaWxlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJpc1JlYWxEZXZpY2UiLCJraWxsUHJvY2VzcyIsIm5hbWUiLCJwcm9jIiwiaXNSdW5uaW5nIiwic3RvcCIsImluY2x1ZGVzIiwicmFuZG9tSW50IiwibG93IiwiaGlnaCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImdldFdEQVVwZ3JhZGVUaW1lc3RhbXAiLCJwYWNrYWdlTWFuaWZlc3QiLCJtdGltZSIsInN0YXQiLCJnZXRUaW1lIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwiaXNTaW11bGF0b3IiLCJwcm9jZXNzUGF0dGVybnMiLCJwdXNoIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInBvcnQiLCJmaWx0ZXJpbmdGdW5jIiwicmVzdWx0IiwidHJpbSIsImUiLCJzdGRlcnIiLCJpc0Z1bmN0aW9uIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzLCB0ZW1wRGlyLCBwbGlzdCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBXREFfUlVOTkVSX0JVTkRMRV9JRCwgUExBVEZPUk1fTkFNRV9UVk9TIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgUk9PVF9ESVIgPSBwYXRoLmJhc2VuYW1lKF9fZGlybmFtZSkgPT09ICdsaWInXG4gID8gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgcHJvY2Vzcy5lbnYuTk9fUFJFQ09NUElMRSA/ICcuLicgOiAnLi4vLi4nKVxuICA6IF9fZGlybmFtZTtcbmNvbnN0IFBST0pFQ1RfRklMRSA9ICdwcm9qZWN0LnBieHByb2onO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRQSURzVXNpbmdQYXR0ZXJuIChwYXR0ZXJuKSB7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJy1pZicsIC8vIGNhc2UgaW5zZW5zaXRpdmUsIGZ1bGwgY21kbGluZSBtYXRjaFxuICAgIHBhdHRlcm4sXG4gIF07XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwZ3JlcCcsIGFyZ3MpO1xuICAgIHJldHVybiBzdGRvdXQuc3BsaXQoL1xccysvKVxuICAgICAgLm1hcCgoeCkgPT4gcGFyc2VJbnQoeCwgMTApKVxuICAgICAgLmZpbHRlcihfLmlzSW50ZWdlcilcbiAgICAgIC5tYXAoKHgpID0+IGAke3h9YCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgJ3BncmVwICR7YXJncy5qb2luKCcgJyl9JyBkaWRuJ3QgZGV0ZWN0IGFueSBtYXRjaGluZyBwcm9jZXNzZXMuIFJldHVybiBjb2RlOiAke2Vyci5jb2RlfWApO1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsQXBwVXNpbmdQYXR0ZXJuIChwZ3JlcFBhdHRlcm4pIHtcbiAgY29uc3Qgc2lnbmFscyA9IFsyLCAxNSwgOV07XG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIHNpZ25hbHMpIHtcbiAgICBjb25zdCBtYXRjaGVkUGlkcyA9IGF3YWl0IGdldFBJRHNVc2luZ1BhdHRlcm4ocGdyZXBQYXR0ZXJuKTtcbiAgICBpZiAoXy5pc0VtcHR5KG1hdGNoZWRQaWRzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhcmdzID0gW2AtJHtzaWduYWx9YCwgLi4ubWF0Y2hlZFBpZHNdO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZGVidWcoYGtpbGwgJHthcmdzLmpvaW4oJyAnKX0gLT4gJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKHNpZ25hbCA9PT0gXy5sYXN0KHNpZ25hbHMpKSB7XG4gICAgICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIHdhaXQgYWZ0ZXIgU0lHS0lMTFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBpZENoZWNrUHJvbWlzZXMgPSBtYXRjaGVkUGlkc1xuICAgICAgICAgIC5tYXAoKHBpZCkgPT4gZXhlYygna2lsbCcsIFsnLTAnLCBwaWRdKVxuICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmVcbiAgICAgICAgICAgIC50aGVuKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgaXMgZGVhZFxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHRydWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBCLmFsbChwaWRDaGVja1Byb21pc2VzKSlcbiAgICAgICAgICAuZXZlcnkoKHgpID0+IHggPT09IHRydWUpO1xuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IDEwMDAsXG4gICAgICAgIGludGVydmFsTXM6IDEwMCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgLy8gdHJ5IHRoZSBuZXh0IHNpZ25hbFxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybU5hbWUgaXMgdHZPU1xuICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGxhdG9ybVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybU5hbWUgaXMgdHZPU1xuICovXG5mdW5jdGlvbiBpc1R2T1MgKHBsYXRmb3JtTmFtZSkge1xuICByZXR1cm4gXy50b0xvd2VyKHBsYXRmb3JtTmFtZSkgPT09IF8udG9Mb3dlcihQTEFURk9STV9OQU1FX1RWT1MpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlSW5GaWxlIChmaWxlLCBmaW5kLCByZXBsYWNlKSB7XG4gIGxldCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGUsICd1dGY4Jyk7XG5cbiAgbGV0IG5ld0NvbnRlbnRzID0gY29udGVudHMucmVwbGFjZShmaW5kLCByZXBsYWNlKTtcbiAgaWYgKG5ld0NvbnRlbnRzICE9PSBjb250ZW50cykge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCBuZXdDb250ZW50cywgJ3V0ZjgnKTtcbiAgfVxufVxuXG4vKipcbiAqIFVwZGF0ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBwcm9qZWN0IGJ1bmRsZSBJRCB3aXRoIG5ld0J1bmRsZUlkLlxuICogVGhpcyBtZXRob2QgYXNzdW1lcyBwcm9qZWN0IGZpbGUgaXMgaW4gdGhlIGNvcnJlY3Qgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWdlbnRQYXRoIC0gUGF0aCB0byB0aGUgLnhjb2RlcHJvaiBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3QnVuZGxlSWQgdGhlIG5ldyBidW5kbGUgSUQgdXNlZCB0byB1cGRhdGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByb2plY3RGaWxlIChhZ2VudFBhdGgsIG5ld0J1bmRsZUlkKSB7XG4gIGxldCBwcm9qZWN0RmlsZVBhdGggPSBwYXRoLnJlc29sdmUoYWdlbnRQYXRoLCBQUk9KRUNUX0ZJTEUpO1xuICB0cnkge1xuICAgIC8vIEFzc3VtaW5nIHByb2plY3RGaWxlUGF0aCBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZSwgY3JlYXRlIC5vbGQgZnJvbSBwcm9qZWN0RmlsZVBhdGhcbiAgICBhd2FpdCBmcy5jb3B5RmlsZShwcm9qZWN0RmlsZVBhdGgsIGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCk7XG4gICAgYXdhaXQgcmVwbGFjZUluRmlsZShwcm9qZWN0RmlsZVBhdGgsIG5ldyBSZWdFeHAoXy5lc2NhcGVSZWdFeHAoV0RBX1JVTk5FUl9CVU5ETEVfSUQpLCAnZycpLCBuZXdCdW5kbGVJZCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgICBsb2cuZGVidWcoYFN1Y2Nlc3NmdWxseSB1cGRhdGVkICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYnVuZGxlIGlkICcke25ld0J1bmRsZUlkfSdgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGBFcnJvciB1cGRhdGluZyBwcm9qZWN0IGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byB1cGRhdGUgcHJvamVjdCBmaWxlICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYCArXG4gICAgICBgYnVuZGxlIGlkICcke25ld0J1bmRsZUlkfScuIFdlYkRyaXZlckFnZW50IG1heSBub3Qgc3RhcnRgKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0IFdlYkRyaXZlckFnZW50UnVubmVyIHByb2plY3QgYnVuZGxlIElEIHRvIGNvcnJlY3Qgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWdlbnRQYXRoIC0gUGF0aCB0byB0aGUgLnhjb2RlcHJvaiBkaXJlY3RvcnkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc2V0UHJvamVjdEZpbGUgKGFnZW50UGF0aCkge1xuICBjb25zdCBwcm9qZWN0RmlsZVBhdGggPSBwYXRoLmpvaW4oYWdlbnRQYXRoLCBQUk9KRUNUX0ZJTEUpO1xuICB0cnkge1xuICAgIC8vIHJlc3RvcmUgcHJvamVjdEZpbGVQYXRoIGZyb20gLm9sZCBmaWxlXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYCR7cHJvamVjdEZpbGVQYXRofS5vbGRgKSkge1xuICAgICAgcmV0dXJuOyAvLyBubyBuZWVkIHRvIHJlc2V0XG4gICAgfVxuICAgIGF3YWl0IGZzLm12KGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCwgcHJvamVjdEZpbGVQYXRoKTtcbiAgICBsb2cuZGVidWcoYFN1Y2Nlc3NmdWxseSByZXNldCAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGJ1bmRsZSBpZCAnJHtXREFfUlVOTkVSX0JVTkRMRV9JRH0nYCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3IgcmVzZXR0aW5nIHByb2plY3QgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIHJlc2V0IHByb2plY3QgZmlsZSAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGAgK1xuICAgICAgYGJ1bmRsZSBpZCAnJHtXREFfUlVOTkVSX0JVTkRMRV9JRH0nLiBXZWJEcml2ZXJBZ2VudCBoYXMgYmVlbiBgICtcbiAgICAgIGBtb2RpZmllZCBhbmQgbm90IHJldHVybmVkIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRSZWFsRGV2aWNlU2VjdXJpdHkgKGtleWNoYWluUGF0aCwga2V5Y2hhaW5QYXNzd29yZCkge1xuICBsb2cuZGVidWcoJ1NldHRpbmcgc2VjdXJpdHkgZm9yIGlPUyBkZXZpY2UnKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJy12JywgJ2xpc3Qta2V5Y2hhaW5zJywgJy1zJywga2V5Y2hhaW5QYXRoXSk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWyctdicsICd1bmxvY2sta2V5Y2hhaW4nLCAnLXAnLCBrZXljaGFpblBhc3N3b3JkLCBrZXljaGFpblBhdGhdKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJ3NldC1rZXljaGFpbi1zZXR0aW5ncycsICctdCcsICczNjAwJywgJy1sJywga2V5Y2hhaW5QYXRoXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlWGNvZGVDb25maWdGaWxlIChvcmdJZCwgc2lnbmluZ0lkKSB7XG4gIGxvZy5kZWJ1ZyhgR2VuZXJhdGluZyB4Y29kZSBjb25maWcgZmlsZSBmb3Igb3JnSWQgJyR7b3JnSWR9JyBhbmQgc2lnbmluZ0lkIGAgK1xuICAgICAgICAgICAgYCcke3NpZ25pbmdJZH0nYCk7XG4gIGNvbnN0IGNvbnRlbnRzID0gYERFVkVMT1BNRU5UX1RFQU0gPSAke29yZ0lkfVxuQ09ERV9TSUdOX0lERU5USVRZID0gJHtzaWduaW5nSWR9XG5gO1xuICBjb25zdCB4Y2NvbmZpZ1BhdGggPSBhd2FpdCB0ZW1wRGlyLnBhdGgoJ2FwcGl1bS10ZW1wLnhjY29uZmlnJyk7XG4gIGxvZy5kZWJ1ZyhgV3JpdGluZyB4Y29kZSBjb25maWcgZmlsZSB0byAke3hjY29uZmlnUGF0aH1gKTtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKHhjY29uZmlnUGF0aCwgY29udGVudHMsICd1dGY4Jyk7XG4gIHJldHVybiB4Y2NvbmZpZ1BhdGg7XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaXNSZWFsRGV2aWNlIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIGN1cnJlbnQgZGV2aWNlIGlzIGEgcmVhbCBkZXZpY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1ZGlkIC0gVGhlIGRldmljZSBVRElELlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXRmb3JtVmVyc2lvbiAtIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIG9mIE9TLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXRmb3JtTmFtZSAtIFRoZSBwbGF0Zm9ybSBuYW1lIG9mIGlPUywgdHZPU1xuKi9cbi8qKlxuICogQ3JlYXRlcyB4Y3Rlc3RydW4gZmlsZSBwZXIgZGV2aWNlICYgcGxhdGZvcm0gdmVyc2lvbi5cbiAqIFdlIGV4cGVjdHMgdG8gaGF2ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVvcyR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LWFybTY0LnhjdGVzdHJ1biBmb3IgcmVhbCBkZXZpY2VcbiAqIGFuZCBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVzaW11bGF0b3Ike3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS14ODZfNjQueGN0ZXN0cnVuIGZvciBzaW11bGF0b3IgbG9jYXRlZCBAYm9vdHN0cmFwUGF0aFxuICogTmV3ZXIgWGNvZGUgKFhjb2RlIDEwLjAgYXQgbGVhc3QpIGdlbmVyYXRlIHhjdGVzdHJ1biBmaWxlIGZvbGxvd2luZyBzZGtWZXJzaW9uLlxuICogZS5nLiBYY29kZSB3aGljaCBoYXMgaU9TIFNESyBWZXJzaW9uIDEyLjIgZ2VuZXJhdGUgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yLjIteDg2XzY0LnhjdGVzdHJ1blxuICogICAgICBldmVuIGlmIHRoZSBjYXAgaGFzIHBsYXRmb3JtIHZlcnNpb24gMTEuNFxuICpcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHNka1ZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9vdHN0cmFwUGF0aCAtIFRoZSBmb2xkZXIgcGF0aCBjb250YWluaW5nIHhjdGVzdHJ1biBmaWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IHdkYVJlbW90ZVBvcnQgLSBUaGUgcmVtb3RlIHBvcnQgV0RBIGlzIGxpc3RlbmluZyBvbi5cbiAqIEByZXR1cm4ge3N0cmluZ30gcmV0dXJucyB4Y3Rlc3RydW5GaWxlUGF0aCBmb3IgZ2l2ZW4gZGV2aWNlXG4gKiBAdGhyb3dzIGlmIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZW9zJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0tYXJtNjQueGN0ZXN0cnVuIGZvciByZWFsIGRldmljZVxuICogb3IgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0teDg2XzY0LnhjdGVzdHJ1biBmb3Igc2ltdWxhdG9yIGlzIG5vdCBmb3VuZCBAYm9vdHN0cmFwUGF0aCxcbiAqIHRoZW4gaXQgd2lsbCB0aHJvdyBmaWxlIG5vdCBmb3VuZCBleGNlcHRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0WGN0ZXN0cnVuRmlsZSAoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCwgd2RhUmVtb3RlUG9ydCkge1xuICBjb25zdCB4Y3Rlc3RydW5GaWxlUGF0aCA9IGF3YWl0IGdldFhjdGVzdHJ1bkZpbGVQYXRoKGRldmljZUluZm8sIHNka1ZlcnNpb24sIGJvb3RzdHJhcFBhdGgpO1xuICBjb25zdCB4Y3Rlc3RSdW5Db250ZW50ID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUoeGN0ZXN0cnVuRmlsZVBhdGgpO1xuICBjb25zdCB1cGRhdGVXREFQb3J0ID0gZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQoZGV2aWNlSW5mby5wbGF0Zm9ybU5hbWUsIHdkYVJlbW90ZVBvcnQpO1xuICBjb25zdCBuZXdYY3Rlc3RSdW5Db250ZW50ID0gXy5tZXJnZSh4Y3Rlc3RSdW5Db250ZW50LCB1cGRhdGVXREFQb3J0KTtcbiAgYXdhaXQgcGxpc3QudXBkYXRlUGxpc3RGaWxlKHhjdGVzdHJ1bkZpbGVQYXRoLCBuZXdYY3Rlc3RSdW5Db250ZW50LCB0cnVlKTtcblxuICByZXR1cm4geGN0ZXN0cnVuRmlsZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBXREEgb2JqZWN0IHdoaWNoIGFwcGVuZHMgZXhpc3RpbmcgeGN0ZXN0IHJ1bm5lciBjb250ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhdGZvcm1OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtXG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEByZXR1cm4ge29iamVjdH0gcmV0dXJucyBhIHJ1bm5lciBvYmplY3Qgd2hpY2ggaGFzIFVTRV9QT1JUXG4gKi9cbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxSdW5Db250ZW50IChwbGF0Zm9ybU5hbWUsIHdkYVJlbW90ZVBvcnQpIHtcbiAgY29uc3QgcnVubmVyID0gYFdlYkRyaXZlckFnZW50UnVubmVyJHtpc1R2T1MocGxhdGZvcm1OYW1lKSA/ICdfdHZPUycgOiAnJ31gO1xuXG4gIHJldHVybiB7XG4gICAgW3J1bm5lcl06IHtcbiAgICAgIEVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgIC8vIFVTRV9QT1JUIG11c3QgYmUgJ3N0cmluZydcbiAgICAgICAgVVNFX1BPUlQ6IGAke3dkYVJlbW90ZVBvcnR9YFxuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHBhdGggb2YgeGN0ZXN0cnVuIGlmIGl0IGV4aXN0c1xuICogQHBhcmFtIHtEZXZpY2VJbmZvfSBkZXZpY2VJbmZvXG4gKiBAcGFyYW0ge3N0cmluZ30gc2RrVmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBib290c3RyYXBQYXRoIC0gVGhlIGZvbGRlciBwYXRoIGNvbnRhaW5pbmcgeGN0ZXN0cnVuIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFhjdGVzdHJ1bkZpbGVQYXRoIChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoKSB7XG4gIC8vIEZpcnN0IHRyeSB0aGUgU0RLIHBhdGgsIGZvciBYY29kZSAxMCAoYXQgbGVhc3QpXG4gIGNvbnN0IHNka0Jhc2VkID0gW1xuICAgIHBhdGgucmVzb2x2ZShib290c3RyYXBQYXRoLCBgJHtkZXZpY2VJbmZvLnVkaWR9XyR7c2RrVmVyc2lvbn0ueGN0ZXN0cnVuYCksXG4gICAgc2RrVmVyc2lvbixcbiAgXTtcbiAgLy8gTmV4dCB0cnkgUGxhdGZvcm0gcGF0aCwgZm9yIGVhcmxpZXIgWGNvZGUgdmVyc2lvbnNcbiAgY29uc3QgcGxhdGZvcm1CYXNlZCA9IFtcbiAgICBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgYCR7ZGV2aWNlSW5mby51ZGlkfV8ke2RldmljZUluZm8ucGxhdGZvcm1WZXJzaW9ufS54Y3Rlc3RydW5gKSxcbiAgICBkZXZpY2VJbmZvLnBsYXRmb3JtVmVyc2lvbixcbiAgXTtcblxuICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgdmVyc2lvbl0gb2YgW3Nka0Jhc2VkLCBwbGF0Zm9ybUJhc2VkXSkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICBsb2cuaW5mbyhgVXNpbmcgJyR7ZmlsZVBhdGh9JyBhcyB4Y3Rlc3RydW4gZmlsZWApO1xuICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5hbFhjdGVzdHJ1bkZpbGUgPSBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUoZGV2aWNlSW5mbywgdmVyc2lvbikpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMob3JpZ2luYWxYY3Rlc3RydW5GaWxlKSkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBmaXJzdCB0aW1lIHJ1biBmb3IgZ2l2ZW4gZGV2aWNlLCB0aGVuIGZpcnN0IGdlbmVyYXRlIHhjdGVzdHJ1biBmaWxlIGZvciBkZXZpY2UuXG4gICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgYSB4Y3Rlc3RydW4gZmlsZSAqKnBlciBkZXZpY2UqKiBiZWNhdXNlIHdlIGNhbnQgbm90IGhhdmUgc2FtZSB3ZGEgcG9ydCBmb3IgYWxsIGRldmljZXMuXG4gICAgICBhd2FpdCBmcy5jb3B5RmlsZShvcmlnaW5hbFhjdGVzdHJ1bkZpbGUsIGZpbGVQYXRoKTtcbiAgICAgIGxvZy5pbmZvKGBVc2luZyAnJHtmaWxlUGF0aH0nIGFzIHhjdGVzdHJ1biBmaWxlIGNvcGllZCBieSAnJHtvcmlnaW5hbFhjdGVzdHJ1bkZpbGV9J2ApO1xuICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgfVxuXG4gIGxvZy5lcnJvckFuZFRocm93KGBJZiB5b3UgYXJlIHVzaW5nICd1c2VYY3Rlc3RydW5GaWxlJyBjYXBhYmlsaXR5IHRoZW4geW91IGAgK1xuICAgIGBuZWVkIHRvIGhhdmUgYSB4Y3Rlc3RydW4gZmlsZSAoZXhwZWN0ZWQ6IGAgK1xuICAgIGAnJHtwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUoZGV2aWNlSW5mbywgc2RrVmVyc2lvbikpfScpYCk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIG5hbWUgb2YgeGN0ZXN0cnVuIGZpbGVcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJldHVybnMgeGN0ZXN0cnVuRmlsZVBhdGggZm9yIGdpdmVuIGRldmljZVxuICovXG5mdW5jdGlvbiBnZXRYY3Rlc3RydW5GaWxlTmFtZSAoZGV2aWNlSW5mbywgdmVyc2lvbikge1xuICByZXR1cm4gaXNUdk9TKGRldmljZUluZm8ucGxhdGZvcm1OYW1lKVxuICAgID8gYFdlYkRyaXZlckFnZW50UnVubmVyX3R2T1NfYXBwbGV0diR7ZGV2aWNlSW5mby5pc1JlYWxEZXZpY2UgPyBgb3Mke3ZlcnNpb259LWFybTY0YCA6IGBzaW11bGF0b3Ike3ZlcnNpb259LXg4Nl82NGB9LnhjdGVzdHJ1bmBcbiAgICA6IGBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmUke2RldmljZUluZm8uaXNSZWFsRGV2aWNlID8gYG9zJHt2ZXJzaW9ufS1hcm02NGAgOiBgc2ltdWxhdG9yJHt2ZXJzaW9ufS14ODZfNjRgfS54Y3Rlc3RydW5gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsUHJvY2VzcyAobmFtZSwgcHJvYykge1xuICBpZiAoIXByb2MgfHwgIXByb2MuaXNSdW5uaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nLmluZm8oYFNodXR0aW5nIGRvd24gJyR7bmFtZX0nIHByb2Nlc3MgKHBpZCAnJHtwcm9jLnByb2MucGlkfScpYCk7XG5cbiAgbG9nLmluZm8oYFNlbmRpbmcgJ1NJR1RFUk0nLi4uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvYy5zdG9wKCdTSUdURVJNJywgMTAwMCk7XG4gICAgcmV0dXJuO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKGBQcm9jZXNzIGRpZG4ndCBlbmQgYWZ0ZXJgKSkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYCR7bmFtZX0gcHJvY2VzcyBkaWQgbm90IGVuZCBpbiBhIHRpbWVseSBmYXNoaW9uOiAnJHtlcnIubWVzc2FnZX0nLmApO1xuICB9XG5cbiAgbG9nLmluZm8oYFNlbmRpbmcgJ1NJR0tJTEwnLi4uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvYy5zdG9wKCdTSUdLSUxMJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnbm90IGN1cnJlbnRseSBydW5uaW5nJykpIHtcbiAgICAgIC8vIHRoZSBwcm9jZXNzIGVuZGVkIGJ1dCBmb3Igc29tZSByZWFzb24gd2Ugd2VyZSBub3QgaW5mb3JtZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gaW50ZWdlci5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGluIHJhbmdlIFtsb3csIGhpZ2h0KS4gYGxvd2BgIGlzIGluY2x1c2l2ZSBhbmQgYGhpZ2hgIGlzIGV4Y2x1c2l2ZS5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tSW50IChsb3csIGhpZ2gpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSArIGxvdyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIFdEQSB1cGdyYWRlIHRpbWVzdGFtcFxuICpcbiAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBVTklYIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZSBtYW5pZmVzdC4gVGhlIG1hbmlmZXN0IG9ubHkgZ2V0cyBtb2RpZmllZCBvblxuICogcGFja2FnZSB1cGdyYWRlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRXREFVcGdyYWRlVGltZXN0YW1wICgpIHtcbiAgY29uc3QgcGFja2FnZU1hbmlmZXN0ID0gcGF0aC5yZXNvbHZlKFJPT1RfRElSLCAncGFja2FnZS5qc29uJyk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHBhY2thZ2VNYW5pZmVzdCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7bXRpbWV9ID0gYXdhaXQgZnMuc3RhdChwYWNrYWdlTWFuaWZlc3QpO1xuICByZXR1cm4gbXRpbWUuZ2V0VGltZSgpO1xufVxuXG4vKipcbiAqIEtpbGxzIHJ1bm5pbmcgWENUZXN0IHByb2Nlc3NlcyBmb3IgdGhlIHBhcnRpY3VsYXIgZGV2aWNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1ZGlkIC0gVGhlIGRldmljZSBVRElELlxuICogQHBhcmFtIHtib29sZWFufSBpc1NpbXVsYXRvciAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSBjdXJyZW50IGRldmljZSBpcyBhIFNpbXVsYXRvclxuICovXG5hc3luYyBmdW5jdGlvbiByZXNldFRlc3RQcm9jZXNzZXMgKHVkaWQsIGlzU2ltdWxhdG9yKSB7XG4gIGNvbnN0IHByb2Nlc3NQYXR0ZXJucyA9IFtgeGNvZGVidWlsZC4qJHt1ZGlkfWBdO1xuICBpZiAoaXNTaW11bGF0b3IpIHtcbiAgICBwcm9jZXNzUGF0dGVybnMucHVzaChgJHt1ZGlkfS4qWENUUnVubmVyYCk7XG4gICAgLy8gVGhlIHBhdHRlcm4gdG8gZmluZCBpbiBjYXNlIGlkYiB3YXMgdXNlZFxuICAgIHByb2Nlc3NQYXR0ZXJucy5wdXNoKGB4Y3Rlc3QuKiR7dWRpZH1gKTtcbiAgfVxuICBsb2cuZGVidWcoYEtpbGxpbmcgcnVubmluZyBwcm9jZXNzZXMgJyR7cHJvY2Vzc1BhdHRlcm5zLmpvaW4oJywgJyl9JyBmb3IgdGhlIGRldmljZSAke3VkaWR9Li4uYCk7XG4gIGF3YWl0IEIuYWxsKHByb2Nlc3NQYXR0ZXJucy5tYXAoa2lsbEFwcFVzaW5nUGF0dGVybikpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgSURzIG9mIHByb2Nlc3NlcyBsaXN0ZW5pbmcgb24gdGhlIHBhcnRpY3VsYXIgc3lzdGVtIHBvcnQuXG4gKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGFwcGx5IGFkZGl0aW9uYWwgZmlsdGVyaW5nIGJhc2VkIG9uIHRoZVxuICogcHJvY2VzcyBjb21tYW5kIGxpbmUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBwb3J0IC0gVGhlIHBvcnQgbnVtYmVyLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGZpbHRlcmluZ0Z1bmMgLSBPcHRpb25hbCBsYW1iZGEgZnVuY3Rpb24sIHdoaWNoXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVzIGNvbW1hbmQgbGluZSBzdHJpbmcgb2YgdGhlIHBhcnRpY3VsYXIgcHJvY2Vzc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5pbmcgb24gZ2l2ZW4gcG9ydCwgYW5kIGlzIGV4cGVjdGVkIHRvIHJldHVyblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlaXRoZXIgdHJ1ZSBvciBmYWxzZSB0byBpbmNsdWRlL2V4Y2x1ZGUgdGhlIGNvcnJlc3BvbmRpbmcgUElEXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHJlc3VsdGluZyBhcnJheS5cbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSAtIHRoZSBsaXN0IG9mIG1hdGNoZWQgcHJvY2VzcyBpZHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBJRHNMaXN0ZW5pbmdPblBvcnQgKHBvcnQsIGZpbHRlcmluZ0Z1bmMgPSBudWxsKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICB0cnkge1xuICAgIC8vIFRoaXMgb25seSB3b3JrcyBzaW5jZSBNYWMgT1MgWCBFbCBDYXBpdGFuXG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdsc29mJywgWyctdGknLCBgdGNwOiR7cG9ydH1gXSk7XG4gICAgcmVzdWx0LnB1c2goLi4uKHN0ZG91dC50cmltKCkuc3BsaXQoL1xcbisvKSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUuY29kZSAhPT0gMSkge1xuICAgICAgLy8gY29kZSAxIG1lYW5zIG5vIHByb2Nlc3Nlcy4gT3RoZXIgZXJyb3JzIG5lZWQgcmVwb3J0aW5nXG4gICAgICBsb2cuZGVidWcoYEVycm9yIGdldHRpbmcgcHJvY2Vzc2VzIGxpc3RlbmluZyBvbiBwb3J0ICcke3BvcnR9JzogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoIV8uaXNGdW5jdGlvbihmaWx0ZXJpbmdGdW5jKSkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IEIuZmlsdGVyKHJlc3VsdCwgYXN5bmMgKHBpZCkgPT4ge1xuICAgIGxldCBzdGRvdXQ7XG4gICAgdHJ5IHtcbiAgICAgICh7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3BzJywgWyctcCcsIHBpZCwgJy1vJywgJ2NvbW1hbmQnXSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLmNvZGUgPT09IDEpIHtcbiAgICAgICAgLy8gVGhlIHByb2Nlc3MgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgdGhlcmUncyBub3RoaW5nIHRvIGZpbHRlclxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgZmlsdGVyaW5nRnVuYyhzdGRvdXQpO1xuICB9KTtcbn1cblxuZXhwb3J0IHsgdXBkYXRlUHJvamVjdEZpbGUsIHJlc2V0UHJvamVjdEZpbGUsIHNldFJlYWxEZXZpY2VTZWN1cml0eSxcbiAgZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQsIGdldFhjdGVzdHJ1bkZpbGVOYW1lLCBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSxcbiAgc2V0WGN0ZXN0cnVuRmlsZSwgZ2V0WGN0ZXN0cnVuRmlsZVBhdGgsIGtpbGxQcm9jZXNzLCByYW5kb21JbnQsXG4gIGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAsIHJlc2V0VGVzdFByb2Nlc3NlcyxcbiAgZ2V0UElEc0xpc3RlbmluZ09uUG9ydCwga2lsbEFwcFVzaW5nUGF0dGVybiwgaXNUdk9TLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVB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
340
+ }
341
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQUk9KRUNUX0ZJTEUiLCJnZXRNb2R1bGVSb290IiwiXyIsIm1lbW9pemUiLCJjdXJyZW50RGlyIiwicGF0aCIsImRpcm5hbWUiLCJyZXNvbHZlIiwiX19maWxlbmFtZSIsImlzQXRGc1Jvb3QiLCJtYW5pZmVzdFBhdGgiLCJqb2luIiwiX2ZzIiwiZXhpc3RzU3luYyIsIkpTT04iLCJwYXJzZSIsInJlYWRGaWxlU3luYyIsIm5hbWUiLCJpZ24iLCJsZW5ndGgiLCJFcnJvciIsIkJPT1RTVFJBUF9QQVRIIiwiZ2V0UElEc1VzaW5nUGF0dGVybiIsInBhdHRlcm4iLCJhcmdzIiwic3Rkb3V0IiwiZXhlYyIsInNwbGl0IiwibWFwIiwieCIsInBhcnNlSW50IiwiZmlsdGVyIiwiaXNJbnRlZ2VyIiwiZXJyIiwibG9nIiwiZGVidWciLCJjb2RlIiwia2lsbEFwcFVzaW5nUGF0dGVybiIsInBncmVwUGF0dGVybiIsInNpZ25hbHMiLCJzaWduYWwiLCJtYXRjaGVkUGlkcyIsImlzRW1wdHkiLCJtZXNzYWdlIiwibGFzdCIsIndhaXRGb3JDb25kaXRpb24iLCJwaWRDaGVja1Byb21pc2VzIiwicGlkIiwidGhlbiIsImNhdGNoIiwiQiIsImFsbCIsImV2ZXJ5Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImlzVHZPUyIsInBsYXRmb3JtTmFtZSIsInRvTG93ZXIiLCJQTEFURk9STV9OQU1FX1RWT1MiLCJyZXBsYWNlSW5GaWxlIiwiZmlsZSIsImZpbmQiLCJyZXBsYWNlIiwiY29udGVudHMiLCJmcyIsInJlYWRGaWxlIiwibmV3Q29udGVudHMiLCJ3cml0ZUZpbGUiLCJ1cGRhdGVQcm9qZWN0RmlsZSIsImFnZW50UGF0aCIsIm5ld0J1bmRsZUlkIiwicHJvamVjdEZpbGVQYXRoIiwiY29weUZpbGUiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIndhcm4iLCJyZXNldFByb2plY3RGaWxlIiwiZXhpc3RzIiwibXYiLCJzZXRSZWFsRGV2aWNlU2VjdXJpdHkiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwiZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUiLCJvcmdJZCIsInNpZ25pbmdJZCIsInhjY29uZmlnUGF0aCIsInRlbXBEaXIiLCJzZXRYY3Rlc3RydW5GaWxlIiwiZGV2aWNlSW5mbyIsInNka1ZlcnNpb24iLCJib290c3RyYXBQYXRoIiwid2RhUmVtb3RlUG9ydCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwiZ2V0WGN0ZXN0cnVuRmlsZVBhdGgiLCJ4Y3Rlc3RSdW5Db250ZW50IiwicGxpc3QiLCJwYXJzZVBsaXN0RmlsZSIsInVwZGF0ZVdEQVBvcnQiLCJnZXRBZGRpdGlvbmFsUnVuQ29udGVudCIsIm5ld1hjdGVzdFJ1bkNvbnRlbnQiLCJtZXJnZSIsInVwZGF0ZVBsaXN0RmlsZSIsInJ1bm5lciIsIkVudmlyb25tZW50VmFyaWFibGVzIiwiVVNFX1BPUlQiLCJzZGtCYXNlZCIsInVkaWQiLCJwbGF0Zm9ybUJhc2VkIiwicGxhdGZvcm1WZXJzaW9uIiwiZmlsZVBhdGgiLCJ2ZXJzaW9uIiwiaW5mbyIsIm9yaWdpbmFsWGN0ZXN0cnVuRmlsZSIsImdldFhjdGVzdHJ1bkZpbGVOYW1lIiwiZXJyb3JBbmRUaHJvdyIsImlzUmVhbERldmljZSIsImtpbGxQcm9jZXNzIiwicHJvYyIsImlzUnVubmluZyIsInN0b3AiLCJpbmNsdWRlcyIsInJhbmRvbUludCIsImxvdyIsImhpZ2giLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwicGFja2FnZU1hbmlmZXN0IiwibXRpbWUiLCJzdGF0IiwiZ2V0VGltZSIsInJlc2V0VGVzdFByb2Nlc3NlcyIsImlzU2ltdWxhdG9yIiwicHJvY2Vzc1BhdHRlcm5zIiwicHVzaCIsImdldFBJRHNMaXN0ZW5pbmdPblBvcnQiLCJwb3J0IiwiZmlsdGVyaW5nRnVuYyIsInJlc3VsdCIsInRyaW0iLCJlIiwic3RkZXJyIiwiaXNGdW5jdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgdGVtcERpciwgcGxpc3QgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFBMQVRGT1JNX05BTUVfVFZPUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgUFJPSkVDVF9GSUxFID0gJ3Byb2plY3QucGJ4cHJvaic7XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcGF0aCB0byB0aGUgY3VycmVudCBtb2R1bGUncyByb290IGZvbGRlclxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gbW9kdWxlIHJvb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY3VycmVudCBtb2R1bGUgcm9vdCBmb2xkZXIgY2Fubm90IGJlIGRldGVybWluZWRcbiAqL1xuY29uc3QgZ2V0TW9kdWxlUm9vdCA9IF8ubWVtb2l6ZShmdW5jdGlvbiBnZXRNb2R1bGVSb290ICgpIHtcbiAgbGV0IGN1cnJlbnREaXIgPSBwYXRoLmRpcm5hbWUocGF0aC5yZXNvbHZlKF9fZmlsZW5hbWUpKTtcbiAgbGV0IGlzQXRGc1Jvb3QgPSBmYWxzZTtcbiAgd2hpbGUgKCFpc0F0RnNSb290KSB7XG4gICAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgaWYgKF9mcy5leGlzdHNTeW5jKG1hbmlmZXN0UGF0aCkgJiZcbiAgICAgICAgICBKU09OLnBhcnNlKF9mcy5yZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCAndXRmOCcpKS5uYW1lID09PSAnYXBwaXVtLXdlYmRyaXZlcmFnZW50Jykge1xuICAgICAgICByZXR1cm4gY3VycmVudERpcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgY3VycmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgICBpc0F0RnNSb290ID0gY3VycmVudERpci5sZW5ndGggPD0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpLmxlbmd0aDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIHRoZSByb290IGZvbGRlciBvZiB0aGUgYXBwaXVtLXdlYmRyaXZlcmFnZW50IE5vZGUuanMgbW9kdWxlJyk7XG59KTtcblxuZXhwb3J0IGNvbnN0IEJPT1RTVFJBUF9QQVRIID0gZ2V0TW9kdWxlUm9vdCgpO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRQSURzVXNpbmdQYXR0ZXJuIChwYXR0ZXJuKSB7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJy1pZicsIC8vIGNhc2UgaW5zZW5zaXRpdmUsIGZ1bGwgY21kbGluZSBtYXRjaFxuICAgIHBhdHRlcm4sXG4gIF07XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwZ3JlcCcsIGFyZ3MpO1xuICAgIHJldHVybiBzdGRvdXQuc3BsaXQoL1xccysvKVxuICAgICAgLm1hcCgoeCkgPT4gcGFyc2VJbnQoeCwgMTApKVxuICAgICAgLmZpbHRlcihfLmlzSW50ZWdlcilcbiAgICAgIC5tYXAoKHgpID0+IGAke3h9YCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgJ3BncmVwICR7YXJncy5qb2luKCcgJyl9JyBkaWRuJ3QgZGV0ZWN0IGFueSBtYXRjaGluZyBwcm9jZXNzZXMuIFJldHVybiBjb2RlOiAke2Vyci5jb2RlfWApO1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsQXBwVXNpbmdQYXR0ZXJuIChwZ3JlcFBhdHRlcm4pIHtcbiAgY29uc3Qgc2lnbmFscyA9IFsyLCAxNSwgOV07XG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIHNpZ25hbHMpIHtcbiAgICBjb25zdCBtYXRjaGVkUGlkcyA9IGF3YWl0IGdldFBJRHNVc2luZ1BhdHRlcm4ocGdyZXBQYXR0ZXJuKTtcbiAgICBpZiAoXy5pc0VtcHR5KG1hdGNoZWRQaWRzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhcmdzID0gW2AtJHtzaWduYWx9YCwgLi4ubWF0Y2hlZFBpZHNdO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZGVidWcoYGtpbGwgJHthcmdzLmpvaW4oJyAnKX0gLT4gJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKHNpZ25hbCA9PT0gXy5sYXN0KHNpZ25hbHMpKSB7XG4gICAgICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIHdhaXQgYWZ0ZXIgU0lHS0lMTFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBpZENoZWNrUHJvbWlzZXMgPSBtYXRjaGVkUGlkc1xuICAgICAgICAgIC5tYXAoKHBpZCkgPT4gZXhlYygna2lsbCcsIFsnLTAnLCBwaWRdKVxuICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmVcbiAgICAgICAgICAgIC50aGVuKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgaXMgZGVhZFxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHRydWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBCLmFsbChwaWRDaGVja1Byb21pc2VzKSlcbiAgICAgICAgICAuZXZlcnkoKHgpID0+IHggPT09IHRydWUpO1xuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IDEwMDAsXG4gICAgICAgIGludGVydmFsTXM6IDEwMCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgLy8gdHJ5IHRoZSBuZXh0IHNpZ25hbFxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybU5hbWUgaXMgdHZPU1xuICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGxhdG9ybVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybU5hbWUgaXMgdHZPU1xuICovXG5mdW5jdGlvbiBpc1R2T1MgKHBsYXRmb3JtTmFtZSkge1xuICByZXR1cm4gXy50b0xvd2VyKHBsYXRmb3JtTmFtZSkgPT09IF8udG9Mb3dlcihQTEFURk9STV9OQU1FX1RWT1MpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlSW5GaWxlIChmaWxlLCBmaW5kLCByZXBsYWNlKSB7XG4gIGxldCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGUsICd1dGY4Jyk7XG5cbiAgbGV0IG5ld0NvbnRlbnRzID0gY29udGVudHMucmVwbGFjZShmaW5kLCByZXBsYWNlKTtcbiAgaWYgKG5ld0NvbnRlbnRzICE9PSBjb250ZW50cykge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCBuZXdDb250ZW50cywgJ3V0ZjgnKTtcbiAgfVxufVxuXG4vKipcbiAqIFVwZGF0ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBwcm9qZWN0IGJ1bmRsZSBJRCB3aXRoIG5ld0J1bmRsZUlkLlxuICogVGhpcyBtZXRob2QgYXNzdW1lcyBwcm9qZWN0IGZpbGUgaXMgaW4gdGhlIGNvcnJlY3Qgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWdlbnRQYXRoIC0gUGF0aCB0byB0aGUgLnhjb2RlcHJvaiBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3QnVuZGxlSWQgdGhlIG5ldyBidW5kbGUgSUQgdXNlZCB0byB1cGRhdGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByb2plY3RGaWxlIChhZ2VudFBhdGgsIG5ld0J1bmRsZUlkKSB7XG4gIGxldCBwcm9qZWN0RmlsZVBhdGggPSBwYXRoLnJlc29sdmUoYWdlbnRQYXRoLCBQUk9KRUNUX0ZJTEUpO1xuICB0cnkge1xuICAgIC8vIEFzc3VtaW5nIHByb2plY3RGaWxlUGF0aCBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZSwgY3JlYXRlIC5vbGQgZnJvbSBwcm9qZWN0RmlsZVBhdGhcbiAgICBhd2FpdCBmcy5jb3B5RmlsZShwcm9qZWN0RmlsZVBhdGgsIGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCk7XG4gICAgYXdhaXQgcmVwbGFjZUluRmlsZShwcm9qZWN0RmlsZVBhdGgsIG5ldyBSZWdFeHAoXy5lc2NhcGVSZWdFeHAoV0RBX1JVTk5FUl9CVU5ETEVfSUQpLCAnZycpLCBuZXdCdW5kbGVJZCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgICBsb2cuZGVidWcoYFN1Y2Nlc3NmdWxseSB1cGRhdGVkICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYnVuZGxlIGlkICcke25ld0J1bmRsZUlkfSdgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGBFcnJvciB1cGRhdGluZyBwcm9qZWN0IGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byB1cGRhdGUgcHJvamVjdCBmaWxlICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYCArXG4gICAgICBgYnVuZGxlIGlkICcke25ld0J1bmRsZUlkfScuIFdlYkRyaXZlckFnZW50IG1heSBub3Qgc3RhcnRgKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0IFdlYkRyaXZlckFnZW50UnVubmVyIHByb2plY3QgYnVuZGxlIElEIHRvIGNvcnJlY3Qgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWdlbnRQYXRoIC0gUGF0aCB0byB0aGUgLnhjb2RlcHJvaiBkaXJlY3RvcnkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc2V0UHJvamVjdEZpbGUgKGFnZW50UGF0aCkge1xuICBjb25zdCBwcm9qZWN0RmlsZVBhdGggPSBwYXRoLmpvaW4oYWdlbnRQYXRoLCBQUk9KRUNUX0ZJTEUpO1xuICB0cnkge1xuICAgIC8vIHJlc3RvcmUgcHJvamVjdEZpbGVQYXRoIGZyb20gLm9sZCBmaWxlXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYCR7cHJvamVjdEZpbGVQYXRofS5vbGRgKSkge1xuICAgICAgcmV0dXJuOyAvLyBubyBuZWVkIHRvIHJlc2V0XG4gICAgfVxuICAgIGF3YWl0IGZzLm12KGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCwgcHJvamVjdEZpbGVQYXRoKTtcbiAgICBsb2cuZGVidWcoYFN1Y2Nlc3NmdWxseSByZXNldCAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGJ1bmRsZSBpZCAnJHtXREFfUlVOTkVSX0JVTkRMRV9JRH0nYCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3IgcmVzZXR0aW5nIHByb2plY3QgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIHJlc2V0IHByb2plY3QgZmlsZSAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGAgK1xuICAgICAgYGJ1bmRsZSBpZCAnJHtXREFfUlVOTkVSX0JVTkRMRV9JRH0nLiBXZWJEcml2ZXJBZ2VudCBoYXMgYmVlbiBgICtcbiAgICAgIGBtb2RpZmllZCBhbmQgbm90IHJldHVybmVkIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRSZWFsRGV2aWNlU2VjdXJpdHkgKGtleWNoYWluUGF0aCwga2V5Y2hhaW5QYXNzd29yZCkge1xuICBsb2cuZGVidWcoJ1NldHRpbmcgc2VjdXJpdHkgZm9yIGlPUyBkZXZpY2UnKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJy12JywgJ2xpc3Qta2V5Y2hhaW5zJywgJy1zJywga2V5Y2hhaW5QYXRoXSk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWyctdicsICd1bmxvY2sta2V5Y2hhaW4nLCAnLXAnLCBrZXljaGFpblBhc3N3b3JkLCBrZXljaGFpblBhdGhdKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJ3NldC1rZXljaGFpbi1zZXR0aW5ncycsICctdCcsICczNjAwJywgJy1sJywga2V5Y2hhaW5QYXRoXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlWGNvZGVDb25maWdGaWxlIChvcmdJZCwgc2lnbmluZ0lkKSB7XG4gIGxvZy5kZWJ1ZyhgR2VuZXJhdGluZyB4Y29kZSBjb25maWcgZmlsZSBmb3Igb3JnSWQgJyR7b3JnSWR9JyBhbmQgc2lnbmluZ0lkIGAgK1xuICAgICAgICAgICAgYCcke3NpZ25pbmdJZH0nYCk7XG4gIGNvbnN0IGNvbnRlbnRzID0gYERFVkVMT1BNRU5UX1RFQU0gPSAke29yZ0lkfVxuQ09ERV9TSUdOX0lERU5USVRZID0gJHtzaWduaW5nSWR9XG5gO1xuICBjb25zdCB4Y2NvbmZpZ1BhdGggPSBhd2FpdCB0ZW1wRGlyLnBhdGgoJ2FwcGl1bS10ZW1wLnhjY29uZmlnJyk7XG4gIGxvZy5kZWJ1ZyhgV3JpdGluZyB4Y29kZSBjb25maWcgZmlsZSB0byAke3hjY29uZmlnUGF0aH1gKTtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKHhjY29uZmlnUGF0aCwgY29udGVudHMsICd1dGY4Jyk7XG4gIHJldHVybiB4Y2NvbmZpZ1BhdGg7XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaXNSZWFsRGV2aWNlIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIGN1cnJlbnQgZGV2aWNlIGlzIGEgcmVhbCBkZXZpY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1ZGlkIC0gVGhlIGRldmljZSBVRElELlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXRmb3JtVmVyc2lvbiAtIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIG9mIE9TLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXRmb3JtTmFtZSAtIFRoZSBwbGF0Zm9ybSBuYW1lIG9mIGlPUywgdHZPU1xuKi9cbi8qKlxuICogQ3JlYXRlcyB4Y3Rlc3RydW4gZmlsZSBwZXIgZGV2aWNlICYgcGxhdGZvcm0gdmVyc2lvbi5cbiAqIFdlIGV4cGVjdHMgdG8gaGF2ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVvcyR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LWFybTY0LnhjdGVzdHJ1biBmb3IgcmVhbCBkZXZpY2VcbiAqIGFuZCBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVzaW11bGF0b3Ike3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS14ODZfNjQueGN0ZXN0cnVuIGZvciBzaW11bGF0b3IgbG9jYXRlZCBAYm9vdHN0cmFwUGF0aFxuICogTmV3ZXIgWGNvZGUgKFhjb2RlIDEwLjAgYXQgbGVhc3QpIGdlbmVyYXRlIHhjdGVzdHJ1biBmaWxlIGZvbGxvd2luZyBzZGtWZXJzaW9uLlxuICogZS5nLiBYY29kZSB3aGljaCBoYXMgaU9TIFNESyBWZXJzaW9uIDEyLjIgZ2VuZXJhdGUgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yLjIteDg2XzY0LnhjdGVzdHJ1blxuICogICAgICBldmVuIGlmIHRoZSBjYXAgaGFzIHBsYXRmb3JtIHZlcnNpb24gMTEuNFxuICpcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHNka1ZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9vdHN0cmFwUGF0aCAtIFRoZSBmb2xkZXIgcGF0aCBjb250YWluaW5nIHhjdGVzdHJ1biBmaWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IHdkYVJlbW90ZVBvcnQgLSBUaGUgcmVtb3RlIHBvcnQgV0RBIGlzIGxpc3RlbmluZyBvbi5cbiAqIEByZXR1cm4ge3N0cmluZ30gcmV0dXJucyB4Y3Rlc3RydW5GaWxlUGF0aCBmb3IgZ2l2ZW4gZGV2aWNlXG4gKiBAdGhyb3dzIGlmIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZW9zJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0tYXJtNjQueGN0ZXN0cnVuIGZvciByZWFsIGRldmljZVxuICogb3IgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0teDg2XzY0LnhjdGVzdHJ1biBmb3Igc2ltdWxhdG9yIGlzIG5vdCBmb3VuZCBAYm9vdHN0cmFwUGF0aCxcbiAqIHRoZW4gaXQgd2lsbCB0aHJvdyBmaWxlIG5vdCBmb3VuZCBleGNlcHRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0WGN0ZXN0cnVuRmlsZSAoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCwgd2RhUmVtb3RlUG9ydCkge1xuICBjb25zdCB4Y3Rlc3RydW5GaWxlUGF0aCA9IGF3YWl0IGdldFhjdGVzdHJ1bkZpbGVQYXRoKGRldmljZUluZm8sIHNka1ZlcnNpb24sIGJvb3RzdHJhcFBhdGgpO1xuICBjb25zdCB4Y3Rlc3RSdW5Db250ZW50ID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUoeGN0ZXN0cnVuRmlsZVBhdGgpO1xuICBjb25zdCB1cGRhdGVXREFQb3J0ID0gZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQoZGV2aWNlSW5mby5wbGF0Zm9ybU5hbWUsIHdkYVJlbW90ZVBvcnQpO1xuICBjb25zdCBuZXdYY3Rlc3RSdW5Db250ZW50ID0gXy5tZXJnZSh4Y3Rlc3RSdW5Db250ZW50LCB1cGRhdGVXREFQb3J0KTtcbiAgYXdhaXQgcGxpc3QudXBkYXRlUGxpc3RGaWxlKHhjdGVzdHJ1bkZpbGVQYXRoLCBuZXdYY3Rlc3RSdW5Db250ZW50LCB0cnVlKTtcblxuICByZXR1cm4geGN0ZXN0cnVuRmlsZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBXREEgb2JqZWN0IHdoaWNoIGFwcGVuZHMgZXhpc3RpbmcgeGN0ZXN0IHJ1bm5lciBjb250ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhdGZvcm1OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtXG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEByZXR1cm4ge29iamVjdH0gcmV0dXJucyBhIHJ1bm5lciBvYmplY3Qgd2hpY2ggaGFzIFVTRV9QT1JUXG4gKi9cbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxSdW5Db250ZW50IChwbGF0Zm9ybU5hbWUsIHdkYVJlbW90ZVBvcnQpIHtcbiAgY29uc3QgcnVubmVyID0gYFdlYkRyaXZlckFnZW50UnVubmVyJHtpc1R2T1MocGxhdGZvcm1OYW1lKSA/ICdfdHZPUycgOiAnJ31gO1xuXG4gIHJldHVybiB7XG4gICAgW3J1bm5lcl06IHtcbiAgICAgIEVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgIC8vIFVTRV9QT1JUIG11c3QgYmUgJ3N0cmluZydcbiAgICAgICAgVVNFX1BPUlQ6IGAke3dkYVJlbW90ZVBvcnR9YFxuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHBhdGggb2YgeGN0ZXN0cnVuIGlmIGl0IGV4aXN0c1xuICogQHBhcmFtIHtEZXZpY2VJbmZvfSBkZXZpY2VJbmZvXG4gKiBAcGFyYW0ge3N0cmluZ30gc2RrVmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBib290c3RyYXBQYXRoIC0gVGhlIGZvbGRlciBwYXRoIGNvbnRhaW5pbmcgeGN0ZXN0cnVuIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFhjdGVzdHJ1bkZpbGVQYXRoIChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoKSB7XG4gIC8vIEZpcnN0IHRyeSB0aGUgU0RLIHBhdGgsIGZvciBYY29kZSAxMCAoYXQgbGVhc3QpXG4gIGNvbnN0IHNka0Jhc2VkID0gW1xuICAgIHBhdGgucmVzb2x2ZShib290c3RyYXBQYXRoLCBgJHtkZXZpY2VJbmZvLnVkaWR9XyR7c2RrVmVyc2lvbn0ueGN0ZXN0cnVuYCksXG4gICAgc2RrVmVyc2lvbixcbiAgXTtcbiAgLy8gTmV4dCB0cnkgUGxhdGZvcm0gcGF0aCwgZm9yIGVhcmxpZXIgWGNvZGUgdmVyc2lvbnNcbiAgY29uc3QgcGxhdGZvcm1CYXNlZCA9IFtcbiAgICBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgYCR7ZGV2aWNlSW5mby51ZGlkfV8ke2RldmljZUluZm8ucGxhdGZvcm1WZXJzaW9ufS54Y3Rlc3RydW5gKSxcbiAgICBkZXZpY2VJbmZvLnBsYXRmb3JtVmVyc2lvbixcbiAgXTtcblxuICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgdmVyc2lvbl0gb2YgW3Nka0Jhc2VkLCBwbGF0Zm9ybUJhc2VkXSkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICBsb2cuaW5mbyhgVXNpbmcgJyR7ZmlsZVBhdGh9JyBhcyB4Y3Rlc3RydW4gZmlsZWApO1xuICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5hbFhjdGVzdHJ1bkZpbGUgPSBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUoZGV2aWNlSW5mbywgdmVyc2lvbikpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMob3JpZ2luYWxYY3Rlc3RydW5GaWxlKSkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBmaXJzdCB0aW1lIHJ1biBmb3IgZ2l2ZW4gZGV2aWNlLCB0aGVuIGZpcnN0IGdlbmVyYXRlIHhjdGVzdHJ1biBmaWxlIGZvciBkZXZpY2UuXG4gICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgYSB4Y3Rlc3RydW4gZmlsZSAqKnBlciBkZXZpY2UqKiBiZWNhdXNlIHdlIGNhbnQgbm90IGhhdmUgc2FtZSB3ZGEgcG9ydCBmb3IgYWxsIGRldmljZXMuXG4gICAgICBhd2FpdCBmcy5jb3B5RmlsZShvcmlnaW5hbFhjdGVzdHJ1bkZpbGUsIGZpbGVQYXRoKTtcbiAgICAgIGxvZy5pbmZvKGBVc2luZyAnJHtmaWxlUGF0aH0nIGFzIHhjdGVzdHJ1biBmaWxlIGNvcGllZCBieSAnJHtvcmlnaW5hbFhjdGVzdHJ1bkZpbGV9J2ApO1xuICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgfVxuXG4gIGxvZy5lcnJvckFuZFRocm93KGBJZiB5b3UgYXJlIHVzaW5nICd1c2VYY3Rlc3RydW5GaWxlJyBjYXBhYmlsaXR5IHRoZW4geW91IGAgK1xuICAgIGBuZWVkIHRvIGhhdmUgYSB4Y3Rlc3RydW4gZmlsZSAoZXhwZWN0ZWQ6IGAgK1xuICAgIGAnJHtwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUoZGV2aWNlSW5mbywgc2RrVmVyc2lvbikpfScpYCk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIG5hbWUgb2YgeGN0ZXN0cnVuIGZpbGVcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJldHVybnMgeGN0ZXN0cnVuRmlsZVBhdGggZm9yIGdpdmVuIGRldmljZVxuICovXG5mdW5jdGlvbiBnZXRYY3Rlc3RydW5GaWxlTmFtZSAoZGV2aWNlSW5mbywgdmVyc2lvbikge1xuICByZXR1cm4gaXNUdk9TKGRldmljZUluZm8ucGxhdGZvcm1OYW1lKVxuICAgID8gYFdlYkRyaXZlckFnZW50UnVubmVyX3R2T1NfYXBwbGV0diR7ZGV2aWNlSW5mby5pc1JlYWxEZXZpY2UgPyBgb3Mke3ZlcnNpb259LWFybTY0YCA6IGBzaW11bGF0b3Ike3ZlcnNpb259LXg4Nl82NGB9LnhjdGVzdHJ1bmBcbiAgICA6IGBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmUke2RldmljZUluZm8uaXNSZWFsRGV2aWNlID8gYG9zJHt2ZXJzaW9ufS1hcm02NGAgOiBgc2ltdWxhdG9yJHt2ZXJzaW9ufS14ODZfNjRgfS54Y3Rlc3RydW5gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsUHJvY2VzcyAobmFtZSwgcHJvYykge1xuICBpZiAoIXByb2MgfHwgIXByb2MuaXNSdW5uaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nLmluZm8oYFNodXR0aW5nIGRvd24gJyR7bmFtZX0nIHByb2Nlc3MgKHBpZCAnJHtwcm9jLnByb2MucGlkfScpYCk7XG5cbiAgbG9nLmluZm8oYFNlbmRpbmcgJ1NJR1RFUk0nLi4uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvYy5zdG9wKCdTSUdURVJNJywgMTAwMCk7XG4gICAgcmV0dXJuO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKGBQcm9jZXNzIGRpZG4ndCBlbmQgYWZ0ZXJgKSkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYCR7bmFtZX0gcHJvY2VzcyBkaWQgbm90IGVuZCBpbiBhIHRpbWVseSBmYXNoaW9uOiAnJHtlcnIubWVzc2FnZX0nLmApO1xuICB9XG5cbiAgbG9nLmluZm8oYFNlbmRpbmcgJ1NJR0tJTEwnLi4uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvYy5zdG9wKCdTSUdLSUxMJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnbm90IGN1cnJlbnRseSBydW5uaW5nJykpIHtcbiAgICAgIC8vIHRoZSBwcm9jZXNzIGVuZGVkIGJ1dCBmb3Igc29tZSByZWFzb24gd2Ugd2VyZSBub3QgaW5mb3JtZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gaW50ZWdlci5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGluIHJhbmdlIFtsb3csIGhpZ2h0KS4gYGxvd2BgIGlzIGluY2x1c2l2ZSBhbmQgYGhpZ2hgIGlzIGV4Y2x1c2l2ZS5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tSW50IChsb3csIGhpZ2gpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSArIGxvdyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIFdEQSB1cGdyYWRlIHRpbWVzdGFtcFxuICpcbiAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBVTklYIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZSBtYW5pZmVzdC4gVGhlIG1hbmlmZXN0IG9ubHkgZ2V0cyBtb2RpZmllZCBvblxuICogcGFja2FnZSB1cGdyYWRlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRXREFVcGdyYWRlVGltZXN0YW1wICgpIHtcbiAgY29uc3QgcGFja2FnZU1hbmlmZXN0ID0gcGF0aC5yZXNvbHZlKGdldE1vZHVsZVJvb3QoKSwgJ3BhY2thZ2UuanNvbicpO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYWNrYWdlTWFuaWZlc3QpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge210aW1lfSA9IGF3YWl0IGZzLnN0YXQocGFja2FnZU1hbmlmZXN0KTtcbiAgcmV0dXJuIG10aW1lLmdldFRpbWUoKTtcbn1cblxuLyoqXG4gKiBLaWxscyBydW5uaW5nIFhDVGVzdCBwcm9jZXNzZXMgZm9yIHRoZSBwYXJ0aWN1bGFyIGRldmljZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTaW11bGF0b3IgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgY3VycmVudCBkZXZpY2UgaXMgYSBTaW11bGF0b3JcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzZXRUZXN0UHJvY2Vzc2VzICh1ZGlkLCBpc1NpbXVsYXRvcikge1xuICBjb25zdCBwcm9jZXNzUGF0dGVybnMgPSBbYHhjb2RlYnVpbGQuKiR7dWRpZH1gXTtcbiAgaWYgKGlzU2ltdWxhdG9yKSB7XG4gICAgcHJvY2Vzc1BhdHRlcm5zLnB1c2goYCR7dWRpZH0uKlhDVFJ1bm5lcmApO1xuICAgIC8vIFRoZSBwYXR0ZXJuIHRvIGZpbmQgaW4gY2FzZSBpZGIgd2FzIHVzZWRcbiAgICBwcm9jZXNzUGF0dGVybnMucHVzaChgeGN0ZXN0Lioke3VkaWR9YCk7XG4gIH1cbiAgbG9nLmRlYnVnKGBLaWxsaW5nIHJ1bm5pbmcgcHJvY2Vzc2VzICcke3Byb2Nlc3NQYXR0ZXJucy5qb2luKCcsICcpfScgZm9yIHRoZSBkZXZpY2UgJHt1ZGlkfS4uLmApO1xuICBhd2FpdCBCLmFsbChwcm9jZXNzUGF0dGVybnMubWFwKGtpbGxBcHBVc2luZ1BhdHRlcm4pKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIElEcyBvZiBwcm9jZXNzZXMgbGlzdGVuaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHN5c3RlbSBwb3J0LlxuICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhcHBseSBhZGRpdGlvbmFsIGZpbHRlcmluZyBiYXNlZCBvbiB0aGVcbiAqIHByb2Nlc3MgY29tbWFuZCBsaW5lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcG9ydCAtIFRoZSBwb3J0IG51bWJlci5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmaWx0ZXJpbmdGdW5jIC0gT3B0aW9uYWwgbGFtYmRhIGZ1bmN0aW9uLCB3aGljaFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlcyBjb21tYW5kIGxpbmUgc3RyaW5nIG9mIHRoZSBwYXJ0aWN1bGFyIHByb2Nlc3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuaW5nIG9uIGdpdmVuIHBvcnQsIGFuZCBpcyBleHBlY3RlZCB0byByZXR1cm5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHRydWUgb3IgZmFsc2UgdG8gaW5jbHVkZS9leGNsdWRlIHRoZSBjb3JyZXNwb25kaW5nIFBJRFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSByZXN1bHRpbmcgYXJyYXkuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gLSB0aGUgbGlzdCBvZiBtYXRjaGVkIHByb2Nlc3MgaWRzLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQSURzTGlzdGVuaW5nT25Qb3J0IChwb3J0LCBmaWx0ZXJpbmdGdW5jID0gbnVsbCkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgdHJ5IHtcbiAgICAvLyBUaGlzIG9ubHkgd29ya3Mgc2luY2UgTWFjIE9TIFggRWwgQ2FwaXRhblxuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygnbHNvZicsIFsnLXRpJywgYHRjcDoke3BvcnR9YF0pO1xuICAgIHJlc3VsdC5wdXNoKC4uLihzdGRvdXQudHJpbSgpLnNwbGl0KC9cXG4rLykpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlLmNvZGUgIT09IDEpIHtcbiAgICAgIC8vIGNvZGUgMSBtZWFucyBubyBwcm9jZXNzZXMuIE90aGVyIGVycm9ycyBuZWVkIHJlcG9ydGluZ1xuICAgICAgbG9nLmRlYnVnKGBFcnJvciBnZXR0aW5nIHByb2Nlc3NlcyBsaXN0ZW5pbmcgb24gcG9ydCAnJHtwb3J0fSc6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFfLmlzRnVuY3Rpb24oZmlsdGVyaW5nRnVuYykpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiBhd2FpdCBCLmZpbHRlcihyZXN1bHQsIGFzeW5jIChwaWQpID0+IHtcbiAgICBsZXQgc3Rkb3V0O1xuICAgIHRyeSB7XG4gICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwcycsIFsnLXAnLCBwaWQsICctbycsICdjb21tYW5kJ10pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5jb2RlID09PSAxKSB7XG4gICAgICAgIC8vIFRoZSBwcm9jZXNzIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIHRoZXJlJ3Mgbm90aGluZyB0byBmaWx0ZXJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGZpbHRlcmluZ0Z1bmMoc3Rkb3V0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCB7IHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBzZXRSZWFsRGV2aWNlU2VjdXJpdHksXG4gIGdldEFkZGl0aW9uYWxSdW5Db250ZW50LCBnZXRYY3Rlc3RydW5GaWxlTmFtZSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsXG4gIHNldFhjdGVzdHJ1bkZpbGUsIGdldFhjdGVzdHJ1bkZpbGVQYXRoLCBraWxsUHJvY2VzcywgcmFuZG9tSW50LFxuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsXG4gIGdldFBJRHNMaXN0ZW5pbmdPblBvcnQsIGtpbGxBcHBVc2luZ1BhdHRlcm4sIGlzVHZPU1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxZQUFZLEdB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
@@ -46,7 +46,7 @@ class WebDriverAgent {
46
46
  constructor(xcodeVersion, args = {}, log = null) {
47
47
  this.xcodeVersion = xcodeVersion;
48
48
  this.args = _lodash.default.clone(args);
49
- this.log = log !== null && log !== void 0 ? log : _logger.default;
49
+ this.log = log ?? _logger.default;
50
50
  this.device = args.device;
51
51
  this.platformVersion = args.platformVersion;
52
52
  this.platformName = args.platformName;
@@ -96,7 +96,7 @@ class WebDriverAgent {
96
96
  }
97
97
 
98
98
  setWDAPaths(bootstrapPath, agentPath) {
99
- this.bootstrapPath = bootstrapPath || _constants.BOOTSTRAP_PATH;
99
+ this.bootstrapPath = bootstrapPath || _utils.BOOTSTRAP_PATH;
100
100
  this.log.info(`Using WDA path: '${this.bootstrapPath}'`);
101
101
  this.agentPath = agentPath || _path.default.resolve(this.bootstrapPath, 'WebDriverAgent.xcodeproj');
102
102
  this.log.info(`Using WDA agent: '${this.agentPath}'`);
@@ -448,7 +448,5 @@ class WebDriverAgent {
448
448
 
449
449
  exports.WebDriverAgent = WebDriverAgent;
450
450
  var _default = WebDriverAgent;
451
- exports.default = _default;require('source-map-support').install();
452
-
453
-
454
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3dlYmRyaXZlcmFnZW50LmpzIiwibmFtZXMiOlsiV0RBX0xBVU5DSF9USU1FT1VUIiwiV0RBX0FHRU5UX1BPUlQiLCJXREFfQ0ZfQlVORExFX05BTUUiLCJTSEFSRURfUkVTT1VSQ0VTX0dVQVJEIiwiQXN5bmNMb2NrIiwiV2ViRHJpdmVyQWdlbnQiLCJjb25zdHJ1Y3RvciIsInhjb2RlVmVyc2lvbiIsImFyZ3MiLCJsb2ciLCJfIiwiY2xvbmUiLCJkZWZhdWx0TG9nZ2VyIiwiZGV2aWNlIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsImhvc3QiLCJpc1JlYWxEZXZpY2UiLCJyZWFsRGV2aWNlIiwiaWRiIiwid2RhQnVuZGxlUGF0aCIsInNldFdEQVBhdGhzIiwiYm9vdHN0cmFwUGF0aCIsImFnZW50UGF0aCIsIndkYUxvY2FsUG9ydCIsIndkYVJlbW90ZVBvcnQiLCJ3ZGFCYXNlVXJsIiwiV0RBX0JBU0VfVVJMIiwicHJlYnVpbGRXREEiLCJ3ZWJEcml2ZXJBZ2VudFVybCIsInN0YXJ0ZWQiLCJ3ZGFDb25uZWN0aW9uVGltZW91dCIsInVzZVhjdGVzdHJ1bkZpbGUiLCJ1c2VQcmVidWlsdFdEQSIsImRlcml2ZWREYXRhUGF0aCIsIm1qcGVnU2VydmVyUG9ydCIsInVwZGF0ZWRXREFCdW5kbGVJZCIsInhjb2RlYnVpbGQiLCJYY29kZUJ1aWxkIiwic2hvd1hjb2RlTG9nIiwieGNvZGVDb25maWdGaWxlIiwieGNvZGVPcmdJZCIsInhjb2RlU2lnbmluZ0lkIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsInVzZVNpbXBsZUJ1aWxkVGVzdCIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFMYXVuY2hUaW1lb3V0IiwiYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24iLCJyZXN1bHRCdW5kbGVQYXRoIiwicmVzdWx0QnVuZGxlVmVyc2lvbiIsIkJPT1RTVFJBUF9QQVRIIiwiaW5mbyIsInBhdGgiLCJyZXNvbHZlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwib2Jzb2xldGVQaWRzIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInVybCIsInBvcnQiLCJjbWRMaW5lIiwiaW5jbHVkZXMiLCJ0b0xvd2VyQ2FzZSIsInVkaWQiLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJleGVjIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiaXNSdW5uaW5nIiwiZ2V0U3RhdHVzIiwiYmFzZVBhdGgiLCJub1Nlc3Npb25Qcm94eSIsIk5vU2Vzc2lvblByb3h5Iiwic2VydmVyIiwiaG9zdG5hbWUiLCJiYXNlIiwidGltZW91dCIsImNvbW1hbmQiLCJlcnIiLCJocmVmIiwidW5pbnN0YWxsIiwiYnVuZGxlSWRzIiwiZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZSIsImJ1bmRsZUlkIiwicmVtb3ZlQXBwIiwiX2NsZWFudXBQcm9qZWN0SWZGcmVzaCIsImhvbWVGb2xkZXIiLCJwcm9jZXNzIiwiZW52IiwiSE9NRSIsImN1cnJlbnRVcGdyYWRlVGltZXN0YW1wIiwiZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCIsImlzSW50ZWdlciIsInRpbWVzdGFtcFBhdGgiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCIsImRpZFRpbWVzdGFtcEV4aXN0IiwiZnMiLCJleGlzdHMiLCJhY2Nlc3MiLCJXX09LIiwiaWduIiwicmVjZW50VXBncmFkZVRpbWVzdGFtcCIsInBhcnNlSW50IiwicmVhZEZpbGUiLCJta2RpcnAiLCJkaXJuYW1lIiwid3JpdGVGaWxlIiwiY2xlYW5Qcm9qZWN0IiwibGF1bmNoIiwic2Vzc2lvbklkIiwic2V0dXBQcm94aWVzIiwiRXJyb3IiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJub3JtYWxpemUiLCJhY3F1aXJlIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwic3RhcnRXaXRoSURCIiwiaW5pdCIsInByZWJ1aWxkIiwic3RhcnQiLCJ3ZGFCdW5kbGVJZCIsInRlc3RCdW5kbGVJZCIsInByZXBhcmVXREEiLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiTUpQRUdfU0VSVkVSX1BPUlQiLCJydW5YQ1VJVGVzdCIsInBhcnNlQnVuZGxlSWQiLCJpbmZvUGxpc3RQYXRoIiwiam9pbiIsImluZm9QbGlzdCIsInBsaXN0IiwicGFyc2VQbGlzdCIsIkNGQnVuZGxlSWRlbnRpZmllciIsImZldGNoV0RBQnVuZGxlIiwiaXNBcHBJbnN0YWxsZWQiLCJpbnN0YWxsQXBwIiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsImJ1bmRsZVdEQVNpbSIsIndkYUJ1bmRsZVBhdGhzIiwiZ2xvYiIsIldEQV9SVU5ORVJfQVBQIiwiYWJzb2x1dGUiLCJpc1NvdXJjZUZyZXNoIiwiZXhpc3RzUHJvbWlzZXMiLCJzZXAiLCJtYXAiLCJzdWJQYXRoIiwiQiIsImFsbCIsInNvbWUiLCJ2IiwicHJveHlPcHRzIiwia2VlcEFsaXZlIiwiandwcm94eSIsIkpXUHJveHkiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJxdWl0IiwicmVzZXQiLCJfdXJsIiwicGFyc2UiLCJwcm90b2NvbCIsImZ1bGx5U3RhcnRlZCIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwic2V0dXBDYWNoaW5nIiwic3RhdHVzIiwiYnVpbGQiLCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllciIsInVwZ3JhZGVkQXQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsImFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAiLCJ0b0xvd2VyIiwicXVpdEFuZFVuaW5zdGFsbCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgcGxpc3QsIG1rZGlycCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IE5vU2Vzc2lvblByb3h5IH0gZnJvbSAnLi9uby1zZXNzaW9uLXByb3h5JztcbmltcG9ydCB7XG4gIGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAsIHJlc2V0VGVzdFByb2Nlc3NlcywgZ2V0UElEc0xpc3RlbmluZ09uUG9ydFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBYY29kZUJ1aWxkIGZyb20gJy4veGNvZGVidWlsZCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyBidW5kbGVXREFTaW0gfSBmcm9tICcuL2NoZWNrLWRlcGVuZGVuY2llcyc7XG5pbXBvcnQge1xuICBCT09UU1RSQVBfUEFUSCwgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFdEQV9SVU5ORVJfQVBQLFxuICBXREFfQkFTRV9VUkwsIFdEQV9VUEdSQURFX1RJTUVTVEFNUF9QQVRILFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmNvbnN0IFdEQV9MQVVOQ0hfVElNRU9VVCA9IDYwICogMTAwMDtcbmNvbnN0IFdEQV9BR0VOVF9QT1JUID0gODEwMDtcbmNvbnN0IFdEQV9DRl9CVU5ETEVfTkFNRSA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lci1SdW5uZXInO1xuY29uc3QgU0hBUkVEX1JFU09VUkNFU19HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcblxuY2xhc3MgV2ViRHJpdmVyQWdlbnQge1xuICBjb25zdHJ1Y3RvciAoeGNvZGVWZXJzaW9uLCBhcmdzID0ge30sIGxvZyA9IG51bGwpIHtcbiAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IHhjb2RlVmVyc2lvbjtcblxuICAgIHRoaXMuYXJncyA9IF8uY2xvbmUoYXJncyk7XG4gICAgdGhpcy5sb2cgPSBsb2cgPz8gZGVmYXVsdExvZ2dlcjtcblxuICAgIHRoaXMuZGV2aWNlID0gYXJncy5kZXZpY2U7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcbiAgICB0aGlzLmhvc3QgPSBhcmdzLmhvc3Q7XG4gICAgdGhpcy5pc1JlYWxEZXZpY2UgPSAhIWFyZ3MucmVhbERldmljZTtcbiAgICB0aGlzLmlkYiA9IChhcmdzLmRldmljZSB8fCB7fSkuaWRiO1xuICAgIHRoaXMud2RhQnVuZGxlUGF0aCA9IGFyZ3Mud2RhQnVuZGxlUGF0aDtcblxuICAgIHRoaXMuc2V0V0RBUGF0aHMoYXJncy5ib290c3RyYXBQYXRoLCBhcmdzLmFnZW50UGF0aCk7XG5cbiAgICB0aGlzLndkYUxvY2FsUG9ydCA9IGFyZ3Mud2RhTG9jYWxQb3J0O1xuICAgIHRoaXMud2RhUmVtb3RlUG9ydCA9IGFyZ3Mud2RhTG9jYWxQb3J0IHx8IFdEQV9BR0VOVF9QT1JUO1xuICAgIHRoaXMud2RhQmFzZVVybCA9IGFyZ3Mud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkw7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcblxuICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBhcmdzLndlYkRyaXZlckFnZW50VXJsO1xuXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLndkYUNvbm5lY3Rpb25UaW1lb3V0ID0gYXJncy53ZGFDb25uZWN0aW9uVGltZW91dDtcblxuICAgIHRoaXMudXNlWGN0ZXN0cnVuRmlsZSA9IGFyZ3MudXNlWGN0ZXN0cnVuRmlsZTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuICAgIHRoaXMubWpwZWdTZXJ2ZXJQb3J0ID0gYXJncy5tanBlZ1NlcnZlclBvcnQ7XG5cbiAgICB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCA9IGFyZ3MudXBkYXRlZFdEQUJ1bmRsZUlkO1xuXG4gICAgdGhpcy54Y29kZWJ1aWxkID0gbmV3IFhjb2RlQnVpbGQodGhpcy54Y29kZVZlcnNpb24sIHRoaXMuZGV2aWNlLCB7XG4gICAgICBwbGF0Zm9ybVZlcnNpb246IHRoaXMucGxhdGZvcm1WZXJzaW9uLFxuICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZSxcbiAgICAgIGlvc1Nka1ZlcnNpb246IHRoaXMuaW9zU2RrVmVyc2lvbixcbiAgICAgIGFnZW50UGF0aDogdGhpcy5hZ2VudFBhdGgsXG4gICAgICBib290c3RyYXBQYXRoOiB0aGlzLmJvb3RzdHJhcFBhdGgsXG4gICAgICByZWFsRGV2aWNlOiB0aGlzLmlzUmVhbERldmljZSxcbiAgICAgIHNob3dYY29kZUxvZzogYXJncy5zaG93WGNvZGVMb2csXG4gICAgICB4Y29kZUNvbmZpZ0ZpbGU6IGFyZ3MueGNvZGVDb25maWdGaWxlLFxuICAgICAgeGNvZGVPcmdJZDogYXJncy54Y29kZU9yZ0lkLFxuICAgICAgeGNvZGVTaWduaW5nSWQ6IGFyZ3MueGNvZGVTaWduaW5nSWQsXG4gICAgICBrZXljaGFpblBhdGg6IGFyZ3Mua2V5Y2hhaW5QYXRoLFxuICAgICAga2V5Y2hhaW5QYXNzd29yZDogYXJncy5rZXljaGFpblBhc3N3b3JkLFxuICAgICAgdXNlU2ltcGxlQnVpbGRUZXN0OiBhcmdzLnVzZVNpbXBsZUJ1aWxkVGVzdCxcbiAgICAgIHVzZVByZWJ1aWx0V0RBOiBhcmdzLnVzZVByZWJ1aWx0V0RBLFxuICAgICAgdXBkYXRlZFdEQUJ1bmRsZUlkOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCxcbiAgICAgIGxhdW5jaFRpbWVvdXQ6IGFyZ3Mud2RhTGF1bmNoVGltZW91dCB8fCBXREFfTEFVTkNIX1RJTUVPVVQsXG4gICAgICB3ZGFSZW1vdGVQb3J0OiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICB1c2VYY3Rlc3RydW5GaWxlOiB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUsXG4gICAgICBkZXJpdmVkRGF0YVBhdGg6IGFyZ3MuZGVyaXZlZERhdGFQYXRoLFxuICAgICAgbWpwZWdTZXJ2ZXJQb3J0OiB0aGlzLm1qcGVnU2VydmVyUG9ydCxcbiAgICAgIGFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uOiBhcmdzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uLFxuICAgICAgcmVzdWx0QnVuZGxlUGF0aDogYXJncy5yZXN1bHRCdW5kbGVQYXRoLFxuICAgICAgcmVzdWx0QnVuZGxlVmVyc2lvbjogYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uLFxuICAgIH0sIHRoaXMubG9nKTtcbiAgfVxuXG4gIHNldFdEQVBhdGhzIChib290c3RyYXBQYXRoLCBhZ2VudFBhdGgpIHtcbiAgICAvLyBhbGxvdyB0aGUgdXNlciB0byBzcGVjaWZ5IGEgcGxhY2UgZm9yIFdEQS4gVGhpcyBpcyB1bmRvY3VtZW50ZWQgYW5kXG4gICAgLy8gb25seSBoZXJlIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZyBkZXZlbG9wbWVudCBvZiBXREFcbiAgICB0aGlzLmJvb3RzdHJhcFBhdGggPSBib290c3RyYXBQYXRoIHx8IEJPT1RTVFJBUF9QQVRIO1xuICAgIHRoaXMubG9nLmluZm8oYFVzaW5nIFdEQSBwYXRoOiAnJHt0aGlzLmJvb3RzdHJhcFBhdGh9J2ApO1xuXG4gICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHNwZWNpZnkgYWdlbnRQYXRoIHRvb1xuICAgIHRoaXMuYWdlbnRQYXRoID0gYWdlbnRQYXRoIHx8IHBhdGgucmVzb2x2ZSh0aGlzLmJvb3RzdHJhcFBhdGgsICdXZWJEcml2ZXJBZ2VudC54Y29kZXByb2onKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBXREEgYWdlbnQ6ICcke3RoaXMuYWdlbnRQYXRofSdgKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyAoKSB7XG4gICAgY29uc3Qgb2Jzb2xldGVQaWRzID0gYXdhaXQgZ2V0UElEc0xpc3RlbmluZ09uUG9ydCh0aGlzLnVybC5wb3J0LFxuICAgICAgKGNtZExpbmUpID0+IGNtZExpbmUuaW5jbHVkZXMoJy9XZWJEcml2ZXJBZ2VudFJ1bm5lcicpICYmXG4gICAgICAgICFjbWRMaW5lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5kZXZpY2UudWRpZC50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KG9ic29sZXRlUGlkcykpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBObyBvYnNvbGV0ZSBjYWNoZWQgcHJvY2Vzc2VzIGZyb20gcHJldmlvdXMgV0RBIHNlc3Npb25zIGAgK1xuICAgICAgICBgbGlzdGVuaW5nIG9uIHBvcnQgJHt0aGlzLnVybC5wb3J0fSBoYXZlIGJlZW4gZm91bmRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKGBEZXRlY3RlZCAke29ic29sZXRlUGlkcy5sZW5ndGh9IG9ic29sZXRlIGNhY2hlZCBwcm9jZXNzJHtvYnNvbGV0ZVBpZHMubGVuZ3RoID09PSAxID8gJycgOiAnZXMnfSBgICtcbiAgICAgIGBmcm9tIHByZXZpb3VzIFdEQSBzZXNzaW9ucy4gQ2xlYW5pbmcgdGhlbSB1cGApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgb2Jzb2xldGVQaWRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBGYWlsZWQgdG8ga2lsbCBvYnNvbGV0ZSBjYWNoZWQgcHJvY2VzcyR7b2Jzb2xldGVQaWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30gJyR7b2Jzb2xldGVQaWRzfScuIGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpZiBXREEgaXMgcnVubmluZyBvciBub3RcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBXREEgaXMgcnVubmluZ1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhIShhd2FpdCB0aGlzLmdldFN0YXR1cygpKTtcbiAgfVxuXG4gIGdldCBiYXNlUGF0aCAoKSB7XG4gICAgaWYgKHRoaXMudXJsLnBhdGggPT09ICcvJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cmwucGF0aCB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY3VycmVudCBydW5uaW5nIFdEQSdzIHN0YXR1cyBsaWtlIGJlbG93XG4gICAqIHtcbiAgICogICBcInN0YXRlXCI6IFwic3VjY2Vzc1wiLFxuICAgKiAgIFwib3NcIjoge1xuICAgKiAgICAgXCJuYW1lXCI6IFwiaU9TXCIsXG4gICAqICAgICBcInZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcInNka1ZlcnNpb25cIjogXCIxMS4zXCJcbiAgICogICB9LFxuICAgKiAgIFwiaW9zXCI6IHtcbiAgICogICAgIFwic2ltdWxhdG9yVmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwiaXBcIjogXCIxNzIuMjU0Ljk5LjM0XCJcbiAgICogICB9LFxuICAgKiAgIFwiYnVpbGRcIjoge1xuICAgKiAgICAgXCJ0aW1lXCI6IFwiSnVuIDI0IDIwMTggMTc6MDg6MjFcIixcbiAgICogICAgIFwicHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJcIjogXCJjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXJcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBTdGF0ZSBPYmplY3RcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHVzICgpIHtcbiAgICBjb25zdCBub1Nlc3Npb25Qcm94eSA9IG5ldyBOb1Nlc3Npb25Qcm94eSh7XG4gICAgICBzZXJ2ZXI6IHRoaXMudXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogdGhpcy51cmwucG9ydCxcbiAgICAgIGJhc2U6IHRoaXMuYmFzZVBhdGgsXG4gICAgICB0aW1lb3V0OiAzMDAwLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgbm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBXREEgaXMgbm90IGxpc3RlbmluZyBhdCAnJHt0aGlzLnVybC5ocmVmfSdgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbmluc3RhbGwgV0RBcyBmcm9tIHRoZSB0ZXN0IGRldmljZS5cbiAgICogT3ZlciBYY29kZSAxMSwgbXVsdGlwbGUgV0RBIGNhbiBiZSBpbiB0aGUgZGV2aWNlIHNpbmNlIFhjb2RlIDExIGdlbmVyYXRlcyBkaWZmZXJlbnQgV0RBLlxuICAgKiBBcHBpdW0gZG9lcyBub3QgZXhwZWN0IG11bHRpcGxlIFdEQXMgYXJlIHJ1bm5pbmcgb24gYSBkZXZpY2UuXG4gICAqL1xuICBhc3luYyB1bmluc3RhbGwgKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBidW5kbGVJZHMgPSBhd2FpdCB0aGlzLmRldmljZS5nZXRVc2VySW5zdGFsbGVkQnVuZGxlSWRzQnlCdW5kbGVOYW1lKFdEQV9DRl9CVU5ETEVfTkFNRSk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGJ1bmRsZUlkcykpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ05vIFdEQXMgb24gdGhlIGRldmljZS4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVW5pbnN0YWxsaW5nIFdEQXM6ICcke2J1bmRsZUlkc30nYCk7XG4gICAgICBmb3IgKGNvbnN0IGJ1bmRsZUlkIG9mIGJ1bmRsZUlkcykge1xuICAgICAgICBhd2FpdCB0aGlzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUpO1xuICAgICAgdGhpcy5sb2cud2FybihgV2ViRHJpdmVyQWdlbnQgdW5pbnN0YWxsIGZhaWxlZC4gUGVyaGFwcywgaXQgaXMgYWxyZWFkeSB1bmluc3RhbGxlZD8gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX2NsZWFudXBQcm9qZWN0SWZGcmVzaCAoKSB7XG4gICAgY29uc3QgaG9tZUZvbGRlciA9IHByb2Nlc3MuZW52LkhPTUU7XG4gICAgaWYgKCFob21lRm9sZGVyKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdUaGUgSE9NRSBmb2xkZXIgcGF0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCgpO1xuICAgIGlmICghXy5pc0ludGVnZXIoY3VycmVudFVwZ3JhZGVUaW1lc3RhbXApKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdJdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgdGltZXN0YW1wIG9mIHRoZSBwYWNrYWdlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGltZXN0YW1wUGF0aCA9IHBhdGgucmVzb2x2ZShob21lRm9sZGVyLCBXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCk7XG4gICAgY29uc3QgZGlkVGltZXN0YW1wRXhpc3QgPSBhd2FpdCBmcy5leGlzdHModGltZXN0YW1wUGF0aCk7XG4gICAgaWYgKGRpZFRpbWVzdGFtcEV4aXN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3ModGltZXN0YW1wUGF0aCwgZnMuV19PSyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nIGlzIG5vdCB3cml0ZWFibGUuIGAgK1xuICAgICAgICAgIGBTa2lwcGluZyBzb3VyY2VzIGNsZWFudXBgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjZW50VXBncmFkZVRpbWVzdGFtcCA9IHBhcnNlSW50KGF3YWl0IGZzLnJlYWRGaWxlKHRpbWVzdGFtcFBhdGgsICd1dGY4JyksIDEwKTtcbiAgICAgIGlmIChfLmlzSW50ZWdlcihyZWNlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgICBpZiAocmVjZW50VXBncmFkZVRpbWVzdGFtcCA+PSBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCkge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYFdlYkRyaXZlckFnZW50IGRvZXMgbm90IG5lZWQgYSBjbGVhbnVwLiBUaGUgc291cmNlcyBhcmUgdXAgdG8gZGF0ZSBgICtcbiAgICAgICAgICAgIGAoJHtyZWNlbnRVcGdyYWRlVGltZXN0YW1wfSA+PSAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfSlgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgc291cmNlcyBoYXZlIGJlZW4gdXBncmFkZWQgYCArXG4gICAgICAgICAgYCgke3JlY2VudFVwZ3JhZGVUaW1lc3RhbXB9IDwgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0pYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBUaGUgcmVjZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBjb3JydXB0ZWQuIFRyeWluZyB0byBmaXggaXRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZSh0aW1lc3RhbXBQYXRoKSk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGltZXN0YW1wUGF0aCwgYCR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9YCwgJ3V0ZjgnKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBTdG9yZWQgdGhlIHJlY2VudCBXZWJEcml2ZXJBZ2VudCB1cGdyYWRlIHRpbWVzdGFtcCAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfSBgICtcbiAgICAgICAgYGF0ICcke3RpbWVzdGFtcFBhdGh9J2ApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFVuYWJsZSB0byBjcmVhdGUgdGhlIHJlY2VudCBXZWJEcml2ZXJBZ2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScuIGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGlkVGltZXN0YW1wRXhpc3QpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1RoZXJlIGlzIG5vIG5lZWQgdG8gcGVyZm9ybSB0aGUgcHJvamVjdCBjbGVhbnVwLiBBIGZyZXNoIGluc3RhbGwgaGFzIGJlZW4gZGV0ZWN0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLmNsZWFuUHJvamVjdCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBwZXJmb3JtIFdlYkRyaXZlckFnZW50IHByb2plY3QgY2xlYW51cC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY3VycmVudCBydW5uaW5nIFdEQSdzIHN0YXR1cyBsaWtlIGJlbG93IGFmdGVyIGxhdW5jaGluZyBXREFcbiAgICoge1xuICAgKiAgIFwic3RhdGVcIjogXCJzdWNjZXNzXCIsXG4gICAqICAgXCJvc1wiOiB7XG4gICAqICAgICBcIm5hbWVcIjogXCJpT1NcIixcbiAgICogICAgIFwidmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwic2RrVmVyc2lvblwiOiBcIjExLjNcIlxuICAgKiAgIH0sXG4gICAqICAgXCJpb3NcIjoge1xuICAgKiAgICAgXCJzaW11bGF0b3JWZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJpcFwiOiBcIjE3Mi4yNTQuOTkuMzRcIlxuICAgKiAgIH0sXG4gICAqICAgXCJidWlsZFwiOiB7XG4gICAqICAgICBcInRpbWVcIjogXCJKdW4gMjQgMjAxOCAxNzowODoyMVwiLFxuICAgKiAgICAgXCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllclwiOiBcImNvbS5mYWNlYm9vay5XZWJEcml2ZXJBZ2VudFJ1bm5lclwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWQgTGF1bmNoIFdEQSBhbmQgZXN0YWJsaXNoIHRoZSBzZXNzaW9uIHdpdGggdGhpcyBzZXNzaW9uSWRcbiAgICogQHJldHVybiB7P29iamVjdH0gU3RhdGUgT2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGxhdW5jaCAoc2Vzc2lvbklkKSB7XG4gICAgaWYgKHRoaXMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFVzaW5nIHByb3ZpZGVkIFdlYmRyaXZlckFnZW50IGF0ICcke3RoaXMud2ViRHJpdmVyQWdlbnRVcmx9J2ApO1xuICAgICAgdGhpcy51cmwgPSB0aGlzLndlYkRyaXZlckFnZW50VXJsO1xuICAgICAgdGhpcy5zZXR1cFByb3hpZXMoc2Vzc2lvbklkKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH1cblxuICAgIHRoaXMubG9nLmluZm8oJ0xhdW5jaGluZyBXZWJEcml2ZXJBZ2VudCBvbiB0aGUgZGV2aWNlJyk7XG5cbiAgICB0aGlzLnNldHVwUHJveGllcyhzZXNzaW9uSWQpO1xuXG4gICAgaWYgKCF0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgJiYgIWF3YWl0IGZzLmV4aXN0cyh0aGlzLmFnZW50UGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHJ5aW5nIHRvIHVzZSBXZWJEcml2ZXJBZ2VudCBwcm9qZWN0IGF0ICcke3RoaXMuYWdlbnRQYXRofScgYnV0IHRoZSBgICtcbiAgICAgICAgICAgICAgICAgICAgICAnZmlsZSBkb2VzIG5vdCBleGlzdCcpO1xuICAgIH1cblxuICAgIC8vIHVzZVhjdGVzdHJ1bkZpbGUgYW5kIHVzZVByZWJ1aWx0V0RBIHVzZSBleGlzdGluZyBkZXBlbmRlbmNpZXNcbiAgICAvLyBJdCBkZXBlbmRzIG9uIHVzZXIgc2lkZVxuICAgIGlmICh0aGlzLmlkYiB8fCB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgfHwgKHRoaXMuZGVyaXZlZERhdGFQYXRoICYmIHRoaXMudXNlUHJlYnVpbHRXREEpKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdTa2lwcGVkIFdEQSBwcm9qZWN0IGNsZWFudXAgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBjYXBhYmlsaXRpZXMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUodGhpcy5ib290c3RyYXBQYXRoKTtcbiAgICAgIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksXG4gICAgICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuX2NsZWFudXBQcm9qZWN0SWZGcmVzaCgpKTtcbiAgICB9XG5cbiAgICAvLyBXZSBuZWVkIHRvIHByb3ZpZGUgV0RBIGxvY2FsIHBvcnQsIGJlY2F1c2UgaXQgbWlnaHQgYmUgb2NjdXBpZWRcbiAgICBhd2FpdCByZXNldFRlc3RQcm9jZXNzZXModGhpcy5kZXZpY2UudWRpZCwgIXRoaXMuaXNSZWFsRGV2aWNlKTtcblxuICAgIGlmICh0aGlzLmlkYikge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc3RhcnRXaXRoSURCKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLmluaXQodGhpcy5ub1Nlc3Npb25Qcm94eSk7XG5cbiAgICAvLyBTdGFydCB0aGUgeGNvZGVidWlsZCBwcm9jZXNzXG4gICAgaWYgKHRoaXMucHJlYnVpbGRXREEpIHtcbiAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5wcmVidWlsZCgpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KCk7XG4gIH1cblxuICBhc3luYyBzdGFydFdpdGhJREIgKCkge1xuICAgIHRoaXMubG9nLmluZm8oJ1dpbGwgbGF1bmNoIFdEQSB3aXRoIGlkYiBpbnN0ZWFkIG9mIHhjb2RlYnVpbGQgc2luY2UgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZyBpcyBlbmFibGVkJyk7XG4gICAgY29uc3Qge3dkYUJ1bmRsZUlkLCB0ZXN0QnVuZGxlSWR9ID0gYXdhaXQgdGhpcy5wcmVwYXJlV0RBKCk7XG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCxcbiAgICB9O1xuICAgIGlmICh0aGlzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgZW52Lk1KUEVHX1NFUlZFUl9QT1JUID0gdGhpcy5tanBlZ1NlcnZlclBvcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaWRiLnJ1blhDVUlUZXN0KHdkYUJ1bmRsZUlkLCB3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkLCB7ZW52fSk7XG4gIH1cblxuICBhc3luYyBwYXJzZUJ1bmRsZUlkICh3ZGFCdW5kbGVQYXRoKSB7XG4gICAgY29uc3QgaW5mb1BsaXN0UGF0aCA9IHBhdGguam9pbih3ZGFCdW5kbGVQYXRoLCAnSW5mby5wbGlzdCcpO1xuICAgIGNvbnN0IGluZm9QbGlzdCA9IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3QoYXdhaXQgZnMucmVhZEZpbGUoaW5mb1BsaXN0UGF0aCkpO1xuICAgIGlmICghaW5mb1BsaXN0LkNGQnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBidW5kbGUgaWQgaW4gJyR7aW5mb1BsaXN0UGF0aH0nYCk7XG4gICAgfVxuICAgIHJldHVybiBpbmZvUGxpc3QuQ0ZCdW5kbGVJZGVudGlmaWVyO1xuICB9XG5cbiAgYXN5bmMgcHJlcGFyZVdEQSAoKSB7XG4gICAgY29uc3Qgd2RhQnVuZGxlUGF0aCA9IHRoaXMud2RhQnVuZGxlUGF0aCB8fCBhd2FpdCB0aGlzLmZldGNoV0RBQnVuZGxlKCk7XG4gICAgY29uc3Qgd2RhQnVuZGxlSWQgPSBhd2FpdCB0aGlzLnBhcnNlQnVuZGxlSWQod2RhQnVuZGxlUGF0aCk7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmRldmljZS5pc0FwcEluc3RhbGxlZCh3ZGFCdW5kbGVJZCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGV2aWNlLmluc3RhbGxBcHAod2RhQnVuZGxlUGF0aCk7XG4gICAgfVxuICAgIGNvbnN0IHRlc3RCdW5kbGVJZCA9IGF3YWl0IHRoaXMuaWRiLmluc3RhbGxYQ1Rlc3RCdW5kbGUocGF0aC5qb2luKHdkYUJ1bmRsZVBhdGgsICdQbHVnSW5zJywgJ1dlYkRyaXZlckFnZW50UnVubmVyLnhjdGVzdCcpKTtcbiAgICByZXR1cm4ge3dkYUJ1bmRsZUlkLCB0ZXN0QnVuZGxlSWQsIHdkYUJ1bmRsZVBhdGh9O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hXREFCdW5kbGUgKCkge1xuICAgIGlmICghdGhpcy5kZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBhd2FpdCBidW5kbGVXREFTaW0odGhpcy54Y29kZWJ1aWxkKTtcbiAgICB9XG4gICAgY29uc3Qgd2RhQnVuZGxlUGF0aHMgPSBhd2FpdCBmcy5nbG9iKGAke3RoaXMuZGVyaXZlZERhdGFQYXRofS8qKi8qJHtXREFfUlVOTkVSX0FQUH0vYCwge1xuICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgfSk7XG4gICAgaWYgKF8uaXNFbXB0eSh3ZGFCdW5kbGVQYXRocykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIFdEQSBidW5kbGUgaW4gJyR7dGhpcy5kZXJpdmVkRGF0YVBhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gd2RhQnVuZGxlUGF0aHNbMF07XG4gIH1cblxuICBhc3luYyBpc1NvdXJjZUZyZXNoICgpIHtcbiAgICBjb25zdCBleGlzdHNQcm9taXNlcyA9IFtcbiAgICAgICdSZXNvdXJjZXMnLFxuICAgICAgYFJlc291cmNlcyR7cGF0aC5zZXB9V2ViRHJpdmVyQWdlbnQuYnVuZGxlYCxcbiAgICBdLm1hcCgoc3ViUGF0aCkgPT4gZnMuZXhpc3RzKHBhdGgucmVzb2x2ZSh0aGlzLmJvb3RzdHJhcFBhdGgsIHN1YlBhdGgpKSk7XG4gICAgcmV0dXJuIChhd2FpdCBCLmFsbChleGlzdHNQcm9taXNlcykpLnNvbWUoKHYpID0+IHYgPT09IGZhbHNlKTtcbiAgfVxuXG4gIHNldHVwUHJveGllcyAoc2Vzc2lvbklkKSB7XG4gICAgY29uc3QgcHJveHlPcHRzID0ge1xuICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgIHNlcnZlcjogdGhpcy51cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiB0aGlzLnVybC5wb3J0LFxuICAgICAgYmFzZTogdGhpcy5iYXNlUGF0aCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMud2RhQ29ubmVjdGlvblRpbWVvdXQsXG4gICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgfTtcblxuICAgIHRoaXMuandwcm94eSA9IG5ldyBKV1Byb3h5KHByb3h5T3B0cyk7XG4gICAgdGhpcy5qd3Byb3h5LnNlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzLmJpbmQodGhpcy5qd3Byb3h5KTtcblxuICAgIHRoaXMubm9TZXNzaW9uUHJveHkgPSBuZXcgTm9TZXNzaW9uUHJveHkocHJveHlPcHRzKTtcbiAgfVxuXG4gIGFzeW5jIHF1aXQgKCkge1xuICAgIHRoaXMubG9nLmluZm8oJ1NodXR0aW5nIGRvd24gc3ViLXByb2Nlc3NlcycpO1xuXG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnF1aXQoKTtcbiAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucmVzZXQoKTtcblxuICAgIGlmICh0aGlzLmp3cHJveHkpIHtcbiAgICAgIHRoaXMuandwcm94eS5zZXNzaW9uSWQgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmFyZ3Mud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIC8vIGlmIHdlIHBvcHVsYXRlZCB0aGUgdXJsIG91cnNlbHZlcyAoZHVyaW5nIGBzZXR1cENhY2hpbmdgIGNhbGwsIGZvciBpbnN0YW5jZSlcbiAgICAgIC8vIHRoZW4gY2xlYW4gdGhhdCB1cC4gSWYgdGhlIHVybCB3YXMgc3VwcGxpZWQsIHdlIHdhbnQgdG8ga2VlcCBpdFxuICAgICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHVybCAoKSB7XG4gICAgaWYgKCF0aGlzLl91cmwpIHtcbiAgICAgIGlmICh0aGlzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgIHRoaXMuX3VybCA9IHVybC5wYXJzZSh0aGlzLndlYkRyaXZlckFnZW50VXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLndkYUxvY2FsUG9ydCB8fCBXREFfQUdFTlRfUE9SVDtcbiAgICAgICAgY29uc3Qge3Byb3RvY29sLCBob3N0bmFtZX0gPSB1cmwucGFyc2UodGhpcy53ZGFCYXNlVXJsIHx8IFdEQV9CQVNFX1VSTCk7XG4gICAgICAgIHRoaXMuX3VybCA9IHVybC5wYXJzZShgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9OiR7cG9ydH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwgKF91cmwpIHtcbiAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UoX3VybCk7XG4gIH1cblxuICBnZXQgZnVsbHlTdGFydGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydGVkO1xuICB9XG5cbiAgc2V0IGZ1bGx5U3RhcnRlZCAoc3RhcnRlZCA9IGZhbHNlKSB7XG4gICAgdGhpcy5zdGFydGVkID0gc3RhcnRlZDtcbiAgfVxuXG4gIGFzeW5jIHJldHJpZXZlRGVyaXZlZERhdGFQYXRoICgpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2UgcnVubmluZyBXREEgaWYgaXQgaGFzIHRoZSBzYW1lIGJ1bmRsZSBpZCB3aXRoIHVwZGF0ZWRXREFCdW5kbGVJZC5cbiAgICogT3IgcmV1c2UgaXQgaWYgaXQgaGFzIHRoZSBkZWZhdWx0IGlkIHdpdGhvdXQgdXBkYXRlZFdEQUJ1bmRsZUlkLlxuICAgKiBVbmluc3RhbGwgaXQgaWYgdGhlIG1ldGhvZCBmYWNlcyBhbiBleGNlcHRpb24gZm9yIHRoZSBhYm92ZSBzaXR1YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cGRhdGVkV0RBQnVuZGxlSWQgQnVuZGxlSWQgeW91J2QgbGlrZSB0byB1c2VcbiAgICovXG4gIGFzeW5jIHNldHVwQ2FjaGluZyAoKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICBpZiAoIXN0YXR1cyB8fCAhc3RhdHVzLmJ1aWxkKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnV0RBIGlzIGN1cnJlbnRseSBub3QgcnVubmluZy4gVGhlcmUgaXMgbm90aGluZyB0byBjYWNoZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyLFxuICAgICAgdXBncmFkZWRBdCxcbiAgICB9ID0gc3RhdHVzLmJ1aWxkO1xuICAgIC8vIGZvciByZWFsIGRldmljZVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSAmJiB1dGlsLmhhc1ZhbHVlKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSAmJiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCAhPT0gcHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFdpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgYnVuZGxlIGlkLiBUaGUgYWN0dWFsIHZhbHVlIGlzICcke3Byb2R1Y3RCdW5kbGVJZGVudGlmaWVyfScuYCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgICB9XG4gICAgLy8gZm9yIHNpbXVsYXRvclxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSAmJiAhdXRpbC5oYXNWYWx1ZSh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkgJiYgV0RBX1JVTk5FUl9CVU5ETEVfSUQgIT09IHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdHMgYnVuZGxlIGlkIGlzIG5vdCBlcXVhbCB0byB0aGUgZGVmYXVsdCB2YWx1ZSAke1dEQV9SVU5ORVJfQlVORExFX0lEfWApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0dWFsVXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVXBncmFkZSB0aW1lc3RhbXAgb2YgdGhlIGN1cnJlbnRseSBidW5kbGVkIFdEQTogJHthY3R1YWxVcGdyYWRlVGltZXN0YW1wfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGBVcGdyYWRlIHRpbWVzdGFtcCBvZiB0aGUgV0RBIG9uIHRoZSBkZXZpY2U6ICR7dXBncmFkZWRBdH1gKTtcbiAgICBpZiAoYWN0dWFsVXBncmFkZVRpbWVzdGFtcCAmJiB1cGdyYWRlZEF0ICYmIF8udG9Mb3dlcihgJHthY3R1YWxVcGdyYWRlVGltZXN0YW1wfWApICE9PSBfLnRvTG93ZXIoYCR7dXBncmFkZWRBdH1gKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXQgaGFzIGRpZmZlcmVudCB2ZXJzaW9uIGluIGNvbXBhcmlzb24gdG8gdGhlIG9uZSAnICtcbiAgICAgICAgYHdoaWNoIGlzIGJ1bmRsZWQgd2l0aCBhcHBpdW0teGN1aXRlc3QtZHJpdmVyIG1vZHVsZSAoJHthY3R1YWxVcGdyYWRlVGltZXN0YW1wfSAhPSAke3VwZ3JhZGVkQXR9KWApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpXG4gICAgICA/IGBXaWxsIHJldXNlIHByZXZpb3VzbHkgY2FjaGVkIFdEQSBpbnN0YW5jZSBhdCAnJHt0aGlzLnVybC5ocmVmfScgd2l0aCAnJHtwcm9kdWN0QnVuZGxlSWRlbnRpZmllcn0nYFxuICAgICAgOiBgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBXREEgaW5zdGFuY2UgYXQgJyR7dGhpcy51cmwuaHJlZn0nYDtcbiAgICB0aGlzLmxvZy5pbmZvKGAke21lc3NhZ2V9LiBTZXQgdGhlIHdkYUxvY2FsUG9ydCBjYXBhYmlsaXR5IHRvIGEgdmFsdWUgZGlmZmVyZW50IGZyb20gJHt0aGlzLnVybC5wb3J0fSBpZiB0aGlzIGlzIGFuIHVuZGVzaXJlZCBiZWhhdmlvci5gKTtcbiAgICB0aGlzLndlYkRyaXZlckFnZW50VXJsID0gdGhpcy51cmwuaHJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWl0IGFuZCB1bmluc3RhbGwgcnVubmluZyBXREEuXG4gICAqL1xuICBhc3luYyBxdWl0QW5kVW5pbnN0YWxsICgpIHtcbiAgICBhd2FpdCB0aGlzLnF1aXQoKTtcbiAgICBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdlYkRyaXZlckFnZW50O1xuZXhwb3J0IHsgV2ViRHJpdmVyQWdlbnQgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQSxNQUFNQSxrQkFBa0IsR0FBRyxLQUFLLElBQWhDO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLElBQXZCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsNkJBQTNCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsSUFBSUMsa0JBQUosRUFBL0I7O0FBRUEsTUFBTUMsY0FBTixDQUFxQjtF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
451
+ exports.default = _default;
452
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXREFfTEFVTkNIX1RJTUVPVVQiLCJXREFfQUdFTlRfUE9SVCIsIldEQV9DRl9CVU5ETEVfTkFNRSIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXZWJEcml2ZXJBZ2VudCIsImNvbnN0cnVjdG9yIiwieGNvZGVWZXJzaW9uIiwiYXJncyIsImxvZyIsIl8iLCJjbG9uZSIsImRlZmF1bHRMb2dnZXIiLCJkZXZpY2UiLCJwbGF0Zm9ybVZlcnNpb24iLCJwbGF0Zm9ybU5hbWUiLCJpb3NTZGtWZXJzaW9uIiwiaG9zdCIsImlzUmVhbERldmljZSIsInJlYWxEZXZpY2UiLCJpZGIiLCJ3ZGFCdW5kbGVQYXRoIiwic2V0V0RBUGF0aHMiLCJib290c3RyYXBQYXRoIiwiYWdlbnRQYXRoIiwid2RhTG9jYWxQb3J0Iiwid2RhUmVtb3RlUG9ydCIsIndkYUJhc2VVcmwiLCJXREFfQkFTRV9VUkwiLCJwcmVidWlsZFdEQSIsIndlYkRyaXZlckFnZW50VXJsIiwic3RhcnRlZCIsIndkYUNvbm5lY3Rpb25UaW1lb3V0IiwidXNlWGN0ZXN0cnVuRmlsZSIsInVzZVByZWJ1aWx0V0RBIiwiZGVyaXZlZERhdGFQYXRoIiwibWpwZWdTZXJ2ZXJQb3J0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwieGNvZGVidWlsZCIsIlhjb2RlQnVpbGQiLCJzaG93WGNvZGVMb2ciLCJ4Y29kZUNvbmZpZ0ZpbGUiLCJ4Y29kZU9yZ0lkIiwieGNvZGVTaWduaW5nSWQiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwidXNlU2ltcGxlQnVpbGRUZXN0IiwibGF1bmNoVGltZW91dCIsIndkYUxhdW5jaFRpbWVvdXQiLCJhbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbiIsInJlc3VsdEJ1bmRsZVBhdGgiLCJyZXN1bHRCdW5kbGVWZXJzaW9uIiwiQk9PVFNUUkFQX1BBVEgiLCJpbmZvIiwicGF0aCIsInJlc29sdmUiLCJjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMiLCJvYnNvbGV0ZVBpZHMiLCJnZXRQSURzTGlzdGVuaW5nT25Qb3J0IiwidXJsIiwicG9ydCIsImNtZExpbmUiLCJpbmNsdWRlcyIsInRvTG93ZXJDYXNlIiwidWRpZCIsImlzRW1wdHkiLCJkZWJ1ZyIsImxlbmd0aCIsImV4ZWMiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJpc1J1bm5pbmciLCJnZXRTdGF0dXMiLCJiYXNlUGF0aCIsIm5vU2Vzc2lvblByb3h5IiwiTm9TZXNzaW9uUHJveHkiLCJzZXJ2ZXIiLCJob3N0bmFtZSIsImJhc2UiLCJ0aW1lb3V0IiwiY29tbWFuZCIsImVyciIsImhyZWYiLCJ1bmluc3RhbGwiLCJidW5kbGVJZHMiLCJnZXRVc2VySW5zdGFsbGVkQnVuZGxlSWRzQnlCdW5kbGVOYW1lIiwiYnVuZGxlSWQiLCJyZW1vdmVBcHAiLCJfY2xlYW51cFByb2plY3RJZkZyZXNoIiwiaG9tZUZvbGRlciIsInByb2Nlc3MiLCJlbnYiLCJIT01FIiwiY3VycmVudFVwZ3JhZGVUaW1lc3RhbXAiLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwiaXNJbnRlZ2VyIiwidGltZXN0YW1wUGF0aCIsIldEQV9VUEdSQURFX1RJTUVTVEFNUF9QQVRIIiwiZGlkVGltZXN0YW1wRXhpc3QiLCJmcyIsImV4aXN0cyIsImFjY2VzcyIsIldfT0siLCJpZ24iLCJyZWNlbnRVcGdyYWRlVGltZXN0YW1wIiwicGFyc2VJbnQiLCJyZWFkRmlsZSIsIm1rZGlycCIsImRpcm5hbWUiLCJ3cml0ZUZpbGUiLCJjbGVhblByb2plY3QiLCJsYXVuY2giLCJzZXNzaW9uSWQiLCJzZXR1cFByb3hpZXMiLCJFcnJvciIsInN5bmNocm9uaXphdGlvbktleSIsIm5vcm1hbGl6ZSIsImFjcXVpcmUiLCJyZXNldFRlc3RQcm9jZXNzZXMiLCJzdGFydFdpdGhJREIiLCJpbml0IiwicHJlYnVpbGQiLCJzdGFydCIsIndkYUJ1bmRsZUlkIiwidGVzdEJ1bmRsZUlkIiwicHJlcGFyZVdEQSIsIlVTRV9QT1JUIiwiV0RBX1BST0RVQ1RfQlVORExFX0lERU5USUZJRVIiLCJNSlBFR19TRVJWRVJfUE9SVCIsInJ1blhDVUlUZXN0IiwicGFyc2VCdW5kbGVJZCIsImluZm9QbGlzdFBhdGgiLCJqb2luIiwiaW5mb1BsaXN0IiwicGxpc3QiLCJwYXJzZVBsaXN0IiwiQ0ZCdW5kbGVJZGVudGlmaWVyIiwiZmV0Y2hXREFCdW5kbGUiLCJpc0FwcEluc3RhbGxlZCIsImluc3RhbGxBcHAiLCJpbnN0YWxsWENUZXN0QnVuZGxlIiwiYnVuZGxlV0RBU2ltIiwid2RhQnVuZGxlUGF0aHMiLCJnbG9iIiwiV0RBX1JVTk5FUl9BUFAiLCJhYnNvbHV0ZSIsImlzU291cmNlRnJlc2giLCJleGlzdHNQcm9taXNlcyIsInNlcCIsIm1hcCIsInN1YlBhdGgiLCJCIiwiYWxsIiwic29tZSIsInYiLCJwcm94eU9wdHMiLCJrZWVwQWxpdmUiLCJqd3Byb3h5IiwiSldQcm94eSIsInByb3h5UmVxUmVzIiwiYmluZCIsInF1aXQiLCJyZXNldCIsIl91cmwiLCJwYXJzZSIsInByb3RvY29sIiwiZnVsbHlTdGFydGVkIiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJzZXR1cENhY2hpbmciLCJzdGF0dXMiLCJidWlsZCIsInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyIiwidXBncmFkZWRBdCIsInV0aWwiLCJoYXNWYWx1ZSIsIldEQV9SVU5ORVJfQlVORExFX0lEIiwiYWN0dWFsVXBncmFkZVRpbWVzdGFtcCIsInRvTG93ZXIiLCJxdWl0QW5kVW5pbnN0YWxsIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3dlYmRyaXZlcmFnZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IEpXUHJveHkgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IGZzLCB1dGlsLCBwbGlzdCwgbWtkaXJwIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgTm9TZXNzaW9uUHJveHkgfSBmcm9tICcuL25vLXNlc3Npb24tcHJveHknO1xuaW1wb3J0IHtcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgcmVzZXRUZXN0UHJvY2Vzc2VzLCBnZXRQSURzTGlzdGVuaW5nT25Qb3J0LCBCT09UU1RSQVBfUEFUSFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBYY29kZUJ1aWxkIGZyb20gJy4veGNvZGVidWlsZCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyBidW5kbGVXREFTaW0gfSBmcm9tICcuL2NoZWNrLWRlcGVuZGVuY2llcyc7XG5pbXBvcnQge1xuICBXREFfUlVOTkVSX0JVTkRMRV9JRCwgV0RBX1JVTk5FUl9BUFAsIFdEQV9CQVNFX1VSTCwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgsXG59IGZyb20gJy4vY29uc3RhbnRzJztcblxuY29uc3QgV0RBX0xBVU5DSF9USU1FT1VUID0gNjAgKiAxMDAwO1xuY29uc3QgV0RBX0FHRU5UX1BPUlQgPSA4MTAwO1xuY29uc3QgV0RBX0NGX0JVTkRMRV9OQU1FID0gJ1dlYkRyaXZlckFnZW50UnVubmVyLVJ1bm5lcic7XG5jb25zdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuXG5jbGFzcyBXZWJEcml2ZXJBZ2VudCB7XG4gIGNvbnN0cnVjdG9yICh4Y29kZVZlcnNpb24sIGFyZ3MgPSB7fSwgbG9nID0gbnVsbCkge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuXG4gICAgdGhpcy5hcmdzID0gXy5jbG9uZShhcmdzKTtcbiAgICB0aGlzLmxvZyA9IGxvZyA/PyBkZWZhdWx0TG9nZ2VyO1xuXG4gICAgdGhpcy5kZXZpY2UgPSBhcmdzLmRldmljZTtcbiAgICB0aGlzLnBsYXRmb3JtVmVyc2lvbiA9IGFyZ3MucGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMucGxhdGZvcm1OYW1lID0gYXJncy5wbGF0Zm9ybU5hbWU7XG4gICAgdGhpcy5pb3NTZGtWZXJzaW9uID0gYXJncy5pb3NTZGtWZXJzaW9uO1xuICAgIHRoaXMuaG9zdCA9IGFyZ3MuaG9zdDtcbiAgICB0aGlzLmlzUmVhbERldmljZSA9ICEhYXJncy5yZWFsRGV2aWNlO1xuICAgIHRoaXMuaWRiID0gKGFyZ3MuZGV2aWNlIHx8IHt9KS5pZGI7XG4gICAgdGhpcy53ZGFCdW5kbGVQYXRoID0gYXJncy53ZGFCdW5kbGVQYXRoO1xuXG4gICAgdGhpcy5zZXRXREFQYXRocyhhcmdzLmJvb3RzdHJhcFBhdGgsIGFyZ3MuYWdlbnRQYXRoKTtcblxuICAgIHRoaXMud2RhTG9jYWxQb3J0ID0gYXJncy53ZGFMb2NhbFBvcnQ7XG4gICAgdGhpcy53ZGFSZW1vdGVQb3J0ID0gYXJncy53ZGFMb2NhbFBvcnQgfHwgV0RBX0FHRU5UX1BPUlQ7XG4gICAgdGhpcy53ZGFCYXNlVXJsID0gYXJncy53ZGFCYXNlVXJsIHx8IFdEQV9CQVNFX1VSTDtcblxuICAgIHRoaXMucHJlYnVpbGRXREEgPSBhcmdzLnByZWJ1aWxkV0RBO1xuXG4gICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IGFyZ3Mud2ViRHJpdmVyQWdlbnRVcmw7XG5cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMud2RhQ29ubmVjdGlvblRpbWVvdXQgPSBhcmdzLndkYUNvbm5lY3Rpb25UaW1lb3V0O1xuXG4gICAgdGhpcy51c2VYY3Rlc3RydW5GaWxlID0gYXJncy51c2VYY3Rlc3RydW5GaWxlO1xuICAgIHRoaXMudXNlUHJlYnVpbHRXREEgPSBhcmdzLnVzZVByZWJ1aWx0V0RBO1xuICAgIHRoaXMuZGVyaXZlZERhdGFQYXRoID0gYXJncy5kZXJpdmVkRGF0YVBhdGg7XG4gICAgdGhpcy5tanBlZ1NlcnZlclBvcnQgPSBhcmdzLm1qcGVnU2VydmVyUG9ydDtcblxuICAgIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkID0gYXJncy51cGRhdGVkV0RBQnVuZGxlSWQ7XG5cbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBuZXcgWGNvZGVCdWlsZCh0aGlzLnhjb2RlVmVyc2lvbiwgdGhpcy5kZXZpY2UsIHtcbiAgICAgIHBsYXRmb3JtVmVyc2lvbjogdGhpcy5wbGF0Zm9ybVZlcnNpb24sXG4gICAgICBwbGF0Zm9ybU5hbWU6IHRoaXMucGxhdGZvcm1OYW1lLFxuICAgICAgaW9zU2RrVmVyc2lvbjogdGhpcy5pb3NTZGtWZXJzaW9uLFxuICAgICAgYWdlbnRQYXRoOiB0aGlzLmFnZW50UGF0aCxcbiAgICAgIGJvb3RzdHJhcFBhdGg6IHRoaXMuYm9vdHN0cmFwUGF0aCxcbiAgICAgIHJlYWxEZXZpY2U6IHRoaXMuaXNSZWFsRGV2aWNlLFxuICAgICAgc2hvd1hjb2RlTG9nOiBhcmdzLnNob3dYY29kZUxvZyxcbiAgICAgIHhjb2RlQ29uZmlnRmlsZTogYXJncy54Y29kZUNvbmZpZ0ZpbGUsXG4gICAgICB4Y29kZU9yZ0lkOiBhcmdzLnhjb2RlT3JnSWQsXG4gICAgICB4Y29kZVNpZ25pbmdJZDogYXJncy54Y29kZVNpZ25pbmdJZCxcbiAgICAgIGtleWNoYWluUGF0aDogYXJncy5rZXljaGFpblBhdGgsXG4gICAgICBrZXljaGFpblBhc3N3b3JkOiBhcmdzLmtleWNoYWluUGFzc3dvcmQsXG4gICAgICB1c2VTaW1wbGVCdWlsZFRlc3Q6IGFyZ3MudXNlU2ltcGxlQnVpbGRUZXN0LFxuICAgICAgdXNlUHJlYnVpbHRXREE6IGFyZ3MudXNlUHJlYnVpbHRXREEsXG4gICAgICB1cGRhdGVkV0RBQnVuZGxlSWQ6IHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkLFxuICAgICAgbGF1bmNoVGltZW91dDogYXJncy53ZGFMYXVuY2hUaW1lb3V0IHx8IFdEQV9MQVVOQ0hfVElNRU9VVCxcbiAgICAgIHdkYVJlbW90ZVBvcnQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIHVzZVhjdGVzdHJ1bkZpbGU6IHRoaXMudXNlWGN0ZXN0cnVuRmlsZSxcbiAgICAgIGRlcml2ZWREYXRhUGF0aDogYXJncy5kZXJpdmVkRGF0YVBhdGgsXG4gICAgICBtanBlZ1NlcnZlclBvcnQ6IHRoaXMubWpwZWdTZXJ2ZXJQb3J0LFxuICAgICAgYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb246IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24sXG4gICAgICByZXN1bHRCdW5kbGVQYXRoOiBhcmdzLnJlc3VsdEJ1bmRsZVBhdGgsXG4gICAgICByZXN1bHRCdW5kbGVWZXJzaW9uOiBhcmdzLnJlc3VsdEJ1bmRsZVZlcnNpb24sXG4gICAgfSwgdGhpcy5sb2cpO1xuICB9XG5cbiAgc2V0V0RBUGF0aHMgKGJvb3RzdHJhcFBhdGgsIGFnZW50UGF0aCkge1xuICAgIC8vIGFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgYSBwbGFjZSBmb3IgV0RBLiBUaGlzIGlzIHVuZG9jdW1lbnRlZCBhbmRcbiAgICAvLyBvbmx5IGhlcmUgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIGRldmVsb3BtZW50IG9mIFdEQVxuICAgIHRoaXMuYm9vdHN0cmFwUGF0aCA9IGJvb3RzdHJhcFBhdGggfHwgQk9PVFNUUkFQX1BBVEg7XG4gICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgV0RBIHBhdGg6ICcke3RoaXMuYm9vdHN0cmFwUGF0aH0nYCk7XG5cbiAgICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gc3BlY2lmeSBhZ2VudFBhdGggdG9vXG4gICAgdGhpcy5hZ2VudFBhdGggPSBhZ2VudFBhdGggfHwgcGF0aC5yZXNvbHZlKHRoaXMuYm9vdHN0cmFwUGF0aCwgJ1dlYkRyaXZlckFnZW50Lnhjb2RlcHJvaicpO1xuICAgIHRoaXMubG9nLmluZm8oYFVzaW5nIFdEQSBhZ2VudDogJyR7dGhpcy5hZ2VudFBhdGh9J2ApO1xuICB9XG5cbiAgYXN5bmMgY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzICgpIHtcbiAgICBjb25zdCBvYnNvbGV0ZVBpZHMgPSBhd2FpdCBnZXRQSURzTGlzdGVuaW5nT25Qb3J0KHRoaXMudXJsLnBvcnQsXG4gICAgICAoY21kTGluZSkgPT4gY21kTGluZS5pbmNsdWRlcygnL1dlYkRyaXZlckFnZW50UnVubmVyJykgJiZcbiAgICAgICAgIWNtZExpbmUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmRldmljZS51ZGlkLnRvTG93ZXJDYXNlKCkpKTtcblxuICAgIGlmIChfLmlzRW1wdHkob2Jzb2xldGVQaWRzKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYE5vIG9ic29sZXRlIGNhY2hlZCBwcm9jZXNzZXMgZnJvbSBwcmV2aW91cyBXREEgc2Vzc2lvbnMgYCArXG4gICAgICAgIGBsaXN0ZW5pbmcgb24gcG9ydCAke3RoaXMudXJsLnBvcnR9IGhhdmUgYmVlbiBmb3VuZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nLmluZm8oYERldGVjdGVkICR7b2Jzb2xldGVQaWRzLmxlbmd0aH0gb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3Mke29ic29sZXRlUGlkcy5sZW5ndGggPT09IDEgPyAnJyA6ICdlcyd9IGAgK1xuICAgICAgYGZyb20gcHJldmlvdXMgV0RBIHNlc3Npb25zLiBDbGVhbmluZyB0aGVtIHVwYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoJ2tpbGwnLCBvYnNvbGV0ZVBpZHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYEZhaWxlZCB0byBraWxsIG9ic29sZXRlIGNhY2hlZCBwcm9jZXNzJHtvYnNvbGV0ZVBpZHMubGVuZ3RoID09PSAxID8gJycgOiAnZXMnfSAnJHtvYnNvbGV0ZVBpZHN9Jy4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGlmIFdEQSBpcyBydW5uaW5nIG9yIG5vdFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIFdEQSBpcyBydW5uaW5nXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGlzUnVubmluZyAoKSB7XG4gICAgcmV0dXJuICEhKGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCkpO1xuICB9XG5cbiAgZ2V0IGJhc2VQYXRoICgpIHtcbiAgICBpZiAodGhpcy51cmwucGF0aCA9PT0gJy8nKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVybC5wYXRoIHx8ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBjdXJyZW50IHJ1bm5pbmcgV0RBJ3Mgc3RhdHVzIGxpa2UgYmVsb3dcbiAgICoge1xuICAgKiAgIFwic3RhdGVcIjogXCJzdWNjZXNzXCIsXG4gICAqICAgXCJvc1wiOiB7XG4gICAqICAgICBcIm5hbWVcIjogXCJpT1NcIixcbiAgICogICAgIFwidmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwic2RrVmVyc2lvblwiOiBcIjExLjNcIlxuICAgKiAgIH0sXG4gICAqICAgXCJpb3NcIjoge1xuICAgKiAgICAgXCJzaW11bGF0b3JWZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJpcFwiOiBcIjE3Mi4yNTQuOTkuMzRcIlxuICAgKiAgIH0sXG4gICAqICAgXCJidWlsZFwiOiB7XG4gICAqICAgICBcInRpbWVcIjogXCJKdW4gMjQgMjAxOCAxNzowODoyMVwiLFxuICAgKiAgICAgXCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllclwiOiBcImNvbS5mYWNlYm9vay5XZWJEcml2ZXJBZ2VudFJ1bm5lclwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEByZXR1cm4gez9vYmplY3R9IFN0YXRlIE9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIGNvbnN0IG5vU2Vzc2lvblByb3h5ID0gbmV3IE5vU2Vzc2lvblByb3h5KHtcbiAgICAgIHNlcnZlcjogdGhpcy51cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiB0aGlzLnVybC5wb3J0LFxuICAgICAgYmFzZTogdGhpcy5iYXNlUGF0aCxcbiAgICAgIHRpbWVvdXQ6IDMwMDAsXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBub1Nlc3Npb25Qcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFdEQSBpcyBub3QgbGlzdGVuaW5nIGF0ICcke3RoaXMudXJsLmhyZWZ9J2ApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuaW5zdGFsbCBXREFzIGZyb20gdGhlIHRlc3QgZGV2aWNlLlxuICAgKiBPdmVyIFhjb2RlIDExLCBtdWx0aXBsZSBXREEgY2FuIGJlIGluIHRoZSBkZXZpY2Ugc2luY2UgWGNvZGUgMTEgZ2VuZXJhdGVzIGRpZmZlcmVudCBXREEuXG4gICAqIEFwcGl1bSBkb2VzIG5vdCBleHBlY3QgbXVsdGlwbGUgV0RBcyBhcmUgcnVubmluZyBvbiBhIGRldmljZS5cbiAgICovXG4gIGFzeW5jIHVuaW5zdGFsbCAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJ1bmRsZUlkcyA9IGF3YWl0IHRoaXMuZGV2aWNlLmdldFVzZXJJbnN0YWxsZWRCdW5kbGVJZHNCeUJ1bmRsZU5hbWUoV0RBX0NGX0JVTkRMRV9OQU1FKTtcbiAgICAgIGlmIChfLmlzRW1wdHkoYnVuZGxlSWRzKSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gV0RBcyBvbiB0aGUgZGV2aWNlLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBVbmluc3RhbGxpbmcgV0RBczogJyR7YnVuZGxlSWRzfSdgKTtcbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgYnVuZGxlSWRzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGV2aWNlLnJlbW92ZUFwcChidW5kbGVJZCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoZSk7XG4gICAgICB0aGlzLmxvZy53YXJuKGBXZWJEcml2ZXJBZ2VudCB1bmluc3RhbGwgZmFpbGVkLiBQZXJoYXBzLCBpdCBpcyBhbHJlYWR5IHVuaW5zdGFsbGVkPyBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfY2xlYW51cFByb2plY3RJZkZyZXNoICgpIHtcbiAgICBjb25zdCBob21lRm9sZGVyID0gcHJvY2Vzcy5lbnYuSE9NRTtcbiAgICBpZiAoIWhvbWVGb2xkZXIpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1RoZSBIT01FIGZvbGRlciBwYXRoIGNhbm5vdCBiZSBkZXRlcm1pbmVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFVwZ3JhZGVUaW1lc3RhbXAgPSBhd2FpdCBnZXRXREFVcGdyYWRlVGltZXN0YW1wKCk7XG4gICAgaWYgKCFfLmlzSW50ZWdlcihjdXJyZW50VXBncmFkZVRpbWVzdGFtcCkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ0l0IGlzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lc3RhbXAgb2YgdGhlIHBhY2thZ2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lc3RhbXBQYXRoID0gcGF0aC5yZXNvbHZlKGhvbWVGb2xkZXIsIFdEQV9VUEdSQURFX1RJTUVTVEFNUF9QQVRIKTtcbiAgICBjb25zdCBkaWRUaW1lc3RhbXBFeGlzdCA9IGF3YWl0IGZzLmV4aXN0cyh0aW1lc3RhbXBQYXRoKTtcbiAgICBpZiAoZGlkVGltZXN0YW1wRXhpc3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2Vzcyh0aW1lc3RhbXBQYXRoLCBmcy5XX09LKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScgaXMgbm90IHdyaXRlYWJsZS4gYCArXG4gICAgICAgICAgYFNraXBwaW5nIHNvdXJjZXMgY2xlYW51cGApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByZWNlbnRVcGdyYWRlVGltZXN0YW1wID0gcGFyc2VJbnQoYXdhaXQgZnMucmVhZEZpbGUodGltZXN0YW1wUGF0aCwgJ3V0ZjgnKSwgMTApO1xuICAgICAgaWYgKF8uaXNJbnRlZ2VyKHJlY2VudFVwZ3JhZGVUaW1lc3RhbXApKSB7XG4gICAgICAgIGlmIChyZWNlbnRVcGdyYWRlVGltZXN0YW1wID49IGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wKSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgZG9lcyBub3QgbmVlZCBhIGNsZWFudXAuIFRoZSBzb3VyY2VzIGFyZSB1cCB0byBkYXRlIGAgK1xuICAgICAgICAgICAgYCgke3JlY2VudFVwZ3JhZGVUaW1lc3RhbXB9ID49ICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9KWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCBzb3VyY2VzIGhhdmUgYmVlbiB1cGdyYWRlZCBgICtcbiAgICAgICAgICBgKCR7cmVjZW50VXBncmFkZVRpbWVzdGFtcH0gPCAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfSlgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFRoZSByZWNlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nIGlzIGNvcnJ1cHRlZC4gVHJ5aW5nIHRvIGZpeCBpdGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBta2RpcnAocGF0aC5kaXJuYW1lKHRpbWVzdGFtcFBhdGgpKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aW1lc3RhbXBQYXRoLCBgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH1gLCAndXRmOCcpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFN0b3JlZCB0aGUgcmVjZW50IFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9IGAgK1xuICAgICAgICBgYXQgJyR7dGltZXN0YW1wUGF0aH0nYCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVW5hYmxlIHRvIGNyZWF0ZSB0aGUgcmVjZW50IFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9Jy4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkaWRUaW1lc3RhbXBFeGlzdCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnVGhlcmUgaXMgbm8gbmVlZCB0byBwZXJmb3JtIHRoZSBwcm9qZWN0IGNsZWFudXAuIEEgZnJlc2ggaW5zdGFsbCBoYXMgYmVlbiBkZXRlY3RlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQuY2xlYW5Qcm9qZWN0KCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBlcmZvcm0gV2ViRHJpdmVyQWdlbnQgcHJvamVjdCBjbGVhbnVwLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBjdXJyZW50IHJ1bm5pbmcgV0RBJ3Mgc3RhdHVzIGxpa2UgYmVsb3cgYWZ0ZXIgbGF1bmNoaW5nIFdEQVxuICAgKiB7XG4gICAqICAgXCJzdGF0ZVwiOiBcInN1Y2Nlc3NcIixcbiAgICogICBcIm9zXCI6IHtcbiAgICogICAgIFwibmFtZVwiOiBcImlPU1wiLFxuICAgKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJzZGtWZXJzaW9uXCI6IFwiMTEuM1wiXG4gICAqICAgfSxcbiAgICogICBcImlvc1wiOiB7XG4gICAqICAgICBcInNpbXVsYXRvclZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcImlwXCI6IFwiMTcyLjI1NC45OS4zNFwiXG4gICAqICAgfSxcbiAgICogICBcImJ1aWxkXCI6IHtcbiAgICogICAgIFwidGltZVwiOiBcIkp1biAyNCAyMDE4IDE3OjA4OjIxXCIsXG4gICAqICAgICBcInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyXCI6IFwiY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCBMYXVuY2ggV0RBIGFuZCBlc3RhYmxpc2ggdGhlIHNlc3Npb24gd2l0aCB0aGlzIHNlc3Npb25JZFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBTdGF0ZSBPYmplY3RcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgbGF1bmNoIChzZXNzaW9uSWQpIHtcbiAgICBpZiAodGhpcy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgcHJvdmlkZWQgV2ViZHJpdmVyQWdlbnQgYXQgJyR7dGhpcy53ZWJEcml2ZXJBZ2VudFVybH0nYCk7XG4gICAgICB0aGlzLnVybCA9IHRoaXMud2ViRHJpdmVyQWdlbnRVcmw7XG4gICAgICB0aGlzLnNldHVwUHJveGllcyhzZXNzaW9uSWQpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2cuaW5mbygnTGF1bmNoaW5nIFdlYkRyaXZlckFnZW50IG9uIHRoZSBkZXZpY2UnKTtcblxuICAgIHRoaXMuc2V0dXBQcm94aWVzKHNlc3Npb25JZCk7XG5cbiAgICBpZiAoIXRoaXMudXNlWGN0ZXN0cnVuRmlsZSAmJiAhYXdhaXQgZnMuZXhpc3RzKHRoaXMuYWdlbnRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcnlpbmcgdG8gdXNlIFdlYkRyaXZlckFnZW50IHByb2plY3QgYXQgJyR7dGhpcy5hZ2VudFBhdGh9JyBidXQgdGhlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICdmaWxlIGRvZXMgbm90IGV4aXN0Jyk7XG4gICAgfVxuXG4gICAgLy8gdXNlWGN0ZXN0cnVuRmlsZSBhbmQgdXNlUHJlYnVpbHRXREEgdXNlIGV4aXN0aW5nIGRlcGVuZGVuY2llc1xuICAgIC8vIEl0IGRlcGVuZHMgb24gdXNlciBzaWRlXG4gICAgaWYgKHRoaXMuaWRiIHx8IHRoaXMudXNlWGN0ZXN0cnVuRmlsZSB8fCAodGhpcy5kZXJpdmVkRGF0YVBhdGggJiYgdGhpcy51c2VQcmVidWlsdFdEQSkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1NraXBwZWQgV0RBIHByb2plY3QgY2xlYW51cCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGNhcGFiaWxpdGllcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZSh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgICAgYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSxcbiAgICAgICAgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5fY2xlYW51cFByb2plY3RJZkZyZXNoKCkpO1xuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gcHJvdmlkZSBXREEgbG9jYWwgcG9ydCwgYmVjYXVzZSBpdCBtaWdodCBiZSBvY2N1cGllZFxuICAgIGF3YWl0IHJlc2V0VGVzdFByb2Nlc3Nlcyh0aGlzLmRldmljZS51ZGlkLCAhdGhpcy5pc1JlYWxEZXZpY2UpO1xuXG4gICAgaWYgKHRoaXMuaWRiKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zdGFydFdpdGhJREIoKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQuaW5pdCh0aGlzLm5vU2Vzc2lvblByb3h5KTtcblxuICAgIC8vIFN0YXJ0IHRoZSB4Y29kZWJ1aWxkIHByb2Nlc3NcbiAgICBpZiAodGhpcy5wcmVidWlsZFdEQSkge1xuICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnByZWJ1aWxkKCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLnhjb2RlYnVpbGQuc3RhcnQoKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0V2l0aElEQiAoKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnV2lsbCBsYXVuY2ggV0RBIHdpdGggaWRiIGluc3RlYWQgb2YgeGNvZGVidWlsZCBzaW5jZSB0aGUgY29ycmVzcG9uZGluZyBmbGFnIGlzIGVuYWJsZWQnKTtcbiAgICBjb25zdCB7d2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZH0gPSBhd2FpdCB0aGlzLnByZXBhcmVXREEoKTtcbiAgICBjb25zdCBlbnYgPSB7XG4gICAgICBVU0VfUE9SVDogdGhpcy53ZGFSZW1vdGVQb3J0LFxuICAgICAgV0RBX1BST0RVQ1RfQlVORExFX0lERU5USUZJRVI6IHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkLFxuICAgIH07XG4gICAgaWYgKHRoaXMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICBlbnYuTUpQRUdfU0VSVkVSX1BPUlQgPSB0aGlzLm1qcGVnU2VydmVyUG9ydDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5pZGIucnVuWENVSVRlc3Qod2RhQnVuZGxlSWQsIHdkYUJ1bmRsZUlkLCB0ZXN0QnVuZGxlSWQsIHtlbnZ9KTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlQnVuZGxlSWQgKHdkYUJ1bmRsZVBhdGgpIHtcbiAgICBjb25zdCBpbmZvUGxpc3RQYXRoID0gcGF0aC5qb2luKHdkYUJ1bmRsZVBhdGgsICdJbmZvLnBsaXN0Jyk7XG4gICAgY29uc3QgaW5mb1BsaXN0ID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdChhd2FpdCBmcy5yZWFkRmlsZShpbmZvUGxpc3RQYXRoKSk7XG4gICAgaWYgKCFpbmZvUGxpc3QuQ0ZCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGJ1bmRsZSBpZCBpbiAnJHtpbmZvUGxpc3RQYXRofSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm9QbGlzdC5DRkJ1bmRsZUlkZW50aWZpZXI7XG4gIH1cblxuICBhc3luYyBwcmVwYXJlV0RBICgpIHtcbiAgICBjb25zdCB3ZGFCdW5kbGVQYXRoID0gdGhpcy53ZGFCdW5kbGVQYXRoIHx8IGF3YWl0IHRoaXMuZmV0Y2hXREFCdW5kbGUoKTtcbiAgICBjb25zdCB3ZGFCdW5kbGVJZCA9IGF3YWl0IHRoaXMucGFyc2VCdW5kbGVJZCh3ZGFCdW5kbGVQYXRoKTtcbiAgICBpZiAoIWF3YWl0IHRoaXMuZGV2aWNlLmlzQXBwSW5zdGFsbGVkKHdkYUJ1bmRsZUlkKSkge1xuICAgICAgYXdhaXQgdGhpcy5kZXZpY2UuaW5zdGFsbEFwcCh3ZGFCdW5kbGVQYXRoKTtcbiAgICB9XG4gICAgY29uc3QgdGVzdEJ1bmRsZUlkID0gYXdhaXQgdGhpcy5pZGIuaW5zdGFsbFhDVGVzdEJ1bmRsZShwYXRoLmpvaW4od2RhQnVuZGxlUGF0aCwgJ1BsdWdJbnMnLCAnV2ViRHJpdmVyQWdlbnRSdW5uZXIueGN0ZXN0JykpO1xuICAgIHJldHVybiB7d2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZCwgd2RhQnVuZGxlUGF0aH07XG4gIH1cblxuICBhc3luYyBmZXRjaFdEQUJ1bmRsZSAoKSB7XG4gICAgaWYgKCF0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIGF3YWl0IGJ1bmRsZVdEQVNpbSh0aGlzLnhjb2RlYnVpbGQpO1xuICAgIH1cbiAgICBjb25zdCB3ZGFCdW5kbGVQYXRocyA9IGF3YWl0IGZzLmdsb2IoYCR7dGhpcy5kZXJpdmVkRGF0YVBhdGh9LyoqLyoke1dEQV9SVU5ORVJfQVBQfS9gLCB7XG4gICAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBpZiAoXy5pc0VtcHR5KHdkYUJ1bmRsZVBhdGhzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgV0RBIGJ1bmRsZSBpbiAnJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0nYCk7XG4gICAgfVxuICAgIHJldHVybiB3ZGFCdW5kbGVQYXRoc1swXTtcbiAgfVxuXG4gIGFzeW5jIGlzU291cmNlRnJlc2ggKCkge1xuICAgIGNvbnN0IGV4aXN0c1Byb21pc2VzID0gW1xuICAgICAgJ1Jlc291cmNlcycsXG4gICAgICBgUmVzb3VyY2VzJHtwYXRoLnNlcH1XZWJEcml2ZXJBZ2VudC5idW5kbGVgLFxuICAgIF0ubWFwKChzdWJQYXRoKSA9PiBmcy5leGlzdHMocGF0aC5yZXNvbHZlKHRoaXMuYm9vdHN0cmFwUGF0aCwgc3ViUGF0aCkpKTtcbiAgICByZXR1cm4gKGF3YWl0IEIuYWxsKGV4aXN0c1Byb21pc2VzKSkuc29tZSgodikgPT4gdiA9PT0gZmFsc2UpO1xuICB9XG5cbiAgc2V0dXBQcm94aWVzIChzZXNzaW9uSWQpIHtcbiAgICBjb25zdCBwcm94eU9wdHMgPSB7XG4gICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgc2VydmVyOiB0aGlzLnVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHRoaXMudXJsLnBvcnQsXG4gICAgICBiYXNlOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgdGltZW91dDogdGhpcy53ZGFDb25uZWN0aW9uVGltZW91dCxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEpXUHJveHkocHJveHlPcHRzKTtcbiAgICB0aGlzLmp3cHJveHkuc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLmp3cHJveHkpO1xuXG4gICAgdGhpcy5ub1Nlc3Npb25Qcm94eSA9IG5ldyBOb1Nlc3Npb25Qcm94eShwcm94eU9wdHMpO1xuICB9XG5cbiAgYXN5bmMgcXVpdCAoKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnU2h1dHRpbmcgZG93biBzdWItcHJvY2Vzc2VzJyk7XG5cbiAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucXVpdCgpO1xuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5yZXNldCgpO1xuXG4gICAgaWYgKHRoaXMuandwcm94eSkge1xuICAgICAgdGhpcy5qd3Byb3h5LnNlc3Npb25JZCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuYXJncy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgLy8gaWYgd2UgcG9wdWxhdGVkIHRoZSB1cmwgb3Vyc2VsdmVzIChkdXJpbmcgYHNldHVwQ2FjaGluZ2AgY2FsbCwgZm9yIGluc3RhbmNlKVxuICAgICAgLy8gdGhlbiBjbGVhbiB0aGF0IHVwLiBJZiB0aGUgdXJsIHdhcyBzdXBwbGllZCwgd2Ugd2FudCB0byBrZWVwIGl0XG4gICAgICB0aGlzLndlYkRyaXZlckFnZW50VXJsID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICBpZiAoIXRoaXMuX3VybCkge1xuICAgICAgaWYgKHRoaXMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKHRoaXMud2ViRHJpdmVyQWdlbnRVcmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG9ydCA9IHRoaXMud2RhTG9jYWxQb3J0IHx8IFdEQV9BR0VOVF9QT1JUO1xuICAgICAgICBjb25zdCB7cHJvdG9jb2wsIGhvc3RuYW1lfSA9IHVybC5wYXJzZSh0aGlzLndkYUJhc2VVcmwgfHwgV0RBX0JBU0VfVVJMKTtcbiAgICAgICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKGAke3Byb3RvY29sfS8vJHtob3N0bmFtZX06JHtwb3J0fWApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCAoX3VybCkge1xuICAgIHRoaXMuX3VybCA9IHVybC5wYXJzZShfdXJsKTtcbiAgfVxuXG4gIGdldCBmdWxseVN0YXJ0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0ZWQ7XG4gIH1cblxuICBzZXQgZnVsbHlTdGFydGVkIChzdGFydGVkID0gZmFsc2UpIHtcbiAgICB0aGlzLnN0YXJ0ZWQgPSBzdGFydGVkO1xuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEZXJpdmVkRGF0YVBhdGggKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXVzZSBydW5uaW5nIFdEQSBpZiBpdCBoYXMgdGhlIHNhbWUgYnVuZGxlIGlkIHdpdGggdXBkYXRlZFdEQUJ1bmRsZUlkLlxuICAgKiBPciByZXVzZSBpdCBpZiBpdCBoYXMgdGhlIGRlZmF1bHQgaWQgd2l0aG91dCB1cGRhdGVkV0RBQnVuZGxlSWQuXG4gICAqIFVuaW5zdGFsbCBpdCBpZiB0aGUgbWV0aG9kIGZhY2VzIGFuIGV4Y2VwdGlvbiBmb3IgdGhlIGFib3ZlIHNpdHVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVwZGF0ZWRXREFCdW5kbGVJZCBCdW5kbGVJZCB5b3UnZCBsaWtlIHRvIHVzZVxuICAgKi9cbiAgYXN5bmMgc2V0dXBDYWNoaW5nICgpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIGlmICghc3RhdHVzIHx8ICFzdGF0dXMuYnVpbGQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdXREEgaXMgY3VycmVudGx5IG5vdCBydW5uaW5nLiBUaGVyZSBpcyBub3RoaW5nIHRvIGNhY2hlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgcHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIsXG4gICAgICB1cGdyYWRlZEF0LFxuICAgIH0gPSBzdGF0dXMuYnVpbGQ7XG4gICAgLy8gZm9yIHJlYWwgZGV2aWNlXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpICYmIHV0aWwuaGFzVmFsdWUodGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpICYmIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkICE9PSBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXQgaGFzIGRpZmZlcmVudCBidW5kbGUgaWQuIFRoZSBhY3R1YWwgdmFsdWUgaXMgJyR7cHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJ9Jy5gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cbiAgICAvLyBmb3Igc2ltdWxhdG9yXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpICYmICF1dGlsLmhhc1ZhbHVlKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSAmJiBXREFfUlVOTkVSX0JVTkRMRV9JRCAhPT0gcHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFdpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0cyBidW5kbGUgaWQgaXMgbm90IGVxdWFsIHRvIHRoZSBkZWZhdWx0IHZhbHVlICR7V0RBX1JVTk5FUl9CVU5ETEVfSUR9YCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3R1YWxVcGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCgpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBVcGdyYWRlIHRpbWVzdGFtcCBvZiB0aGUgY3VycmVudGx5IGJ1bmRsZWQgV0RBOiAke2FjdHVhbFVwZ3JhZGVUaW1lc3RhbXB9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFVwZ3JhZGUgdGltZXN0YW1wIG9mIHRoZSBXREEgb24gdGhlIGRldmljZTogJHt1cGdyYWRlZEF0fWApO1xuICAgIGlmIChhY3R1YWxVcGdyYWRlVGltZXN0YW1wICYmIHVwZ3JhZGVkQXQgJiYgXy50b0xvd2VyKGAke2FjdHVhbFVwZ3JhZGVUaW1lc3RhbXB9YCkgIT09IF8udG9Mb3dlcihgJHt1cGdyYWRlZEF0fWApKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdCBoYXMgZGlmZmVyZW50IHZlcnNpb24gaW4gY29tcGFyaXNvbiB0byB0aGUgb25lICcgK1xuICAgICAgICBgd2hpY2ggaXMgYnVuZGxlZCB3aXRoIGFwcGl1bS14Y3VpdGVzdC1kcml2ZXIgbW9kdWxlICgke2FjdHVhbFVwZ3JhZGVUaW1lc3RhbXB9ICE9ICR7dXBncmFkZWRBdH0pYCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gdXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcilcbiAgICAgID8gYFdpbGwgcmV1c2UgcHJldmlvdXNseSBjYWNoZWQgV0RBIGluc3RhbmNlIGF0ICcke3RoaXMudXJsLmhyZWZ9JyB3aXRoICcke3Byb2R1Y3RCdW5kbGVJZGVudGlmaWVyfSdgXG4gICAgICA6IGBXaWxsIHJldXNlIHByZXZpb3VzbHkgY2FjaGVkIFdEQSBpbnN0YW5jZSBhdCAnJHt0aGlzLnVybC5ocmVmfSdgO1xuICAgIHRoaXMubG9nLmluZm8oYCR7bWVzc2FnZX0uIFNldCB0aGUgd2RhTG9jYWxQb3J0IGNhcGFiaWxpdHkgdG8gYSB2YWx1ZSBkaWZmZXJlbnQgZnJvbSAke3RoaXMudXJsLnBvcnR9IGlmIHRoaXMgaXMgYW4gdW5kZXNpcmVkIGJlaGF2aW9yLmApO1xuICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSB0aGlzLnVybC5ocmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1aXQgYW5kIHVuaW5zdGFsbCBydW5uaW5nIFdEQS5cbiAgICovXG4gIGFzeW5jIHF1aXRBbmRVbmluc3RhbGwgKCkge1xuICAgIGF3YWl0IHRoaXMucXVpdCgpO1xuICAgIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgV2ViRHJpdmVyQWdlbnQ7XG5leHBvcnQgeyBXZWJEcml2ZXJBZ2VudCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBLE1BQU1BLGtCQUFrQixHQUFHLEtBQUssSUFBaEM7QUFDQSxNQUFNQyxjQUFjLEdBQUcsSUFBdkI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyw2QkFBM0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxJQUFJQyxrQkFBSixFQUEvQjs7QUFFQSxNQUFNQyxjQUFOLENBQXFCO0VBQ25CQyxXQUFXLENBQUVDLFlBQUYsRUFBZ0JDLElBQUksR0FBRyxFQUF2QixFQUEy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
@@ -45,7 +45,7 @@ class XcodeBuild {
45
45
  constructor(xcodeVersion, device, args = {}, log = null) {
46
46
  this.xcodeVersion = xcodeVersion;
47
47
  this.device = device;
48
- this.log = log !== null && log !== void 0 ? log : _logger.default;
48
+ this.log = log ?? _logger.default;
49
49
  this.realDevice = args.realDevice;
50
50
  this.agentPath = args.agentPath;
51
51
  this.bootstrapPath = args.bootstrapPath;
@@ -390,7 +390,5 @@ class XcodeBuild {
390
390
 
391
391
  exports.XcodeBuild = XcodeBuild;
392
392
  var _default = XcodeBuild;
393
- exports.default = _default;require('source-map-support').install();
394
-
395
-
396
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3hjb2RlYnVpbGQuanMiLCJuYW1lcyI6WyJERUZBVUxUX1NJR05JTkdfSUQiLCJQUkVCVUlMRF9ERUxBWSIsIlJVTk5FUl9TQ0hFTUVfSU9TIiwiTElCX1NDSEVNRV9JT1MiLCJFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQiLCJFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQiLCJJR05PUkVEX0VSUk9SUyIsIlJVTk5FUl9TQ0hFTUVfVFYiLCJMSUJfU0NIRU1FX1RWIiwieGNvZGVMb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJYY29kZUJ1aWxkIiwiY29uc3RydWN0b3IiLCJ4Y29kZVZlcnNpb24iLCJkZXZpY2UiLCJhcmdzIiwibG9nIiwiZGVmYXVsdExvZ2dlciIsInJlYWxEZXZpY2UiLCJhZ2VudFBhdGgiLCJib290c3RyYXBQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJwcmVidWlsZFdEQSIsInVzZVByZWJ1aWx0V0RBIiwidXNlU2ltcGxlQnVpbGRUZXN0IiwidXNlWGN0ZXN0cnVuRmlsZSIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFSZW1vdGVQb3J0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwiZGVyaXZlZERhdGFQYXRoIiwibWpwZWdTZXJ2ZXJQb3J0IiwicHJlYnVpbGREZWxheSIsIl8iLCJpc051bWJlciIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJpbml0Iiwibm9TZXNzaW9uUHJveHkiLCJkZXZpdmVJbmZvIiwiaXNSZWFsRGV2aWNlIiwidWRpZCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwic2V0WGN0ZXN0cnVuRmlsZSIsInJlc2V0UHJvamVjdEZpbGUiLCJ1cGRhdGVQcm9qZWN0RmlsZSIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiX2Rlcml2ZWREYXRhUGF0aFByb21pc2UiLCJzdGRvdXQiLCJleGVjIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJwYXR0ZXJuIiwibWF0Y2giLCJ0cnVuY2F0ZSIsImxlbmd0aCIsImRlYnVnIiwicGF0aCIsImRpcm5hbWUiLCJub3JtYWxpemUiLCJyZXNldCIsInByZWJ1aWxkIiwic3RhcnQiLCJ4Y29kZWJ1aWxkIiwiQiIsImRlbGF5IiwiY2xlYW5Qcm9qZWN0IiwidG1wSXNUdk9TIiwiaXNUdk9TIiwibGliU2NoZW1lIiwicnVubmVyU2NoZW1lIiwic2NoZW1lIiwiZ2V0Q29tbWFuZCIsImJ1aWxkT25seSIsImNtZCIsImJ1aWxkQ21kIiwidGVzdENtZCIsInB1c2giLCJ2ZXJzaW9uTWF0Y2giLCJSZWdFeHAiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1hDVUlURVNUX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJzZXRSZWFsRGV2aWNlU2VjdXJpdHkiLCJnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJNSlBFR19TRVJWRVJfUE9SVCIsInVwZ3JhZGVUaW1lc3RhbXAiLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwiVVBHUkFERV9USU1FU1RBTVAiLCJTdWJQcm9jZXNzIiwiY3dkIiwiZGV0YWNoZWQiLCJzdGRpbyIsImxvZ1hjb2RlT3V0cHV0IiwibG9nTXNnIiwiaXNCb29sZWFuIiwib24iLCJzdGRlcnIiLCJvdXQiLCJpbmNsdWRlcyIsImxvZ0xvY2F0aW9uIiwiZmlyc3QiLCJyZW1vdmUiLCJ0cmltIiwic3BsaXQiLCJ2Iiwic3RhcnRzV2l0aCIsInNlcCIsImlnbm9yZUVycm9yIiwic29tZSIsIngiLCJfd2RhX2Vycm9yX29jY3VycmVkIiwibGluZSIsIkVPTCIsImVycm9yIiwiX3dkYV9lcnJvcl9tZXNzYWdlIiwicmVzb2x2ZSIsInJlamVjdCIsImNvZGUiLCJzaWduYWwiLCJkYXRhIiwiZnMiLCJyZWFkRmlsZSIsInByb2Nlc3NFeGl0ZWQiLCJFcnJvciIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGF0dXMiLCJ3YWl0Rm9yU3RhcnQiLCJtc2ciLCJjdXJyZW50U3RhdHVzIiwicmV0cmllcyIsInBhcnNlSW50IiwicmV0cnlJbnRlcnZhbCIsInByb3h5VGltZW91dCIsInRpbWVvdXQiLCJjb21tYW5kIiwiaW9zIiwiaXAiLCJhZ2VudFVybCIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsInF1aXQiLCJraWxsUHJvY2VzcyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi94Y29kZWJ1aWxkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCBsb2dnZXIsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIHNldFJlYWxEZXZpY2VTZWN1cml0eSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsIHNldFhjdGVzdHJ1bkZpbGUsXG4gIHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBraWxsUHJvY2VzcyxcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgaXNUdk9TIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBXREFfUlVOTkVSX0JVTkRMRV9JRCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuXG5jb25zdCBERUZBVUxUX1NJR05JTkdfSUQgPSAnaVBob25lIERldmVsb3Blcic7XG5jb25zdCBQUkVCVUlMRF9ERUxBWSA9IDA7XG5jb25zdCBSVU5ORVJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcic7XG5jb25zdCBMSUJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudExpYic7XG5cbmNvbnN0IEVSUk9SX1dSSVRJTkdfQVRUQUNITUVOVCA9ICdFcnJvciB3cml0aW5nIGF0dGFjaG1lbnQgZGF0YSB0byBmaWxlJztcbmNvbnN0IEVSUk9SX0NPUFlJTkdfQVRUQUNITUVOVCA9ICdFcnJvciBjb3B5aW5nIHRlc3RpbmcgYXR0YWNobWVudCc7XG5jb25zdCBJR05PUkVEX0VSUk9SUyA9IFtcbiAgRVJST1JfV1JJVElOR19BVFRBQ0hNRU5ULFxuICBFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQsXG4gICdGYWlsZWQgdG8gcmVtb3ZlIHNjcmVlbnNob3QgYXQgcGF0aCcsXG5dO1xuXG5jb25zdCBSVU5ORVJfU0NIRU1FX1RWID0gJ1dlYkRyaXZlckFnZW50UnVubmVyX3R2T1MnO1xuY29uc3QgTElCX1NDSEVNRV9UViA9ICdXZWJEcml2ZXJBZ2VudExpYl90dk9TJztcblxuY29uc3QgeGNvZGVMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdYY29kZScpO1xuXG5cbmNsYXNzIFhjb2RlQnVpbGQge1xuICBjb25zdHJ1Y3RvciAoeGNvZGVWZXJzaW9uLCBkZXZpY2UsIGFyZ3MgPSB7fSwgbG9nID0gbnVsbCkge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuXG4gICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5sb2cgPSBsb2cgPz8gZGVmYXVsdExvZ2dlcjtcblxuICAgIHRoaXMucmVhbERldmljZSA9IGFyZ3MucmVhbERldmljZTtcblxuICAgIHRoaXMuYWdlbnRQYXRoID0gYXJncy5hZ2VudFBhdGg7XG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYXJncy5ib290c3RyYXBQYXRoO1xuXG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcblxuICAgIHRoaXMuc2hvd1hjb2RlTG9nID0gYXJncy5zaG93WGNvZGVMb2c7XG5cbiAgICB0aGlzLnhjb2RlQ29uZmlnRmlsZSA9IGFyZ3MueGNvZGVDb25maWdGaWxlO1xuICAgIHRoaXMueGNvZGVPcmdJZCA9IGFyZ3MueGNvZGVPcmdJZDtcbiAgICB0aGlzLnhjb2RlU2lnbmluZ0lkID0gYXJncy54Y29kZVNpZ25pbmdJZCB8fCBERUZBVUxUX1NJR05JTkdfSUQ7XG4gICAgdGhpcy5rZXljaGFpblBhdGggPSBhcmdzLmtleWNoYWluUGF0aDtcbiAgICB0aGlzLmtleWNoYWluUGFzc3dvcmQgPSBhcmdzLmtleWNoYWluUGFzc3dvcmQ7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLnVzZVNpbXBsZUJ1aWxkVGVzdCA9IGFyZ3MudXNlU2ltcGxlQnVpbGRUZXN0O1xuXG4gICAgdGhpcy51c2VYY3Rlc3RydW5GaWxlID0gYXJncy51c2VYY3Rlc3RydW5GaWxlO1xuXG4gICAgdGhpcy5sYXVuY2hUaW1lb3V0ID0gYXJncy5sYXVuY2hUaW1lb3V0O1xuXG4gICAgdGhpcy53ZGFSZW1vdGVQb3J0ID0gYXJncy53ZGFSZW1vdGVQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuXG4gICAgdGhpcy5tanBlZ1NlcnZlclBvcnQgPSBhcmdzLm1qcGVnU2VydmVyUG9ydDtcblxuICAgIHRoaXMucHJlYnVpbGREZWxheSA9IF8uaXNOdW1iZXIoYXJncy5wcmVidWlsZERlbGF5KSA/IGFyZ3MucHJlYnVpbGREZWxheSA6IFBSRUJVSUxEX0RFTEFZO1xuXG4gICAgdGhpcy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbiA9IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb247XG5cbiAgICB0aGlzLnJlc3VsdEJ1bmRsZVBhdGggPSBhcmdzLnJlc3VsdEJ1bmRsZVBhdGg7XG4gICAgdGhpcy5yZXN1bHRCdW5kbGVWZXJzaW9uID0gYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAobm9TZXNzaW9uUHJveHkpIHtcbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbm9TZXNzaW9uUHJveHk7XG5cbiAgICBpZiAodGhpcy51c2VYY3Rlc3RydW5GaWxlKSB7XG4gICAgICBjb25zdCBkZXZpdmVJbmZvID0ge1xuICAgICAgICBpc1JlYWxEZXZpY2U6IHRoaXMucmVhbERldmljZSxcbiAgICAgICAgdWRpZDogdGhpcy5kZXZpY2UudWRpZCxcbiAgICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZVxuICAgICAgfTtcbiAgICAgIHRoaXMueGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBzZXRYY3Rlc3RydW5GaWxlKGRldml2ZUluZm8sIHRoaXMuaW9zU2RrVmVyc2lvbiwgdGhpcy5ib290c3RyYXBQYXRoLCB0aGlzLndkYVJlbW90ZVBvcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIG5lY2Vzc2FyeSwgdXBkYXRlIHRoZSBidW5kbGVJZCB0byB1c2VyJ3Mgc3BlY2lmaWNhdGlvblxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UpIHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIHByb2plY3Qgc3RpbGwgaGFzIHRoZSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRCwgcmVzZXQgdGhlIHByb2plY3QgZmlsZSBmaXJzdC5cbiAgICAgIC8vIC0gV2UgZG8gdGhpcyByZXNldCBldmVuIGlmIHVwZGF0ZWRXREFCdW5kbGVJZCBpcyBub3Qgc3BlY2lmaWVkLFxuICAgICAgLy8gICBzaW5jZSB0aGUgcHJldmlvdXMgdXBkYXRlZFdEQUJ1bmRsZUlkIHRlc3QgaGFzIGdlbmVyYXRlZCB0aGUgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQgcHJvamVjdCBmaWxlLlxuICAgICAgLy8gLSBXZSBkb24ndCBjYWxsIHJlc2V0UHJvamVjdEZpbGUgZm9yIHNpbXVsYXRvcixcbiAgICAgIC8vICAgc2luY2Ugc2ltdWxhdG9yIHRlc3QgcnVuIHdpbGwgd29yayB3aXRoIGFueSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRC5cbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgICAgaWYgKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSB7XG4gICAgICAgIGF3YWl0IHVwZGF0ZVByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoLCB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEZXJpdmVkRGF0YVBhdGggKCkge1xuICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVyaXZlZERhdGFQYXRoO1xuICAgIH1cblxuICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9uc1xuICAgIGlmICh0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICB0cnkge1xuICAgICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgWyctcHJvamVjdCcsIHRoaXMuYWdlbnRQYXRoLCAnLXNob3dCdWlsZFNldHRpbmdzJ10pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmV0cmlldmUgV0RBIGJ1aWxkIHNldHRpbmdzLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXR0ZXJuID0gL15cXHMqQlVJTERfRElSXFxzKz1cXHMrKFxcLy4qKS9tO1xuICAgICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc3Rkb3V0KTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIFdEQSBidWlsZCBkaXIgZnJvbSAke18udHJ1bmNhdGUoc3Rkb3V0LCB7bGVuZ3RoOiAzMDB9KX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBCVUlMRF9ESVIgY29uZmlndXJhdGlvbiB2YWx1ZTogJyR7bWF0Y2hbMV19J2ApO1xuICAgICAgLy8gRGVyaXZlZCBkYXRhIHJvb3QgaXMgdHdvIGxldmVscyBoaWdoZXIgb3ZlciB0aGUgYnVpbGQgZGlyXG4gICAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IHBhdGguZGlybmFtZShwYXRoLmRpcm5hbWUocGF0aC5ub3JtYWxpemUobWF0Y2hbMV0pKSk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgR290IGRlcml2ZWQgZGF0YSByb290OiAnJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0nYCk7XG4gICAgICByZXR1cm4gdGhpcy5kZXJpdmVkRGF0YVBhdGg7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICAvLyBpZiBuZWNlc3NhcnksIHJlc2V0IHRoZSBidW5kbGVJZCB0byBvcmlnaW5hbCB2YWx1ZVxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByZWJ1aWxkICgpIHtcbiAgICAvLyBmaXJzdCBkbyBhIGJ1aWxkIHBoYXNlXG4gICAgdGhpcy5sb2cuZGVidWcoJ1ByZS1idWlsZGluZyBXREEgYmVmb3JlIGxhdW5jaGluZyB0ZXN0Jyk7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0cnVlKTtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG51bGw7XG5cbiAgICAvLyBwYXVzZSBhIG1vbWVudFxuICAgIGF3YWl0IEIuZGVsYXkodGhpcy5wcmVidWlsZERlbGF5KTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFuUHJvamVjdCAoKSB7XG4gICAgY29uc3QgdG1wSXNUdk9TID0gaXNUdk9TKHRoaXMucGxhdGZvcm1OYW1lKTtcbiAgICBjb25zdCBsaWJTY2hlbWUgPSB0bXBJc1R2T1MgPyBMSUJfU0NIRU1FX1RWIDogTElCX1NDSEVNRV9JT1M7XG4gICAgY29uc3QgcnVubmVyU2NoZW1lID0gdG1wSXNUdk9TID8gUlVOTkVSX1NDSEVNRV9UViA6IFJVTk5FUl9TQ0hFTUVfSU9TO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWUgb2YgW2xpYlNjaGVtZSwgcnVubmVyU2NoZW1lXSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENsZWFuaW5nIHRoZSBwcm9qZWN0IHNjaGVtZSAnJHtzY2hlbWV9JyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGxlZnRvdmVycyBmcm9tIHByZXZpb3VzIGluc3RhbGxzYCk7XG4gICAgICBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgW1xuICAgICAgICAnY2xlYW4nLFxuICAgICAgICAnLXByb2plY3QnLCB0aGlzLmFnZW50UGF0aCxcbiAgICAgICAgJy1zY2hlbWUnLCBzY2hlbWUsXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb21tYW5kIChidWlsZE9ubHkgPSBmYWxzZSkge1xuICAgIGxldCBjbWQgPSAneGNvZGVidWlsZCc7XG4gICAgbGV0IGFyZ3M7XG5cbiAgICAvLyBmaWd1cmUgb3V0IHRoZSB0YXJnZXRzIGZvciB4Y29kZWJ1aWxkXG4gICAgY29uc3QgW2J1aWxkQ21kLCB0ZXN0Q21kXSA9IHRoaXMudXNlU2ltcGxlQnVpbGRUZXN0ID8gWydidWlsZCcsICd0ZXN0J10gOiBbJ2J1aWxkLWZvci10ZXN0aW5nJywgJ3Rlc3Qtd2l0aG91dC1idWlsZGluZyddO1xuICAgIGlmIChidWlsZE9ubHkpIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWRdO1xuICAgIH0gZWxzZSBpZiAodGhpcy51c2VQcmVidWlsdFdEQSB8fCB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUpIHtcbiAgICAgIGFyZ3MgPSBbdGVzdENtZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWQsIHRlc3RDbWRdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgICAvLyBUbyAtYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24gZmxhZyB0YWtlcyBlZmZlY3QsIC1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMgbmVlZHMgdG8gYmUgcGFzc2VkIGFzIHdlbGwuXG4gICAgICBhcmdzLnB1c2goJy1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMnLCAnLWFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlUGF0aCcsIHRoaXMucmVzdWx0QnVuZGxlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbikge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlVmVyc2lvbicsIHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlWGN0ZXN0cnVuRmlsZSkge1xuICAgICAgYXJncy5wdXNoKCcteGN0ZXN0cnVuJywgdGhpcy54Y3Rlc3RydW5GaWxlUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bm5lclNjaGVtZSA9IGlzVHZPUyh0aGlzLnBsYXRmb3JtTmFtZSkgPyBSVU5ORVJfU0NIRU1FX1RWIDogUlVOTkVSX1NDSEVNRV9JT1M7XG4gICAgICBhcmdzLnB1c2goJy1wcm9qZWN0JywgdGhpcy5hZ2VudFBhdGgsICctc2NoZW1lJywgcnVubmVyU2NoZW1lKTtcbiAgICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBhcmdzLnB1c2goJy1kZXJpdmVkRGF0YVBhdGgnLCB0aGlzLmRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLWRlc3RpbmF0aW9uJywgYGlkPSR7dGhpcy5kZXZpY2UudWRpZH1gKTtcblxuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IG5ldyBSZWdFeHAoL14oXFxkKylcXC4oXFxkKykvKS5leGVjKHRoaXMucGxhdGZvcm1WZXJzaW9uKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBhcmdzLnB1c2goYElQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUPSR7dmVyc2lvbk1hdGNoWzFdfS4ke3ZlcnNpb25NYXRjaFsyXX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMgZnJvbSBwbGF0Zm9ybVZlcnNpb24gXCIke3RoaXMucGxhdGZvcm1WZXJzaW9ufVwiLiBgICtcbiAgICAgICAgJ1dpbGwgYnVpbGQgZm9yIHRoZSBkZWZhdWx0IHBsYXRmb3JtIGluc3RlYWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlICYmIHRoaXMueGNvZGVDb25maWdGaWxlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVXNpbmcgWGNvZGUgY29uZmlndXJhdGlvbiBmaWxlOiAnJHt0aGlzLnhjb2RlQ29uZmlnRmlsZX0nYCk7XG4gICAgICBhcmdzLnB1c2goJy14Y2NvbmZpZycsIHRoaXMueGNvZGVDb25maWdGaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb2Nlc3MuZW52LkFQUElVTV9YQ1VJVEVTVF9UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMpIHtcbiAgICAgIC8vIFRoaXMgc29tZXRpbWVzIGhlbHBzIHRvIHN1cnZpdmUgWGNvZGUgdXBkYXRlc1xuICAgICAgYXJncy5wdXNoKCdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTPTAnKTtcbiAgICB9XG5cbiAgICAvLyBCZWxvdyBvcHRpb24gc2xpZ2h0bHkgcmVkdWNlcyBidWlsZCB0aW1lIGluIGRlYnVnIGJ1aWxkXG4gICAgLy8gd2l0aCBwcmV2ZW50aW5nIHRvIGdlbmVyYXRlIGAvSW5kZXgvRGF0YVN0b3JlYCB3aGljaCBpcyB1c2VkIGJ5IGRldmVsb3BtZW50XG4gICAgYXJncy5wdXNoKCdDT01QSUxFUl9JTkRFWF9TVE9SRV9FTkFCTEU9Tk8nKTtcblxuICAgIHJldHVybiB7Y21kLCBhcmdzfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVN1YlByb2Nlc3MgKGJ1aWxkT25seSA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgJiYgdGhpcy5yZWFsRGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5rZXljaGFpblBhdGggJiYgdGhpcy5rZXljaGFpblBhc3N3b3JkKSB7XG4gICAgICAgIGF3YWl0IHNldFJlYWxEZXZpY2VTZWN1cml0eSh0aGlzLmtleWNoYWluUGF0aCwgdGhpcy5rZXljaGFpblBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnhjb2RlT3JnSWQgJiYgdGhpcy54Y29kZVNpZ25pbmdJZCAmJiAhdGhpcy54Y29kZUNvbmZpZ0ZpbGUpIHtcbiAgICAgICAgdGhpcy54Y29kZUNvbmZpZ0ZpbGUgPSBhd2FpdCBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSh0aGlzLnhjb2RlT3JnSWQsIHRoaXMueGNvZGVTaWduaW5nSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHtjbWQsIGFyZ3N9ID0gdGhpcy5nZXRDb21tYW5kKGJ1aWxkT25seSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEJlZ2lubmluZyAke2J1aWxkT25seSA/ICdidWlsZCcgOiAndGVzdCd9IHdpdGggY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBgICtcbiAgICAgIGBpbiBkaXJlY3RvcnkgJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcbiAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCB8fCBXREFfUlVOTkVSX0JVTkRMRV9JRCxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvcHVsbC8xMDVcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cbiAgICBjb25zdCB1cGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgIGlmICh1cGdyYWRlVGltZXN0YW1wKSB7XG4gICAgICBlbnYuVVBHUkFERV9USU1FU1RBTVAgPSB1cGdyYWRlVGltZXN0YW1wO1xuICAgIH1cbiAgICBjb25zdCB4Y29kZWJ1aWxkID0gbmV3IFN1YlByb2Nlc3MoY21kLCBhcmdzLCB7XG4gICAgICBjd2Q6IHRoaXMuYm9vdHN0cmFwUGF0aCxcbiAgICAgIGVudixcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuXG4gICAgbGV0IGxvZ1hjb2RlT3V0cHV0ID0gISF0aGlzLnNob3dYY29kZUxvZztcbiAgICBjb25zdCBsb2dNc2cgPSBfLmlzQm9vbGVhbih0aGlzLnNob3dYY29kZUxvZylcbiAgICAgID8gYE91dHB1dCBmcm9tIHhjb2RlYnVpbGQgJHt0aGlzLnNob3dYY29kZUxvZyA/ICd3aWxsJyA6ICd3aWxsIG5vdCd9IGJlIGxvZ2dlZGBcbiAgICAgIDogJ091dHB1dCBmcm9tIHhjb2RlYnVpbGQgd2lsbCBvbmx5IGJlIGxvZ2dlZCBpZiBhbnkgZXJyb3JzIGFyZSBwcmVzZW50IHRoZXJlJztcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJHtsb2dNc2d9LiBUbyBjaGFuZ2UgdGhpcywgdXNlICdzaG93WGNvZGVMb2cnIGRlc2lyZWQgY2FwYWJpbGl0eWApO1xuICAgIHhjb2RlYnVpbGQub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgbGV0IG91dCA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICAvLyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBsb2cgZmlsZSB0aGF0IGlzIGNyZWF0ZWQsIGFuZCBoaWdobGlnaHQgaXRcbiAgICAgIC8vIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzXG4gICAgICBpZiAob3V0LmluY2x1ZGVzKCdXcml0aW5nIGRpYWdub3N0aWMgbG9nIGZvciB0ZXN0IHNlc3Npb24gdG8nKSkge1xuICAgICAgICAvLyBwdWxsIG91dCB0aGUgZmlyc3QgbGluZSB0aGF0IGJlZ2lucyB3aXRoIHRoZSBwYXRoIHNlcGFyYXRvclxuICAgICAgICAvLyB3aGljaCAqc2hvdWxkKiBiZSB0aGUgbGluZSBpbmRpY2F0aW5nIHRoZSBsb2cgZmlsZSBnZW5lcmF0ZWRcbiAgICAgICAgeGNvZGVidWlsZC5sb2dMb2NhdGlvbiA9IF8uZmlyc3QoXy5yZW1vdmUob3V0LnRyaW0oKS5zcGxpdCgnXFxuJyksICh2KSA9PiB2LnN0YXJ0c1dpdGgocGF0aC5zZXApKSk7XG4gICAgICAgIHhjb2RlTG9nLmRlYnVnKGBMb2cgZmlsZSBmb3IgeGNvZGVidWlsZCB0ZXN0OiAke3hjb2RlYnVpbGQubG9nTG9jYXRpb259YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgYW4gZXJyb3Igd2Ugd2FudCB0byBvdXRwdXQgdGhlIGxvZ3NcbiAgICAgIC8vIG90aGVyd2lzZSB0aGUgZmFpbHVyZSBpcyBpbnNjcnV0aWJsZVxuICAgICAgLy8gYnV0IGRvIG5vdCBsb2cgcGVybWlzc2lvbiBlcnJvcnMgZnJvbSB0cnlpbmcgdG8gd3JpdGUgdG8gYXR0YWNobWVudHMgZm9sZGVyXG4gICAgICBjb25zdCBpZ25vcmVFcnJvciA9IElHTk9SRURfRVJST1JTLnNvbWUoKHgpID0+IG91dC5pbmNsdWRlcyh4KSk7XG4gICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgIT09IGZhbHNlICYmIG91dC5pbmNsdWRlcygnRXJyb3IgRG9tYWluPScpICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBsb2dYY29kZU91dHB1dCA9IHRydWU7XG5cbiAgICAgICAgLy8gdGVycmlibGUgaGFjayB0byBoYW5kbGUgY2FzZSB3aGVyZSB4Y29kZSByZXR1cm4gMCBidXQgaXMgZmFpbGluZ1xuICAgICAgICB4Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBkbyBub3QgbG9nIHBlcm1pc3Npb24gZXJyb3JzIGZyb20gdHJ5aW5nIHRvIHdyaXRlIHRvIGF0dGFjaG1lbnRzIGZvbGRlclxuICAgICAgaWYgKGxvZ1hjb2RlT3V0cHV0ICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3V0LnNwbGl0KEVPTCkpIHtcbiAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgICAgeGNvZGVidWlsZC5fd2RhX2Vycm9yX21lc3NhZ2UgKz0gYCR7RU9MfSR7bGluZX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHhjb2RlYnVpbGQ7XG4gIH1cblxuICBhc3luYyBzdGFydCAoYnVpbGRPbmx5ID0gZmFsc2UpIHtcbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBhd2FpdCB0aGlzLmNyZWF0ZVN1YlByb2Nlc3MoYnVpbGRPbmx5KTtcbiAgICAvLyBTdG9yZSB4Y29kZWJ1aWxkIG1lc3NhZ2VcbiAgICB0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlID0gJyc7XG5cbiAgICAvLyB3cmFwIHRoZSBzdGFydCBwcm9jZWR1cmUgaW4gYSBwcm9taXNlIHNvIHRoYXQgd2UgY2FuIGNhdGNoLCBhbmQgcmVwb3J0LFxuICAgIC8vIGFueSBzdGFydHVwIGVycm9ycyB0aGF0IGFyZSB0aHJvd24gYXMgZXZlbnRzXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMueGNvZGVidWlsZC5vbignZXhpdCcsIGFzeW5jIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgeGNvZGVMb2cuZXJyb3IoYHhjb2RlYnVpbGQgZXhpdGVkIHdpdGggY29kZSAnJHtjb2RlfScgYW5kIHNpZ25hbCAnJHtzaWduYWx9J2ApO1xuICAgICAgICAvLyBwcmludCBvdXQgdGhlIHhjb2RlYnVpbGQgZmlsZSBpZiB1c2VycyBoYXZlIGFza2VkIGZvciBpdFxuICAgICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgJiYgdGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uKSB7XG4gICAgICAgICAgeGNvZGVMb2cuZXJyb3IoYENvbnRlbnRzIG9mIHhjb2RlYnVpbGQgbG9nIGZpbGUgJyR7dGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9ufSc6YCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uLCAndXRmOCcpO1xuICAgICAgICAgICAgZm9yIChsZXQgbGluZSBvZiBkYXRhLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHhjb2RlTG9nLmVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHhjb2RlYnVpbGQgbG9nIGZpbGU6ICcke2Vyci5tZXNzYWdlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgfHwgKCFzaWduYWwgJiYgY29kZSAhPT0gMCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgeGNvZGVidWlsZCBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0ke0VPTH1gICtcbiAgICAgICAgICAgIGB4Y29kZWJ1aWxkIGVycm9yIG1lc3NhZ2U6JHtFT0x9JHt0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBqdXN0IGJ1aWxkaW5nLCB0aGUgcHJvY2VzcyB3aWxsIGV4aXQgYW5kIHRoYXQgaXMgb3VyIGZpbmlzaFxuICAgICAgICBpZiAoYnVpbGRPbmx5KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KHRydWUpO1xuICAgICAgICAgIGlmICghYnVpbGRPbmx5KSB7XG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gYXdhaXQgdGhpcy53YWl0Rm9yU3RhcnQodGltZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyfWA7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3IobXNnKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKG1zZykpO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclN0YXJ0ICh0aW1lcikge1xuICAgIC8vIHRyeSB0byBjb25uZWN0IG9uY2UgZXZlcnkgMC41IHNlY29uZHMsIHVudGlsIGBsYXVuY2hUaW1lb3V0YCBpcyB1cFxuICAgIHRoaXMubG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGhpcy5sYXVuY2hUaW1lb3V0fW1zIGZvciBXZWJEcml2ZXJBZ2VudCB0byBzdGFydGApO1xuICAgIGxldCBjdXJyZW50U3RhdHVzID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgbGV0IHJldHJpZXMgPSBwYXJzZUludCh0aGlzLmxhdW5jaFRpbWVvdXQgLyA1MDAsIDEwKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAvLyB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBlbHNld2hlcmUgYW5kIHdlIG5lZWQgdG8gc2hvcnQtY2lyY3VpdFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm94eVRpbWVvdXQgPSB0aGlzLm5vU2Vzc2lvblByb3h5LnRpbWVvdXQ7XG4gICAgICAgIHRoaXMubm9TZXNzaW9uUHJveHkudGltZW91dCA9IDEwMDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3VycmVudFN0YXR1cyA9IGF3YWl0IHRoaXMubm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICBpZiAoY3VycmVudFN0YXR1cyAmJiBjdXJyZW50U3RhdHVzLmlvcyAmJiBjdXJyZW50U3RhdHVzLmlvcy5pcCkge1xuICAgICAgICAgICAgdGhpcy5hZ2VudFVybCA9IGN1cnJlbnRTdGF0dXMuaW9zLmlwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgaW5mb3JtYXRpb246YCk7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoSlNPTi5zdHJpbmdpZnkoY3VycmVudFN0YXR1cywgbnVsbCwgMikpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb25uZWN0IHRvIHJ1bm5pbmcgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5ub1Nlc3Npb25Qcm94eS50aW1lb3V0ID0gcHJveHlUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgIC8vIHRoZXJlIGhhcyBiZWVuIGFuIGVycm9yIGVsc2V3aGVyZSBhbmQgd2UgbmVlZCB0byBzaG9ydC1jaXJjdWl0XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RhdHVzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGlmIHdlIGhhdmUgbm90IGhhZCBhbnkgZXJyb3JzIGZyb20geGNvZGUgaXRzZWxmIChyZXBvcnRlZFxuICAgICAgLy8gZWxzZXdoZXJlKSwgd2UgY2FuIGxldCB0aGlzIGdvIHRocm91Z2ggYW5kIHRyeSB0byBjcmVhdGUgdGhlIHNlc3Npb25cbiAgICAgIHRoaXMubG9nLmRlYnVnKGVyci5tZXNzYWdlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYEdldHRpbmcgc3RhdHVzIG9mIFdlYkRyaXZlckFnZW50IG9uIGRldmljZSB0aW1lZCBvdXQuIENvbnRpbnVpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0dXM7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICBhd2FpdCBraWxsUHJvY2VzcygneGNvZGVidWlsZCcsIHRoaXMueGNvZGVidWlsZCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgWGNvZGVCdWlsZCB9O1xuZXhwb3J0IGRlZmF1bHQgWGNvZGVCdWlsZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFD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
393
+ exports.default = _default;
394
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1NJR05JTkdfSUQiLCJQUkVCVUlMRF9ERUxBWSIsIlJVTk5FUl9TQ0hFTUVfSU9TIiwiTElCX1NDSEVNRV9JT1MiLCJFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQiLCJFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQiLCJJR05PUkVEX0VSUk9SUyIsIlJVTk5FUl9TQ0hFTUVfVFYiLCJMSUJfU0NIRU1FX1RWIiwieGNvZGVMb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJYY29kZUJ1aWxkIiwiY29uc3RydWN0b3IiLCJ4Y29kZVZlcnNpb24iLCJkZXZpY2UiLCJhcmdzIiwibG9nIiwiZGVmYXVsdExvZ2dlciIsInJlYWxEZXZpY2UiLCJhZ2VudFBhdGgiLCJib290c3RyYXBQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJwcmVidWlsZFdEQSIsInVzZVByZWJ1aWx0V0RBIiwidXNlU2ltcGxlQnVpbGRUZXN0IiwidXNlWGN0ZXN0cnVuRmlsZSIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFSZW1vdGVQb3J0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwiZGVyaXZlZERhdGFQYXRoIiwibWpwZWdTZXJ2ZXJQb3J0IiwicHJlYnVpbGREZWxheSIsIl8iLCJpc051bWJlciIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJpbml0Iiwibm9TZXNzaW9uUHJveHkiLCJkZXZpdmVJbmZvIiwiaXNSZWFsRGV2aWNlIiwidWRpZCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwic2V0WGN0ZXN0cnVuRmlsZSIsInJlc2V0UHJvamVjdEZpbGUiLCJ1cGRhdGVQcm9qZWN0RmlsZSIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiX2Rlcml2ZWREYXRhUGF0aFByb21pc2UiLCJzdGRvdXQiLCJleGVjIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJwYXR0ZXJuIiwibWF0Y2giLCJ0cnVuY2F0ZSIsImxlbmd0aCIsImRlYnVnIiwicGF0aCIsImRpcm5hbWUiLCJub3JtYWxpemUiLCJyZXNldCIsInByZWJ1aWxkIiwic3RhcnQiLCJ4Y29kZWJ1aWxkIiwiQiIsImRlbGF5IiwiY2xlYW5Qcm9qZWN0IiwidG1wSXNUdk9TIiwiaXNUdk9TIiwibGliU2NoZW1lIiwicnVubmVyU2NoZW1lIiwic2NoZW1lIiwiZ2V0Q29tbWFuZCIsImJ1aWxkT25seSIsImNtZCIsImJ1aWxkQ21kIiwidGVzdENtZCIsInB1c2giLCJ2ZXJzaW9uTWF0Y2giLCJSZWdFeHAiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1hDVUlURVNUX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJzZXRSZWFsRGV2aWNlU2VjdXJpdHkiLCJnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJNSlBFR19TRVJWRVJfUE9SVCIsInVwZ3JhZGVUaW1lc3RhbXAiLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwiVVBHUkFERV9USU1FU1RBTVAiLCJTdWJQcm9jZXNzIiwiY3dkIiwiZGV0YWNoZWQiLCJzdGRpbyIsImxvZ1hjb2RlT3V0cHV0IiwibG9nTXNnIiwiaXNCb29sZWFuIiwib24iLCJzdGRlcnIiLCJvdXQiLCJpbmNsdWRlcyIsImxvZ0xvY2F0aW9uIiwiZmlyc3QiLCJyZW1vdmUiLCJ0cmltIiwic3BsaXQiLCJ2Iiwic3RhcnRzV2l0aCIsInNlcCIsImlnbm9yZUVycm9yIiwic29tZSIsIngiLCJfd2RhX2Vycm9yX29jY3VycmVkIiwibGluZSIsIkVPTCIsImVycm9yIiwiX3dkYV9lcnJvcl9tZXNzYWdlIiwicmVzb2x2ZSIsInJlamVjdCIsImNvZGUiLCJzaWduYWwiLCJkYXRhIiwiZnMiLCJyZWFkRmlsZSIsInByb2Nlc3NFeGl0ZWQiLCJFcnJvciIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGF0dXMiLCJ3YWl0Rm9yU3RhcnQiLCJtc2ciLCJjdXJyZW50U3RhdHVzIiwicmV0cmllcyIsInBhcnNlSW50IiwicmV0cnlJbnRlcnZhbCIsInByb3h5VGltZW91dCIsInRpbWVvdXQiLCJjb21tYW5kIiwiaW9zIiwiaXAiLCJhZ2VudFVybCIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsInF1aXQiLCJraWxsUHJvY2VzcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi94Y29kZWJ1aWxkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCBsb2dnZXIsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIHNldFJlYWxEZXZpY2VTZWN1cml0eSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsIHNldFhjdGVzdHJ1bkZpbGUsXG4gIHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBraWxsUHJvY2VzcyxcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgaXNUdk9TIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBXREFfUlVOTkVSX0JVTkRMRV9JRCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuXG5jb25zdCBERUZBVUxUX1NJR05JTkdfSUQgPSAnaVBob25lIERldmVsb3Blcic7XG5jb25zdCBQUkVCVUlMRF9ERUxBWSA9IDA7XG5jb25zdCBSVU5ORVJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcic7XG5jb25zdCBMSUJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudExpYic7XG5cbmNvbnN0IEVSUk9SX1dSSVRJTkdfQVRUQUNITUVOVCA9ICdFcnJvciB3cml0aW5nIGF0dGFjaG1lbnQgZGF0YSB0byBmaWxlJztcbmNvbnN0IEVSUk9SX0NPUFlJTkdfQVRUQUNITUVOVCA9ICdFcnJvciBjb3B5aW5nIHRlc3RpbmcgYXR0YWNobWVudCc7XG5jb25zdCBJR05PUkVEX0VSUk9SUyA9IFtcbiAgRVJST1JfV1JJVElOR19BVFRBQ0hNRU5ULFxuICBFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQsXG4gICdGYWlsZWQgdG8gcmVtb3ZlIHNjcmVlbnNob3QgYXQgcGF0aCcsXG5dO1xuXG5jb25zdCBSVU5ORVJfU0NIRU1FX1RWID0gJ1dlYkRyaXZlckFnZW50UnVubmVyX3R2T1MnO1xuY29uc3QgTElCX1NDSEVNRV9UViA9ICdXZWJEcml2ZXJBZ2VudExpYl90dk9TJztcblxuY29uc3QgeGNvZGVMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdYY29kZScpO1xuXG5cbmNsYXNzIFhjb2RlQnVpbGQge1xuICBjb25zdHJ1Y3RvciAoeGNvZGVWZXJzaW9uLCBkZXZpY2UsIGFyZ3MgPSB7fSwgbG9nID0gbnVsbCkge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuXG4gICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5sb2cgPSBsb2cgPz8gZGVmYXVsdExvZ2dlcjtcblxuICAgIHRoaXMucmVhbERldmljZSA9IGFyZ3MucmVhbERldmljZTtcblxuICAgIHRoaXMuYWdlbnRQYXRoID0gYXJncy5hZ2VudFBhdGg7XG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYXJncy5ib290c3RyYXBQYXRoO1xuXG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcblxuICAgIHRoaXMuc2hvd1hjb2RlTG9nID0gYXJncy5zaG93WGNvZGVMb2c7XG5cbiAgICB0aGlzLnhjb2RlQ29uZmlnRmlsZSA9IGFyZ3MueGNvZGVDb25maWdGaWxlO1xuICAgIHRoaXMueGNvZGVPcmdJZCA9IGFyZ3MueGNvZGVPcmdJZDtcbiAgICB0aGlzLnhjb2RlU2lnbmluZ0lkID0gYXJncy54Y29kZVNpZ25pbmdJZCB8fCBERUZBVUxUX1NJR05JTkdfSUQ7XG4gICAgdGhpcy5rZXljaGFpblBhdGggPSBhcmdzLmtleWNoYWluUGF0aDtcbiAgICB0aGlzLmtleWNoYWluUGFzc3dvcmQgPSBhcmdzLmtleWNoYWluUGFzc3dvcmQ7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLnVzZVNpbXBsZUJ1aWxkVGVzdCA9IGFyZ3MudXNlU2ltcGxlQnVpbGRUZXN0O1xuXG4gICAgdGhpcy51c2VYY3Rlc3RydW5GaWxlID0gYXJncy51c2VYY3Rlc3RydW5GaWxlO1xuXG4gICAgdGhpcy5sYXVuY2hUaW1lb3V0ID0gYXJncy5sYXVuY2hUaW1lb3V0O1xuXG4gICAgdGhpcy53ZGFSZW1vdGVQb3J0ID0gYXJncy53ZGFSZW1vdGVQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuXG4gICAgdGhpcy5tanBlZ1NlcnZlclBvcnQgPSBhcmdzLm1qcGVnU2VydmVyUG9ydDtcblxuICAgIHRoaXMucHJlYnVpbGREZWxheSA9IF8uaXNOdW1iZXIoYXJncy5wcmVidWlsZERlbGF5KSA/IGFyZ3MucHJlYnVpbGREZWxheSA6IFBSRUJVSUxEX0RFTEFZO1xuXG4gICAgdGhpcy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbiA9IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb247XG5cbiAgICB0aGlzLnJlc3VsdEJ1bmRsZVBhdGggPSBhcmdzLnJlc3VsdEJ1bmRsZVBhdGg7XG4gICAgdGhpcy5yZXN1bHRCdW5kbGVWZXJzaW9uID0gYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAobm9TZXNzaW9uUHJveHkpIHtcbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbm9TZXNzaW9uUHJveHk7XG5cbiAgICBpZiAodGhpcy51c2VYY3Rlc3RydW5GaWxlKSB7XG4gICAgICBjb25zdCBkZXZpdmVJbmZvID0ge1xuICAgICAgICBpc1JlYWxEZXZpY2U6IHRoaXMucmVhbERldmljZSxcbiAgICAgICAgdWRpZDogdGhpcy5kZXZpY2UudWRpZCxcbiAgICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZVxuICAgICAgfTtcbiAgICAgIHRoaXMueGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBzZXRYY3Rlc3RydW5GaWxlKGRldml2ZUluZm8sIHRoaXMuaW9zU2RrVmVyc2lvbiwgdGhpcy5ib290c3RyYXBQYXRoLCB0aGlzLndkYVJlbW90ZVBvcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIG5lY2Vzc2FyeSwgdXBkYXRlIHRoZSBidW5kbGVJZCB0byB1c2VyJ3Mgc3BlY2lmaWNhdGlvblxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UpIHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIHByb2plY3Qgc3RpbGwgaGFzIHRoZSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRCwgcmVzZXQgdGhlIHByb2plY3QgZmlsZSBmaXJzdC5cbiAgICAgIC8vIC0gV2UgZG8gdGhpcyByZXNldCBldmVuIGlmIHVwZGF0ZWRXREFCdW5kbGVJZCBpcyBub3Qgc3BlY2lmaWVkLFxuICAgICAgLy8gICBzaW5jZSB0aGUgcHJldmlvdXMgdXBkYXRlZFdEQUJ1bmRsZUlkIHRlc3QgaGFzIGdlbmVyYXRlZCB0aGUgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQgcHJvamVjdCBmaWxlLlxuICAgICAgLy8gLSBXZSBkb24ndCBjYWxsIHJlc2V0UHJvamVjdEZpbGUgZm9yIHNpbXVsYXRvcixcbiAgICAgIC8vICAgc2luY2Ugc2ltdWxhdG9yIHRlc3QgcnVuIHdpbGwgd29yayB3aXRoIGFueSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRC5cbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgICAgaWYgKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSB7XG4gICAgICAgIGF3YWl0IHVwZGF0ZVByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoLCB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEZXJpdmVkRGF0YVBhdGggKCkge1xuICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVyaXZlZERhdGFQYXRoO1xuICAgIH1cblxuICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9uc1xuICAgIGlmICh0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICB0cnkge1xuICAgICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgWyctcHJvamVjdCcsIHRoaXMuYWdlbnRQYXRoLCAnLXNob3dCdWlsZFNldHRpbmdzJ10pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmV0cmlldmUgV0RBIGJ1aWxkIHNldHRpbmdzLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXR0ZXJuID0gL15cXHMqQlVJTERfRElSXFxzKz1cXHMrKFxcLy4qKS9tO1xuICAgICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc3Rkb3V0KTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIFdEQSBidWlsZCBkaXIgZnJvbSAke18udHJ1bmNhdGUoc3Rkb3V0LCB7bGVuZ3RoOiAzMDB9KX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBCVUlMRF9ESVIgY29uZmlndXJhdGlvbiB2YWx1ZTogJyR7bWF0Y2hbMV19J2ApO1xuICAgICAgLy8gRGVyaXZlZCBkYXRhIHJvb3QgaXMgdHdvIGxldmVscyBoaWdoZXIgb3ZlciB0aGUgYnVpbGQgZGlyXG4gICAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IHBhdGguZGlybmFtZShwYXRoLmRpcm5hbWUocGF0aC5ub3JtYWxpemUobWF0Y2hbMV0pKSk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgR290IGRlcml2ZWQgZGF0YSByb290OiAnJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0nYCk7XG4gICAgICByZXR1cm4gdGhpcy5kZXJpdmVkRGF0YVBhdGg7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICAvLyBpZiBuZWNlc3NhcnksIHJlc2V0IHRoZSBidW5kbGVJZCB0byBvcmlnaW5hbCB2YWx1ZVxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByZWJ1aWxkICgpIHtcbiAgICAvLyBmaXJzdCBkbyBhIGJ1aWxkIHBoYXNlXG4gICAgdGhpcy5sb2cuZGVidWcoJ1ByZS1idWlsZGluZyBXREEgYmVmb3JlIGxhdW5jaGluZyB0ZXN0Jyk7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0cnVlKTtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG51bGw7XG5cbiAgICAvLyBwYXVzZSBhIG1vbWVudFxuICAgIGF3YWl0IEIuZGVsYXkodGhpcy5wcmVidWlsZERlbGF5KTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFuUHJvamVjdCAoKSB7XG4gICAgY29uc3QgdG1wSXNUdk9TID0gaXNUdk9TKHRoaXMucGxhdGZvcm1OYW1lKTtcbiAgICBjb25zdCBsaWJTY2hlbWUgPSB0bXBJc1R2T1MgPyBMSUJfU0NIRU1FX1RWIDogTElCX1NDSEVNRV9JT1M7XG4gICAgY29uc3QgcnVubmVyU2NoZW1lID0gdG1wSXNUdk9TID8gUlVOTkVSX1NDSEVNRV9UViA6IFJVTk5FUl9TQ0hFTUVfSU9TO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWUgb2YgW2xpYlNjaGVtZSwgcnVubmVyU2NoZW1lXSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENsZWFuaW5nIHRoZSBwcm9qZWN0IHNjaGVtZSAnJHtzY2hlbWV9JyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGxlZnRvdmVycyBmcm9tIHByZXZpb3VzIGluc3RhbGxzYCk7XG4gICAgICBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgW1xuICAgICAgICAnY2xlYW4nLFxuICAgICAgICAnLXByb2plY3QnLCB0aGlzLmFnZW50UGF0aCxcbiAgICAgICAgJy1zY2hlbWUnLCBzY2hlbWUsXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb21tYW5kIChidWlsZE9ubHkgPSBmYWxzZSkge1xuICAgIGxldCBjbWQgPSAneGNvZGVidWlsZCc7XG4gICAgbGV0IGFyZ3M7XG5cbiAgICAvLyBmaWd1cmUgb3V0IHRoZSB0YXJnZXRzIGZvciB4Y29kZWJ1aWxkXG4gICAgY29uc3QgW2J1aWxkQ21kLCB0ZXN0Q21kXSA9IHRoaXMudXNlU2ltcGxlQnVpbGRUZXN0ID8gWydidWlsZCcsICd0ZXN0J10gOiBbJ2J1aWxkLWZvci10ZXN0aW5nJywgJ3Rlc3Qtd2l0aG91dC1idWlsZGluZyddO1xuICAgIGlmIChidWlsZE9ubHkpIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWRdO1xuICAgIH0gZWxzZSBpZiAodGhpcy51c2VQcmVidWlsdFdEQSB8fCB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUpIHtcbiAgICAgIGFyZ3MgPSBbdGVzdENtZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWQsIHRlc3RDbWRdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgICAvLyBUbyAtYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24gZmxhZyB0YWtlcyBlZmZlY3QsIC1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMgbmVlZHMgdG8gYmUgcGFzc2VkIGFzIHdlbGwuXG4gICAgICBhcmdzLnB1c2goJy1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMnLCAnLWFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlUGF0aCcsIHRoaXMucmVzdWx0QnVuZGxlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbikge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlVmVyc2lvbicsIHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlWGN0ZXN0cnVuRmlsZSkge1xuICAgICAgYXJncy5wdXNoKCcteGN0ZXN0cnVuJywgdGhpcy54Y3Rlc3RydW5GaWxlUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bm5lclNjaGVtZSA9IGlzVHZPUyh0aGlzLnBsYXRmb3JtTmFtZSkgPyBSVU5ORVJfU0NIRU1FX1RWIDogUlVOTkVSX1NDSEVNRV9JT1M7XG4gICAgICBhcmdzLnB1c2goJy1wcm9qZWN0JywgdGhpcy5hZ2VudFBhdGgsICctc2NoZW1lJywgcnVubmVyU2NoZW1lKTtcbiAgICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBhcmdzLnB1c2goJy1kZXJpdmVkRGF0YVBhdGgnLCB0aGlzLmRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLWRlc3RpbmF0aW9uJywgYGlkPSR7dGhpcy5kZXZpY2UudWRpZH1gKTtcblxuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IG5ldyBSZWdFeHAoL14oXFxkKylcXC4oXFxkKykvKS5leGVjKHRoaXMucGxhdGZvcm1WZXJzaW9uKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBhcmdzLnB1c2goYElQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUPSR7dmVyc2lvbk1hdGNoWzFdfS4ke3ZlcnNpb25NYXRjaFsyXX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMgZnJvbSBwbGF0Zm9ybVZlcnNpb24gXCIke3RoaXMucGxhdGZvcm1WZXJzaW9ufVwiLiBgICtcbiAgICAgICAgJ1dpbGwgYnVpbGQgZm9yIHRoZSBkZWZhdWx0IHBsYXRmb3JtIGluc3RlYWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlICYmIHRoaXMueGNvZGVDb25maWdGaWxlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVXNpbmcgWGNvZGUgY29uZmlndXJhdGlvbiBmaWxlOiAnJHt0aGlzLnhjb2RlQ29uZmlnRmlsZX0nYCk7XG4gICAgICBhcmdzLnB1c2goJy14Y2NvbmZpZycsIHRoaXMueGNvZGVDb25maWdGaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb2Nlc3MuZW52LkFQUElVTV9YQ1VJVEVTVF9UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMpIHtcbiAgICAgIC8vIFRoaXMgc29tZXRpbWVzIGhlbHBzIHRvIHN1cnZpdmUgWGNvZGUgdXBkYXRlc1xuICAgICAgYXJncy5wdXNoKCdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTPTAnKTtcbiAgICB9XG5cbiAgICAvLyBCZWxvdyBvcHRpb24gc2xpZ2h0bHkgcmVkdWNlcyBidWlsZCB0aW1lIGluIGRlYnVnIGJ1aWxkXG4gICAgLy8gd2l0aCBwcmV2ZW50aW5nIHRvIGdlbmVyYXRlIGAvSW5kZXgvRGF0YVN0b3JlYCB3aGljaCBpcyB1c2VkIGJ5IGRldmVsb3BtZW50XG4gICAgYXJncy5wdXNoKCdDT01QSUxFUl9JTkRFWF9TVE9SRV9FTkFCTEU9Tk8nKTtcblxuICAgIHJldHVybiB7Y21kLCBhcmdzfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVN1YlByb2Nlc3MgKGJ1aWxkT25seSA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgJiYgdGhpcy5yZWFsRGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5rZXljaGFpblBhdGggJiYgdGhpcy5rZXljaGFpblBhc3N3b3JkKSB7XG4gICAgICAgIGF3YWl0IHNldFJlYWxEZXZpY2VTZWN1cml0eSh0aGlzLmtleWNoYWluUGF0aCwgdGhpcy5rZXljaGFpblBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnhjb2RlT3JnSWQgJiYgdGhpcy54Y29kZVNpZ25pbmdJZCAmJiAhdGhpcy54Y29kZUNvbmZpZ0ZpbGUpIHtcbiAgICAgICAgdGhpcy54Y29kZUNvbmZpZ0ZpbGUgPSBhd2FpdCBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSh0aGlzLnhjb2RlT3JnSWQsIHRoaXMueGNvZGVTaWduaW5nSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHtjbWQsIGFyZ3N9ID0gdGhpcy5nZXRDb21tYW5kKGJ1aWxkT25seSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEJlZ2lubmluZyAke2J1aWxkT25seSA/ICdidWlsZCcgOiAndGVzdCd9IHdpdGggY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBgICtcbiAgICAgIGBpbiBkaXJlY3RvcnkgJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcbiAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCB8fCBXREFfUlVOTkVSX0JVTkRMRV9JRCxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvcHVsbC8xMDVcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cbiAgICBjb25zdCB1cGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgIGlmICh1cGdyYWRlVGltZXN0YW1wKSB7XG4gICAgICBlbnYuVVBHUkFERV9USU1FU1RBTVAgPSB1cGdyYWRlVGltZXN0YW1wO1xuICAgIH1cbiAgICBjb25zdCB4Y29kZWJ1aWxkID0gbmV3IFN1YlByb2Nlc3MoY21kLCBhcmdzLCB7XG4gICAgICBjd2Q6IHRoaXMuYm9vdHN0cmFwUGF0aCxcbiAgICAgIGVudixcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuXG4gICAgbGV0IGxvZ1hjb2RlT3V0cHV0ID0gISF0aGlzLnNob3dYY29kZUxvZztcbiAgICBjb25zdCBsb2dNc2cgPSBfLmlzQm9vbGVhbih0aGlzLnNob3dYY29kZUxvZylcbiAgICAgID8gYE91dHB1dCBmcm9tIHhjb2RlYnVpbGQgJHt0aGlzLnNob3dYY29kZUxvZyA/ICd3aWxsJyA6ICd3aWxsIG5vdCd9IGJlIGxvZ2dlZGBcbiAgICAgIDogJ091dHB1dCBmcm9tIHhjb2RlYnVpbGQgd2lsbCBvbmx5IGJlIGxvZ2dlZCBpZiBhbnkgZXJyb3JzIGFyZSBwcmVzZW50IHRoZXJlJztcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJHtsb2dNc2d9LiBUbyBjaGFuZ2UgdGhpcywgdXNlICdzaG93WGNvZGVMb2cnIGRlc2lyZWQgY2FwYWJpbGl0eWApO1xuICAgIHhjb2RlYnVpbGQub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgbGV0IG91dCA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICAvLyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBsb2cgZmlsZSB0aGF0IGlzIGNyZWF0ZWQsIGFuZCBoaWdobGlnaHQgaXRcbiAgICAgIC8vIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzXG4gICAgICBpZiAob3V0LmluY2x1ZGVzKCdXcml0aW5nIGRpYWdub3N0aWMgbG9nIGZvciB0ZXN0IHNlc3Npb24gdG8nKSkge1xuICAgICAgICAvLyBwdWxsIG91dCB0aGUgZmlyc3QgbGluZSB0aGF0IGJlZ2lucyB3aXRoIHRoZSBwYXRoIHNlcGFyYXRvclxuICAgICAgICAvLyB3aGljaCAqc2hvdWxkKiBiZSB0aGUgbGluZSBpbmRpY2F0aW5nIHRoZSBsb2cgZmlsZSBnZW5lcmF0ZWRcbiAgICAgICAgeGNvZGVidWlsZC5sb2dMb2NhdGlvbiA9IF8uZmlyc3QoXy5yZW1vdmUob3V0LnRyaW0oKS5zcGxpdCgnXFxuJyksICh2KSA9PiB2LnN0YXJ0c1dpdGgocGF0aC5zZXApKSk7XG4gICAgICAgIHhjb2RlTG9nLmRlYnVnKGBMb2cgZmlsZSBmb3IgeGNvZGVidWlsZCB0ZXN0OiAke3hjb2RlYnVpbGQubG9nTG9jYXRpb259YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgYW4gZXJyb3Igd2Ugd2FudCB0byBvdXRwdXQgdGhlIGxvZ3NcbiAgICAgIC8vIG90aGVyd2lzZSB0aGUgZmFpbHVyZSBpcyBpbnNjcnV0aWJsZVxuICAgICAgLy8gYnV0IGRvIG5vdCBsb2cgcGVybWlzc2lvbiBlcnJvcnMgZnJvbSB0cnlpbmcgdG8gd3JpdGUgdG8gYXR0YWNobWVudHMgZm9sZGVyXG4gICAgICBjb25zdCBpZ25vcmVFcnJvciA9IElHTk9SRURfRVJST1JTLnNvbWUoKHgpID0+IG91dC5pbmNsdWRlcyh4KSk7XG4gICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgIT09IGZhbHNlICYmIG91dC5pbmNsdWRlcygnRXJyb3IgRG9tYWluPScpICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBsb2dYY29kZU91dHB1dCA9IHRydWU7XG5cbiAgICAgICAgLy8gdGVycmlibGUgaGFjayB0byBoYW5kbGUgY2FzZSB3aGVyZSB4Y29kZSByZXR1cm4gMCBidXQgaXMgZmFpbGluZ1xuICAgICAgICB4Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBkbyBub3QgbG9nIHBlcm1pc3Npb24gZXJyb3JzIGZyb20gdHJ5aW5nIHRvIHdyaXRlIHRvIGF0dGFjaG1lbnRzIGZvbGRlclxuICAgICAgaWYgKGxvZ1hjb2RlT3V0cHV0ICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3V0LnNwbGl0KEVPTCkpIHtcbiAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgICAgeGNvZGVidWlsZC5fd2RhX2Vycm9yX21lc3NhZ2UgKz0gYCR7RU9MfSR7bGluZX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHhjb2RlYnVpbGQ7XG4gIH1cblxuICBhc3luYyBzdGFydCAoYnVpbGRPbmx5ID0gZmFsc2UpIHtcbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBhd2FpdCB0aGlzLmNyZWF0ZVN1YlByb2Nlc3MoYnVpbGRPbmx5KTtcbiAgICAvLyBTdG9yZSB4Y29kZWJ1aWxkIG1lc3NhZ2VcbiAgICB0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlID0gJyc7XG5cbiAgICAvLyB3cmFwIHRoZSBzdGFydCBwcm9jZWR1cmUgaW4gYSBwcm9taXNlIHNvIHRoYXQgd2UgY2FuIGNhdGNoLCBhbmQgcmVwb3J0LFxuICAgIC8vIGFueSBzdGFydHVwIGVycm9ycyB0aGF0IGFyZSB0aHJvd24gYXMgZXZlbnRzXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMueGNvZGVidWlsZC5vbignZXhpdCcsIGFzeW5jIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgeGNvZGVMb2cuZXJyb3IoYHhjb2RlYnVpbGQgZXhpdGVkIHdpdGggY29kZSAnJHtjb2RlfScgYW5kIHNpZ25hbCAnJHtzaWduYWx9J2ApO1xuICAgICAgICAvLyBwcmludCBvdXQgdGhlIHhjb2RlYnVpbGQgZmlsZSBpZiB1c2VycyBoYXZlIGFza2VkIGZvciBpdFxuICAgICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgJiYgdGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uKSB7XG4gICAgICAgICAgeGNvZGVMb2cuZXJyb3IoYENvbnRlbnRzIG9mIHhjb2RlYnVpbGQgbG9nIGZpbGUgJyR7dGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9ufSc6YCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uLCAndXRmOCcpO1xuICAgICAgICAgICAgZm9yIChsZXQgbGluZSBvZiBkYXRhLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHhjb2RlTG9nLmVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHhjb2RlYnVpbGQgbG9nIGZpbGU6ICcke2Vyci5tZXNzYWdlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgfHwgKCFzaWduYWwgJiYgY29kZSAhPT0gMCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgeGNvZGVidWlsZCBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0ke0VPTH1gICtcbiAgICAgICAgICAgIGB4Y29kZWJ1aWxkIGVycm9yIG1lc3NhZ2U6JHtFT0x9JHt0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBqdXN0IGJ1aWxkaW5nLCB0aGUgcHJvY2VzcyB3aWxsIGV4aXQgYW5kIHRoYXQgaXMgb3VyIGZpbmlzaFxuICAgICAgICBpZiAoYnVpbGRPbmx5KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KHRydWUpO1xuICAgICAgICAgIGlmICghYnVpbGRPbmx5KSB7XG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gYXdhaXQgdGhpcy53YWl0Rm9yU3RhcnQodGltZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyfWA7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3IobXNnKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKG1zZykpO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclN0YXJ0ICh0aW1lcikge1xuICAgIC8vIHRyeSB0byBjb25uZWN0IG9uY2UgZXZlcnkgMC41IHNlY29uZHMsIHVudGlsIGBsYXVuY2hUaW1lb3V0YCBpcyB1cFxuICAgIHRoaXMubG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGhpcy5sYXVuY2hUaW1lb3V0fW1zIGZvciBXZWJEcml2ZXJBZ2VudCB0byBzdGFydGApO1xuICAgIGxldCBjdXJyZW50U3RhdHVzID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgbGV0IHJldHJpZXMgPSBwYXJzZUludCh0aGlzLmxhdW5jaFRpbWVvdXQgLyA1MDAsIDEwKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAvLyB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBlbHNld2hlcmUgYW5kIHdlIG5lZWQgdG8gc2hvcnQtY2lyY3VpdFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm94eVRpbWVvdXQgPSB0aGlzLm5vU2Vzc2lvblByb3h5LnRpbWVvdXQ7XG4gICAgICAgIHRoaXMubm9TZXNzaW9uUHJveHkudGltZW91dCA9IDEwMDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3VycmVudFN0YXR1cyA9IGF3YWl0IHRoaXMubm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICBpZiAoY3VycmVudFN0YXR1cyAmJiBjdXJyZW50U3RhdHVzLmlvcyAmJiBjdXJyZW50U3RhdHVzLmlvcy5pcCkge1xuICAgICAgICAgICAgdGhpcy5hZ2VudFVybCA9IGN1cnJlbnRTdGF0dXMuaW9zLmlwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgaW5mb3JtYXRpb246YCk7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoSlNPTi5zdHJpbmdpZnkoY3VycmVudFN0YXR1cywgbnVsbCwgMikpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb25uZWN0IHRvIHJ1bm5pbmcgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5ub1Nlc3Npb25Qcm94eS50aW1lb3V0ID0gcHJveHlUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgIC8vIHRoZXJlIGhhcyBiZWVuIGFuIGVycm9yIGVsc2V3aGVyZSBhbmQgd2UgbmVlZCB0byBzaG9ydC1jaXJjdWl0XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RhdHVzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGlmIHdlIGhhdmUgbm90IGhhZCBhbnkgZXJyb3JzIGZyb20geGNvZGUgaXRzZWxmIChyZXBvcnRlZFxuICAgICAgLy8gZWxzZXdoZXJlKSwgd2UgY2FuIGxldCB0aGlzIGdvIHRocm91Z2ggYW5kIHRyeSB0byBjcmVhdGUgdGhlIHNlc3Npb25cbiAgICAgIHRoaXMubG9nLmRlYnVnKGVyci5tZXNzYWdlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYEdldHRpbmcgc3RhdHVzIG9mIFdlYkRyaXZlckFnZW50IG9uIGRldmljZSB0aW1lZCBvdXQuIENvbnRpbnVpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0dXM7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICBhd2FpdCBraWxsUHJvY2VzcygneGNvZGVidWlsZCcsIHRoaXMueGNvZGVidWlsZCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgWGNvZGVCdWlsZCB9O1xuZXhwb3J0IGRlZmF1bHQgWGNvZGVCdWlsZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxrQkFBa0IsR0FBRyxrQkFBM0I7QUFDQSxNQUFN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
package/index.js CHANGED
@@ -3,20 +3,13 @@ import * as proxies from './lib/no-session-proxy';
3
3
  import * as driver from './lib/webdriveragent';
4
4
  import * as constants from './lib/constants';
5
5
  import * as utils from './lib/utils';
6
- import { asyncify } from 'asyncbox';
7
6
 
8
7
 
9
8
  const { checkForDependencies, bundleWDASim } = dependencies;
10
9
  const { NoSessionProxy } = proxies;
11
10
  const { WebDriverAgent } = driver;
12
- const { BOOTSTRAP_PATH, WDA_BASE_URL, WDA_RUNNER_BUNDLE_ID, PROJECT_FILE } = constants;
13
- const { resetTestProcesses } = utils;
14
-
15
-
16
- // When run as a command line utility, this should check for the dependencies
17
- if (require.main === module) {
18
- asyncify(checkForDependencies);
19
- }
11
+ const { WDA_BASE_URL, WDA_RUNNER_BUNDLE_ID, PROJECT_FILE } = constants;
12
+ const { resetTestProcesses, BOOTSTRAP_PATH } = utils;
20
13
 
21
14
  export {
22
15
  WebDriverAgent,
@@ -4,13 +4,14 @@ import { exec } from 'teen_process';
4
4
  import path from 'path';
5
5
  import XcodeBuild from './xcodebuild';
6
6
  import {
7
- WDA_PROJECT, WDA_SCHEME, SDK_SIMULATOR, WDA_RUNNER_APP
7
+ WDA_SCHEME, SDK_SIMULATOR, WDA_RUNNER_APP
8
8
  } from './constants';
9
+ import { BOOTSTRAP_PATH } from './utils';
9
10
  import log from './logger';
10
11
 
11
12
  async function buildWDASim () {
12
13
  const args = [
13
- '-project', WDA_PROJECT,
14
+ '-project', path.join(BOOTSTRAP_PATH, 'WebDriverAgent.xcodeproj'),
14
15
  '-scheme', WDA_SCHEME,
15
16
  '-sdk', SDK_SIMULATOR,
16
17
  'CODE_SIGN_IDENTITY=""',
@@ -37,7 +38,6 @@ async function bundleWDASim (xcodebuild, opts = {}) {
37
38
  if (await fs.exists(wdaBundlePath)) {
38
39
  return wdaBundlePath;
39
40
  }
40
- await checkForDependencies(opts);
41
41
  await buildWDASim(xcodebuild, opts);
42
42
  return wdaBundlePath;
43
43
  }
package/lib/constants.js CHANGED
@@ -1,11 +1,5 @@
1
1
  import path from 'path';
2
2
 
3
-
4
- const BOOTSTRAP_PATH = __dirname.endsWith('build')
5
- ? path.resolve(__dirname, '..', '..', '..')
6
- : path.resolve(__dirname, '..', '..');
7
- const WDA_PROJECT = path.join(BOOTSTRAP_PATH, 'WebDriverAgent.xcodeproj');
8
- const WDA_SCRIPTS_ROOT = path.join(BOOTSTRAP_PATH, 'Scripts');
9
3
  const WDA_RUNNER_BUNDLE_ID = 'com.facebook.WebDriverAgentRunner';
10
4
  const WDA_RUNNER_APP = 'WebDriverAgentRunner-Runner.app';
11
5
  const WDA_SCHEME = 'WebDriverAgentRunner';
@@ -21,10 +15,7 @@ const SDK_DEVICE = 'iphoneos';
21
15
  const WDA_UPGRADE_TIMESTAMP_PATH = path.join('.appium', 'webdriveragent', 'upgrade.time');
22
16
 
23
17
  export {
24
- BOOTSTRAP_PATH,
25
18
  WDA_RUNNER_BUNDLE_ID, WDA_RUNNER_APP, PROJECT_FILE,
26
- WDA_PROJECT, WDA_SCHEME,
27
- PLATFORM_NAME_TVOS, PLATFORM_NAME_IOS,
28
- SDK_SIMULATOR, SDK_DEVICE,
29
- WDA_BASE_URL, WDA_SCRIPTS_ROOT, WDA_UPGRADE_TIMESTAMP_PATH
19
+ WDA_SCHEME, PLATFORM_NAME_TVOS, PLATFORM_NAME_IOS,
20
+ SDK_SIMULATOR, SDK_DEVICE, WDA_BASE_URL, WDA_UPGRADE_TIMESTAMP_PATH
30
21
  };
package/lib/utils.js CHANGED
@@ -5,13 +5,36 @@ import log from './logger';
5
5
  import _ from 'lodash';
6
6
  import { WDA_RUNNER_BUNDLE_ID, PLATFORM_NAME_TVOS } from './constants';
7
7
  import B from 'bluebird';
8
+ import _fs from 'fs';
8
9
  import { waitForCondition } from 'asyncbox';
9
10
 
10
- const ROOT_DIR = path.basename(__dirname) === 'lib'
11
- ? path.resolve(__dirname, process.env.NO_PRECOMPILE ? '..' : '../..')
12
- : __dirname;
13
11
  const PROJECT_FILE = 'project.pbxproj';
14
12
 
13
+ /**
14
+ * Calculates the path to the current module's root folder
15
+ *
16
+ * @returns {string} The full path to module root
17
+ * @throws {Error} If the current module root folder cannot be determined
18
+ */
19
+ const getModuleRoot = _.memoize(function getModuleRoot () {
20
+ let currentDir = path.dirname(path.resolve(__filename));
21
+ let isAtFsRoot = false;
22
+ while (!isAtFsRoot) {
23
+ const manifestPath = path.join(currentDir, 'package.json');
24
+ try {
25
+ if (_fs.existsSync(manifestPath) &&
26
+ JSON.parse(_fs.readFileSync(manifestPath, 'utf8')).name === 'appium-webdriveragent') {
27
+ return currentDir;
28
+ }
29
+ } catch (ign) {}
30
+ currentDir = path.dirname(currentDir);
31
+ isAtFsRoot = currentDir.length <= path.dirname(currentDir).length;
32
+ }
33
+ throw new Error('Cannot find the root folder of the appium-webdriveragent Node.js module');
34
+ });
35
+
36
+ export const BOOTSTRAP_PATH = getModuleRoot();
37
+
15
38
  async function getPIDsUsingPattern (pattern) {
16
39
  const args = [
17
40
  '-if', // case insensitive, full cmdline match
@@ -297,7 +320,7 @@ function randomInt (low, high) {
297
320
  * package upgrade.
298
321
  */
299
322
  async function getWDAUpgradeTimestamp () {
300
- const packageManifest = path.resolve(ROOT_DIR, 'package.json');
323
+ const packageManifest = path.resolve(getModuleRoot(), 'package.json');
301
324
  if (!await fs.exists(packageManifest)) {
302
325
  return null;
303
326
  }
@@ -371,5 +394,5 @@ export { updateProjectFile, resetProjectFile, setRealDeviceSecurity,
371
394
  getAdditionalRunContent, getXctestrunFileName, generateXcodeConfigFile,
372
395
  setXctestrunFile, getXctestrunFilePath, killProcess, randomInt,
373
396
  getWDAUpgradeTimestamp, resetTestProcesses,
374
- getPIDsListeningOnPort, killAppUsingPattern, isTvOS,
397
+ getPIDsListeningOnPort, killAppUsingPattern, isTvOS
375
398
  };
@@ -7,15 +7,14 @@ import { fs, util, plist, mkdirp } from 'appium/support';
7
7
  import defaultLogger from './logger';
8
8
  import { NoSessionProxy } from './no-session-proxy';
9
9
  import {
10
- getWDAUpgradeTimestamp, resetTestProcesses, getPIDsListeningOnPort
10
+ getWDAUpgradeTimestamp, resetTestProcesses, getPIDsListeningOnPort, BOOTSTRAP_PATH
11
11
  } from './utils';
12
12
  import XcodeBuild from './xcodebuild';
13
13
  import AsyncLock from 'async-lock';
14
14
  import { exec } from 'teen_process';
15
15
  import { bundleWDASim } from './check-dependencies';
16
16
  import {
17
- BOOTSTRAP_PATH, WDA_RUNNER_BUNDLE_ID, WDA_RUNNER_APP,
18
- WDA_BASE_URL, WDA_UPGRADE_TIMESTAMP_PATH,
17
+ WDA_RUNNER_BUNDLE_ID, WDA_RUNNER_APP, WDA_BASE_URL, WDA_UPGRADE_TIMESTAMP_PATH,
19
18
  } from './constants';
20
19
 
21
20
  const WDA_LAUNCH_TIMEOUT = 60 * 1000;
package/package.json CHANGED
@@ -1,29 +1,39 @@
1
1
  {
2
2
  "name": "appium-webdriveragent",
3
- "version": "4.8.2",
3
+ "version": "4.8.5",
4
4
  "description": "Package bundling WebDriverAgent",
5
- "main": "build/index.js",
5
+ "main": "./build/index.js",
6
6
  "scripts": {
7
- "test": "gulp once",
8
- "e2e-test": "npm run build && _FORCE_LOGS=1 npx mocha -t 0 -R spec build/test/functional --exit",
9
- "clean": "rm -rf node_modules && rm -f package-lock.json && npm install",
10
- "install:dependencies": "gulp install:dependencies",
11
- "build": "gulp transpile",
12
- "prepare": "gulp prepublish",
13
- "prepublishOnly": "npm run bundle",
14
- "lint": "gulp lint",
15
- "lint:fix": "gulp eslint --fix",
7
+ "build": "rm -rf build && babel --out-dir=build/lib lib && babel --out-dir=build index.js",
8
+ "dev": "npm run build -- --watch",
9
+ "lint": "eslint .",
10
+ "lint:fix": "npm run lint -- --fix",
16
11
  "precommit-msg": "echo 'Pre-commit checks...' && exit 0",
17
- "precommit-test": "gulp lint",
12
+ "precommit-lint": "lint-staged",
13
+ "prepare": "npm run build",
14
+ "test": "mocha --exit --timeout 1m \"./test/unit/**/*-specs.js\"",
15
+ "e2e-test": "mocha --exit --timeout 10m \"./test/functional/**/*-specs.js\"",
16
+ "prepublishOnly": "npm run bundle",
18
17
  "bundle": "node ./Scripts/build-webdriveragent.js",
19
- "fetch-prebuilt-wda": "node ./Scripts/fetch-prebuilt-wda"
18
+ "fetch-prebuilt-wda": "node ./Scripts/fetch-prebuilt-wda.js"
19
+ },
20
+ "engines": {
21
+ "node": ">=14",
22
+ "npm": ">=8"
23
+ },
24
+ "lint-staged": {
25
+ "*.js": [
26
+ "eslint --fix"
27
+ ]
20
28
  },
21
- "bin": {
22
- "appium-wda-bootstrap": "./build/index.js"
29
+ "prettier": {
30
+ "bracketSpacing": false,
31
+ "printWidth": 100,
32
+ "singleQuote": true
23
33
  },
24
34
  "pre-commit": [
25
35
  "precommit-msg",
26
- "precommit-test"
36
+ "precommit-lint"
27
37
  ],
28
38
  "repository": {
29
39
  "type": "git",
@@ -36,26 +46,36 @@
36
46
  "Selenium",
37
47
  "WebDriverAgent"
38
48
  ],
39
- "author": "appium",
49
+ "author": "Appium Contributors",
40
50
  "license": "Apache-2.0",
41
51
  "bugs": {
42
52
  "url": "https://github.com/appium/WebDriverAgent/issues"
43
53
  },
44
54
  "homepage": "https://github.com/appium/WebDriverAgent#readme",
45
55
  "devDependencies": {
46
- "@appium/gulp-plugins": "^7.0.0",
47
56
  "@appium/eslint-config-appium": "^6.0.0",
48
- "@appium/test-support": "^1.0.0",
57
+ "@appium/test-support": "^2.0.0",
58
+ "@babel/cli": "^7.18.10",
59
+ "@babel/core": "^7.18.10",
60
+ "@babel/eslint-parser": "^7.18.9",
61
+ "@babel/plugin-transform-runtime": "^7.18.10",
62
+ "@babel/preset-env": "^7.18.10",
63
+ "@babel/register": "^7.18.9",
49
64
  "@semantic-release/git": "^10.0.1",
50
- "appium-xcode": "^4.0.0",
65
+ "babel-plugin-source-map-support": "^2.2.0",
66
+ "appium-xcode": "^4.0.1",
51
67
  "chai": "^4.2.0",
52
68
  "chai-as-promised": "^7.1.1",
69
+ "eslint": "^7.32.0",
53
70
  "eslint-config-prettier": "^8.5.0",
54
71
  "glob": "^8.0.1",
55
- "gulp": "^4.0.2",
56
- "ios-uicatalog": "^3.5.0",
72
+ "eslint-plugin-import": "^2.26.0",
73
+ "eslint-plugin-mocha": "^9.0.0",
74
+ "eslint-plugin-promise": "^6.0.0",
75
+ "lint-staged": "^13.0.3",
57
76
  "mocha": "^10.0.0",
58
77
  "pre-commit": "^1.2.2",
78
+ "prettier": "^2.7.1",
59
79
  "semantic-release": "^19.0.2",
60
80
  "sinon": "^14.0.0"
61
81
  },
@@ -72,7 +92,7 @@
72
92
  "lodash": "^4.17.11",
73
93
  "node-simctl": "^7.0.1",
74
94
  "source-map-support": "^0.x",
75
- "teen_process": "^1.14.1"
95
+ "teen_process": "^2.0.0"
76
96
  },
77
97
  "files": [
78
98
  "index.js",
@@ -82,8 +102,6 @@
82
102
  "Scripts/build.sh",
83
103
  "Scripts/fetch-prebuilt-wda.js",
84
104
  "Scripts/build-webdriveragent.js",
85
- "Cartfile",
86
- "Cartfile.resolved",
87
105
  "Configurations",
88
106
  "PrivateHeaders",
89
107
  "WebDriverAgent.xcodeproj",