appium-xcode 3.11.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,8 +5,6 @@ appium-xcode
5
5
  [![Dependency Status](https://david-dm.org/appium/appium-xcode.svg)](https://david-dm.org/appium/appium-xcode)
6
6
  [![devDependency Status](https://david-dm.org/appium/appium-xcode/dev-status.svg)](https://david-dm.org/appium/appium-xcode#info=devDependencies)
7
7
 
8
- [![Build Status](https://travis-ci.org/appium/appium-xcode.svg?branch=master)](https://travis-ci.org/appium/appium-xcode)
9
-
10
8
  ES7 module for interacting with Xcode and Xcode-related functions.
11
9
  Used by [Appium](github.com/appium/appium)
12
10
 
package/build/index.js CHANGED
@@ -1,16 +1,18 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
- exports.default = exports.getClangVersion = exports.getMaxTVOSSDKWithoutRetry = exports.getMaxTVOSSDK = exports.getCommandLineToolsVersion = exports.getInstrumentsPath = exports.clearInternalCache = exports.getConnectedDevices = exports.getMaxIOSSDKWithoutRetry = exports.getAutomationTraceTemplatePathWithoutRetry = exports.getMaxIOSSDK = exports.getAutomationTraceTemplatePath = exports.getVersion = exports.getPath = void 0;
6
+ exports.getVersion = exports.getPath = exports.getMaxTVOSSDKWithoutRetry = exports.getMaxTVOSSDK = exports.getMaxIOSSDKWithoutRetry = exports.getMaxIOSSDK = exports.getInstrumentsPath = exports.getConnectedDevices = exports.getCommandLineToolsVersion = exports.getClangVersion = exports.getAutomationTraceTemplatePathWithoutRetry = exports.getAutomationTraceTemplatePath = exports.default = exports.clearInternalCache = void 0;
9
7
 
10
8
  require("source-map-support/register");
11
9
 
12
10
  var xcode = _interopRequireWildcard(require("./lib/xcode"));
13
11
 
12
+ 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); }
13
+
14
+ 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; }
15
+
14
16
  const {
15
17
  getPath,
16
18
  getVersion,
@@ -43,4 +45,4 @@ var _default = xcode;
43
45
  exports.default = _default;require('source-map-support').install();
44
46
 
45
47
 
46
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImdldFBhdGgiLCJnZXRWZXJzaW9uIiwiZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoIiwiZ2V0TWF4SU9TU0RLIiwiZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5IiwiZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5IiwiZ2V0Q29ubmVjdGVkRGV2aWNlcyIsImNsZWFySW50ZXJuYWxDYWNoZSIsImdldEluc3RydW1lbnRzUGF0aCIsImdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uIiwiZ2V0TWF4VFZPU1NESyIsImdldE1heFRWT1NTREtXaXRob3V0UmV0cnkiLCJnZXRDbGFuZ1ZlcnNpb24iLCJ4Y29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7QUFHQSxNQUFNO0FBQ0pBLEVBQUFBLE9BREk7QUFDS0MsRUFBQUEsVUFETDtBQUNpQkMsRUFBQUEsOEJBRGpCO0FBQ2lEQyxFQUFBQSxZQURqRDtBQUVKQyxFQUFBQSwwQ0FGSTtBQUV3Q0MsRUFBQUEsd0JBRnhDO0FBR0pDLEVBQUFBLG1CQUhJO0FBR2lCQyxFQUFBQSxrQkFIakI7QUFHcUNDLEVBQUFBLGtCQUhyQztBQUlKQyxFQUFBQSwwQkFKSTtBQUl3QkMsRUFBQUEsYUFKeEI7QUFJdUNDLEVBQUFBLHlCQUp2QztBQUtKQyxFQUFBQTtBQUxJLElBTUZDLEtBTko7Ozs7Ozs7Ozs7Ozs7O2VBZWVBLEsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgKiBhcyB4Y29kZSBmcm9tICcuL2xpYi94Y29kZSc7XG5cblxuY29uc3Qge1xuICBnZXRQYXRoLCBnZXRWZXJzaW9uLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5LCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksXG4gIGdldENvbm5lY3RlZERldmljZXMsIGNsZWFySW50ZXJuYWxDYWNoZSwgZ2V0SW5zdHJ1bWVudHNQYXRoLFxuICBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiwgZ2V0TWF4VFZPU1NESywgZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q2xhbmdWZXJzaW9uLFxufSA9IHhjb2RlO1xuXG5leHBvcnQge1xuICBnZXRQYXRoLCBnZXRWZXJzaW9uLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5LCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksXG4gIGdldENvbm5lY3RlZERldmljZXMsIGNsZWFySW50ZXJuYWxDYWNoZSwgZ2V0SW5zdHJ1bWVudHNQYXRoLFxuICBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiwgZ2V0TWF4VFZPU1NESywgZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q2xhbmdWZXJzaW9uLFxufTtcbmV4cG9ydCBkZWZhdWx0IHhjb2RlO1xuIl0sImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZVJvb3QiOiIuLiJ9
48
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImdldFBhdGgiLCJnZXRWZXJzaW9uIiwiZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoIiwiZ2V0TWF4SU9TU0RLIiwiZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5IiwiZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5IiwiZ2V0Q29ubmVjdGVkRGV2aWNlcyIsImNsZWFySW50ZXJuYWxDYWNoZSIsImdldEluc3RydW1lbnRzUGF0aCIsImdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uIiwiZ2V0TWF4VFZPU1NESyIsImdldE1heFRWT1NTREtXaXRob3V0UmV0cnkiLCJnZXRDbGFuZ1ZlcnNpb24iLCJ4Y29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRUE7Ozs7OztBQUdBLE1BQU07QUFDSkEsRUFBQUEsT0FESTtBQUNLQyxFQUFBQSxVQURMO0FBQ2lCQyxFQUFBQSw4QkFEakI7QUFDaURDLEVBQUFBLFlBRGpEO0FBRUpDLEVBQUFBLDBDQUZJO0FBRXdDQyxFQUFBQSx3QkFGeEM7QUFHSkMsRUFBQUEsbUJBSEk7QUFHaUJDLEVBQUFBLGtCQUhqQjtBQUdxQ0MsRUFBQUEsa0JBSHJDO0FBSUpDLEVBQUFBLDBCQUpJO0FBSXdCQyxFQUFBQSxhQUp4QjtBQUl1Q0MsRUFBQUEseUJBSnZDO0FBS0pDLEVBQUFBO0FBTEksSUFNRkMsS0FOSjs7Ozs7Ozs7Ozs7Ozs7ZUFlZUEsSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5cbmltcG9ydCAqIGFzIHhjb2RlIGZyb20gJy4vbGliL3hjb2RlJztcblxuXG5jb25zdCB7XG4gIGdldFBhdGgsIGdldFZlcnNpb24sIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCwgZ2V0TWF4SU9TU0RLLFxuICBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnksIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgY2xlYXJJbnRlcm5hbENhY2hlLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIGdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uLCBnZXRNYXhUVk9TU0RLLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LFxuICBnZXRDbGFuZ1ZlcnNpb24sXG59ID0geGNvZGU7XG5cbmV4cG9ydCB7XG4gIGdldFBhdGgsIGdldFZlcnNpb24sIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCwgZ2V0TWF4SU9TU0RLLFxuICBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnksIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgY2xlYXJJbnRlcm5hbENhY2hlLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIGdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uLCBnZXRNYXhUVk9TU0RLLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LFxuICBnZXRDbGFuZ1ZlcnNpb24sXG59O1xuZXhwb3J0IGRlZmF1bHQgeGNvZGU7XG4iXSwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlUm9vdCI6Ii4uIn0=
@@ -5,19 +5,22 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.getVersion = getVersion;
9
- exports.getAutomationTraceTemplatePathWithoutRetry = getAutomationTraceTemplatePathWithoutRetry;
10
- exports.getMaxIOSSDKWithoutRetry = getMaxIOSSDKWithoutRetry;
11
- exports.getConnectedDevices = getConnectedDevices;
12
8
  exports.clearInternalCache = clearInternalCache;
9
+ exports.getAutomationTraceTemplatePath = void 0;
10
+ exports.getAutomationTraceTemplatePathWithoutRetry = getAutomationTraceTemplatePathWithoutRetry;
11
+ exports.getClangVersion = getClangVersion;
13
12
  exports.getCommandLineToolsVersion = getCommandLineToolsVersion;
13
+ exports.getConnectedDevices = getConnectedDevices;
14
+ exports.getMaxIOSSDK = exports.getInstrumentsPath = void 0;
15
+ exports.getMaxIOSSDKWithoutRetry = getMaxIOSSDKWithoutRetry;
16
+ exports.getMaxTVOSSDK = void 0;
14
17
  exports.getMaxTVOSSDKWithoutRetry = getMaxTVOSSDKWithoutRetry;
15
- exports.getClangVersion = getClangVersion;
16
- exports.getMaxTVOSSDK = exports.getInstrumentsPath = exports.getMaxIOSSDK = exports.getAutomationTraceTemplatePath = exports.getPath = void 0;
18
+ exports.getPath = void 0;
19
+ exports.getVersion = getVersion;
17
20
 
18
21
  require("source-map-support/register");
19
22
 
20
- var _appiumSupport = require("appium-support");
23
+ var _support = require("@appium/support");
21
24
 
22
25
  var _path = _interopRequireDefault(require("path"));
23
26
 
@@ -36,7 +39,7 @@ const XCRUN_TIMEOUT = 15000;
36
39
  const XCODE_SUBDIR = '/Contents/Developer';
37
40
  const DEFAULT_NUMBER_OF_RETRIES = 3;
38
41
 
39
- const log = _appiumSupport.logger.getLogger('Xcode');
42
+ const log = _support.logger.getLogger('Xcode');
40
43
 
41
44
  function hasExpectedSubDir(path) {
42
45
  return path.substring(path.length - XCODE_SUBDIR.length) === XCODE_SUBDIR;
@@ -68,20 +71,20 @@ async function getPathFromSymlink(failMessage) {
68
71
  const legacySymlinkPath = '/usr/share/xcode-select/xcode_dir_link';
69
72
  let xcodePath = null;
70
73
 
71
- if (_appiumSupport.util.hasContent(env.DEVELOPER_DIR)) {
74
+ if (_support.util.hasContent(env.DEVELOPER_DIR)) {
72
75
  const customPath = hasExpectedSubDir(env.DEVELOPER_DIR) ? env.DEVELOPER_DIR : env.DEVELOPER_DIR + XCODE_SUBDIR;
73
76
 
74
- if (await _appiumSupport.fs.exists(customPath)) {
77
+ if (await _support.fs.exists(customPath)) {
75
78
  xcodePath = customPath;
76
79
  } else {
77
80
  let mesg = `Could not find path to Xcode, environment variable ` + `DEVELOPER_DIR set to: ${env.DEVELOPER_DIR} ` + `but no Xcode found`;
78
81
  log.warn(mesg);
79
82
  throw new Error(mesg);
80
83
  }
81
- } else if (await _appiumSupport.fs.exists(symlinkPath)) {
82
- xcodePath = await _appiumSupport.fs.readlink(symlinkPath);
83
- } else if (await _appiumSupport.fs.exists(legacySymlinkPath)) {
84
- xcodePath = await _appiumSupport.fs.readlink(legacySymlinkPath);
84
+ } else if (await _support.fs.exists(symlinkPath)) {
85
+ xcodePath = await _support.fs.readlink(symlinkPath);
86
+ } else if (await _support.fs.exists(legacySymlinkPath)) {
87
+ xcodePath = await _support.fs.readlink(legacySymlinkPath);
85
88
  }
86
89
 
87
90
  if (xcodePath) {
@@ -101,11 +104,11 @@ async function getPathFromXcodeSelect(timeout = XCRUN_TIMEOUT) {
101
104
  });
102
105
  const xcodeFolderPath = stdout.replace(/\/$/, '').trim();
103
106
 
104
- if (!_appiumSupport.util.hasContent(xcodeFolderPath)) {
107
+ if (!_support.util.hasContent(xcodeFolderPath)) {
105
108
  log.errorAndThrow('xcode-select returned an empty string');
106
109
  }
107
110
 
108
- if (await _appiumSupport.fs.exists(xcodeFolderPath)) {
111
+ if (await _support.fs.exists(xcodeFolderPath)) {
109
112
  return xcodeFolderPath;
110
113
  } else {
111
114
  const msg = `xcode-select could not find xcode. Path '${xcodeFolderPath}' does not exist.`;
@@ -124,11 +127,11 @@ async function getVersionWithoutRetry(timeout = XCRUN_TIMEOUT) {
124
127
 
125
128
  const plistPath = _path.default.resolve(xcodePath, '..', 'Info.plist');
126
129
 
127
- if (!(await _appiumSupport.fs.exists(plistPath))) {
130
+ if (!(await _support.fs.exists(plistPath))) {
128
131
  throw new Error(`Could not get Xcode version. ${plistPath} does not exist on disk.`);
129
132
  }
130
133
 
131
- const version = await _appiumSupport.plist.parsePlistFile(plistPath);
134
+ const version = await _support.plist.parsePlistFile(plistPath);
132
135
  return _semver.default.coerce(version.CFBundleShortVersionString);
133
136
  }
134
137
 
@@ -180,7 +183,7 @@ async function getCommandLineToolsVersion() {
180
183
 
181
184
  async function getClangVersion() {
182
185
  try {
183
- await _appiumSupport.fs.which('clang');
186
+ await _support.fs.which('clang');
184
187
  } catch (e) {
185
188
  log.info('Cannot find clang executable on the local system. ' + 'Are Xcode Command Line Tools installed?');
186
189
  return null;
@@ -208,11 +211,11 @@ async function getAutomationTraceTemplatePathWithoutRetry(timeout = XCRUN_TIMEOU
208
211
  const pathSuffix = 'Contents/Resources/Automation.tracetemplate';
209
212
  let automationTraceTemplatePaths = [_path.default.resolve(pathPrefix, `AutomationInstrument.${extensions[0]}`, pathSuffix), _path.default.resolve(pathPrefix, `AutomationInstrument.${extensions[1]}`, pathSuffix)];
210
213
 
211
- if (await _appiumSupport.fs.exists(automationTraceTemplatePaths[0])) {
214
+ if (await _support.fs.exists(automationTraceTemplatePaths[0])) {
212
215
  return automationTraceTemplatePaths[0];
213
216
  }
214
217
 
215
- if (await _appiumSupport.fs.exists(automationTraceTemplatePaths[1])) {
218
+ if (await _support.fs.exists(automationTraceTemplatePaths[1])) {
216
219
  return automationTraceTemplatePaths[1];
217
220
  }
218
221
 
@@ -353,4 +356,4 @@ function clearInternalCache() {
353
356
  }require('source-map-support').install();
354
357
 
355
358
 
356
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi94Y29kZS5qcyJdLCJuYW1lcyI6WyJlbnYiLCJwcm9jZXNzIiwiWENSVU5fVElNRU9VVCIsIlhDT0RFX1NVQkRJUiIsIkRFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJoYXNFeHBlY3RlZFN1YkRpciIsInBhdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJydW5YY3J1bkNvbW1hbmQiLCJhcmdzIiwidGltZW91dCIsInJlcyIsIl8iLCJpc1VuZGVmaW5lZCIsIkVycm9yIiwiam9pbiIsImVyciIsInN0ZGVyciIsIm1lc3NhZ2UiLCJnZXRQYXRoRnJvbVN5bWxpbmsiLCJmYWlsTWVzc2FnZSIsIndhcm4iLCJzeW1saW5rUGF0aCIsImxlZ2FjeVN5bWxpbmtQYXRoIiwieGNvZGVQYXRoIiwidXRpbCIsImhhc0NvbnRlbnQiLCJERVZFTE9QRVJfRElSIiwiY3VzdG9tUGF0aCIsImZzIiwiZXhpc3RzIiwibWVzZyIsInJlYWRsaW5rIiwicmVwbGFjZSIsIlJlZ0V4cCIsInRyaW0iLCJtc2ciLCJnZXRQYXRoRnJvbVhjb2RlU2VsZWN0Iiwic3Rkb3V0IiwieGNvZGVGb2xkZXJQYXRoIiwiZXJyb3JBbmRUaHJvdyIsImdldFBhdGgiLCJtZW1vaXplIiwiY2F0Y2giLCJnZXRWZXJzaW9uV2l0aG91dFJldHJ5IiwicGxpc3RQYXRoIiwicmVzb2x2ZSIsInZlcnNpb24iLCJwbGlzdCIsInBhcnNlUGxpc3RGaWxlIiwic2VtdmVyIiwiY29lcmNlIiwiQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmciLCJnZXRWZXJzaW9uTWVtb2l6ZWQiLCJyZXRyaWVzIiwiZ2V0VmVyc2lvbiIsInBhcnNlIiwidmVyc2lvblN0cmluZyIsInBhdGNoIiwibWFqb3IiLCJtaW5vciIsInZlcnNpb25GbG9hdCIsInBhcnNlRmxvYXQiLCJ1bmRlZmluZWQiLCJ0b1N0cmluZyIsImdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uIiwiZ2V0VmVyc2lvbkZ1bmN0aW9ucyIsInBrZyIsImlnbiIsIm1hdGNoIiwiZXhlYyIsImdldENsYW5nVmVyc2lvbiIsIndoaWNoIiwiZSIsImluZm8iLCJnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnkiLCJleHRlbnNpb25zIiwicGF0aFByZWZpeCIsInBhdGhTdWZmaXgiLCJhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzIiwiZXJyb3IiLCJnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgiLCJnZXRNYXhJT1NTREtXaXRob3V0UmV0cnkiLCJzZGtWZXJzaW9uIiwiZ2V0TWF4SU9TU0RLRnJvbVhjb2RlVmVyc2lvbiIsImdldE1heElPU1NESyIsImdldE1heFRWT1NTREtXaXRob3V0UmV0cnkiLCJpc05hTiIsImdldE1heFRWT1NTREsiLCJnZXRDb25uZWN0ZWREZXZpY2VzIiwiY21kIiwicGxpc3RDb250ZW50IiwiZGV2aWNlc0ZvdW5kIiwiZW50cmllc1RvU2VhcmNoIiwiY3VycmVudEVudHJ5IiwicG9wIiwiQXJyYXkiLCJjb25jYXQiLCJfbmFtZSIsImluY2x1ZGVzIiwiZGV2aWNlSW5mbyIsIm5hbWUiLCJ1ZGlkIiwic2VyaWFsX251bSIsInByb2R1Y3RJZCIsInByb2R1Y3RfaWQiLCJkZXZpY2VWZXJzaW9uIiwiYmNkX2RldmljZSIsInB1c2giLCJfaXRlbXMiLCJnZXRJbnN0cnVtZW50c1BhdGhXaXRob3V0UmV0cnkiLCJpbnN0cnVtZW50c1BhdGgiLCJnZXRJbnN0cnVtZW50c1BhdGgiLCJjbGVhckludGVybmFsQ2FjaGUiLCJtZW1vaXplZCIsImZvckVhY2giLCJmIiwiY2FjaGUiLCJDYWNoZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLEdBQUcsR0FBR0MsT0FBTyxDQUFDRCxHQUFwQjtBQUVBLE1BQU1FLGFBQWEsR0FBRyxLQUF0QjtBQUNBLE1B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RUFBYTtBQUNYQSxJQUFBQSxNQUFNLEdBQUcsRUFBVDtBQUNEOztBQUVELE1BQUl5RSxlQUFlLEdBQUd6RSxNQUFNLENBQUNILElBQVAsRUFBdEI7O0FBRUEsTUFBSSxDQUFDNEUsZUFBTCxFQUFzQjtBQUNwQixVQUFNLElBQUlqRyxLQUFKLENBQVcsMERBQXlETCxJQUFJLENBQUNNLElBQUwsQ0FBVSxHQUFWLENBQWUsR0FBbkYsQ0FBTjtBQUNEOztBQUVELFNBQU9nRyxlQUFQO0FBQ0Q7O0FBRUQsTUFBTUMsa0JBQWtCLEdBQUdwRyxnQkFBRThCLE9BQUYsQ0FDekIsU0FBU3NFLGtCQUFULENBQTZCMUQsT0FBTyxHQUFHdEQseUJBQXZDLEVBQWtFVSxPQUFPLEdBQUdaLGFBQTVFLEVBQTJGO0FBQ3pGLFNBQU8scUJBQU13RCxPQUFOLEVBQWV3RCw4QkFBZixFQUErQ3BHLE9BQS9DLENBQVA7QUFDRCxDQUh3QixDQUEzQjs7OztBQU1BLFNBQVN1RyxrQkFBVCxHQUErQjtBQUc3QixRQUFNQyxRQUFRLEdBQUcsQ0FDZnpFLE9BRGUsRUFDTlksa0JBRE0sRUFDYzRCLDhCQURkLEVBQzhDSSxZQUQ5QyxFQUVmRyxhQUZlLEVBRUF3QixrQkFGQSxDQUFqQjtBQUtBRSxFQUFBQSxRQUFRLENBQUNDLE9BQVQsQ0FBa0JDLENBQUQsSUFBTztBQUN0QixRQUFJQSxDQUFDLENBQUNDLEtBQU4sRUFBYTtBQUNYRCxNQUFBQSxDQUFDLENBQUNDLEtBQUYsR0FBVSxJQUFJekcsZ0JBQUU4QixPQUFGLENBQVU0RSxLQUFkLEVBQVY7QUFDRDtBQUNGLEdBSkQ7QUFLRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHV0aWwsIGZzLCBwbGlzdCwgbG9nZ2VyIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXRyeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZVBsaXN0RGF0YSB9IGZyb20gJ3BsaXN0JztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuXG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5jb25zdCBYQ1JVTl9USU1FT1VUID0gMTUwMDA7XG5jb25zdCBYQ09ERV9TVUJESVIgPSAnL0NvbnRlbnRzL0RldmVsb3Blcic7XG5jb25zdCBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTID0gMztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignWGNvZGUnKTtcblxuXG5mdW5jdGlvbiBoYXNFeHBlY3RlZFN1YkRpciAocGF0aCkge1xuICByZXR1cm4gcGF0aC5zdWJzdHJpbmcocGF0aC5sZW5ndGggLSBYQ09ERV9TVUJESVIubGVuZ3RoKSA9PT0gWENPREVfU1VCRElSO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5YY3J1bkNvbW1hbmQgKGFyZ3MsIHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZXhlYygneGNydW4nLCBhcmdzLCB7dGltZW91dH0pO1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm90aGluZyByZXR1cm5lZCBmcm9tIHRyeWluZyB0byBydW4gJ3hjcnVuICR7YXJncy5qb2luKCcgJyl9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyB0aGUgdHJ1ZSBlcnJvciBjYW4gYmUgaGlkZGVuIHdpdGhpbiB0aGUgc3RkZXJyXG4gICAgaWYgKGVyci5zdGRlcnIpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gYCR7ZXJyLm1lc3NhZ2V9OiAke2Vyci5zdGRlcnJ9YDtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UGF0aEZyb21TeW1saW5rIChmYWlsTWVzc2FnZSkge1xuICAvLyBOb2RlJ3MgaW52b2NhdGlvbiBvZiB4Y29kZS1zZWxlY3Qgc29tZXRpbWVzIGZsYWtlcyBhbmQgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG4gIC8vIE5vdCBjbGVhciB3aHkuIEFzIGEgd29ya2Fyb3VuZCwgQXBwaXVtIGNhbiByZWxpYWJseSBkZWR1Y2UgdGhlIHZlcnNpb24gaW4gdXNlIGJ5IGNoZWNraW5nXG4gIC8vIHRoZSBsb2NhdGlvbnMgeGNvZGUtc2VsZWN0IHVzZXMgdG8gc3RvcmUgdGhlIHNlbGVjdGVkIHZlcnNpb24ncyBwYXRoLiBUaGlzIHNob3VsZCBiZSAxMDAlXG4gIC8vIHJlbGlhYmxlIHNvIGxvbmcgYXMgdGhlIGxpbmsgbG9jYXRpb25zIHJlbWFpbiB0aGUgc2FtZS4gSG93ZXZlciwgc2luY2Ugd2UncmUgcmVseWluZyBvblxuICAvLyBoYXJkY29kZWQgcGF0aHMsIHRoaXMgYXBwcm9hY2ggd2lsbCBicmVhayB0aGUgbmV4dCB0aW1lIEFwcGxlIGNoYW5nZXMgdGhlIHN5bWxpbmsgbG9jYXRpb24uXG4gIGxvZy53YXJuKGBGaW5kaW5nIFhjb2RlUGF0aCBieSBzeW1saW5rIGJlY2F1c2UgJHtmYWlsTWVzc2FnZX1gKTtcblxuICBjb25zdCBzeW1saW5rUGF0aCA9ICcvdmFyL2RiL3hjb2RlX3NlbGVjdF9saW5rJztcbiAgY29uc3QgbGVnYWN5U3ltbGlua1BhdGggPSAnL3Vzci9zaGFyZS94Y29kZS1zZWxlY3QveGNvZGVfZGlyX2xpbmsnOyAvLyAgWGNvZGUgPCA1LnhcbiAgbGV0IHhjb2RlUGF0aCA9IG51bGw7XG5cbiAgLy8geGNvZGUtc2VsZWN0IGFsbG93cyB1c2VycyB0byBvdmVycmlkZSBpdHMgc2V0dGluZ3Mgd2l0aCB0aGUgREVWRUxPUEVSX0RJUiBlbnYgdmFyLFxuICAvLyBzbyBjaGVjayB0aGF0IGZpcnN0XG4gIGlmICh1dGlsLmhhc0NvbnRlbnQoZW52LkRFVkVMT1BFUl9ESVIpKSB7XG4gICAgY29uc3QgY3VzdG9tUGF0aCA9IGhhc0V4cGVjdGVkU3ViRGlyKGVudi5ERVZFTE9QRVJfRElSKVxuICAgICAgPyBlbnYuREVWRUxPUEVSX0RJUlxuICAgICAgOiBlbnYuREVWRUxPUEVSX0RJUiArIFhDT0RFX1NVQkRJUjtcblxuICAgIGlmIChhd2FpdCBmcy5leGlzdHMoY3VzdG9tUGF0aCkpIHtcbiAgICAgIHhjb2RlUGF0aCA9IGN1c3RvbVBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBtZXNnID0gYENvdWxkIG5vdCBmaW5kIHBhdGggdG8gWGNvZGUsIGVudmlyb25tZW50IHZhcmlhYmxlIGAgK1xuICAgICAgICAgICAgICAgICBgREVWRUxPUEVSX0RJUiBzZXQgdG86ICR7ZW52LkRFVkVMT1BFUl9ESVJ9IGAgK1xuICAgICAgICAgICAgICAgICBgYnV0IG5vIFhjb2RlIGZvdW5kYDtcbiAgICAgIGxvZy53YXJuKG1lc2cpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc2cpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhd2FpdCBmcy5leGlzdHMoc3ltbGlua1BhdGgpKSB7XG4gICAgeGNvZGVQYXRoID0gYXdhaXQgZnMucmVhZGxpbmsoc3ltbGlua1BhdGgpO1xuICB9IGVsc2UgaWYgKGF3YWl0IGZzLmV4aXN0cyhsZWdhY3lTeW1saW5rUGF0aCkpIHtcbiAgICB4Y29kZVBhdGggPSBhd2FpdCBmcy5yZWFkbGluayhsZWdhY3lTeW1saW5rUGF0aCk7XG4gIH1cblxuICBpZiAoeGNvZGVQYXRoKSB7XG4gICAgcmV0dXJuIHhjb2RlUGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoJy8kJyksICcnKS50cmltKCk7XG4gIH1cblxuICAvLyBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpcyB3ZSBmYWlsZWQgdG8gY2FwdHVyZSB4Y29kZS1zZWxlY3QncyBzdGRvdXQgYW5kIG91clxuICAvLyBvdGhlciBjaGVja3MgZmFpbGVkLiBFaXRoZXIgQXBwbGUgaGFzIG1vdmVkIHRoZSBzeW1saW5rIHRvIGEgbmV3IGxvY2F0aW9uIG9yIHRoZSB1c2VyXG4gIC8vIGlzIG5vdCB1c2luZyB0aGUgZGVmYXVsdCBpbnN0YWxsLiA5OS45OTklIGNoYW5jZSBpdCdzIHRoZSBsYXR0ZXIsIHNvIGlzc3VlIGEgd2FybmluZ1xuICAvLyBzaG91bGQgd2UgZXZlciBoaXQgdGhlIGVkZ2UgY2FzZS5cbiAgbGV0IG1zZyA9IGBDb3VsZCBub3QgZmluZCBwYXRoIHRvIFhjb2RlIGJ5IHN5bWxpbmtzIGxvY2F0ZWQgaW4gJHtzeW1saW5rUGF0aH0sIG9yICR7bGVnYWN5U3ltbGlua1BhdGh9YDtcbiAgbG9nLndhcm4obXNnKTtcbiAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBhdGhGcm9tWGNvZGVTZWxlY3QgKHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIGxldCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3hjb2RlLXNlbGVjdCcsIFsnLS1wcmludC1wYXRoJ10sIHt0aW1lb3V0fSk7XG5cbiAgLy8gdHJpbSBhbmQgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gIGNvbnN0IHhjb2RlRm9sZGVyUGF0aCA9IHN0ZG91dC5yZXBsYWNlKC9cXC8kLywgJycpLnRyaW0oKTtcblxuICBpZiAoIXV0aWwuaGFzQ29udGVudCh4Y29kZUZvbGRlclBhdGgpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ3hjb2RlLXNlbGVjdCByZXR1cm5lZCBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmIChhd2FpdCBmcy5leGlzdHMoeGNvZGVGb2xkZXJQYXRoKSkge1xuICAgIHJldHVybiB4Y29kZUZvbGRlclBhdGg7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbXNnID0gYHhjb2RlLXNlbGVjdCBjb3VsZCBub3QgZmluZCB4Y29kZS4gUGF0aCAnJHt4Y29kZUZvbGRlclBhdGh9JyBkb2VzIG5vdCBleGlzdC5gO1xuICAgIGxvZy5lcnJvckFuZFRocm93KG1zZyk7XG4gIH1cbn1cblxuY29uc3QgZ2V0UGF0aCA9IF8ubWVtb2l6ZShmdW5jdGlvbiBnZXRQYXRoICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAvLyBmaXJzdCB3ZSB0cnkgdXNpbmcgeGNvZGUtc2VsZWN0IHRvIGZpbmQgdGhlIHBhdGhcbiAgLy8gdGhlbiB3ZSB0cnkgdXNpbmcgdGhlIHN5bWxpbmtzIHRoYXQgQXBwbGUgaGFzIGJ5IGRlZmF1bHRcbiAgcmV0dXJuIGdldFBhdGhGcm9tWGNvZGVTZWxlY3QodGltZW91dCkuY2F0Y2goZ2V0UGF0aEZyb21TeW1saW5rKTtcbn0pO1xuXG5cblxuYXN5bmMgZnVuY3Rpb24gZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgeGNvZGVQYXRoID0gYXdhaXQgZ2V0UGF0aCh0aW1lb3V0KTtcblxuICAvLyB3ZSB3YW50IHRvIHJlYWQgdGhlIENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nIGZyb20gWGNvZGUncyBwbGlzdC5cbiAgLy8gSXQgc2hvdWxkIGJlIGluIC9bcm9vdF0vWENvZGUuYXBwL0NvbnRlbnRzL1xuICBjb25zdCBwbGlzdFBhdGggPSBwYXRoLnJlc29sdmUoeGNvZGVQYXRoLCAnLi4nLCAnSW5mby5wbGlzdCcpO1xuXG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHBsaXN0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBnZXQgWGNvZGUgdmVyc2lvbi4gJHtwbGlzdFBhdGh9IGRvZXMgbm90IGV4aXN0IG9uIGRpc2suYCk7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocGxpc3RQYXRoKTtcbiAgcmV0dXJuIHNlbXZlci5jb2VyY2UodmVyc2lvbi5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyk7XG59XG5cbmNvbnN0IGdldFZlcnNpb25NZW1vaXplZCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0VmVyc2lvbk1lbW9pemVkIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFZlcnNpb24gKHBhcnNlID0gZmFsc2UsIHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0VmVyc2lvbk1lbW9pemVkKHJldHJpZXMsIHRpbWVvdXQpO1xuICAvLyB4Y29kZSB2ZXJzaW9uIHN0cmluZ3MgYXJlIG5vdCBleGFjdGx5IHNlbXZlciBzdHJpbmc6IHBhdGNoIHZlcnNpb25zIG9mIDBcbiAgLy8gYXJlIHJlbW92ZWQgKGUuZy4sICcxMC4wLjAnID0+ICcxMC4wJylcbiAgY29uc3QgdmVyc2lvblN0cmluZyA9IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi52ZXJzaW9uIDogYCR7dmVyc2lvbi5tYWpvcn0uJHt2ZXJzaW9uLm1pbm9yfWA7XG4gIGlmICghcGFyc2UpIHtcbiAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvblN0cmluZyxcbiAgICB2ZXJzaW9uRmxvYXQ6IHBhcnNlRmxvYXQodmVyc2lvblN0cmluZyksXG4gICAgbWFqb3I6IHZlcnNpb24ubWFqb3IsXG4gICAgbWlub3I6IHZlcnNpb24ubWlub3IsXG4gICAgcGF0Y2g6IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi5wYXRjaCA6IHVuZGVmaW5lZCxcbiAgICB0b1N0cmluZyAoKSB7XG4gICAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiAoKSB7XG4gIC8vIHRoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgd2F5cyB0aGF0IHRoZSBDTEkgdG9vbHMgdmVyc2lvbiBoYXMgYmVlblxuICAvLyByZXByZXNlbnRlZC4gVHJ5IHRoZW0gZnJvbSBtb3N0IHJlbGlhYmxlIHRvIGxlYXN0LCBmYWxsaW5nIGRvd24gdGhlIGNoYWluXG4gIGNvbnN0IGdldFZlcnNpb25GdW5jdGlvbnMgPSBbXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHBrZyA9IChhd2FpdCBleGVjKCdwa2d1dGlsJywgWyctLXBrZ3M9Y29tLmFwcGxlLnBrZy5EZXZTREtfLionXSkpLnN0ZG91dDtcbiAgICAgIHJldHVybiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz0ke3BrZy50cmltKCl9YF0pKS5zdGRvdXQ7XG4gICAgfSxcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz1jb20uYXBwbGUucGtnLkNMVG9vbHNfRXhlY3V0YWJsZXNgXSkpLnN0ZG91dCxcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz1jb20uYXBwbGUucGtnLkRldmVsb3BlclRvb2xzQ0xJYF0pKS5zdGRvdXQsXG4gIF07XG4gIGxldCBzdGRvdXQ7XG4gIGZvciAobGV0IGdldFZlcnNpb24gb2YgZ2V0VmVyc2lvbkZ1bmN0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICBzdGRvdXQgPSBhd2FpdCBnZXRWZXJzaW9uKCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIHN0ZG91dCA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8vIHN0ZG91dCBzaG91bGQgaGF2ZSBhIGxpbmUgbGlrZSBgdmVyc2lvbjogOC4wLjAuMC4xLjE0NzI0MzU4ODFgXG4gIGxldCBtYXRjaCA9IC9edmVyc2lvbjogKC4rKSQvbS5leGVjKHN0ZG91dCk7IC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvSFYzeDRkLzFcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaHR0cHM6Ly90cmFjLm1hY3BvcnRzLm9yZy93aWtpL1hjb2RlVmVyc2lvbkluZm9cbiAqIHRvIHNlZSB0aGUgYWN0dWFsIG1hcHBpbmcgYmV0d2VlbiBjbGFuZyBhbmQgb3RoZXIgY29tcG9uZW50cy5cbiAqXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGFjdHVhbCBDbGFuZyB2ZXJzaW9uIGluIHgueC54Lnggb3IgeC54LnggZm9ybWF0LFxuICogd2hpY2ggaXMgc3VwcGxpZWQgd2l0aCBDb21tYW5kIExpbmUgVG9vbHMuIGBudWxsYCBpcyByZXR1cm5lZFxuICogaWYgQ0xUIGFyZSBub3QgaW5zdGFsbGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDbGFuZ1ZlcnNpb24gKCkge1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndoaWNoKCdjbGFuZycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmluZm8oJ0Nhbm5vdCBmaW5kIGNsYW5nIGV4ZWN1dGFibGUgb24gdGhlIGxvY2FsIHN5c3RlbS4gJyArXG4gICAgICAnQXJlIFhjb2RlIENvbW1hbmQgTGluZSBUb29scyBpbnN0YWxsZWQ/Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdjbGFuZycsIFsnLS12ZXJzaW9uJ10pO1xuICBjb25zdCBtYXRjaCA9IC9jbGFuZy0oWzAtOS5dKykvLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIGxvZy5pbmZvKGBDYW5ub3QgcGFyc2UgY2xhbmcgdmVyc2lvbiBmcm9tICR7c3Rkb3V0fWApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBtYXRjaFsxXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB4Y29kZVBhdGggPSBhd2FpdCBnZXRQYXRoKHRpbWVvdXQpO1xuXG4gIC8vIGZvciBpb3MgOCBhbmQgdXAsIHRoZSBmaWxlIGV4dGVuc2lvbiBmb3IgQXV0aW9tYXRpb25JbnN0cnVtZW50IGNoYW5nZWQuXG4gIC8vIHJhdGhlciB0aGFuIHdhc3RlIHRpbWUgZ2V0dGluZyB0aGUgaU9TU0RLVmVyc2lvbiwganVzdCBnZXQgYm90aCBwYXRocyBhbmQgc2VlIHdoaWNoIG9uZSBleGlzdHNcbiAgY29uc3QgZXh0ZW5zaW9ucyA9IFsneHJwbHVnaW4nLCAnYnVuZGxlJ107XG4gIGNvbnN0IHBhdGhQcmVmaXggPSBwYXRoLnJlc29sdmUoeGNvZGVQYXRoLCAnLi4vQXBwbGljYXRpb25zL0luc3RydW1lbnRzLmFwcC9Db250ZW50cy9QbHVnSW5zJyk7XG4gIGNvbnN0IHBhdGhTdWZmaXggPSAnQ29udGVudHMvUmVzb3VyY2VzL0F1dG9tYXRpb24udHJhY2V0ZW1wbGF0ZSc7XG4gIGxldCBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzID0gW1xuICAgIHBhdGgucmVzb2x2ZShwYXRoUHJlZml4LCBgQXV0b21hdGlvbkluc3RydW1lbnQuJHtleHRlbnNpb25zWzBdfWAsIHBhdGhTdWZmaXgpLFxuICAgIHBhdGgucmVzb2x2ZShwYXRoUHJlZml4LCBgQXV0b21hdGlvbkluc3RydW1lbnQuJHtleHRlbnNpb25zWzFdfWAsIHBhdGhTdWZmaXgpXG4gIF07XG5cbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzBdKSkge1xuICAgIHJldHVybiBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzBdO1xuICB9XG5cbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzFdKSkge1xuICAgIHJldHVybiBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzFdO1xuICB9XG5cbiAgY29uc3QgbXNnID0gJ0NvdWxkIG5vdCBmaW5kIEF1dG9tYXRpb24udHJhY2V0ZW1wbGF0ZSBpbiBhbnkgb2YgdGhlIGZvbGxvd2luZycgK1xuICAgICAgICAgICAgICBgbG9jYXRpb25zICR7YXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRocy50b1N0cmluZygpfWA7XG4gIGxvZy5lcnJvcihtc2cpO1xuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcblxufVxuXG5jb25zdCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGggPSBfLm1lbW9pemUoXG4gIGZ1bmN0aW9uIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCAocmV0cmllcyA9IERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMsIHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gICAgcmV0dXJuIHJldHJ5KHJldHJpZXMsIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aFdpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldFZlcnNpb24oZmFsc2UsIERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMsIHRpbWVvdXQpO1xuICBpZiAodmVyc2lvblswXSA9PT0gJzQnKSB7XG4gICAgcmV0dXJuICc2LjEnO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJywgJy0tc2hvdy1zZGstdmVyc2lvbiddO1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcblxuICBjb25zdCBzZGtWZXJzaW9uID0gc3Rkb3V0LnRyaW0oKTtcbiAgY29uc3QgbWF0Y2ggPSAvXFxkLlxcZC8uZXhlYyhzdGRvdXQpO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHhjcnVuIHJldHVybmVkIGEgbm9uLW51bWVyaWMgaU9TIFNESyB2ZXJzaW9uOiAnJHtzZGtWZXJzaW9ufSdgKTtcbiAgfVxuXG4gIHJldHVybiBzZGtWZXJzaW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNYXhJT1NTREtGcm9tWGNvZGVWZXJzaW9uICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0VmVyc2lvbih0cnVlLCBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0KTtcbiAgLy8gYXMgb2Ygbm93LCB0aGUgaU9TIHZlcnNpb24gYXNzb2NpYXRlZCB3aXRoIGFuIFhjb2RlIHZlcnNpb24gaXNcbiAgLy8ganVzdCB0aGUgWGNvZGUgdmVyc2lvbiArIDJcbiAgcmV0dXJuIGAke3ZlcnNpb24ubWFqb3IgKyAyfS4ke3ZlcnNpb24ubWlub3J9YDtcbn1cblxuY29uc3QgZ2V0TWF4SU9TU0RLID0gXy5tZW1vaXplKFxuICBmdW5jdGlvbiBnZXRNYXhJT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gcmV0cmlldmUgbWF4aW11bSBpT1MgdmVyc2lvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIGxvZy53YXJuKCdHdWVzc2luZyBmcm9tIFhjb2RlIHZlcnNpb24nKTtcbiAgICAgIHJldHVybiBnZXRNYXhJT1NTREtGcm9tWGNvZGVWZXJzaW9uKHRpbWVvdXQpO1xuICAgIH1cbiAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnYXBwbGV0dnNpbXVsYXRvcicsICctLXNob3ctc2RrLXZlcnNpb24nXTtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBydW5YY3J1bkNvbW1hbmQoYXJncywgdGltZW91dCk7XG5cbiAgY29uc3Qgc2RrVmVyc2lvbiA9IHN0ZG91dC50cmltKCk7XG5cbiAgaWYgKGlzTmFOKHBhcnNlRmxvYXQoc2RrVmVyc2lvbikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB4Y3J1biByZXR1cm5lZCBhIG5vbi1udW1lcmljIHR2T1MgU0RLIHZlcnNpb246ICcke3Nka1ZlcnNpb259J2ApO1xuICB9XG5cbiAgcmV0dXJuIHNka1ZlcnNpb247XG59XG5cbmNvbnN0IGdldE1heFRWT1NTREsgPSBfLm1lbW9pemUoXG4gIGZ1bmN0aW9uIGdldE1heFRWT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHJldHVybiByZXRyeShyZXRyaWVzLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29ubmVjdGVkRGV2aWNlcyAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgY21kID0gJy91c3Ivc2Jpbi9zeXN0ZW1fcHJvZmlsZXInO1xuICBjb25zdCBhcmdzID0gWycteG1sJywgJ1NQVVNCRGF0YVR5cGUnXTtcbiAgbGV0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhjbWQsIGFyZ3MsIHt0aW1lb3V0fSk7XG4gIGxldCBwbGlzdENvbnRlbnQgPSBwYXJzZVBsaXN0RGF0YShzdGRvdXQpO1xuXG4gIGxldCBkZXZpY2VzRm91bmQgPSBbXTtcbiAgbGV0IGVudHJpZXNUb1NlYXJjaCA9IFtwbGlzdENvbnRlbnRbMF1dO1xuICB3aGlsZSAoZW50cmllc1RvU2VhcmNoLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgY3VycmVudEVudHJ5ID0gZW50cmllc1RvU2VhcmNoLnBvcCgpO1xuICAgIGlmIChjdXJyZW50RW50cnkgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgZW50cmllc1RvU2VhcmNoID0gZW50cmllc1RvU2VhcmNoLmNvbmNhdChjdXJyZW50RW50cnkpO1xuICAgIH0gZWxzZSBpZiAoKGN1cnJlbnRFbnRyeS5fbmFtZSAmJlxuICAgICAgICAgICAgICAgIGN1cnJlbnRFbnRyeS5fbmFtZS5zdWJzdHJpbmcoMCwgNCkgPT09ICdpUGFkJykgfHxcbiAgICAgICAgICAgICAgIChjdXJyZW50RW50cnkuX25hbWUgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50RW50cnkuX25hbWUuc3Vic3RyaW5nKDAsIDYpID09PSAnaVBob25lJykgfHxcbiAgICAgICAgICAgICAgIChjdXJyZW50RW50cnkuX25hbWUgJiYgXy5pbmNsdWRlcyhjdXJyZW50RW50cnkuX25hbWUsICdBcHBsZSBUVicpKSkge1xuICAgICAgbGV0IGRldmljZUluZm8gPSB7XG4gICAgICAgIG5hbWU6IGN1cnJlbnRFbnRyeS5fbmFtZSxcbiAgICAgICAgdWRpZDogY3VycmVudEVudHJ5LnNlcmlhbF9udW0sXG4gICAgICAgIHByb2R1Y3RJZDogY3VycmVudEVudHJ5LnByb2R1Y3RfaWQsXG4gICAgICAgIGRldmljZVZlcnNpb246IGN1cnJlbnRFbnRyeS5iY2RfZGV2aWNlXG4gICAgICB9O1xuICAgICAgZGV2aWNlc0ZvdW5kLnB1c2goZGV2aWNlSW5mbyk7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50RW50cnkuX2l0ZW1zKSB7XG4gICAgICBlbnRyaWVzVG9TZWFyY2ggPSBlbnRyaWVzVG9TZWFyY2guY29uY2F0KGN1cnJlbnRFbnRyeS5faXRlbXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGV2aWNlc0ZvdW5kO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRJbnN0cnVtZW50c1BhdGhXaXRob3V0UmV0cnkgKHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIGNvbnN0IGFyZ3MgPSBbJy1maW5kJywgJ2luc3RydW1lbnRzJ107XG4gIGxldCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcblxuICBpZiAoIXN0ZG91dCkge1xuICAgIHN0ZG91dCA9ICcnO1xuICB9XG5cbiAgbGV0IGluc3RydW1lbnRzUGF0aCA9IHN0ZG91dC50cmltKCk7XG5cbiAgaWYgKCFpbnN0cnVtZW50c1BhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHBhdGggdG8gaW5zdHJ1bWVudHMgYmluYXJ5IHVzaW5nICd4Y3J1biAke2FyZ3Muam9pbignICcpfSdgKTtcbiAgfVxuXG4gIHJldHVybiBpbnN0cnVtZW50c1BhdGg7XG59XG5cbmNvbnN0IGdldEluc3RydW1lbnRzUGF0aCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0SW5zdHJ1bWVudHNQYXRoIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0SW5zdHJ1bWVudHNQYXRoV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgfVxuKTtcblxuZnVuY3Rpb24gY2xlYXJJbnRlcm5hbENhY2hlICgpIHtcblxuICAvLyBtZW1vaXplZCBmdW5jdGlvbnNcbiAgY29uc3QgbWVtb2l6ZWQgPSBbXG4gICAgZ2V0UGF0aCwgZ2V0VmVyc2lvbk1lbW9pemVkLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgICBnZXRNYXhUVk9TU0RLLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIF07XG5cbiAgbWVtb2l6ZWQuZm9yRWFjaCgoZikgPT4ge1xuICAgIGlmIChmLmNhY2hlKSB7XG4gICAgICBmLmNhY2hlID0gbmV3IF8ubWVtb2l6ZS5DYWNoZSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCB7XG4gIGdldFBhdGgsIGdldFZlcnNpb24sIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCwgZ2V0TWF4SU9TU0RLLFxuICBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnksIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgY2xlYXJJbnRlcm5hbENhY2hlLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIGdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uLCBnZXRNYXhUVk9TU0RLLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LFxuICBnZXRDbGFuZ1ZlcnNpb24sXG59O1xuIl0sImZpbGUiOiJsaWIveGNvZGUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
359
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi94Y29kZS5qcyJdLCJuYW1lcyI6WyJlbnYiLCJwcm9jZXNzIiwiWENSVU5fVElNRU9VVCIsIlhDT0RFX1NVQkRJUiIsIkRFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJoYXNFeHBlY3RlZFN1YkRpciIsInBhdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJydW5YY3J1bkNvbW1hbmQiLCJhcmdzIiwidGltZW91dCIsInJlcyIsIl8iLCJpc1VuZGVmaW5lZCIsIkVycm9yIiwiam9pbiIsImVyciIsInN0ZGVyciIsIm1lc3NhZ2UiLCJnZXRQYXRoRnJvbVN5bWxpbmsiLCJmYWlsTWVzc2FnZSIsIndhcm4iLCJzeW1saW5rUGF0aCIsImxlZ2FjeVN5bWxpbmtQYXRoIiwieGNvZGVQYXRoIiwidXRpbCIsImhhc0NvbnRlbnQiLCJERVZFTE9QRVJfRElSIiwiY3VzdG9tUGF0aCIsImZzIiwiZXhpc3RzIiwibWVzZyIsInJlYWRsaW5rIiwicmVwbGFjZSIsIlJlZ0V4cCIsInRyaW0iLCJtc2ciLCJnZXRQYXRoRnJvbVhjb2RlU2VsZWN0Iiwic3Rkb3V0IiwieGNvZGVGb2xkZXJQYXRoIiwiZXJyb3JBbmRUaHJvdyIsImdldFBhdGgiLCJtZW1vaXplIiwiY2F0Y2giLCJnZXRWZXJzaW9uV2l0aG91dFJldHJ5IiwicGxpc3RQYXRoIiwicmVzb2x2ZSIsInZlcnNpb24iLCJwbGlzdCIsInBhcnNlUGxpc3RGaWxlIiwic2VtdmVyIiwiY29lcmNlIiwiQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmciLCJnZXRWZXJzaW9uTWVtb2l6ZWQiLCJyZXRyaWVzIiwiZ2V0VmVyc2lvbiIsInBhcnNlIiwidmVyc2lvblN0cmluZyIsInBhdGNoIiwibWFqb3IiLCJtaW5vciIsInZlcnNpb25GbG9hdCIsInBhcnNlRmxvYXQiLCJ1bmRlZmluZWQiLCJ0b1N0cmluZyIsImdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uIiwiZ2V0VmVyc2lvbkZ1bmN0aW9ucyIsInBrZyIsImlnbiIsIm1hdGNoIiwiZXhlYyIsImdldENsYW5nVmVyc2lvbiIsIndoaWNoIiwiZSIsImluZm8iLCJnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnkiLCJleHRlbnNpb25zIiwicGF0aFByZWZpeCIsInBhdGhTdWZmaXgiLCJhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzIiwiZXJyb3IiLCJnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgiLCJnZXRNYXhJT1NTREtXaXRob3V0UmV0cnkiLCJzZGtWZXJzaW9uIiwiZ2V0TWF4SU9TU0RLRnJvbVhjb2RlVmVyc2lvbiIsImdldE1heElPU1NESyIsImdldE1heFRWT1NTREtXaXRob3V0UmV0cnkiLCJpc05hTiIsImdldE1heFRWT1NTREsiLCJnZXRDb25uZWN0ZWREZXZpY2VzIiwiY21kIiwicGxpc3RDb250ZW50IiwiZGV2aWNlc0ZvdW5kIiwiZW50cmllc1RvU2VhcmNoIiwiY3VycmVudEVudHJ5IiwicG9wIiwiQXJyYXkiLCJjb25jYXQiLCJfbmFtZSIsImluY2x1ZGVzIiwiZGV2aWNlSW5mbyIsIm5hbWUiLCJ1ZGlkIiwic2VyaWFsX251bSIsInByb2R1Y3RJZCIsInByb2R1Y3RfaWQiLCJkZXZpY2VWZXJzaW9uIiwiYmNkX2RldmljZSIsInB1c2giLCJfaXRlbXMiLCJnZXRJbnN0cnVtZW50c1BhdGhXaXRob3V0UmV0cnkiLCJpbnN0cnVtZW50c1BhdGgiLCJnZXRJbnN0cnVtZW50c1BhdGgiLCJjbGVhckludGVybmFsQ2FjaGUiLCJtZW1vaXplZCIsImZvckVhY2giLCJmIiwiY2FjaGUiLCJDYWNoZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLEdBQUcsR0FBR0MsT0FBTyxDQUFDRCxHQUFwQjtBQUVBLE1BQU1FLGFBQWEsR0FBRyxLQUF0QjtBQUNB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LElBQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0Q7O0FBRUQsTUFBSXlFLGVBQWUsR0FBR3pFLE1BQU0sQ0FBQ0gsSUFBUCxFQUF0Qjs7QUFFQSxNQUFJLENBQUM0RSxlQUFMLEVBQXNCO0FBQ3BCLFVBQU0sSUFBSWpHLEtBQUosQ0FBVywwREFBeURMLElBQUksQ0FBQ00sSUFBTCxDQUFVLEdBQVYsQ0FBZSxHQUFuRixDQUFOO0FBQ0Q7O0FBRUQsU0FBT2dHLGVBQVA7QUFDRDs7QUFFRCxNQUFNQyxrQkFBa0IsR0FBR3BHLGdCQUFFOEIsT0FBRixDQUN6QixTQUFTc0Usa0JBQVQsQ0FBNkIxRCxPQUFPLEdBQUd0RCx5QkFBdkMsRUFBa0VVLE9BQU8sR0FBR1osYUFBNUUsRUFBMkY7QUFDekYsU0FBTyxxQkFBTXdELE9BQU4sRUFBZXdELDhCQUFmLEVBQStDcEcsT0FBL0MsQ0FBUDtBQUNELENBSHdCLENBQTNCOzs7O0FBTUEsU0FBU3VHLGtCQUFULEdBQStCO0FBRzdCLFFBQU1DLFFBQVEsR0FBRyxDQUNmekUsT0FEZSxFQUNOWSxrQkFETSxFQUNjNEIsOEJBRGQsRUFDOENJLFlBRDlDLEVBRWZHLGFBRmUsRUFFQXdCLGtCQUZBLENBQWpCO0FBS0FFLEVBQUFBLFFBQVEsQ0FBQ0MsT0FBVCxDQUFrQkMsQ0FBRCxJQUFPO0FBQ3RCLFFBQUlBLENBQUMsQ0FBQ0MsS0FBTixFQUFhO0FBQ1hELE1BQUFBLENBQUMsQ0FBQ0MsS0FBRixHQUFVLElBQUl6RyxnQkFBRThCLE9BQUYsQ0FBVTRFLEtBQWQsRUFBVjtBQUNEO0FBQ0YsR0FKRDtBQUtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCwgZnMsIHBsaXN0LCBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXRyeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZVBsaXN0RGF0YSB9IGZyb20gJ3BsaXN0JztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuXG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5jb25zdCBYQ1JVTl9USU1FT1VUID0gMTUwMDA7XG5jb25zdCBYQ09ERV9TVUJESVIgPSAnL0NvbnRlbnRzL0RldmVsb3Blcic7XG5jb25zdCBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTID0gMztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignWGNvZGUnKTtcblxuXG5mdW5jdGlvbiBoYXNFeHBlY3RlZFN1YkRpciAocGF0aCkge1xuICByZXR1cm4gcGF0aC5zdWJzdHJpbmcocGF0aC5sZW5ndGggLSBYQ09ERV9TVUJESVIubGVuZ3RoKSA9PT0gWENPREVfU1VCRElSO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5YY3J1bkNvbW1hbmQgKGFyZ3MsIHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZXhlYygneGNydW4nLCBhcmdzLCB7dGltZW91dH0pO1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm90aGluZyByZXR1cm5lZCBmcm9tIHRyeWluZyB0byBydW4gJ3hjcnVuICR7YXJncy5qb2luKCcgJyl9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyB0aGUgdHJ1ZSBlcnJvciBjYW4gYmUgaGlkZGVuIHdpdGhpbiB0aGUgc3RkZXJyXG4gICAgaWYgKGVyci5zdGRlcnIpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gYCR7ZXJyLm1lc3NhZ2V9OiAke2Vyci5zdGRlcnJ9YDtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UGF0aEZyb21TeW1saW5rIChmYWlsTWVzc2FnZSkge1xuICAvLyBOb2RlJ3MgaW52b2NhdGlvbiBvZiB4Y29kZS1zZWxlY3Qgc29tZXRpbWVzIGZsYWtlcyBhbmQgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG4gIC8vIE5vdCBjbGVhciB3aHkuIEFzIGEgd29ya2Fyb3VuZCwgQXBwaXVtIGNhbiByZWxpYWJseSBkZWR1Y2UgdGhlIHZlcnNpb24gaW4gdXNlIGJ5IGNoZWNraW5nXG4gIC8vIHRoZSBsb2NhdGlvbnMgeGNvZGUtc2VsZWN0IHVzZXMgdG8gc3RvcmUgdGhlIHNlbGVjdGVkIHZlcnNpb24ncyBwYXRoLiBUaGlzIHNob3VsZCBiZSAxMDAlXG4gIC8vIHJlbGlhYmxlIHNvIGxvbmcgYXMgdGhlIGxpbmsgbG9jYXRpb25zIHJlbWFpbiB0aGUgc2FtZS4gSG93ZXZlciwgc2luY2Ugd2UncmUgcmVseWluZyBvblxuICAvLyBoYXJkY29kZWQgcGF0aHMsIHRoaXMgYXBwcm9hY2ggd2lsbCBicmVhayB0aGUgbmV4dCB0aW1lIEFwcGxlIGNoYW5nZXMgdGhlIHN5bWxpbmsgbG9jYXRpb24uXG4gIGxvZy53YXJuKGBGaW5kaW5nIFhjb2RlUGF0aCBieSBzeW1saW5rIGJlY2F1c2UgJHtmYWlsTWVzc2FnZX1gKTtcblxuICBjb25zdCBzeW1saW5rUGF0aCA9ICcvdmFyL2RiL3hjb2RlX3NlbGVjdF9saW5rJztcbiAgY29uc3QgbGVnYWN5U3ltbGlua1BhdGggPSAnL3Vzci9zaGFyZS94Y29kZS1zZWxlY3QveGNvZGVfZGlyX2xpbmsnOyAvLyAgWGNvZGUgPCA1LnhcbiAgbGV0IHhjb2RlUGF0aCA9IG51bGw7XG5cbiAgLy8geGNvZGUtc2VsZWN0IGFsbG93cyB1c2VycyB0byBvdmVycmlkZSBpdHMgc2V0dGluZ3Mgd2l0aCB0aGUgREVWRUxPUEVSX0RJUiBlbnYgdmFyLFxuICAvLyBzbyBjaGVjayB0aGF0IGZpcnN0XG4gIGlmICh1dGlsLmhhc0NvbnRlbnQoZW52LkRFVkVMT1BFUl9ESVIpKSB7XG4gICAgY29uc3QgY3VzdG9tUGF0aCA9IGhhc0V4cGVjdGVkU3ViRGlyKGVudi5ERVZFTE9QRVJfRElSKVxuICAgICAgPyBlbnYuREVWRUxPUEVSX0RJUlxuICAgICAgOiBlbnYuREVWRUxPUEVSX0RJUiArIFhDT0RFX1NVQkRJUjtcblxuICAgIGlmIChhd2FpdCBmcy5leGlzdHMoY3VzdG9tUGF0aCkpIHtcbiAgICAgIHhjb2RlUGF0aCA9IGN1c3RvbVBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBtZXNnID0gYENvdWxkIG5vdCBmaW5kIHBhdGggdG8gWGNvZGUsIGVudmlyb25tZW50IHZhcmlhYmxlIGAgK1xuICAgICAgICAgICAgICAgICBgREVWRUxPUEVSX0RJUiBzZXQgdG86ICR7ZW52LkRFVkVMT1BFUl9ESVJ9IGAgK1xuICAgICAgICAgICAgICAgICBgYnV0IG5vIFhjb2RlIGZvdW5kYDtcbiAgICAgIGxvZy53YXJuKG1lc2cpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc2cpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhd2FpdCBmcy5leGlzdHMoc3ltbGlua1BhdGgpKSB7XG4gICAgeGNvZGVQYXRoID0gYXdhaXQgZnMucmVhZGxpbmsoc3ltbGlua1BhdGgpO1xuICB9IGVsc2UgaWYgKGF3YWl0IGZzLmV4aXN0cyhsZWdhY3lTeW1saW5rUGF0aCkpIHtcbiAgICB4Y29kZVBhdGggPSBhd2FpdCBmcy5yZWFkbGluayhsZWdhY3lTeW1saW5rUGF0aCk7XG4gIH1cblxuICBpZiAoeGNvZGVQYXRoKSB7XG4gICAgcmV0dXJuIHhjb2RlUGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoJy8kJyksICcnKS50cmltKCk7XG4gIH1cblxuICAvLyBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpcyB3ZSBmYWlsZWQgdG8gY2FwdHVyZSB4Y29kZS1zZWxlY3QncyBzdGRvdXQgYW5kIG91clxuICAvLyBvdGhlciBjaGVja3MgZmFpbGVkLiBFaXRoZXIgQXBwbGUgaGFzIG1vdmVkIHRoZSBzeW1saW5rIHRvIGEgbmV3IGxvY2F0aW9uIG9yIHRoZSB1c2VyXG4gIC8vIGlzIG5vdCB1c2luZyB0aGUgZGVmYXVsdCBpbnN0YWxsLiA5OS45OTklIGNoYW5jZSBpdCdzIHRoZSBsYXR0ZXIsIHNvIGlzc3VlIGEgd2FybmluZ1xuICAvLyBzaG91bGQgd2UgZXZlciBoaXQgdGhlIGVkZ2UgY2FzZS5cbiAgbGV0IG1zZyA9IGBDb3VsZCBub3QgZmluZCBwYXRoIHRvIFhjb2RlIGJ5IHN5bWxpbmtzIGxvY2F0ZWQgaW4gJHtzeW1saW5rUGF0aH0sIG9yICR7bGVnYWN5U3ltbGlua1BhdGh9YDtcbiAgbG9nLndhcm4obXNnKTtcbiAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBhdGhGcm9tWGNvZGVTZWxlY3QgKHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIGxldCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3hjb2RlLXNlbGVjdCcsIFsnLS1wcmludC1wYXRoJ10sIHt0aW1lb3V0fSk7XG5cbiAgLy8gdHJpbSBhbmQgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gIGNvbnN0IHhjb2RlRm9sZGVyUGF0aCA9IHN0ZG91dC5yZXBsYWNlKC9cXC8kLywgJycpLnRyaW0oKTtcblxuICBpZiAoIXV0aWwuaGFzQ29udGVudCh4Y29kZUZvbGRlclBhdGgpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ3hjb2RlLXNlbGVjdCByZXR1cm5lZCBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmIChhd2FpdCBmcy5leGlzdHMoeGNvZGVGb2xkZXJQYXRoKSkge1xuICAgIHJldHVybiB4Y29kZUZvbGRlclBhdGg7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbXNnID0gYHhjb2RlLXNlbGVjdCBjb3VsZCBub3QgZmluZCB4Y29kZS4gUGF0aCAnJHt4Y29kZUZvbGRlclBhdGh9JyBkb2VzIG5vdCBleGlzdC5gO1xuICAgIGxvZy5lcnJvckFuZFRocm93KG1zZyk7XG4gIH1cbn1cblxuY29uc3QgZ2V0UGF0aCA9IF8ubWVtb2l6ZShmdW5jdGlvbiBnZXRQYXRoICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAvLyBmaXJzdCB3ZSB0cnkgdXNpbmcgeGNvZGUtc2VsZWN0IHRvIGZpbmQgdGhlIHBhdGhcbiAgLy8gdGhlbiB3ZSB0cnkgdXNpbmcgdGhlIHN5bWxpbmtzIHRoYXQgQXBwbGUgaGFzIGJ5IGRlZmF1bHRcbiAgcmV0dXJuIGdldFBhdGhGcm9tWGNvZGVTZWxlY3QodGltZW91dCkuY2F0Y2goZ2V0UGF0aEZyb21TeW1saW5rKTtcbn0pO1xuXG5cblxuYXN5bmMgZnVuY3Rpb24gZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgeGNvZGVQYXRoID0gYXdhaXQgZ2V0UGF0aCh0aW1lb3V0KTtcblxuICAvLyB3ZSB3YW50IHRvIHJlYWQgdGhlIENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nIGZyb20gWGNvZGUncyBwbGlzdC5cbiAgLy8gSXQgc2hvdWxkIGJlIGluIC9bcm9vdF0vWENvZGUuYXBwL0NvbnRlbnRzL1xuICBjb25zdCBwbGlzdFBhdGggPSBwYXRoLnJlc29sdmUoeGNvZGVQYXRoLCAnLi4nLCAnSW5mby5wbGlzdCcpO1xuXG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHBsaXN0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBnZXQgWGNvZGUgdmVyc2lvbi4gJHtwbGlzdFBhdGh9IGRvZXMgbm90IGV4aXN0IG9uIGRpc2suYCk7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocGxpc3RQYXRoKTtcbiAgcmV0dXJuIHNlbXZlci5jb2VyY2UodmVyc2lvbi5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyk7XG59XG5cbmNvbnN0IGdldFZlcnNpb25NZW1vaXplZCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0VmVyc2lvbk1lbW9pemVkIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFZlcnNpb24gKHBhcnNlID0gZmFsc2UsIHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0VmVyc2lvbk1lbW9pemVkKHJldHJpZXMsIHRpbWVvdXQpO1xuICAvLyB4Y29kZSB2ZXJzaW9uIHN0cmluZ3MgYXJlIG5vdCBleGFjdGx5IHNlbXZlciBzdHJpbmc6IHBhdGNoIHZlcnNpb25zIG9mIDBcbiAgLy8gYXJlIHJlbW92ZWQgKGUuZy4sICcxMC4wLjAnID0+ICcxMC4wJylcbiAgY29uc3QgdmVyc2lvblN0cmluZyA9IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi52ZXJzaW9uIDogYCR7dmVyc2lvbi5tYWpvcn0uJHt2ZXJzaW9uLm1pbm9yfWA7XG4gIGlmICghcGFyc2UpIHtcbiAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvblN0cmluZyxcbiAgICB2ZXJzaW9uRmxvYXQ6IHBhcnNlRmxvYXQodmVyc2lvblN0cmluZyksXG4gICAgbWFqb3I6IHZlcnNpb24ubWFqb3IsXG4gICAgbWlub3I6IHZlcnNpb24ubWlub3IsXG4gICAgcGF0Y2g6IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi5wYXRjaCA6IHVuZGVmaW5lZCxcbiAgICB0b1N0cmluZyAoKSB7XG4gICAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiAoKSB7XG4gIC8vIHRoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgd2F5cyB0aGF0IHRoZSBDTEkgdG9vbHMgdmVyc2lvbiBoYXMgYmVlblxuICAvLyByZXByZXNlbnRlZC4gVHJ5IHRoZW0gZnJvbSBtb3N0IHJlbGlhYmxlIHRvIGxlYXN0LCBmYWxsaW5nIGRvd24gdGhlIGNoYWluXG4gIGNvbnN0IGdldFZlcnNpb25GdW5jdGlvbnMgPSBbXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHBrZyA9IChhd2FpdCBleGVjKCdwa2d1dGlsJywgWyctLXBrZ3M9Y29tLmFwcGxlLnBrZy5EZXZTREtfLionXSkpLnN0ZG91dDtcbiAgICAgIHJldHVybiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz0ke3BrZy50cmltKCl9YF0pKS5zdGRvdXQ7XG4gICAgfSxcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz1jb20uYXBwbGUucGtnLkNMVG9vbHNfRXhlY3V0YWJsZXNgXSkpLnN0ZG91dCxcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz1jb20uYXBwbGUucGtnLkRldmVsb3BlclRvb2xzQ0xJYF0pKS5zdGRvdXQsXG4gIF07XG4gIGxldCBzdGRvdXQ7XG4gIGZvciAobGV0IGdldFZlcnNpb24gb2YgZ2V0VmVyc2lvbkZ1bmN0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICBzdGRvdXQgPSBhd2FpdCBnZXRWZXJzaW9uKCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIHN0ZG91dCA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8vIHN0ZG91dCBzaG91bGQgaGF2ZSBhIGxpbmUgbGlrZSBgdmVyc2lvbjogOC4wLjAuMC4xLjE0NzI0MzU4ODFgXG4gIGxldCBtYXRjaCA9IC9edmVyc2lvbjogKC4rKSQvbS5leGVjKHN0ZG91dCk7IC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvSFYzeDRkLzFcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaHR0cHM6Ly90cmFjLm1hY3BvcnRzLm9yZy93aWtpL1hjb2RlVmVyc2lvbkluZm9cbiAqIHRvIHNlZSB0aGUgYWN0dWFsIG1hcHBpbmcgYmV0d2VlbiBjbGFuZyBhbmQgb3RoZXIgY29tcG9uZW50cy5cbiAqXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGFjdHVhbCBDbGFuZyB2ZXJzaW9uIGluIHgueC54Lnggb3IgeC54LnggZm9ybWF0LFxuICogd2hpY2ggaXMgc3VwcGxpZWQgd2l0aCBDb21tYW5kIExpbmUgVG9vbHMuIGBudWxsYCBpcyByZXR1cm5lZFxuICogaWYgQ0xUIGFyZSBub3QgaW5zdGFsbGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDbGFuZ1ZlcnNpb24gKCkge1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndoaWNoKCdjbGFuZycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmluZm8oJ0Nhbm5vdCBmaW5kIGNsYW5nIGV4ZWN1dGFibGUgb24gdGhlIGxvY2FsIHN5c3RlbS4gJyArXG4gICAgICAnQXJlIFhjb2RlIENvbW1hbmQgTGluZSBUb29scyBpbnN0YWxsZWQ/Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdjbGFuZycsIFsnLS12ZXJzaW9uJ10pO1xuICBjb25zdCBtYXRjaCA9IC9jbGFuZy0oWzAtOS5dKykvLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIGxvZy5pbmZvKGBDYW5ub3QgcGFyc2UgY2xhbmcgdmVyc2lvbiBmcm9tICR7c3Rkb3V0fWApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBtYXRjaFsxXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB4Y29kZVBhdGggPSBhd2FpdCBnZXRQYXRoKHRpbWVvdXQpO1xuXG4gIC8vIGZvciBpb3MgOCBhbmQgdXAsIHRoZSBmaWxlIGV4dGVuc2lvbiBmb3IgQXV0aW9tYXRpb25JbnN0cnVtZW50IGNoYW5nZWQuXG4gIC8vIHJhdGhlciB0aGFuIHdhc3RlIHRpbWUgZ2V0dGluZyB0aGUgaU9TU0RLVmVyc2lvbiwganVzdCBnZXQgYm90aCBwYXRocyBhbmQgc2VlIHdoaWNoIG9uZSBleGlzdHNcbiAgY29uc3QgZXh0ZW5zaW9ucyA9IFsneHJwbHVnaW4nLCAnYnVuZGxlJ107XG4gIGNvbnN0IHBhdGhQcmVmaXggPSBwYXRoLnJlc29sdmUoeGNvZGVQYXRoLCAnLi4vQXBwbGljYXRpb25zL0luc3RydW1lbnRzLmFwcC9Db250ZW50cy9QbHVnSW5zJyk7XG4gIGNvbnN0IHBhdGhTdWZmaXggPSAnQ29udGVudHMvUmVzb3VyY2VzL0F1dG9tYXRpb24udHJhY2V0ZW1wbGF0ZSc7XG4gIGxldCBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzID0gW1xuICAgIHBhdGgucmVzb2x2ZShwYXRoUHJlZml4LCBgQXV0b21hdGlvbkluc3RydW1lbnQuJHtleHRlbnNpb25zWzBdfWAsIHBhdGhTdWZmaXgpLFxuICAgIHBhdGgucmVzb2x2ZShwYXRoUHJlZml4LCBgQXV0b21hdGlvbkluc3RydW1lbnQuJHtleHRlbnNpb25zWzFdfWAsIHBhdGhTdWZmaXgpXG4gIF07XG5cbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzBdKSkge1xuICAgIHJldHVybiBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzBdO1xuICB9XG5cbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzFdKSkge1xuICAgIHJldHVybiBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzFdO1xuICB9XG5cbiAgY29uc3QgbXNnID0gJ0NvdWxkIG5vdCBmaW5kIEF1dG9tYXRpb24udHJhY2V0ZW1wbGF0ZSBpbiBhbnkgb2YgdGhlIGZvbGxvd2luZycgK1xuICAgICAgICAgICAgICBgbG9jYXRpb25zICR7YXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRocy50b1N0cmluZygpfWA7XG4gIGxvZy5lcnJvcihtc2cpO1xuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcblxufVxuXG5jb25zdCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGggPSBfLm1lbW9pemUoXG4gIGZ1bmN0aW9uIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCAocmV0cmllcyA9IERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMsIHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gICAgcmV0dXJuIHJldHJ5KHJldHJpZXMsIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aFdpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldFZlcnNpb24oZmFsc2UsIERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMsIHRpbWVvdXQpO1xuICBpZiAodmVyc2lvblswXSA9PT0gJzQnKSB7XG4gICAgcmV0dXJuICc2LjEnO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJywgJy0tc2hvdy1zZGstdmVyc2lvbiddO1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcblxuICBjb25zdCBzZGtWZXJzaW9uID0gc3Rkb3V0LnRyaW0oKTtcbiAgY29uc3QgbWF0Y2ggPSAvXFxkLlxcZC8uZXhlYyhzdGRvdXQpO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHhjcnVuIHJldHVybmVkIGEgbm9uLW51bWVyaWMgaU9TIFNESyB2ZXJzaW9uOiAnJHtzZGtWZXJzaW9ufSdgKTtcbiAgfVxuXG4gIHJldHVybiBzZGtWZXJzaW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNYXhJT1NTREtGcm9tWGNvZGVWZXJzaW9uICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0VmVyc2lvbih0cnVlLCBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0KTtcbiAgLy8gYXMgb2Ygbm93LCB0aGUgaU9TIHZlcnNpb24gYXNzb2NpYXRlZCB3aXRoIGFuIFhjb2RlIHZlcnNpb24gaXNcbiAgLy8ganVzdCB0aGUgWGNvZGUgdmVyc2lvbiArIDJcbiAgcmV0dXJuIGAke3ZlcnNpb24ubWFqb3IgKyAyfS4ke3ZlcnNpb24ubWlub3J9YDtcbn1cblxuY29uc3QgZ2V0TWF4SU9TU0RLID0gXy5tZW1vaXplKFxuICBmdW5jdGlvbiBnZXRNYXhJT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gcmV0cmlldmUgbWF4aW11bSBpT1MgdmVyc2lvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIGxvZy53YXJuKCdHdWVzc2luZyBmcm9tIFhjb2RlIHZlcnNpb24nKTtcbiAgICAgIHJldHVybiBnZXRNYXhJT1NTREtGcm9tWGNvZGVWZXJzaW9uKHRpbWVvdXQpO1xuICAgIH1cbiAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnYXBwbGV0dnNpbXVsYXRvcicsICctLXNob3ctc2RrLXZlcnNpb24nXTtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBydW5YY3J1bkNvbW1hbmQoYXJncywgdGltZW91dCk7XG5cbiAgY29uc3Qgc2RrVmVyc2lvbiA9IHN0ZG91dC50cmltKCk7XG5cbiAgaWYgKGlzTmFOKHBhcnNlRmxvYXQoc2RrVmVyc2lvbikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB4Y3J1biByZXR1cm5lZCBhIG5vbi1udW1lcmljIHR2T1MgU0RLIHZlcnNpb246ICcke3Nka1ZlcnNpb259J2ApO1xuICB9XG5cbiAgcmV0dXJuIHNka1ZlcnNpb247XG59XG5cbmNvbnN0IGdldE1heFRWT1NTREsgPSBfLm1lbW9pemUoXG4gIGZ1bmN0aW9uIGdldE1heFRWT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHJldHVybiByZXRyeShyZXRyaWVzLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29ubmVjdGVkRGV2aWNlcyAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgY21kID0gJy91c3Ivc2Jpbi9zeXN0ZW1fcHJvZmlsZXInO1xuICBjb25zdCBhcmdzID0gWycteG1sJywgJ1NQVVNCRGF0YVR5cGUnXTtcbiAgbGV0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhjbWQsIGFyZ3MsIHt0aW1lb3V0fSk7XG4gIGxldCBwbGlzdENvbnRlbnQgPSBwYXJzZVBsaXN0RGF0YShzdGRvdXQpO1xuXG4gIGxldCBkZXZpY2VzRm91bmQgPSBbXTtcbiAgbGV0IGVudHJpZXNUb1NlYXJjaCA9IFtwbGlzdENvbnRlbnRbMF1dO1xuICB3aGlsZSAoZW50cmllc1RvU2VhcmNoLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgY3VycmVudEVudHJ5ID0gZW50cmllc1RvU2VhcmNoLnBvcCgpO1xuICAgIGlmIChjdXJyZW50RW50cnkgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgZW50cmllc1RvU2VhcmNoID0gZW50cmllc1RvU2VhcmNoLmNvbmNhdChjdXJyZW50RW50cnkpO1xuICAgIH0gZWxzZSBpZiAoKGN1cnJlbnRFbnRyeS5fbmFtZSAmJlxuICAgICAgICAgICAgICAgIGN1cnJlbnRFbnRyeS5fbmFtZS5zdWJzdHJpbmcoMCwgNCkgPT09ICdpUGFkJykgfHxcbiAgICAgICAgICAgICAgIChjdXJyZW50RW50cnkuX25hbWUgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50RW50cnkuX25hbWUuc3Vic3RyaW5nKDAsIDYpID09PSAnaVBob25lJykgfHxcbiAgICAgICAgICAgICAgIChjdXJyZW50RW50cnkuX25hbWUgJiYgXy5pbmNsdWRlcyhjdXJyZW50RW50cnkuX25hbWUsICdBcHBsZSBUVicpKSkge1xuICAgICAgbGV0IGRldmljZUluZm8gPSB7XG4gICAgICAgIG5hbWU6IGN1cnJlbnRFbnRyeS5fbmFtZSxcbiAgICAgICAgdWRpZDogY3VycmVudEVudHJ5LnNlcmlhbF9udW0sXG4gICAgICAgIHByb2R1Y3RJZDogY3VycmVudEVudHJ5LnByb2R1Y3RfaWQsXG4gICAgICAgIGRldmljZVZlcnNpb246IGN1cnJlbnRFbnRyeS5iY2RfZGV2aWNlXG4gICAgICB9O1xuICAgICAgZGV2aWNlc0ZvdW5kLnB1c2goZGV2aWNlSW5mbyk7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50RW50cnkuX2l0ZW1zKSB7XG4gICAgICBlbnRyaWVzVG9TZWFyY2ggPSBlbnRyaWVzVG9TZWFyY2guY29uY2F0KGN1cnJlbnRFbnRyeS5faXRlbXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGV2aWNlc0ZvdW5kO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRJbnN0cnVtZW50c1BhdGhXaXRob3V0UmV0cnkgKHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIGNvbnN0IGFyZ3MgPSBbJy1maW5kJywgJ2luc3RydW1lbnRzJ107XG4gIGxldCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcblxuICBpZiAoIXN0ZG91dCkge1xuICAgIHN0ZG91dCA9ICcnO1xuICB9XG5cbiAgbGV0IGluc3RydW1lbnRzUGF0aCA9IHN0ZG91dC50cmltKCk7XG5cbiAgaWYgKCFpbnN0cnVtZW50c1BhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHBhdGggdG8gaW5zdHJ1bWVudHMgYmluYXJ5IHVzaW5nICd4Y3J1biAke2FyZ3Muam9pbignICcpfSdgKTtcbiAgfVxuXG4gIHJldHVybiBpbnN0cnVtZW50c1BhdGg7XG59XG5cbmNvbnN0IGdldEluc3RydW1lbnRzUGF0aCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0SW5zdHJ1bWVudHNQYXRoIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0SW5zdHJ1bWVudHNQYXRoV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgfVxuKTtcblxuZnVuY3Rpb24gY2xlYXJJbnRlcm5hbENhY2hlICgpIHtcblxuICAvLyBtZW1vaXplZCBmdW5jdGlvbnNcbiAgY29uc3QgbWVtb2l6ZWQgPSBbXG4gICAgZ2V0UGF0aCwgZ2V0VmVyc2lvbk1lbW9pemVkLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgICBnZXRNYXhUVk9TU0RLLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIF07XG5cbiAgbWVtb2l6ZWQuZm9yRWFjaCgoZikgPT4ge1xuICAgIGlmIChmLmNhY2hlKSB7XG4gICAgICBmLmNhY2hlID0gbmV3IF8ubWVtb2l6ZS5DYWNoZSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCB7XG4gIGdldFBhdGgsIGdldFZlcnNpb24sIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCwgZ2V0TWF4SU9TU0RLLFxuICBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnksIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgY2xlYXJJbnRlcm5hbENhY2hlLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIGdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uLCBnZXRNYXhUVk9TU0RLLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LFxuICBnZXRDbGFuZ1ZlcnNpb24sXG59O1xuIl0sImZpbGUiOiJsaWIveGNvZGUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
package/lib/xcode.js CHANGED
@@ -1,4 +1,4 @@
1
- import { util, fs, plist, logger } from 'appium-support';
1
+ import { util, fs, plist, logger } from '@appium/support';
2
2
  import path from 'path';
3
3
  import { retry } from 'asyncbox';
4
4
  import _ from 'lodash';
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "ios",
7
7
  "xcode"
8
8
  ],
9
- "version": "3.11.0",
9
+ "version": "4.0.0",
10
10
  "author": "appium",
11
11
  "license": "Apache-2.0",
12
12
  "repository": {
@@ -31,13 +31,13 @@
31
31
  "build/lib"
32
32
  ],
33
33
  "dependencies": {
34
+ "@appium/support": "^2.55.3",
34
35
  "@babel/runtime": "^7.0.0",
35
- "appium-support": "^2.4.0",
36
36
  "asyncbox": "^2.3.0",
37
37
  "lodash": "^4.17.4",
38
38
  "plist": "^3.0.1",
39
39
  "semver": "^7.0.0",
40
- "source-map-support": "^0.5.5",
40
+ "source-map-support": "^0.x",
41
41
  "teen_process": "^1.3.0"
42
42
  },
43
43
  "scripts": {
@@ -58,10 +58,10 @@
58
58
  "test"
59
59
  ],
60
60
  "devDependencies": {
61
- "appium-gulp-plugins": "^5.4.0",
61
+ "@appium/gulp-plugins": "^6.0.0",
62
+ "@appium/eslint-config-appium": "^5.0.0",
62
63
  "chai": "^4.1.2",
63
64
  "chai-as-promised": "^7.1.1",
64
- "eslint-config-appium": "^4.2.0",
65
65
  "gulp": "^4.0.0",
66
66
  "mocha": "^9.0.0",
67
67
  "pre-commit": "^1.1.3"