appium 2.0.0-beta.18 → 2.0.0-beta.21
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/build/lib/appium-config.schema.json +0 -0
- package/build/lib/appium.js +84 -69
- package/build/lib/cli/argparse-actions.js +1 -1
- package/build/lib/cli/args.js +87 -223
- package/build/lib/cli/extension-command.js +2 -2
- package/build/lib/cli/extension.js +14 -6
- package/build/lib/cli/parser.js +142 -106
- package/build/lib/cli/utils.js +1 -1
- package/build/lib/config-file.js +141 -0
- package/build/lib/config.js +42 -64
- package/build/lib/driver-config.js +41 -20
- package/build/lib/drivers.js +1 -1
- package/build/lib/ext-config-io.js +165 -0
- package/build/lib/extension-config.js +110 -60
- package/build/lib/grid-register.js +19 -21
- package/build/lib/logsink.js +1 -1
- package/build/lib/main.js +135 -72
- package/build/lib/plugin-config.js +17 -8
- package/build/lib/schema/appium-config-schema.js +252 -0
- package/build/lib/schema/arg-spec.js +120 -0
- package/build/lib/schema/cli-args.js +173 -0
- package/build/lib/schema/cli-transformers.js +76 -0
- package/build/lib/schema/index.js +36 -0
- package/build/lib/schema/keywords.js +62 -0
- package/build/lib/schema/schema.js +357 -0
- package/build/lib/utils.js +26 -35
- package/lib/appium-config.schema.json +277 -0
- package/lib/appium.js +99 -75
- package/lib/cli/args.js +138 -335
- package/lib/cli/extension-command.js +7 -6
- package/lib/cli/extension.js +12 -4
- package/lib/cli/parser.js +248 -96
- package/lib/config-file.js +227 -0
- package/lib/config.js +71 -61
- package/lib/driver-config.js +66 -11
- package/lib/ext-config-io.js +287 -0
- package/lib/extension-config.js +209 -66
- package/lib/grid-register.js +24 -21
- package/lib/main.js +139 -68
- package/lib/plugin-config.js +32 -2
- package/lib/schema/appium-config-schema.js +286 -0
- package/lib/schema/arg-spec.js +218 -0
- package/lib/schema/cli-args.js +273 -0
- package/lib/schema/cli-transformers.js +123 -0
- package/lib/schema/index.js +2 -0
- package/lib/schema/keywords.js +119 -0
- package/lib/schema/schema.js +577 -0
- package/lib/utils.js +29 -52
- package/package.json +17 -11
- package/types/appium-config.d.ts +197 -0
- package/types/types.d.ts +201 -0
- package/LICENSE +0 -201
- package/build/lib/cli/parser-helpers.js +0 -106
- package/lib/cli/parser-helpers.js +0 -106
package/build/lib/utils.js
CHANGED
|
@@ -5,14 +5,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
+
exports.ReadonlyMap = void 0;
|
|
9
|
+
exports.getPackageVersion = getPackageVersion;
|
|
10
|
+
exports.insertAppiumPrefixes = insertAppiumPrefixes;
|
|
8
11
|
exports.inspectObject = inspectObject;
|
|
9
12
|
exports.parseCapsForInnerDriver = parseCapsForInnerDriver;
|
|
10
|
-
exports.insertAppiumPrefixes = insertAppiumPrefixes;
|
|
11
|
-
exports.getPackageVersion = getPackageVersion;
|
|
12
13
|
exports.pullSettings = pullSettings;
|
|
13
14
|
exports.removeAppiumPrefixes = removeAppiumPrefixes;
|
|
14
|
-
exports.getExtensionArgs = getExtensionArgs;
|
|
15
|
-
exports.validateExtensionArgs = validateExtensionArgs;
|
|
16
15
|
exports.rootDir = void 0;
|
|
17
16
|
|
|
18
17
|
require("source-map-support/register");
|
|
@@ -60,35 +59,6 @@ function inspectObject(args) {
|
|
|
60
59
|
}
|
|
61
60
|
}
|
|
62
61
|
|
|
63
|
-
function getExtensionArgs(extensionArgs, extensionName) {
|
|
64
|
-
if (!_lodash.default.has(extensionArgs, extensionName)) {
|
|
65
|
-
return {};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (!_lodash.default.isPlainObject(extensionArgs[extensionName])) {
|
|
69
|
-
throw new TypeError(`Driver or plugin arguments must be plain objects`);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return extensionArgs[extensionName];
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function ensureNoUnknownArgs(extensionArgs, argsConstraints) {
|
|
76
|
-
const knownArgNames = Object.keys(argsConstraints);
|
|
77
|
-
|
|
78
|
-
const unknownArgs = _lodash.default.difference(Object.keys(extensionArgs), knownArgNames);
|
|
79
|
-
|
|
80
|
-
if (unknownArgs.length > 0) {
|
|
81
|
-
throw new Error(`Some arguments were not recognized: ${JSON.stringify(unknownArgs)}. ` + `Are you sure they are in the list of supported args? ${JSON.stringify(knownArgNames)}`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function validateExtensionArgs(extensionArgs, argsConstraints) {
|
|
86
|
-
if (!_lodash.default.isEmpty(extensionArgs) && !_lodash.default.isEmpty(argsConstraints)) {
|
|
87
|
-
ensureNoUnknownArgs(extensionArgs, argsConstraints);
|
|
88
|
-
(0, _baseDriver.validateCaps)(extensionArgs, argsConstraints);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
62
|
function parseCapsForInnerDriver(jsonwpCapabilities, w3cCapabilities, constraints = {}, defaultCapabilities = {}) {
|
|
93
63
|
const hasW3CCaps = _lodash.default.isPlainObject(w3cCapabilities) && (_lodash.default.has(w3cCapabilities, 'alwaysMatch') || _lodash.default.has(w3cCapabilities, 'firstMatch'));
|
|
94
64
|
|
|
@@ -243,7 +213,28 @@ function pullSettings(caps) {
|
|
|
243
213
|
|
|
244
214
|
const rootDir = _support.fs.findRoot(__dirname);
|
|
245
215
|
|
|
246
|
-
exports.rootDir = rootDir;
|
|
216
|
+
exports.rootDir = rootDir;
|
|
217
|
+
|
|
218
|
+
class ReadonlyMap extends Map {
|
|
219
|
+
set(key, value) {
|
|
220
|
+
if (this.has(key)) {
|
|
221
|
+
throw new Error(`${key} is already set`);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
return super.set(key, value);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
delete(key) {
|
|
228
|
+
throw new Error(`${key} cannot be deleted`);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
clear() {
|
|
232
|
+
throw new Error(`Cannot clear ReadonlyMap`);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
exports.ReadonlyMap = ReadonlyMap;require('source-map-support').install();
|
|
247
238
|
|
|
248
239
|
|
|
249
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImluc3BlY3RPYmplY3QiLCJhcmdzIiwiZ2V0VmFsdWVBcnJheSIsIm9iaiIsImluZGVudCIsIl8iLCJpc09iamVjdCIsInN0ckFyciIsImFyZyIsInZhbHVlIiwidG9QYWlycyIsInB1c2giLCJzaGlmdCIsImxvZ2dlciIsImluZm8iLCJ2YWwiLCJnZXRFeHRlbnNpb25BcmdzIiwiZXh0ZW5zaW9uQXJncyIsImV4dGVuc2lvbk5hbWUiLCJoYXMiLCJpc1BsYWluT2JqZWN0IiwiVHlwZUVycm9yIiwiZW5zdXJlTm9Vbmtub3duQXJncyIsImFyZ3NDb25zdHJhaW50cyIsImtub3duQXJnTmFtZXMiLCJPYmplY3QiLCJrZXlzIiwidW5rbm93bkFyZ3MiLCJkaWZmZXJlbmNlIiwibGVuZ3RoIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidmFsaWRhdGVFeHRlbnNpb25BcmdzIiwiaXNFbXB0eSIsInBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyIiwianNvbndwQ2FwYWJpbGl0aWVzIiwidzNjQ2FwYWJpbGl0aWVzIiwiY29uc3RyYWludHMiLCJkZWZhdWx0Q2FwYWJpbGl0aWVzIiwiaGFzVzNDQ2FwcyIsImhhc0pTT05XUENhcHMiLCJkZXNpcmVkQ2FwcyIsInByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyIsInByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyIsInByb3RvY29sIiwiUFJPVE9DT0xTIiwiVzNDIiwiZXJyb3IiLCJjbG9uZURlZXAiLCJkZWZhdWx0Q2FwS2V5IiwiZGVmYXVsdENhcFZhbHVlIiwiaXNDYXBBbHJlYWR5U2V0IiwiZmlyc3RNYXRjaEVudHJ5IiwiZmlyc3RNYXRjaCIsInJlbW92ZUFwcGl1bVByZWZpeGVzIiwicmVtb3ZlQXBwaXVtUHJlZml4IiwiYWx3YXlzTWF0Y2giLCJhc3NpZ24iLCJtZXNzYWdlIiwiaW5zZXJ0QXBwaXVtUHJlZml4ZXMiLCJjYXBzIiwiU1RBTkRBUkRfQ0FQUyIsInByZWZpeGVkQ2FwcyIsIm5hbWUiLCJpbmNsdWRlcyIsImZpeGVkQ2FwcyIsImtleSIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJnZXRQYWNrYWdlVmVyc2lvbiIsInBrZ05hbWUiLCJwa2dJbmZvIiwicmVxdWlyZSIsInZlcnNpb24iLCJwdWxsU2V0dGluZ3MiLCJyZXN1bHQiLCJtYXRjaCIsImV4ZWMiLCJyb290RGlyIiwiZnMiLCJmaW5kUm9vdCIsIl9fZGlybmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGlCQUFpQixHQUFHLFFBQTFCOztBQUVBLFNBQVNDLGFBQVQsQ0FBd0JDLElBQXhCLEVBQThCO0FBQzVCLFdBQVNDLGFBQVQsQ0FBd0JDLEdBQXhCLEVBQTZCQyxNQUFNLEdBQUcsSUFBdEMsRUFBNEM7QUFDMUMsUUFBSSxDQUFDQyxnQkFBRUMsUUFBRixDQUFXSCxHQUFYLENBQUwsRUFBc0I7QUFDcEIsYUFBTyxDQUFDQSxHQUFELENBQVA7QUFDRDs7QUFFRCxRQUFJSSxNQUFNLEdBQUcsQ0FBQyxHQUFELENBQWI7O0FBQ0EsU0FBSyxJQUFJLENBQUNDLEdBQUQsRUFBTUMsS0FBTixDQUFULElBQXlCSixnQkFBRUssT0FBRixDQUFVUCxHQUFWLENBQXpCLEVBQXlDO0FBQ3ZDLFVBQUksQ0FBQ0UsZ0JBQUVDLFFBQUYsQ0FBV0csS0FBWCxDQUFMLEVBQXdCO0FBQ3RCRixRQUFBQSxNQUFNLENBQUNJLElBQVAsQ0FBYSxHQUFFUCxNQUFPLEtBQUlJLEdBQUksS0FBSUMsS0FBTSxFQUF4QztBQUNELE9BRkQsTUFFTztBQUNMQSxRQUFBQSxLQUFLLEdBQUdQLGFBQWEsQ0FBQ08sS0FBRCxFQUFTLEdBQUVMLE1BQU8sSUFBbEIsQ0FBckI7QUFDQUcsUUFBQUEsTUFBTSxDQUFDSSxJQUFQLENBQWEsR0FBRVAsTUFBTyxLQUFJSSxHQUFJLEtBQUlDLEtBQUssQ0FBQ0csS0FBTixFQUFjLEVBQWhEO0FBQ0FMLFFBQUFBLE1BQU0sQ0FBQ0ksSUFBUCxDQUFZLEdBQUdGLEtBQWY7QUFDRDtBQUNGOztBQUNERixJQUFBQSxNQUFNLENBQUNJLElBQVAsQ0FBYSxHQUFFUCxNQUFPLEdBQXRCO0FBQ0EsV0FBT0csTUFBUDtBQUNEOztBQUNELE9BQUssSUFBSSxDQUFDQyxHQUFELEVBQU1DLEtBQU4sQ0FBVCxJQUF5QkosZ0JBQUVLLE9BQUYsQ0FBVVQsSUFBVixDQUF6QixFQUEwQztBQUN4Q1EsSUFBQUEsS0FBSyxHQUFHUCxhQUFhLENBQUNPLEtBQUQsQ0FBckI7O0FBQ0FJLG9CQUFPQyxJQUFQLENBQWEsS0FBSU4sR0FBSSxLQUFJQyxLQUFLLENBQUNHLEtBQU4sRUFBYyxFQUF2Qzs7QUFDQSxTQUFLLElBQUlHLEdBQVQsSUFBZ0JOLEtBQWhCLEVBQXVCO0FBQ3JCSSxzQkFBT0MsSUFBUCxDQUFZQyxHQUFaO0FBQ0Q7QUFDRjtBQUNGOztBQVFELFNBQVNDLGdCQUFULENBQTJCQyxhQUEzQixFQUEwQ0MsYUFBMUMsRUFBeUQ7QUFDdkQsTUFBSSxDQUFDYixnQkFBRWMsR0FBRixDQUFNRixhQUFOLEVBQXFCQyxhQUFyQixDQUFMLEVBQTBDO0FBQ3hDLFdBQU8sRUFBUDtBQUNEOztBQUNELE1BQUksQ0FBQ2IsZ0JBQUVlLGFBQUYsQ0FBZ0JILGFBQWEsQ0FBQ0MsYUFBRCxDQUE3QixDQUFMLEVBQW9EO0FBQ2xELFVBQU0sSUFBSUcsU0FBSixDQUFlLGtEQUFmLENBQU47QUFDRDs7QUFDRCxTQUFPSixhQUFhLENBQUNDLGFBQUQsQ0FBcEI7QUFDRDs7QUFVRCxTQUFTSSxtQkFBVCxDQUE4QkwsYUFBOUIsRUFBNkNNLGVBQTdDLEVBQThEO0FBQzVELFFBQU1DLGFBQWEsR0FBR0MsTUFBTSxDQUFDQyxJQUFQLENBQVlILGVBQVosQ0FBdEI7O0FBQ0EsUUFBTUksV0FBVyxHQUFHdEIsZ0JBQUV1QixVQUFGLENBQWFILE1BQU0sQ0FBQ0MsSUFBUCxDQUFZVCxhQUFaLENBQWIsRUFBeUNPLGFBQXpDLENBQXBCOztBQUNBLE1BQUlHLFdBQVcsQ0FBQ0UsTUFBWixHQUFxQixDQUF6QixFQUE0QjtBQUMxQixVQUFNLElBQUlDLEtBQUosQ0FBVyx1Q0FBc0NDLElBQUksQ0FBQ0MsU0FBTCxDQUFlTCxXQUFmLENBQTRCLElBQW5FLEdBQ0Msd0RBQXVESSxJQUFJLENBQUNDLFNBQUwsQ0FBZVIsYUFBZixDQUE4QixFQURoRyxDQUFOO0FBRUQ7QUFDRjs7QUFVRCxTQUFTUyxxQkFBVCxDQUFnQ2hCLGFBQWhDLEVBQStDTSxlQUEvQyxFQUFnRTtBQUM5RCxNQUFJLENBQUNsQixnQkFBRTZCLE9BQUYsQ0FBVWpCLGFBQVYsQ0FBRCxJQUE2QixDQUFDWixnQkFBRTZCLE9BQUYsQ0FBVVgsZUFBVixDQUFsQyxFQUE4RDtBQUM1REQsSUFBQUEsbUJBQW1CLENBQUNMLGFBQUQsRUFBZ0JNLGVBQWhCLENBQW5CO0FBQ0Esa0NBQWFOLGFBQWIsRUFBNEJNLGVBQTVCO0FBQ0Q7QUFDRjs7QUFZRCxTQUFTWSx1QkFBVCxDQUFrQ0Msa0JBQWxDLEVBQXNEQyxlQUF0RCxFQUF1RUMsV0FBVyxHQUFHLEVBQXJGLEVBQXlGQyxtQkFBbUIsR0FBRyxFQUEvRyxFQUFtSDtBQUVqSCxRQUFNQyxVQUFVLEdBQUduQyxnQkFBRWUsYUFBRixDQUFnQmlCLGVBQWhCLE1BQ2hCaEMsZ0JBQUVjLEdBQUYsQ0FBTWtCLGVBQU4sRUFBdUIsYUFBdkIsS0FBeUNoQyxnQkFBRWMsR0FBRixDQUFNa0IsZUFBTixFQUF1QixZQUF2QixDQUR6QixDQUFuQjs7QUFFQSxRQUFNSSxhQUFhLEdBQUdwQyxnQkFBRWUsYUFBRixDQUFnQmdCLGtCQUFoQixDQUF0Qjs7QUFDQSxNQUFJTSxXQUFXLEdBQUcsRUFBbEI7QUFDQSxNQUFJQyx3QkFBd0IsR0FBRyxJQUEvQjtBQUNBLE1BQUlDLDJCQUEyQixHQUFHLElBQWxDOztBQUVBLE1BQUksQ0FBQ0osVUFBTCxFQUFpQjtBQUNmLFdBQU87QUFDTEssTUFBQUEsUUFBUSxFQUFFQyxzQkFBVUMsR0FEZjtBQUVMQyxNQUFBQSxLQUFLLEVBQUUsSUFBSWxCLEtBQUosQ0FBVSxxQ0FBVjtBQUZGLEtBQVA7QUFJRDs7QUFFRCxRQUFNO0FBQUNpQixJQUFBQTtBQUFELE1BQVFELHFCQUFkO0FBQ0EsUUFBTUQsUUFBUSxHQUFHRSxHQUFqQjtBQUdBWCxFQUFBQSxrQkFBa0IsR0FBRy9CLGdCQUFFNEMsU0FBRixDQUFZYixrQkFBWixDQUFyQjtBQUNBQyxFQUFBQSxlQUFlLEdBQUdoQyxnQkFBRTRDLFNBQUYsQ0FBWVosZUFBWixDQUFsQjtBQUNBRSxFQUFBQSxtQkFBbUIsR0FBR2xDLGdCQUFFNEMsU0FBRixDQUFZVixtQkFBWixDQUF0Qjs7QUFFQSxNQUFJLENBQUNsQyxnQkFBRTZCLE9BQUYsQ0FBVUssbUJBQVYsQ0FBTCxFQUFxQztBQUNuQyxRQUFJQyxVQUFKLEVBQWdCO0FBQ2QsV0FBSyxNQUFNLENBQUNVLGFBQUQsRUFBZ0JDLGVBQWhCLENBQVgsSUFBK0M5QyxnQkFBRUssT0FBRixDQUFVNkIsbUJBQVYsQ0FBL0MsRUFBK0U7QUFDN0UsWUFBSWEsZUFBZSxHQUFHLEtBQXRCOztBQUVBLGFBQUssTUFBTUMsZUFBWCxJQUErQmhCLGVBQWUsQ0FBQ2lCLFVBQWhCLElBQThCLEVBQTdELEVBQWtFO0FBQ2hFLGNBQUlqRCxnQkFBRWUsYUFBRixDQUFnQmlDLGVBQWhCLEtBQ0doRCxnQkFBRWMsR0FBRixDQUFNb0Msb0JBQW9CLENBQUNGLGVBQUQsQ0FBMUIsRUFBNkNHLGtCQUFrQixDQUFDTixhQUFELENBQS9ELENBRFAsRUFDd0Y7QUFDdEZFLFlBQUFBLGVBQWUsR0FBRyxJQUFsQjtBQUNBO0FBQ0Q7QUFDRjs7QUFFREEsUUFBQUEsZUFBZSxHQUFHQSxlQUFlLElBQUsvQyxnQkFBRWUsYUFBRixDQUFnQmlCLGVBQWUsQ0FBQ29CLFdBQWhDLEtBQ2pDcEQsZ0JBQUVjLEdBQUYsQ0FBTW9DLG9CQUFvQixDQUFDbEIsZUFBZSxDQUFDb0IsV0FBakIsQ0FBMUIsRUFBeURELGtCQUFrQixDQUFDTixhQUFELENBQTNFLENBREw7O0FBRUEsWUFBSUUsZUFBSixFQUFxQjtBQUVuQjtBQUNEOztBQUdELFlBQUkvQyxnQkFBRTZCLE9BQUYsQ0FBVUcsZUFBZSxDQUFDaUIsVUFBMUIsQ0FBSixFQUEyQztBQUN6Q2pCLFVBQUFBLGVBQWUsQ0FBQ2lCLFVBQWhCLEdBQTZCLENBQUM7QUFBQyxhQUFDSixhQUFELEdBQWlCQztBQUFsQixXQUFELENBQTdCO0FBQ0QsU0FGRCxNQUVPO0FBQ0xkLFVBQUFBLGVBQWUsQ0FBQ2lCLFVBQWhCLENBQTJCLENBQTNCLEVBQThCSixhQUE5QixJQUErQ0MsZUFBL0M7QUFDRDtBQUNGO0FBQ0Y7O0FBQ0QsUUFBSVYsYUFBSixFQUFtQjtBQUNqQkwsTUFBQUEsa0JBQWtCLEdBQUdYLE1BQU0sQ0FBQ2lDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCSCxvQkFBb0IsQ0FBQ2hCLG1CQUFELENBQXRDLEVBQTZESCxrQkFBN0QsQ0FBckI7QUFDRDtBQUNGOztBQUdELE1BQUlLLGFBQUosRUFBbUI7QUFDakJHLElBQUFBLDJCQUEyQixHQUFHLEVBQUMsR0FBR1I7QUFBSixLQUE5QjtBQUNEOztBQUdELE1BQUlJLFVBQUosRUFBZ0I7QUFHZCxRQUFJO0FBQ0ZFLE1BQUFBLFdBQVcsR0FBRyxxQ0FBb0JMLGVBQXBCLEVBQXFDQyxXQUFyQyxFQUFrRCxJQUFsRCxDQUFkO0FBQ0QsS0FGRCxDQUVFLE9BQU9VLEtBQVAsRUFBYztBQUNkbkMsc0JBQU9DLElBQVAsQ0FBYSxxQ0FBb0NrQyxLQUFLLENBQUNXLE9BQVEsRUFBL0Q7O0FBQ0EsYUFBTztBQUNMakIsUUFBQUEsV0FESztBQUVMRSxRQUFBQSwyQkFGSztBQUdMRCxRQUFBQSx3QkFISztBQUlMRSxRQUFBQSxRQUpLO0FBS0xHLFFBQUFBO0FBTEssT0FBUDtBQU9EOztBQUdETCxJQUFBQSx3QkFBd0IsR0FBRztBQUN6QmMsTUFBQUEsV0FBVyxFQUFFLEVBQUMsR0FBR0csb0JBQW9CLENBQUNsQixXQUFEO0FBQXhCLE9BRFk7QUFFekJZLE1BQUFBLFVBQVUsRUFBRSxDQUFDLEVBQUQ7QUFGYSxLQUEzQjtBQUlEOztBQUVELFNBQU87QUFBQ1osSUFBQUEsV0FBRDtBQUFjRSxJQUFBQSwyQkFBZDtBQUEyQ0QsSUFBQUEsd0JBQTNDO0FBQXFFRSxJQUFBQTtBQUFyRSxHQUFQO0FBQ0Q7O0FBTUQsU0FBU2Usb0JBQVQsQ0FBK0JDLElBQS9CLEVBQXFDO0FBRW5DLFFBQU1DLGFBQWEsR0FBRyxDQUNwQixhQURvQixFQUVwQixnQkFGb0IsRUFHcEIsY0FIb0IsRUFJcEIscUJBSm9CLEVBS3BCLGtCQUxvQixFQU1wQixPQU5vQixFQU9wQixlQVBvQixFQVFwQixVQVJvQixFQVNwQix5QkFUb0IsQ0FBdEI7QUFZQSxNQUFJQyxZQUFZLEdBQUcsRUFBbkI7O0FBQ0EsT0FBSyxJQUFJLENBQUNDLElBQUQsRUFBT3ZELEtBQVAsQ0FBVCxJQUEwQkosZ0JBQUVLLE9BQUYsQ0FBVW1ELElBQVYsQ0FBMUIsRUFBMkM7QUFDekMsUUFBSUMsYUFBYSxDQUFDRyxRQUFkLENBQXVCRCxJQUF2QixLQUFnQ0EsSUFBSSxDQUFDQyxRQUFMLENBQWMsR0FBZCxDQUFwQyxFQUF3RDtBQUN0REYsTUFBQUEsWUFBWSxDQUFDQyxJQUFELENBQVosR0FBcUJ2RCxLQUFyQjtBQUNELEtBRkQsTUFFTztBQUNMc0QsTUFBQUEsWUFBWSxDQUFFLEdBQUVoRSxpQkFBa0IsSUFBR2lFLElBQUssRUFBOUIsQ0FBWixHQUErQ3ZELEtBQS9DO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPc0QsWUFBUDtBQUNEOztBQUVELFNBQVNSLG9CQUFULENBQStCTSxJQUEvQixFQUFxQztBQUNuQyxNQUFJLENBQUN4RCxnQkFBRWUsYUFBRixDQUFnQnlDLElBQWhCLENBQUwsRUFBNEI7QUFDMUIsV0FBT0EsSUFBUDtBQUNEOztBQUVELFFBQU1LLFNBQVMsR0FBRyxFQUFsQjs7QUFDQSxPQUFLLElBQUksQ0FBQ0YsSUFBRCxFQUFPdkQsS0FBUCxDQUFULElBQTBCSixnQkFBRUssT0FBRixDQUFVbUQsSUFBVixDQUExQixFQUEyQztBQUN6Q0ssSUFBQUEsU0FBUyxDQUFDVixrQkFBa0IsQ0FBQ1EsSUFBRCxDQUFuQixDQUFULEdBQXNDdkQsS0FBdEM7QUFDRDs7QUFDRCxTQUFPeUQsU0FBUDtBQUNEOztBQUVELFNBQVNWLGtCQUFULENBQTZCVyxHQUE3QixFQUFrQztBQUNoQyxRQUFNQyxNQUFNLEdBQUksR0FBRXJFLGlCQUFrQixHQUFwQztBQUNBLFNBQU9NLGdCQUFFZ0UsVUFBRixDQUFhRixHQUFiLEVBQWtCQyxNQUFsQixJQUE0QkQsR0FBRyxDQUFDRyxTQUFKLENBQWNGLE1BQU0sQ0FBQ3ZDLE1BQXJCLENBQTVCLEdBQTJEc0MsR0FBbEU7QUFDRDs7QUFFRCxTQUFTSSxpQkFBVCxDQUE0QkMsT0FBNUIsRUFBcUM7QUFDbkMsUUFBTUMsT0FBTyxHQUFHQyxPQUFPLENBQUUsR0FBRUYsT0FBUSxlQUFaLENBQVAsSUFBc0MsRUFBdEQ7QUFDQSxTQUFPQyxPQUFPLENBQUNFLE9BQWY7QUFDRDs7QUFrQkQsU0FBU0MsWUFBVCxDQUF1QmYsSUFBdkIsRUFBNkI7QUFDM0IsTUFBSSxDQUFDeEQsZ0JBQUVlLGFBQUYsQ0FBZ0J5QyxJQUFoQixDQUFELElBQTBCeEQsZ0JBQUU2QixPQUFGLENBQVUyQixJQUFWLENBQTlCLEVBQStDO0FBQzdDLFdBQU8sRUFBUDtBQUNEOztBQUVELFFBQU1nQixNQUFNLEdBQUcsRUFBZjs7QUFDQSxPQUFLLE1BQU0sQ0FBQ1YsR0FBRCxFQUFNMUQsS0FBTixDQUFYLElBQTJCSixnQkFBRUssT0FBRixDQUFVbUQsSUFBVixDQUEzQixFQUE0QztBQUMxQyxVQUFNaUIsS0FBSyxHQUFHLHVCQUF1QkMsSUFBdkIsQ0FBNEJaLEdBQTVCLENBQWQ7O0FBQ0EsUUFBSSxDQUFDVyxLQUFMLEVBQVk7QUFDVjtBQUNEOztBQUVERCxJQUFBQSxNQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFELENBQU4sQ0FBTixHQUFtQnJFLEtBQW5CO0FBQ0EsV0FBT29ELElBQUksQ0FBQ00sR0FBRCxDQUFYO0FBQ0Q7O0FBQ0QsU0FBT1UsTUFBUDtBQUNEOztBQUVELE1BQU1HLE9BQU8sR0FBR0MsWUFBR0MsUUFBSCxDQUFZQyxTQUFaLENBQWhCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgcHJvY2Vzc0NhcGFiaWxpdGllcywgUFJPVE9DT0xTLCB2YWxpZGF0ZUNhcHMgYXMgdmFsaWRhdGVBcmdzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IFczQ19BUFBJVU1fUFJFRklYID0gJ2FwcGl1bSc7XG5cbmZ1bmN0aW9uIGluc3BlY3RPYmplY3QgKGFyZ3MpIHtcbiAgZnVuY3Rpb24gZ2V0VmFsdWVBcnJheSAob2JqLCBpbmRlbnQgPSAnICAnKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHtcbiAgICAgIHJldHVybiBbb2JqXTtcbiAgICB9XG5cbiAgICBsZXQgc3RyQXJyID0gWyd7J107XG4gICAgZm9yIChsZXQgW2FyZywgdmFsdWVdIG9mIF8udG9QYWlycyhvYmopKSB7XG4gICAgICBpZiAoIV8uaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHN0ckFyci5wdXNoKGAke2luZGVudH0gICR7YXJnfTogJHt2YWx1ZX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZ2V0VmFsdWVBcnJheSh2YWx1ZSwgYCR7aW5kZW50fSAgYCk7XG4gICAgICAgIHN0ckFyci5wdXNoKGAke2luZGVudH0gICR7YXJnfTogJHt2YWx1ZS5zaGlmdCgpfWApO1xuICAgICAgICBzdHJBcnIucHVzaCguLi52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN0ckFyci5wdXNoKGAke2luZGVudH19YCk7XG4gICAgcmV0dXJuIHN0ckFycjtcbiAgfVxuICBmb3IgKGxldCBbYXJnLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGFyZ3MpKSB7XG4gICAgdmFsdWUgPSBnZXRWYWx1ZUFycmF5KHZhbHVlKTtcbiAgICBsb2dnZXIuaW5mbyhgICAke2FyZ306ICR7dmFsdWUuc2hpZnQoKX1gKTtcbiAgICBmb3IgKGxldCB2YWwgb2YgdmFsdWUpIHtcbiAgICAgIGxvZ2dlci5pbmZvKHZhbCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBzZXQgb2YgQ0xJIGFyZ3MgYW5kIHRoZSBuYW1lIG9mIGEgZHJpdmVyIG9yIHBsdWdpbiwgZXh0cmFjdCB0aG9zZSBhcmdzIGZvciB0aGF0IHBsdWdpblxuICogQHBhcmFtIHtPYmplY3R9IGV4dGVuc2lvbkFyZ3MgLSBhcmd1bWVudHMgb2YgdGhlIGZvcm0ge1tleHROYW1lXToge1thcmdOYW1lXTogW2FyZ1ZhbHVlXX19XG4gKiBAcGFyYW0ge3N0cmluZ30gZXh0ZW5zaW9uTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb25cbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIGFyZyBvYmplY3QgZm9yIHRoYXQgZXh0ZW5zaW9uIGFsb25lXG4gKi9cbmZ1bmN0aW9uIGdldEV4dGVuc2lvbkFyZ3MgKGV4dGVuc2lvbkFyZ3MsIGV4dGVuc2lvbk5hbWUpIHtcbiAgaWYgKCFfLmhhcyhleHRlbnNpb25BcmdzLCBleHRlbnNpb25OYW1lKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBpZiAoIV8uaXNQbGFpbk9iamVjdChleHRlbnNpb25BcmdzW2V4dGVuc2lvbk5hbWVdKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYERyaXZlciBvciBwbHVnaW4gYXJndW1lbnRzIG11c3QgYmUgcGxhaW4gb2JqZWN0c2ApO1xuICB9XG4gIHJldHVybiBleHRlbnNpb25BcmdzW2V4dGVuc2lvbk5hbWVdO1xufVxuXG5cbi8qKlxuICogR2l2ZW4gYSBzZXQgb2YgYXJncyBhbmQgYSBzZXQgb2YgY29uc3RyYWludHMsIHRocm93IGFuIGVycm9yIGlmIGFueSBhcmdzIGFyZSBub3QgbWVudGlvbmVkIGluXG4gKiB0aGUgc2V0IG9mIGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gZXh0ZW5zaW9uQXJncyB0aGUgYXJnc1xuICogQHBhcmFtIHtPYmplY3R9IGFyZ3NDb25zdHJhaW50cyB0aGUgY29uc3RyYWludHMgb2JqZWN0XG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW55IGFyZ3Mgd2VyZSBub3QgcmVjb2duaXplZFxuICovXG5mdW5jdGlvbiBlbnN1cmVOb1Vua25vd25BcmdzIChleHRlbnNpb25BcmdzLCBhcmdzQ29uc3RyYWludHMpIHtcbiAgY29uc3Qga25vd25BcmdOYW1lcyA9IE9iamVjdC5rZXlzKGFyZ3NDb25zdHJhaW50cyk7XG4gIGNvbnN0IHVua25vd25BcmdzID0gXy5kaWZmZXJlbmNlKE9iamVjdC5rZXlzKGV4dGVuc2lvbkFyZ3MpLCBrbm93bkFyZ05hbWVzKTtcbiAgaWYgKHVua25vd25BcmdzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNvbWUgYXJndW1lbnRzIHdlcmUgbm90IHJlY29nbml6ZWQ6ICR7SlNPTi5zdHJpbmdpZnkodW5rbm93bkFyZ3MpfS4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBBcmUgeW91IHN1cmUgdGhleSBhcmUgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGFyZ3M/ICR7SlNPTi5zdHJpbmdpZnkoa25vd25BcmdOYW1lcyl9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBpbiBhIHNldCBvZiBkcml2ZXIvcGx1Z2luIGFyZ3MgcGFzc2VkIGluIGJ5IHVzZXIsIGFuZCBhcmcgY29uc3RyYWludHNcbiAqIGFuZCB0aHJvd3MgYW4gZXJyb3IgaWYgYW55IGFyZyBpcyB1bmtub3duIG9yIG9mIHRoZSBpbmNvcnJlY3QgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBleHRlbnNpb25BcmdzIC0gRHJpdmVyIG9yIFBsdWdpbiBzcGVjaWZpYyBhcmdzXG4gKiBAcGFyYW0ge29iamVjdH0gYXJnc0NvbnN0cmFpbnRzIC0gQ29uc3RyYWludHMgZm9yIGFyZ3VtZW50c1xuICogQHRocm93cyB7RXJyb3J9IGlmIGFueSBhcmdzIGFyZSBub3QgcmVjb2duaXplZCBvciBhcmUgb2YgYW4gaW52YWxpZCB0eXBlXG4qL1xuZnVuY3Rpb24gdmFsaWRhdGVFeHRlbnNpb25BcmdzIChleHRlbnNpb25BcmdzLCBhcmdzQ29uc3RyYWludHMpIHtcbiAgaWYgKCFfLmlzRW1wdHkoZXh0ZW5zaW9uQXJncykgJiYgIV8uaXNFbXB0eShhcmdzQ29uc3RyYWludHMpKSB7XG4gICAgZW5zdXJlTm9Vbmtub3duQXJncyhleHRlbnNpb25BcmdzLCBhcmdzQ29uc3RyYWludHMpO1xuICAgIHZhbGlkYXRlQXJncyhleHRlbnNpb25BcmdzLCBhcmdzQ29uc3RyYWludHMpO1xuICB9XG59XG5cblxuLyoqXG4gKiBUYWtlcyB0aGUgY2FwcyB0aGF0IHdlcmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYW5kIHRyYW5zbGF0ZXMgdGhlbVxuICogaW50byBjYXBzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGlubmVyIGRyaXZlcnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGpzb253cENhcGFiaWxpdGllc1xuICogQHBhcmFtIHtPYmplY3R9IHczY0NhcGFiaWxpdGllc1xuICogQHBhcmFtIHtPYmplY3R9IGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENhcGFiaWxpdGllc1xuICovXG5mdW5jdGlvbiBwYXJzZUNhcHNGb3JJbm5lckRyaXZlciAoanNvbndwQ2FwYWJpbGl0aWVzLCB3M2NDYXBhYmlsaXRpZXMsIGNvbnN0cmFpbnRzID0ge30sIGRlZmF1bHRDYXBhYmlsaXRpZXMgPSB7fSkge1xuICAvLyBDaGVjayBpZiB0aGUgY2FsbGVyIHNlbnQgSlNPTldQIGNhcHMsIFczQyBjYXBzLCBvciBib3RoXG4gIGNvbnN0IGhhc1czQ0NhcHMgPSBfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzKSAmJlxuICAgIChfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdhbHdheXNNYXRjaCcpIHx8IF8uaGFzKHczY0NhcGFiaWxpdGllcywgJ2ZpcnN0TWF0Y2gnKSk7XG4gIGNvbnN0IGhhc0pTT05XUENhcHMgPSBfLmlzUGxhaW5PYmplY3QoanNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgbGV0IGRlc2lyZWRDYXBzID0ge307XG4gIGxldCBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMgPSBudWxsO1xuICBsZXQgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gbnVsbDtcblxuICBpZiAoIWhhc1czQ0NhcHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvdG9jb2w6IFBST1RPQ09MUy5XM0MsXG4gICAgICBlcnJvcjogbmV3IEVycm9yKCdXM0MgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSBwcm92aWRlZCcpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCB7VzNDfSA9IFBST1RPQ09MUztcbiAgY29uc3QgcHJvdG9jb2wgPSBXM0M7XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IG11dGF0ZSB0aGUgb3JpZ2luYWwgYXJndW1lbnRzXG4gIGpzb253cENhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKGpzb253cENhcGFiaWxpdGllcyk7XG4gIHczY0NhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKHczY0NhcGFiaWxpdGllcyk7XG4gIGRlZmF1bHRDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChkZWZhdWx0Q2FwYWJpbGl0aWVzKTtcblxuICBpZiAoIV8uaXNFbXB0eShkZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgIGlmIChoYXNXM0NDYXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtkZWZhdWx0Q2FwS2V5LCBkZWZhdWx0Q2FwVmFsdWVdIG9mIF8udG9QYWlycyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgICAgICBsZXQgaXNDYXBBbHJlYWR5U2V0ID0gZmFsc2U7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIGZpcnN0TWF0Y2ggZW50cmllc1xuICAgICAgICBmb3IgKGNvbnN0IGZpcnN0TWF0Y2hFbnRyeSBvZiAodzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggfHwgW10pKSB7XG4gICAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChmaXJzdE1hdGNoRW50cnkpXG4gICAgICAgICAgICAgICYmIF8uaGFzKHJlbW92ZUFwcGl1bVByZWZpeGVzKGZpcnN0TWF0Y2hFbnRyeSksIHJlbW92ZUFwcGl1bVByZWZpeChkZWZhdWx0Q2FwS2V5KSkpIHtcbiAgICAgICAgICAgIGlzQ2FwQWxyZWFkeVNldCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGtleSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gYWx3YXlzTWF0Y2ggZW50cmllc1xuICAgICAgICBpc0NhcEFscmVhZHlTZXQgPSBpc0NhcEFscmVhZHlTZXQgfHwgKF8uaXNQbGFpbk9iamVjdCh3M2NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2gpXG4gICAgICAgICAgJiYgXy5oYXMocmVtb3ZlQXBwaXVtUHJlZml4ZXModzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKSwgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpKSk7XG4gICAgICAgIGlmIChpc0NhcEFscmVhZHlTZXQpIHtcbiAgICAgICAgICAvLyBTa2lwIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBwcm92aWRlZCBjYXBzXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmx5IGFkZCB0aGUgZGVmYXVsdCBjYXBhYmlsaXR5IGlmIGl0IGlzIG5vdCBvdmVycmlkZGVuXG4gICAgICAgIGlmIChfLmlzRW1wdHkodzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2gpKSB7XG4gICAgICAgICAgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggPSBbe1tkZWZhdWx0Q2FwS2V5XTogZGVmYXVsdENhcFZhbHVlfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2hbMF1bZGVmYXVsdENhcEtleV0gPSBkZWZhdWx0Q2FwVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc0pTT05XUENhcHMpIHtcbiAgICAgIGpzb253cENhcGFiaWxpdGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHJlbW92ZUFwcGl1bVByZWZpeGVzKGRlZmF1bHRDYXBhYmlsaXRpZXMpLCBqc29ud3BDYXBhYmlsaXRpZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldCBNSlNPTldQIGNhcHNcbiAgaWYgKGhhc0pTT05XUENhcHMpIHtcbiAgICBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMgPSB7Li4uanNvbndwQ2FwYWJpbGl0aWVzfTtcbiAgfVxuXG4gIC8vIEdldCBXM0MgY2Fwc1xuICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgIC8vIENhbGwgdGhlIHByb2Nlc3MgY2FwYWJpbGl0aWVzIGFsZ29yaXRobSB0byBmaW5kIG1hdGNoaW5nIGNhcHMgb24gdGhlIFczQ1xuICAgIC8vIChzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qbGlwcHMvc2ltcGxlLXdkLXNwZWMjcHJvY2Vzc2luZy1jYXBhYmlsaXRpZXMpXG4gICAgdHJ5IHtcbiAgICAgIGRlc2lyZWRDYXBzID0gcHJvY2Vzc0NhcGFiaWxpdGllcyh3M2NDYXBhYmlsaXRpZXMsIGNvbnN0cmFpbnRzLCB0cnVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmluZm8oYENvdWxkIG5vdCBwYXJzZSBXM0MgY2FwYWJpbGl0aWVzOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZXNpcmVkQ2FwcyxcbiAgICAgICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgICAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBlcnJvcixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHczYyBjYXBhYmlsaXRpZXMgcGF5bG9hZCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIG1hdGNoaW5nIGNhcHMgaW4gYGFsd2F5c01hdGNoYFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyA9IHtcbiAgICAgIGFsd2F5c01hdGNoOiB7Li4uaW5zZXJ0QXBwaXVtUHJlZml4ZXMoZGVzaXJlZENhcHMpfSxcbiAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7ZGVzaXJlZENhcHMsIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcywgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLCBwcm90b2NvbH07XG59XG5cbi8qKlxuICogVGFrZXMgYSBjYXBhYmlsaXRpZXMgb2JqZWN0cyBhbmQgcHJlZml4ZXMgY2FwYWJpbGl0aWVzIHdpdGggYGFwcGl1bTpgXG4gKiBAcGFyYW0ge09iamVjdH0gY2FwcyBEZXNpcmVkIGNhcGFiaWxpdGllcyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gaW5zZXJ0QXBwaXVtUHJlZml4ZXMgKGNhcHMpIHtcbiAgLy8gU3RhbmRhcmQsIG5vbi1wcmVmaXhlZCBjYXBhYmlsaXRpZXMgKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tdGFibGUtb2Ytc3RhbmRhcmQtY2FwYWJpbGl0aWVzKVxuICBjb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAgICdicm93c2VyTmFtZScsXG4gICAgJ2Jyb3dzZXJWZXJzaW9uJyxcbiAgICAncGxhdGZvcm1OYW1lJyxcbiAgICAnYWNjZXB0SW5zZWN1cmVDZXJ0cycsXG4gICAgJ3BhZ2VMb2FkU3RyYXRlZ3knLFxuICAgICdwcm94eScsXG4gICAgJ3NldFdpbmRvd1JlY3QnLFxuICAgICd0aW1lb3V0cycsXG4gICAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJ1xuICBdO1xuXG4gIGxldCBwcmVmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBpZiAoU1RBTkRBUkRfQ0FQUy5pbmNsdWRlcyhuYW1lKSB8fCBuYW1lLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgIHByZWZpeGVkQ2Fwc1tuYW1lXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVmaXhlZENhcHNbYCR7VzNDX0FQUElVTV9QUkVGSVh9OiR7bmFtZX1gXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJlZml4ZWRDYXBzO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBcHBpdW1QcmVmaXhlcyAoY2Fwcykge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYXBzKSkge1xuICAgIHJldHVybiBjYXBzO1xuICB9XG5cbiAgY29uc3QgZml4ZWRDYXBzID0ge307XG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgZml4ZWRDYXBzW3JlbW92ZUFwcGl1bVByZWZpeChuYW1lKV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZml4ZWRDYXBzO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBcHBpdW1QcmVmaXggKGtleSkge1xuICBjb25zdCBwcmVmaXggPSBgJHtXM0NfQVBQSVVNX1BSRUZJWH06YDtcbiAgcmV0dXJuIF8uc3RhcnRzV2l0aChrZXksIHByZWZpeCkgPyBrZXkuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpIDoga2V5O1xufVxuXG5mdW5jdGlvbiBnZXRQYWNrYWdlVmVyc2lvbiAocGtnTmFtZSkge1xuICBjb25zdCBwa2dJbmZvID0gcmVxdWlyZShgJHtwa2dOYW1lfS9wYWNrYWdlLmpzb25gKSB8fCB7fTtcbiAgcmV0dXJuIHBrZ0luZm8udmVyc2lvbjtcbn1cblxuLyoqXG4gKiBQdWxscyB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgQXBwaXVtIHNldHRpbmdzIGZyb20gdGhlIGdpdmVuIGNhcGFiaWxpdGllcyBhcmd1bWVudC5cbiAqIEVhY2ggc2V0dGluZyBpdGVtIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiAqIGBzZXR0aW5nW3NldHRpbmdfbmFtZV06IHNldHRpbmdfdmFsdWVgXG4gKiBUaGUgY2FwYWJpbGl0aWVzIGFyZ3VtZW50IGl0c2VsZiBnZXRzIG11dGF0ZWQsIHNvIGl0IGRvZXMgbm90IGNvbnRhaW4gcGFyc2VkXG4gKiBzZXR0aW5ncyBhbnltb3JlIHRvIGF2b2lkIGZ1cnRoZXIgcGFyc2luZyBpc3N1ZXMuXG4gKiBDaGVja1xuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi9hZHZhbmNlZC1jb25jZXB0cy9zZXR0aW5ncy5tZFxuICogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgYXZhaWxhYmxlIHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSB7P09iamVjdH0gY2FwcyAtIENhcGFiaWxpdGllcyBkaWN0aW9uYXJ5LiBJdCBpcyBtdXRhdGVkIGlmXG4gKiBvbmUgb3IgbW9yZSBzZXR0aW5ncyBoYXZlIGJlZW4gcHVsbGVkIGZyb20gaXRcbiAqIEByZXR1cm4ge09iamVjdH0gLSBBbiBlbXB0eSBkaWN0aW9uYXJ5IGlmIHRoZSBnaXZlbiBjYXBzIGNvbnRhaW5zIG5vXG4gKiBzZXR0aW5nIGl0ZW1zIG9yIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHBhcnNlZCBBcHBpdW0gc2V0dGluZyBuYW1lcyBhbG9uZyB3aXRoXG4gKiB0aGVpciB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHB1bGxTZXR0aW5ncyAoY2Fwcykge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYXBzKSB8fCBfLmlzRW1wdHkoY2FwcykpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgY29uc3QgbWF0Y2ggPSAvXFxic2V0dGluZ3NcXFsoXFxTKylcXF0kLy5leGVjKGtleSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzdWx0W21hdGNoWzFdXSA9IHZhbHVlO1xuICAgIGRlbGV0ZSBjYXBzW2tleV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3Qgcm9vdERpciA9IGZzLmZpbmRSb290KF9fZGlybmFtZSk7XG5cbmV4cG9ydCB7XG4gIGluc3BlY3RPYmplY3QsIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyLCBpbnNlcnRBcHBpdW1QcmVmaXhlcywgcm9vdERpcixcbiAgZ2V0UGFja2FnZVZlcnNpb24sIHB1bGxTZXR0aW5ncywgcmVtb3ZlQXBwaXVtUHJlZml4ZXMsIGdldEV4dGVuc2lvbkFyZ3MsXG4gIHZhbGlkYXRlRXh0ZW5zaW9uQXJnc1xufTtcbiJdLCJmaWxlIjoibGliL3V0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
240
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImluc3BlY3RPYmplY3QiLCJhcmdzIiwiZ2V0VmFsdWVBcnJheSIsIm9iaiIsImluZGVudCIsIl8iLCJpc09iamVjdCIsInN0ckFyciIsImFyZyIsInZhbHVlIiwidG9QYWlycyIsInB1c2giLCJzaGlmdCIsImxvZ2dlciIsImluZm8iLCJ2YWwiLCJwYXJzZUNhcHNGb3JJbm5lckRyaXZlciIsImpzb253cENhcGFiaWxpdGllcyIsInczY0NhcGFiaWxpdGllcyIsImNvbnN0cmFpbnRzIiwiZGVmYXVsdENhcGFiaWxpdGllcyIsImhhc1czQ0NhcHMiLCJpc1BsYWluT2JqZWN0IiwiaGFzIiwiaGFzSlNPTldQQ2FwcyIsImRlc2lyZWRDYXBzIiwicHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzIiwicHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzIiwicHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJXM0MiLCJlcnJvciIsIkVycm9yIiwiY2xvbmVEZWVwIiwiaXNFbXB0eSIsImRlZmF1bHRDYXBLZXkiLCJkZWZhdWx0Q2FwVmFsdWUiLCJpc0NhcEFscmVhZHlTZXQiLCJmaXJzdE1hdGNoRW50cnkiLCJmaXJzdE1hdGNoIiwicmVtb3ZlQXBwaXVtUHJlZml4ZXMiLCJyZW1vdmVBcHBpdW1QcmVmaXgiLCJhbHdheXNNYXRjaCIsIk9iamVjdCIsImFzc2lnbiIsIm1lc3NhZ2UiLCJpbnNlcnRBcHBpdW1QcmVmaXhlcyIsImNhcHMiLCJTVEFOREFSRF9DQVBTIiwicHJlZml4ZWRDYXBzIiwibmFtZSIsImluY2x1ZGVzIiwiZml4ZWRDYXBzIiwia2V5IiwicHJlZml4Iiwic3RhcnRzV2l0aCIsInN1YnN0cmluZyIsImxlbmd0aCIsImdldFBhY2thZ2VWZXJzaW9uIiwicGtnTmFtZSIsInBrZ0luZm8iLCJyZXF1aXJlIiwidmVyc2lvbiIsInB1bGxTZXR0aW5ncyIsInJlc3VsdCIsIm1hdGNoIiwiZXhlYyIsInJvb3REaXIiLCJmcyIsImZpbmRSb290IiwiX19kaXJuYW1lIiwiUmVhZG9ubHlNYXAiLCJNYXAiLCJzZXQiLCJkZWxldGUiLCJjbGVhciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsUUFBMUI7O0FBRUEsU0FBU0MsYUFBVCxDQUF3QkMsSUFBeEIsRUFBOEI7QUFDNUIsV0FBU0MsYUFBVCxDQUF3QkMsR0FBeEIsRUFBNkJDLE1BQU0sR0FBRyxJQUF0QyxFQUE0QztBQUMxQyxRQUFJLENBQUNDLGdCQUFFQyxRQUFGLENBQVdILEdBQVgsQ0FBTCxFQUFzQjtBQUNwQixhQUFPLENBQUNBLEdBQUQsQ0FBUDtBQUNEOztBQUVELFFBQUlJLE1BQU0sR0FBRyxDQUFDLEdBQUQsQ0FBYjs7QUFDQSxTQUFLLElBQUksQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLENBQVQsSUFBeUJKLGdCQUFFSyxPQUFGLENBQVVQLEdBQVYsQ0FBekIsRUFBeUM7QUFDdkMsVUFBSSxDQUFDRSxnQkFBRUMsUUFBRixDQUFXRyxLQUFYLENBQUwsRUFBd0I7QUFDdEJGLFFBQUFBLE1BQU0sQ0FBQ0ksSUFBUCxDQUFhLEdBQUVQLE1BQU8sS0FBSUksR0FBSSxLQUFJQyxLQUFNLEVBQXhDO0FBQ0QsT0FGRCxNQUVPO0FBQ0xBLFFBQUFBLEtBQUssR0FBR1AsYUFBYSxDQUFDTyxLQUFELEVBQVMsR0FBRUwsTUFBTyxJQUFsQixDQUFyQjtBQUNBRyxRQUFBQSxNQUFNLENBQUNJLElBQVAsQ0FBYSxHQUFFUCxNQUFPLEtBQUlJLEdBQUksS0FBSUMsS0FBSyxDQUFDRyxLQUFOLEVBQWMsRUFBaEQ7QUFDQUwsUUFBQUEsTUFBTSxDQUFDSSxJQUFQLENBQVksR0FBR0YsS0FBZjtBQUNEO0FBQ0Y7O0FBQ0RGLElBQUFBLE1BQU0sQ0FBQ0ksSUFBUCxDQUFhLEdBQUVQLE1BQU8sR0FBdEI7QUFDQSxXQUFPRyxNQUFQO0FBQ0Q7O0FBQ0QsT0FB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QUtjLEdBQUwsQ0FBUzhCLEdBQVQsQ0FBSixFQUFtQjtBQUNqQixZQUFNLElBQUlyQixLQUFKLENBQVcsR0FBRXFCLEdBQUksaUJBQWpCLENBQU47QUFDRDs7QUFDRCxXQUFPLE1BQU1vQixHQUFOLENBQVVwQixHQUFWLEVBQWU1QyxLQUFmLENBQVA7QUFDRDs7QUFFRGlFLEVBQUFBLE1BQU0sQ0FBRXJCLEdBQUYsRUFBTztBQUNYLFVBQU0sSUFBSXJCLEtBQUosQ0FBVyxHQUFFcUIsR0FBSSxvQkFBakIsQ0FBTjtBQUNEOztBQUVEc0IsRUFBQUEsS0FBSyxHQUFJO0FBQ1AsVUFBTSxJQUFJM0MsS0FBSixDQUFXLDBCQUFYLENBQU47QUFDRDs7QUFsQjJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgcHJvY2Vzc0NhcGFiaWxpdGllcywgUFJPVE9DT0xTIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IFczQ19BUFBJVU1fUFJFRklYID0gJ2FwcGl1bSc7XG5cbmZ1bmN0aW9uIGluc3BlY3RPYmplY3QgKGFyZ3MpIHtcbiAgZnVuY3Rpb24gZ2V0VmFsdWVBcnJheSAob2JqLCBpbmRlbnQgPSAnICAnKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHtcbiAgICAgIHJldHVybiBbb2JqXTtcbiAgICB9XG5cbiAgICBsZXQgc3RyQXJyID0gWyd7J107XG4gICAgZm9yIChsZXQgW2FyZywgdmFsdWVdIG9mIF8udG9QYWlycyhvYmopKSB7XG4gICAgICBpZiAoIV8uaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHN0ckFyci5wdXNoKGAke2luZGVudH0gICR7YXJnfTogJHt2YWx1ZX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZ2V0VmFsdWVBcnJheSh2YWx1ZSwgYCR7aW5kZW50fSAgYCk7XG4gICAgICAgIHN0ckFyci5wdXNoKGAke2luZGVudH0gICR7YXJnfTogJHt2YWx1ZS5zaGlmdCgpfWApO1xuICAgICAgICBzdHJBcnIucHVzaCguLi52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN0ckFyci5wdXNoKGAke2luZGVudH19YCk7XG4gICAgcmV0dXJuIHN0ckFycjtcbiAgfVxuICBmb3IgKGxldCBbYXJnLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGFyZ3MpKSB7XG4gICAgdmFsdWUgPSBnZXRWYWx1ZUFycmF5KHZhbHVlKTtcbiAgICBsb2dnZXIuaW5mbyhgICAke2FyZ306ICR7dmFsdWUuc2hpZnQoKX1gKTtcbiAgICBmb3IgKGxldCB2YWwgb2YgdmFsdWUpIHtcbiAgICAgIGxvZ2dlci5pbmZvKHZhbCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGFrZXMgdGhlIGNhcHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGFuZCB0cmFuc2xhdGVzIHRoZW1cbiAqIGludG8gY2FwcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBpbm5lciBkcml2ZXJzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBqc29ud3BDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSB3M2NDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25zdHJhaW50c1xuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDYXBhYmlsaXRpZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIgKGpzb253cENhcGFiaWxpdGllcywgdzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cyA9IHt9LCBkZWZhdWx0Q2FwYWJpbGl0aWVzID0ge30pIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGNhbGxlciBzZW50IEpTT05XUCBjYXBzLCBXM0MgY2Fwcywgb3IgYm90aFxuICBjb25zdCBoYXNXM0NDYXBzID0gXy5pc1BsYWluT2JqZWN0KHczY0NhcGFiaWxpdGllcykgJiZcbiAgICAoXy5oYXModzNjQ2FwYWJpbGl0aWVzLCAnYWx3YXlzTWF0Y2gnKSB8fCBfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdmaXJzdE1hdGNoJykpO1xuICBjb25zdCBoYXNKU09OV1BDYXBzID0gXy5pc1BsYWluT2JqZWN0KGpzb253cENhcGFiaWxpdGllcyk7XG4gIGxldCBkZXNpcmVkQ2FwcyA9IHt9O1xuICBsZXQgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzID0gbnVsbDtcbiAgbGV0IHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyA9IG51bGw7XG5cbiAgaWYgKCFoYXNXM0NDYXBzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3RvY29sOiBQUk9UT0NPTFMuVzNDLFxuICAgICAgZXJyb3I6IG5ldyBFcnJvcignVzNDIGNhcGFiaWxpdGllcyBzaG91bGQgYmUgcHJvdmlkZWQnKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qge1czQ30gPSBQUk9UT0NPTFM7XG4gIGNvbnN0IHByb3RvY29sID0gVzNDO1xuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuICBqc29ud3BDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChqc29ud3BDYXBhYmlsaXRpZXMpO1xuICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICBkZWZhdWx0Q2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAoZGVmYXVsdENhcGFiaWxpdGllcyk7XG5cbiAgaWYgKCFfLmlzRW1wdHkoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgICAgZm9yIChjb25zdCBbZGVmYXVsdENhcEtleSwgZGVmYXVsdENhcFZhbHVlXSBvZiBfLnRvUGFpcnMoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICAgICAgbGV0IGlzQ2FwQWxyZWFkeVNldCA9IGZhbHNlO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBmaXJzdE1hdGNoIGVudHJpZXNcbiAgICAgICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgKHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoIHx8IFtdKSkge1xuICAgICAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QoZmlyc3RNYXRjaEVudHJ5KVxuICAgICAgICAgICAgICAmJiBfLmhhcyhyZW1vdmVBcHBpdW1QcmVmaXhlcyhmaXJzdE1hdGNoRW50cnkpLCByZW1vdmVBcHBpdW1QcmVmaXgoZGVmYXVsdENhcEtleSkpKSB7XG4gICAgICAgICAgICBpc0NhcEFscmVhZHlTZXQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIGFsd2F5c01hdGNoIGVudHJpZXNcbiAgICAgICAgaXNDYXBBbHJlYWR5U2V0ID0gaXNDYXBBbHJlYWR5U2V0IHx8IChfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKVxuICAgICAgICAgICYmIF8uaGFzKHJlbW92ZUFwcGl1bVByZWZpeGVzKHczY0NhcGFiaWxpdGllcy5hbHdheXNNYXRjaCksIHJlbW92ZUFwcGl1bVByZWZpeChkZWZhdWx0Q2FwS2V5KSkpO1xuICAgICAgICBpZiAoaXNDYXBBbHJlYWR5U2V0KSB7XG4gICAgICAgICAgLy8gU2tpcCBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcHJvdmlkZWQgY2Fwc1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBhZGQgdGhlIGRlZmF1bHQgY2FwYWJpbGl0eSBpZiBpdCBpcyBub3Qgb3ZlcnJpZGRlblxuICAgICAgICBpZiAoXy5pc0VtcHR5KHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoKSkge1xuICAgICAgICAgIHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoID0gW3tbZGVmYXVsdENhcEtleV06IGRlZmF1bHRDYXBWYWx1ZX1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoWzBdW2RlZmF1bHRDYXBLZXldID0gZGVmYXVsdENhcFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgICBqc29ud3BDYXBhYmlsaXRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCByZW1vdmVBcHBpdW1QcmVmaXhlcyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSwganNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgTUpTT05XUCBjYXBzXG4gIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gey4uLmpzb253cENhcGFiaWxpdGllc307XG4gIH1cblxuICAvLyBHZXQgVzNDIGNhcHNcbiAgaWYgKGhhc1czQ0NhcHMpIHtcbiAgICAvLyBDYWxsIHRoZSBwcm9jZXNzIGNhcGFiaWxpdGllcyBhbGdvcml0aG0gdG8gZmluZCBtYXRjaGluZyBjYXBzIG9uIHRoZSBXM0NcbiAgICAvLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vamxpcHBzL3NpbXBsZS13ZC1zcGVjI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzKVxuICAgIHRyeSB7XG4gICAgICBkZXNpcmVkQ2FwcyA9IHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cywgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBDb3VsZCBub3QgcGFyc2UgVzNDIGNhcGFiaWxpdGllczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVzaXJlZENhcHMsXG4gICAgICAgIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyxcbiAgICAgICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3IsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIG5ldyB3M2MgY2FwYWJpbGl0aWVzIHBheWxvYWQgdGhhdCBjb250YWlucyBvbmx5IHRoZSBtYXRjaGluZyBjYXBzIGluIGBhbHdheXNNYXRjaGBcbiAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMgPSB7XG4gICAgICBhbHdheXNNYXRjaDogey4uLmluc2VydEFwcGl1bVByZWZpeGVzKGRlc2lyZWRDYXBzKX0sXG4gICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge2Rlc2lyZWRDYXBzLCBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcywgcHJvdG9jb2x9O1xufVxuXG4vKipcbiAqIFRha2VzIGEgY2FwYWJpbGl0aWVzIG9iamVjdHMgYW5kIHByZWZpeGVzIGNhcGFiaWxpdGllcyB3aXRoIGBhcHBpdW06YFxuICogQHBhcmFtIHtPYmplY3R9IGNhcHMgRGVzaXJlZCBjYXBhYmlsaXRpZXMgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGluc2VydEFwcGl1bVByZWZpeGVzIChjYXBzKSB7XG4gIC8vIFN0YW5kYXJkLCBub24tcHJlZml4ZWQgY2FwYWJpbGl0aWVzIChzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jZGZuLXRhYmxlLW9mLXN0YW5kYXJkLWNhcGFiaWxpdGllcylcbiAgY29uc3QgU1RBTkRBUkRfQ0FQUyA9IFtcbiAgICAnYnJvd3Nlck5hbWUnLFxuICAgICdicm93c2VyVmVyc2lvbicsXG4gICAgJ3BsYXRmb3JtTmFtZScsXG4gICAgJ2FjY2VwdEluc2VjdXJlQ2VydHMnLFxuICAgICdwYWdlTG9hZFN0cmF0ZWd5JyxcbiAgICAncHJveHknLFxuICAgICdzZXRXaW5kb3dSZWN0JyxcbiAgICAndGltZW91dHMnLFxuICAgICd1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcidcbiAgXTtcblxuICBsZXQgcHJlZml4ZWRDYXBzID0ge307XG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgaWYgKFNUQU5EQVJEX0NBUFMuaW5jbHVkZXMobmFtZSkgfHwgbmFtZS5pbmNsdWRlcygnOicpKSB7XG4gICAgICBwcmVmaXhlZENhcHNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ZWRDYXBzW2Ake1czQ19BUFBJVU1fUFJFRklYfToke25hbWV9YF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByZWZpeGVkQ2Fwcztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXBwaXVtUHJlZml4ZXMgKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykpIHtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIGNvbnN0IGZpeGVkQ2FwcyA9IHt9O1xuICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIF8udG9QYWlycyhjYXBzKSkge1xuICAgIGZpeGVkQ2Fwc1tyZW1vdmVBcHBpdW1QcmVmaXgobmFtZSldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGZpeGVkQ2Fwcztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXBwaXVtUHJlZml4IChrZXkpIHtcbiAgY29uc3QgcHJlZml4ID0gYCR7VzNDX0FQUElVTV9QUkVGSVh9OmA7XG4gIHJldHVybiBfLnN0YXJ0c1dpdGgoa2V5LCBwcmVmaXgpID8ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKSA6IGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2FnZVZlcnNpb24gKHBrZ05hbWUpIHtcbiAgY29uc3QgcGtnSW5mbyA9IHJlcXVpcmUoYCR7cGtnTmFtZX0vcGFja2FnZS5qc29uYCkgfHwge307XG4gIHJldHVybiBwa2dJbmZvLnZlcnNpb247XG59XG5cbi8qKlxuICogUHVsbHMgdGhlIGluaXRpYWwgdmFsdWVzIG9mIEFwcGl1bSBzZXR0aW5ncyBmcm9tIHRoZSBnaXZlbiBjYXBhYmlsaXRpZXMgYXJndW1lbnQuXG4gKiBFYWNoIHNldHRpbmcgaXRlbSBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4gKiBgc2V0dGluZ1tzZXR0aW5nX25hbWVdOiBzZXR0aW5nX3ZhbHVlYFxuICogVGhlIGNhcGFiaWxpdGllcyBhcmd1bWVudCBpdHNlbGYgZ2V0cyBtdXRhdGVkLCBzbyBpdCBkb2VzIG5vdCBjb250YWluIHBhcnNlZFxuICogc2V0dGluZ3MgYW55bW9yZSB0byBhdm9pZCBmdXJ0aGVyIHBhcnNpbmcgaXNzdWVzLlxuICogQ2hlY2tcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2Jsb2IvbWFzdGVyL2RvY3MvZW4vYWR2YW5jZWQtY29uY2VwdHMvc2V0dGluZ3MubWRcbiAqIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGF2YWlsYWJsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0gez9PYmplY3R9IGNhcHMgLSBDYXBhYmlsaXRpZXMgZGljdGlvbmFyeS4gSXQgaXMgbXV0YXRlZCBpZlxuICogb25lIG9yIG1vcmUgc2V0dGluZ3MgaGF2ZSBiZWVuIHB1bGxlZCBmcm9tIGl0XG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gQW4gZW1wdHkgZGljdGlvbmFyeSBpZiB0aGUgZ2l2ZW4gY2FwcyBjb250YWlucyBub1xuICogc2V0dGluZyBpdGVtcyBvciBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBwYXJzZWQgQXBwaXVtIHNldHRpbmcgbmFtZXMgYWxvbmcgd2l0aFxuICogdGhlaXIgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBwdWxsU2V0dGluZ3MgKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykgfHwgXy5pc0VtcHR5KGNhcHMpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhjYXBzKSkge1xuICAgIGNvbnN0IG1hdGNoID0gL1xcYnNldHRpbmdzXFxbKFxcUyspXFxdJC8uZXhlYyhrZXkpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc3VsdFttYXRjaFsxXV0gPSB2YWx1ZTtcbiAgICBkZWxldGUgY2Fwc1trZXldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IHJvb3REaXIgPSBmcy5maW5kUm9vdChfX2Rpcm5hbWUpO1xuXG5cbi8qKlxuICogQSBNYXAgd2hlcmUgeW91IGNhbiBzZXQgcHJvcGVydGllcywgYnV0IG9ubHkgb25jZS4gQW5kIHlvdSBjYW4ndCByZW1vdmUgYW55dGhpbmcuIFNvIHRoZXJlLlxuICogQHRlbXBsYXRlIEssVlxuICogQGV4dGVuZHMge01hcDxLLFY+fVxuICovXG5jbGFzcyBSZWFkb25seU1hcCBleHRlbmRzIE1hcCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0t9IGtleVxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlXG4gICAqL1xuICBzZXQgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2tleX0gaXMgYWxyZWFkeSBzZXRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnNldChrZXksIHZhbHVlKTtcbiAgfVxuXG4gIGRlbGV0ZSAoa2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2tleX0gY2Fubm90IGJlIGRlbGV0ZWRgKTtcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjbGVhciBSZWFkb25seU1hcGApO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIGluc3BlY3RPYmplY3QsIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyLCBpbnNlcnRBcHBpdW1QcmVmaXhlcywgcm9vdERpcixcbiAgZ2V0UGFja2FnZVZlcnNpb24sIHB1bGxTZXR0aW5ncywgcmVtb3ZlQXBwaXVtUHJlZml4ZXMsIFJlYWRvbmx5TWFwXG59O1xuIl0sImZpbGUiOiJsaWIvdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema",
|
|
3
|
+
"additionalProperties": false,
|
|
4
|
+
"description": "A schema for Appium configuration files",
|
|
5
|
+
"properties": {
|
|
6
|
+
"server": {
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"description": "Configuration when running Appium as a server",
|
|
9
|
+
"properties": {
|
|
10
|
+
"address": {
|
|
11
|
+
"$comment": "I think hostname covers both DNS and IPv4...could be wrong",
|
|
12
|
+
"appiumCliAliases": [
|
|
13
|
+
"a"
|
|
14
|
+
],
|
|
15
|
+
"default": "0.0.0.0",
|
|
16
|
+
"description": "IP address to listen on",
|
|
17
|
+
"format": "hostname",
|
|
18
|
+
"title": "address config",
|
|
19
|
+
"type": "string"
|
|
20
|
+
},
|
|
21
|
+
"allow-cors": {
|
|
22
|
+
"description": "Whether the Appium server should allow web browser connections from any host",
|
|
23
|
+
"title": "allow-cors config",
|
|
24
|
+
"type": "boolean",
|
|
25
|
+
"default": false
|
|
26
|
+
},
|
|
27
|
+
"allow-insecure": {
|
|
28
|
+
"appiumCliTransformer": "csv",
|
|
29
|
+
"default": [],
|
|
30
|
+
"description": "Set which insecure features are allowed to run in this server's sessions. Features are defined on a driver level; see documentation for more details. Note that features defined via \"deny-insecure\" will be disabled, even if also listed here. If string, a path to a text file containing policy or a comma-delimited list.",
|
|
31
|
+
"items": {
|
|
32
|
+
"type": "string"
|
|
33
|
+
},
|
|
34
|
+
"title": "allow-insecure config",
|
|
35
|
+
"type": "array",
|
|
36
|
+
"uniqueItems": true
|
|
37
|
+
},
|
|
38
|
+
"base-path": {
|
|
39
|
+
"appiumCliAliases": [
|
|
40
|
+
"pa"
|
|
41
|
+
],
|
|
42
|
+
"default": "",
|
|
43
|
+
"description": "Base path to use as the prefix for all webdriver routes running on the server",
|
|
44
|
+
"title": "base-path config",
|
|
45
|
+
"type": "string"
|
|
46
|
+
},
|
|
47
|
+
"callback-address": {
|
|
48
|
+
"appiumCliAliases": [
|
|
49
|
+
"ca"
|
|
50
|
+
],
|
|
51
|
+
"description": "Callback IP address (default: same as \"address\")",
|
|
52
|
+
"title": "callback-address config",
|
|
53
|
+
"type": "string"
|
|
54
|
+
},
|
|
55
|
+
"callback-port": {
|
|
56
|
+
"appiumCliAliases": [
|
|
57
|
+
"cp"
|
|
58
|
+
],
|
|
59
|
+
"default": 4723,
|
|
60
|
+
"description": "Callback port (default: same as \"port\")",
|
|
61
|
+
"maximum": 65535,
|
|
62
|
+
"minimum": 1,
|
|
63
|
+
"title": "callback-port config",
|
|
64
|
+
"type": "integer"
|
|
65
|
+
},
|
|
66
|
+
"debug-log-spacing": {
|
|
67
|
+
"default": false,
|
|
68
|
+
"description": "Add exaggerated spacing in logs to help with visual inspection",
|
|
69
|
+
"title": "debug-log-spacing config",
|
|
70
|
+
"type": "boolean"
|
|
71
|
+
},
|
|
72
|
+
"default-capabilities": {
|
|
73
|
+
"$comment": "TODO",
|
|
74
|
+
"appiumCliAliases": [
|
|
75
|
+
"dc"
|
|
76
|
+
],
|
|
77
|
+
"description": "Set the default desired capabilities, which will be set on each session unless overridden by received capabilities. If a string, a path to a JSON file containing the capabilities, or raw JSON.",
|
|
78
|
+
"title": "default-capabilities config",
|
|
79
|
+
"type": "object"
|
|
80
|
+
},
|
|
81
|
+
"deny-insecure": {
|
|
82
|
+
"$comment": "Allowed values are defined by drivers",
|
|
83
|
+
"appiumCliTransformer": "csv",
|
|
84
|
+
"default": [],
|
|
85
|
+
"description": "Set which insecure features are not allowed to run in this server's sessions. Features are defined on a driver level; see documentation for more details. Features listed here will not be enabled even if also listed in \"allow-insecure\", and even if \"relaxed-security\" is enabled. If string, a path to a text file containing policy or a comma-delimited list.",
|
|
86
|
+
"items": {
|
|
87
|
+
"type": "string"
|
|
88
|
+
},
|
|
89
|
+
"title": "deny-insecure config",
|
|
90
|
+
"type": "array",
|
|
91
|
+
"uniqueItems": true
|
|
92
|
+
},
|
|
93
|
+
"driver": {
|
|
94
|
+
"description": "Driver-specific configuration. Keys should correspond to driver package names",
|
|
95
|
+
"properties": {},
|
|
96
|
+
"title": "driver config",
|
|
97
|
+
"type": "object"
|
|
98
|
+
},
|
|
99
|
+
"keep-alive-timeout": {
|
|
100
|
+
"appiumCliAliases": [
|
|
101
|
+
"ka"
|
|
102
|
+
],
|
|
103
|
+
"default": 600,
|
|
104
|
+
"description": "Number of seconds the Appium server should apply as both the keep-alive timeout and the connection timeout for all requests. A value of 0 disables the timeout.",
|
|
105
|
+
"minimum": 0,
|
|
106
|
+
"title": "keep-alive-timeout config",
|
|
107
|
+
"type": "integer"
|
|
108
|
+
},
|
|
109
|
+
"local-timezone": {
|
|
110
|
+
"default": false,
|
|
111
|
+
"description": "Use local timezone for timestamps",
|
|
112
|
+
"title": "local-timezone config",
|
|
113
|
+
"type": "boolean"
|
|
114
|
+
},
|
|
115
|
+
"log": {
|
|
116
|
+
"appiumCliAliases": [
|
|
117
|
+
"g"
|
|
118
|
+
],
|
|
119
|
+
"appiumCliDest": "logFile",
|
|
120
|
+
"description": "Also send log output to this file",
|
|
121
|
+
"title": "log config",
|
|
122
|
+
"type": "string"
|
|
123
|
+
},
|
|
124
|
+
"log-filters": {
|
|
125
|
+
"$comment": "TODO",
|
|
126
|
+
"description": "One or more log filtering rules",
|
|
127
|
+
"items": {
|
|
128
|
+
"type": "string"
|
|
129
|
+
},
|
|
130
|
+
"title": "log-filters config",
|
|
131
|
+
"type": "array"
|
|
132
|
+
},
|
|
133
|
+
"log-level": {
|
|
134
|
+
"appiumCliDest": "loglevel",
|
|
135
|
+
"default": "debug",
|
|
136
|
+
"description": "Log level (console[:file])",
|
|
137
|
+
"enum": [
|
|
138
|
+
"info",
|
|
139
|
+
"info:debug",
|
|
140
|
+
"info:info",
|
|
141
|
+
"info:warn",
|
|
142
|
+
"info:error",
|
|
143
|
+
"warn",
|
|
144
|
+
"warn:debug",
|
|
145
|
+
"warn:info",
|
|
146
|
+
"warn:warn",
|
|
147
|
+
"warn:error",
|
|
148
|
+
"error",
|
|
149
|
+
"error:debug",
|
|
150
|
+
"error:info",
|
|
151
|
+
"error:warn",
|
|
152
|
+
"error:error",
|
|
153
|
+
"debug",
|
|
154
|
+
"debug:debug",
|
|
155
|
+
"debug:info",
|
|
156
|
+
"debug:warn",
|
|
157
|
+
"debug:error"
|
|
158
|
+
],
|
|
159
|
+
"title": "log-level config",
|
|
160
|
+
"type": "string"
|
|
161
|
+
},
|
|
162
|
+
"log-no-colors": {
|
|
163
|
+
"default": false,
|
|
164
|
+
"description": "Do not use color in console output",
|
|
165
|
+
"title": "log-no-colors config",
|
|
166
|
+
"type": "boolean"
|
|
167
|
+
},
|
|
168
|
+
"log-timestamp": {
|
|
169
|
+
"default": false,
|
|
170
|
+
"description": "Show timestamps in console output",
|
|
171
|
+
"title": "log-timestamp config",
|
|
172
|
+
"type": "boolean"
|
|
173
|
+
},
|
|
174
|
+
"long-stacktrace": {
|
|
175
|
+
"default": false,
|
|
176
|
+
"description": "Add long stack traces to log entries. Recommended for debugging only.",
|
|
177
|
+
"title": "long-stacktrace config",
|
|
178
|
+
"type": "boolean"
|
|
179
|
+
},
|
|
180
|
+
"no-perms-check": {
|
|
181
|
+
"default": false,
|
|
182
|
+
"description": "Do not check that needed files are readable and/or writable",
|
|
183
|
+
"title": "no-perms-check config",
|
|
184
|
+
"type": "boolean"
|
|
185
|
+
},
|
|
186
|
+
"nodeconfig": {
|
|
187
|
+
"$comment": "Selenium Grid 3 is unmaintained and Selenium Grid 4 no longer supports this file.",
|
|
188
|
+
"description": "Path to configuration JSON file to register Appium as a node with Selenium Grid 3; otherwise the configuration itself",
|
|
189
|
+
"title": "nodeconfig config",
|
|
190
|
+
"type": "object"
|
|
191
|
+
},
|
|
192
|
+
"plugin": {
|
|
193
|
+
"description": "Plugin-specific configuration. Keys should correspond to plugin package names",
|
|
194
|
+
"properties": {},
|
|
195
|
+
"title": "plugin config",
|
|
196
|
+
"type": "object"
|
|
197
|
+
},
|
|
198
|
+
"port": {
|
|
199
|
+
"appiumCliAliases": [
|
|
200
|
+
"p"
|
|
201
|
+
],
|
|
202
|
+
"default": 4723,
|
|
203
|
+
"description": "Port to listen on",
|
|
204
|
+
"maximum": 65535,
|
|
205
|
+
"minimum": 1,
|
|
206
|
+
"title": "port config",
|
|
207
|
+
"type": "integer"
|
|
208
|
+
},
|
|
209
|
+
"relaxed-security": {
|
|
210
|
+
"default": false,
|
|
211
|
+
"description": "Disable additional security checks, so it is possible to use some advanced features, provided by drivers supporting this option. Only enable it if all the clients are in the trusted network and it's not the case if a client could potentially break out of the session sandbox. Specific features can be overridden by using \"deny-insecure\"",
|
|
212
|
+
"title": "relaxed-security config",
|
|
213
|
+
"type": "boolean"
|
|
214
|
+
},
|
|
215
|
+
"session-override": {
|
|
216
|
+
"default": false,
|
|
217
|
+
"description": "Enables session override (clobbering)",
|
|
218
|
+
"title": "session-override config",
|
|
219
|
+
"type": "boolean"
|
|
220
|
+
},
|
|
221
|
+
"strict-caps": {
|
|
222
|
+
"default": false,
|
|
223
|
+
"description": "Cause sessions to fail if desired caps are sent in that Appium does not recognize as valid for the selected device",
|
|
224
|
+
"title": "strict-caps config",
|
|
225
|
+
"type": "boolean"
|
|
226
|
+
},
|
|
227
|
+
"tmp": {
|
|
228
|
+
"appiumCliDest": "tmpDir",
|
|
229
|
+
"description": "Absolute path to directory Appium can use to manage temp files. Defaults to C:\\Windows\\Temp on Windows and /tmp otherwise.",
|
|
230
|
+
"title": "tmp config",
|
|
231
|
+
"type": "string"
|
|
232
|
+
},
|
|
233
|
+
"trace-dir": {
|
|
234
|
+
"description": "Absolute path to directory Appium can use to save iOS instrument traces; defaults to <tmp>/appium-instruments",
|
|
235
|
+
"title": "trace-dir config",
|
|
236
|
+
"type": "string"
|
|
237
|
+
},
|
|
238
|
+
"use-drivers": {
|
|
239
|
+
"appiumCliDescription": "A list of drivers to activate. Can be a comma-delimited string or path to CSV file. By default, all installed drivers will be activated.",
|
|
240
|
+
"default": [],
|
|
241
|
+
"description": "A list of drivers to activate. By default, all installed drivers will be activated.",
|
|
242
|
+
"items": {
|
|
243
|
+
"type": "string"
|
|
244
|
+
},
|
|
245
|
+
"title": "use-drivers config",
|
|
246
|
+
"type": "array",
|
|
247
|
+
"uniqueItems": true
|
|
248
|
+
},
|
|
249
|
+
"use-plugins": {
|
|
250
|
+
"appiumCliDescription": "A list of plugins to activate. Can be a comma-delimited string, path to CSV file, or the string \"all\" to use all installed plugins.",
|
|
251
|
+
"default": [],
|
|
252
|
+
"description": "A list of plugins to activate. To activate all plugins, the value should be an array with a single item \"all\".",
|
|
253
|
+
"items": {
|
|
254
|
+
"type": "string"
|
|
255
|
+
},
|
|
256
|
+
"title": "use-plugins config",
|
|
257
|
+
"type": "array",
|
|
258
|
+
"uniqueItems": true
|
|
259
|
+
},
|
|
260
|
+
"webhook": {
|
|
261
|
+
"$comment": "This should probably use a uri-template format to restrict the protocol to http/https",
|
|
262
|
+
"appiumCliAliases": [
|
|
263
|
+
"G"
|
|
264
|
+
],
|
|
265
|
+
"description": "Also send log output to this http listener",
|
|
266
|
+
"format": "uri",
|
|
267
|
+
"title": "webhook config",
|
|
268
|
+
"type": "string"
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
"title": "server config",
|
|
272
|
+
"type": "object"
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
"title": "Appium Configuration",
|
|
276
|
+
"type": "object"
|
|
277
|
+
}
|