appium 2.0.0-beta.2 → 2.0.0-beta.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +9 -9
  2. package/build/lib/appium-config.schema.json +0 -0
  3. package/build/lib/appium.js +157 -53
  4. package/build/lib/cli/argparse-actions.js +104 -0
  5. package/build/lib/cli/args.js +115 -279
  6. package/build/lib/cli/driver-command.js +11 -1
  7. package/build/lib/cli/extension-command.js +60 -8
  8. package/build/lib/cli/extension.js +30 -7
  9. package/build/lib/cli/npm.js +17 -14
  10. package/build/lib/cli/parser.js +152 -89
  11. package/build/lib/cli/plugin-command.js +11 -1
  12. package/build/lib/cli/utils.js +29 -3
  13. package/build/lib/config-file.js +141 -0
  14. package/build/lib/config.js +76 -61
  15. package/build/lib/driver-config.js +42 -19
  16. package/build/lib/drivers.js +8 -4
  17. package/build/lib/ext-config-io.js +165 -0
  18. package/build/lib/extension-config.js +130 -61
  19. package/build/lib/grid-register.js +22 -24
  20. package/build/lib/logger.js +3 -3
  21. package/build/lib/logsink.js +11 -13
  22. package/build/lib/main.js +197 -77
  23. package/build/lib/plugin-config.js +20 -10
  24. package/build/lib/plugins.js +4 -2
  25. package/build/lib/schema/appium-config-schema.js +252 -0
  26. package/build/lib/schema/arg-spec.js +120 -0
  27. package/build/lib/schema/cli-args.js +173 -0
  28. package/build/lib/schema/cli-transformers.js +76 -0
  29. package/build/lib/schema/index.js +36 -0
  30. package/build/lib/schema/keywords.js +62 -0
  31. package/build/lib/schema/schema.js +357 -0
  32. package/build/lib/utils.js +44 -99
  33. package/lib/appium-config.schema.json +277 -0
  34. package/lib/appium.js +201 -65
  35. package/lib/cli/argparse-actions.js +77 -0
  36. package/lib/cli/args.js +174 -375
  37. package/lib/cli/driver-command.js +4 -0
  38. package/lib/cli/extension-command.js +70 -5
  39. package/lib/cli/extension.js +25 -5
  40. package/lib/cli/npm.js +18 -12
  41. package/lib/cli/parser.js +254 -79
  42. package/lib/cli/plugin-command.js +4 -0
  43. package/lib/cli/utils.js +21 -1
  44. package/lib/config-file.js +227 -0
  45. package/lib/config.js +109 -62
  46. package/lib/driver-config.js +66 -11
  47. package/lib/drivers.js +4 -1
  48. package/lib/ext-config-io.js +287 -0
  49. package/lib/extension-config.js +225 -67
  50. package/lib/grid-register.js +27 -24
  51. package/lib/logger.js +1 -1
  52. package/lib/logsink.js +10 -7
  53. package/lib/main.js +211 -77
  54. package/lib/plugin-config.js +34 -5
  55. package/lib/plugins.js +1 -0
  56. package/lib/schema/appium-config-schema.js +286 -0
  57. package/lib/schema/arg-spec.js +218 -0
  58. package/lib/schema/cli-args.js +273 -0
  59. package/lib/schema/cli-transformers.js +123 -0
  60. package/lib/schema/index.js +2 -0
  61. package/lib/schema/keywords.js +119 -0
  62. package/lib/schema/schema.js +577 -0
  63. package/lib/utils.js +42 -88
  64. package/package.json +55 -80
  65. package/postinstall.js +71 -0
  66. package/types/appium-config.d.ts +197 -0
  67. package/types/types.d.ts +201 -0
  68. package/CHANGELOG.md +0 -3515
  69. package/build/lib/cli/parser-helpers.js +0 -82
  70. package/lib/cli/parser-helpers.js +0 -79
@@ -5,25 +5,22 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.getBuildInfo = getBuildInfo;
9
- exports.validateServerArgs = validateServerArgs;
8
+ exports.APPIUM_VER = void 0;
10
9
  exports.checkNodeOk = checkNodeOk;
11
- exports.showConfig = showConfig;
12
- exports.warnNodeDeprecations = warnNodeDeprecations;
13
- exports.validateTmpDir = validateTmpDir;
14
- exports.getNonDefaultArgs = getNonDefaultArgs;
10
+ exports.getBuildInfo = getBuildInfo;
11
+ exports.getDeprecatedArgs = getDeprecatedArgs;
15
12
  exports.getGitRev = getGitRev;
16
- exports.checkValidPort = checkValidPort;
13
+ exports.getNonDefaultServerArgs = getNonDefaultServerArgs;
14
+ exports.showConfig = showConfig;
17
15
  exports.updateBuildInfo = updateBuildInfo;
18
- exports.APPIUM_VER = void 0;
16
+ exports.validateTmpDir = validateTmpDir;
17
+ exports.warnNodeDeprecations = warnNodeDeprecations;
19
18
 
20
19
  require("source-map-support/register");
21
20
 
22
21
  var _lodash = _interopRequireDefault(require("lodash"));
23
22
 
24
- var _path = _interopRequireDefault(require("path"));
25
-
26
- var _appiumSupport = require("appium-support");
23
+ var _support = require("@appium/support");
27
24
 
28
25
  var _axios = _interopRequireDefault(require("axios"));
29
26
 
@@ -35,13 +32,19 @@ var _logger = _interopRequireDefault(require("./logger"));
35
32
 
36
33
  var _semver = _interopRequireDefault(require("semver"));
37
34
 
38
- const npmPackage = require(_path.default.resolve(_utils.rootDir, 'package.json'));
35
+ var _argparseActions = require("./cli/argparse-actions");
36
+
37
+ var _findUp = _interopRequireDefault(require("find-up"));
38
+
39
+ var _schema = require("./schema/schema");
40
+
41
+ const npmPackage = _support.fs.readPackageJsonFrom(__dirname);
39
42
 
40
43
  const APPIUM_VER = npmPackage.version;
41
44
  exports.APPIUM_VER = APPIUM_VER;
42
45
  const MIN_NODE_VERSION = npmPackage.engines.node;
43
46
  const GIT_META_ROOT = '.git';
44
- const GIT_BINARY = `git${_appiumSupport.system.isWindows() ? '.exe' : ''}`;
47
+ const GIT_BINARY = `git${_support.system.isWindows() ? '.exe' : ''}`;
45
48
  const GITHUB_API = 'https://api.github.com/repos/appium/appium';
46
49
  const BUILD_INFO = {
47
50
  version: APPIUM_VER
@@ -51,6 +54,10 @@ function getNodeVersion() {
51
54
  return _semver.default.coerce(process.version);
52
55
  }
53
56
 
57
+ function isSubClass(candidateClass, superClass) {
58
+ return _lodash.default.isFunction(superClass) && _lodash.default.isFunction(candidateClass) && (candidateClass.prototype instanceof superClass || candidateClass === superClass);
59
+ }
60
+
54
61
  async function updateBuildInfo(useGithubApiFallback = false) {
55
62
  const sha = await getGitRev(useGithubApiFallback);
56
63
 
@@ -66,13 +73,22 @@ async function updateBuildInfo(useGithubApiFallback = false) {
66
73
  }
67
74
  }
68
75
 
76
+ async function findGitRoot() {
77
+ return await (0, _findUp.default)(GIT_META_ROOT, {
78
+ cwd: _utils.rootDir,
79
+ type: 'directory'
80
+ });
81
+ }
82
+
69
83
  async function getGitRev(useGithubApiFallback = false) {
70
- if (await _appiumSupport.fs.exists(_path.default.resolve(_utils.rootDir, GIT_META_ROOT))) {
84
+ const gitRoot = await findGitRoot();
85
+
86
+ if (gitRoot) {
71
87
  try {
72
88
  const {
73
89
  stdout
74
90
  } = await (0, _teen_process.exec)(GIT_BINARY, ['rev-parse', 'HEAD'], {
75
- cwd: _utils.rootDir
91
+ cwd: gitRoot
76
92
  });
77
93
  return stdout.trim();
78
94
  } catch (ign) {}
@@ -105,12 +121,14 @@ async function getGitRev(useGithubApiFallback = false) {
105
121
  }
106
122
 
107
123
  async function getGitTimestamp(commitSha, useGithubApiFallback = false) {
108
- if (await _appiumSupport.fs.exists(_path.default.resolve(_utils.rootDir, GIT_META_ROOT))) {
124
+ const gitRoot = await findGitRoot();
125
+
126
+ if (gitRoot) {
109
127
  try {
110
128
  const {
111
129
  stdout
112
130
  } = await (0, _teen_process.exec)(GIT_BINARY, ['show', '-s', '--format=%ci', commitSha], {
113
- cwd: _utils.rootDir
131
+ cwd: gitRoot
114
132
  });
115
133
  return stdout.trim();
116
134
  } catch (ign) {}
@@ -160,71 +178,68 @@ async function showConfig() {
160
178
  console.log(JSON.stringify(getBuildInfo()));
161
179
  }
162
180
 
163
- function getNonDefaultArgs(parser, args) {
164
- let nonDefaults = {};
181
+ function getNonDefaultServerArgs(parser, args) {
182
+ function typesDiffer(dest) {
183
+ return typeof args[dest] !== typeof defaultsFromSchema[dest];
184
+ }
165
185
 
166
- for (let rawArg of parser.rawArgs) {
167
- let arg = rawArg[1].dest;
186
+ function defaultValueIsArray(dest) {
187
+ return _lodash.default.isArray(defaultsFromSchema[dest]);
188
+ }
168
189
 
169
- if (args[arg] && args[arg] !== rawArg[1].defaultValue) {
170
- nonDefaults[arg] = args[arg];
171
- }
190
+ function argsValueIsArray(dest) {
191
+ return _lodash.default.isArray(args[dest]);
172
192
  }
173
193
 
174
- return nonDefaults;
175
- }
194
+ function arraysDiffer(dest) {
195
+ return _lodash.default.difference(args[dest], defaultsFromSchema[dest]).length > 0;
196
+ }
176
197
 
177
- function checkValidPort(port, portName) {
178
- if (port > 0 && port < 65536) return true;
198
+ function valuesUnequal(dest) {
199
+ return args[dest] !== defaultsFromSchema[dest];
200
+ }
179
201
 
180
- _logger.default.error(`Port '${portName}' must be greater than 0 and less than 65536. Currently ${port}`);
202
+ function defaultIsDefined(dest) {
203
+ return !_lodash.default.isUndefined(defaultsFromSchema[dest]);
204
+ }
181
205
 
182
- return false;
183
- }
206
+ const argValueNotArrayOrArraysDiffer = _lodash.default.overSome([_lodash.default.negate(argsValueIsArray), arraysDiffer]);
184
207
 
185
- function validateServerArgs(parser, args) {
186
- let exclusives = [['noReset', 'fullReset'], ['ipa', 'safari'], ['app', 'safari'], ['forceIphone', 'forceIpad'], ['deviceName', 'defaultDevice']];
208
+ const defaultValueNotArrayAndValuesUnequal = _lodash.default.overEvery([_lodash.default.negate(defaultValueIsArray), valuesUnequal]);
187
209
 
188
- for (let exSet of exclusives) {
189
- let numFoundInArgs = 0;
210
+ const isNotDefault = _lodash.default.overEvery([defaultIsDefined, _lodash.default.overSome([typesDiffer, _lodash.default.overEvery([defaultValueIsArray, argValueNotArrayOrArraysDiffer]), defaultValueNotArrayAndValuesUnequal])]);
190
211
 
191
- for (let opt of exSet) {
192
- if (_lodash.default.has(args, opt) && args[opt]) {
193
- numFoundInArgs++;
194
- }
195
- }
212
+ const defaultsFromSchema = (0, _schema.getDefaultsFromSchema)();
213
+ return _lodash.default.pickBy(args, (__, key) => isNotDefault(key));
214
+ }
196
215
 
197
- if (numFoundInArgs > 1) {
198
- throw new Error(`You can't pass in more than one argument from the ` + `set ${JSON.stringify(exSet)}, since they are ` + `mutually exclusive`);
216
+ function getDeprecatedArgs(parser, args) {
217
+ return parser.rawArgs.reduce((acc, [[name], {
218
+ dest,
219
+ default: defaultValue,
220
+ action
221
+ }]) => {
222
+ if (!args[dest] || args[dest] === defaultValue) {
223
+ return acc;
199
224
  }
200
- }
201
225
 
202
- const validations = {
203
- port: checkValidPort,
204
- callbackPort: checkValidPort,
205
- bootstrapPort: checkValidPort,
206
- chromedriverPort: checkValidPort,
207
- robotPort: checkValidPort,
208
- backendRetries: r => r >= 0
209
- };
210
- const nonDefaultArgs = getNonDefaultArgs(parser, args);
211
-
212
- for (let [arg, validator] of _lodash.default.toPairs(validations)) {
213
- if (_lodash.default.has(nonDefaultArgs, arg)) {
214
- if (!validator(args[arg], arg)) {
215
- throw new Error(`Invalid argument for param ${arg}: ${args[arg]}`);
216
- }
226
+ if (action !== null && action !== void 0 && action.deprecated_for) {
227
+ acc[name] = action.deprecated_for;
228
+ } else if (isSubClass(action, _argparseActions.StoreDeprecatedDefaultCapabilityAction)) {
229
+ acc[name] = _argparseActions.DEFAULT_CAPS_ARG;
217
230
  }
218
- }
231
+
232
+ return acc;
233
+ }, {});
219
234
  }
220
235
 
221
236
  async function validateTmpDir(tmpDir) {
222
237
  try {
223
- await (0, _appiumSupport.mkdirp)(tmpDir);
238
+ await (0, _support.mkdirp)(tmpDir);
224
239
  } catch (e) {
225
240
  throw new Error(`We could not ensure that the temp dir you specified ` + `(${tmpDir}) exists. Please make sure it's writeable.`);
226
241
  }
227
242
  }require('source-map-support').install();
228
243
 
229
244
 
230
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25maWcuanMiXSwibmFtZXMiOlsibnBtUGFja2FnZSIsInJlcXVpcmUiLCJwYXRoIiwicmVzb2x2ZSIsInJvb3REaXIiLCJBUFBJVU1fVkVSIiwidmVyc2lvbiIsIk1JTl9OT0RFX1ZFUlNJT04iLCJlbmdpbmVzIiwibm9kZSIsIkdJVF9NRVRBX1JPT1QiLCJHSVRfQklOQVJZIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiR0lUSFVCX0FQSSIsIkJVSUxEX0lORk8iLCJnZXROb2RlVmVyc2lvbiIsInNlbXZlciIsImNvZXJjZSIsInByb2Nlc3MiLCJ1cGRhdGVCdWlsZEluZm8iLCJ1c2VHaXRodWJBcGlGYWxsYmFjayIsInNoYSIsImdldEdpdFJldiIsImJ1aWx0IiwiZ2V0R2l0VGltZXN0YW1wIiwiXyIsImlzRW1wdHkiLCJmcyIsImV4aXN0cyIsInN0ZG91dCIsImN3ZCIsInRyaW0iLCJpZ24iLCJyZXNCb2R5T2JqIiwiYXhpb3MiLCJnZXQiLCJoZWFkZXJzIiwiZGF0YSIsImlzQXJyYXkiLCJuYW1lIiwiY29tbWl0IiwiY29tbWl0U2hhIiwiY29tbWl0dGVyIiwiZGF0ZSIsImF1dGhvciIsImdldEJ1aWxkSW5mbyIsImNoZWNrTm9kZU9rIiwic2F0aXNmaWVzIiwibG9nZ2VyIiwiZXJyb3JBbmRUaHJvdyIsIndhcm5Ob2RlRGVwcmVjYXRpb25zIiwic2hvd0NvbmZpZyIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0Tm9uRGVmYXVsdEFyZ3MiLCJwYXJzZXIiLCJhcmdzIiwibm9uRGVmYXVsdHMiLCJyYXdBcmciLCJyYXdBcmdzIiwiYXJnIiwiZGVzdCIsImRlZmF1bHRWYWx1ZSIsImNoZWNrVmFsaWRQb3J0IiwicG9ydCIsInBvcnROYW1lIiwiZXJyb3IiLCJ2YWxpZGF0ZVNlcnZlckFyZ3MiLCJleGNsdXNpdmVzIiwiZXhTZXQiLCJudW1Gb3VuZEluQXJncyIsIm9wdCIsImhhcyIsIkVycm9yIiwidmFsaWRhdGlvbnMiLCJjYWxsYmFja1BvcnQiLCJib290c3RyYXBQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsInJvYm90UG9ydCIsImJhY2tlbmRSZXRyaWVzIiwiciIsIm5vbkRlZmF1bHRBcmdzIiwidmFsaWRhdG9yIiwidG9QYWlycyIsInZhbGlkYXRlVG1wRGlyIiwidG1wRGlyIiwiZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsVUFBVSxHQUFHQyxPQUFPLENBQUNDLGNBQUtDLE9BQUwsQ0FBYUMsY0FBYixFQUFzQixjQUF0QixDQUFELENBQTFCOztBQUNBLE1BQU1DLFVBQVUsR0FBR0wsVUFBVSxDQUFDTSxPQUE5Qjs7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBR1AsVUFBVSxDQUFDUSxPQUFYLENBQW1CQyxJQUE1QztBQUVBLE1BQU1DLGFBQWEsR0FBRyxNQUF0QjtBQUNBLE1BQU1DLFVBQVUsR0FBSSxNQUFLQyxzQkFBT0MsU0FBUCxLQUFxQixNQUFyQixHQUE4QixFQUFHLEVBQTFEO0FBQ0EsTUFBTUMsVUFBVSxHQUFHLDRDQUFuQjtBQUVBLE1BQU1DLFVBQVUsR0FBRztBQUNqQlQsRUFBQUEsT0FBTyxFQUFFRDtBQURRLENBQW5COztBQUlBLFNBQVNXLGNBQVQsR0FBMkI7QUFDekIsU0FBT0MsZ0JBQU9DLE1BQVAsQ0FBY0MsT0FBTyxDQUFDYixPQUF0QixDQUFQO0FBQ0Q7O0FBRUQsZUFBZWMsZUFBZixDQUFnQ0Msb0JBQW9CLEdBQUcsS0FBdkQsRUFBOEQ7QUFDNUQsUUFBTUMsR0FBRyxHQUFHLE1BQU1DLFNBQVMsQ0FBQ0Ysb0JBQUQsQ0FBM0I7O0FBQ0EsTUFBSSxDQUFDQyxHQUFMLEVBQVU7QUFDUjtBQUNEOztBQUNEUCxFQUFBQSxVQUFVLENBQUMsU0FBRCxDQUFWLEdBQXdCTyxHQUF4QjtBQUNBLFFBQU1FLEtBQUssR0FBRyxNQUFNQyxlQUFlLENBQUNILEdBQUQsRUFBTUQsb0JB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b0JBRlgsQ0FBTjtBQUdEO0FBQ0Y7O0FBRUQsUUFBTUssV0FBVyxHQUFHO0FBQ2xCVixJQUFBQSxJQUFJLEVBQUVELGNBRFk7QUFFbEJZLElBQUFBLFlBQVksRUFBRVosY0FGSTtBQUdsQmEsSUFBQUEsYUFBYSxFQUFFYixjQUhHO0FBSWxCYyxJQUFBQSxnQkFBZ0IsRUFBRWQsY0FKQTtBQUtsQmUsSUFBQUEsU0FBUyxFQUFFZixjQUxPO0FBTWxCZ0IsSUFBQUEsY0FBYyxFQUFHQyxDQUFELElBQU9BLENBQUMsSUFBSTtBQU5WLEdBQXBCO0FBU0EsUUFBTUMsY0FBYyxHQUFHM0IsaUJBQWlCLENBQUNDLE1BQUQsRUFBU0MsSUFBVCxDQUF4Qzs7QUFFQSxPQUFLLElBQUksQ0FBQ0ksR0FBRCxFQUFNc0IsU0FBTixDQUFULElBQTZCM0QsZ0JBQUU0RCxPQUFGLENBQVVULFdBQVYsQ0FBN0IsRUFBcUQ7QUFDbkQsUUFBSW5ELGdCQUFFaUQsR0FBRixDQUFNUyxjQUFOLEVBQXNCckIsR0FBdEIsQ0FBSixFQUFnQztBQUM5QixVQUFJLENBQUNzQixTQUFTLENBQUMxQixJQUFJLENBQUNJLEdBQUQsQ0FBTCxFQUFZQSxHQUFaLENBQWQsRUFBZ0M7QUFDOUIsY0FBTSxJQUFJYSxLQUFKLENBQVcsOEJBQTZCYixHQUFJLEtBQUlKLElBQUksQ0FBQ0ksR0FBRCxDQUFNLEVBQTFELENBQU47QUFDRDtBQUNGO0FBQ0Y7QUFDRjs7QUFFRCxlQUFld0IsY0FBZixDQUErQkMsTUFBL0IsRUFBdUM7QUFDckMsTUFBSTtBQUNGLFVBQU0sMkJBQU9BLE1BQVAsQ0FBTjtBQUNELEdBRkQsQ0FFRSxPQUFPQyxDQUFQLEVBQVU7QUFDVixVQUFNLElBQUliLEtBQUosQ0FBVyxzREFBRCxHQUNDLElBQUdZLE1BQU8sNENBRHJCLENBQU47QUFFRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbWtkaXJwLCBmcywgc3lzdGVtIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcm9vdERpciB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cblxuY29uc3QgbnBtUGFja2FnZSA9IHJlcXVpcmUocGF0aC5yZXNvbHZlKHJvb3REaXIsICdwYWNrYWdlLmpzb24nKSk7XG5jb25zdCBBUFBJVU1fVkVSID0gbnBtUGFja2FnZS52ZXJzaW9uO1xuY29uc3QgTUlOX05PREVfVkVSU0lPTiA9IG5wbVBhY2thZ2UuZW5naW5lcy5ub2RlO1xuXG5jb25zdCBHSVRfTUVUQV9ST09UID0gJy5naXQnO1xuY29uc3QgR0lUX0JJTkFSWSA9IGBnaXQke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG5jb25zdCBHSVRIVUJfQVBJID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXBwaXVtL2FwcGl1bSc7XG5cbmNvbnN0IEJVSUxEX0lORk8gPSB7XG4gIHZlcnNpb246IEFQUElVTV9WRVIsXG59O1xuXG5mdW5jdGlvbiBnZXROb2RlVmVyc2lvbiAoKSB7XG4gIHJldHVybiBzZW12ZXIuY29lcmNlKHByb2Nlc3MudmVyc2lvbik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUJ1aWxkSW5mbyAodXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBjb25zdCBzaGEgPSBhd2FpdCBnZXRHaXRSZXYodXNlR2l0aHViQXBpRmFsbGJhY2spO1xuICBpZiAoIXNoYSkge1xuICAgIHJldHVybjtcbiAgfVxuICBCVUlMRF9JTkZPWydnaXQtc2hhJ10gPSBzaGE7XG4gIGNvbnN0IGJ1aWx0ID0gYXdhaXQgZ2V0R2l0VGltZXN0YW1wKHNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2spO1xuICBpZiAoIV8uaXNFbXB0eShidWlsdCkpIHtcbiAgICBCVUlMRF9JTkZPLmJ1aWx0ID0gYnVpbHQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0R2l0UmV2ICh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGlmIChhd2FpdCBmcy5leGlzdHMocGF0aC5yZXNvbHZlKHJvb3REaXIsIEdJVF9NRVRBX1JPT1QpKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydyZXYtcGFyc2UnLCAnSEVBRCddLCB7XG4gICAgICAgIGN3ZDogcm9vdERpclxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L3RhZ3NgLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YFxuICAgICAgfVxuICAgIH0pKS5kYXRhO1xuICAgIGlmIChfLmlzQXJyYXkocmVzQm9keU9iaikpIHtcbiAgICAgIGZvciAoY29uc3Qge25hbWUsIGNvbW1pdH0gb2YgcmVzQm9keU9iaikge1xuICAgICAgICBpZiAobmFtZSA9PT0gYHYke0FQUElVTV9WRVJ9YCAmJiBjb21taXQgJiYgY29tbWl0LnNoYSkge1xuICAgICAgICAgIHJldHVybiBjb21taXQuc2hhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHt9XG4gIHJldHVybiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRHaXRUaW1lc3RhbXAgKGNvbW1pdFNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBpZiAoYXdhaXQgZnMuZXhpc3RzKHBhdGgucmVzb2x2ZShyb290RGlyLCBHSVRfTUVUQV9ST09UKSkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKEdJVF9CSU5BUlksIFsnc2hvdycsICctcycsICctLWZvcm1hdD0lY2knLCBjb21taXRTaGFdLCB7XG4gICAgICAgIGN3ZDogcm9vdERpclxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L2NvbW1pdHMvJHtjb21taXRTaGF9YCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IGBBcHBpdW0gJHtBUFBJVU1fVkVSfWBcbiAgICAgIH1cbiAgICB9KSkuZGF0YTtcbiAgICBpZiAocmVzQm9keU9iaiAmJiByZXNCb2R5T2JqLmNvbW1pdCkge1xuICAgICAgaWYgKHJlc0JvZHlPYmouY29tbWl0LmNvbW1pdHRlciAmJiByZXNCb2R5T2JqLmNvbW1pdC5jb21taXR0ZXIuZGF0ZSkge1xuICAgICAgICByZXR1cm4gcmVzQm9keU9iai5jb21taXQuY29tbWl0dGVyLmRhdGU7XG4gICAgICB9XG4gICAgICBpZiAocmVzQm9keU9iai5jb21taXQuYXV0aG9yICYmIHJlc0JvZHlPYmouY29tbWl0LmF1dGhvci5kYXRlKSB7XG4gICAgICAgIHJldHVybiByZXNCb2R5T2JqLmNvbW1pdC5hdXRob3IuZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge31cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHJldHVybiBNdXRhYmxlIG9iamVjdCBjb250YWluaW5nIEFwcGl1bSBidWlsZCBpbmZvcm1hdGlvbi4gQnkgZGVmYXVsdCBpdFxuICogb25seSBjb250YWlucyB0aGUgQXBwaXVtIHZlcnNpb24sIGJ1dCBpcyB1cGRhdGVkIHdpdGggdGhlIGJ1aWxkIHRpbWVzdGFtcFxuICogYW5kIGdpdCBjb21taXQgaGFzaCBhc3luY2hyb25vdXNseSBhcyBzb29uIGFzIGB1cGRhdGVCdWlsZEluZm9gIGlzIGNhbGxlZFxuICogYW5kIHN1Y2NlZWRzLlxuICovXG5mdW5jdGlvbiBnZXRCdWlsZEluZm8gKCkge1xuICByZXR1cm4gQlVJTERfSU5GTztcbn1cblxuZnVuY3Rpb24gY2hlY2tOb2RlT2sgKCkge1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgaWYgKCFzZW12ZXIuc2F0aXNmaWVzKHZlcnNpb24sIE1JTl9OT0RFX1ZFUlNJT04pKSB7XG4gICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYE5vZGUgdmVyc2lvbiBtdXN0IGJlICR7TUlOX05PREVfVkVSU0lPTn0uIEN1cnJlbnRseSAke3ZlcnNpb24udmVyc2lvbn1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9kZURlcHJlY2F0aW9ucyAoKSB7XG4gIC8qKlxuICAgKiBVbmNvbW1lbnQgdGhpcyBzZWN0aW9uIHRvIGdldCBub2RlIHZlcnNpb24gZGVwcmVjYXRpb24gd2FybmluZ3NcbiAgICogQWxzbyBhZGQgdGVzdCBjYXNlcyB0byBjb25maWctc3BlY3MuanMgdG8gY292ZXIgdGhlIGNhc2VzIGFkZGVkXG4gICAqKi9cblxuICAvLyBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgLy8gaWYgKHZlcnNpb24ubWFqb3IgPCA4KSB7XG4gIC8vICAgbG9nZ2VyLndhcm4oYEFwcGl1bSBzdXBwb3J0IGZvciB2ZXJzaW9ucyBvZiBub2RlIDwgJHt2ZXJzaW9uLm1ham9yfSBoYXMgYmVlbiBgICtcbiAgLy8gICAgICAgICAgICAgICAnZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIFBsZWFzZSAnICtcbiAgLy8gICAgICAgICAgICAgICAndXBncmFkZSEnKTtcbiAgLy8gfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93Q29uZmlnICgpIHtcbiAgYXdhaXQgdXBkYXRlQnVpbGRJbmZvKHRydWUpO1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShnZXRCdWlsZEluZm8oKSkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uRGVmYXVsdEFyZ3MgKHBhcnNlciwgYXJncykge1xuICBsZXQgbm9uRGVmYXVsdHMgPSB7fTtcbiAgZm9yIChsZXQgcmF3QXJnIG9mIHBhcnNlci5yYXdBcmdzKSB7XG4gICAgbGV0IGFyZyA9IHJhd0FyZ1sxXS5kZXN0O1xuICAgIGlmIChhcmdzW2FyZ10gJiYgYXJnc1thcmddICE9PSByYXdBcmdbMV0uZGVmYXVsdFZhbHVlKSB7XG4gICAgICBub25EZWZhdWx0c1thcmddID0gYXJnc1thcmddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm9uRGVmYXVsdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVmFsaWRQb3J0IChwb3J0LCBwb3J0TmFtZSkge1xuICBpZiAocG9ydCA+IDAgJiYgcG9ydCA8IDY1NTM2KSByZXR1cm4gdHJ1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICBsb2dnZXIuZXJyb3IoYFBvcnQgJyR7cG9ydE5hbWV9JyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gNjU1MzYuIEN1cnJlbnRseSAke3BvcnR9YCk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTZXJ2ZXJBcmdzIChwYXJzZXIsIGFyZ3MpIHtcbiAgLy8gYXJndW1lbnRzIHRoYXQgY2Fubm90IGJvdGggYmUgc2V0XG4gIGxldCBleGNsdXNpdmVzID0gW1xuICAgIFsnbm9SZXNldCcsICdmdWxsUmVzZXQnXSxcbiAgICBbJ2lwYScsICdzYWZhcmknXSxcbiAgICBbJ2FwcCcsICdzYWZhcmknXSxcbiAgICBbJ2ZvcmNlSXBob25lJywgJ2ZvcmNlSXBhZCddLFxuICAgIFsnZGV2aWNlTmFtZScsICdkZWZhdWx0RGV2aWNlJ11cbiAgXTtcblxuICBmb3IgKGxldCBleFNldCBvZiBleGNsdXNpdmVzKSB7XG4gICAgbGV0IG51bUZvdW5kSW5BcmdzID0gMDtcbiAgICBmb3IgKGxldCBvcHQgb2YgZXhTZXQpIHtcbiAgICAgIGlmIChfLmhhcyhhcmdzLCBvcHQpICYmIGFyZ3Nbb3B0XSkge1xuICAgICAgICBudW1Gb3VuZEluQXJncysrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVtRm91bmRJbkFyZ3MgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBjYW4ndCBwYXNzIGluIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgZnJvbSB0aGUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHNldCAke0pTT04uc3RyaW5naWZ5KGV4U2V0KX0sIHNpbmNlIHRoZXkgYXJlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBtdXR1YWxseSBleGNsdXNpdmVgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB2YWxpZGF0aW9ucyA9IHtcbiAgICBwb3J0OiBjaGVja1ZhbGlkUG9ydCxcbiAgICBjYWxsYmFja1BvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIGJvb3RzdHJhcFBvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIGNocm9tZWRyaXZlclBvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIHJvYm90UG9ydDogY2hlY2tWYWxpZFBvcnQsXG4gICAgYmFja2VuZFJldHJpZXM6IChyKSA9PiByID49IDBcbiAgfTtcblxuICBjb25zdCBub25EZWZhdWx0QXJncyA9IGdldE5vbkRlZmF1bHRBcmdzKHBhcnNlciwgYXJncyk7XG5cbiAgZm9yIChsZXQgW2FyZywgdmFsaWRhdG9yXSBvZiBfLnRvUGFpcnModmFsaWRhdGlvbnMpKSB7XG4gICAgaWYgKF8uaGFzKG5vbkRlZmF1bHRBcmdzLCBhcmcpKSB7XG4gICAgICBpZiAoIXZhbGlkYXRvcihhcmdzW2FyZ10sIGFyZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50IGZvciBwYXJhbSAke2FyZ306ICR7YXJnc1thcmddfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZVRtcERpciAodG1wRGlyKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgbWtkaXJwKHRtcERpcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFdlIGNvdWxkIG5vdCBlbnN1cmUgdGhhdCB0aGUgdGVtcCBkaXIgeW91IHNwZWNpZmllZCBgICtcbiAgICAgICAgICAgICAgICAgICAgYCgke3RtcERpcn0pIGV4aXN0cy4gUGxlYXNlIG1ha2Ugc3VyZSBpdCdzIHdyaXRlYWJsZS5gKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBnZXRCdWlsZEluZm8sIHZhbGlkYXRlU2VydmVyQXJncywgY2hlY2tOb2RlT2ssIHNob3dDb25maWcsXG4gIHdhcm5Ob2RlRGVwcmVjYXRpb25zLCB2YWxpZGF0ZVRtcERpciwgZ2V0Tm9uRGVmYXVsdEFyZ3MsXG4gIGdldEdpdFJldiwgY2hlY2tWYWxpZFBvcnQsIEFQUElVTV9WRVIsIHVwZGF0ZUJ1aWxkSW5mbyxcbn07XG4iXSwiZmlsZSI6ImxpYi9jb25maWcuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
245
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25maWcuanMiXSwibmFtZXMiOlsibnBtUGFja2FnZSIsImZzIiwicmVhZFBhY2thZ2VKc29uRnJvbSIsIl9fZGlybmFtZSIsIkFQUElVTV9WRVIiLCJ2ZXJzaW9uIiwiTUlOX05PREVfVkVSU0lPTiIsImVuZ2luZXMiLCJub2RlIiwiR0lUX01FVEFfUk9PVCIsIkdJVF9CSU5BUlkiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJHSVRIVUJfQVBJIiwiQlVJTERfSU5GTyIsImdldE5vZGVWZXJzaW9uIiwic2VtdmVyIiwiY29lcmNlIiwicHJvY2VzcyIsImlzU3ViQ2xhc3MiLCJjYW5kaWRhdGVDbGFzcyIsInN1cGVyQ2xhc3MiLCJfIiwiaXNGdW5jdGlvbiIsInByb3RvdHlwZSIsInVwZGF0ZUJ1aWxkSW5mbyIsInVzZUdpdGh1YkFwaUZhbGxiYWNrIiwic2hhIiwiZ2V0R2l0UmV2IiwiYnVpbHQiLCJnZXRHaXRUaW1lc3RhbXAiLCJpc0VtcHR5IiwiZmluZEdpdFJvb3QiLCJjd2QiLCJyb290RGlyIiwidHlwZSIsImdpdFJvb3QiLCJzdGRvdXQiLCJ0cmltIiwiaWduIiwicmVzQm9keU9iaiIsImF4aW9zIiwiZ2V0IiwiaGVhZGVycyIsImRhdGEiLCJpc0FycmF5IiwibmFtZSIsImNvbW1pdCIsImNvbW1pdFNoYSIsImNvbW1pdHRlciIsImRhdGUiLCJhdXRob3IiLCJnZXRCdWlsZEluZm8iLCJjaGVja05vZGVPayIsInNhdGlzZmllcyIsImxvZ2dlciIsImVycm9yQW5kVGhyb3ciLCJ3YXJuTm9kZURlcHJlY2F0aW9ucyIsInNob3dDb25maWciLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzIiwicGFyc2VyIiwiYXJncyIsInR5cGVzRGlmZmVyIiwiZGVzdCIsImRlZmF1bHRzRnJvbVNjaGVtYSIsImRlZmF1bHRWYWx1ZUlzQXJyYXkiLCJhcmdzVmFsdWVJc0FycmF5IiwiYXJyYXlzRGlmZmVyIiwiZGlmZmVyZW5jZSIsImxlbmd0aCIsInZhbHVlc1VuZXF1YWwiLCJkZWZhdWx0SXNEZWZpbmVkIiwiaXNVbmRlZmluZWQiLCJhcmdWYWx1ZU5vdEFycmF5T3JBcnJheXNEaWZmZXIiLCJvdmVyU29tZSIsIm5lZ2F0ZSIsImRlZmF1bHRWYWx1ZU5vdEFycmF5QW5kVmFsdWVzVW5lcXVhbCIsIm92ZXJFdmVyeSIsImlzTm90RGVmYXVsdCIsInBpY2tCeSIsIl9fIiwia2V5IiwiZ2V0RGVwcmVjYXRlZEFyZ3MiLCJyYXdBcmdzIiwicmVkdWNlIiwiYWNjIiwiZGVmYXVsdCIsImRlZmF1bHRWYWx1ZSIsImFjdGlvbiIsImRlcHJlY2F0ZWRfZm9yIiwiU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24iLCJERUZBVUxUX0NBUFNfQVJHIiwidmFsaWRhdGVUbXBEaXIiLCJ0bXBEaXIiLCJlIiwiRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHQyxZQUFHQyxtQkFBSCxDQUF1QkMsU0FBdkIsQ0FBbkI7O0FBRUEsTUFBTUMsVUFBVSxHQUFHSixVQUFVLENBQUNLLE9BQTlCOztBQUNBLE1BQU1DLGdCQUFnQixHQUFHTixVQUFVLENBQUNPLE9BQVgsQ0FBbUJDLElBQTVDO0FBRUEsTUFBTUMsYUFBYSxHQUFHLE1BQXRCO0FBQ0EsTUFBTUMsVUFBVSxHQUFJLE1BQUtDLGdCQUFPQyxTQUFQLEtBQXFCLE1BQXJCLEdBQThCLEVBQUcsRUFBMUQ7QUFDQSxNQUFNQyxVQUFVLEdBQUcsNENBQW5CO0FBRUEsTUFBTUMsVUFBVSxHQUFHO0FBQ2pCVCxFQUFBQSxPQUFPLEVBQUVEO0FBRFEsQ0FBbkI7O0FBSUEsU0FBU1csY0FBVCxHQUEyQjtBQUN6QixTQUFPQyxnQkFBT0MsTUFBUCxDQUFjQyxPQUFPLENBQUNiLE9BQXRCLENB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QUQsQ0FBSixLQUFld0IsWUFBbEMsRUFBZ0Q7QUFDOUMsYUFBT0YsR0FBUDtBQUNEOztBQUVELFFBQUlHLE1BQUosYUFBSUEsTUFBSixlQUFJQSxNQUFNLENBQUVDLGNBQVosRUFBNEI7QUFDMUJKLE1BQUFBLEdBQUcsQ0FBQzNDLElBQUQsQ0FBSCxHQUFZOEMsTUFBTSxDQUFDQyxjQUFuQjtBQUNELEtBRkQsTUFFTyxJQUFJMUUsVUFBVSxDQUFDeUUsTUFBRCxFQUFTRSx1REFBVCxDQUFkLEVBQWdFO0FBQ3JFTCxNQUFBQSxHQUFHLENBQUMzQyxJQUFELENBQUgsR0FBWWlELGlDQUFaO0FBQ0Q7O0FBQ0QsV0FBT04sR0FBUDtBQUNELEdBWE0sRUFXSixFQVhJLENBQVA7QUFZRDs7QUFFRCxlQUFlTyxjQUFmLENBQStCQyxNQUEvQixFQUF1QztBQUNyQyxNQUFJO0FBQ0YsVUFBTSxxQkFBT0EsTUFBUCxDQUFOO0FBQ0QsR0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVTtBQUNWLFVBQU0sSUFBSUMsS0FBSixDQUFXLHNEQUFELEdBQ0MsSUFBR0YsTUFBTyw0Q0FEckIsQ0FBTjtBQUVEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgbWtkaXJwLCBzeXN0ZW0sIGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IHJvb3REaXIgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHtcbiAgU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24sIERFRkFVTFRfQ0FQU19BUkcsXG59IGZyb20gJy4vY2xpL2FyZ3BhcnNlLWFjdGlvbnMnO1xuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcbmltcG9ydCB7IGdldERlZmF1bHRzRnJvbVNjaGVtYSB9IGZyb20gJy4vc2NoZW1hL3NjaGVtYSc7XG5cbmNvbnN0IG5wbVBhY2thZ2UgPSBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKF9fZGlybmFtZSk7XG5cbmNvbnN0IEFQUElVTV9WRVIgPSBucG1QYWNrYWdlLnZlcnNpb247XG5jb25zdCBNSU5fTk9ERV9WRVJTSU9OID0gbnBtUGFja2FnZS5lbmdpbmVzLm5vZGU7XG5cbmNvbnN0IEdJVF9NRVRBX1JPT1QgPSAnLmdpdCc7XG5jb25zdCBHSVRfQklOQVJZID0gYGdpdCR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbmNvbnN0IEdJVEhVQl9BUEkgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hcHBpdW0vYXBwaXVtJztcblxuY29uc3QgQlVJTERfSU5GTyA9IHtcbiAgdmVyc2lvbjogQVBQSVVNX1ZFUixcbn07XG5cbmZ1bmN0aW9uIGdldE5vZGVWZXJzaW9uICgpIHtcbiAgcmV0dXJuIHNlbXZlci5jb2VyY2UocHJvY2Vzcy52ZXJzaW9uKTtcbn1cblxuZnVuY3Rpb24gaXNTdWJDbGFzcyAoY2FuZGlkYXRlQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgcmV0dXJuIF8uaXNGdW5jdGlvbihzdXBlckNsYXNzKSAmJiBfLmlzRnVuY3Rpb24oY2FuZGlkYXRlQ2xhc3MpXG4gICAgJiYgKGNhbmRpZGF0ZUNsYXNzLnByb3RvdHlwZSBpbnN0YW5jZW9mIHN1cGVyQ2xhc3MgfHwgY2FuZGlkYXRlQ2xhc3MgPT09IHN1cGVyQ2xhc3MpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVCdWlsZEluZm8gKHVzZUdpdGh1YkFwaUZhbGxiYWNrID0gZmFsc2UpIHtcbiAgY29uc3Qgc2hhID0gYXdhaXQgZ2V0R2l0UmV2KHVzZUdpdGh1YkFwaUZhbGxiYWNrKTtcbiAgaWYgKCFzaGEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgQlVJTERfSU5GT1snZ2l0LXNoYSddID0gc2hhO1xuICBjb25zdCBidWlsdCA9IGF3YWl0IGdldEdpdFRpbWVzdGFtcChzaGEsIHVzZUdpdGh1YkFwaUZhbGxiYWNrKTtcbiAgaWYgKCFfLmlzRW1wdHkoYnVpbHQpKSB7XG4gICAgQlVJTERfSU5GTy5idWlsdCA9IGJ1aWx0O1xuICB9XG59XG5cbi8qKlxuICogRmluZHMgdGhlIEdpdCBtZXRhZGF0YSBkaXIgKHNlZSBgR0lUX01FVEFfUk9PVGApXG4gKlxuICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBBcHBpdW0gY2Fubm90IGFzc3VtZSBgcGFja2FnZS5qc29uYCBhbmQgYC5naXRgIGFyZSBpbiB0aGUgc2FtZVxuICogZGlyZWN0b3J5LiAgTW9ub3JlcG9zLCBzZWU/XG4gKiBAcmV0dXJucyB7c3RyaW5nfHZvaWR9IFBhdGggdG8gZGlyIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBmb3VuZFxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kR2l0Um9vdCAoKSB7XG4gIHJldHVybiBhd2FpdCBmaW5kVXAoR0lUX01FVEFfUk9PVCwge2N3ZDogcm9vdERpciwgdHlwZTogJ2RpcmVjdG9yeSd9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0R2l0UmV2ICh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IGdpdFJvb3QgPSBhd2FpdCBmaW5kR2l0Um9vdCgpO1xuICBpZiAoZ2l0Um9vdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydyZXYtcGFyc2UnLCAnSEVBRCddLCB7XG4gICAgICAgIGN3ZDogZ2l0Um9vdFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L3RhZ3NgLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YFxuICAgICAgfVxuICAgIH0pKS5kYXRhO1xuICAgIGlmIChfLmlzQXJyYXkocmVzQm9keU9iaikpIHtcbiAgICAgIGZvciAoY29uc3Qge25hbWUsIGNvbW1pdH0gb2YgcmVzQm9keU9iaikge1xuICAgICAgICBpZiAobmFtZSA9PT0gYHYke0FQUElVTV9WRVJ9YCAmJiBjb21taXQgJiYgY29tbWl0LnNoYSkge1xuICAgICAgICAgIHJldHVybiBjb21taXQuc2hhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHt9XG4gIHJldHVybiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRHaXRUaW1lc3RhbXAgKGNvbW1pdFNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBjb25zdCBnaXRSb290ID0gYXdhaXQgZmluZEdpdFJvb3QoKTtcbiAgaWYgKGdpdFJvb3QpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKEdJVF9CSU5BUlksIFsnc2hvdycsICctcycsICctLWZvcm1hdD0lY2knLCBjb21taXRTaGFdLCB7XG4gICAgICAgIGN3ZDogZ2l0Um9vdFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L2NvbW1pdHMvJHtjb21taXRTaGF9YCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IGBBcHBpdW0gJHtBUFBJVU1fVkVSfWBcbiAgICAgIH1cbiAgICB9KSkuZGF0YTtcbiAgICBpZiAocmVzQm9keU9iaiAmJiByZXNCb2R5T2JqLmNvbW1pdCkge1xuICAgICAgaWYgKHJlc0JvZHlPYmouY29tbWl0LmNvbW1pdHRlciAmJiByZXNCb2R5T2JqLmNvbW1pdC5jb21taXR0ZXIuZGF0ZSkge1xuICAgICAgICByZXR1cm4gcmVzQm9keU9iai5jb21taXQuY29tbWl0dGVyLmRhdGU7XG4gICAgICB9XG4gICAgICBpZiAocmVzQm9keU9iai5jb21taXQuYXV0aG9yICYmIHJlc0JvZHlPYmouY29tbWl0LmF1dGhvci5kYXRlKSB7XG4gICAgICAgIHJldHVybiByZXNCb2R5T2JqLmNvbW1pdC5hdXRob3IuZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge31cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHJldHVybiBNdXRhYmxlIG9iamVjdCBjb250YWluaW5nIEFwcGl1bSBidWlsZCBpbmZvcm1hdGlvbi4gQnkgZGVmYXVsdCBpdFxuICogb25seSBjb250YWlucyB0aGUgQXBwaXVtIHZlcnNpb24sIGJ1dCBpcyB1cGRhdGVkIHdpdGggdGhlIGJ1aWxkIHRpbWVzdGFtcFxuICogYW5kIGdpdCBjb21taXQgaGFzaCBhc3luY2hyb25vdXNseSBhcyBzb29uIGFzIGB1cGRhdGVCdWlsZEluZm9gIGlzIGNhbGxlZFxuICogYW5kIHN1Y2NlZWRzLlxuICovXG5mdW5jdGlvbiBnZXRCdWlsZEluZm8gKCkge1xuICByZXR1cm4gQlVJTERfSU5GTztcbn1cblxuZnVuY3Rpb24gY2hlY2tOb2RlT2sgKCkge1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgaWYgKCFzZW12ZXIuc2F0aXNmaWVzKHZlcnNpb24sIE1JTl9OT0RFX1ZFUlNJT04pKSB7XG4gICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYE5vZGUgdmVyc2lvbiBtdXN0IGJlICR7TUlOX05PREVfVkVSU0lPTn0uIEN1cnJlbnRseSAke3ZlcnNpb24udmVyc2lvbn1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9kZURlcHJlY2F0aW9ucyAoKSB7XG4gIC8qKlxuICAgKiBVbmNvbW1lbnQgdGhpcyBzZWN0aW9uIHRvIGdldCBub2RlIHZlcnNpb24gZGVwcmVjYXRpb24gd2FybmluZ3NcbiAgICogQWxzbyBhZGQgdGVzdCBjYXNlcyB0byBjb25maWctc3BlY3MuanMgdG8gY292ZXIgdGhlIGNhc2VzIGFkZGVkXG4gICAqKi9cblxuICAvLyBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgLy8gaWYgKHZlcnNpb24ubWFqb3IgPCA4KSB7XG4gIC8vICAgbG9nZ2VyLndhcm4oYEFwcGl1bSBzdXBwb3J0IGZvciB2ZXJzaW9ucyBvZiBub2RlIDwgJHt2ZXJzaW9uLm1ham9yfSBoYXMgYmVlbiBgICtcbiAgLy8gICAgICAgICAgICAgICAnZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIFBsZWFzZSAnICtcbiAgLy8gICAgICAgICAgICAgICAndXBncmFkZSEnKTtcbiAgLy8gfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93Q29uZmlnICgpIHtcbiAgYXdhaXQgdXBkYXRlQnVpbGRJbmZvKHRydWUpO1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShnZXRCdWlsZEluZm8oKSkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MgKHBhcnNlciwgYXJncykge1xuICAvLyBob3BlZnVsbHkgdGhlc2UgZnVuY3Rpb24gbmFtZXMgYXJlIGRlc2NyaXB0aXZlIGVub3VnaFxuXG4gIGZ1bmN0aW9uIHR5cGVzRGlmZmVyIChkZXN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhcmdzW2Rlc3RdICE9PSB0eXBlb2YgZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmYXVsdFZhbHVlSXNBcnJheSAoZGVzdCkge1xuICAgIHJldHVybiBfLmlzQXJyYXkoZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFyZ3NWYWx1ZUlzQXJyYXkgKGRlc3QpIHtcbiAgICByZXR1cm4gXy5pc0FycmF5KGFyZ3NbZGVzdF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJyYXlzRGlmZmVyIChkZXN0KSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcmdzW2Rlc3RdLCBkZWZhdWx0c0Zyb21TY2hlbWFbZGVzdF0pLmxlbmd0aCA+IDA7XG4gIH1cblxuICBmdW5jdGlvbiB2YWx1ZXNVbmVxdWFsIChkZXN0KSB7XG4gICAgcmV0dXJuIGFyZ3NbZGVzdF0gIT09IGRlZmF1bHRzRnJvbVNjaGVtYVtkZXN0XTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmF1bHRJc0RlZmluZWQgKGRlc3QpIHtcbiAgICByZXR1cm4gIV8uaXNVbmRlZmluZWQoZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdKTtcbiAgfVxuXG4gIC8vIG5vdGUgdGhhdCBgXy5vdmVyRXZlcnlgIGlzIGxpa2UgYW4gXCJBTkRcIiwgYW5kIGBfLm92ZXJTb21lYCBpcyBsaWtlIGFuIFwiT1JcIlxuXG4gIGNvbnN0IGFyZ1ZhbHVlTm90QXJyYXlPckFycmF5c0RpZmZlciA9IF8ub3ZlclNvbWUoW1xuICAgIF8ubmVnYXRlKGFyZ3NWYWx1ZUlzQXJyYXkpLFxuICAgIGFycmF5c0RpZmZlclxuICBdKTtcblxuICBjb25zdCBkZWZhdWx0VmFsdWVOb3RBcnJheUFuZFZhbHVlc1VuZXF1YWwgPSBfLm92ZXJFdmVyeShbXG4gICAgXy5uZWdhdGUoZGVmYXVsdFZhbHVlSXNBcnJheSksIHZhbHVlc1VuZXF1YWxcbiAgXSk7XG5cbiAgLyoqXG4gICAqIFRoaXMgdXNlZCB0byBiZSBhIGhpZGVvdXMgY29uZGl0aW9uYWwsIGJ1dCBpdCdzIGJyb2tlbiB1cCBpbnRvIGEgaGlkZW91cyBmdW5jdGlvbiBpbnN0ZWFkLlxuICAgKiBob3BlZnVsbHkgdGhpcyBtYWtlcyB0aGluZ3MgYSBsaXR0bGUgbW9yZSB1bmRlcnN0YW5kYWJsZS5cbiAgICogLSBjaGVja3MgaWYgdGhlIGRlZmF1bHQgdmFsdWUgaXMgZGVmaW5lZFxuICAgKiAtIGlmIHNvLCBhbmQgdGhlIGRlZmF1bHQgaXMgbm90IGFuIGFycmF5OlxuICAgKiAgIC0gZW5zdXJlcyB0aGUgdHlwZXMgYXJlIHRoZSBzYW1lXG4gICAqICAgLSBlbnN1cmVzIHRoZSB2YWx1ZXMgYXJlIGVxdWFsXG4gICAqIC0gaWYgc28sIGFuZCB0aGUgZGVmYXVsdCBpcyBhbiBhcnJheTpcbiAgICogICAtIGVuc3VyZXMgdGhlIGFyZ3MgdmFsdWUgaXMgYW4gYXJyYXlcbiAgICogICAtIGVuc3VyZXMgdGhlIGFyZ3MgdmFsdWVzIGRvIG5vdCBkaWZmZXIgZnJvbSB0aGUgZGVmYXVsdCB2YWx1ZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlc3QgLSBhcmd1bWVudCBuYW1lIChgZGVzdGAgdmFsdWUpXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY29uc3QgaXNOb3REZWZhdWx0ID0gXy5vdmVyRXZlcnkoW1xuICAgIGRlZmF1bHRJc0RlZmluZWQsXG4gICAgXy5vdmVyU29tZShbXG4gICAgICB0eXBlc0RpZmZlcixcbiAgICAgIF8ub3ZlckV2ZXJ5KFtcbiAgICAgICAgZGVmYXVsdFZhbHVlSXNBcnJheSxcbiAgICAgICAgYXJnVmFsdWVOb3RBcnJheU9yQXJyYXlzRGlmZmVyXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRWYWx1ZU5vdEFycmF5QW5kVmFsdWVzVW5lcXVhbFxuICAgIF0pXG4gIF0pO1xuXG4gIGNvbnN0IGRlZmF1bHRzRnJvbVNjaGVtYSA9IGdldERlZmF1bHRzRnJvbVNjaGVtYSgpO1xuXG4gIHJldHVybiBfLnBpY2tCeShhcmdzLCAoX18sIGtleSkgPT4gaXNOb3REZWZhdWx0KGtleSkpO1xufVxuXG5mdW5jdGlvbiBnZXREZXByZWNhdGVkQXJncyAocGFyc2VyLCBhcmdzKSB7XG4gIC8vIGdvIHRocm91Z2ggdGhlIHNlcnZlciBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCBmaWd1cmVcbiAgLy8gb3V0IHdoaWNoIG9mIHRoZSBvbmVzIHVzZWQgYXJlIGRlcHJlY2F0ZWRcbiAgcmV0dXJuIHBhcnNlci5yYXdBcmdzLnJlZHVjZSgoYWNjLCBbW25hbWVdLCB7ZGVzdCwgZGVmYXVsdDogZGVmYXVsdFZhbHVlLCBhY3Rpb259XSkgPT4ge1xuICAgIGlmICghYXJnc1tkZXN0XSB8fCBhcmdzW2Rlc3RdID09PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbj8uZGVwcmVjYXRlZF9mb3IpIHtcbiAgICAgIGFjY1tuYW1lXSA9IGFjdGlvbi5kZXByZWNhdGVkX2ZvcjtcbiAgICB9IGVsc2UgaWYgKGlzU3ViQ2xhc3MoYWN0aW9uLCBTdG9yZURlcHJlY2F0ZWREZWZhdWx0Q2FwYWJpbGl0eUFjdGlvbikpIHtcbiAgICAgIGFjY1tuYW1lXSA9IERFRkFVTFRfQ0FQU19BUkc7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVUbXBEaXIgKHRtcERpcikge1xuICB0cnkge1xuICAgIGF3YWl0IG1rZGlycCh0bXBEaXIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBXZSBjb3VsZCBub3QgZW5zdXJlIHRoYXQgdGhlIHRlbXAgZGlyIHlvdSBzcGVjaWZpZWQgYCArXG4gICAgICAgICAgICAgICAgICAgIGAoJHt0bXBEaXJ9KSBleGlzdHMuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB3cml0ZWFibGUuYCk7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZ2V0QnVpbGRJbmZvLCBjaGVja05vZGVPaywgc2hvd0NvbmZpZyxcbiAgd2Fybk5vZGVEZXByZWNhdGlvbnMsIHZhbGlkYXRlVG1wRGlyLCBnZXROb25EZWZhdWx0U2VydmVyQXJncyxcbiAgZ2V0R2l0UmV2LCBBUFBJVU1fVkVSLCB1cGRhdGVCdWlsZEluZm8sXG4gIGdldERlcHJlY2F0ZWRBcmdzXG59O1xuIl0sImZpbGUiOiJsaWIvY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
7
5
  Object.defineProperty(exports, "__esModule", {
@@ -9,37 +7,61 @@ Object.defineProperty(exports, "__esModule", {
9
7
  });
10
8
  exports.default = void 0;
11
9
 
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
12
  require("source-map-support/register");
13
13
 
14
14
  var _lodash = _interopRequireDefault(require("lodash"));
15
15
 
16
- var _extensionConfig = _interopRequireWildcard(require("./extension-config"));
16
+ var _extensionConfig = _interopRequireDefault(require("./extension-config"));
17
+
18
+ var _extConfigIo = require("./ext-config-io");
17
19
 
18
20
  class DriverConfig extends _extensionConfig.default {
19
- constructor(appiumHome, logFn = null) {
20
- super(appiumHome, _extensionConfig.DRIVER_TYPE, logFn);
21
+ constructor(appiumHome, logFn) {
22
+ super(appiumHome, _extConfigIo.DRIVER_TYPE, logFn);
23
+ this.knownAutomationNames = new Set();
24
+ }
25
+
26
+ async read() {
27
+ this.knownAutomationNames.clear();
28
+ return await super.read();
29
+ }
30
+
31
+ static getInstance(appiumHome, logFn) {
32
+ var _DriverConfig$_instan;
33
+
34
+ const instance = (_DriverConfig$_instan = DriverConfig._instances[appiumHome]) !== null && _DriverConfig$_instan !== void 0 ? _DriverConfig$_instan : new DriverConfig(appiumHome, logFn);
35
+ DriverConfig._instances[appiumHome] = instance;
36
+ return instance;
21
37
  }
22
38
 
23
- getConfigProblems(driver) {
39
+ getConfigProblems(extData, extName) {
24
40
  const problems = [];
25
- const automationNames = [];
26
41
  const {
27
42
  platformNames,
28
43
  automationName
29
- } = driver;
44
+ } = extData;
30
45
 
31
46
  if (!_lodash.default.isArray(platformNames)) {
32
47
  problems.push({
33
- err: 'Missing or incorrect supported platformName list.',
48
+ err: 'Missing or incorrect supported platformNames list.',
34
49
  val: platformNames
35
50
  });
36
51
  } else {
37
- for (const pName of platformNames) {
38
- if (!_lodash.default.isString(pName)) {
39
- problems.push({
40
- err: 'Incorrectly formatted platformName.',
41
- val: pName
42
- });
52
+ if (_lodash.default.isEmpty(platformNames)) {
53
+ problems.push({
54
+ err: 'Empty platformNames list.',
55
+ val: platformNames
56
+ });
57
+ } else {
58
+ for (const pName of platformNames) {
59
+ if (!_lodash.default.isString(pName)) {
60
+ problems.push({
61
+ err: 'Incorrectly formatted platformName.',
62
+ val: pName
63
+ });
64
+ }
43
65
  }
44
66
  }
45
67
  }
@@ -51,14 +73,14 @@ class DriverConfig extends _extensionConfig.default {
51
73
  });
52
74
  }
53
75
 
54
- if (_lodash.default.includes(automationNames, automationName)) {
76
+ if (this.knownAutomationNames.has(automationName)) {
55
77
  problems.push({
56
78
  err: 'Multiple drivers claim support for the same automationName',
57
79
  val: automationName
58
80
  });
59
81
  }
60
82
 
61
- automationNames.push(automationName);
83
+ this.knownAutomationNames.add(automationName);
62
84
  return problems;
63
85
  }
64
86
 
@@ -71,7 +93,8 @@ class DriverConfig extends _extensionConfig.default {
71
93
 
72
94
  }
73
95
 
74
- exports.default = DriverConfig;require('source-map-support').install();
96
+ exports.default = DriverConfig;
97
+ (0, _defineProperty2.default)(DriverConfig, "_instances", {});require('source-map-support').install();
75
98
 
76
99
 
77
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXItY29uZmlnLmpzIl0sIm5hbWVzIjpbIkRyaXZlckNvbmZpZyIsIkV4dGVuc2lvbkNvbmZpZyIsImNvbnN0cnVjdG9yIiwiYXBwaXVtSG9tZSIsImxvZ0ZuIiwiRFJJVkVSX1RZUEUiLCJnZXRDb25maWdQcm9ibGVtcyIsImRyaXZlciIsInByb2JsZW1zIiwiYXV0b21hdGlvbk5hbWVzIiwicGxhdGZvcm1OYW1lcyIsImF1dG9tYXRpb25OYW1lIiwiXyIsImlzQXJyYXkiLCJwdXNoIiwiZXJyIiwidmFsIiwicE5hbWUiLCJpc1N0cmluZyIsImluY2x1ZGVzIiwiZXh0ZW5zaW9uRGVzYyIsImRyaXZlck5hbWUiLCJ2ZXJzaW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRWUsTUFBTUEsWUFBTixTQUEyQkMsd0JBQTNCLENBQTJDO0FBQ3hEQyxFQUFBQSxXQUFXLENBQUVDLFVBQUYsRUFBY0MsS0FBSyxHQUFHLElBQXRCLEVBQTRCO0FBQ3JDLFVBQU1ELFVBQU4sRUFBa0JFLDRCQUFsQixFQUErQkQsS0FBL0I7QUFDRDs7QUFFREUsRUFBQUEsaUJBQWlCLENBQUVDLE1BQUYsRUFBVTtBQUN6QixVQUFNQyxRQUFRLEdBQUcsRUFBakI7QUFDQSxVQUFNQyxlQUFlLEdBQUcsRUFBeEI7QUFDQSxVQUFNO0FBQUNDLE1BQUFBLGFBQUQ7QUFBZ0JDLE1BQUFBO0FBQWhCLFFBQWtDSixNQUF4Qzs7QUFFQSxRQUFJLENBQUNLLGdCQUFFQyxPQUFGLENBQVVILGFBQVYsQ0FBTCxFQUErQjtBQUM3QkYsTUFBQUEsUUFBUSxDQUFDTSxJQUFULENBQWM7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLG1EQURPO0FBRVpDLFFBQUFBLEdBQUcsRUFBRU47QUFGTyxPQUFkO0FBSUQsS0FMRCxNQUtPO0FBQ0wsV0FBSyxNQUFNTyxLQUFYLElBQW9CUCxhQUFwQixFQUFtQztBQUNqQyxZQUFJLENBQUNFLGdCQUFFTSxRQUFGLENBQVdELEtBQVgsQ0FBTCxFQUF3QjtBQUN0QlQsVUFBQUEsUUFBUSxDQUFDTSxJQUFULENBQWM7QUFBQ0MsWUFBQUEsR0FBRyxFQUFFLHFDQUFOO0FBQTZDQyxZQUFBQSxHQUFHLEVBQUVDO0FBQWxELFdBQWQ7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsUUFBSSxDQUFDTCxnQkFBRU0sUUFBRixDQUFXUCxjQUFYLENBQUwsRUFBaUM7QUFDL0JILE1BQUFBLFFBQVEsQ0FBQ00sSUFBVCxDQUFjO0FBQUNDLFFBQUFBLEdBQUcsRUFBRSxxQ0FBTjtBQUE2Q0MsUUFBQUEsR0FBRyxFQUFFTDtBQUFsRCxPQUFkO0FBQ0Q7O0FBRUQsUUFBSUMsZ0JBQUVPLFFBQUYsQ0FBV1YsZUFBWCxFQUE0QkUsY0FBNUIsQ0FBSixFQUFpRDtBQUMvQ0gsTUFBQUEsUUFBUSxDQUFDTSxJQUFULENBQWM7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLDREQURPO0FBRVpDLFFBQUFBLEdBQUcsRUFBRUw7QUFGTyxPQUFkO0FBSUQ7O0FBQ0RGLElBQUFBLGVBQWUsQ0FBQ0ssSUFBaEIsQ0FBcUJILGNBQXJCO0FBRUEsV0FBT0gsUUFBUDtBQUNEOztBQUVEWSxFQUFBQSxhQUFhLENBQUVDLFVBQUYsRUFBYztBQUFDQyxJQUFBQSxPQUFEO0FBQVVYLElBQUFBO0FBQVYsR0FBZCxFQUF5QztBQUNwRCxXQUFRLEdBQUVVLFVBQVcsSUFBR0MsT0FBUSxxQkFBb0JYLGNBQWUsSUFBbkU7QUFDRDs7QUF4Q3VEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBFeHRlbnNpb25Db25maWcsIHsgRFJJVkVSX1RZUEUgfSBmcm9tICcuL2V4dGVuc2lvbi1jb25maWcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcml2ZXJDb25maWcgZXh0ZW5kcyBFeHRlbnNpb25Db25maWcge1xuICBjb25zdHJ1Y3RvciAoYXBwaXVtSG9tZSwgbG9nRm4gPSBudWxsKSB7XG4gICAgc3VwZXIoYXBwaXVtSG9tZSwgRFJJVkVSX1RZUEUsIGxvZ0ZuKTtcbiAgfVxuXG4gIGdldENvbmZpZ1Byb2JsZW1zIChkcml2ZXIpIHtcbiAgICBjb25zdCBwcm9ibGVtcyA9IFtdO1xuICAgIGNvbnN0IGF1dG9tYXRpb25OYW1lcyA9IFtdO1xuICAgIGNvbnN0IHtwbGF0Zm9ybU5hbWVzLCBhdXRvbWF0aW9uTmFtZX0gPSBkcml2ZXI7XG5cbiAgICBpZiAoIV8uaXNBcnJheShwbGF0Zm9ybU5hbWVzKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgIGVycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IHN1cHBvcnRlZCBwbGF0Zm9ybU5hbWUgbGlzdC4nLFxuICAgICAgICB2YWw6IHBsYXRmb3JtTmFtZXNcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IHBOYW1lIG9mIHBsYXRmb3JtTmFtZXMpIHtcbiAgICAgICAgaWYgKCFfLmlzU3RyaW5nKHBOYW1lKSkge1xuICAgICAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ0luY29ycmVjdGx5IGZvcm1hdHRlZCBwbGF0Zm9ybU5hbWUuJywgdmFsOiBwTmFtZX0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKGF1dG9tYXRpb25OYW1lKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7ZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3QgYXV0b21hdGlvbk5hbWUnLCB2YWw6IGF1dG9tYXRpb25OYW1lfSk7XG4gICAgfVxuXG4gICAgaWYgKF8uaW5jbHVkZXMoYXV0b21hdGlvbk5hbWVzLCBhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICBlcnI6ICdNdWx0aXBsZSBkcml2ZXJzIGNsYWltIHN1cHBvcnQgZm9yIHRoZSBzYW1lIGF1dG9tYXRpb25OYW1lJyxcbiAgICAgICAgdmFsOiBhdXRvbWF0aW9uTmFtZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGF1dG9tYXRpb25OYW1lcy5wdXNoKGF1dG9tYXRpb25OYW1lKTtcblxuICAgIHJldHVybiBwcm9ibGVtcztcbiAgfVxuXG4gIGV4dGVuc2lvbkRlc2MgKGRyaXZlck5hbWUsIHt2ZXJzaW9uLCBhdXRvbWF0aW9uTmFtZX0pIHtcbiAgICByZXR1cm4gYCR7ZHJpdmVyTmFtZX1AJHt2ZXJzaW9ufSAoYXV0b21hdGlvbk5hbWUgJyR7YXV0b21hdGlvbk5hbWV9JylgO1xuICB9XG59XG5cbiJdLCJmaWxlIjoibGliL2RyaXZlci1jb25maWcuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
100
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXItY29uZmlnLmpzIl0sIm5hbWVzIjpbIkRyaXZlckNvbmZpZyIsIkV4dGVuc2lvbkNvbmZpZyIsImNvbnN0cnVjdG9yIiwiYXBwaXVtSG9tZSIsImxvZ0ZuIiwiRFJJVkVSX1RZUEUiLCJrbm93bkF1dG9tYXRpb25OYW1lcyIsIlNldCIsInJlYWQiLCJjbGVhciIsImdldEluc3RhbmNlIiwiaW5zdGFuY2UiLCJfaW5zdGFuY2VzIiwiZ2V0Q29uZmlnUHJvYmxlbXMiLCJleHREYXRhIiwiZXh0TmFtZSIsInByb2JsZW1zIiwicGxhdGZvcm1OYW1lcyIsImF1dG9tYXRpb25OYW1lIiwiXyIsImlzQXJyYXkiLCJwdXNoIiwiZXJyIiwidmFsIiwiaXNFbXB0eSIsInBOYW1lIiwiaXNTdHJpbmciLCJoYXMiLCJhZGQiLCJleHRlbnNpb25EZXNjIiwiZHJpdmVyTmFtZSIsInZlcnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFZSxNQUFNQSxZQUFOLFNBQTJCQyx3QkFBM0IsQ0FBMkM7QUFleERDLEVBQUFBLFdBQVcsQ0FBRUMsVUFBRixFQUFjQyxLQUFkLEVBQXFCO0FBQzlCLFVBQU1ELFVBQU4sRUFBa0JFLHdCQUFsQixFQUErQkQsS0FBL0I7QUFFQSxTQUFLRSxvQkFBTCxHQUE0QixJQUFJQyxHQUFKLEVBQTVCO0FBQ0Q7O0FBRVMsUUFBSkMsSUFBSSxHQUFJO0FBQ1osU0FBS0Ysb0JBQUwsQ0FBMEJHLEtBQTFCO0FBQ0EsV0FBTyxNQUFNLE1BQU1ELElBQU4sRUFBYjtBQUNEOztBQVFpQixTQUFYRSxXQUFXLENBQUVQLFVBQUYsRUFBY0MsS0FBZCxFQUFxQjtBQUFBOztBQUNyQyxVQUFNTyxRQUFRLDRCQUFHWCxZQUFZLENBQUNZLFVBQWIsQ0FBd0JULFVBQXhCLENBQUgseUVBQTBDLElBQUlILFlBQUosQ0FBaUJHLFVBQWpCLEVBQTZCQyxLQUE3QixDQUF4RDtBQUNBSixJQUFBQSxZQUFZLENBQUNZLFVBQWIsQ0FBd0JULFVBQXhCLElBQXNDUSxRQUF0QztBQUNBLFdBQU9BLFFBQVA7QUFDRDs7QUFTREUsRUFBQUEsaUJBQWlCLENBQUVDLE9BQUYsRUFBV0MsT0FBWCxFQUFvQjtBQUNuQyxVQUFNQyxRQUFRLEdBQUcsRUFBakI7QUFDQSxVQUFNO0FBQUNDLE1BQUFBLGFBQUQ7QUFBZ0JDLE1BQUFBO0FBQWhCLFFBQWtDSixPQUF4Qzs7QUFFQSxRQUFJLENBQUNLLGdCQUFFQyxPQUFGLENBQVVILGFBQVYsQ0FBTCxFQUErQjtBQUM3QkQsTUFBQUEsUUFBUSxDQUFDSyxJQUFULENBQWM7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLG9EQURPO0FBRVpDLFFBQUFBLEdBQUcsRUFBRU47QUFGTyxPQUFkO0FBSUQsS0FMRCxNQUtPO0FBQ0wsVUFBSUUsZ0JBQUVLLE9BQUYsQ0FBVVAsYUFBVixDQUFKLEVBQThCO0FBQzVCRCxRQUFBQSxRQUFRLENBQUNLLElBQVQsQ0FBYztBQUNaQyxVQUFBQSxHQUFHLEVBQUUsMkJBRE87QUFFWkMsVUFBQUEsR0FBRyxFQUFFTjtBQUZPLFNBQWQ7QUFJRCxPQUxELE1BS087QUFDTCxhQUFLLE1BQU1RLEtBQVgsSUFBb0JSLGFBQXBCLEVBQW1DO0FBQ2pDLGNBQUksQ0FBQ0UsZ0JBQUVPLFFBQUYsQ0FBV0QsS0FBWCxDQUFMLEVBQXdCO0FBQ3RCVCxZQUFBQSxRQUFRLENBQUNLLElBQVQsQ0FBYztBQUFDQyxjQUFBQSxHQUFHLEVBQUUscUNBQU47QUFBNkNDLGNBQUFBLEdBQUcsRUFBRUU7QUFBbEQsYUFBZDtBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQUVELFFBQUksQ0FBQ04sZ0JBQUVPLFFBQUYsQ0FBV1IsY0FBWCxDQUFMLEVBQWlDO0FBQy9CRixNQUFBQSxRQUFRLENBQUNLLElBQVQsQ0FBYztBQUFDQyxRQUFBQSxHQUFHLEVBQUUscUNBQU47QUFBNkNDLFFBQUFBLEdBQUcsRUFBRUw7QUFBbEQsT0FBZDtBQUNEOztBQUVELFFBQUksS0FBS1osb0JBQUwsQ0FBMEJxQixHQUExQixDQUE4QlQsY0FBOUIsQ0FBSixFQUFtRDtBQUNqREYsTUFBQUEsUUFBUSxDQUFDSyxJQUFULENBQWM7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLDREQURPO0FBRVpDLFFBQUFBLEdBQUcsRUFBRUw7QUFGTyxPQUFkO0FBSUQ7O0FBR0QsU0FBS1osb0JBQUwsQ0FBMEJzQixHQUExQixDQUE4QlYsY0FBOUI7QUFFQSxXQUFPRixRQUFQO0FBQ0Q7O0FBTURhLEVBQUFBLGFBQWEsQ0FBRUMsVUFBRixFQUFjO0FBQUNDLElBQUFBLE9BQUQ7QUFBVWIsSUFBQUE7QUFBVixHQUFkLEVBQXlDO0FBQ3BELFdBQVEsR0FBRVksVUFBVyxJQUFHQyxPQUFRLHFCQUFvQmIsY0FBZSxJQUFuRTtBQUNEOztBQTVGdUQ7Ozs4QkFBckNsQixZLGdCQU9DLEUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBFeHRlbnNpb25Db25maWcgZnJvbSAnLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IERSSVZFUl9UWVBFIH0gZnJvbSAnLi9leHQtY29uZmlnLWlvJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJpdmVyQ29uZmlnIGV4dGVuZHMgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiBgQVBQSVVNX0hPTUVgIHZhbHVlcyB0byB7QGxpbmsgRHJpdmVyQ29uZmlnfSBpbnN0YW5jZXMuXG4gICAqIEVhY2ggYEFQUElVTV9IT01FYCBzaG91bGQgb25seSBoYXZlIG9uZSBhc3NvY2lhdGVkIGBEcml2ZXJDb25maWdgIGluc3RhbmNlLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxEcml2ZXJDb25maWc+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIF9pbnN0YW5jZXMgPSB7fTtcblxuICAvKipcbiAgICogQ2FsbCB7QGxpbmsgRHJpdmVyQ29uZmlnLmdldEluc3RhbmNlfSBpbnN0ZWFkLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZVxuICAgKiBAcGFyYW0geyguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZH0gW2xvZ0ZuXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGFwcGl1bUhvbWUsIGxvZ0ZuKSB7XG4gICAgc3VwZXIoYXBwaXVtSG9tZSwgRFJJVkVSX1RZUEUsIGxvZ0ZuKTtcbiAgICAvKiogQHR5cGUge1NldDxzdHJpbmc+fSAqL1xuICAgIHRoaXMua25vd25BdXRvbWF0aW9uTmFtZXMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICBhc3luYyByZWFkICgpIHtcbiAgICB0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmNsZWFyKCk7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnJlYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG9yIGdldHMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERyaXZlckNvbmZpZ30gYmFzZWQgdmFsdWUgb2YgYGFwcGl1bUhvbWVgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lIC0gYEFQUElVTV9IT01FYCBwYXRoXG4gICAqIEBwYXJhbSB7KC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkfSBbbG9nRm5dIC0gT3B0aW9uYWwgbG9nZ2luZyBmdW5jdGlvblxuICAgKiBAcmV0dXJucyB7RHJpdmVyQ29uZmlnfVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlIChhcHBpdW1Ib21lLCBsb2dGbikge1xuICAgIGNvbnN0IGluc3RhbmNlID0gRHJpdmVyQ29uZmlnLl9pbnN0YW5jZXNbYXBwaXVtSG9tZV0gPz8gbmV3IERyaXZlckNvbmZpZyhhcHBpdW1Ib21lLCBsb2dGbik7XG4gICAgRHJpdmVyQ29uZmlnLl9pbnN0YW5jZXNbYXBwaXVtSG9tZV0gPSBpbnN0YW5jZTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV4dERhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICogQHJldHVybnMge2ltcG9ydCgnLi9leHRlbnNpb24tY29uZmlnJykuUHJvYmxlbVtdfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGdldENvbmZpZ1Byb2JsZW1zIChleHREYXRhLCBleHROYW1lKSB7XG4gICAgY29uc3QgcHJvYmxlbXMgPSBbXTtcbiAgICBjb25zdCB7cGxhdGZvcm1OYW1lcywgYXV0b21hdGlvbk5hbWV9ID0gZXh0RGF0YTtcblxuICAgIGlmICghXy5pc0FycmF5KHBsYXRmb3JtTmFtZXMpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3Qgc3VwcG9ydGVkIHBsYXRmb3JtTmFtZXMgbGlzdC4nLFxuICAgICAgICB2YWw6IHBsYXRmb3JtTmFtZXNcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXy5pc0VtcHR5KHBsYXRmb3JtTmFtZXMpKSB7XG4gICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgIGVycjogJ0VtcHR5IHBsYXRmb3JtTmFtZXMgbGlzdC4nLFxuICAgICAgICAgIHZhbDogcGxhdGZvcm1OYW1lc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgcE5hbWUgb2YgcGxhdGZvcm1OYW1lcykge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhwTmFtZSkpIHtcbiAgICAgICAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ0luY29ycmVjdGx5IGZvcm1hdHRlZCBwbGF0Zm9ybU5hbWUuJywgdmFsOiBwTmFtZX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghXy5pc1N0cmluZyhhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IGF1dG9tYXRpb25OYW1lJywgdmFsOiBhdXRvbWF0aW9uTmFtZX0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmhhcyhhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICBlcnI6ICdNdWx0aXBsZSBkcml2ZXJzIGNsYWltIHN1cHBvcnQgZm9yIHRoZSBzYW1lIGF1dG9tYXRpb25OYW1lJyxcbiAgICAgICAgdmFsOiBhdXRvbWF0aW9uTmFtZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc2hvdWxkIHdlIHJldGFpbiB0aGUgbmFtZSBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24sIG9uY2Ugd2UndmUgY2hlY2tlZCB0aGVyZSBhcmUgbm8gcHJvYmxlbXM/XG4gICAgdGhpcy5rbm93bkF1dG9tYXRpb25OYW1lcy5hZGQoYXV0b21hdGlvbk5hbWUpO1xuXG4gICAgcmV0dXJuIHByb2JsZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkcml2ZXJOYW1lXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHREYXRhXG4gICAqL1xuICBleHRlbnNpb25EZXNjIChkcml2ZXJOYW1lLCB7dmVyc2lvbiwgYXV0b21hdGlvbk5hbWV9KSB7XG4gICAgcmV0dXJuIGAke2RyaXZlck5hbWV9QCR7dmVyc2lvbn0gKGF1dG9tYXRpb25OYW1lICcke2F1dG9tYXRpb25OYW1lfScpYDtcbiAgfVxufVxuXG4iXSwiZmlsZSI6ImxpYi9kcml2ZXItY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.findMatchingDriver = findMatchingDriver;
9
8
  exports.KNOWN_DRIVERS = void 0;
9
+ exports.findMatchingDriver = findMatchingDriver;
10
10
 
11
11
  require("source-map-support/register");
12
12
 
@@ -20,9 +20,12 @@ const KNOWN_DRIVERS = {
20
20
  youiengine: 'appium-youiengine-driver',
21
21
  windows: 'appium-windows-driver',
22
22
  mac: 'appium-mac-driver',
23
+ mac2: 'appium-mac2-driver',
23
24
  espresso: 'appium-espresso-driver',
24
25
  tizen: 'appium-tizen-driver',
25
- flutter: 'appium-flutter-driver'
26
+ flutter: 'appium-flutter-driver',
27
+ safari: 'appium-safari-driver',
28
+ gecko: 'appium-geckodriver'
26
29
  };
27
30
  exports.KNOWN_DRIVERS = KNOWN_DRIVERS;
28
31
 
@@ -84,7 +87,8 @@ function findMatchingDriver(config, {
84
87
 
85
88
  return {
86
89
  driver,
87
- version
90
+ version,
91
+ driverName
88
92
  };
89
93
  } catch (err) {
90
94
  const msg = `Could not find a driver for automationName ` + `'${automationName}' and platformName ${platformName}'. ` + `Have you installed a driver that supports those ` + `capabilities? Run 'appium driver list --installed' to see. ` + `(Lower-level error: ${err.message})`;
@@ -93,4 +97,4 @@ function findMatchingDriver(config, {
93
97
  }require('source-map-support').install();
94
98
 
95
99
 
96
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXJzLmpzIl0sIm5hbWVzIjpbIktOT1dOX0RSSVZFUlMiLCJ1aWF1dG9tYXRvcjIiLCJ4Y3VpdGVzdCIsInlvdWllbmdpbmUiLCJ3aW5kb3dzIiwibWFjIiwiZXNwcmVzc28iLCJ0aXplbiIsImZsdXR0ZXIiLCJnZXREcml2ZXJCeVN1cHBvcnQiLCJkcml2ZXJzIiwibWF0Y2hBdXRvbWF0aW9uTmFtZSIsIm1hdGNoUGxhdGZvcm1OYW1lIiwiZHJpdmVyTmFtZSIsImRyaXZlckRhdGEiLCJfIiwidG9QYWlycyIsImF1dG9tYXRpb25OYW1lIiwicGxhdGZvcm1OYW1lcyIsImFOYW1lTWF0Y2hlcyIsInRvTG93ZXJDYXNlIiwicE5hbWVNYXRjaGVzIiwiaW5jbHVkZXMiLCJtYXAiLCJ0b0xvd2VyIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZmluZE1hdGNoaW5nRHJpdmVyIiwiY29uZmlnIiwicGxhdGZvcm1OYW1lIiwiaXNTdHJpbmciLCJsb2ciLCJpbmZvIiwibWFpbkNsYXNzIiwidmVyc2lvbiIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJnZXRFeHRlbnNpb25SZXF1aXJlUGF0aCIsImRyaXZlciIsInJlcXVpcmUiLCJlcnIiLCJtc2ciLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFPQSxNQUFNQSxhQUFhLEdBQUc7QUFDcEJDLEVBQUFBLFlBQVksRUFBRSw0QkFETTtBQUVwQkMsRUFBQUEsUUFBUSxFQUFFLHdCQUZVO0FBR3BCQyxFQUFBQSxVQUFVLEVBQUUsMEJBSFE7QUFJcEJDLEVBQUFBLE9BQU8sRUFBRSx1QkFKVztBQUtwQkMsRUFBQUEsR0FBRyxFQUFFLG1CQUxlO0FBTXBCQyxFQUFBQSxRQUFRLEVBQUUsd0JBTlU7QUFPcEJDLEVBQUFBLEtBQUssRUFBRSxxQkFQYTtBQVFwQkMsRUFBQUEsT0FBTyxFQUFFO0FBUlcsQ0FBdEI7OztBQVdBLFNBQVNDLGtCQUFULENBQTZCQyxPQUE3QixFQUFzQ0MsbUJBQXRDLEVBQTJEQyxpQkFBM0QsRUFBOEU7QUFDNUUsT0FBSyxNQUFNLENBQUNDLFVBQUQsRUFBYUMsVUFBYixDQUFYLElBQXVDQyxnQkFBRUMsT0FBRixDQUFVTixPQUFWLENBQXZDLEVBQTJEO0FBQ3pELFVBQU07QUFBQ08sTUFBQUEsY0FBRDtBQUFpQkMsTUFBQUE7QUFBakIsUUFBa0NKLFVBQXhDO0FBQ0EsVUFBTUssWUFBWSxHQUFHRixjQUFjLENBQUNHLFdBQWYsT0FBaUNULG1CQUFtQixDQUFDUyxXQUFwQixFQUF0RDs7QUFDQSxVQUFNQyxZQUFZLEdBQUdOLGdCQUFFTyxRQUFGLENBQVdKLGFBQWEsQ0FBQ0ssR0FBZCxDQUFrQlIsZ0JBQUVTLE9BQXBCLENBQVgsRUFDV1osaUJBQWlCLENBQUNRLFdBQWxCLEVBRFgsQ0FBckI7O0FBR0EsUUFBSUQsWUFBWSxJQUFJRSxZQUFwQixFQUFrQztBQUNoQyxhQUFPO0FBQUNSLFFBQUFBLFVBQUQ7QUFBYSxXQUFHQztBQUFoQixPQUFQO0FBQ0Q7O0FBRUQsUUFBSUssWUFBSixFQUFrQjtBQUNoQixZQUFNLElBQUlNLEtBQUosQ0FBVyxXQUFVWixVQUFXLDRCQUF0QixHQUNDLElBQUdJLGNBQWUsK0JBRG5CLEdBRUMsNkJBQTRCTCxpQkFBa0IsZUFGL0MsR0FHQyxxQkFIRCxHQUlBYyxJQUFJLENBQUNDLFNBQUwsQ0FBZVQsYUFBZixDQUpWLENBQU47QUFLRDtBQUNGOztBQUVELFFBQU0sSUFBSU8sS0FBSixDQUFXLHVEQUFYLENBQU47QUFDRDs7QUFFRCxTQUFTRyxrQkFBVCxDQUE2QkMsTUFBN0IsRUFBcUM7QUFBQ1osRUFBQUEsY0FBRDtBQUFpQmEsRUFBQUE7QUFBakIsQ0FBckMsRUFBcUU7QUFDbkUsTUFBSSxDQUFDZixnQkFBRWdCLFFBQUYsQ0FBV0QsWUFBWCxDQUFMLEVBQStCO0FBQzdCLFVBQU0sSUFBSUwsS0FBSixDQUFVLDRDQUFWLENBQU47QUFDRDs7QUFFRCxNQUFJLENBQUNWLGdCQUFFZ0IsUUFBRixDQUFXZCxjQUFYLENBQUwsRUFBaUM7QUFDL0IsVUFBTSxJQUFJUSxLQUFKLENBQVUsK0NBQVYsQ0FBTjtBQUNEOztBQUVETyxrQkFBSUMsSUFBSixDQUFVLHdEQUFELEdBQ0MsSUFBR2hCLGNBQWUsdUJBQXNCYSxZQUFhLEdBRC9EOztBQUdBLE1BQUk7QUFDRixVQUFNO0FBQ0pqQixNQUFBQSxVQURJO0FBRUpxQixNQUFBQSxTQUZJO0FBR0pDLE1BQUFBO0FBSEksUUFJRjFCLGtCQUFrQixDQUFDb0IsTUFBTSxDQUFDTyxtQkFBUixFQUE2Qm5CLGNBQTdCLEVBQTZDYSxZQUE3QyxDQUp0Qjs7QUFLQUUsb0JBQUlDLElBQUosQ0FBVSxRQUFPcEIsVUFBVywwQ0FBNUI7O0FBQ0FtQixvQkFBSUMsSUFBSixDQUFVLHNCQUFxQkosTUFBTSxDQUFDUSx1QkFBUCxDQUErQnhCLFVBQS9CLENBQTJDLEVBQTFFOztBQUNBLFVBQU15QixNQUFNLEdBQUdULE1BQU0sQ0FBQ1UsT0FBUCxDQUFlMUIsVUFBZixDQUFmOztBQUNBLFFBQUksQ0FBQ3lCLE1BQUwsRUFBYTtBQUNYLFlBQU0sSUFBSWIsS0FBSixDQUFXLGFBQVlTLFNBQVUsb0NBQWpDLENBQU47QUFDRDs7QUFDRCxXQUFPO0FBQUNJLE1BQUFBLE1BQUQ7QUFBU0gsTUFBQUE7QUFBVCxLQUFQO0FBQ0QsR0FiRCxDQWFFLE9BQU9LLEdBQVAsRUFBWTtBQUNaLFVBQU1DLEdBQUcsR0FBSSw2Q0FBRCxHQUNDLElBQUd4QixjQUFlLHNCQUFxQmEsWUFBYSxLQURyRCxHQUVDLGtEQUZELEdBR0MsNkRBSEQsR0FJQyx1QkFBc0JVLEdBQUcsQ0FBQ0UsT0FBUSxHQUovQztBQUtBLFVBQU0sSUFBSWpCLEtBQUosQ0FBVWdCLEdBQVYsQ0FBTjtBQUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5cblxuLy8gVGhpcyBpcyBhIG1hcCBvZiBkcml2ZXIgbmFtZXMgdG8gbnBtIHBhY2thZ2VzIHJlcHJlc2VudGluZyB0aG9zZSBkcml2ZXJzLlxuLy8gVGhlIGRyaXZlcnMgaW4gdGhpcyBsaXN0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSBDTEkgc28gdXNlcnMgY2FuIGp1c3Rcbi8vIHR5cGUgJ2FwcGl1bSBkcml2ZXIgaW5zdGFsbCAnbmFtZScnLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgZnVsbFxuLy8gbnBtIHBhY2thZ2UuIEkuZS4sIHRoZXNlIGFyZSB0aGUgb2ZmaWNpYWxseSByZWNvZ25pemVkIGRyaXZlcnMuXG5jb25zdCBLTk9XTl9EUklWRVJTID0ge1xuICB1aWF1dG9tYXRvcjI6ICdhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcicsXG4gIHhjdWl0ZXN0OiAnYXBwaXVtLXhjdWl0ZXN0LWRyaXZlcicsXG4gIHlvdWllbmdpbmU6ICdhcHBpdW0teW91aWVuZ2luZS1kcml2ZXInLFxuICB3aW5kb3dzOiAnYXBwaXVtLXdpbmRvd3MtZHJpdmVyJyxcbiAgbWFjOiAnYXBwaXVtLW1hYy1kcml2ZXInLFxuICBlc3ByZXNzbzogJ2FwcGl1bS1lc3ByZXNzby1kcml2ZXInLFxuICB0aXplbjogJ2FwcGl1bS10aXplbi1kcml2ZXInLFxuICBmbHV0dGVyOiAnYXBwaXVtLWZsdXR0ZXItZHJpdmVyJyxcbn07XG5cbmZ1bmN0aW9uIGdldERyaXZlckJ5U3VwcG9ydCAoZHJpdmVycywgbWF0Y2hBdXRvbWF0aW9uTmFtZSwgbWF0Y2hQbGF0Zm9ybU5hbWUpIHtcbiAgZm9yIChjb25zdCBbZHJpdmVyTmFtZSwgZHJpdmVyRGF0YV0gb2YgXy50b1BhaXJzKGRyaXZlcnMpKSB7XG4gICAgY29uc3Qge2F1dG9tYXRpb25OYW1lLCBwbGF0Zm9ybU5hbWVzfSA9IGRyaXZlckRhdGE7XG4gICAgY29uc3QgYU5hbWVNYXRjaGVzID0gYXV0b21hdGlvbk5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbWF0Y2hBdXRvbWF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHBOYW1lTWF0Y2hlcyA9IF8uaW5jbHVkZXMocGxhdGZvcm1OYW1lcy5tYXAoXy50b0xvd2VyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoUGxhdGZvcm1OYW1lLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgaWYgKGFOYW1lTWF0Y2hlcyAmJiBwTmFtZU1hdGNoZXMpIHtcbiAgICAgIHJldHVybiB7ZHJpdmVyTmFtZSwgLi4uZHJpdmVyRGF0YX07XG4gICAgfVxuXG4gICAgaWYgKGFOYW1lTWF0Y2hlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEcml2ZXIgJyR7ZHJpdmVyTmFtZX0nIHN1cHBvcnRzIGF1dG9tYXRpb25OYW1lIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGAnJHthdXRvbWF0aW9uTmFtZX0nLCBidXQgQXBwaXVtIGNvdWxkIG5vdCBmaW5kIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBzdXBwb3J0IGZvciBwbGF0Zm9ybU5hbWUgJyR7bWF0Y2hQbGF0Zm9ybU5hbWV9Jy4gU3VwcG9ydGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBwbGF0Zm9ybU5hbWVzIGFyZTogYCArXG4gICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkocGxhdGZvcm1OYW1lcykpO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgaW5zdGFsbGVkIGRyaXZlciB0byBzdXBwb3J0IGdpdmVuIGNhcHNgKTtcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoaW5nRHJpdmVyIChjb25maWcsIHthdXRvbWF0aW9uTmFtZSwgcGxhdGZvcm1OYW1lfSkge1xuICBpZiAoIV8uaXNTdHJpbmcocGxhdGZvcm1OYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgaW5jbHVkZSBhIHBsYXRmb3JtTmFtZSBjYXBhYmlsaXR5Jyk7XG4gIH1cblxuICBpZiAoIV8uaXNTdHJpbmcoYXV0b21hdGlvbk5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBpbmNsdWRlIGFuIGF1dG9tYXRpb25OYW1lIGNhcGFiaWxpdHknKTtcbiAgfVxuXG4gIGxvZy5pbmZvKGBBdHRlbXB0aW5nIHRvIGZpbmQgbWF0Y2hpbmcgZHJpdmVyIGZvciBhdXRvbWF0aW9uTmFtZSBgICtcbiAgICAgICAgICAgYCcke2F1dG9tYXRpb25OYW1lfScgYW5kIHBsYXRmb3JtTmFtZSAnJHtwbGF0Zm9ybU5hbWV9J2ApO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qge1xuICAgICAgZHJpdmVyTmFtZSxcbiAgICAgIG1haW5DbGFzcyxcbiAgICAgIHZlcnNpb24sXG4gICAgfSA9IGdldERyaXZlckJ5U3VwcG9ydChjb25maWcuaW5zdGFsbGVkRXh0ZW5zaW9ucywgYXV0b21hdGlvbk5hbWUsIHBsYXRmb3JtTmFtZSk7XG4gICAgbG9nLmluZm8oYFRoZSAnJHtkcml2ZXJOYW1lfScgZHJpdmVyIHdhcyBpbnN0YWxsZWQgYW5kIG1hdGNoZWQgY2Fwcy5gKTtcbiAgICBsb2cuaW5mbyhgV2lsbCByZXF1aXJlIGl0IGF0ICR7Y29uZmlnLmdldEV4dGVuc2lvblJlcXVpcmVQYXRoKGRyaXZlck5hbWUpfWApO1xuICAgIGNvbnN0IGRyaXZlciA9IGNvbmZpZy5yZXF1aXJlKGRyaXZlck5hbWUpO1xuICAgIGlmICghZHJpdmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1haW5DbGFzcyAke21haW5DbGFzc30gZGlkIG5vdCByZXN1bHQgaW4gYSBkcml2ZXIgb2JqZWN0YCk7XG4gICAgfVxuICAgIHJldHVybiB7ZHJpdmVyLCB2ZXJzaW9ufTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbXNnID0gYENvdWxkIG5vdCBmaW5kIGEgZHJpdmVyIGZvciBhdXRvbWF0aW9uTmFtZSBgICtcbiAgICAgICAgICAgICAgICBgJyR7YXV0b21hdGlvbk5hbWV9JyBhbmQgcGxhdGZvcm1OYW1lICR7cGxhdGZvcm1OYW1lfScuIGAgK1xuICAgICAgICAgICAgICAgIGBIYXZlIHlvdSBpbnN0YWxsZWQgYSBkcml2ZXIgdGhhdCBzdXBwb3J0cyB0aG9zZSBgICtcbiAgICAgICAgICAgICAgICBgY2FwYWJpbGl0aWVzPyBSdW4gJ2FwcGl1bSBkcml2ZXIgbGlzdCAtLWluc3RhbGxlZCcgdG8gc2VlLiBgICtcbiAgICAgICAgICAgICAgICBgKExvd2VyLWxldmVsIGVycm9yOiAke2Vyci5tZXNzYWdlfSlgO1xuICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIGZpbmRNYXRjaGluZ0RyaXZlcixcbiAgS05PV05fRFJJVkVSUyxcbn07XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
100
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXJzLmpzIl0sIm5hbWVzIjpbIktOT1dOX0RSSVZFUlMiLCJ1aWF1dG9tYXRvcjIiLCJ4Y3VpdGVzdCIsInlvdWllbmdpbmUiLCJ3aW5kb3dzIiwibWFjIiwibWFjMiIsImVzcHJlc3NvIiwidGl6ZW4iLCJmbHV0dGVyIiwic2FmYXJpIiwiZ2Vja28iLCJnZXREcml2ZXJCeVN1cHBvcnQiLCJkcml2ZXJzIiwibWF0Y2hBdXRvbWF0aW9uTmFtZSIsIm1hdGNoUGxhdGZvcm1OYW1lIiwiZHJpdmVyTmFtZSIsImRyaXZlckRhdGEiLCJfIiwidG9QYWlycyIsImF1dG9tYXRpb25OYW1lIiwicGxhdGZvcm1OYW1lcyIsImFOYW1lTWF0Y2hlcyIsInRvTG93ZXJDYXNlIiwicE5hbWVNYXRjaGVzIiwiaW5jbHVkZXMiLCJtYXAiLCJ0b0xvd2VyIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZmluZE1hdGNoaW5nRHJpdmVyIiwiY29uZmlnIiwicGxhdGZvcm1OYW1lIiwiaXNTdHJpbmciLCJsb2ciLCJpbmZvIiwibWFpbkNsYXNzIiwidmVyc2lvbiIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJnZXRFeHRlbnNpb25SZXF1aXJlUGF0aCIsImRyaXZlciIsInJlcXVpcmUiLCJlcnIiLCJtc2ciLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFPQSxNQUFNQSxhQUFhLEdBQUc7QUFDcEJDLEVBQUFBLFlBQVksRUFBRSw0QkFETTtBQUVwQkMsRUFBQUEsUUFBUSxFQUFFLHdCQUZVO0FBR3BCQyxFQUFBQSxVQUFVLEVBQUUsMEJBSFE7QUFJcEJDLEVBQUFBLE9BQU8sRUFBRSx1QkFKVztBQUtwQkMsRUFBQUEsR0FBRyxFQUFFLG1CQUxlO0FBTXBCQyxFQUFBQSxJQUFJLEVBQUUsb0JBTmM7QUFPcEJDLEVBQUFBLFFBQVEsRUFBRSx3QkFQVTtBQVFwQkMsRUFBQUEsS0FBSyxFQUFFLHFCQVJhO0FBU3BCQyxFQUFB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QUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5cblxuLy8gVGhpcyBpcyBhIG1hcCBvZiBkcml2ZXIgbmFtZXMgdG8gbnBtIHBhY2thZ2VzIHJlcHJlc2VudGluZyB0aG9zZSBkcml2ZXJzLlxuLy8gVGhlIGRyaXZlcnMgaW4gdGhpcyBsaXN0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSBDTEkgc28gdXNlcnMgY2FuIGp1c3Rcbi8vIHR5cGUgJ2FwcGl1bSBkcml2ZXIgaW5zdGFsbCAnbmFtZScnLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgZnVsbFxuLy8gbnBtIHBhY2thZ2UuIEkuZS4sIHRoZXNlIGFyZSB0aGUgb2ZmaWNpYWxseSByZWNvZ25pemVkIGRyaXZlcnMuXG5jb25zdCBLTk9XTl9EUklWRVJTID0ge1xuICB1aWF1dG9tYXRvcjI6ICdhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcicsXG4gIHhjdWl0ZXN0OiAnYXBwaXVtLXhjdWl0ZXN0LWRyaXZlcicsXG4gIHlvdWllbmdpbmU6ICdhcHBpdW0teW91aWVuZ2luZS1kcml2ZXInLFxuICB3aW5kb3dzOiAnYXBwaXVtLXdpbmRvd3MtZHJpdmVyJyxcbiAgbWFjOiAnYXBwaXVtLW1hYy1kcml2ZXInLFxuICBtYWMyOiAnYXBwaXVtLW1hYzItZHJpdmVyJyxcbiAgZXNwcmVzc286ICdhcHBpdW0tZXNwcmVzc28tZHJpdmVyJyxcbiAgdGl6ZW46ICdhcHBpdW0tdGl6ZW4tZHJpdmVyJyxcbiAgZmx1dHRlcjogJ2FwcGl1bS1mbHV0dGVyLWRyaXZlcicsXG4gIHNhZmFyaTogJ2FwcGl1bS1zYWZhcmktZHJpdmVyJyxcbiAgZ2Vja286ICdhcHBpdW0tZ2Vja29kcml2ZXInLFxufTtcblxuZnVuY3Rpb24gZ2V0RHJpdmVyQnlTdXBwb3J0IChkcml2ZXJzLCBtYXRjaEF1dG9tYXRpb25OYW1lLCBtYXRjaFBsYXRmb3JtTmFtZSkge1xuICBmb3IgKGNvbnN0IFtkcml2ZXJOYW1lLCBkcml2ZXJEYXRhXSBvZiBfLnRvUGFpcnMoZHJpdmVycykpIHtcbiAgICBjb25zdCB7YXV0b21hdGlvbk5hbWUsIHBsYXRmb3JtTmFtZXN9ID0gZHJpdmVyRGF0YTtcbiAgICBjb25zdCBhTmFtZU1hdGNoZXMgPSBhdXRvbWF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpID09PSBtYXRjaEF1dG9tYXRpb25OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgcE5hbWVNYXRjaGVzID0gXy5pbmNsdWRlcyhwbGF0Zm9ybU5hbWVzLm1hcChfLnRvTG93ZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hQbGF0Zm9ybU5hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICBpZiAoYU5hbWVNYXRjaGVzICYmIHBOYW1lTWF0Y2hlcykge1xuICAgICAgcmV0dXJuIHtkcml2ZXJOYW1lLCAuLi5kcml2ZXJEYXRhfTtcbiAgICB9XG5cbiAgICBpZiAoYU5hbWVNYXRjaGVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERyaXZlciAnJHtkcml2ZXJOYW1lfScgc3VwcG9ydHMgYXV0b21hdGlvbk5hbWUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCcke2F1dG9tYXRpb25OYW1lfScsIGJ1dCBBcHBpdW0gY291bGQgbm90IGZpbmQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHN1cHBvcnQgZm9yIHBsYXRmb3JtTmFtZSAnJHttYXRjaFBsYXRmb3JtTmFtZX0nLiBTdXBwb3J0ZWQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHBsYXRmb3JtTmFtZXMgYXJlOiBgICtcbiAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShwbGF0Zm9ybU5hbWVzKSk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBpbnN0YWxsZWQgZHJpdmVyIHRvIHN1cHBvcnQgZ2l2ZW4gY2Fwc2ApO1xufVxuXG5mdW5jdGlvbiBmaW5kTWF0Y2hpbmdEcml2ZXIgKGNvbmZpZywge2F1dG9tYXRpb25OYW1lLCBwbGF0Zm9ybU5hbWV9KSB7XG4gIGlmICghXy5pc1N0cmluZyhwbGF0Zm9ybU5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBpbmNsdWRlIGEgcGxhdGZvcm1OYW1lIGNhcGFiaWxpdHknKTtcbiAgfVxuXG4gIGlmICghXy5pc1N0cmluZyhhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGluY2x1ZGUgYW4gYXV0b21hdGlvbk5hbWUgY2FwYWJpbGl0eScpO1xuICB9XG5cbiAgbG9nLmluZm8oYEF0dGVtcHRpbmcgdG8gZmluZCBtYXRjaGluZyBkcml2ZXIgZm9yIGF1dG9tYXRpb25OYW1lIGAgK1xuICAgICAgICAgICBgJyR7YXV0b21hdGlvbk5hbWV9JyBhbmQgcGxhdGZvcm1OYW1lICcke3BsYXRmb3JtTmFtZX0nYCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7XG4gICAgICBkcml2ZXJOYW1lLFxuICAgICAgbWFpbkNsYXNzLFxuICAgICAgdmVyc2lvbixcbiAgICB9ID0gZ2V0RHJpdmVyQnlTdXBwb3J0KGNvbmZpZy5pbnN0YWxsZWRFeHRlbnNpb25zLCBhdXRvbWF0aW9uTmFtZSwgcGxhdGZvcm1OYW1lKTtcbiAgICBsb2cuaW5mbyhgVGhlICcke2RyaXZlck5hbWV9JyBkcml2ZXIgd2FzIGluc3RhbGxlZCBhbmQgbWF0Y2hlZCBjYXBzLmApO1xuICAgIGxvZy5pbmZvKGBXaWxsIHJlcXVpcmUgaXQgYXQgJHtjb25maWcuZ2V0RXh0ZW5zaW9uUmVxdWlyZVBhdGgoZHJpdmVyTmFtZSl9YCk7XG4gICAgY29uc3QgZHJpdmVyID0gY29uZmlnLnJlcXVpcmUoZHJpdmVyTmFtZSk7XG4gICAgaWYgKCFkcml2ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWFpbkNsYXNzICR7bWFpbkNsYXNzfSBkaWQgbm90IHJlc3VsdCBpbiBhIGRyaXZlciBvYmplY3RgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtkcml2ZXIsIHZlcnNpb24sIGRyaXZlck5hbWV9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtc2cgPSBgQ291bGQgbm90IGZpbmQgYSBkcml2ZXIgZm9yIGF1dG9tYXRpb25OYW1lIGAgK1xuICAgICAgICAgICAgICAgIGAnJHthdXRvbWF0aW9uTmFtZX0nIGFuZCBwbGF0Zm9ybU5hbWUgJHtwbGF0Zm9ybU5hbWV9Jy4gYCArXG4gICAgICAgICAgICAgICAgYEhhdmUgeW91IGluc3RhbGxlZCBhIGRyaXZlciB0aGF0IHN1cHBvcnRzIHRob3NlIGAgK1xuICAgICAgICAgICAgICAgIGBjYXBhYmlsaXRpZXM/IFJ1biAnYXBwaXVtIGRyaXZlciBsaXN0IC0taW5zdGFsbGVkJyB0byBzZWUuIGAgK1xuICAgICAgICAgICAgICAgIGAoTG93ZXItbGV2ZWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9KWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZmluZE1hdGNoaW5nRHJpdmVyLFxuICBLTk9XTl9EUklWRVJTLFxufTtcbiJdLCJmaWxlIjoibGliL2RyaXZlcnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==