appium-xcode 4.0.3 → 4.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1 +1,8 @@
1
+ ## [4.0.4](https://github.com/appium/appium-xcode/compare/v4.0.3...v4.0.4) (2022-12-01)
2
+
3
+
4
+ ### Miscellaneous Chores
5
+
6
+ * update releaserc ([#74](https://github.com/appium/appium-xcode/issues/74)) ([ab7d721](https://github.com/appium/appium-xcode/commit/ab7d721c479e1fa70395159aadd969048e2fea47))
7
+
1
8
  ## [4.0.3](https://github.com/appium/appium-xcode/compare/v4.0.2...v4.0.3) (2022-11-06)
package/build/index.js CHANGED
@@ -8,7 +8,6 @@ require("source-map-support/register");
8
8
  var xcode = _interopRequireWildcard(require("./lib/xcode"));
9
9
  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); }
10
10
  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; }
11
-
12
11
  const {
13
12
  getPath,
14
13
  getVersion,
@@ -39,4 +38,4 @@ exports.getVersion = getVersion;
39
38
  exports.getPath = getPath;
40
39
  var _default = xcode;
41
40
  exports.default = _default;
42
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRQYXRoIiwiZ2V0VmVyc2lvbiIsImdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCIsImdldE1heElPU1NESyIsImdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aFdpdGhvdXRSZXRyeSIsImdldE1heElPU1NES1dpdGhvdXRSZXRyeSIsImdldENvbm5lY3RlZERldmljZXMiLCJjbGVhckludGVybmFsQ2FjaGUiLCJnZXRJbnN0cnVtZW50c1BhdGgiLCJnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiIsImdldE1heFRWT1NTREsiLCJnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5IiwiZ2V0Q2xhbmdWZXJzaW9uIiwieGNvZGUiXSwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgKiBhcyB4Y29kZSBmcm9tICcuL2xpYi94Y29kZSc7XG5cblxuY29uc3Qge1xuICBnZXRQYXRoLCBnZXRWZXJzaW9uLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5LCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksXG4gIGdldENvbm5lY3RlZERldmljZXMsIGNsZWFySW50ZXJuYWxDYWNoZSwgZ2V0SW5zdHJ1bWVudHNQYXRoLFxuICBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiwgZ2V0TWF4VFZPU1NESywgZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q2xhbmdWZXJzaW9uLFxufSA9IHhjb2RlO1xuXG5leHBvcnQge1xuICBnZXRQYXRoLCBnZXRWZXJzaW9uLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5LCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksXG4gIGdldENvbm5lY3RlZERldmljZXMsIGNsZWFySW50ZXJuYWxDYWNoZSwgZ2V0SW5zdHJ1bWVudHNQYXRoLFxuICBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiwgZ2V0TWF4VFZPU1NESywgZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q2xhbmdWZXJzaW9uLFxufTtcbmV4cG9ydCBkZWZhdWx0IHhjb2RlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUE7QUFBcUM7QUFBQTs7QUFHckMsTUFBTTtFQUNKQSxPQUFPO0VBQUVDLFVBQVU7RUFBRUMsOEJBQThCO0VBQUVDLFlBQVk7RUFDakVDLDBDQUEwQztFQUFFQyx3QkFBd0I7RUFDcEVDLG1CQUFtQjtFQUFFQyxrQkFBa0I7RUFBRUMsa0JBQWtCO0VBQzNEQywwQkFBMEI7RUFBRUMsYUFBYTtFQUFFQyx5QkFBeUI7RUFDcEVDO0FBQ0YsQ0FBQyxHQUFHQyxLQUFLO0FBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQVNLQSxLQUFLO0FBQUEifQ==
41
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRQYXRoIiwiZ2V0VmVyc2lvbiIsImdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCIsImdldE1heElPU1NESyIsImdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aFdpdGhvdXRSZXRyeSIsImdldE1heElPU1NES1dpdGhvdXRSZXRyeSIsImdldENvbm5lY3RlZERldmljZXMiLCJjbGVhckludGVybmFsQ2FjaGUiLCJnZXRJbnN0cnVtZW50c1BhdGgiLCJnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiIsImdldE1heFRWT1NTREsiLCJnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5IiwiZ2V0Q2xhbmdWZXJzaW9uIiwieGNvZGUiXSwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgKiBhcyB4Y29kZSBmcm9tICcuL2xpYi94Y29kZSc7XG5cblxuY29uc3Qge1xuICBnZXRQYXRoLCBnZXRWZXJzaW9uLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5LCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksXG4gIGdldENvbm5lY3RlZERldmljZXMsIGNsZWFySW50ZXJuYWxDYWNoZSwgZ2V0SW5zdHJ1bWVudHNQYXRoLFxuICBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiwgZ2V0TWF4VFZPU1NESywgZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q2xhbmdWZXJzaW9uLFxufSA9IHhjb2RlO1xuXG5leHBvcnQge1xuICBnZXRQYXRoLCBnZXRWZXJzaW9uLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5LCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksXG4gIGdldENvbm5lY3RlZERldmljZXMsIGNsZWFySW50ZXJuYWxDYWNoZSwgZ2V0SW5zdHJ1bWVudHNQYXRoLFxuICBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiwgZ2V0TWF4VFZPU1NESywgZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q2xhbmdWZXJzaW9uLFxufTtcbmV4cG9ydCBkZWZhdWx0IHhjb2RlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUE7QUFBcUM7QUFBQTtBQUdyQyxNQUFNO0VBQ0pBLE9BQU87RUFBRUMsVUFBVTtFQUFFQyw4QkFBOEI7RUFBRUMsWUFBWTtFQUNqRUMsMENBQTBDO0VBQUVDLHdCQUF3QjtFQUNwRUMsbUJBQW1CO0VBQUVDLGtCQUFrQjtFQUFFQyxrQkFBa0I7RUFDM0RDLDBCQUEwQjtFQUFFQyxhQUFhO0VBQUVDLHlCQUF5QjtFQUNwRUM7QUFDRixDQUFDLEdBQUdDLEtBQUs7QUFBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBU0tBLEtBQUs7QUFBQSJ9
@@ -53,7 +53,6 @@ async function getPathFromSymlink(failMessage) {
53
53
  const symlinkPath = '/var/db/xcode_select_link';
54
54
  const legacySymlinkPath = '/usr/share/xcode-select/xcode_dir_link';
55
55
  let xcodePath = null;
56
-
57
56
  if (_support.util.hasContent(env.DEVELOPER_DIR)) {
58
57
  const customPath = hasExpectedSubDir(env.DEVELOPER_DIR) ? env.DEVELOPER_DIR : env.DEVELOPER_DIR + XCODE_SUBDIR;
59
58
  if (await _support.fs.exists(customPath)) {
@@ -71,7 +70,6 @@ async function getPathFromSymlink(failMessage) {
71
70
  if (xcodePath) {
72
71
  return xcodePath.replace(new RegExp('/$'), '').trim();
73
72
  }
74
-
75
73
  let msg = `Could not find path to Xcode by symlinks located in ${symlinkPath}, or ${legacySymlinkPath}`;
76
74
  log.warn(msg);
77
75
  throw new Error(msg);
@@ -82,7 +80,6 @@ async function getPathFromXcodeSelect(timeout = XCRUN_TIMEOUT) {
82
80
  } = await (0, _teen_process.exec)('xcode-select', ['--print-path'], {
83
81
  timeout
84
82
  });
85
-
86
83
  const xcodeFolderPath = stdout.replace(/\/$/, '').trim();
87
84
  if (!_support.util.hasContent(xcodeFolderPath)) {
88
85
  log.errorAndThrow('xcode-select returned an empty string');
@@ -106,7 +103,6 @@ const getPath = _lodash.default.memoize(function getPath(timeout = XCRUN_TIMEOUT
106
103
  exports.getPath = getPath;
107
104
  async function getVersionWithoutRetry(timeout = XCRUN_TIMEOUT) {
108
105
  const xcodePath = await getPath(timeout);
109
-
110
106
  const plistPath = _path.default.resolve(xcodePath, '..', 'Info.plist');
111
107
  if (!(await _support.fs.exists(plistPath))) {
112
108
  throw new Error(`Could not get Xcode version. ${plistPath} does not exist on disk.`);
@@ -148,11 +144,9 @@ async function getCommandLineToolsVersion() {
148
144
  stdout = '';
149
145
  }
150
146
  }
151
-
152
147
  let match = /^version: (.+)$/m.exec(stdout);
153
148
  return match ? match[1] : undefined;
154
149
  }
155
-
156
150
  async function getClangVersion() {
157
151
  try {
158
152
  await _support.fs.which('clang');
@@ -172,7 +166,6 @@ async function getClangVersion() {
172
166
  }
173
167
  async function getAutomationTraceTemplatePathWithoutRetry(timeout = XCRUN_TIMEOUT) {
174
168
  const xcodePath = await getPath(timeout);
175
-
176
169
  const extensions = ['xrplugin', 'bundle'];
177
170
  const pathPrefix = _path.default.resolve(xcodePath, '../Applications/Instruments.app/Contents/PlugIns');
178
171
  const pathSuffix = 'Contents/Resources/Automation.tracetemplate';
@@ -291,4 +284,4 @@ function clearInternalCache() {
291
284
  }
292
285
  });
293
286
  }
294
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnYiLCJwcm9jZXNzIiwiWENSVU5fVElNRU9VVCIsIlhDT0RFX1NVQkRJUiIsIkRFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJoYXNFeHBlY3RlZFN1YkRpciIsInBhdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJydW5YY3J1bkNvbW1hbmQiLCJhcmdzIiwidGltZW91dCIsInJlcyIsImV4ZWMiLCJfIiwiaXNVbmRlZmluZWQiLCJFcnJvciIsImpvaW4iLCJlcnIiLCJzdGRlcnIiLCJtZXNzYWdlIiwiZ2V0UGF0aEZyb21TeW1saW5rIiwiZmFpbE1lc3NhZ2UiLCJ3YXJuIiwic3ltbGlua1BhdGgiLCJsZWdhY3lTeW1saW5rUGF0aCIsInhjb2RlUGF0aCIsInV0aWwiLCJoYXNDb250ZW50IiwiREVWRUxPUEVSX0RJUiIsImN1c3RvbVBhdGgiLCJmcyIsImV4aXN0cyIsIm1lc2ciLCJyZWFkbGluayIsInJlcGxhY2UiLCJSZWdFeHAiLCJ0cmltIiwibXNnIiwiZ2V0UGF0aEZyb21YY29kZVNlbGVjdCIsInN0ZG91dCIsInhjb2RlRm9sZGVyUGF0aCIsImVycm9yQW5kVGhyb3ciLCJnZXRQYXRoIiwibWVtb2l6ZSIsImUiLCJnZXRWZXJzaW9uV2l0aG91dFJldHJ5IiwicGxpc3RQYXRoIiwicmVzb2x2ZSIsInZlcnNpb24iLCJwbGlzdCIsInBhcnNlUGxpc3RGaWxlIiwic2VtdmVyIiwiY29lcmNlIiwiQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmciLCJnZXRWZXJzaW9uTWVtb2l6ZWQiLCJyZXRyaWVzIiwicmV0cnkiLCJnZXRWZXJzaW9uIiwicGFyc2UiLCJ2ZXJzaW9uU3RyaW5nIiwicGF0Y2giLCJtYWpvciIsIm1pbm9yIiwidmVyc2lvbkZsb2F0IiwicGFyc2VGbG9hdCIsInVuZGVmaW5lZCIsInRvU3RyaW5nIiwiZ2V0Q29tbWFuZExpbmVUb29sc1ZlcnNpb24iLCJnZXRWZXJzaW9uRnVuY3Rpb25zIiwicGtnIiwiaWduIiwibWF0Y2giLCJnZXRDbGFuZ1ZlcnNpb24iLCJ3aGljaCIsImluZm8iLCJnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnkiLCJleHRlbnNpb25zIiwicGF0aFByZWZpeCIsInBhdGhTdWZmaXgiLCJhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzIiwiZXJyb3IiLCJnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgiLCJnZXRNYXhJT1NTREtXaXRob3V0UmV0cnkiLCJzZGtWZXJzaW9uIiwiZ2V0TWF4SU9TU0RLRnJvbVhjb2RlVmVyc2lvbiIsImdldE1heElPU1NESyIsImdldE1heFRWT1NTREtXaXRob3V0UmV0cnkiLCJpc05hTiIsImdldE1heFRWT1NTREsiLCJnZXRDb25uZWN0ZWREZXZpY2VzIiwiY21kIiwicGxpc3RDb250ZW50IiwicGFyc2VQbGlzdERhdGEiLCJkZXZpY2VzRm91bmQiLCJlbnRyaWVzVG9TZWFyY2giLCJjdXJyZW50RW50cnkiLCJwb3AiLCJBcnJheSIsImNvbmNhdCIsIl9uYW1lIiwiaW5jbHVkZXMiLCJkZXZpY2VJbmZvIiwibmFtZSIsInVkaWQiLCJzZXJpYWxfbnVtIiwicHJvZHVjdElkIiwicHJvZHVjdF9pZCIsImRldmljZVZlcnNpb24iLCJiY2RfZGV2aWNlIiwicHVzaCIsIl9pdGVtcyIsImdldEluc3RydW1lbnRzUGF0aFdpdGhvdXRSZXRyeSIsImluc3RydW1lbnRzUGF0aCIsImdldEluc3RydW1lbnRzUGF0aCIsImNsZWFySW50ZXJuYWxDYWNoZSIsIm1lbW9pemVkIiwiZm9yRWFjaCIsImYiLCJjYWNoZSIsIkNhY2hlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3hjb2RlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHV0aWwsIGZzLCBwbGlzdCwgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmV0cnkgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcGFyc2UgYXMgcGFyc2VQbGlzdERhdGEgfSBmcm9tICdwbGlzdCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcblxuXG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxuY29uc3QgWENSVU5fVElNRU9VVCA9IDE1MDAwO1xuY29uc3QgWENPREVfU1VCRElSID0gJy9Db250ZW50cy9EZXZlbG9wZXInO1xuY29uc3QgREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUyA9IDM7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1hjb2RlJyk7XG5cblxuZnVuY3Rpb24gaGFzRXhwZWN0ZWRTdWJEaXIgKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKHBhdGgubGVuZ3RoIC0gWENPREVfU1VCRElSLmxlbmd0aCkgPT09IFhDT0RFX1NVQkRJUjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuWGNydW5Db21tYW5kIChhcmdzLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGV4ZWMoJ3hjcnVuJywgYXJncywge3RpbWVvdXR9KTtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChyZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdGhpbmcgcmV0dXJuZWQgZnJvbSB0cnlpbmcgdG8gcnVuICd4Y3J1biAke2FyZ3Muam9pbignICcpfSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gdGhlIHRydWUgZXJyb3IgY2FuIGJlIGhpZGRlbiB3aXRoaW4gdGhlIHN0ZGVyclxuICAgIGlmIChlcnIuc3RkZXJyKSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2Vyci5tZXNzYWdlfTogJHtlcnIuc3RkZXJyfWA7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBhdGhGcm9tU3ltbGluayAoZmFpbE1lc3NhZ2UpIHtcbiAgLy8gTm9kZSdzIGludm9jYXRpb24gb2YgeGNvZGUtc2VsZWN0IHNvbWV0aW1lcyBmbGFrZXMgYW5kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICAvLyBOb3QgY2xlYXIgd2h5LiBBcyBhIHdvcmthcm91bmQsIEFwcGl1bSBjYW4gcmVsaWFibHkgZGVkdWNlIHRoZSB2ZXJzaW9uIGluIHVzZSBieSBjaGVja2luZ1xuICAvLyB0aGUgbG9jYXRpb25zIHhjb2RlLXNlbGVjdCB1c2VzIHRvIHN0b3JlIHRoZSBzZWxlY3RlZCB2ZXJzaW9uJ3MgcGF0aC4gVGhpcyBzaG91bGQgYmUgMTAwJVxuICAvLyByZWxpYWJsZSBzbyBsb25nIGFzIHRoZSBsaW5rIGxvY2F0aW9ucyByZW1haW4gdGhlIHNhbWUuIEhvd2V2ZXIsIHNpbmNlIHdlJ3JlIHJlbHlpbmcgb25cbiAgLy8gaGFyZGNvZGVkIHBhdGhzLCB0aGlzIGFwcHJvYWNoIHdpbGwgYnJlYWsgdGhlIG5leHQgdGltZSBBcHBsZSBjaGFuZ2VzIHRoZSBzeW1saW5rIGxvY2F0aW9uLlxuICBsb2cud2FybihgRmluZGluZyBYY29kZVBhdGggYnkgc3ltbGluayBiZWNhdXNlICR7ZmFpbE1lc3NhZ2V9YCk7XG5cbiAgY29uc3Qgc3ltbGlua1BhdGggPSAnL3Zhci9kYi94Y29kZV9zZWxlY3RfbGluayc7XG4gIGNvbnN0IGxlZ2FjeVN5bWxpbmtQYXRoID0gJy91c3Ivc2hhcmUveGNvZGUtc2VsZWN0L3hjb2RlX2Rpcl9saW5rJzsgLy8gIFhjb2RlIDwgNS54XG4gIGxldCB4Y29kZVBhdGggPSBudWxsO1xuXG4gIC8vIHhjb2RlLXNlbGVjdCBhbGxvd3MgdXNlcnMgdG8gb3ZlcnJpZGUgaXRzIHNldHRpbmdzIHdpdGggdGhlIERFVkVMT1BFUl9ESVIgZW52IHZhcixcbiAgLy8gc28gY2hlY2sgdGhhdCBmaXJzdFxuICBpZiAodXRpbC5oYXNDb250ZW50KGVudi5ERVZFTE9QRVJfRElSKSkge1xuICAgIGNvbnN0IGN1c3RvbVBhdGggPSBoYXNFeHBlY3RlZFN1YkRpcihlbnYuREVWRUxPUEVSX0RJUilcbiAgICAgID8gZW52LkRFVkVMT1BFUl9ESVJcbiAgICAgIDogZW52LkRFVkVMT1BFUl9ESVIgKyBYQ09ERV9TVUJESVI7XG5cbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGN1c3RvbVBhdGgpKSB7XG4gICAgICB4Y29kZVBhdGggPSBjdXN0b21QYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbWVzZyA9IGBDb3VsZCBub3QgZmluZCBwYXRoIHRvIFhjb2RlLCBlbnZpcm9ubWVudCB2YXJpYWJsZSBgICtcbiAgICAgICAgICAgICAgICAgYERFVkVMT1BFUl9ESVIgc2V0IHRvOiAke2Vudi5ERVZFTE9QRVJfRElSfSBgICtcbiAgICAgICAgICAgICAgICAgYGJ1dCBubyBYY29kZSBmb3VuZGA7XG4gICAgICBsb2cud2FybihtZXNnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXdhaXQgZnMuZXhpc3RzKHN5bWxpbmtQYXRoKSkge1xuICAgIHhjb2RlUGF0aCA9IGF3YWl0IGZzLnJlYWRsaW5rKHN5bWxpbmtQYXRoKTtcbiAgfSBlbHNlIGlmIChhd2FpdCBmcy5leGlzdHMobGVnYWN5U3ltbGlua1BhdGgpKSB7XG4gICAgeGNvZGVQYXRoID0gYXdhaXQgZnMucmVhZGxpbmsobGVnYWN5U3ltbGlua1BhdGgpO1xuICB9XG5cbiAgaWYgKHhjb2RlUGF0aCkge1xuICAgIHJldHVybiB4Y29kZVBhdGgucmVwbGFjZShuZXcgUmVnRXhwKCcvJCcpLCAnJykudHJpbSgpO1xuICB9XG5cbiAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaXMgd2UgZmFpbGVkIHRvIGNhcHR1cmUgeGNvZGUtc2VsZWN0J3Mgc3Rkb3V0IGFuZCBvdXJcbiAgLy8gb3RoZXIgY2hlY2tzIGZhaWxlZC4gRWl0aGVyIEFwcGxlIGhhcyBtb3ZlZCB0aGUgc3ltbGluayB0byBhIG5ldyBsb2NhdGlvbiBvciB0aGUgdXNlclxuICAvLyBpcyBub3QgdXNpbmcgdGhlIGRlZmF1bHQgaW5zdGFsbC4gOTkuOTk5JSBjaGFuY2UgaXQncyB0aGUgbGF0dGVyLCBzbyBpc3N1ZSBhIHdhcm5pbmdcbiAgLy8gc2hvdWxkIHdlIGV2ZXIgaGl0IHRoZSBlZGdlIGNhc2UuXG4gIGxldCBtc2cgPSBgQ291bGQgbm90IGZpbmQgcGF0aCB0byBYY29kZSBieSBzeW1saW5rcyBsb2NhdGVkIGluICR7c3ltbGlua1BhdGh9LCBvciAke2xlZ2FjeVN5bWxpbmtQYXRofWA7XG4gIGxvZy53YXJuKG1zZyk7XG4gIHRocm93IG5ldyBFcnJvcihtc2cpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQYXRoRnJvbVhjb2RlU2VsZWN0ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBsZXQge3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZS1zZWxlY3QnLCBbJy0tcHJpbnQtcGF0aCddLCB7dGltZW91dH0pO1xuXG4gIC8vIHRyaW0gYW5kIHJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICBjb25zdCB4Y29kZUZvbGRlclBhdGggPSBzdGRvdXQucmVwbGFjZSgvXFwvJC8sICcnKS50cmltKCk7XG5cbiAgaWYgKCF1dGlsLmhhc0NvbnRlbnQoeGNvZGVGb2xkZXJQYXRoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KCd4Y29kZS1zZWxlY3QgcmV0dXJuZWQgYW4gZW1wdHkgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAoYXdhaXQgZnMuZXhpc3RzKHhjb2RlRm9sZGVyUGF0aCkpIHtcbiAgICByZXR1cm4geGNvZGVGb2xkZXJQYXRoO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG1zZyA9IGB4Y29kZS1zZWxlY3QgY291bGQgbm90IGZpbmQgeGNvZGUuIFBhdGggJyR7eGNvZGVGb2xkZXJQYXRofScgZG9lcyBub3QgZXhpc3QuYDtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhtc2cpO1xuICB9XG59XG5cbmNvbnN0IGdldFBhdGggPSBfLm1lbW9pemUoZnVuY3Rpb24gZ2V0UGF0aCAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgLy8gZmlyc3Qgd2UgdHJ5IHVzaW5nIHhjb2RlLXNlbGVjdCB0byBmaW5kIHRoZSBwYXRoXG4gIC8vIHRoZW4gd2UgdHJ5IHVzaW5nIHRoZSBzeW1saW5rcyB0aGF0IEFwcGxlIGhhcyBieSBkZWZhdWx0XG4gIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0UGF0aEZyb21YY29kZVNlbGVjdCh0aW1lb3V0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0UGF0aEZyb21TeW1saW5rKGUubWVzc2FnZSk7XG4gICAgfVxuICB9KSgpO1xufSk7XG5cblxuYXN5bmMgZnVuY3Rpb24gZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgeGNvZGVQYXRoID0gYXdhaXQgZ2V0UGF0aCh0aW1lb3V0KTtcblxuICAvLyB3ZSB3YW50IHRvIHJlYWQgdGhlIENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nIGZyb20gWGNvZGUncyBwbGlzdC5cbiAgLy8gSXQgc2hvdWxkIGJlIGluIC9bcm9vdF0vWENvZGUuYXBwL0NvbnRlbnRzL1xuICBjb25zdCBwbGlzdFBhdGggPSBwYXRoLnJlc29sdmUoeGNvZGVQYXRoLCAnLi4nLCAnSW5mby5wbGlzdCcpO1xuXG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHBsaXN0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBnZXQgWGNvZGUgdmVyc2lvbi4gJHtwbGlzdFBhdGh9IGRvZXMgbm90IGV4aXN0IG9uIGRpc2suYCk7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocGxpc3RQYXRoKTtcbiAgcmV0dXJuIHNlbXZlci5jb2VyY2UodmVyc2lvbi5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyk7XG59XG5cbmNvbnN0IGdldFZlcnNpb25NZW1vaXplZCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0VmVyc2lvbk1lbW9pemVkIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFZlcnNpb24gKHBhcnNlID0gZmFsc2UsIHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0VmVyc2lvbk1lbW9pemVkKHJldHJpZXMsIHRpbWVvdXQpO1xuICAvLyB4Y29kZSB2ZXJzaW9uIHN0cmluZ3MgYXJlIG5vdCBleGFjdGx5IHNlbXZlciBzdHJpbmc6IHBhdGNoIHZlcnNpb25zIG9mIDBcbiAgLy8gYXJlIHJlbW92ZWQgKGUuZy4sICcxMC4wLjAnID0+ICcxMC4wJylcbiAgY29uc3QgdmVyc2lvblN0cmluZyA9IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi52ZXJzaW9uIDogYCR7dmVyc2lvbi5tYWpvcn0uJHt2ZXJzaW9uLm1pbm9yfWA7XG4gIGlmICghcGFyc2UpIHtcbiAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvblN0cmluZyxcbiAgICB2ZXJzaW9uRmxvYXQ6IHBhcnNlRmxvYXQodmVyc2lvblN0cmluZyksXG4gICAgbWFqb3I6IHZlcnNpb24ubWFqb3IsXG4gICAgbWlub3I6IHZlcnNpb24ubWlub3IsXG4gICAgcGF0Y2g6IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi5wYXRjaCA6IHVuZGVmaW5lZCxcbiAgICB0b1N0cmluZyAoKSB7XG4gICAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiAoKSB7XG4gIC8vIHRoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgd2F5cyB0aGF0IHRoZSBDTEkgdG9vbHMgdmVyc2lvbiBoYXMgYmVlblxuICAvLyByZXByZXNlbnRlZC4gVHJ5IHRoZW0gZnJvbSBtb3N0IHJlbGlhYmxlIHRvIGxlYXN0LCBmYWxsaW5nIGRvd24gdGhlIGNoYWluXG4gIGNvbnN0IGdldFZlcnNpb25GdW5jdGlvbnMgPSBbXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHBrZyA9IChhd2FpdCBleGVjKCdwa2d1dGlsJywgWyctLXBrZ3M9Y29tLmFwcGxlLnBrZy5EZXZTREtfLionXSkpLnN0ZG91dDtcbiAgICAgIHJldHVybiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz0ke3BrZy50cmltKCl9YF0pKS5zdGRvdXQ7XG4gICAgfSxcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz1jb20uYXBwbGUucGtnLkNMVG9vbHNfRXhlY3V0YWJsZXNgXSkpLnN0ZG91dCxcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz1jb20uYXBwbGUucGtnLkRldmVsb3BlclRvb2xzQ0xJYF0pKS5zdGRvdXQsXG4gIF07XG4gIGxldCBzdGRvdXQ7XG4gIGZvciAobGV0IGdldFZlcnNpb24gb2YgZ2V0VmVyc2lvbkZ1bmN0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICBzdGRvdXQgPSBhd2FpdCBnZXRWZXJzaW9uKCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIHN0ZG91dCA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8vIHN0ZG91dCBzaG91bGQgaGF2ZSBhIGxpbmUgbGlrZSBgdmVyc2lvbjogOC4wLjAuMC4xLjE0NzI0MzU4ODFgXG4gIGxldCBtYXRjaCA9IC9edmVyc2lvbjogKC4rKSQvbS5leGVjKHN0ZG91dCk7IC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvSFYzeDRkLzFcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaHR0cHM6Ly90cmFjLm1hY3BvcnRzLm9yZy93aWtpL1hjb2RlVmVyc2lvbkluZm9cbiAqIHRvIHNlZSB0aGUgYWN0dWFsIG1hcHBpbmcgYmV0d2VlbiBjbGFuZyBhbmQgb3RoZXIgY29tcG9uZW50cy5cbiAqXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGFjdHVhbCBDbGFuZyB2ZXJzaW9uIGluIHgueC54Lnggb3IgeC54LnggZm9ybWF0LFxuICogd2hpY2ggaXMgc3VwcGxpZWQgd2l0aCBDb21tYW5kIExpbmUgVG9vbHMuIGBudWxsYCBpcyByZXR1cm5lZFxuICogaWYgQ0xUIGFyZSBub3QgaW5zdGFsbGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDbGFuZ1ZlcnNpb24gKCkge1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndoaWNoKCdjbGFuZycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmluZm8oJ0Nhbm5vdCBmaW5kIGNsYW5nIGV4ZWN1dGFibGUgb24gdGhlIGxvY2FsIHN5c3RlbS4gJyArXG4gICAgICAnQXJlIFhjb2RlIENvbW1hbmQgTGluZSBUb29scyBpbnN0YWxsZWQ/Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdjbGFuZycsIFsnLS12ZXJzaW9uJ10pO1xuICBjb25zdCBtYXRjaCA9IC9jbGFuZy0oWzAtOS5dKykvLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIGxvZy5pbmZvKGBDYW5ub3QgcGFyc2UgY2xhbmcgdmVyc2lvbiBmcm9tICR7c3Rkb3V0fWApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBtYXRjaFsxXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB4Y29kZVBhdGggPSBhd2FpdCBnZXRQYXRoKHRpbWVvdXQpO1xuXG4gIC8vIGZvciBpb3MgOCBhbmQgdXAsIHRoZSBmaWxlIGV4dGVuc2lvbiBmb3IgQXV0aW9tYXRpb25JbnN0cnVtZW50IGNoYW5nZWQuXG4gIC8vIHJhdGhlciB0aGFuIHdhc3RlIHRpbWUgZ2V0dGluZyB0aGUgaU9TU0RLVmVyc2lvbiwganVzdCBnZXQgYm90aCBwYXRocyBhbmQgc2VlIHdoaWNoIG9uZSBleGlzdHNcbiAgY29uc3QgZXh0ZW5zaW9ucyA9IFsneHJwbHVnaW4nLCAnYnVuZGxlJ107XG4gIGNvbnN0IHBhdGhQcmVmaXggPSBwYXRoLnJlc29sdmUoeGNvZGVQYXRoLCAnLi4vQXBwbGljYXRpb25zL0luc3RydW1lbnRzLmFwcC9Db250ZW50cy9QbHVnSW5zJyk7XG4gIGNvbnN0IHBhdGhTdWZmaXggPSAnQ29udGVudHMvUmVzb3VyY2VzL0F1dG9tYXRpb24udHJhY2V0ZW1wbGF0ZSc7XG4gIGxldCBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzID0gW1xuICAgIHBhdGgucmVzb2x2ZShwYXRoUHJlZml4LCBgQXV0b21hdGlvbkluc3RydW1lbnQuJHtleHRlbnNpb25zWzBdfWAsIHBhdGhTdWZmaXgpLFxuICAgIHBhdGgucmVzb2x2ZShwYXRoUHJlZml4LCBgQXV0b21hdGlvbkluc3RydW1lbnQuJHtleHRlbnNpb25zWzFdfWAsIHBhdGhTdWZmaXgpXG4gIF07XG5cbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzBdKSkge1xuICAgIHJldHVybiBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzBdO1xuICB9XG5cbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzFdKSkge1xuICAgIHJldHVybiBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzFdO1xuICB9XG5cbiAgY29uc3QgbXNnID0gJ0NvdWxkIG5vdCBmaW5kIEF1dG9tYXRpb24udHJhY2V0ZW1wbGF0ZSBpbiBhbnkgb2YgdGhlIGZvbGxvd2luZycgK1xuICAgICAgICAgICAgICBgbG9jYXRpb25zICR7YXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRocy50b1N0cmluZygpfWA7XG4gIGxvZy5lcnJvcihtc2cpO1xuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcblxufVxuXG5jb25zdCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGggPSBfLm1lbW9pemUoXG4gIGZ1bmN0aW9uIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCAocmV0cmllcyA9IERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMsIHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gICAgcmV0dXJuIHJldHJ5KHJldHJpZXMsIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aFdpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldFZlcnNpb24oZmFsc2UsIERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMsIHRpbWVvdXQpO1xuICBpZiAodmVyc2lvblswXSA9PT0gJzQnKSB7XG4gICAgcmV0dXJuICc2LjEnO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJywgJy0tc2hvdy1zZGstdmVyc2lvbiddO1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcblxuICBjb25zdCBzZGtWZXJzaW9uID0gc3Rkb3V0LnRyaW0oKTtcbiAgY29uc3QgbWF0Y2ggPSAvXFxkLlxcZC8uZXhlYyhzdGRvdXQpO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHhjcnVuIHJldHVybmVkIGEgbm9uLW51bWVyaWMgaU9TIFNESyB2ZXJzaW9uOiAnJHtzZGtWZXJzaW9ufSdgKTtcbiAgfVxuXG4gIHJldHVybiBzZGtWZXJzaW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNYXhJT1NTREtGcm9tWGNvZGVWZXJzaW9uICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0VmVyc2lvbih0cnVlLCBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0KTtcbiAgLy8gYXMgb2Ygbm93LCB0aGUgaU9TIHZlcnNpb24gYXNzb2NpYXRlZCB3aXRoIGFuIFhjb2RlIHZlcnNpb24gaXNcbiAgLy8ganVzdCB0aGUgWGNvZGUgdmVyc2lvbiArIDJcbiAgcmV0dXJuIGAke3ZlcnNpb24ubWFqb3IgKyAyfS4ke3ZlcnNpb24ubWlub3J9YDtcbn1cblxuY29uc3QgZ2V0TWF4SU9TU0RLID0gXy5tZW1vaXplKFxuICBmdW5jdGlvbiBnZXRNYXhJT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gcmV0cmlldmUgbWF4aW11bSBpT1MgdmVyc2lvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIGxvZy53YXJuKCdHdWVzc2luZyBmcm9tIFhjb2RlIHZlcnNpb24nKTtcbiAgICAgIHJldHVybiBnZXRNYXhJT1NTREtGcm9tWGNvZGVWZXJzaW9uKHRpbWVvdXQpO1xuICAgIH1cbiAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnYXBwbGV0dnNpbXVsYXRvcicsICctLXNob3ctc2RrLXZlcnNpb24nXTtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBydW5YY3J1bkNvbW1hbmQoYXJncywgdGltZW91dCk7XG5cbiAgY29uc3Qgc2RrVmVyc2lvbiA9IHN0ZG91dC50cmltKCk7XG5cbiAgaWYgKGlzTmFOKHBhcnNlRmxvYXQoc2RrVmVyc2lvbikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB4Y3J1biByZXR1cm5lZCBhIG5vbi1udW1lcmljIHR2T1MgU0RLIHZlcnNpb246ICcke3Nka1ZlcnNpb259J2ApO1xuICB9XG5cbiAgcmV0dXJuIHNka1ZlcnNpb247XG59XG5cbmNvbnN0IGdldE1heFRWT1NTREsgPSBfLm1lbW9pemUoXG4gIGZ1bmN0aW9uIGdldE1heFRWT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHJldHVybiByZXRyeShyZXRyaWVzLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29ubmVjdGVkRGV2aWNlcyAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgY21kID0gJy91c3Ivc2Jpbi9zeXN0ZW1fcHJvZmlsZXInO1xuICBjb25zdCBhcmdzID0gWycteG1sJywgJ1NQVVNCRGF0YVR5cGUnXTtcbiAgbGV0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhjbWQsIGFyZ3MsIHt0aW1lb3V0fSk7XG4gIGxldCBwbGlzdENvbnRlbnQgPSBwYXJzZVBsaXN0RGF0YShzdGRvdXQpO1xuXG4gIGxldCBkZXZpY2VzRm91bmQgPSBbXTtcbiAgbGV0IGVudHJpZXNUb1NlYXJjaCA9IFtwbGlzdENvbnRlbnRbMF1dO1xuICB3aGlsZSAoZW50cmllc1RvU2VhcmNoLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgY3VycmVudEVudHJ5ID0gZW50cmllc1RvU2VhcmNoLnBvcCgpO1xuICAgIGlmIChjdXJyZW50RW50cnkgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgZW50cmllc1RvU2VhcmNoID0gZW50cmllc1RvU2VhcmNoLmNvbmNhdChjdXJyZW50RW50cnkpO1xuICAgIH0gZWxzZSBpZiAoKGN1cnJlbnRFbnRyeS5fbmFtZSAmJlxuICAgICAgICAgICAgICAgIGN1cnJlbnRFbnRyeS5fbmFtZS5zdWJzdHJpbmcoMCwgNCkgPT09ICdpUGFkJykgfHxcbiAgICAgICAgICAgICAgIChjdXJyZW50RW50cnkuX25hbWUgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50RW50cnkuX25hbWUuc3Vic3RyaW5nKDAsIDYpID09PSAnaVBob25lJykgfHxcbiAgICAgICAgICAgICAgIChjdXJyZW50RW50cnkuX25hbWUgJiYgXy5pbmNsdWRlcyhjdXJyZW50RW50cnkuX25hbWUsICdBcHBsZSBUVicpKSkge1xuICAgICAgbGV0IGRldmljZUluZm8gPSB7XG4gICAgICAgIG5hbWU6IGN1cnJlbnRFbnRyeS5fbmFtZSxcbiAgICAgICAgdWRpZDogY3VycmVudEVudHJ5LnNlcmlhbF9udW0sXG4gICAgICAgIHByb2R1Y3RJZDogY3VycmVudEVudHJ5LnByb2R1Y3RfaWQsXG4gICAgICAgIGRldmljZVZlcnNpb246IGN1cnJlbnRFbnRyeS5iY2RfZGV2aWNlXG4gICAgICB9O1xuICAgICAgZGV2aWNlc0ZvdW5kLnB1c2goZGV2aWNlSW5mbyk7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50RW50cnkuX2l0ZW1zKSB7XG4gICAgICBlbnRyaWVzVG9TZWFyY2ggPSBlbnRyaWVzVG9TZWFyY2guY29uY2F0KGN1cnJlbnRFbnRyeS5faXRlbXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGV2aWNlc0ZvdW5kO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRJbnN0cnVtZW50c1BhdGhXaXRob3V0UmV0cnkgKHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIGNvbnN0IGFyZ3MgPSBbJy1maW5kJywgJ2luc3RydW1lbnRzJ107XG4gIGxldCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcblxuICBpZiAoIXN0ZG91dCkge1xuICAgIHN0ZG91dCA9ICcnO1xuICB9XG5cbiAgbGV0IGluc3RydW1lbnRzUGF0aCA9IHN0ZG91dC50cmltKCk7XG5cbiAgaWYgKCFpbnN0cnVtZW50c1BhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHBhdGggdG8gaW5zdHJ1bWVudHMgYmluYXJ5IHVzaW5nICd4Y3J1biAke2FyZ3Muam9pbignICcpfSdgKTtcbiAgfVxuXG4gIHJldHVybiBpbnN0cnVtZW50c1BhdGg7XG59XG5cbmNvbnN0IGdldEluc3RydW1lbnRzUGF0aCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0SW5zdHJ1bWVudHNQYXRoIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0SW5zdHJ1bWVudHNQYXRoV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgfVxuKTtcblxuZnVuY3Rpb24gY2xlYXJJbnRlcm5hbENhY2hlICgpIHtcblxuICAvLyBtZW1vaXplZCBmdW5jdGlvbnNcbiAgY29uc3QgbWVtb2l6ZWQgPSBbXG4gICAgZ2V0UGF0aCwgZ2V0VmVyc2lvbk1lbW9pemVkLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgICBnZXRNYXhUVk9TU0RLLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIF07XG5cbiAgbWVtb2l6ZWQuZm9yRWFjaCgoZikgPT4ge1xuICAgIGlmIChmLmNhY2hlKSB7XG4gICAgICBmLmNhY2hlID0gbmV3IF8ubWVtb2l6ZS5DYWNoZSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCB7XG4gIGdldFBhdGgsIGdldFZlcnNpb24sIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCwgZ2V0TWF4SU9TU0RLLFxuICBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnksIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgY2xlYXJJbnRlcm5hbENhY2hlLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIGdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uLCBnZXRNYXhUVk9TU0RLLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LFxuICBnZXRDbGFuZ1ZlcnNpb24sXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQSxNQUFNQSxHQUFHLEdBQUdDLE9BQU8sQ0FBQ0QsR0FBRztBQUV2QixNQUFNRSxhQUFhLEdBQUcsS0FBSztBQUMzQixNQUFNQyxZQUFZLEdBQUcscUJBQXFCO0FBQzFDLE1BQU1DLHlCQUF5QixHQUFHLENBQUM7QUFFbkMsTUFBTUMsR0FBRyxHQUFHQyxlQUFNLENBQUNDLFNBQVMsQ0FBQyxPQUFPLENBQUM7QUFHckMsU0FBU0MsaUJBQWlCLENBQUVDLElBQUksRUFBRTtFQUNoQyxPQUFPQSxJQUFJLENBQUNDLFNBQVMsQ0FBQ0QsSUFBSSxDQUFDRSxNQUFNLEdBQUdSLFlBQVksQ0FBQ1EsTUFBTSxDQUFDLEtBQUtSLFlBQVk7QUFDM0U7QUFFQSxlQUFlUyxlQUFlLENBQUVDLElBQUksRUFBRUMsT0FBTyxHQUFHWixhQUFhLEVBQUU7RUFDN0QsSUFBSTtJQUNGLE1BQU1hLEdBQUcsR0FBRyxNQUFNLElBQUFDLGtCQUFJLEVBQUMsT0FBTyxFQUFFSCxJQUFJLEVBQUU7TUFBQ0M7SUFBTyxDQUFDLENBQUM7SUFDaEQsSUFBSUcsZUFBQyxDQUFDQyxXQUFXLENBQUNILEdBQUcsQ0FBQyxFQUFFO01BQ3RCLE1BQU0sSUFBSUksS0FBSyxDQUFFLDhDQUE2Q04sSUFBSSxDQUFDTyxJQUFJLENBQUMsR0FBRyxDQUFFLEdBQUUsQ0FBQztJQUNsRjtJQUNBLE9BQU9MLEdBQUc7RUFDWixDQUFDLENBQUMsT0FBT00sR0FBRyxFQUFFO0lBRVosSUFBSUEsR0FBRyxDQUFDQyxNQUFNLEVBQUU7TUFDZEQsR0FBRyxDQUFDRSxPQUFPLEdBQUksR0FBRUYsR0FBRyxDQUFDRSxPQUFRLEtBQUlGLEdBQUcsQ0FBQ0MsTUFBTyxFQUFDO0lBQy9DO0lBRUEsTUFBTUQsR0FBRztFQUNYO0FBQ0Y7QUFFQSxlQUFlRyxrQkFBa0IsQ0FBRUMsV0FBVyxFQUFFO0VBTTlDcEIsR0FBRyxDQUFDcUIsSUFBSSxDQUFFLHdDQUF1Q0QsV0FBWSxFQUFDLENBQUM7RUFFL0QsTUFBTUUsV0FBVyxHQUFHLDJCQUEyQjtFQUMvQyxNQUFNQyxpQkFBaUIsR0FBRyx3Q0FBd0M7RUFDbEUsSUFBSUMsU0FBUyxHQUFHLElBQUk7O0VBSXBCLElBQUlDLGFBQUksQ0FBQ0MsVUFBVSxDQUFDL0IsR0FBRyxDQUFDZ0MsYUFBYSxDQUFDLEVBQUU7SUFDdEMsTUFBTUMsVUFBVSxHQUFHekIsaUJBQWlCLENBQUNSLEdBQUcsQ0FBQ2dDLGFBQWEsQ0FBQyxHQUNuRGhDLEdBQUcsQ0FBQ2dDLGFBQWEsR0FDakJoQyxHQUFHLENBQUNnQyxhQUFhLEdBQUc3QixZQUFZO0lBRXBDLElBQUksTUFBTStCLFdBQUUsQ0FBQ0MsTUFBTSxDQUFDRixVQUFVLENBQUMsRUFBRTtNQUMvQkosU0FBUyxHQUFHSSxVQUFVO0lBQ3hCLENBQUMsTUFBTTtNQUNMLElBQUlHLElBQUksR0FBSSxxREFBb0QsR0FDcEQseUJBQXdCcEMsR0FBRyxDQUFDZ0MsYUFBYyxHQUFFLEdBQzVDLG9CQUFtQjtNQUMvQjNCLEdBQUcsQ0FBQ3FCLElBQUksQ0FBQ1UsSUFBSSxDQUFDO01BQ2QsTUFBTSxJQUFJakIsS0FBSyxDQUFDaUIsSUFBSSxDQUFDO0lBQ3ZCO0VBQ0YsQ0FBQyxNQUFNLElBQUksTUFBTUYsV0FBRSxDQUFDQyxNQUFNLENBQUNSLFdBQVcsQ0FBQyxFQUFFO0lBQ3ZDRSxTQUFTLEdBQUcsTUFBTUssV0FBRSxDQUFDRyxRQUFRLENBQUNWLFdBQVcsQ0FBQztFQUM1QyxDQUFDLE1BQU0sSUFBSSxNQUFNTyxXQUFFLENBQUNDLE1BQU0sQ0FBQ1AsaUJBQWlCLENBQUMsRUFBRTtJQUM3Q0MsU0FBUyxHQUFHLE1BQU1LLFdBQUUsQ0FBQ0csUUFBUSxDQUFDVCxpQkFBaUIsQ0FBQztFQUNsRDtFQUVBLElBQUlDLFNBQVMsRUFBRTtJQUNiLE9BQU9BLFNBQVMsQ0FBQ1MsT0FBTyxDQUFDLElBQUlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQ0MsSUFBSSxFQUFFO0VBQ3ZEOztFQU1BLElBQUlDLEdBQUcsR0FBSSx1REFBc0RkLFdBQVksUUFBT0MsaUJBQWtCLEVBQUM7RUFDdkd2QixHQUFHLENBQUNxQixJQUFJLENBQUNlLEdBQUcsQ0FBQztFQUNiLE1BQU0sSUFBSXRCLEtBQUssQ0FBQ3NCLEdBQUcsQ0FBQztBQUN0QjtBQUVBLGVBQWVDLHNCQUFzQixDQUFFNUIsT0FBTyxHQUFHWixhQUFhLEVBQUU7RUFDOUQsSUFBSTtJQUFDeUM7RUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFBM0Isa0JBQUksRUFBQyxjQUFjLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRTtJQUFDRjtFQUFPLENBQUMsQ0FBQzs7RUFHdEUsTUFBTThCLGVBQWUsR0FBR0QsTUFBTSxDQUFDTCxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDRSxJQUFJLEVBQUU7RUFFeEQsSUFBSSxDQUFDVixhQUFJLENBQUNDLFVBQVUsQ0FBQ2EsZUFBZSxDQUFDLEVBQUU7SUFDckN2QyxHQUFHLENBQUN3QyxhQUFhLENBQUMsdUNBQXVDLENBQUM7RUFDNUQ7RUFFQSxJQUFJLE1BQU1YLFdBQUUsQ0FBQ0MsTUFBTSxDQUFDUyxlQUFlLENBQUMsRUFBRTtJQUNwQyxPQUFPQSxlQUFlO0VBQ3hCLENBQUMsTUFBTTtJQUNMLE1BQU1ILEdBQUcsR0FBSSw0Q0FBMkNHLGVBQWdCLG1CQUFrQjtJQUMxRnZDLEdBQUcsQ0FBQ3dDLGFBQWEsQ0FBQ0osR0FBRyxDQUFDO0VBQ3hCO0FBQ0Y7QUFFQSxNQUFNSyxPQUFPLEdBQUc3QixlQUFDLENBQUM4QixPQUFPLENBQUMsU0FBU0QsT0FBTyxDQUFFaEMsT0FBTyxHQUFHWixhQUFhLEVBQUU7RUFHbkUsT0FBTyxDQUFDLFlBQVk7SUFDbEIsSUFBSTtNQUNGLE9BQU8sTUFBTXdDLHNCQUFzQixDQUFDNUIsT0FBTyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxPQUFPa0MsQ0FBQyxFQUFFO01BQ1YsT0FBTyxNQUFNeEIsa0JBQWtCLENBQUN3QixDQUFDLENBQUN6QixPQUFPLENBQUM7SUFDNUM7RUFDRixDQUFDLEdBQUc7QUFDTixDQUFDLENBQUM7QUFBQztBQUdILGVBQWUwQixzQkFBc0IsQ0FBRW5DLE9BQU8sR0FBR1osYUFBYSxFQUFFO0VBQzlELE1BQU0yQixTQUFTLEdBQUcsTUFBTWlCLE9BQU8sQ0FBQ2hDLE9BQU8sQ0FBQzs7RUFJeEMsTUFBTW9DLFNBQVMsR0FBR3pDLGFBQUksQ0FBQzBDLE9BQU8sQ0FBQ3RCLFNBQVMsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDO0VBRTdELElBQUksRUFBQyxNQUFNSyxXQUFFLENBQUNDLE1BQU0sQ0FBQ2UsU0FBUyxDQUFDLEdBQUU7SUFDL0IsTUFBTSxJQUFJL0IsS0FBSyxDQUFFLGdDQUErQitCLFNBQVUsMEJBQXlCLENBQUM7RUFDdEY7RUFFQSxNQUFNRSxPQUFPLEdBQUcsTUFBTUMsY0FBSyxDQUFDQyxjQUFjLENBQUNKLFNBQVMsQ0FBQztFQUNyRCxPQUFPSyxlQUFNLENBQUNDLE1BQU0sQ0FBQ0osT0FBTyxDQUFDSywwQkFBMEIsQ0FBQztBQUMxRDtBQUVBLE1BQU1DLGtCQUFrQixHQUFHekMsZUFBQyxDQUFDOEIsT0FBTyxDQUNsQyxTQUFTVyxrQkFBa0IsQ0FBRUMsT0FBTyxHQUFHdkQseUJBQXlCLEVBQUVVLE9BQU8sR0FBR1osYUFBYSxFQUFFO0VBQ3pGLE9BQU8sSUFBQTBELGVBQUssRUFBQ0QsT0FBTyxFQUFFVixzQkFBc0IsRUFBRW5DLE9BQU8sQ0FBQztBQUN4RCxDQUFDLENBQ0Y7QUFFRCxlQUFlK0MsVUFBVSxDQUFFQyxLQUFLLEdBQUcsS0FBSyxFQUFFSCxPQUFPLEdBQUd2RCx5QkFBeUIsRUFBRVUsT0FBTyxHQUFHWixhQUFhLEVBQUU7RUFDdEcsTUFBTWtELE9BQU8sR0FBRyxNQUFNTSxrQkFBa0IsQ0FBQ0MsT0FBTyxFQUFFN0MsT0FBTyxDQUFDO0VBRzFELE1BQU1pRCxhQUFhLEdBQUdYLE9BQU8sQ0FBQ1ksS0FBSyxHQUFHLENBQUMsR0FBR1osT0FBTyxDQUFDQSxPQUFPLEdBQUksR0FBRUEsT0FBTyxDQUFDYSxLQUFNLElBQUdiLE9BQU8sQ0FBQ2MsS0FBTSxFQUFDO0VBQy9GLElBQUksQ0FBQ0osS0FBSyxFQUFFO0lBQ1YsT0FBT0MsYUFBYTtFQUN0QjtFQUVBLE9BQU87SUFDTEEsYUFBYTtJQUNiSSxZQUFZLEVBQUVDLFVBQVUsQ0FBQ0wsYUFBYSxDQUFDO0lBQ3ZDRSxLQUFLLEVBQUViLE9BQU8sQ0FBQ2EsS0FBSztJQUNwQkMsS0FBSyxFQUFFZCxPQUFPLENBQUNjLEtBQUs7SUFDcEJGLEtBQUssRUFBRVosT0FBTyxDQUFDWSxLQUFLLEdBQUcsQ0FBQyxHQUFHWixPQUFPLENBQUNZLEtBQUssR0FBR0ssU0FBUztJQUNwREMsUUFBUSxHQUFJO01BQ1YsT0FBT1AsYUFBYTtJQUN0QjtFQUNGLENBQUM7QUFDSDtBQUVBLGVBQWVRLDBCQUEwQixHQUFJO0VBRzNDLE1BQU1DLG1CQUFtQixHQUFHLENBQzFCLFlBQVk7SUFDVixJQUFJQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUF6RCxrQkFBSSxFQUFDLFNBQVMsRUFBRSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsRUFBRTJCLE1BQU07SUFDNUUsT0FBTyxDQUFDLE1BQU0sSUFBQTNCLGtCQUFJLEVBQUMsU0FBUyxFQUFFLENBQUUsY0FBYXlELEdBQUcsQ0FBQ2pDLElBQUksRUFBRyxFQUFDLENBQUMsQ0FBQyxFQUFFRyxNQUFNO0VBQ3JFLENBQUMsRUFDRCxZQUFZLENBQUMsTUFBTSxJQUFBM0Isa0JBQUksRUFBQyxTQUFTLEVBQUUsQ0FBRSw4Q0FBNkMsQ0FBQyxDQUFDLEVBQUUyQixNQUFNLEVBQzVGLFlBQVksQ0FBQyxNQUFNLElBQUEzQixrQkFBSSxFQUFDLFNBQVMsRUFBRSxDQUFFLDRDQUEyQyxDQUFDLENBQUMsRUFBRTJCLE1BQU0sQ0FDM0Y7RUFDRCxJQUFJQSxNQUFNO0VBQ1YsS0FBSyxJQUFJa0IsVUFBVSxJQUFJVyxtQkFBbUIsRUFBRTtJQUMxQyxJQUFJO01BQ0Y3QixNQUFNLEdBQUcsTUFBTWtCLFVBQVUsRUFBRTtNQUMzQjtJQUNGLENBQUMsQ0FBQyxPQUFPYSxHQUFHLEVBQUU7TUFDWi9CLE1BQU0sR0FBRyxFQUFFO0lBQ2I7RUFDRjs7RUFHQSxJQUFJZ0MsS0FBSyxHQUFHLGtCQUFrQixDQUFDM0QsSUFBSSxDQUFDMkIsTUFBTSxDQUFDO0VBQzNDLE9BQU9nQyxLQUFLLEdBQUdBLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBR04sU0FBUztBQUNyQzs7QUFVQSxlQUFlTyxlQUFlLEdBQUk7RUFDaEMsSUFBSTtJQUNGLE1BQU0xQyxXQUFFLENBQUMyQyxLQUFLLENBQUMsT0FBTyxDQUFDO0VBQ3pCLENBQUMsQ0FBQyxPQUFPN0IsQ0FBQyxFQUFFO0lBQ1YzQyxHQUFHLENBQUN5RSxJQUFJLENBQUMsb0RBQW9ELEdBQzNELHlDQUF5QyxDQUFDO0lBQzVDLE9BQU8sSUFBSTtFQUNiO0VBQ0EsTUFBTTtJQUFDbkM7RUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFBM0Isa0JBQUksRUFBQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUNuRCxNQUFNMkQsS0FBSyxHQUFHLGlCQUFpQixDQUFDM0QsSUFBSSxDQUFDMkIsTUFBTSxDQUFDO0VBQzVDLElBQUksQ0FBQ2dDLEtBQUssRUFBRTtJQUNWdEUsR0FBRyxDQUFDeUUsSUFBSSxDQUFFLG1DQUFrQ25DLE1BQU8sRUFBQyxDQUFDO0lBQ3JELE9BQU8sSUFBSTtFQUNiO0VBQ0EsT0FBT2dDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFFQSxlQUFlSSwwQ0FBMEMsQ0FBRWpFLE9BQU8sR0FBR1osYUFBYSxFQUFFO0VBQ2xGLE1BQU0yQixTQUFTLEdBQUcsTUFBTWlCLE9BQU8sQ0FBQ2hDLE9BQU8sQ0FBQzs7RUFJeEMsTUFBTWtFLFVBQVUsR0FBRyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7RUFDekMsTUFBTUMsVUFBVSxHQUFHeEUsYUFBSSxDQUFDMEMsT0FBTyxDQUFDdEIsU0FBUyxFQUFFLGtEQUFrRCxDQUFDO0VBQzlGLE1BQU1xRCxVQUFVLEdBQUcsNkNBQTZDO0VBQ2hFLElBQUlDLDRCQUE0QixHQUFHLENBQ2pDMUUsYUFBSSxDQUFDMEMsT0FBTyxDQUFDOEIsVUFBVSxFQUFHLHdCQUF1QkQsVUFBVSxDQUFDLENBQUMsQ0FBRSxFQUFDLEVBQUVFLFVBQVUsQ0FBQyxFQUM3RXpFLGFBQUksQ0FBQzBDLE9BQU8sQ0FBQzhCLFVBQVUsRUFBRyx3QkFBdUJELFVBQVUsQ0FBQyxDQUFDLENBQUUsRUFBQyxFQUFFRSxVQUFVLENBQUMsQ0FDOUU7RUFFRCxJQUFJLE1BQU1oRCxXQUFFLENBQUNDLE1BQU0sQ0FBQ2dELDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDcEQsT0FBT0EsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO0VBQ3hDO0VBRUEsSUFBSSxNQUFNakQsV0FBRSxDQUFDQyxNQUFNLENBQUNnRCw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3BELE9BQU9BLDRCQUE0QixDQUFDLENBQUMsQ0FBQztFQUN4QztFQUVBLE1BQU0xQyxHQUFHLEdBQUcsaUVBQWlFLEdBQ2hFLGFBQVkwQyw0QkFBNEIsQ0FBQ2IsUUFBUSxFQUFHLEVBQUM7RUFDbEVqRSxHQUFHLENBQUMrRSxLQUFLLENBQUMzQyxHQUFHLENBQUM7RUFDZCxNQUFNLElBQUl0QixLQUFLLENBQUNzQixHQUFHLENBQUM7QUFFdEI7QUFFQSxNQUFNNEMsOEJBQThCLEdBQUdwRSxlQUFDLENBQUM4QixPQUFPLENBQzlDLFNBQVNzQyw4QkFBOEIsQ0FBRTFCLE9BQU8sR0FBR3ZELHlCQUF5QixFQUFFVSxPQUFPLEdBQUdaLGFBQWEsRUFBRTtFQUNyRyxPQUFPLElBQUEwRCxlQUFLLEVBQUNELE9BQU8sRUFBRW9CLDBDQUEwQyxFQUFFakUsT0FBTyxDQUFDO0FBQzVFLENBQUMsQ0FDRjtBQUFDO0FBRUYsZUFBZXdFLHdCQUF3QixDQUFFeEUsT0FBTyxHQUFHWixhQUFhLEVBQUU7RUFDaEUsTUFBTWtELE9BQU8sR0FBRyxNQUFNUyxVQUFVLENBQUMsS0FBSyxFQUFFekQseUJBQXlCLEVBQUVVLE9BQU8sQ0FBQztFQUMzRSxJQUFJc0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtJQUN0QixPQUFPLEtBQUs7RUFDZDtFQUVBLE1BQU12QyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUM7RUFDL0QsTUFBTTtJQUFDOEI7RUFBTSxDQUFDLEdBQUcsTUFBTS9CLGVBQWUsQ0FBQ0MsSUFBSSxFQUFFQyxPQUFPLENBQUM7RUFFckQsTUFBTXlFLFVBQVUsR0FBRzVDLE1BQU0sQ0FBQ0gsSUFBSSxFQUFFO0VBQ2hDLE1BQU1tQyxLQUFLLEdBQUcsT0FBTyxDQUFDM0QsSUFBSSxDQUFDMkIsTUFBTSxDQUFDO0VBRWxDLElBQUksQ0FBQ2dDLEtBQUssRUFBRTtJQUNWLE1BQU0sSUFBSXhELEtBQUssQ0FBRSxrREFBaURvRSxVQUFXLEdBQUUsQ0FBQztFQUNsRjtFQUVBLE9BQU9BLFVBQVU7QUFDbkI7QUFFQSxlQUFlQyw0QkFBNEIsQ0FBRTFFLE9BQU8sR0FBR1osYUFBYSxFQUFFO0VBQ3BFLE1BQU1rRCxPQUFPLEdBQUcsTUFBTVMsVUFBVSxDQUFDLElBQUksRUFBRXpELHlCQUF5QixFQUFFVSxPQUFPLENBQUM7RUFHMUUsT0FBUSxHQUFFc0MsT0FBTyxDQUFDYSxLQUFLLEdBQUcsQ0FBRSxJQUFHYixPQUFPLENBQUNjLEtBQU0sRUFBQztBQUNoRDtBQUVBLE1BQU11QixZQUFZLEdBQUd4RSxlQUFDLENBQUM4QixPQUFPLENBQzVCLFNBQVMwQyxZQUFZLENBQUU5QixPQUFPLEdBQUd2RCx5QkFBeUIsRUFBRVUsT0FBTyxHQUFHWixhQUFhLEVBQUU7RUFDbkYsSUFBSTtJQUNGLE9BQU8sSUFBQTBELGVBQUssRUFBQ0QsT0FBTyxFQUFFMkIsd0JBQXdCLEVBQUV4RSxPQUFPLENBQUM7RUFDMUQsQ0FBQyxDQUFDLE9BQU9PLEdBQUcsRUFBRTtJQUNaaEIsR0FBRyxDQUFDcUIsSUFBSSxDQUFFLDJDQUEwQ0wsR0FBRyxDQUFDRSxPQUFRLEVBQUMsQ0FBQztJQUNsRWxCLEdBQUcsQ0FBQ3FCLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztJQUN2QyxPQUFPOEQsNEJBQTRCLENBQUMxRSxPQUFPLENBQUM7RUFDOUM7QUFDRixDQUFDLENBQ0Y7QUFBQztBQUVGLGVBQWU0RSx5QkFBeUIsQ0FBRTVFLE9BQU8sR0FBR1osYUFBYSxFQUFFO0VBQ2pFLE1BQU1XLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsQ0FBQztFQUNoRSxNQUFNO0lBQUM4QjtFQUFNLENBQUMsR0FBRyxNQUFNL0IsZUFBZSxDQUFDQyxJQUFJLEVBQUVDLE9BQU8sQ0FBQztFQUVyRCxNQUFNeUUsVUFBVSxHQUFHNUMsTUFBTSxDQUFDSCxJQUFJLEVBQUU7RUFFaEMsSUFBSW1ELEtBQUssQ0FBQ3ZCLFVBQVUsQ0FBQ21CLFVBQVUsQ0FBQyxDQUFDLEVBQUU7SUFDakMsTUFBTSxJQUFJcEUsS0FBSyxDQUFFLG1EQUFrRG9FLFVBQVcsR0FBRSxDQUFDO0VBQ25GO0VBRUEsT0FBT0EsVUFBVTtBQUNuQjtBQUVBLE1BQU1LLGFBQWEsR0FBRzNFLGVBQUMsQ0FBQzhCLE9BQU8sQ0FDN0IsU0FBUzZDLGFBQWEsQ0FBRWpDLE9BQU8sR0FBR3ZELHlCQUF5QixFQUFFVSxPQUFPLEdBQUdaLGFBQWEsRUFBRTtFQUNwRixPQUFPLElBQUEwRCxlQUFLLEVBQUNELE9BQU8sRUFBRStCLHlCQUF5QixFQUFFNUUsT0FBTyxDQUFDO0FBQzNELENBQUMsQ0FDRjtBQUFDO0FBRUYsZUFBZStFLG1CQUFtQixDQUFFL0UsT0FBTyxHQUFHWixhQUFhLEVBQUU7RUFDM0QsTUFBTTRGLEdBQUcsR0FBRywyQkFBMkI7RUFDdkMsTUFBTWpGLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUM7RUFDdEMsSUFBSTtJQUFDOEI7RUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFBM0Isa0JBQUksRUFBQzhFLEdBQUcsRUFBRWpGLElBQUksRUFBRTtJQUFDQztFQUFPLENBQUMsQ0FBQztFQUMvQyxJQUFJaUYsWUFBWSxHQUFHLElBQUFDLFlBQWMsRUFBQ3JELE1BQU0sQ0FBQztFQUV6QyxJQUFJc0QsWUFBWSxHQUFHLEVBQUU7RUFDckIsSUFBSUMsZUFBZSxHQUFHLENBQUNILFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2QyxPQUFPRyxlQUFlLENBQUN2RixNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQ2pDLElBQUl3RixZQUFZLEdBQUdELGVBQWUsQ0FBQ0UsR0FBRyxFQUFFO0lBQ3hDLElBQUlELFlBQVksWUFBWUUsS0FBSyxFQUFFO01BQ2pDSCxlQUFlLEdBQUdBLGVBQWUsQ0FBQ0ksTUFBTSxDQUFDSCxZQUFZLENBQUM7SUFDeEQsQ0FBQyxNQUFNLElBQUtBLFlBQVksQ0FBQ0ksS0FBSyxJQUNsQkosWUFBWSxDQUFDSSxLQUFLLENBQUM3RixTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFDN0N5RixZQUFZLENBQUNJLEtBQUssSUFDbEJKLFlBQVksQ0FBQ0ksS0FBSyxDQUFDN0YsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxRQUFTLElBQ2hEeUYsWUFBWSxDQUFDSSxLQUFLLElBQUl0RixlQUFDLENBQUN1RixRQUFRLENBQUNMLFlBQVksQ0FBQ0ksS0FBSyxFQUFFLFVBQVUsQ0FBRSxFQUFFO01BQzdFLElBQUlFLFVBQVUsR0FBRztRQUNmQyxJQUFJLEVBQUVQLFlBQVksQ0FBQ0ksS0FBSztRQUN4QkksSUFBSSxFQUFFUixZQUFZLENBQUNTLFVBQVU7UUFDN0JDLFNBQVMsRUFBRVYsWUFBWSxDQUFDVyxVQUFVO1FBQ2xDQyxhQUFhLEVBQUVaLFlBQVksQ0FBQ2E7TUFDOUIsQ0FBQztNQUNEZixZQUFZLENBQUNnQixJQUFJLENBQUNSLFVBQVUsQ0FBQztJQUMvQixDQUFDLE1BQU0sSUFBSU4sWUFBWSxDQUFDZSxNQUFNLEVBQUU7TUFDOUJoQixlQUFlLEdBQUdBLGVBQWUsQ0FBQ0ksTUFBTSxDQUFDSCxZQUFZLENBQUNlLE1BQU0sQ0FBQztJQUMvRDtFQUNGO0VBQ0EsT0FBT2pCLFlBQVk7QUFDckI7QUFFQSxlQUFla0IsOEJBQThCLENBQUVyRyxPQUFPLEdBQUdaLGFBQWEsRUFBRTtFQUN0RSxNQUFNVyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDO0VBQ3JDLElBQUk7SUFBQzhCO0VBQU0sQ0FBQyxHQUFHLE1BQU0vQixlQUFlLENBQUNDLElBQUksRUFBRUMsT0FBTyxDQUFDO0VBRW5ELElBQUksQ0FBQzZCLE1BQU0sRUFBRTtJQUNYQSxNQUFNLEdBQUcsRUFBRTtFQUNiO0VBRUEsSUFBSXlFLGVBQWUsR0FBR3pFLE1BQU0sQ0FBQ0gsSUFBSSxFQUFFO0VBRW5DLElBQUksQ0FBQzRFLGVBQWUsRUFBRTtJQUNwQixNQUFNLElBQUlqRyxLQUFLLENBQUUsMERBQXlETixJQUFJLENBQUNPLElBQUksQ0FBQyxHQUFHLENBQUUsR0FBRSxDQUFDO0VBQzlGO0VBRUEsT0FBT2dHLGVBQWU7QUFDeEI7QUFFQSxNQUFNQyxrQkFBa0IsR0FBR3BHLGVBQUMsQ0FBQzhCLE9BQU8sQ0FDbEMsU0FBU3NFLGtCQUFrQixDQUFFMUQsT0FBTyxHQUFHdkQseUJBQXlCLEVBQUVVLE9BQU8sR0FBR1osYUFBYSxFQUFFO0VBQ3pGLE9BQU8sSUFBQTBELGVBQUssRUFBQ0QsT0FBTyxFQUFFd0QsOEJBQThCLEVBQUVyRyxPQUFPLENBQUM7QUFDaEUsQ0FBQyxDQUNGO0FBQUM7QUFFRixTQUFTd0csa0JBQWtCLEdBQUk7RUFHN0IsTUFBTUMsUUFBUSxHQUFHLENBQ2Z6RSxPQUFPLEVBQUVZLGtCQUFrQixFQUFFMkIsOEJBQThCLEVBQUVJLFlBQVksRUFDekVHLGFBQWEsRUFBRXlCLGtCQUFrQixDQUNsQztFQUVERSxRQUFRLENBQUNDLE9BQU8sQ0FBRUMsQ0FBQyxJQUFLO0lBQ3RCLElBQUlBLENBQUMsQ0FBQ0MsS0FBSyxFQUFFO01BQ1hELENBQUMsQ0FBQ0MsS0FBSyxHQUFHLElBQUl6RyxlQUFDLENBQUM4QixPQUFPLENBQUM0RSxLQUFLLEVBQUU7SUFDakM7RUFDRixDQUFDLENBQUM7QUFDSiJ9
287
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnYiLCJwcm9jZXNzIiwiWENSVU5fVElNRU9VVCIsIlhDT0RFX1NVQkRJUiIsIkRFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJoYXNFeHBlY3RlZFN1YkRpciIsInBhdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJydW5YY3J1bkNvbW1hbmQiLCJhcmdzIiwidGltZW91dCIsInJlcyIsImV4ZWMiLCJfIiwiaXNVbmRlZmluZWQiLCJFcnJvciIsImpvaW4iLCJlcnIiLCJzdGRlcnIiLCJtZXNzYWdlIiwiZ2V0UGF0aEZyb21TeW1saW5rIiwiZmFpbE1lc3NhZ2UiLCJ3YXJuIiwic3ltbGlua1BhdGgiLCJsZWdhY3lTeW1saW5rUGF0aCIsInhjb2RlUGF0aCIsInV0aWwiLCJoYXNDb250ZW50IiwiREVWRUxPUEVSX0RJUiIsImN1c3RvbVBhdGgiLCJmcyIsImV4aXN0cyIsIm1lc2ciLCJyZWFkbGluayIsInJlcGxhY2UiLCJSZWdFeHAiLCJ0cmltIiwibXNnIiwiZ2V0UGF0aEZyb21YY29kZVNlbGVjdCIsInN0ZG91dCIsInhjb2RlRm9sZGVyUGF0aCIsImVycm9yQW5kVGhyb3ciLCJnZXRQYXRoIiwibWVtb2l6ZSIsImUiLCJnZXRWZXJzaW9uV2l0aG91dFJldHJ5IiwicGxpc3RQYXRoIiwicmVzb2x2ZSIsInZlcnNpb24iLCJwbGlzdCIsInBhcnNlUGxpc3RGaWxlIiwic2VtdmVyIiwiY29lcmNlIiwiQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmciLCJnZXRWZXJzaW9uTWVtb2l6ZWQiLCJyZXRyaWVzIiwicmV0cnkiLCJnZXRWZXJzaW9uIiwicGFyc2UiLCJ2ZXJzaW9uU3RyaW5nIiwicGF0Y2giLCJtYWpvciIsIm1pbm9yIiwidmVyc2lvbkZsb2F0IiwicGFyc2VGbG9hdCIsInVuZGVmaW5lZCIsInRvU3RyaW5nIiwiZ2V0Q29tbWFuZExpbmVUb29sc1ZlcnNpb24iLCJnZXRWZXJzaW9uRnVuY3Rpb25zIiwicGtnIiwiaWduIiwibWF0Y2giLCJnZXRDbGFuZ1ZlcnNpb24iLCJ3aGljaCIsImluZm8iLCJnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnkiLCJleHRlbnNpb25zIiwicGF0aFByZWZpeCIsInBhdGhTdWZmaXgiLCJhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzIiwiZXJyb3IiLCJnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgiLCJnZXRNYXhJT1NTREtXaXRob3V0UmV0cnkiLCJzZGtWZXJzaW9uIiwiZ2V0TWF4SU9TU0RLRnJvbVhjb2RlVmVyc2lvbiIsImdldE1heElPU1NESyIsImdldE1heFRWT1NTREtXaXRob3V0UmV0cnkiLCJpc05hTiIsImdldE1heFRWT1NTREsiLCJnZXRDb25uZWN0ZWREZXZpY2VzIiwiY21kIiwicGxpc3RDb250ZW50IiwicGFyc2VQbGlzdERhdGEiLCJkZXZpY2VzRm91bmQiLCJlbnRyaWVzVG9TZWFyY2giLCJjdXJyZW50RW50cnkiLCJwb3AiLCJBcnJheSIsImNvbmNhdCIsIl9uYW1lIiwiaW5jbHVkZXMiLCJkZXZpY2VJbmZvIiwibmFtZSIsInVkaWQiLCJzZXJpYWxfbnVtIiwicHJvZHVjdElkIiwicHJvZHVjdF9pZCIsImRldmljZVZlcnNpb24iLCJiY2RfZGV2aWNlIiwicHVzaCIsIl9pdGVtcyIsImdldEluc3RydW1lbnRzUGF0aFdpdGhvdXRSZXRyeSIsImluc3RydW1lbnRzUGF0aCIsImdldEluc3RydW1lbnRzUGF0aCIsImNsZWFySW50ZXJuYWxDYWNoZSIsIm1lbW9pemVkIiwiZm9yRWFjaCIsImYiLCJjYWNoZSIsIkNhY2hlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3hjb2RlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHV0aWwsIGZzLCBwbGlzdCwgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmV0cnkgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcGFyc2UgYXMgcGFyc2VQbGlzdERhdGEgfSBmcm9tICdwbGlzdCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcblxuXG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxuY29uc3QgWENSVU5fVElNRU9VVCA9IDE1MDAwO1xuY29uc3QgWENPREVfU1VCRElSID0gJy9Db250ZW50cy9EZXZlbG9wZXInO1xuY29uc3QgREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUyA9IDM7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1hjb2RlJyk7XG5cblxuZnVuY3Rpb24gaGFzRXhwZWN0ZWRTdWJEaXIgKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKHBhdGgubGVuZ3RoIC0gWENPREVfU1VCRElSLmxlbmd0aCkgPT09IFhDT0RFX1NVQkRJUjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuWGNydW5Db21tYW5kIChhcmdzLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGV4ZWMoJ3hjcnVuJywgYXJncywge3RpbWVvdXR9KTtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChyZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdGhpbmcgcmV0dXJuZWQgZnJvbSB0cnlpbmcgdG8gcnVuICd4Y3J1biAke2FyZ3Muam9pbignICcpfSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gdGhlIHRydWUgZXJyb3IgY2FuIGJlIGhpZGRlbiB3aXRoaW4gdGhlIHN0ZGVyclxuICAgIGlmIChlcnIuc3RkZXJyKSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2Vyci5tZXNzYWdlfTogJHtlcnIuc3RkZXJyfWA7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBhdGhGcm9tU3ltbGluayAoZmFpbE1lc3NhZ2UpIHtcbiAgLy8gTm9kZSdzIGludm9jYXRpb24gb2YgeGNvZGUtc2VsZWN0IHNvbWV0aW1lcyBmbGFrZXMgYW5kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICAvLyBOb3QgY2xlYXIgd2h5LiBBcyBhIHdvcmthcm91bmQsIEFwcGl1bSBjYW4gcmVsaWFibHkgZGVkdWNlIHRoZSB2ZXJzaW9uIGluIHVzZSBieSBjaGVja2luZ1xuICAvLyB0aGUgbG9jYXRpb25zIHhjb2RlLXNlbGVjdCB1c2VzIHRvIHN0b3JlIHRoZSBzZWxlY3RlZCB2ZXJzaW9uJ3MgcGF0aC4gVGhpcyBzaG91bGQgYmUgMTAwJVxuICAvLyByZWxpYWJsZSBzbyBsb25nIGFzIHRoZSBsaW5rIGxvY2F0aW9ucyByZW1haW4gdGhlIHNhbWUuIEhvd2V2ZXIsIHNpbmNlIHdlJ3JlIHJlbHlpbmcgb25cbiAgLy8gaGFyZGNvZGVkIHBhdGhzLCB0aGlzIGFwcHJvYWNoIHdpbGwgYnJlYWsgdGhlIG5leHQgdGltZSBBcHBsZSBjaGFuZ2VzIHRoZSBzeW1saW5rIGxvY2F0aW9uLlxuICBsb2cud2FybihgRmluZGluZyBYY29kZVBhdGggYnkgc3ltbGluayBiZWNhdXNlICR7ZmFpbE1lc3NhZ2V9YCk7XG5cbiAgY29uc3Qgc3ltbGlua1BhdGggPSAnL3Zhci9kYi94Y29kZV9zZWxlY3RfbGluayc7XG4gIGNvbnN0IGxlZ2FjeVN5bWxpbmtQYXRoID0gJy91c3Ivc2hhcmUveGNvZGUtc2VsZWN0L3hjb2RlX2Rpcl9saW5rJzsgLy8gIFhjb2RlIDwgNS54XG4gIGxldCB4Y29kZVBhdGggPSBudWxsO1xuXG4gIC8vIHhjb2RlLXNlbGVjdCBhbGxvd3MgdXNlcnMgdG8gb3ZlcnJpZGUgaXRzIHNldHRpbmdzIHdpdGggdGhlIERFVkVMT1BFUl9ESVIgZW52IHZhcixcbiAgLy8gc28gY2hlY2sgdGhhdCBmaXJzdFxuICBpZiAodXRpbC5oYXNDb250ZW50KGVudi5ERVZFTE9QRVJfRElSKSkge1xuICAgIGNvbnN0IGN1c3RvbVBhdGggPSBoYXNFeHBlY3RlZFN1YkRpcihlbnYuREVWRUxPUEVSX0RJUilcbiAgICAgID8gZW52LkRFVkVMT1BFUl9ESVJcbiAgICAgIDogZW52LkRFVkVMT1BFUl9ESVIgKyBYQ09ERV9TVUJESVI7XG5cbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGN1c3RvbVBhdGgpKSB7XG4gICAgICB4Y29kZVBhdGggPSBjdXN0b21QYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbWVzZyA9IGBDb3VsZCBub3QgZmluZCBwYXRoIHRvIFhjb2RlLCBlbnZpcm9ubWVudCB2YXJpYWJsZSBgICtcbiAgICAgICAgICAgICAgICAgYERFVkVMT1BFUl9ESVIgc2V0IHRvOiAke2Vudi5ERVZFTE9QRVJfRElSfSBgICtcbiAgICAgICAgICAgICAgICAgYGJ1dCBubyBYY29kZSBmb3VuZGA7XG4gICAgICBsb2cud2FybihtZXNnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXdhaXQgZnMuZXhpc3RzKHN5bWxpbmtQYXRoKSkge1xuICAgIHhjb2RlUGF0aCA9IGF3YWl0IGZzLnJlYWRsaW5rKHN5bWxpbmtQYXRoKTtcbiAgfSBlbHNlIGlmIChhd2FpdCBmcy5leGlzdHMobGVnYWN5U3ltbGlua1BhdGgpKSB7XG4gICAgeGNvZGVQYXRoID0gYXdhaXQgZnMucmVhZGxpbmsobGVnYWN5U3ltbGlua1BhdGgpO1xuICB9XG5cbiAgaWYgKHhjb2RlUGF0aCkge1xuICAgIHJldHVybiB4Y29kZVBhdGgucmVwbGFjZShuZXcgUmVnRXhwKCcvJCcpLCAnJykudHJpbSgpO1xuICB9XG5cbiAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaXMgd2UgZmFpbGVkIHRvIGNhcHR1cmUgeGNvZGUtc2VsZWN0J3Mgc3Rkb3V0IGFuZCBvdXJcbiAgLy8gb3RoZXIgY2hlY2tzIGZhaWxlZC4gRWl0aGVyIEFwcGxlIGhhcyBtb3ZlZCB0aGUgc3ltbGluayB0byBhIG5ldyBsb2NhdGlvbiBvciB0aGUgdXNlclxuICAvLyBpcyBub3QgdXNpbmcgdGhlIGRlZmF1bHQgaW5zdGFsbC4gOTkuOTk5JSBjaGFuY2UgaXQncyB0aGUgbGF0dGVyLCBzbyBpc3N1ZSBhIHdhcm5pbmdcbiAgLy8gc2hvdWxkIHdlIGV2ZXIgaGl0IHRoZSBlZGdlIGNhc2UuXG4gIGxldCBtc2cgPSBgQ291bGQgbm90IGZpbmQgcGF0aCB0byBYY29kZSBieSBzeW1saW5rcyBsb2NhdGVkIGluICR7c3ltbGlua1BhdGh9LCBvciAke2xlZ2FjeVN5bWxpbmtQYXRofWA7XG4gIGxvZy53YXJuKG1zZyk7XG4gIHRocm93IG5ldyBFcnJvcihtc2cpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQYXRoRnJvbVhjb2RlU2VsZWN0ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBsZXQge3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZS1zZWxlY3QnLCBbJy0tcHJpbnQtcGF0aCddLCB7dGltZW91dH0pO1xuXG4gIC8vIHRyaW0gYW5kIHJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICBjb25zdCB4Y29kZUZvbGRlclBhdGggPSBzdGRvdXQucmVwbGFjZSgvXFwvJC8sICcnKS50cmltKCk7XG5cbiAgaWYgKCF1dGlsLmhhc0NvbnRlbnQoeGNvZGVGb2xkZXJQYXRoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KCd4Y29kZS1zZWxlY3QgcmV0dXJuZWQgYW4gZW1wdHkgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAoYXdhaXQgZnMuZXhpc3RzKHhjb2RlRm9sZGVyUGF0aCkpIHtcbiAgICByZXR1cm4geGNvZGVGb2xkZXJQYXRoO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG1zZyA9IGB4Y29kZS1zZWxlY3QgY291bGQgbm90IGZpbmQgeGNvZGUuIFBhdGggJyR7eGNvZGVGb2xkZXJQYXRofScgZG9lcyBub3QgZXhpc3QuYDtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhtc2cpO1xuICB9XG59XG5cbmNvbnN0IGdldFBhdGggPSBfLm1lbW9pemUoZnVuY3Rpb24gZ2V0UGF0aCAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgLy8gZmlyc3Qgd2UgdHJ5IHVzaW5nIHhjb2RlLXNlbGVjdCB0byBmaW5kIHRoZSBwYXRoXG4gIC8vIHRoZW4gd2UgdHJ5IHVzaW5nIHRoZSBzeW1saW5rcyB0aGF0IEFwcGxlIGhhcyBieSBkZWZhdWx0XG4gIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0UGF0aEZyb21YY29kZVNlbGVjdCh0aW1lb3V0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0UGF0aEZyb21TeW1saW5rKGUubWVzc2FnZSk7XG4gICAgfVxuICB9KSgpO1xufSk7XG5cblxuYXN5bmMgZnVuY3Rpb24gZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgeGNvZGVQYXRoID0gYXdhaXQgZ2V0UGF0aCh0aW1lb3V0KTtcblxuICAvLyB3ZSB3YW50IHRvIHJlYWQgdGhlIENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nIGZyb20gWGNvZGUncyBwbGlzdC5cbiAgLy8gSXQgc2hvdWxkIGJlIGluIC9bcm9vdF0vWENvZGUuYXBwL0NvbnRlbnRzL1xuICBjb25zdCBwbGlzdFBhdGggPSBwYXRoLnJlc29sdmUoeGNvZGVQYXRoLCAnLi4nLCAnSW5mby5wbGlzdCcpO1xuXG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHBsaXN0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBnZXQgWGNvZGUgdmVyc2lvbi4gJHtwbGlzdFBhdGh9IGRvZXMgbm90IGV4aXN0IG9uIGRpc2suYCk7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocGxpc3RQYXRoKTtcbiAgcmV0dXJuIHNlbXZlci5jb2VyY2UodmVyc2lvbi5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyk7XG59XG5cbmNvbnN0IGdldFZlcnNpb25NZW1vaXplZCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0VmVyc2lvbk1lbW9pemVkIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFZlcnNpb24gKHBhcnNlID0gZmFsc2UsIHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0VmVyc2lvbk1lbW9pemVkKHJldHJpZXMsIHRpbWVvdXQpO1xuICAvLyB4Y29kZSB2ZXJzaW9uIHN0cmluZ3MgYXJlIG5vdCBleGFjdGx5IHNlbXZlciBzdHJpbmc6IHBhdGNoIHZlcnNpb25zIG9mIDBcbiAgLy8gYXJlIHJlbW92ZWQgKGUuZy4sICcxMC4wLjAnID0+ICcxMC4wJylcbiAgY29uc3QgdmVyc2lvblN0cmluZyA9IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi52ZXJzaW9uIDogYCR7dmVyc2lvbi5tYWpvcn0uJHt2ZXJzaW9uLm1pbm9yfWA7XG4gIGlmICghcGFyc2UpIHtcbiAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvblN0cmluZyxcbiAgICB2ZXJzaW9uRmxvYXQ6IHBhcnNlRmxvYXQodmVyc2lvblN0cmluZyksXG4gICAgbWFqb3I6IHZlcnNpb24ubWFqb3IsXG4gICAgbWlub3I6IHZlcnNpb24ubWlub3IsXG4gICAgcGF0Y2g6IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi5wYXRjaCA6IHVuZGVmaW5lZCxcbiAgICB0b1N0cmluZyAoKSB7XG4gICAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiAoKSB7XG4gIC8vIHRoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgd2F5cyB0aGF0IHRoZSBDTEkgdG9vbHMgdmVyc2lvbiBoYXMgYmVlblxuICAvLyByZXByZXNlbnRlZC4gVHJ5IHRoZW0gZnJvbSBtb3N0IHJlbGlhYmxlIHRvIGxlYXN0LCBmYWxsaW5nIGRvd24gdGhlIGNoYWluXG4gIGNvbnN0IGdldFZlcnNpb25GdW5jdGlvbnMgPSBbXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHBrZyA9IChhd2FpdCBleGVjKCdwa2d1dGlsJywgWyctLXBrZ3M9Y29tLmFwcGxlLnBrZy5EZXZTREtfLionXSkpLnN0ZG91dDtcbiAgICAgIHJldHVybiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz0ke3BrZy50cmltKCl9YF0pKS5zdGRvdXQ7XG4gICAgfSxcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz1jb20uYXBwbGUucGtnLkNMVG9vbHNfRXhlY3V0YWJsZXNgXSkpLnN0ZG91dCxcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz1jb20uYXBwbGUucGtnLkRldmVsb3BlclRvb2xzQ0xJYF0pKS5zdGRvdXQsXG4gIF07XG4gIGxldCBzdGRvdXQ7XG4gIGZvciAobGV0IGdldFZlcnNpb24gb2YgZ2V0VmVyc2lvbkZ1bmN0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICBzdGRvdXQgPSBhd2FpdCBnZXRWZXJzaW9uKCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIHN0ZG91dCA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8vIHN0ZG91dCBzaG91bGQgaGF2ZSBhIGxpbmUgbGlrZSBgdmVyc2lvbjogOC4wLjAuMC4xLjE0NzI0MzU4ODFgXG4gIGxldCBtYXRjaCA9IC9edmVyc2lvbjogKC4rKSQvbS5leGVjKHN0ZG91dCk7IC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvSFYzeDRkLzFcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaHR0cHM6Ly90cmFjLm1hY3BvcnRzLm9yZy93aWtpL1hjb2RlVmVyc2lvbkluZm9cbiAqIHRvIHNlZSB0aGUgYWN0dWFsIG1hcHBpbmcgYmV0d2VlbiBjbGFuZyBhbmQgb3RoZXIgY29tcG9uZW50cy5cbiAqXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGFjdHVhbCBDbGFuZyB2ZXJzaW9uIGluIHgueC54Lnggb3IgeC54LnggZm9ybWF0LFxuICogd2hpY2ggaXMgc3VwcGxpZWQgd2l0aCBDb21tYW5kIExpbmUgVG9vbHMuIGBudWxsYCBpcyByZXR1cm5lZFxuICogaWYgQ0xUIGFyZSBub3QgaW5zdGFsbGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDbGFuZ1ZlcnNpb24gKCkge1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndoaWNoKCdjbGFuZycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmluZm8oJ0Nhbm5vdCBmaW5kIGNsYW5nIGV4ZWN1dGFibGUgb24gdGhlIGxvY2FsIHN5c3RlbS4gJyArXG4gICAgICAnQXJlIFhjb2RlIENvbW1hbmQgTGluZSBUb29scyBpbnN0YWxsZWQ/Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdjbGFuZycsIFsnLS12ZXJzaW9uJ10pO1xuICBjb25zdCBtYXRjaCA9IC9jbGFuZy0oWzAtOS5dKykvLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIGxvZy5pbmZvKGBDYW5ub3QgcGFyc2UgY2xhbmcgdmVyc2lvbiBmcm9tICR7c3Rkb3V0fWApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBtYXRjaFsxXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB4Y29kZVBhdGggPSBhd2FpdCBnZXRQYXRoKHRpbWVvdXQpO1xuXG4gIC8vIGZvciBpb3MgOCBhbmQgdXAsIHRoZSBmaWxlIGV4dGVuc2lvbiBmb3IgQXV0aW9tYXRpb25JbnN0cnVtZW50IGNoYW5nZWQuXG4gIC8vIHJhdGhlciB0aGFuIHdhc3RlIHRpbWUgZ2V0dGluZyB0aGUgaU9TU0RLVmVyc2lvbiwganVzdCBnZXQgYm90aCBwYXRocyBhbmQgc2VlIHdoaWNoIG9uZSBleGlzdHNcbiAgY29uc3QgZXh0ZW5zaW9ucyA9IFsneHJwbHVnaW4nLCAnYnVuZGxlJ107XG4gIGNvbnN0IHBhdGhQcmVmaXggPSBwYXRoLnJlc29sdmUoeGNvZGVQYXRoLCAnLi4vQXBwbGljYXRpb25zL0luc3RydW1lbnRzLmFwcC9Db250ZW50cy9QbHVnSW5zJyk7XG4gIGNvbnN0IHBhdGhTdWZmaXggPSAnQ29udGVudHMvUmVzb3VyY2VzL0F1dG9tYXRpb24udHJhY2V0ZW1wbGF0ZSc7XG4gIGxldCBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzID0gW1xuICAgIHBhdGgucmVzb2x2ZShwYXRoUHJlZml4LCBgQXV0b21hdGlvbkluc3RydW1lbnQuJHtleHRlbnNpb25zWzBdfWAsIHBhdGhTdWZmaXgpLFxuICAgIHBhdGgucmVzb2x2ZShwYXRoUHJlZml4LCBgQXV0b21hdGlvbkluc3RydW1lbnQuJHtleHRlbnNpb25zWzFdfWAsIHBhdGhTdWZmaXgpXG4gIF07XG5cbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzBdKSkge1xuICAgIHJldHVybiBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzBdO1xuICB9XG5cbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzFdKSkge1xuICAgIHJldHVybiBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzFdO1xuICB9XG5cbiAgY29uc3QgbXNnID0gJ0NvdWxkIG5vdCBmaW5kIEF1dG9tYXRpb24udHJhY2V0ZW1wbGF0ZSBpbiBhbnkgb2YgdGhlIGZvbGxvd2luZycgK1xuICAgICAgICAgICAgICBgbG9jYXRpb25zICR7YXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRocy50b1N0cmluZygpfWA7XG4gIGxvZy5lcnJvcihtc2cpO1xuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcblxufVxuXG5jb25zdCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGggPSBfLm1lbW9pemUoXG4gIGZ1bmN0aW9uIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCAocmV0cmllcyA9IERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMsIHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gICAgcmV0dXJuIHJldHJ5KHJldHJpZXMsIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aFdpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldFZlcnNpb24oZmFsc2UsIERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMsIHRpbWVvdXQpO1xuICBpZiAodmVyc2lvblswXSA9PT0gJzQnKSB7XG4gICAgcmV0dXJuICc2LjEnO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJywgJy0tc2hvdy1zZGstdmVyc2lvbiddO1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcblxuICBjb25zdCBzZGtWZXJzaW9uID0gc3Rkb3V0LnRyaW0oKTtcbiAgY29uc3QgbWF0Y2ggPSAvXFxkLlxcZC8uZXhlYyhzdGRvdXQpO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHhjcnVuIHJldHVybmVkIGEgbm9uLW51bWVyaWMgaU9TIFNESyB2ZXJzaW9uOiAnJHtzZGtWZXJzaW9ufSdgKTtcbiAgfVxuXG4gIHJldHVybiBzZGtWZXJzaW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNYXhJT1NTREtGcm9tWGNvZGVWZXJzaW9uICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0VmVyc2lvbih0cnVlLCBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0KTtcbiAgLy8gYXMgb2Ygbm93LCB0aGUgaU9TIHZlcnNpb24gYXNzb2NpYXRlZCB3aXRoIGFuIFhjb2RlIHZlcnNpb24gaXNcbiAgLy8ganVzdCB0aGUgWGNvZGUgdmVyc2lvbiArIDJcbiAgcmV0dXJuIGAke3ZlcnNpb24ubWFqb3IgKyAyfS4ke3ZlcnNpb24ubWlub3J9YDtcbn1cblxuY29uc3QgZ2V0TWF4SU9TU0RLID0gXy5tZW1vaXplKFxuICBmdW5jdGlvbiBnZXRNYXhJT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gcmV0cmlldmUgbWF4aW11bSBpT1MgdmVyc2lvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIGxvZy53YXJuKCdHdWVzc2luZyBmcm9tIFhjb2RlIHZlcnNpb24nKTtcbiAgICAgIHJldHVybiBnZXRNYXhJT1NTREtGcm9tWGNvZGVWZXJzaW9uKHRpbWVvdXQpO1xuICAgIH1cbiAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnYXBwbGV0dnNpbXVsYXRvcicsICctLXNob3ctc2RrLXZlcnNpb24nXTtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBydW5YY3J1bkNvbW1hbmQoYXJncywgdGltZW91dCk7XG5cbiAgY29uc3Qgc2RrVmVyc2lvbiA9IHN0ZG91dC50cmltKCk7XG5cbiAgaWYgKGlzTmFOKHBhcnNlRmxvYXQoc2RrVmVyc2lvbikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB4Y3J1biByZXR1cm5lZCBhIG5vbi1udW1lcmljIHR2T1MgU0RLIHZlcnNpb246ICcke3Nka1ZlcnNpb259J2ApO1xuICB9XG5cbiAgcmV0dXJuIHNka1ZlcnNpb247XG59XG5cbmNvbnN0IGdldE1heFRWT1NTREsgPSBfLm1lbW9pemUoXG4gIGZ1bmN0aW9uIGdldE1heFRWT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHJldHVybiByZXRyeShyZXRyaWVzLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29ubmVjdGVkRGV2aWNlcyAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgY21kID0gJy91c3Ivc2Jpbi9zeXN0ZW1fcHJvZmlsZXInO1xuICBjb25zdCBhcmdzID0gWycteG1sJywgJ1NQVVNCRGF0YVR5cGUnXTtcbiAgbGV0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhjbWQsIGFyZ3MsIHt0aW1lb3V0fSk7XG4gIGxldCBwbGlzdENvbnRlbnQgPSBwYXJzZVBsaXN0RGF0YShzdGRvdXQpO1xuXG4gIGxldCBkZXZpY2VzRm91bmQgPSBbXTtcbiAgbGV0IGVudHJpZXNUb1NlYXJjaCA9IFtwbGlzdENvbnRlbnRbMF1dO1xuICB3aGlsZSAoZW50cmllc1RvU2VhcmNoLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgY3VycmVudEVudHJ5ID0gZW50cmllc1RvU2VhcmNoLnBvcCgpO1xuICAgIGlmIChjdXJyZW50RW50cnkgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgZW50cmllc1RvU2VhcmNoID0gZW50cmllc1RvU2VhcmNoLmNvbmNhdChjdXJyZW50RW50cnkpO1xuICAgIH0gZWxzZSBpZiAoKGN1cnJlbnRFbnRyeS5fbmFtZSAmJlxuICAgICAgICAgICAgICAgIGN1cnJlbnRFbnRyeS5fbmFtZS5zdWJzdHJpbmcoMCwgNCkgPT09ICdpUGFkJykgfHxcbiAgICAgICAgICAgICAgIChjdXJyZW50RW50cnkuX25hbWUgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50RW50cnkuX25hbWUuc3Vic3RyaW5nKDAsIDYpID09PSAnaVBob25lJykgfHxcbiAgICAgICAgICAgICAgIChjdXJyZW50RW50cnkuX25hbWUgJiYgXy5pbmNsdWRlcyhjdXJyZW50RW50cnkuX25hbWUsICdBcHBsZSBUVicpKSkge1xuICAgICAgbGV0IGRldmljZUluZm8gPSB7XG4gICAgICAgIG5hbWU6IGN1cnJlbnRFbnRyeS5fbmFtZSxcbiAgICAgICAgdWRpZDogY3VycmVudEVudHJ5LnNlcmlhbF9udW0sXG4gICAgICAgIHByb2R1Y3RJZDogY3VycmVudEVudHJ5LnByb2R1Y3RfaWQsXG4gICAgICAgIGRldmljZVZlcnNpb246IGN1cnJlbnRFbnRyeS5iY2RfZGV2aWNlXG4gICAgICB9O1xuICAgICAgZGV2aWNlc0ZvdW5kLnB1c2goZGV2aWNlSW5mbyk7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50RW50cnkuX2l0ZW1zKSB7XG4gICAgICBlbnRyaWVzVG9TZWFyY2ggPSBlbnRyaWVzVG9TZWFyY2guY29uY2F0KGN1cnJlbnRFbnRyeS5faXRlbXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGV2aWNlc0ZvdW5kO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRJbnN0cnVtZW50c1BhdGhXaXRob3V0UmV0cnkgKHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIGNvbnN0IGFyZ3MgPSBbJy1maW5kJywgJ2luc3RydW1lbnRzJ107XG4gIGxldCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcblxuICBpZiAoIXN0ZG91dCkge1xuICAgIHN0ZG91dCA9ICcnO1xuICB9XG5cbiAgbGV0IGluc3RydW1lbnRzUGF0aCA9IHN0ZG91dC50cmltKCk7XG5cbiAgaWYgKCFpbnN0cnVtZW50c1BhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHBhdGggdG8gaW5zdHJ1bWVudHMgYmluYXJ5IHVzaW5nICd4Y3J1biAke2FyZ3Muam9pbignICcpfSdgKTtcbiAgfVxuXG4gIHJldHVybiBpbnN0cnVtZW50c1BhdGg7XG59XG5cbmNvbnN0IGdldEluc3RydW1lbnRzUGF0aCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0SW5zdHJ1bWVudHNQYXRoIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0SW5zdHJ1bWVudHNQYXRoV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgfVxuKTtcblxuZnVuY3Rpb24gY2xlYXJJbnRlcm5hbENhY2hlICgpIHtcblxuICAvLyBtZW1vaXplZCBmdW5jdGlvbnNcbiAgY29uc3QgbWVtb2l6ZWQgPSBbXG4gICAgZ2V0UGF0aCwgZ2V0VmVyc2lvbk1lbW9pemVkLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgICBnZXRNYXhUVk9TU0RLLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIF07XG5cbiAgbWVtb2l6ZWQuZm9yRWFjaCgoZikgPT4ge1xuICAgIGlmIChmLmNhY2hlKSB7XG4gICAgICBmLmNhY2hlID0gbmV3IF8ubWVtb2l6ZS5DYWNoZSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCB7XG4gIGdldFBhdGgsIGdldFZlcnNpb24sIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCwgZ2V0TWF4SU9TU0RLLFxuICBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnksIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgY2xlYXJJbnRlcm5hbENhY2hlLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIGdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uLCBnZXRNYXhUVk9TU0RLLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LFxuICBnZXRDbGFuZ1ZlcnNpb24sXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQSxNQUFNQSxHQUFHLEdBQUdDLE9BQU8sQ0FBQ0QsR0FBRztBQUV2QixNQUFNRSxhQUFhLEdBQUcsS0FBSztBQUMzQixNQUFNQyxZQUFZLEdBQUcscUJBQXFCO0FBQzFDLE1BQU1DLHlCQUF5QixHQUFHLENBQUM7QUFFbkMsTUFBTUMsR0FBRyxHQUFHQyxlQUFNLENBQUNDLFNBQVMsQ0FBQyxPQUFPLENBQUM7QUFHckMsU0FBU0MsaUJBQWlCLENBQUVDLElBQUksRUFBRTtFQUNoQyxPQUFPQSxJQUFJLENBQUNDLFNBQVMsQ0FBQ0QsSUFBSSxDQUFDRSxNQUFNLEdBQUdSLFlBQVksQ0FBQ1EsTUFBTSxDQUFDLEtBQUtSLFlBQVk7QUFDM0U7QUFFQSxlQUFlUyxlQUFlLENBQUVDLElBQUksRUFBRUMsT0FBTyxHQUFHWixhQUFhLEVBQUU7RUFDN0QsSUFBSTtJQUNGLE1BQU1h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
@@ -1 +1 @@
1
- {"version":3,"file":"xcode.js","names":["env","process","XCRUN_TIMEOUT","XCODE_SUBDIR","DEFAULT_NUMBER_OF_RETRIES","log","logger","getLogger","hasExpectedSubDir","path","substring","length","runXcrunCommand","args","timeout","res","exec","_","isUndefined","Error","join","err","stderr","message","getPathFromSymlink","failMessage","warn","symlinkPath","legacySymlinkPath","xcodePath","util","hasContent","DEVELOPER_DIR","customPath","fs","exists","mesg","readlink","replace","RegExp","trim","msg","getPathFromXcodeSelect","stdout","xcodeFolderPath","errorAndThrow","getPath","memoize","e","getVersionWithoutRetry","plistPath","resolve","version","plist","parsePlistFile","semver","coerce","CFBundleShortVersionString","getVersionMemoized","retries","retry","getVersion","parse","versionString","patch","major","minor","versionFloat","parseFloat","undefined","toString","getCommandLineToolsVersion","getVersionFunctions","pkg","ign","match","getClangVersion","which","info","getAutomationTraceTemplatePathWithoutRetry","extensions","pathPrefix","pathSuffix","automationTraceTemplatePaths","error","getAutomationTraceTemplatePath","getMaxIOSSDKWithoutRetry","sdkVersion","getMaxIOSSDKFromXcodeVersion","getMaxIOSSDK","getMaxTVOSSDKWithoutRetry","isNaN","getMaxTVOSSDK","getConnectedDevices","cmd","plistContent","parsePlistData","devicesFound","entriesToSearch","currentEntry","pop","Array","concat","_name","includes","deviceInfo","name","udid","serial_num","productId","product_id","deviceVersion","bcd_device","push","_items","getInstrumentsPathWithoutRetry","instrumentsPath","getInstrumentsPath","clearInternalCache","memoized","forEach","f","cache","Cache"],"sources":["../../lib/xcode.js"],"sourcesContent":["import { util, fs, plist, logger } from '@appium/support';\nimport path from 'path';\nimport { retry } from 'asyncbox';\nimport _ from 'lodash';\nimport { parse as parsePlistData } from 'plist';\nimport { exec } from 'teen_process';\nimport semver from 'semver';\n\n\nconst env = process.env;\n\nconst XCRUN_TIMEOUT = 15000;\nconst XCODE_SUBDIR = '/Contents/Developer';\nconst DEFAULT_NUMBER_OF_RETRIES = 3;\n\nconst log = logger.getLogger('Xcode');\n\n\nfunction hasExpectedSubDir (path) {\n return path.substring(path.length - XCODE_SUBDIR.length) === XCODE_SUBDIR;\n}\n\nasync function runXcrunCommand (args, timeout = XCRUN_TIMEOUT) {\n try {\n const res = await exec('xcrun', args, {timeout});\n if (_.isUndefined(res)) {\n throw new Error(`Nothing returned from trying to run 'xcrun ${args.join(' ')}'`);\n }\n return res;\n } catch (err) {\n // the true error can be hidden within the stderr\n if (err.stderr) {\n err.message = `${err.message}: ${err.stderr}`;\n }\n\n throw err;\n }\n}\n\nasync function getPathFromSymlink (failMessage) {\n // Node's invocation of xcode-select sometimes flakes and returns an empty string.\n // Not clear why. As a workaround, Appium can reliably deduce the version in use by checking\n // the locations xcode-select uses to store the selected version's path. This should be 100%\n // reliable so long as the link locations remain the same. However, since we're relying on\n // hardcoded paths, this approach will break the next time Apple changes the symlink location.\n log.warn(`Finding XcodePath by symlink because ${failMessage}`);\n\n const symlinkPath = '/var/db/xcode_select_link';\n const legacySymlinkPath = '/usr/share/xcode-select/xcode_dir_link'; // Xcode < 5.x\n let xcodePath = null;\n\n // xcode-select allows users to override its settings with the DEVELOPER_DIR env var,\n // so check that first\n if (util.hasContent(env.DEVELOPER_DIR)) {\n const customPath = hasExpectedSubDir(env.DEVELOPER_DIR)\n ? env.DEVELOPER_DIR\n : env.DEVELOPER_DIR + XCODE_SUBDIR;\n\n if (await fs.exists(customPath)) {\n xcodePath = customPath;\n } else {\n let mesg = `Could not find path to Xcode, environment variable ` +\n `DEVELOPER_DIR set to: ${env.DEVELOPER_DIR} ` +\n `but no Xcode found`;\n log.warn(mesg);\n throw new Error(mesg);\n }\n } else if (await fs.exists(symlinkPath)) {\n xcodePath = await fs.readlink(symlinkPath);\n } else if (await fs.exists(legacySymlinkPath)) {\n xcodePath = await fs.readlink(legacySymlinkPath);\n }\n\n if (xcodePath) {\n return xcodePath.replace(new RegExp('/$'), '').trim();\n }\n\n // We should only get here is we failed to capture xcode-select's stdout and our\n // other checks failed. Either Apple has moved the symlink to a new location or the user\n // is not using the default install. 99.999% chance it's the latter, so issue a warning\n // should we ever hit the edge case.\n let msg = `Could not find path to Xcode by symlinks located in ${symlinkPath}, or ${legacySymlinkPath}`;\n log.warn(msg);\n throw new Error(msg);\n}\n\nasync function getPathFromXcodeSelect (timeout = XCRUN_TIMEOUT) {\n let {stdout} = await exec('xcode-select', ['--print-path'], {timeout});\n\n // trim and remove trailing slash\n const xcodeFolderPath = stdout.replace(/\\/$/, '').trim();\n\n if (!util.hasContent(xcodeFolderPath)) {\n log.errorAndThrow('xcode-select returned an empty string');\n }\n\n if (await fs.exists(xcodeFolderPath)) {\n return xcodeFolderPath;\n } else {\n const msg = `xcode-select could not find xcode. Path '${xcodeFolderPath}' does not exist.`;\n log.errorAndThrow(msg);\n }\n}\n\nconst getPath = _.memoize(function getPath (timeout = XCRUN_TIMEOUT) {\n // first we try using xcode-select to find the path\n // then we try using the symlinks that Apple has by default\n return (async () => {\n try {\n return await getPathFromXcodeSelect(timeout);\n } catch (e) {\n return await getPathFromSymlink(e.message);\n }\n })();\n});\n\n\nasync function getVersionWithoutRetry (timeout = XCRUN_TIMEOUT) {\n const xcodePath = await getPath(timeout);\n\n // we want to read the CFBundleShortVersionString from Xcode's plist.\n // It should be in /[root]/XCode.app/Contents/\n const plistPath = path.resolve(xcodePath, '..', 'Info.plist');\n\n if (!await fs.exists(plistPath)) {\n throw new Error(`Could not get Xcode version. ${plistPath} does not exist on disk.`);\n }\n\n const version = await plist.parsePlistFile(plistPath);\n return semver.coerce(version.CFBundleShortVersionString);\n}\n\nconst getVersionMemoized = _.memoize(\n function getVersionMemoized (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n return retry(retries, getVersionWithoutRetry, timeout);\n }\n);\n\nasync function getVersion (parse = false, retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n const version = await getVersionMemoized(retries, timeout);\n // xcode version strings are not exactly semver string: patch versions of 0\n // are removed (e.g., '10.0.0' => '10.0')\n const versionString = version.patch > 0 ? version.version : `${version.major}.${version.minor}`;\n if (!parse) {\n return versionString;\n }\n\n return {\n versionString,\n versionFloat: parseFloat(versionString),\n major: version.major,\n minor: version.minor,\n patch: version.patch > 0 ? version.patch : undefined,\n toString () {\n return versionString;\n },\n };\n}\n\nasync function getCommandLineToolsVersion () {\n // there are a number of different ways that the CLI tools version has been\n // represented. Try them from most reliable to least, falling down the chain\n const getVersionFunctions = [\n async () => {\n let pkg = (await exec('pkgutil', ['--pkgs=com.apple.pkg.DevSDK_.*'])).stdout;\n return (await exec('pkgutil', [`--pkg-info=${pkg.trim()}`])).stdout;\n },\n async () => (await exec('pkgutil', [`--pkg-info=com.apple.pkg.CLTools_Executables`])).stdout,\n async () => (await exec('pkgutil', [`--pkg-info=com.apple.pkg.DeveloperToolsCLI`])).stdout,\n ];\n let stdout;\n for (let getVersion of getVersionFunctions) {\n try {\n stdout = await getVersion();\n break;\n } catch (ign) {\n stdout = '';\n }\n }\n\n // stdout should have a line like `version: 8.0.0.0.1.1472435881`\n let match = /^version: (.+)$/m.exec(stdout); // https://regex101.com/r/HV3x4d/1\n return match ? match[1] : undefined;\n}\n\n/**\n * Check https://trac.macports.org/wiki/XcodeVersionInfo\n * to see the actual mapping between clang and other components.\n *\n * @returns {?string} The actual Clang version in x.x.x.x or x.x.x format,\n * which is supplied with Command Line Tools. `null` is returned\n * if CLT are not installed.\n */\nasync function getClangVersion () {\n try {\n await fs.which('clang');\n } catch (e) {\n log.info('Cannot find clang executable on the local system. ' +\n 'Are Xcode Command Line Tools installed?');\n return null;\n }\n const {stdout} = await exec('clang', ['--version']);\n const match = /clang-([0-9.]+)/.exec(stdout);\n if (!match) {\n log.info(`Cannot parse clang version from ${stdout}`);\n return null;\n }\n return match[1];\n}\n\nasync function getAutomationTraceTemplatePathWithoutRetry (timeout = XCRUN_TIMEOUT) {\n const xcodePath = await getPath(timeout);\n\n // for ios 8 and up, the file extension for AutiomationInstrument changed.\n // rather than waste time getting the iOSSDKVersion, just get both paths and see which one exists\n const extensions = ['xrplugin', 'bundle'];\n const pathPrefix = path.resolve(xcodePath, '../Applications/Instruments.app/Contents/PlugIns');\n const pathSuffix = 'Contents/Resources/Automation.tracetemplate';\n let automationTraceTemplatePaths = [\n path.resolve(pathPrefix, `AutomationInstrument.${extensions[0]}`, pathSuffix),\n path.resolve(pathPrefix, `AutomationInstrument.${extensions[1]}`, pathSuffix)\n ];\n\n if (await fs.exists(automationTraceTemplatePaths[0])) {\n return automationTraceTemplatePaths[0];\n }\n\n if (await fs.exists(automationTraceTemplatePaths[1])) {\n return automationTraceTemplatePaths[1];\n }\n\n const msg = 'Could not find Automation.tracetemplate in any of the following' +\n `locations ${automationTraceTemplatePaths.toString()}`;\n log.error(msg);\n throw new Error(msg);\n\n}\n\nconst getAutomationTraceTemplatePath = _.memoize(\n function getAutomationTraceTemplatePath (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n return retry(retries, getAutomationTraceTemplatePathWithoutRetry, timeout);\n }\n);\n\nasync function getMaxIOSSDKWithoutRetry (timeout = XCRUN_TIMEOUT) {\n const version = await getVersion(false, DEFAULT_NUMBER_OF_RETRIES, timeout);\n if (version[0] === '4') {\n return '6.1';\n }\n\n const args = ['--sdk', 'iphonesimulator', '--show-sdk-version'];\n const {stdout} = await runXcrunCommand(args, timeout);\n\n const sdkVersion = stdout.trim();\n const match = /\\d.\\d/.exec(stdout);\n\n if (!match) {\n throw new Error(`xcrun returned a non-numeric iOS SDK version: '${sdkVersion}'`);\n }\n\n return sdkVersion;\n}\n\nasync function getMaxIOSSDKFromXcodeVersion (timeout = XCRUN_TIMEOUT) {\n const version = await getVersion(true, DEFAULT_NUMBER_OF_RETRIES, timeout);\n // as of now, the iOS version associated with an Xcode version is\n // just the Xcode version + 2\n return `${version.major + 2}.${version.minor}`;\n}\n\nconst getMaxIOSSDK = _.memoize(\n function getMaxIOSSDK (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n try {\n return retry(retries, getMaxIOSSDKWithoutRetry, timeout);\n } catch (err) {\n log.warn(`Unable to retrieve maximum iOS version: ${err.message}`);\n log.warn('Guessing from Xcode version');\n return getMaxIOSSDKFromXcodeVersion(timeout);\n }\n }\n);\n\nasync function getMaxTVOSSDKWithoutRetry (timeout = XCRUN_TIMEOUT) {\n const args = ['--sdk', 'appletvsimulator', '--show-sdk-version'];\n const {stdout} = await runXcrunCommand(args, timeout);\n\n const sdkVersion = stdout.trim();\n\n if (isNaN(parseFloat(sdkVersion))) {\n throw new Error(`xcrun returned a non-numeric tvOS SDK version: '${sdkVersion}'`);\n }\n\n return sdkVersion;\n}\n\nconst getMaxTVOSSDK = _.memoize(\n function getMaxTVOSSDK (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n return retry(retries, getMaxTVOSSDKWithoutRetry, timeout);\n }\n);\n\nasync function getConnectedDevices (timeout = XCRUN_TIMEOUT) {\n const cmd = '/usr/sbin/system_profiler';\n const args = ['-xml', 'SPUSBDataType'];\n let {stdout} = await exec(cmd, args, {timeout});\n let plistContent = parsePlistData(stdout);\n\n let devicesFound = [];\n let entriesToSearch = [plistContent[0]];\n while (entriesToSearch.length > 0) {\n let currentEntry = entriesToSearch.pop();\n if (currentEntry instanceof Array) {\n entriesToSearch = entriesToSearch.concat(currentEntry);\n } else if ((currentEntry._name &&\n currentEntry._name.substring(0, 4) === 'iPad') ||\n (currentEntry._name &&\n currentEntry._name.substring(0, 6) === 'iPhone') ||\n (currentEntry._name && _.includes(currentEntry._name, 'Apple TV'))) {\n let deviceInfo = {\n name: currentEntry._name,\n udid: currentEntry.serial_num,\n productId: currentEntry.product_id,\n deviceVersion: currentEntry.bcd_device\n };\n devicesFound.push(deviceInfo);\n } else if (currentEntry._items) {\n entriesToSearch = entriesToSearch.concat(currentEntry._items);\n }\n }\n return devicesFound;\n}\n\nasync function getInstrumentsPathWithoutRetry (timeout = XCRUN_TIMEOUT) {\n const args = ['-find', 'instruments'];\n let {stdout} = await runXcrunCommand(args, timeout);\n\n if (!stdout) {\n stdout = '';\n }\n\n let instrumentsPath = stdout.trim();\n\n if (!instrumentsPath) {\n throw new Error(`Could not find path to instruments binary using 'xcrun ${args.join(' ')}'`);\n }\n\n return instrumentsPath;\n}\n\nconst getInstrumentsPath = _.memoize(\n function getInstrumentsPath (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n return retry(retries, getInstrumentsPathWithoutRetry, timeout);\n }\n);\n\nfunction clearInternalCache () {\n\n // memoized functions\n const memoized = [\n getPath, getVersionMemoized, getAutomationTraceTemplatePath, getMaxIOSSDK,\n getMaxTVOSSDK, getInstrumentsPath,\n ];\n\n memoized.forEach((f) => {\n if (f.cache) {\n f.cache = new _.memoize.Cache();\n }\n });\n}\n\nexport {\n getPath, getVersion, getAutomationTraceTemplatePath, getMaxIOSSDK,\n getAutomationTraceTemplatePathWithoutRetry, getMaxIOSSDKWithoutRetry,\n getConnectedDevices, clearInternalCache, getInstrumentsPath,\n getCommandLineToolsVersion, getMaxTVOSSDK, getMaxTVOSSDKWithoutRetry,\n getClangVersion,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,MAAMA,GAAG,GAAGC,OAAO,CAACD,GAAG;AAEvB,MAAME,aAAa,GAAG,KAAK;AAC3B,MAAMC,YAAY,GAAG,qBAAqB;AAC1C,MAAMC,yBAAyB,GAAG,CAAC;AAEnC,MAAMC,GAAG,GAAGC,eAAM,CAACC,SAAS,CAAC,OAAO,CAAC;AAGrC,SAASC,iBAAiB,CAAEC,IAAI,EAAE;EAChC,OAAOA,IAAI,CAACC,SAAS,CAACD,IAAI,CAACE,MAAM,GAAGR,YAAY,CAACQ,MAAM,CAAC,KAAKR,YAAY;AAC3E;AAEA,eAAeS,eAAe,CAAEC,IAAI,EAAEC,OAAO,GAAGZ,aAAa,EAAE;EAC7D,IAAI;IACF,MAAMa,GAAG,GAAG,MAAM,IAAAC,kBAAI,EAAC,OAAO,EAAEH,IAAI,EAAE;MAACC;IAAO,CAAC,CAAC;IAChD,IAAIG,eAAC,CAACC,WAAW,CAACH,GAAG,CAAC,EAAE;MACtB,MAAM,IAAII,KAAK,CAAE,8CAA6CN,IAAI,CAACO,IAAI,CAAC,GAAG,CAAE,GAAE,CAAC;IAClF;IACA,OAAOL,GAAG;EACZ,CAAC,CAAC,OAAOM,GAAG,EAAE;IAEZ,IAAIA,GAAG,CAACC,MAAM,EAAE;MACdD,GAAG,CAACE,OAAO,GAAI,GAAEF,GAAG,CAACE,OAAQ,KAAIF,GAAG,CAACC,MAAO,EAAC;IAC/C;IAEA,MAAMD,GAAG;EACX;AACF;AAEA,eAAeG,kBAAkB,CAAEC,WAAW,EAAE;EAM9CpB,GAAG,CAACqB,IAAI,CAAE,wCAAuCD,WAAY,EAAC,CAAC;EAE/D,MAAME,WAAW,GAAG,2BAA2B;EAC/C,MAAMC,iBAAiB,GAAG,wCAAwC;EAClE,IAAIC,SAAS,GAAG,IAAI;;EAIpB,IAAIC,aAAI,CAACC,UAAU,CAAC/B,GAAG,CAACgC,aAAa,CAAC,EAAE;IACtC,MAAMC,UAAU,GAAGzB,iBAAiB,CAACR,GAAG,CAACgC,aAAa,CAAC,GACnDhC,GAAG,CAACgC,aAAa,GACjBhC,GAAG,CAACgC,aAAa,GAAG7B,YAAY;IAEpC,IAAI,MAAM+B,WAAE,CAACC,MAAM,CAACF,UAAU,CAAC,EAAE;MAC/BJ,SAAS,GAAGI,UAAU;IACxB,CAAC,MAAM;MACL,IAAIG,IAAI,GAAI,qDAAoD,GACpD,yBAAwBpC,GAAG,CAACgC,aAAc,GAAE,GAC5C,oBAAmB;MAC/B3B,GAAG,CAACqB,IAAI,CAACU,IAAI,CAAC;MACd,MAAM,IAAIjB,KAAK,CAACiB,IAAI,CAAC;IACvB;EACF,CAAC,MAAM,IAAI,MAAMF,WAAE,CAACC,MAAM,CAACR,WAAW,CAAC,EAAE;IACvCE,SAAS,GAAG,MAAMK,WAAE,CAACG,QAAQ,CAACV,WAAW,CAAC;EAC5C,CAAC,MAAM,IAAI,MAAMO,WAAE,CAACC,MAAM,CAACP,iBAAiB,CAAC,EAAE;IAC7CC,SAAS,GAAG,MAAMK,WAAE,CAACG,QAAQ,CAACT,iBAAiB,CAAC;EAClD;EAEA,IAAIC,SAAS,EAAE;IACb,OAAOA,SAAS,CAACS,OAAO,CAAC,IAAIC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAACC,IAAI,EAAE;EACvD;;EAMA,IAAIC,GAAG,GAAI,uDAAsDd,WAAY,QAAOC,iBAAkB,EAAC;EACvGvB,GAAG,CAACqB,IAAI,CAACe,GAAG,CAAC;EACb,MAAM,IAAItB,KAAK,CAACsB,GAAG,CAAC;AACtB;AAEA,eAAeC,sBAAsB,CAAE5B,OAAO,GAAGZ,aAAa,EAAE;EAC9D,IAAI;IAACyC;EAAM,CAAC,GAAG,MAAM,IAAA3B,kBAAI,EAAC,cAAc,EAAE,CAAC,cAAc,CAAC,EAAE;IAACF;EAAO,CAAC,CAAC;;EAGtE,MAAM8B,eAAe,GAAGD,MAAM,CAACL,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAACE,IAAI,EAAE;EAExD,IAAI,CAACV,aAAI,CAACC,UAAU,CAACa,eAAe,CAAC,EAAE;IACrCvC,GAAG,CAACwC,aAAa,CAAC,uCAAuC,CAAC;EAC5D;EAEA,IAAI,MAAMX,WAAE,CAACC,MAAM,CAACS,eAAe,CAAC,EAAE;IACpC,OAAOA,eAAe;EACxB,CAAC,MAAM;IACL,MAAMH,GAAG,GAAI,4CAA2CG,eAAgB,mBAAkB;IAC1FvC,GAAG,CAACwC,aAAa,CAACJ,GAAG,CAAC;EACxB;AACF;AAEA,MAAMK,OAAO,GAAG7B,eAAC,CAAC8B,OAAO,CAAC,SAASD,OAAO,CAAEhC,OAAO,GAAGZ,aAAa,EAAE;EAGnE,OAAO,CAAC,YAAY;IAClB,IAAI;MACF,OAAO,MAAMwC,sBAAsB,CAAC5B,OAAO,CAAC;IAC9C,CAAC,CAAC,OAAOkC,CAAC,EAAE;MACV,OAAO,MAAMxB,kBAAkB,CAACwB,CAAC,CAACzB,OAAO,CAAC;IAC5C;EACF,CAAC,GAAG;AACN,CAAC,CAAC;AAAC;AAGH,eAAe0B,sBAAsB,CAAEnC,OAAO,GAAGZ,aAAa,EAAE;EAC9D,MAAM2B,SAAS,GAAG,MAAMiB,OAAO,CAAChC,OAAO,CAAC;;EAIxC,MAAMoC,SAAS,GAAGzC,aAAI,CAAC0C,OAAO,CAACtB,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC;EAE7D,IAAI,EAAC,MAAMK,WAAE,CAACC,MAAM,CAACe,SAAS,CAAC,GAAE;IAC/B,MAAM,IAAI/B,KAAK,CAAE,gCAA+B+B,SAAU,0BAAyB,CAAC;EACtF;EAEA,MAAME,OAAO,GAAG,MAAMC,cAAK,CAACC,cAAc,CAACJ,SAAS,CAAC;EACrD,OAAOK,eAAM,CAACC,MAAM,CAACJ,OAAO,CAACK,0BAA0B,CAAC;AAC1D;AAEA,MAAMC,kBAAkB,GAAGzC,eAAC,CAAC8B,OAAO,CAClC,SAASW,kBAAkB,CAAEC,OAAO,GAAGvD,yBAAyB,EAAEU,OAAO,GAAGZ,aAAa,EAAE;EACzF,OAAO,IAAA0D,eAAK,EAACD,OAAO,EAAEV,sBAAsB,EAAEnC,OAAO,CAAC;AACxD,CAAC,CACF;AAED,eAAe+C,UAAU,CAAEC,KAAK,GAAG,KAAK,EAAEH,OAAO,GAAGvD,yBAAyB,EAAEU,OAAO,GAAGZ,aAAa,EAAE;EACtG,MAAMkD,OAAO,GAAG,MAAMM,kBAAkB,CAACC,OAAO,EAAE7C,OAAO,CAAC;EAG1D,MAAMiD,aAAa,GAAGX,OAAO,CAACY,KAAK,GAAG,CAAC,GAAGZ,OAAO,CAACA,OAAO,GAAI,GAAEA,OAAO,CAACa,KAAM,IAAGb,OAAO,CAACc,KAAM,EAAC;EAC/F,IAAI,CAACJ,KAAK,EAAE;IACV,OAAOC,aAAa;EACtB;EAEA,OAAO;IACLA,aAAa;IACbI,YAAY,EAAEC,UAAU,CAACL,aAAa,CAAC;IACvCE,KAAK,EAAEb,OAAO,CAACa,KAAK;IACpBC,KAAK,EAAEd,OAAO,CAACc,KAAK;IACpBF,KAAK,EAAEZ,OAAO,CAACY,KAAK,GAAG,CAAC,GAAGZ,OAAO,CAACY,KAAK,GAAGK,SAAS;IACpDC,QAAQ,GAAI;MACV,OAAOP,aAAa;IACtB;EACF,CAAC;AACH;AAEA,eAAeQ,0BAA0B,GAAI;EAG3C,MAAMC,mBAAmB,GAAG,CAC1B,YAAY;IACV,IAAIC,GAAG,GAAG,CAAC,MAAM,IAAAzD,kBAAI,EAAC,SAAS,EAAE,CAAC,gCAAgC,CAAC,CAAC,EAAE2B,MAAM;IAC5E,OAAO,CAAC,MAAM,IAAA3B,kBAAI,EAAC,SAAS,EAAE,CAAE,cAAayD,GAAG,CAACjC,IAAI,EAAG,EAAC,CAAC,CAAC,EAAEG,MAAM;EACrE,CAAC,EACD,YAAY,CAAC,MAAM,IAAA3B,kBAAI,EAAC,SAAS,EAAE,CAAE,8CAA6C,CAAC,CAAC,EAAE2B,MAAM,EAC5F,YAAY,CAAC,MAAM,IAAA3B,kBAAI,EAAC,SAAS,EAAE,CAAE,4CAA2C,CAAC,CAAC,EAAE2B,MAAM,CAC3F;EACD,IAAIA,MAAM;EACV,KAAK,IAAIkB,UAAU,IAAIW,mBAAmB,EAAE;IAC1C,IAAI;MACF7B,MAAM,GAAG,MAAMkB,UAAU,EAAE;MAC3B;IACF,CAAC,CAAC,OAAOa,GAAG,EAAE;MACZ/B,MAAM,GAAG,EAAE;IACb;EACF;;EAGA,IAAIgC,KAAK,GAAG,kBAAkB,CAAC3D,IAAI,CAAC2B,MAAM,CAAC;EAC3C,OAAOgC,KAAK,GAAGA,KAAK,CAAC,CAAC,CAAC,GAAGN,SAAS;AACrC;;AAUA,eAAeO,eAAe,GAAI;EAChC,IAAI;IACF,MAAM1C,WAAE,CAAC2C,KAAK,CAAC,OAAO,CAAC;EACzB,CAAC,CAAC,OAAO7B,CAAC,EAAE;IACV3C,GAAG,CAACyE,IAAI,CAAC,oDAAoD,GAC3D,yCAAyC,CAAC;IAC5C,OAAO,IAAI;EACb;EACA,MAAM;IAACnC;EAAM,CAAC,GAAG,MAAM,IAAA3B,kBAAI,EAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC;EACnD,MAAM2D,KAAK,GAAG,iBAAiB,CAAC3D,IAAI,CAAC2B,MAAM,CAAC;EAC5C,IAAI,CAACgC,KAAK,EAAE;IACVtE,GAAG,CAACyE,IAAI,CAAE,mCAAkCnC,MAAO,EAAC,CAAC;IACrD,OAAO,IAAI;EACb;EACA,OAAOgC,KAAK,CAAC,CAAC,CAAC;AACjB;AAEA,eAAeI,0CAA0C,CAAEjE,OAAO,GAAGZ,aAAa,EAAE;EAClF,MAAM2B,SAAS,GAAG,MAAMiB,OAAO,CAAChC,OAAO,CAAC;;EAIxC,MAAMkE,UAAU,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC;EACzC,MAAMC,UAAU,GAAGxE,aAAI,CAAC0C,OAAO,CAACtB,SAAS,EAAE,kDAAkD,CAAC;EAC9F,MAAMqD,UAAU,GAAG,6CAA6C;EAChE,IAAIC,4BAA4B,GAAG,CACjC1E,aAAI,CAAC0C,OAAO,CAAC8B,UAAU,EAAG,wBAAuBD,UAAU,CAAC,CAAC,CAAE,EAAC,EAAEE,UAAU,CAAC,EAC7EzE,aAAI,CAAC0C,OAAO,CAAC8B,UAAU,EAAG,wBAAuBD,UAAU,CAAC,CAAC,CAAE,EAAC,EAAEE,UAAU,CAAC,CAC9E;EAED,IAAI,MAAMhD,WAAE,CAACC,MAAM,CAACgD,4BAA4B,CAAC,CAAC,CAAC,CAAC,EAAE;IACpD,OAAOA,4BAA4B,CAAC,CAAC,CAAC;EACxC;EAEA,IAAI,MAAMjD,WAAE,CAACC,MAAM,CAACgD,4BAA4B,CAAC,CAAC,CAAC,CAAC,EAAE;IACpD,OAAOA,4BAA4B,CAAC,CAAC,CAAC;EACxC;EAEA,MAAM1C,GAAG,GAAG,iEAAiE,GAChE,aAAY0C,4BAA4B,CAACb,QAAQ,EAAG,EAAC;EAClEjE,GAAG,CAAC+E,KAAK,CAAC3C,GAAG,CAAC;EACd,MAAM,IAAItB,KAAK,CAACsB,GAAG,CAAC;AAEtB;AAEA,MAAM4C,8BAA8B,GAAGpE,eAAC,CAAC8B,OAAO,CAC9C,SAASsC,8BAA8B,CAAE1B,OAAO,GAAGvD,yBAAyB,EAAEU,OAAO,GAAGZ,aAAa,EAAE;EACrG,OAAO,IAAA0D,eAAK,EAACD,OAAO,EAAEoB,0CAA0C,EAAEjE,OAAO,CAAC;AAC5E,CAAC,CACF;AAAC;AAEF,eAAewE,wBAAwB,CAAExE,OAAO,GAAGZ,aAAa,EAAE;EAChE,MAAMkD,OAAO,GAAG,MAAMS,UAAU,CAAC,KAAK,EAAEzD,yBAAyB,EAAEU,OAAO,CAAC;EAC3E,IAAIsC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IACtB,OAAO,KAAK;EACd;EAEA,MAAMvC,IAAI,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,CAAC;EAC/D,MAAM;IAAC8B;EAAM,CAAC,GAAG,MAAM/B,eAAe,CAACC,IAAI,EAAEC,OAAO,CAAC;EAErD,MAAMyE,UAAU,GAAG5C,MAAM,CAACH,IAAI,EAAE;EAChC,MAAMmC,KAAK,GAAG,OAAO,CAAC3D,IAAI,CAAC2B,MAAM,CAAC;EAElC,IAAI,CAACgC,KAAK,EAAE;IACV,MAAM,IAAIxD,KAAK,CAAE,kDAAiDoE,UAAW,GAAE,CAAC;EAClF;EAEA,OAAOA,UAAU;AACnB;AAEA,eAAeC,4BAA4B,CAAE1E,OAAO,GAAGZ,aAAa,EAAE;EACpE,MAAMkD,OAAO,GAAG,MAAMS,UAAU,CAAC,IAAI,EAAEzD,yBAAyB,EAAEU,OAAO,CAAC;EAG1E,OAAQ,GAAEsC,OAAO,CAACa,KAAK,GAAG,CAAE,IAAGb,OAAO,CAACc,KAAM,EAAC;AAChD;AAEA,MAAMuB,YAAY,GAAGxE,eAAC,CAAC8B,OAAO,CAC5B,SAAS0C,YAAY,CAAE9B,OAAO,GAAGvD,yBAAyB,EAAEU,OAAO,GAAGZ,aAAa,EAAE;EACnF,IAAI;IACF,OAAO,IAAA0D,eAAK,EAACD,OAAO,EAAE2B,wBAAwB,EAAExE,OAAO,CAAC;EAC1D,CAAC,CAAC,OAAOO,GAAG,EAAE;IACZhB,GAAG,CAACqB,IAAI,CAAE,2CAA0CL,GAAG,CAACE,OAAQ,EAAC,CAAC;IAClElB,GAAG,CAACqB,IAAI,CAAC,6BAA6B,CAAC;IACvC,OAAO8D,4BAA4B,CAAC1E,OAAO,CAAC;EAC9C;AACF,CAAC,CACF;AAAC;AAEF,eAAe4E,yBAAyB,CAAE5E,OAAO,GAAGZ,aAAa,EAAE;EACjE,MAAMW,IAAI,GAAG,CAAC,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,CAAC;EAChE,MAAM;IAAC8B;EAAM,CAAC,GAAG,MAAM/B,eAAe,CAACC,IAAI,EAAEC,OAAO,CAAC;EAErD,MAAMyE,UAAU,GAAG5C,MAAM,CAACH,IAAI,EAAE;EAEhC,IAAImD,KAAK,CAACvB,UAAU,CAACmB,UAAU,CAAC,CAAC,EAAE;IACjC,MAAM,IAAIpE,KAAK,CAAE,mDAAkDoE,UAAW,GAAE,CAAC;EACnF;EAEA,OAAOA,UAAU;AACnB;AAEA,MAAMK,aAAa,GAAG3E,eAAC,CAAC8B,OAAO,CAC7B,SAAS6C,aAAa,CAAEjC,OAAO,GAAGvD,yBAAyB,EAAEU,OAAO,GAAGZ,aAAa,EAAE;EACpF,OAAO,IAAA0D,eAAK,EAACD,OAAO,EAAE+B,yBAAyB,EAAE5E,OAAO,CAAC;AAC3D,CAAC,CACF;AAAC;AAEF,eAAe+E,mBAAmB,CAAE/E,OAAO,GAAGZ,aAAa,EAAE;EAC3D,MAAM4F,GAAG,GAAG,2BAA2B;EACvC,MAAMjF,IAAI,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;EACtC,IAAI;IAAC8B;EAAM,CAAC,GAAG,MAAM,IAAA3B,kBAAI,EAAC8E,GAAG,EAAEjF,IAAI,EAAE;IAACC;EAAO,CAAC,CAAC;EAC/C,IAAIiF,YAAY,GAAG,IAAAC,YAAc,EAACrD,MAAM,CAAC;EAEzC,IAAIsD,YAAY,GAAG,EAAE;EACrB,IAAIC,eAAe,GAAG,CAACH,YAAY,CAAC,CAAC,CAAC,CAAC;EACvC,OAAOG,eAAe,CAACvF,MAAM,GAAG,CAAC,EAAE;IACjC,IAAIwF,YAAY,GAAGD,eAAe,CAACE,GAAG,EAAE;IACxC,IAAID,YAAY,YAAYE,KAAK,EAAE;MACjCH,eAAe,GAAGA,eAAe,CAACI,MAAM,CAACH,YAAY,CAAC;IACxD,CAAC,MAAM,IAAKA,YAAY,CAACI,KAAK,IAClBJ,YAAY,CAACI,KAAK,CAAC7F,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,IAC7CyF,YAAY,CAACI,KAAK,IAClBJ,YAAY,CAACI,KAAK,CAAC7F,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAS,IAChDyF,YAAY,CAACI,KAAK,IAAItF,eAAC,CAACuF,QAAQ,CAACL,YAAY,CAACI,KAAK,EAAE,UAAU,CAAE,EAAE;MAC7E,IAAIE,UAAU,GAAG;QACfC,IAAI,EAAEP,YAAY,CAACI,KAAK;QACxBI,IAAI,EAAER,YAAY,CAACS,UAAU;QAC7BC,SAAS,EAAEV,YAAY,CAACW,UAAU;QAClCC,aAAa,EAAEZ,YAAY,CAACa;MAC9B,CAAC;MACDf,YAAY,CAACgB,IAAI,CAACR,UAAU,CAAC;IAC/B,CAAC,MAAM,IAAIN,YAAY,CAACe,MAAM,EAAE;MAC9BhB,eAAe,GAAGA,eAAe,CAACI,MAAM,CAACH,YAAY,CAACe,MAAM,CAAC;IAC/D;EACF;EACA,OAAOjB,YAAY;AACrB;AAEA,eAAekB,8BAA8B,CAAErG,OAAO,GAAGZ,aAAa,EAAE;EACtE,MAAMW,IAAI,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC;EACrC,IAAI;IAAC8B;EAAM,CAAC,GAAG,MAAM/B,eAAe,CAACC,IAAI,EAAEC,OAAO,CAAC;EAEnD,IAAI,CAAC6B,MAAM,EAAE;IACXA,MAAM,GAAG,EAAE;EACb;EAEA,IAAIyE,eAAe,GAAGzE,MAAM,CAACH,IAAI,EAAE;EAEnC,IAAI,CAAC4E,eAAe,EAAE;IACpB,MAAM,IAAIjG,KAAK,CAAE,0DAAyDN,IAAI,CAACO,IAAI,CAAC,GAAG,CAAE,GAAE,CAAC;EAC9F;EAEA,OAAOgG,eAAe;AACxB;AAEA,MAAMC,kBAAkB,GAAGpG,eAAC,CAAC8B,OAAO,CAClC,SAASsE,kBAAkB,CAAE1D,OAAO,GAAGvD,yBAAyB,EAAEU,OAAO,GAAGZ,aAAa,EAAE;EACzF,OAAO,IAAA0D,eAAK,EAACD,OAAO,EAAEwD,8BAA8B,EAAErG,OAAO,CAAC;AAChE,CAAC,CACF;AAAC;AAEF,SAASwG,kBAAkB,GAAI;EAG7B,MAAMC,QAAQ,GAAG,CACfzE,OAAO,EAAEY,kBAAkB,EAAE2B,8BAA8B,EAAEI,YAAY,EACzEG,aAAa,EAAEyB,kBAAkB,CAClC;EAEDE,QAAQ,CAACC,OAAO,CAAEC,CAAC,IAAK;IACtB,IAAIA,CAAC,CAACC,KAAK,EAAE;MACXD,CAAC,CAACC,KAAK,GAAG,IAAIzG,eAAC,CAAC8B,OAAO,CAAC4E,KAAK,EAAE;IACjC;EACF,CAAC,CAAC;AACJ"}
1
+ {"version":3,"file":"xcode.js","names":["env","process","XCRUN_TIMEOUT","XCODE_SUBDIR","DEFAULT_NUMBER_OF_RETRIES","log","logger","getLogger","hasExpectedSubDir","path","substring","length","runXcrunCommand","args","timeout","res","exec","_","isUndefined","Error","join","err","stderr","message","getPathFromSymlink","failMessage","warn","symlinkPath","legacySymlinkPath","xcodePath","util","hasContent","DEVELOPER_DIR","customPath","fs","exists","mesg","readlink","replace","RegExp","trim","msg","getPathFromXcodeSelect","stdout","xcodeFolderPath","errorAndThrow","getPath","memoize","e","getVersionWithoutRetry","plistPath","resolve","version","plist","parsePlistFile","semver","coerce","CFBundleShortVersionString","getVersionMemoized","retries","retry","getVersion","parse","versionString","patch","major","minor","versionFloat","parseFloat","undefined","toString","getCommandLineToolsVersion","getVersionFunctions","pkg","ign","match","getClangVersion","which","info","getAutomationTraceTemplatePathWithoutRetry","extensions","pathPrefix","pathSuffix","automationTraceTemplatePaths","error","getAutomationTraceTemplatePath","getMaxIOSSDKWithoutRetry","sdkVersion","getMaxIOSSDKFromXcodeVersion","getMaxIOSSDK","getMaxTVOSSDKWithoutRetry","isNaN","getMaxTVOSSDK","getConnectedDevices","cmd","plistContent","parsePlistData","devicesFound","entriesToSearch","currentEntry","pop","Array","concat","_name","includes","deviceInfo","name","udid","serial_num","productId","product_id","deviceVersion","bcd_device","push","_items","getInstrumentsPathWithoutRetry","instrumentsPath","getInstrumentsPath","clearInternalCache","memoized","forEach","f","cache","Cache"],"sources":["../../lib/xcode.js"],"sourcesContent":["import { util, fs, plist, logger } from '@appium/support';\nimport path from 'path';\nimport { retry } from 'asyncbox';\nimport _ from 'lodash';\nimport { parse as parsePlistData } from 'plist';\nimport { exec } from 'teen_process';\nimport semver from 'semver';\n\n\nconst env = process.env;\n\nconst XCRUN_TIMEOUT = 15000;\nconst XCODE_SUBDIR = '/Contents/Developer';\nconst DEFAULT_NUMBER_OF_RETRIES = 3;\n\nconst log = logger.getLogger('Xcode');\n\n\nfunction hasExpectedSubDir (path) {\n return path.substring(path.length - XCODE_SUBDIR.length) === XCODE_SUBDIR;\n}\n\nasync function runXcrunCommand (args, timeout = XCRUN_TIMEOUT) {\n try {\n const res = await exec('xcrun', args, {timeout});\n if (_.isUndefined(res)) {\n throw new Error(`Nothing returned from trying to run 'xcrun ${args.join(' ')}'`);\n }\n return res;\n } catch (err) {\n // the true error can be hidden within the stderr\n if (err.stderr) {\n err.message = `${err.message}: ${err.stderr}`;\n }\n\n throw err;\n }\n}\n\nasync function getPathFromSymlink (failMessage) {\n // Node's invocation of xcode-select sometimes flakes and returns an empty string.\n // Not clear why. As a workaround, Appium can reliably deduce the version in use by checking\n // the locations xcode-select uses to store the selected version's path. This should be 100%\n // reliable so long as the link locations remain the same. However, since we're relying on\n // hardcoded paths, this approach will break the next time Apple changes the symlink location.\n log.warn(`Finding XcodePath by symlink because ${failMessage}`);\n\n const symlinkPath = '/var/db/xcode_select_link';\n const legacySymlinkPath = '/usr/share/xcode-select/xcode_dir_link'; // Xcode < 5.x\n let xcodePath = null;\n\n // xcode-select allows users to override its settings with the DEVELOPER_DIR env var,\n // so check that first\n if (util.hasContent(env.DEVELOPER_DIR)) {\n const customPath = hasExpectedSubDir(env.DEVELOPER_DIR)\n ? env.DEVELOPER_DIR\n : env.DEVELOPER_DIR + XCODE_SUBDIR;\n\n if (await fs.exists(customPath)) {\n xcodePath = customPath;\n } else {\n let mesg = `Could not find path to Xcode, environment variable ` +\n `DEVELOPER_DIR set to: ${env.DEVELOPER_DIR} ` +\n `but no Xcode found`;\n log.warn(mesg);\n throw new Error(mesg);\n }\n } else if (await fs.exists(symlinkPath)) {\n xcodePath = await fs.readlink(symlinkPath);\n } else if (await fs.exists(legacySymlinkPath)) {\n xcodePath = await fs.readlink(legacySymlinkPath);\n }\n\n if (xcodePath) {\n return xcodePath.replace(new RegExp('/$'), '').trim();\n }\n\n // We should only get here is we failed to capture xcode-select's stdout and our\n // other checks failed. Either Apple has moved the symlink to a new location or the user\n // is not using the default install. 99.999% chance it's the latter, so issue a warning\n // should we ever hit the edge case.\n let msg = `Could not find path to Xcode by symlinks located in ${symlinkPath}, or ${legacySymlinkPath}`;\n log.warn(msg);\n throw new Error(msg);\n}\n\nasync function getPathFromXcodeSelect (timeout = XCRUN_TIMEOUT) {\n let {stdout} = await exec('xcode-select', ['--print-path'], {timeout});\n\n // trim and remove trailing slash\n const xcodeFolderPath = stdout.replace(/\\/$/, '').trim();\n\n if (!util.hasContent(xcodeFolderPath)) {\n log.errorAndThrow('xcode-select returned an empty string');\n }\n\n if (await fs.exists(xcodeFolderPath)) {\n return xcodeFolderPath;\n } else {\n const msg = `xcode-select could not find xcode. Path '${xcodeFolderPath}' does not exist.`;\n log.errorAndThrow(msg);\n }\n}\n\nconst getPath = _.memoize(function getPath (timeout = XCRUN_TIMEOUT) {\n // first we try using xcode-select to find the path\n // then we try using the symlinks that Apple has by default\n return (async () => {\n try {\n return await getPathFromXcodeSelect(timeout);\n } catch (e) {\n return await getPathFromSymlink(e.message);\n }\n })();\n});\n\n\nasync function getVersionWithoutRetry (timeout = XCRUN_TIMEOUT) {\n const xcodePath = await getPath(timeout);\n\n // we want to read the CFBundleShortVersionString from Xcode's plist.\n // It should be in /[root]/XCode.app/Contents/\n const plistPath = path.resolve(xcodePath, '..', 'Info.plist');\n\n if (!await fs.exists(plistPath)) {\n throw new Error(`Could not get Xcode version. ${plistPath} does not exist on disk.`);\n }\n\n const version = await plist.parsePlistFile(plistPath);\n return semver.coerce(version.CFBundleShortVersionString);\n}\n\nconst getVersionMemoized = _.memoize(\n function getVersionMemoized (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n return retry(retries, getVersionWithoutRetry, timeout);\n }\n);\n\nasync function getVersion (parse = false, retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n const version = await getVersionMemoized(retries, timeout);\n // xcode version strings are not exactly semver string: patch versions of 0\n // are removed (e.g., '10.0.0' => '10.0')\n const versionString = version.patch > 0 ? version.version : `${version.major}.${version.minor}`;\n if (!parse) {\n return versionString;\n }\n\n return {\n versionString,\n versionFloat: parseFloat(versionString),\n major: version.major,\n minor: version.minor,\n patch: version.patch > 0 ? version.patch : undefined,\n toString () {\n return versionString;\n },\n };\n}\n\nasync function getCommandLineToolsVersion () {\n // there are a number of different ways that the CLI tools version has been\n // represented. Try them from most reliable to least, falling down the chain\n const getVersionFunctions = [\n async () => {\n let pkg = (await exec('pkgutil', ['--pkgs=com.apple.pkg.DevSDK_.*'])).stdout;\n return (await exec('pkgutil', [`--pkg-info=${pkg.trim()}`])).stdout;\n },\n async () => (await exec('pkgutil', [`--pkg-info=com.apple.pkg.CLTools_Executables`])).stdout,\n async () => (await exec('pkgutil', [`--pkg-info=com.apple.pkg.DeveloperToolsCLI`])).stdout,\n ];\n let stdout;\n for (let getVersion of getVersionFunctions) {\n try {\n stdout = await getVersion();\n break;\n } catch (ign) {\n stdout = '';\n }\n }\n\n // stdout should have a line like `version: 8.0.0.0.1.1472435881`\n let match = /^version: (.+)$/m.exec(stdout); // https://regex101.com/r/HV3x4d/1\n return match ? match[1] : undefined;\n}\n\n/**\n * Check https://trac.macports.org/wiki/XcodeVersionInfo\n * to see the actual mapping between clang and other components.\n *\n * @returns {?string} The actual Clang version in x.x.x.x or x.x.x format,\n * which is supplied with Command Line Tools. `null` is returned\n * if CLT are not installed.\n */\nasync function getClangVersion () {\n try {\n await fs.which('clang');\n } catch (e) {\n log.info('Cannot find clang executable on the local system. ' +\n 'Are Xcode Command Line Tools installed?');\n return null;\n }\n const {stdout} = await exec('clang', ['--version']);\n const match = /clang-([0-9.]+)/.exec(stdout);\n if (!match) {\n log.info(`Cannot parse clang version from ${stdout}`);\n return null;\n }\n return match[1];\n}\n\nasync function getAutomationTraceTemplatePathWithoutRetry (timeout = XCRUN_TIMEOUT) {\n const xcodePath = await getPath(timeout);\n\n // for ios 8 and up, the file extension for AutiomationInstrument changed.\n // rather than waste time getting the iOSSDKVersion, just get both paths and see which one exists\n const extensions = ['xrplugin', 'bundle'];\n const pathPrefix = path.resolve(xcodePath, '../Applications/Instruments.app/Contents/PlugIns');\n const pathSuffix = 'Contents/Resources/Automation.tracetemplate';\n let automationTraceTemplatePaths = [\n path.resolve(pathPrefix, `AutomationInstrument.${extensions[0]}`, pathSuffix),\n path.resolve(pathPrefix, `AutomationInstrument.${extensions[1]}`, pathSuffix)\n ];\n\n if (await fs.exists(automationTraceTemplatePaths[0])) {\n return automationTraceTemplatePaths[0];\n }\n\n if (await fs.exists(automationTraceTemplatePaths[1])) {\n return automationTraceTemplatePaths[1];\n }\n\n const msg = 'Could not find Automation.tracetemplate in any of the following' +\n `locations ${automationTraceTemplatePaths.toString()}`;\n log.error(msg);\n throw new Error(msg);\n\n}\n\nconst getAutomationTraceTemplatePath = _.memoize(\n function getAutomationTraceTemplatePath (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n return retry(retries, getAutomationTraceTemplatePathWithoutRetry, timeout);\n }\n);\n\nasync function getMaxIOSSDKWithoutRetry (timeout = XCRUN_TIMEOUT) {\n const version = await getVersion(false, DEFAULT_NUMBER_OF_RETRIES, timeout);\n if (version[0] === '4') {\n return '6.1';\n }\n\n const args = ['--sdk', 'iphonesimulator', '--show-sdk-version'];\n const {stdout} = await runXcrunCommand(args, timeout);\n\n const sdkVersion = stdout.trim();\n const match = /\\d.\\d/.exec(stdout);\n\n if (!match) {\n throw new Error(`xcrun returned a non-numeric iOS SDK version: '${sdkVersion}'`);\n }\n\n return sdkVersion;\n}\n\nasync function getMaxIOSSDKFromXcodeVersion (timeout = XCRUN_TIMEOUT) {\n const version = await getVersion(true, DEFAULT_NUMBER_OF_RETRIES, timeout);\n // as of now, the iOS version associated with an Xcode version is\n // just the Xcode version + 2\n return `${version.major + 2}.${version.minor}`;\n}\n\nconst getMaxIOSSDK = _.memoize(\n function getMaxIOSSDK (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n try {\n return retry(retries, getMaxIOSSDKWithoutRetry, timeout);\n } catch (err) {\n log.warn(`Unable to retrieve maximum iOS version: ${err.message}`);\n log.warn('Guessing from Xcode version');\n return getMaxIOSSDKFromXcodeVersion(timeout);\n }\n }\n);\n\nasync function getMaxTVOSSDKWithoutRetry (timeout = XCRUN_TIMEOUT) {\n const args = ['--sdk', 'appletvsimulator', '--show-sdk-version'];\n const {stdout} = await runXcrunCommand(args, timeout);\n\n const sdkVersion = stdout.trim();\n\n if (isNaN(parseFloat(sdkVersion))) {\n throw new Error(`xcrun returned a non-numeric tvOS SDK version: '${sdkVersion}'`);\n }\n\n return sdkVersion;\n}\n\nconst getMaxTVOSSDK = _.memoize(\n function getMaxTVOSSDK (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n return retry(retries, getMaxTVOSSDKWithoutRetry, timeout);\n }\n);\n\nasync function getConnectedDevices (timeout = XCRUN_TIMEOUT) {\n const cmd = '/usr/sbin/system_profiler';\n const args = ['-xml', 'SPUSBDataType'];\n let {stdout} = await exec(cmd, args, {timeout});\n let plistContent = parsePlistData(stdout);\n\n let devicesFound = [];\n let entriesToSearch = [plistContent[0]];\n while (entriesToSearch.length > 0) {\n let currentEntry = entriesToSearch.pop();\n if (currentEntry instanceof Array) {\n entriesToSearch = entriesToSearch.concat(currentEntry);\n } else if ((currentEntry._name &&\n currentEntry._name.substring(0, 4) === 'iPad') ||\n (currentEntry._name &&\n currentEntry._name.substring(0, 6) === 'iPhone') ||\n (currentEntry._name && _.includes(currentEntry._name, 'Apple TV'))) {\n let deviceInfo = {\n name: currentEntry._name,\n udid: currentEntry.serial_num,\n productId: currentEntry.product_id,\n deviceVersion: currentEntry.bcd_device\n };\n devicesFound.push(deviceInfo);\n } else if (currentEntry._items) {\n entriesToSearch = entriesToSearch.concat(currentEntry._items);\n }\n }\n return devicesFound;\n}\n\nasync function getInstrumentsPathWithoutRetry (timeout = XCRUN_TIMEOUT) {\n const args = ['-find', 'instruments'];\n let {stdout} = await runXcrunCommand(args, timeout);\n\n if (!stdout) {\n stdout = '';\n }\n\n let instrumentsPath = stdout.trim();\n\n if (!instrumentsPath) {\n throw new Error(`Could not find path to instruments binary using 'xcrun ${args.join(' ')}'`);\n }\n\n return instrumentsPath;\n}\n\nconst getInstrumentsPath = _.memoize(\n function getInstrumentsPath (retries = DEFAULT_NUMBER_OF_RETRIES, timeout = XCRUN_TIMEOUT) {\n return retry(retries, getInstrumentsPathWithoutRetry, timeout);\n }\n);\n\nfunction clearInternalCache () {\n\n // memoized functions\n const memoized = [\n getPath, getVersionMemoized, getAutomationTraceTemplatePath, getMaxIOSSDK,\n getMaxTVOSSDK, getInstrumentsPath,\n ];\n\n memoized.forEach((f) => {\n if (f.cache) {\n f.cache = new _.memoize.Cache();\n }\n });\n}\n\nexport {\n getPath, getVersion, getAutomationTraceTemplatePath, getMaxIOSSDK,\n getAutomationTraceTemplatePathWithoutRetry, getMaxIOSSDKWithoutRetry,\n getConnectedDevices, clearInternalCache, getInstrumentsPath,\n getCommandLineToolsVersion, getMaxTVOSSDK, getMaxTVOSSDKWithoutRetry,\n getClangVersion,\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "ios",
7
7
  "xcode"
8
8
  ],
9
- "version": "4.0.3",
9
+ "version": "4.0.4",
10
10
  "author": "Appium Contributors",
11
11
  "license": "Apache-2.0",
12
12
  "repository": {
@@ -80,6 +80,7 @@
80
80
  "babel-plugin-source-map-support": "^2.2.0",
81
81
  "chai": "^4.1.2",
82
82
  "chai-as-promised": "^7.1.1",
83
+ "conventional-changelog-conventionalcommits": "^5.0.0",
83
84
  "eslint": "^7.32.0",
84
85
  "eslint-config-prettier": "^8.5.0",
85
86
  "eslint-plugin-import": "^2.26.0",