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
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
require("source-map-support/register");
|
|
9
|
+
|
|
10
|
+
const schema = {
|
|
11
|
+
$schema: 'http://json-schema.org/draft-07/schema',
|
|
12
|
+
additionalProperties: false,
|
|
13
|
+
description: 'A schema for Appium configuration files',
|
|
14
|
+
properties: {
|
|
15
|
+
server: {
|
|
16
|
+
additionalProperties: false,
|
|
17
|
+
description: 'Configuration when running Appium as a server',
|
|
18
|
+
properties: {
|
|
19
|
+
address: {
|
|
20
|
+
$comment: 'I think hostname covers both DNS and IPv4...could be wrong',
|
|
21
|
+
appiumCliAliases: ['a'],
|
|
22
|
+
default: '0.0.0.0',
|
|
23
|
+
description: 'IP address to listen on',
|
|
24
|
+
format: 'hostname',
|
|
25
|
+
title: 'address config',
|
|
26
|
+
type: 'string'
|
|
27
|
+
},
|
|
28
|
+
'allow-cors': {
|
|
29
|
+
description: 'Whether the Appium server should allow web browser connections from any host',
|
|
30
|
+
title: 'allow-cors config',
|
|
31
|
+
type: 'boolean',
|
|
32
|
+
default: false
|
|
33
|
+
},
|
|
34
|
+
'allow-insecure': {
|
|
35
|
+
appiumCliTransformer: 'csv',
|
|
36
|
+
default: [],
|
|
37
|
+
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.',
|
|
38
|
+
items: {
|
|
39
|
+
type: 'string'
|
|
40
|
+
},
|
|
41
|
+
title: 'allow-insecure config',
|
|
42
|
+
type: 'array',
|
|
43
|
+
uniqueItems: true
|
|
44
|
+
},
|
|
45
|
+
'base-path': {
|
|
46
|
+
appiumCliAliases: ['pa'],
|
|
47
|
+
default: '',
|
|
48
|
+
description: 'Base path to use as the prefix for all webdriver routes running on the server',
|
|
49
|
+
title: 'base-path config',
|
|
50
|
+
type: 'string'
|
|
51
|
+
},
|
|
52
|
+
'callback-address': {
|
|
53
|
+
appiumCliAliases: ['ca'],
|
|
54
|
+
description: 'Callback IP address (default: same as "address")',
|
|
55
|
+
title: 'callback-address config',
|
|
56
|
+
type: 'string'
|
|
57
|
+
},
|
|
58
|
+
'callback-port': {
|
|
59
|
+
appiumCliAliases: ['cp'],
|
|
60
|
+
default: 4723,
|
|
61
|
+
description: 'Callback port (default: same as "port")',
|
|
62
|
+
maximum: 65535,
|
|
63
|
+
minimum: 1,
|
|
64
|
+
title: 'callback-port config',
|
|
65
|
+
type: 'integer'
|
|
66
|
+
},
|
|
67
|
+
'debug-log-spacing': {
|
|
68
|
+
default: false,
|
|
69
|
+
description: 'Add exaggerated spacing in logs to help with visual inspection',
|
|
70
|
+
title: 'debug-log-spacing config',
|
|
71
|
+
type: 'boolean'
|
|
72
|
+
},
|
|
73
|
+
'default-capabilities': {
|
|
74
|
+
$comment: 'TODO',
|
|
75
|
+
appiumCliAliases: ['dc'],
|
|
76
|
+
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.',
|
|
77
|
+
title: 'default-capabilities config',
|
|
78
|
+
type: 'object'
|
|
79
|
+
},
|
|
80
|
+
'deny-insecure': {
|
|
81
|
+
$comment: 'Allowed values are defined by drivers',
|
|
82
|
+
appiumCliTransformer: 'csv',
|
|
83
|
+
default: [],
|
|
84
|
+
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.',
|
|
85
|
+
items: {
|
|
86
|
+
type: 'string'
|
|
87
|
+
},
|
|
88
|
+
title: 'deny-insecure config',
|
|
89
|
+
type: 'array',
|
|
90
|
+
uniqueItems: true
|
|
91
|
+
},
|
|
92
|
+
driver: {
|
|
93
|
+
description: 'Driver-specific configuration. Keys should correspond to driver package names',
|
|
94
|
+
properties: {},
|
|
95
|
+
title: 'driver config',
|
|
96
|
+
type: 'object'
|
|
97
|
+
},
|
|
98
|
+
'keep-alive-timeout': {
|
|
99
|
+
appiumCliAliases: ['ka'],
|
|
100
|
+
default: 600,
|
|
101
|
+
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.',
|
|
102
|
+
minimum: 0,
|
|
103
|
+
title: 'keep-alive-timeout config',
|
|
104
|
+
type: 'integer'
|
|
105
|
+
},
|
|
106
|
+
'local-timezone': {
|
|
107
|
+
default: false,
|
|
108
|
+
description: 'Use local timezone for timestamps',
|
|
109
|
+
title: 'local-timezone config',
|
|
110
|
+
type: 'boolean'
|
|
111
|
+
},
|
|
112
|
+
log: {
|
|
113
|
+
appiumCliAliases: ['g'],
|
|
114
|
+
appiumCliDest: 'logFile',
|
|
115
|
+
description: 'Also send log output to this file',
|
|
116
|
+
title: 'log config',
|
|
117
|
+
type: 'string'
|
|
118
|
+
},
|
|
119
|
+
'log-filters': {
|
|
120
|
+
$comment: 'TODO',
|
|
121
|
+
description: 'One or more log filtering rules',
|
|
122
|
+
items: {
|
|
123
|
+
type: 'string'
|
|
124
|
+
},
|
|
125
|
+
title: 'log-filters config',
|
|
126
|
+
type: 'array'
|
|
127
|
+
},
|
|
128
|
+
'log-level': {
|
|
129
|
+
appiumCliDest: 'loglevel',
|
|
130
|
+
default: 'debug',
|
|
131
|
+
description: 'Log level (console[:file])',
|
|
132
|
+
enum: ['info', 'info:debug', 'info:info', 'info:warn', 'info:error', 'warn', 'warn:debug', 'warn:info', 'warn:warn', 'warn:error', 'error', 'error:debug', 'error:info', 'error:warn', 'error:error', 'debug', 'debug:debug', 'debug:info', 'debug:warn', 'debug:error'],
|
|
133
|
+
title: 'log-level config',
|
|
134
|
+
type: 'string'
|
|
135
|
+
},
|
|
136
|
+
'log-no-colors': {
|
|
137
|
+
default: false,
|
|
138
|
+
description: 'Do not use color in console output',
|
|
139
|
+
title: 'log-no-colors config',
|
|
140
|
+
type: 'boolean'
|
|
141
|
+
},
|
|
142
|
+
'log-timestamp': {
|
|
143
|
+
default: false,
|
|
144
|
+
description: 'Show timestamps in console output',
|
|
145
|
+
title: 'log-timestamp config',
|
|
146
|
+
type: 'boolean'
|
|
147
|
+
},
|
|
148
|
+
'long-stacktrace': {
|
|
149
|
+
default: false,
|
|
150
|
+
description: 'Add long stack traces to log entries. Recommended for debugging only.',
|
|
151
|
+
title: 'long-stacktrace config',
|
|
152
|
+
type: 'boolean'
|
|
153
|
+
},
|
|
154
|
+
'no-perms-check': {
|
|
155
|
+
default: false,
|
|
156
|
+
description: 'Do not check that needed files are readable and/or writable',
|
|
157
|
+
title: 'no-perms-check config',
|
|
158
|
+
type: 'boolean'
|
|
159
|
+
},
|
|
160
|
+
nodeconfig: {
|
|
161
|
+
$comment: 'Selenium Grid 3 is unmaintained and Selenium Grid 4 no longer supports this file.',
|
|
162
|
+
description: 'Path to configuration JSON file to register Appium as a node with Selenium Grid 3; otherwise the configuration itself',
|
|
163
|
+
title: 'nodeconfig config',
|
|
164
|
+
type: 'object'
|
|
165
|
+
},
|
|
166
|
+
plugin: {
|
|
167
|
+
description: 'Plugin-specific configuration. Keys should correspond to plugin package names',
|
|
168
|
+
properties: {},
|
|
169
|
+
title: 'plugin config',
|
|
170
|
+
type: 'object'
|
|
171
|
+
},
|
|
172
|
+
port: {
|
|
173
|
+
appiumCliAliases: ['p'],
|
|
174
|
+
default: 4723,
|
|
175
|
+
description: 'Port to listen on',
|
|
176
|
+
maximum: 65535,
|
|
177
|
+
minimum: 1,
|
|
178
|
+
title: 'port config',
|
|
179
|
+
type: 'integer'
|
|
180
|
+
},
|
|
181
|
+
'relaxed-security': {
|
|
182
|
+
default: false,
|
|
183
|
+
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"',
|
|
184
|
+
title: 'relaxed-security config',
|
|
185
|
+
type: 'boolean'
|
|
186
|
+
},
|
|
187
|
+
'session-override': {
|
|
188
|
+
default: false,
|
|
189
|
+
description: 'Enables session override (clobbering)',
|
|
190
|
+
title: 'session-override config',
|
|
191
|
+
type: 'boolean'
|
|
192
|
+
},
|
|
193
|
+
'strict-caps': {
|
|
194
|
+
default: false,
|
|
195
|
+
description: 'Cause sessions to fail if desired caps are sent in that Appium does not recognize as valid for the selected device',
|
|
196
|
+
title: 'strict-caps config',
|
|
197
|
+
type: 'boolean'
|
|
198
|
+
},
|
|
199
|
+
tmp: {
|
|
200
|
+
appiumCliDest: 'tmpDir',
|
|
201
|
+
description: 'Absolute path to directory Appium can use to manage temp files. Defaults to C:\\Windows\\Temp on Windows and /tmp otherwise.',
|
|
202
|
+
title: 'tmp config',
|
|
203
|
+
type: 'string'
|
|
204
|
+
},
|
|
205
|
+
'trace-dir': {
|
|
206
|
+
description: 'Absolute path to directory Appium can use to save iOS instrument traces; defaults to <tmp>/appium-instruments',
|
|
207
|
+
title: 'trace-dir config',
|
|
208
|
+
type: 'string'
|
|
209
|
+
},
|
|
210
|
+
'use-drivers': {
|
|
211
|
+
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.',
|
|
212
|
+
default: [],
|
|
213
|
+
description: 'A list of drivers to activate. By default, all installed drivers will be activated.',
|
|
214
|
+
items: {
|
|
215
|
+
type: 'string'
|
|
216
|
+
},
|
|
217
|
+
title: 'use-drivers config',
|
|
218
|
+
type: 'array',
|
|
219
|
+
uniqueItems: true
|
|
220
|
+
},
|
|
221
|
+
'use-plugins': {
|
|
222
|
+
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.',
|
|
223
|
+
default: [],
|
|
224
|
+
description: 'A list of plugins to activate. To activate all plugins, the value should be an array with a single item "all".',
|
|
225
|
+
items: {
|
|
226
|
+
type: 'string'
|
|
227
|
+
},
|
|
228
|
+
title: 'use-plugins config',
|
|
229
|
+
type: 'array',
|
|
230
|
+
uniqueItems: true
|
|
231
|
+
},
|
|
232
|
+
webhook: {
|
|
233
|
+
$comment: 'This should probably use a uri-template format to restrict the protocol to http/https',
|
|
234
|
+
appiumCliAliases: ['G'],
|
|
235
|
+
description: 'Also send log output to this http listener',
|
|
236
|
+
format: 'uri',
|
|
237
|
+
title: 'webhook config',
|
|
238
|
+
type: 'string'
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
title: 'server config',
|
|
242
|
+
type: 'object'
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
title: 'Appium Configuration',
|
|
246
|
+
type: 'object'
|
|
247
|
+
};
|
|
248
|
+
var _default = schema;
|
|
249
|
+
exports.default = _default;require('source-map-support').install();
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvYXBwaXVtLWNvbmZpZy1zY2hlbWEuanMiXSwibmFtZXMiOlsic2NoZW1hIiwiJHNjaGVtYSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiZGVzY3JpcHRpb24iLCJwcm9wZXJ0aWVzIiwic2VydmVyIiwiYWRkcmVzcyIsIiRjb21tZW50IiwiYXBwaXVtQ2xpQWxpYXNlcyIsImRlZmF1bHQiLCJmb3JtYXQiLCJ0aXRsZSIsInR5cGUiLCJhcHBpdW1DbGlUcmFuc2Zvcm1lciIsIml0ZW1zIiwidW5pcXVlSXRlbXMiLCJtYXhpbXVtIiwibWluaW11bSIsImRyaXZlciIsImxvZyIsImFwcGl1bUNsaURlc3QiLCJlbnVtIiwibm9kZWNvbmZpZyIsInBsdWdpbiIsInBvcnQiLCJ0bXAiLCJhcHBpdW1DbGlEZXNjcmlwdGlvbiIsIndlYmhvb2siXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBLE1BQU1BLE1BQU0sR0FBeUI7QUFDbkNDLEVBQUFBLE9BQU8sRUFBRSx3Q0FEMEI7QUFFbkNDLEVBQUFBLG9CQUFvQixFQUFFLEtBRmE7QUFHbkNDLEVBQUFBLFdBQVcsRUFBRSx5Q0FIc0I7QUFJbkNDLEVBQUFBLFVBQVUsRUFBRTtBQUNWQyxJQUFBQSxNQUFNLEVBQUU7QUFDTkgsTUFBQUEsb0JBQW9CLEVBQUUsS0FEaEI7QUFFTkMsTUFBQUEsV0FBVyxFQUFFLCtDQUZQO0FBR05DLE1BQUFBLFVBQVUsRUFBRTtBQUNWRSxRQUFBQSxPQUFPLEVBQUU7QUFDUEMsVUFBQUEsUUFBUSxFQUNOLDREQUZLO0FBR1BDLFVBQUFBLGdCQUFnQixFQUFFLENBQUMsR0FBRCxDQUhYO0FBSVBDLFVBQUFBLE9BQU8sRUFBRSxTQUpGO0FBS1BOLFVBQUFBLFdBQVcsRUFBRSx5QkFMTjtBQU1QTyxVQUFBQSxNQUFNLEVBQUUsVUFORDtBQU9QQyxVQUFBQSxLQUFLLEVBQUUsZ0JBUEE7QUFRUEMsVUFBQUEsSUFBSSxFQUFFO0FBUkMsU0FEQztBQVdWLHNCQUFjO0FBQ1pU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QUFJLEVBQUU7QUFERCxXQU5NO0FBU2JELFVBQUFBLEtBQUssRUFBRSxvQkFUTTtBQVViQyxVQUFBQSxJQUFJLEVBQUUsT0FWTztBQVdiRyxVQUFBQSxXQUFXLEVBQUU7QUFYQSxTQXZPTDtBQW9QVix1QkFBZTtBQUNiVyxVQUFBQSxvQkFBb0IsRUFDbEIscUlBRlc7QUFHYmpCLFVBQUFBLE9BQU8sRUFBRSxFQUhJO0FBSWJOLFVBQUFBLFdBQVcsRUFDVCxnSEFMVztBQU1iVyxVQUFBQSxLQUFLLEVBQUU7QUFDTEYsWUFBQUEsSUFBSSxFQUFFO0FBREQsV0FOTTtBQVNiRCxVQUFBQSxLQUFLLEVBQUUsb0JBVE07QUFVYkMsVUFBQUEsSUFBSSxFQUFFLE9BVk87QUFXYkcsVUFBQUEsV0FBVyxFQUFFO0FBWEEsU0FwUEw7QUFpUVZZLFFBQUFBLE9BQU8sRUFBRTtBQUNQcEIsVUFBQUEsUUFBUSxFQUNOLHVGQUZLO0FBR1BDLFVBQUFBLGdCQUFnQixFQUFFLENBQUMsR0FBRCxDQUhYO0FBSVBMLFVBQUFBLFdBQVcsRUFBRSw0Q0FKTjtBQUtQTyxVQUFBQSxNQUFNLEVBQUUsS0FMRDtBQU1QQyxVQUFBQSxLQUFLLEVBQUUsZ0JBTkE7QUFPUEMsVUFBQUEsSUFBSSxFQUFFO0FBUEM7QUFqUUMsT0FITjtBQThRTkQsTUFBQUEsS0FBSyxFQUFFLGVBOVFEO0FBK1FOQyxNQUFBQSxJQUFJLEVBQUU7QUEvUUE7QUFERSxHQUp1QjtBQXVSbkNELEVBQUFBLEtBQUssRUFBRSxzQkF2UjRCO0FBd1JuQ0MsRUFBQUEsSUFBSSxFQUFFO0FBeFI2QixDQUFyQztlQTJSZVosTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5jb25zdCBzY2hlbWEgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoe1xuICAkc2NoZW1hOiAnaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEnLFxuICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gIGRlc2NyaXB0aW9uOiAnQSBzY2hlbWEgZm9yIEFwcGl1bSBjb25maWd1cmF0aW9uIGZpbGVzJyxcbiAgcHJvcGVydGllczoge1xuICAgIHNlcnZlcjoge1xuICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgZGVzY3JpcHRpb246ICdDb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBBcHBpdW0gYXMgYSBzZXJ2ZXInLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgJGNvbW1lbnQ6XG4gICAgICAgICAgICAnSSB0aGluayBob3N0bmFtZSBjb3ZlcnMgYm90aCBETlMgYW5kIElQdjQuLi5jb3VsZCBiZSB3cm9uZycsXG4gICAgICAgICAgYXBwaXVtQ2xpQWxpYXNlczogWydhJ10sXG4gICAgICAgICAgZGVmYXVsdDogJzAuMC4wLjAnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSVAgYWRkcmVzcyB0byBsaXN0ZW4gb24nLFxuICAgICAgICAgIGZvcm1hdDogJ2hvc3RuYW1lJyxcbiAgICAgICAgICB0aXRsZTogJ2FkZHJlc3MgY29uZmlnJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ2FsbG93LWNvcnMnOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAnV2hldGhlciB0aGUgQXBwaXVtIHNlcnZlciBzaG91bGQgYWxsb3cgd2ViIGJyb3dzZXIgY29ubmVjdGlvbnMgZnJvbSBhbnkgaG9zdCcsXG4gICAgICAgICAgdGl0bGU6ICdhbGxvdy1jb3JzIGNvbmZpZycsXG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICAnYWxsb3ctaW5zZWN1cmUnOiB7XG4gICAgICAgICAgYXBwaXVtQ2xpVHJhbnNmb3JtZXI6ICdjc3YnLFxuICAgICAgICAgIGRlZmF1bHQ6IFtdLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ1NldCB3aGljaCBpbnNlY3VyZSBmZWF0dXJlcyBhcmUgYWxsb3dlZCB0byBydW4gaW4gdGhpcyBzZXJ2ZXJcXCdzIHNlc3Npb25zLiBGZWF0dXJlcyBhcmUgZGVmaW5lZCBvbiBhIGRyaXZlciBsZXZlbDsgc2VlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy4gTm90ZSB0aGF0IGZlYXR1cmVzIGRlZmluZWQgdmlhIFwiZGVueS1pbnNlY3VyZVwiIHdpbGwgYmUgZGlzYWJsZWQsIGV2ZW4gaWYgYWxzbyBsaXN0ZWQgaGVyZS4gSWYgc3RyaW5nLCBhIHBhdGggdG8gYSB0ZXh0IGZpbGUgY29udGFpbmluZyBwb2xpY3kgb3IgYSBjb21tYS1kZWxpbWl0ZWQgbGlzdC4nLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiAnYWxsb3ctaW5zZWN1cmUgY29uZmlnJyxcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAnYmFzZS1wYXRoJzoge1xuICAgICAgICAgIGFwcGl1bUNsaUFsaWFzZXM6IFsncGEnXSxcbiAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICdCYXNlIHBhdGggdG8gdXNlIGFzIHRoZSBwcmVmaXggZm9yIGFsbCB3ZWJkcml2ZXIgcm91dGVzIHJ1bm5pbmcgb24gdGhlIHNlcnZlcicsXG4gICAgICAgICAgdGl0bGU6ICdiYXNlLXBhdGggY29uZmlnJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ2NhbGxiYWNrLWFkZHJlc3MnOiB7XG4gICAgICAgICAgYXBwaXVtQ2xpQWxpYXNlczogWydjYSddLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ2FsbGJhY2sgSVAgYWRkcmVzcyAoZGVmYXVsdDogc2FtZSBhcyBcImFkZHJlc3NcIiknLFxuICAgICAgICAgIHRpdGxlOiAnY2FsbGJhY2stYWRkcmVzcyBjb25maWcnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9LFxuICAgICAgICAnY2FsbGJhY2stcG9ydCc6IHtcbiAgICAgICAgICBhcHBpdW1DbGlBbGlhc2VzOiBbJ2NwJ10sXG4gICAgICAgICAgZGVmYXVsdDogNDcyMyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NhbGxiYWNrIHBvcnQgKGRlZmF1bHQ6IHNhbWUgYXMgXCJwb3J0XCIpJyxcbiAgICAgICAgICBtYXhpbXVtOiA2NTUzNSxcbiAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgIHRpdGxlOiAnY2FsbGJhY2stcG9ydCBjb25maWcnLFxuICAgICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ2RlYnVnLWxvZy1zcGFjaW5nJzoge1xuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ0FkZCBleGFnZ2VyYXRlZCBzcGFjaW5nIGluIGxvZ3MgdG8gaGVscCB3aXRoIHZpc3VhbCBpbnNwZWN0aW9uJyxcbiAgICAgICAgICB0aXRsZTogJ2RlYnVnLWxvZy1zcGFjaW5nIGNvbmZpZycsXG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICB9LFxuICAgICAgICAnZGVmYXVsdC1jYXBhYmlsaXRpZXMnOiB7XG4gICAgICAgICAgJGNvbW1lbnQ6ICdUT0RPJyxcbiAgICAgICAgICBhcHBpdW1DbGlBbGlhc2VzOiBbJ2RjJ10sXG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAnU2V0IHRoZSBkZWZhdWx0IGRlc2lyZWQgY2FwYWJpbGl0aWVzLCB3aGljaCB3aWxsIGJlIHNldCBvbiBlYWNoIHNlc3Npb24gdW5sZXNzIG92ZXJyaWRkZW4gYnkgcmVjZWl2ZWQgY2FwYWJpbGl0aWVzLiBJZiBhIHN0cmluZywgYSBwYXRoIHRvIGEgSlNPTiBmaWxlIGNvbnRhaW5pbmcgdGhlIGNhcGFiaWxpdGllcywgb3IgcmF3IEpTT04uJyxcbiAgICAgICAgICB0aXRsZTogJ2RlZmF1bHQtY2FwYWJpbGl0aWVzIGNvbmZpZycsXG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIH0sXG4gICAgICAgICdkZW55LWluc2VjdXJlJzoge1xuICAgICAgICAgICRjb21tZW50OiAnQWxsb3dlZCB2YWx1ZXMgYXJlIGRlZmluZWQgYnkgZHJpdmVycycsXG4gICAgICAgICAgYXBwaXVtQ2xpVHJhbnNmb3JtZXI6ICdjc3YnLFxuICAgICAgICAgIGRlZmF1bHQ6IFtdLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ1NldCB3aGljaCBpbnNlY3VyZSBmZWF0dXJlcyBhcmUgbm90IGFsbG93ZWQgdG8gcnVuIGluIHRoaXMgc2VydmVyXFwncyBzZXNzaW9ucy4gRmVhdHVyZXMgYXJlIGRlZmluZWQgb24gYSBkcml2ZXIgbGV2ZWw7IHNlZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuIEZlYXR1cmVzIGxpc3RlZCBoZXJlIHdpbGwgbm90IGJlIGVuYWJsZWQgZXZlbiBpZiBhbHNvIGxpc3RlZCBpbiBcImFsbG93LWluc2VjdXJlXCIsIGFuZCBldmVuIGlmIFwicmVsYXhlZC1zZWN1cml0eVwiIGlzIGVuYWJsZWQuIElmIHN0cmluZywgYSBwYXRoIHRvIGEgdGV4dCBmaWxlIGNvbnRhaW5pbmcgcG9saWN5IG9yIGEgY29tbWEtZGVsaW1pdGVkIGxpc3QuJyxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZTogJ2RlbnktaW5zZWN1cmUgY29uZmlnJyxcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBkcml2ZXI6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICdEcml2ZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gS2V5cyBzaG91bGQgY29ycmVzcG9uZCB0byBkcml2ZXIgcGFja2FnZSBuYW1lcycsXG4gICAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgICAgdGl0bGU6ICdkcml2ZXIgY29uZmlnJyxcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgfSxcbiAgICAgICAgJ2tlZXAtYWxpdmUtdGltZW91dCc6IHtcbiAgICAgICAgICBhcHBpdW1DbGlBbGlhc2VzOiBbJ2thJ10sXG4gICAgICAgICAgZGVmYXVsdDogNjAwLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ051bWJlciBvZiBzZWNvbmRzIHRoZSBBcHBpdW0gc2VydmVyIHNob3VsZCBhcHBseSBhcyBib3RoIHRoZSBrZWVwLWFsaXZlIHRpbWVvdXQgYW5kIHRoZSBjb25uZWN0aW9uIHRpbWVvdXQgZm9yIGFsbCByZXF1ZXN0cy4gQSB2YWx1ZSBvZiAwIGRpc2FibGVzIHRoZSB0aW1lb3V0LicsXG4gICAgICAgICAgbWluaW11bTogMCxcbiAgICAgICAgICB0aXRsZTogJ2tlZXAtYWxpdmUtdGltZW91dCBjb25maWcnLFxuICAgICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ2xvY2FsLXRpbWV6b25lJzoge1xuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlIGxvY2FsIHRpbWV6b25lIGZvciB0aW1lc3RhbXBzJyxcbiAgICAgICAgICB0aXRsZTogJ2xvY2FsLXRpbWV6b25lIGNvbmZpZycsXG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICB9LFxuICAgICAgICBsb2c6IHtcbiAgICAgICAgICBhcHBpdW1DbGlBbGlhc2VzOiBbJ2cnXSxcbiAgICAgICAgICBhcHBpdW1DbGlEZXN0OiAnbG9nRmlsZScsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdBbHNvIHNlbmQgbG9nIG91dHB1dCB0byB0aGlzIGZpbGUnLFxuICAgICAgICAgIHRpdGxlOiAnbG9nIGNvbmZpZycsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0sXG4gICAgICAgICdsb2ctZmlsdGVycyc6IHtcbiAgICAgICAgICAkY29tbWVudDogJ1RPRE8nLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnT25lIG9yIG1vcmUgbG9nIGZpbHRlcmluZyBydWxlcycsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6ICdsb2ctZmlsdGVycyBjb25maWcnLFxuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgIH0sXG4gICAgICAgICdsb2ctbGV2ZWwnOiB7XG4gICAgICAgICAgYXBwaXVtQ2xpRGVzdDogJ2xvZ2xldmVsJyxcbiAgICAgICAgICBkZWZhdWx0OiAnZGVidWcnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTG9nIGxldmVsIChjb25zb2xlWzpmaWxlXSknLFxuICAgICAgICAgIGVudW06IFtcbiAgICAgICAgICAgICdpbmZvJyxcbiAgICAgICAgICAgICdpbmZvOmRlYnVnJyxcbiAgICAgICAgICAgICdpbmZvOmluZm8nLFxuICAgICAgICAgICAgJ2luZm86d2FybicsXG4gICAgICAgICAgICAnaW5mbzplcnJvcicsXG4gICAgICAgICAgICAnd2FybicsXG4gICAgICAgICAgICAnd2FybjpkZWJ1ZycsXG4gICAgICAgICAgICAnd2FybjppbmZvJyxcbiAgICAgICAgICAgICd3YXJuOndhcm4nLFxuICAgICAgICAgICAgJ3dhcm46ZXJyb3InLFxuICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICdlcnJvcjpkZWJ1ZycsXG4gICAgICAgICAgICAnZXJyb3I6aW5mbycsXG4gICAgICAgICAgICAnZXJyb3I6d2FybicsXG4gICAgICAgICAgICAnZXJyb3I6ZXJyb3InLFxuICAgICAgICAgICAgJ2RlYnVnJyxcbiAgICAgICAgICAgICdkZWJ1ZzpkZWJ1ZycsXG4gICAgICAgICAgICAnZGVidWc6aW5mbycsXG4gICAgICAgICAgICAnZGVidWc6d2FybicsXG4gICAgICAgICAgICAnZGVidWc6ZXJyb3InLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdGl0bGU6ICdsb2ctbGV2ZWwgY29uZmlnJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ2xvZy1uby1jb2xvcnMnOiB7XG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdEbyBub3QgdXNlIGNvbG9yIGluIGNvbnNvbGUgb3V0cHV0JyxcbiAgICAgICAgICB0aXRsZTogJ2xvZy1uby1jb2xvcnMgY29uZmlnJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgICdsb2ctdGltZXN0YW1wJzoge1xuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU2hvdyB0aW1lc3RhbXBzIGluIGNvbnNvbGUgb3V0cHV0JyxcbiAgICAgICAgICB0aXRsZTogJ2xvZy10aW1lc3RhbXAgY29uZmlnJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgICdsb25nLXN0YWNrdHJhY2UnOiB7XG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAnQWRkIGxvbmcgc3RhY2sgdHJhY2VzIHRvIGxvZyBlbnRyaWVzLiBSZWNvbW1lbmRlZCBmb3IgZGVidWdnaW5nIG9ubHkuJyxcbiAgICAgICAgICB0aXRsZTogJ2xvbmctc3RhY2t0cmFjZSBjb25maWcnLFxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ25vLXBlcm1zLWNoZWNrJzoge1xuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ0RvIG5vdCBjaGVjayB0aGF0IG5lZWRlZCBmaWxlcyBhcmUgcmVhZGFibGUgYW5kL29yIHdyaXRhYmxlJyxcbiAgICAgICAgICB0aXRsZTogJ25vLXBlcm1zLWNoZWNrIGNvbmZpZycsXG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICB9LFxuICAgICAgICBub2RlY29uZmlnOiB7XG4gICAgICAgICAgJGNvbW1lbnQ6XG4gICAgICAgICAgICAnU2VsZW5pdW0gR3JpZCAzIGlzIHVubWFpbnRhaW5lZCBhbmQgU2VsZW5pdW0gR3JpZCA0IG5vIGxvbmdlciBzdXBwb3J0cyB0aGlzIGZpbGUuJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICdQYXRoIHRvIGNvbmZpZ3VyYXRpb24gSlNPTiBmaWxlIHRvIHJlZ2lzdGVyIEFwcGl1bSBhcyBhIG5vZGUgd2l0aCBTZWxlbml1bSBHcmlkIDM7IG90aGVyd2lzZSB0aGUgY29uZmlndXJhdGlvbiBpdHNlbGYnLFxuICAgICAgICAgIHRpdGxlOiAnbm9kZWNvbmZpZyBjb25maWcnLFxuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICB9LFxuICAgICAgICBwbHVnaW46IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICdQbHVnaW4tc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gS2V5cyBzaG91bGQgY29ycmVzcG9uZCB0byBwbHVnaW4gcGFja2FnZSBuYW1lcycsXG4gICAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgICAgdGl0bGU6ICdwbHVnaW4gY29uZmlnJyxcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgfSxcbiAgICAgICAgcG9ydDoge1xuICAgICAgICAgIGFwcGl1bUNsaUFsaWFzZXM6IFsncCddLFxuICAgICAgICAgIGRlZmF1bHQ6IDQ3MjMsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdQb3J0IHRvIGxpc3RlbiBvbicsXG4gICAgICAgICAgbWF4aW11bTogNjU1MzUsXG4gICAgICAgICAgbWluaW11bTogMSxcbiAgICAgICAgICB0aXRsZTogJ3BvcnQgY29uZmlnJyxcbiAgICAgICAgICB0eXBlOiAnaW50ZWdlcicsXG4gICAgICAgIH0sXG4gICAgICAgICdyZWxheGVkLXNlY3VyaXR5Jzoge1xuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ0Rpc2FibGUgYWRkaXRpb25hbCBzZWN1cml0eSBjaGVja3MsIHNvIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBzb21lIGFkdmFuY2VkIGZlYXR1cmVzLCBwcm92aWRlZCBieSBkcml2ZXJzIHN1cHBvcnRpbmcgdGhpcyBvcHRpb24uIE9ubHkgZW5hYmxlIGl0IGlmIGFsbCB0aGUgY2xpZW50cyBhcmUgaW4gdGhlIHRydXN0ZWQgbmV0d29yayBhbmQgaXRcXCdzIG5vdCB0aGUgY2FzZSBpZiBhIGNsaWVudCBjb3VsZCBwb3RlbnRpYWxseSBicmVhayBvdXQgb2YgdGhlIHNlc3Npb24gc2FuZGJveC4gU3BlY2lmaWMgZmVhdHVyZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgXCJkZW55LWluc2VjdXJlXCInLFxuICAgICAgICAgIHRpdGxlOiAncmVsYXhlZC1zZWN1cml0eSBjb25maWcnLFxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3Nlc3Npb24tb3ZlcnJpZGUnOiB7XG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdFbmFibGVzIHNlc3Npb24gb3ZlcnJpZGUgKGNsb2JiZXJpbmcpJyxcbiAgICAgICAgICB0aXRsZTogJ3Nlc3Npb24tb3ZlcnJpZGUgY29uZmlnJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgICdzdHJpY3QtY2Fwcyc6IHtcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICdDYXVzZSBzZXNzaW9ucyB0byBmYWlsIGlmIGRlc2lyZWQgY2FwcyBhcmUgc2VudCBpbiB0aGF0IEFwcGl1bSBkb2VzIG5vdCByZWNvZ25pemUgYXMgdmFsaWQgZm9yIHRoZSBzZWxlY3RlZCBkZXZpY2UnLFxuICAgICAgICAgIHRpdGxlOiAnc3RyaWN0LWNhcHMgY29uZmlnJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgIHRtcDoge1xuICAgICAgICAgIGFwcGl1bUNsaURlc3Q6ICd0bXBEaXInLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ0Fic29sdXRlIHBhdGggdG8gZGlyZWN0b3J5IEFwcGl1bSBjYW4gdXNlIHRvIG1hbmFnZSB0ZW1wIGZpbGVzLiBEZWZhdWx0cyB0byBDOlxcXFxXaW5kb3dzXFxcXFRlbXAgb24gV2luZG93cyBhbmQgL3RtcCBvdGhlcndpc2UuJyxcbiAgICAgICAgICB0aXRsZTogJ3RtcCBjb25maWcnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9LFxuICAgICAgICAndHJhY2UtZGlyJzoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ0Fic29sdXRlIHBhdGggdG8gZGlyZWN0b3J5IEFwcGl1bSBjYW4gdXNlIHRvIHNhdmUgaU9TIGluc3RydW1lbnQgdHJhY2VzOyBkZWZhdWx0cyB0byA8dG1wPi9hcHBpdW0taW5zdHJ1bWVudHMnLFxuICAgICAgICAgIHRpdGxlOiAndHJhY2UtZGlyIGNvbmZpZycsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0sXG4gICAgICAgICd1c2UtZHJpdmVycyc6IHtcbiAgICAgICAgICBhcHBpdW1DbGlEZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICdBIGxpc3Qgb2YgZHJpdmVycyB0byBhY3RpdmF0ZS4gQ2FuIGJlIGEgY29tbWEtZGVsaW1pdGVkIHN0cmluZyBvciBwYXRoIHRvIENTViBmaWxlLiBCeSBkZWZhdWx0LCBhbGwgaW5zdGFsbGVkIGRyaXZlcnMgd2lsbCBiZSBhY3RpdmF0ZWQuJyxcbiAgICAgICAgICBkZWZhdWx0OiBbXSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICdBIGxpc3Qgb2YgZHJpdmVycyB0byBhY3RpdmF0ZS4gQnkgZGVmYXVsdCwgYWxsIGluc3RhbGxlZCBkcml2ZXJzIHdpbGwgYmUgYWN0aXZhdGVkLicsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6ICd1c2UtZHJpdmVycyBjb25maWcnLFxuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgICd1c2UtcGx1Z2lucyc6IHtcbiAgICAgICAgICBhcHBpdW1DbGlEZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICdBIGxpc3Qgb2YgcGx1Z2lucyB0byBhY3RpdmF0ZS4gQ2FuIGJlIGEgY29tbWEtZGVsaW1pdGVkIHN0cmluZywgcGF0aCB0byBDU1YgZmlsZSwgb3IgdGhlIHN0cmluZyBcImFsbFwiIHRvIHVzZSBhbGwgaW5zdGFsbGVkIHBsdWdpbnMuJyxcbiAgICAgICAgICBkZWZhdWx0OiBbXSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICdBIGxpc3Qgb2YgcGx1Z2lucyB0byBhY3RpdmF0ZS4gVG8gYWN0aXZhdGUgYWxsIHBsdWdpbnMsIHRoZSB2YWx1ZSBzaG91bGQgYmUgYW4gYXJyYXkgd2l0aCBhIHNpbmdsZSBpdGVtIFwiYWxsXCIuJyxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZTogJ3VzZS1wbHVnaW5zIGNvbmZpZycsXG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgd2ViaG9vazoge1xuICAgICAgICAgICRjb21tZW50OlxuICAgICAgICAgICAgJ1RoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBhIHVyaS10ZW1wbGF0ZSBmb3JtYXQgdG8gcmVzdHJpY3QgdGhlIHByb3RvY29sIHRvIGh0dHAvaHR0cHMnLFxuICAgICAgICAgIGFwcGl1bUNsaUFsaWFzZXM6IFsnRyddLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQWxzbyBzZW5kIGxvZyBvdXRwdXQgdG8gdGhpcyBodHRwIGxpc3RlbmVyJyxcbiAgICAgICAgICBmb3JtYXQ6ICd1cmknLFxuICAgICAgICAgIHRpdGxlOiAnd2ViaG9vayBjb25maWcnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRpdGxlOiAnc2VydmVyIGNvbmZpZycsXG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICB9LFxuICB9LFxuICB0aXRsZTogJ0FwcGl1bSBDb25maWd1cmF0aW9uJyxcbiAgdHlwZTogJ29iamVjdCcsXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgc2NoZW1hO1xuIl0sImZpbGUiOiJsaWIvc2NoZW1hL2FwcGl1bS1jb25maWctc2NoZW1hLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.SERVER_PROP_NAME = exports.ArgSpec = exports.APPIUM_CONFIG_SCHEMA_ID = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
require("source-map-support/register");
|
|
13
|
+
|
|
14
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
15
|
+
|
|
16
|
+
const APPIUM_CONFIG_SCHEMA_ID = 'appium.json';
|
|
17
|
+
exports.APPIUM_CONFIG_SCHEMA_ID = APPIUM_CONFIG_SCHEMA_ID;
|
|
18
|
+
const SERVER_PROP_NAME = 'server';
|
|
19
|
+
exports.SERVER_PROP_NAME = SERVER_PROP_NAME;
|
|
20
|
+
const SCHEMA_ID_REGEXP = /^(?<extType>.+?)-(?<normalizedExtName>.+)\.json$/;
|
|
21
|
+
const PROPERTIES = 'properties';
|
|
22
|
+
|
|
23
|
+
class ArgSpec {
|
|
24
|
+
constructor(name, {
|
|
25
|
+
extType,
|
|
26
|
+
extName,
|
|
27
|
+
dest,
|
|
28
|
+
defaultValue
|
|
29
|
+
} = {}) {
|
|
30
|
+
(0, _defineProperty2.default)(this, "name", void 0);
|
|
31
|
+
(0, _defineProperty2.default)(this, "extType", void 0);
|
|
32
|
+
(0, _defineProperty2.default)(this, "extName", void 0);
|
|
33
|
+
(0, _defineProperty2.default)(this, "ref", void 0);
|
|
34
|
+
(0, _defineProperty2.default)(this, "arg", void 0);
|
|
35
|
+
(0, _defineProperty2.default)(this, "dest", void 0);
|
|
36
|
+
(0, _defineProperty2.default)(this, "defaultValue", void 0);
|
|
37
|
+
const arg = ArgSpec.toArg(name, extType, extName);
|
|
38
|
+
const ref = ArgSpec.toSchemaRef(name, extType, extName);
|
|
39
|
+
|
|
40
|
+
const baseDest = _lodash.default.camelCase(dest !== null && dest !== void 0 ? dest : name);
|
|
41
|
+
|
|
42
|
+
const destKeypath = extType && extName ? [extType, extName, baseDest].join('.') : baseDest;
|
|
43
|
+
this.defaultValue = defaultValue;
|
|
44
|
+
this.name = name;
|
|
45
|
+
this.extType = extType;
|
|
46
|
+
this.extName = extName;
|
|
47
|
+
this.arg = arg;
|
|
48
|
+
this.dest = destKeypath;
|
|
49
|
+
this.ref = ref;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static toSchemaRef(name, extType, extName) {
|
|
53
|
+
const baseRef = ArgSpec.toSchemaBaseRef(extType, extName);
|
|
54
|
+
|
|
55
|
+
if (extType && extName) {
|
|
56
|
+
return [`${baseRef}#`, PROPERTIES, name].join('/');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return [`${baseRef}#`, PROPERTIES, SERVER_PROP_NAME, PROPERTIES, name].join('/');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
static toSchemaBaseRef(extType, extName) {
|
|
63
|
+
if (extType && extName) {
|
|
64
|
+
return `${extType}-${ArgSpec.toNormalizedExtName(extName)}.json`;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return APPIUM_CONFIG_SCHEMA_ID;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
static toArg(name, extType, extName) {
|
|
71
|
+
const properName = _lodash.default.kebabCase(name.replace(/^--?/, ''));
|
|
72
|
+
|
|
73
|
+
if (extType && extName) {
|
|
74
|
+
return [extType, _lodash.default.kebabCase(extName), properName].join('-');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return properName;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
static toNormalizedExtName(extName) {
|
|
81
|
+
return _lodash.default.kebabCase(extName);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
static extensionInfoFromRootSchemaId(schemaId) {
|
|
85
|
+
const matches = schemaId.match(SCHEMA_ID_REGEXP);
|
|
86
|
+
|
|
87
|
+
if (matches !== null && matches !== void 0 && matches.groups) {
|
|
88
|
+
const {
|
|
89
|
+
extType,
|
|
90
|
+
normalizedExtName
|
|
91
|
+
} = matches.groups;
|
|
92
|
+
return {
|
|
93
|
+
extType,
|
|
94
|
+
normalizedExtName
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return {};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
static create(name, opts) {
|
|
102
|
+
return Object.freeze(new ArgSpec(name, opts));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
toString() {
|
|
106
|
+
let str = `[ArgSpec] ${this.name} (${this.ref})`;
|
|
107
|
+
|
|
108
|
+
if (this.extType && this.extName) {
|
|
109
|
+
str += ` (ext: ${this.extType}/${this.extName})`;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return str;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
exports.ArgSpec = ArgSpec;require('source-map-support').install();
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvYXJnLXNwZWMuanMiXSwibmFtZXMiOlsiQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQiLCJTRVJWRVJfUFJPUF9OQU1FIiwiU0NIRU1BX0lEX1JFR0VYUCIsIlBST1BFUlRJRVMiLCJBcmdTcGVjIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZXh0VHlwZSIsImV4dE5hbWUiLCJkZXN0IiwiZGVmYXVsdFZhbHVlIiwiYXJnIiwidG9BcmciLCJyZWYiLCJ0b1NjaGVtYVJlZiIsImJhc2VEZXN0IiwiXyIsImNhbWVsQ2FzZSIsImRlc3RLZXlwYXRoIiwiam9pbiIsImJhc2VSZWYiLCJ0b1NjaGVtYUJhc2VSZWYiLCJ0b05vcm1hbGl6ZWRFeHROYW1lIiwicHJvcGVyTmFtZSIsImtlYmFiQ2FzZSIsInJlcGxhY2UiLCJleHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCIsInNjaGVtYUlkIiwibWF0Y2hlcyIsIm1hdGNoIiwiZ3JvdXBzIiwibm9ybWFsaXplZEV4dE5hbWUiLCJjcmVhdGUiLCJvcHRzIiwiT2JqZWN0IiwiZnJlZXplIiwidG9TdHJpbmciLCJzdHIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFNTyxNQUFNQSx1QkFBdUIsR0FBRyxhQUFoQzs7QUFPQSxNQUFNQyxnQkFBZ0IsR0FBRyxRQUF6Qjs7QUFLUCxNQUFNQyxnQkFBZ0IsR0FBRyxrREFBekI7QUFLQSxNQUFNQyxVQUFVLEdBQUcsWUFBbkI7O0FBUU8sTUFBTUMsT0FBTixDQUFjO0FBOERuQkMsRUFBQUEsV0FBVyxDQUFFQyxJQUFGLEVBQVE7QUFBQ0MsSUFBQUEsT0FBRDtBQUFVQyxJQUFBQSxPQUFWO0FBQW1CQyxJQUFBQSxJQUFuQjtBQUF5QkMsSUFBQUE7QUFBekIsTUFBeUMsRUFBakQsRUFBcUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUc5RCxVQUFNQyxHQUFHLEdBQUdQLE9BQU8sQ0FBQ1EsS0FBUixDQUFjTixJQUFkLEVB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QUYsRUFBUTJCLElBQVIsRUFBYztBQUN6QixXQUFPQyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxJQUFJL0IsT0FBSixDQUFZRSxJQUFaLEVBQWtCMkIsSUFBbEIsQ0FBZCxDQUFQO0FBQ0Q7O0FBT0RHLEVBQUFBLFFBQVEsR0FBSTtBQUNWLFFBQUlDLEdBQUcsR0FBSSxhQUFZLEtBQUsvQixJQUFLLEtBQUksS0FBS08sR0FBSSxHQUE5Qzs7QUFDQSxRQUFJLEtBQUtOLE9BQUwsSUFBZ0IsS0FBS0MsT0FBekIsRUFBa0M7QUFDaEM2QixNQUFBQSxHQUFHLElBQUssVUFBUyxLQUFLOUIsT0FBUSxJQUFHLEtBQUtDLE9BQVEsR0FBOUM7QUFDRDs7QUFDRCxXQUFPNkIsR0FBUDtBQUNEOztBQS9La0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIFRoZSBvcmlnaW5hbCBJRCBvZiB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEuXG4gKiBXZSB1c2UgdGhpcyBpbiB0aGUgQ0xJIHRvIGNvbnZlcnQgaXQgdG8gYGFyZ3BhcnNlYCBvcHRpb25zLlxuICovXG5leHBvcnQgY29uc3QgQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQgPSAnYXBwaXVtLmpzb24nO1xuXG4vKipcbiAqIFRoZSBzY2hlbWEgcHJvcCBjb250YWluaW5nIHNlcnZlci1yZWxhdGVkIG9wdGlvbnMuIEV2ZXJ5dGhpbmcgaW4gaGVyZVxuICogaXMgXCJuYXRpdmVcIiB0byBBcHBpdW0uXG4gKiBVc2VkIGJ5IHtAbGluayBmbGF0dGVuU2NoZW1hfSBmb3IgdHJhbnNmb3JtaW5nIHRoZSBzY2hlbWEgaW50byBDTEkgYXJncy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFUlZFUl9QUk9QX05BTUUgPSAnc2VydmVyJztcblxuLyoqXG4gKiBVc2VkIHRvIHBhcnNlIGV4dGVuc2lvbiBpbmZvIGZyb20gYSBzY2hlbWEgSUQuXG4gKi9cbmNvbnN0IFNDSEVNQV9JRF9SRUdFWFAgPSAvXig/PGV4dFR5cGU+Lis/KS0oPzxub3JtYWxpemVkRXh0TmFtZT4uKylcXC5qc29uJC87XG5cbi8qKlxuICogQXZvaWQgdHlwb3MgYnkgdXNpbmcgY29uc3RhbnRzIVxuICovXG5jb25zdCBQUk9QRVJUSUVTID0gJ3Byb3BlcnRpZXMnO1xuXG4vKipcbiAqIEFuIGBBcmdTcGVjYCBpcyBhIGNsYXNzIHJlcHJlc2VudGluZyBtZXRhZGF0YSBhYm91dCBhbiBhcmd1bWVudCAob3IgY29uZmlnXG4gKiBvcHRpb24pIHVzZWQgZm9yIGNyb3NzLXJlZmVyZW5jaW5nLlxuICpcbiAqIFRoaXMgY2xhc3MgaGFzIG5vIGluc3RhbmNlIG1ldGhvZHMsIGFuZCBpcyBiYXNpY2FsbHkganVzdCBhIHJlYWQtb25seSBcInN0cnVjdFwiLlxuICovXG5leHBvcnQgY2xhc3MgQXJnU3BlYyB7XG4gIC8qKlxuICAgKiBUaGUgY2Fub25pY2FsIG5hbWUgb2YgdGhlIGFyZ3VtZW50LiBDb3JyZXNwb25kcyB0byBrZXkgaW4gc2NoZW1hJ3MgYHByb3BlcnRpZXNgIHByb3AuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBuYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgYEV4dGVuc2lvblR5cGVgIG9mIHRoZSBhcmd1bWVudC4gVGhpcyB3aWxsIGJlIHNldCBpZiB0aGUgYXJnIGNhbWUgZnJvbSBhbiBleHRlbnNpb247XG4gICAqIG90aGVyd2lzZSBpdCB3aWxsIGJlIGB1bmRlZmluZWRgLlxuICAgKiBAdHlwZSB7RXh0ZW5zaW9uVHlwZXx1bmRlZmluZWR9XG4gICAqL1xuICBleHRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLCBpZiB0aGlzIGFyZ3VtZW50IGNhbWUgZnJvbSBhbiBleHRlbnNpb24uXG4gICAqXG4gICAqIE90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAgICogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9XG4gICAqL1xuICBleHROYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NoZW1hIElEIChgJGlkYCkgZm9yIHRoZSBhcmd1bWVudC4gIFRoaXMgaXMgYXV0b21hdGljYWxseSBkZXRlcm1pbmVkLCBhbmQgYW55IHVzZXItcHJvdmlkZWQgYCRpZGBzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICByZWY7XG5cbiAgLyoqXG4gICAqIFRoZSBDTEkgYXJndW1lbnQsIHNhbnMgbGVhZGluZyBkYXNoZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBhcmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGtleXBhdGggZm9yIHRoZSBhcmd1bWVudCBhZnRlciBhcmd1bWVudHMgaGF2ZSBiZWVuIHBhcnNlZC5cbiAgICpcbiAgICogVHlwaWNhbGx5IHRoaXMgaXMgY2FtZWxDYXNlZC4gIElmIHRoZSBhcmcgY2FtZSBmcm9tIGFuIGV4dGVuc2lvbiwgaXQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoXG4gICAqIGA8ZXh0VHlwZT4uPGV4dE5hbWU+LmBcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGRlc3Q7XG5cbiAgLyoqXG4gICAqIFdoYXRldmVyIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgYXJndW1lbnQgaXMsIGFzIHNwZWNpZmllZCBieSB0aGVcbiAgICogYGRlZmF1bHRgIHByb3BlcnR5IG9mIHRoZSBzY2hlbWEuXG4gICAqIEB0eXBlIHtEfVxuICAgKi9cbiAgZGVmYXVsdFZhbHVlO1xuXG4gIC8qKlxuICAgKiBCdWlsZHMgc29tZSBjb21wdXRlZCBmaWVsZHMgYW5kIGFzc2lnbnMgdGhlbSB0byB0aGUgaW5zdGFuY2UuXG4gICAqXG4gICAqIFVuZGVmaW5lZCBwcm9wZXJ0aWVzIGFyZSBub3QgYXNzaWduZWQuXG4gICAqXG4gICAqIFRoZSBfY29uc3RydWN0b3JfIGlzIHByaXZhdGUuIFVzZSB7QGxpbmsgQXJnU3BlYy5jcmVhdGV9IGluc3RlYWQuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0ZW1wbGF0ZSBEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7QXJnU3BlY09wdGlvbnM8RD59IFtvcHRzXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKG5hbWUsIHtleHRUeXBlLCBleHROYW1lLCBkZXN0LCBkZWZhdWx0VmFsdWV9ID0ge30pIHtcbiAgICAvLyB3ZSBtdXN0IG5vcm1hbGl6ZSB0aGUgZXh0ZW5zaW9uIG5hbWUgdG8gZml0IGludG8gb3VyIGNvbnZlbnRpb24gZm9yIENMSVxuICAgIC8vIGFyZ3MuXG4gICAgY29uc3QgYXJnID0gQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKTtcblxuICAgIGNvbnN0IHJlZiA9IEFyZ1NwZWMudG9TY2hlbWFSZWYobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSk7XG5cbiAgICAvLyBpZiBubyBleHBsaWNpdCBgZGVzdGAgcHJvdmlkZWQsIGp1c3QgY2FtZWxDYXNlIHRoZSBuYW1lIHRvIGF2b2lkIG5lZWRpbmdcbiAgICAvLyB0byB1c2UgYnJhY2tldCBzeW50YXggd2hlbiBhY2Nlc3NpbmcgcHJvcHMgb24gdGhlIHBhcnNlZCBhcmdzIG9iamVjdC5cbiAgICBjb25zdCBiYXNlRGVzdCA9IF8uY2FtZWxDYXNlKGRlc3QgPz8gbmFtZSk7XG5cbiAgICBjb25zdCBkZXN0S2V5cGF0aCA9XG4gICAgICBleHRUeXBlICYmIGV4dE5hbWUgPyBbZXh0VHlwZSwgZXh0TmFtZSwgYmFzZURlc3RdLmpvaW4oJy4nKSA6IGJhc2VEZXN0O1xuXG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmV4dFR5cGUgPSBleHRUeXBlO1xuICAgIHRoaXMuZXh0TmFtZSA9IGV4dE5hbWU7XG4gICAgdGhpcy5hcmcgPSBhcmc7XG4gICAgdGhpcy5kZXN0ID0gZGVzdEtleXBhdGg7XG4gICAgdGhpcy5yZWYgPSByZWY7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBzY2hlbWEgSUQgKGAkaWRgKSBmb3IgdGhlICoqYXJndW1lbnQqKiBnaXZlbiB0aGUgcGFyYW1ldGVycy5cbiAgICpcbiAgICogSWYgeW91IG5lZWQgdGhlIFwicm9vdFwiIG9yIFwiYmFzZVwiIHNjaGVtYSBJRCwgdXNlIHtAbGluayBBcmdTcGVjLnRvU2NoZW1hQmFzZVJlZn0gaW5zdGVhZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBBcmd1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHROYW1lXSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFNjaGVtYSBJRFxuICAgKi9cbiAgc3RhdGljIHRvU2NoZW1hUmVmIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgY29uc3QgYmFzZVJlZiA9IEFyZ1NwZWMudG9TY2hlbWFCYXNlUmVmKGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgIGlmIChleHRUeXBlICYmIGV4dE5hbWUpIHtcbiAgICAgIHJldHVybiBbYCR7YmFzZVJlZn0jYCwgUFJPUEVSVElFUywgbmFtZV0uam9pbignLycpO1xuICAgIH1cbiAgICByZXR1cm4gW2Ake2Jhc2VSZWZ9I2AsIFBST1BFUlRJRVMsIFNFUlZFUl9QUk9QX05BTUUsIFBST1BFUlRJRVMsIG5hbWVdLmpvaW4oJy8nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNjaGVtYSBJRCBmb3IgYW4gZXh0ZW5zaW9uIG9yIHRoZSBiYXNlIHNjaGVtYSBJRC5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV0gLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICovXG4gIHN0YXRpYyB0b1NjaGVtYUJhc2VSZWYgKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBpZiAoZXh0VHlwZSAmJiBleHROYW1lKSB7XG4gICAgICByZXR1cm4gYCR7ZXh0VHlwZX0tJHtBcmdTcGVjLnRvTm9ybWFsaXplZEV4dE5hbWUoZXh0TmFtZSl9Lmpzb25gO1xuICAgIH1cbiAgICByZXR1cm4gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB1bmlxdWUgSUQgZm9yIHRoZSBhcmd1bWVudCBnaXZlbiB0aGUgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBBcmd1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHROYW1lXSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFVuaXF1ZSBJRFxuICAgKi9cbiAgc3RhdGljIHRvQXJnIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgY29uc3QgcHJvcGVyTmFtZSA9IF8ua2ViYWJDYXNlKG5hbWUucmVwbGFjZSgvXi0tPy8sICcnKSk7XG4gICAgaWYgKGV4dFR5cGUgJiYgZXh0TmFtZSkge1xuICAgICAgcmV0dXJuIFtleHRUeXBlLCBfLmtlYmFiQ2FzZShleHROYW1lKSwgcHJvcGVyTmFtZV0uam9pbignLScpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcGVyTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGEgcmF3IGV4dGVuc2lvbiBuYW1lIChub3QgaW5jbHVkaW5nIHRoZSB0eXBlKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBOb3JtYWxpemVkIGV4dGVuc2lvbiBuYW1lXG4gICAqL1xuICBzdGF0aWMgdG9Ob3JtYWxpemVkRXh0TmFtZSAoZXh0TmFtZSkge1xuICAgIHJldHVybiBfLmtlYmFiQ2FzZShleHROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGdpdmVuIHRoZSByb290IElEIG9mIGEgc2NoZW1hIGZvciBhbiBleHRlbnNpb24gKGA8ZXh0VHlwZT4tPG5vcm1hbGl6ZWRFeHROYW1lPi5qc29uYCkgUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgZXh0ZW5zaW9uIHR5cGUgYW5kIHRoZSBfbm9ybWFsaXplZF8gZXh0ZW5zaW9uIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWFJZCAtIFJvb3Qgc2NoZW1hIElEXG4gICAqIEByZXR1cm5zIHt7ZXh0VHlwZTogRXh0ZW5zaW9uVHlwZXx1bmRlZmluZWQsIG5vcm1hbGl6ZWRFeHROYW1lOiBzdHJpbmd8dW5kZWZpbmVkfX1cbiAgICovXG4gIHN0YXRpYyBleHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCAoc2NoZW1hSWQpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gc2NoZW1hSWQubWF0Y2goU0NIRU1BX0lEX1JFR0VYUCk7XG4gICAgaWYgKG1hdGNoZXM/Lmdyb3Vwcykge1xuICAgICAgY29uc3Qge2V4dFR5cGUsIG5vcm1hbGl6ZWRFeHROYW1lfSA9IG1hdGNoZXMuZ3JvdXBzO1xuICAgICAgcmV0dXJuIHtleHRUeXBlLCBub3JtYWxpemVkRXh0TmFtZX07XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBBcmdTcGVjYFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUgYXJndW1lbnQuIENvcnJlc3BvbmRzIHRvIGEga2V5IGluIGEgc2NoZW1hJ3NcbiAgICogYHByb3BlcnRpZXNgIHByb3BlcnR5LlxuICAgKiBAcGFyYW0ge0FyZ1NwZWNPcHRpb25zfSBbb3B0c10gLSBPcHRpb25zXG4gICAqIEByZXR1cm5zIHtSZWFkb25seTxBcmdTcGVjPn1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUgKG5hbWUsIG9wdHMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShuZXcgQXJnU3BlYyhuYW1lLCBvcHRzKSk7XG4gIH1cblxuICAvKipcbiAgICogU3RyaW5nIHJlcHJlc2VudGF0aW9uLCB1c2VmdWwgZm9yIGRlYnVnZ2luZ1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgdG9TdHJpbmcgKCkge1xuICAgIGxldCBzdHIgPSBgW0FyZ1NwZWNdICR7dGhpcy5uYW1lfSAoJHt0aGlzLnJlZn0pYDtcbiAgICBpZiAodGhpcy5leHRUeXBlICYmIHRoaXMuZXh0TmFtZSkge1xuICAgICAgc3RyICs9IGAgKGV4dDogJHt0aGlzLmV4dFR5cGV9LyR7dGhpcy5leHROYW1lfSlgO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIEFyZ1NwZWMuY3JlYXRlfVxuICogQHRlbXBsYXRlIERcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFyZ1NwZWNPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2V4dE5hbWVdXG4gKiBAcHJvcGVydHkge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZXN0XVxuICogQHByb3BlcnR5IHtEfSBbZGVmYXVsdFZhbHVlXVxuICovXG4iXSwiZmlsZSI6ImxpYi9zY2hlbWEvYXJnLXNwZWMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.toParserArgs = toParserArgs;
|
|
9
|
+
|
|
10
|
+
require("source-map-support/register");
|
|
11
|
+
|
|
12
|
+
var _argparse = require("argparse");
|
|
13
|
+
|
|
14
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
15
|
+
|
|
16
|
+
var _configFile = require("../config-file");
|
|
17
|
+
|
|
18
|
+
var _schema = require("./schema");
|
|
19
|
+
|
|
20
|
+
var _cliTransformers = require("./cli-transformers");
|
|
21
|
+
|
|
22
|
+
const TYPENAMES = Object.freeze({
|
|
23
|
+
ARRAY: 'array',
|
|
24
|
+
OBJECT: 'object',
|
|
25
|
+
BOOLEAN: 'boolean',
|
|
26
|
+
INTEGER: 'integer',
|
|
27
|
+
NUMBER: 'number',
|
|
28
|
+
NULL: 'null',
|
|
29
|
+
STRING: 'string'
|
|
30
|
+
});
|
|
31
|
+
const SHORT_ARG_CUTOFF = 3;
|
|
32
|
+
|
|
33
|
+
function aliasToFlag(argSpec, alias) {
|
|
34
|
+
const {
|
|
35
|
+
extType,
|
|
36
|
+
extName,
|
|
37
|
+
name
|
|
38
|
+
} = argSpec;
|
|
39
|
+
const arg = alias !== null && alias !== void 0 ? alias : name;
|
|
40
|
+
const isShort = arg.length < SHORT_ARG_CUTOFF;
|
|
41
|
+
|
|
42
|
+
if (extType && extName) {
|
|
43
|
+
return isShort ? `--${extType}-${_lodash.default.kebabCase(extName)}-${arg}` : `--${extType}-${_lodash.default.kebabCase(extName)}-${_lodash.default.kebabCase(arg)}`;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return isShort ? `-${arg}` : `--${_lodash.default.kebabCase(arg)}`;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const screamingSnakeCase = _lodash.default.flow(_lodash.default.snakeCase, _lodash.default.toUpper);
|
|
50
|
+
|
|
51
|
+
function getSchemaValidator({
|
|
52
|
+
ref: schemaId
|
|
53
|
+
}, coerce = _lodash.default.identity) {
|
|
54
|
+
return value => {
|
|
55
|
+
const coerced = coerce(value);
|
|
56
|
+
const errors = (0, _schema.validate)(coerced, schemaId);
|
|
57
|
+
|
|
58
|
+
if (_lodash.default.isEmpty(errors)) {
|
|
59
|
+
return coerced;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
throw new _argparse.ArgumentTypeError('\n\n' + (0, _configFile.formatErrors)(errors, value, {
|
|
63
|
+
schemaId
|
|
64
|
+
}));
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function subSchemaToArgDef(subSchema, argSpec, opts = {}) {
|
|
69
|
+
var _overrides$dest;
|
|
70
|
+
|
|
71
|
+
const {
|
|
72
|
+
overrides = {}
|
|
73
|
+
} = opts;
|
|
74
|
+
let {
|
|
75
|
+
type,
|
|
76
|
+
appiumCliAliases,
|
|
77
|
+
appiumCliTransformer,
|
|
78
|
+
appiumCliDescription,
|
|
79
|
+
description,
|
|
80
|
+
enum: enumValues
|
|
81
|
+
} = subSchema;
|
|
82
|
+
const {
|
|
83
|
+
name,
|
|
84
|
+
arg,
|
|
85
|
+
dest
|
|
86
|
+
} = argSpec;
|
|
87
|
+
const aliases = [aliasToFlag(argSpec), ...(appiumCliAliases !== null && appiumCliAliases !== void 0 ? appiumCliAliases : []).map(alias => aliasToFlag(argSpec, alias))];
|
|
88
|
+
let argOpts = {
|
|
89
|
+
required: false,
|
|
90
|
+
help: appiumCliDescription !== null && appiumCliDescription !== void 0 ? appiumCliDescription : description
|
|
91
|
+
};
|
|
92
|
+
let argTypeFunction;
|
|
93
|
+
|
|
94
|
+
switch (type) {
|
|
95
|
+
case TYPENAMES.BOOLEAN:
|
|
96
|
+
{
|
|
97
|
+
argOpts.action = 'store_true';
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
case TYPENAMES.OBJECT:
|
|
102
|
+
{
|
|
103
|
+
argTypeFunction = _cliTransformers.transformers.json;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
case TYPENAMES.ARRAY:
|
|
108
|
+
{
|
|
109
|
+
argTypeFunction = _cliTransformers.transformers.csv;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
case TYPENAMES.NUMBER:
|
|
114
|
+
{
|
|
115
|
+
argTypeFunction = getSchemaValidator(argSpec, parseFloat);
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
case TYPENAMES.INTEGER:
|
|
120
|
+
{
|
|
121
|
+
argTypeFunction = getSchemaValidator(argSpec, _lodash.default.parseInt);
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
case TYPENAMES.STRING:
|
|
126
|
+
{
|
|
127
|
+
argTypeFunction = getSchemaValidator(argSpec);
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
case TYPENAMES.NULL:
|
|
132
|
+
default:
|
|
133
|
+
{
|
|
134
|
+
throw new TypeError(`Schema property "${arg}": \`${type}\` type unknown or disallowed`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (type !== TYPENAMES.BOOLEAN) {
|
|
139
|
+
argOpts.metavar = screamingSnakeCase(name);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (type !== TYPENAMES.ARRAY && type !== TYPENAMES.OBJECT && appiumCliTransformer) {
|
|
143
|
+
var _argTypeFunction;
|
|
144
|
+
|
|
145
|
+
argTypeFunction = _lodash.default.flow((_argTypeFunction = argTypeFunction) !== null && _argTypeFunction !== void 0 ? _argTypeFunction : _lodash.default.identity, _cliTransformers.transformers[appiumCliTransformer]);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (argTypeFunction) {
|
|
149
|
+
argOpts.type = argTypeFunction;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (enumValues && !_lodash.default.isEmpty(enumValues)) {
|
|
153
|
+
if (type === TYPENAMES.STRING) {
|
|
154
|
+
argOpts.choices = enumValues.map(String);
|
|
155
|
+
} else {
|
|
156
|
+
throw new TypeError(`Problem with schema for ${arg}; \`enum\` is only supported for \`type: 'string'\``);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
argOpts = _lodash.default.merge(argOpts, (_overrides$dest = overrides[dest]) !== null && _overrides$dest !== void 0 ? _overrides$dest : {});
|
|
161
|
+
return [aliases, argOpts];
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function toParserArgs(opts = {}) {
|
|
165
|
+
const flattened = (0, _schema.flattenSchema)();
|
|
166
|
+
return new Map(_lodash.default.map(flattened, ({
|
|
167
|
+
schema,
|
|
168
|
+
argSpec
|
|
169
|
+
}) => subSchemaToArgDef(schema, argSpec, opts)));
|
|
170
|
+
}require('source-map-support').install();
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zY2hlbWEvY2xpLWFyZ3MuanMiXSwibmFtZXMiOlsiVFlQRU5BTUVTIiwiT2JqZWN0IiwiZnJlZXplIiwiQVJSQVkiLCJPQkpFQ1QiLCJCT09MRUFOIiwiSU5URUdFUiIsIk5VTUJFUiIsIk5VTEwiLCJTVFJJTkciLCJTSE9SVF9BUkdfQ1VUT0ZGIiwiYWxpYXNUb0ZsYWciLCJhcmdTcGVjIiwiYWxpYXMiLCJleHRUeXBlIiwiZXh0TmFtZSIsIm5hbWUiLCJhcmciLCJpc1Nob3J0IiwibGVuZ3RoIiwiXyIsImtlYmFiQ2FzZSIsInNjcmVhbWluZ1NuYWtlQ2FzZSIsImZsb3ciLCJzbmFrZUNhc2UiLCJ0b1VwcGVyIiwiZ2V0U2NoZW1hVmFsaWRhdG9yIiwicmVmIiwic2NoZW1hSWQiLCJjb2VyY2UiLCJpZGVudGl0eSIsInZhbHVlIiwiY29lcmNlZCIsImVycm9ycyIsImlzRW1wdHkiLCJBcmd1bWVudFR5cGVFcnJvciIsInN1YlNjaGVtYVRvQXJnRGVmIiwic3ViU2NoZW1hIiwib3B0cyIsIm92ZXJyaWRlcyIsInR5cGUiLCJhcHBpdW1DbGlBbGlhc2VzIiwiYXBwaXVtQ2xpVHJhbnNmb3JtZXIiLCJhcHBpdW1DbGlEZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwiZW51bSIsImVudW1WYWx1ZXMiLCJkZXN0IiwiYWxpYXNlcyIsIm1hcCIsImFyZ09wdHMiLCJyZXF1aXJlZCIsImhlbHAiLCJhcmdUeXBlRnVuY3Rpb24iLCJhY3Rpb24iLCJ0cmFuc2Zvcm1lcnMiLCJqc29uIiwiY3N2IiwicGFyc2VGbG9hdCIsInBhcnNlSW50IiwiVHlwZUVycm9yIiwibWV0YXZhciIsImNob2ljZXMiLCJTdHJpbmciLCJtZXJnZSIsInRvUGFyc2VyQXJncyIsImZsYXR0ZW5lZCIsIk1hcCIsInNjaGVtYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFZQSxNQUFNQSxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0Ms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QUFULEdBQUQsS0FDZndCLGlCQUFpQixDQUFDZ0MsTUFBRCxFQUFTeEQsT0FBVCxFQUFrQjBCLElBQWxCLENBRG5CLENBREssQ0FBUDtBQUtEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7QXJndW1lbnRUeXBlRXJyb3J9IGZyb20gJ2FyZ3BhcnNlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge2Zvcm1hdEVycm9ycyBhcyBmb3JtYXRFcnJvcnN9IGZyb20gJy4uL2NvbmZpZy1maWxlJztcbmltcG9ydCB7ZmxhdHRlblNjaGVtYSwgdmFsaWRhdGV9IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB7dHJhbnNmb3JtZXJzfSBmcm9tICcuL2NsaS10cmFuc2Zvcm1lcnMnO1xuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGNvbmNlcm5zIGZ1bmN0aW9ucyB3aGljaCBjb252ZXJ0IHNjaGVtYSBkZWZpbml0aW9ucyB0b1xuICogYGFyZ3BhcnNlYC1jb21wYXRpYmxlIGRhdGEgc3RydWN0dXJlcywgZm9yIGRlcml2aW5nIENMSSBhcmd1bWVudHMgZnJvbSBhXG4gKiBzY2hlbWEuXG4gKi9cblxuLyoqXG4gKiBMb29rdXAgb2YgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgYHR5cGVgIGZpZWxkIGluIGEgSlNPTiBzY2hlbWEuXG4gKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgaW1wb3J0KCdqc29uLXNjaGVtYScpLkpTT05TY2hlbWE3VHlwZU5hbWU+Pn1cbiAqL1xuY29uc3QgVFlQRU5BTUVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEFSUkFZOiAnYXJyYXknLFxuICBPQkpFQ1Q6ICdvYmplY3QnLFxuICBCT09MRUFOOiAnYm9vbGVhbicsXG4gIElOVEVHRVI6ICdpbnRlZ2VyJyxcbiAgTlVNQkVSOiAnbnVtYmVyJyxcbiAgTlVMTDogJ251bGwnLFxuICBTVFJJTkc6ICdzdHJpbmcnLFxufSk7XG5cbi8qKlxuICogT3B0aW9ucyB3aXRoIGFsaWFzIGxlbmd0aHMgbGVzcyB0aGFuIHRoaXMgd2lsbCBiZSBjb25zaWRlcmVkIFwic2hvcnRcIiBmbGFncy5cbiAqL1xuY29uc3QgU0hPUlRfQVJHX0NVVE9GRiA9IDM7XG5cbi8qKlxuICogQ29udmVydCBhbiBhbGlhcyAoYGZvb2ApIHRvIGEgZmxhZyAoYC0tZm9vYCkgb3IgYSBzaG9ydCBmbGFnIChgLWZgKS5cbiAqIEBwYXJhbSB7QXJnU3BlY30gYXJnU3BlYyAtIHRoZSBhcmd1bWVudCBzcGVjaWZpY2F0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXSAtIHRoZSBhbGlhcyB0byBjb252ZXJ0IHRvIGEgZmxhZ1xuICogQHJldHVybnMge3N0cmluZ30gdGhlIGZsYWdcbiAqL1xuZnVuY3Rpb24gYWxpYXNUb0ZsYWcgKGFyZ1NwZWMsIGFsaWFzKSB7XG4gIGNvbnN0IHtleHRUeXBlLCBleHROYW1lLCBuYW1lfSA9IGFyZ1NwZWM7XG4gIGNvbnN0IGFyZyA9IGFsaWFzID8/IG5hbWU7XG4gIGNvbnN0IGlzU2hvcnQgPSBhcmcubGVuZ3RoIDwgU0hPUlRfQVJHX0NVVE9GRjtcbiAgaWYgKGV4dFR5cGUgJiYgZXh0TmFtZSkge1xuICAgIHJldHVybiBpc1Nob3J0XG4gICAgICA/IGAtLSR7ZXh0VHlwZX0tJHtfLmtlYmFiQ2FzZShleHROYW1lKX0tJHthcmd9YFxuICAgICAgOiBgLS0ke2V4dFR5cGV9LSR7Xy5rZWJhYkNhc2UoZXh0TmFtZSl9LSR7Xy5rZWJhYkNhc2UoYXJnKX1gO1xuICB9XG4gIHJldHVybiBpc1Nob3J0ID8gYC0ke2FyZ31gIDogYC0tJHtfLmtlYmFiQ2FzZShhcmcpfWA7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgdG8gU0NSRUFNSU5HX1NOQUtFX0NBU0VcbiAqL1xuY29uc3Qgc2NyZWFtaW5nU25ha2VDYXNlID0gXy5mbG93KF8uc25ha2VDYXNlLCBfLnRvVXBwZXIpO1xuXG4vKipcbiAqIEdpdmVuIHVuaXF1ZSBwcm9wZXJ0eSBuYW1lIGBuYW1lYCwgcmV0dXJuIGEgZnVuY3Rpb24gd2hpY2ggdmFsaWRhdGVzIGEgdmFsdWVcbiAqIGFnYWluc3QgYSBwcm9wZXJ0eSB3aXRoaW4gdGhlIHNjaGVtYS5cbiAqIEB0ZW1wbGF0ZSBDb2VyY2VkXG4gKiBAcGFyYW0ge0FyZ1NwZWN9IGFyZ1NwZWMgLSBBcmd1bWVudCBuYW1lXG4gKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nKSA9PiBDb2VyY2VkfSBbY29lcmNlXSAtIEZ1bmN0aW9uIHRvIGNvZXJjZSB0byBhIGRpZmZlcmVudFxuICogcHJpbWl0aXZlXG4gKiBAdG9kbyBTZWUgaWYgd2UgY2FuIHJlbW92ZSBgY29lcmNlYCBieSBhbGxvd2luZyBBanYgdG8gY29lcmNlIGluIGl0c1xuICogY29uc3RydWN0b3Igb3B0aW9uc1xuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gZ2V0U2NoZW1hVmFsaWRhdG9yICh7cmVmOiBzY2hlbWFJZH0sIGNvZXJjZSA9IF8uaWRlbnRpdHkpIHtcbiAgLyoqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAqL1xuICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgY29lcmNlZCA9IGNvZXJjZSh2YWx1ZSk7XG4gICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGUoY29lcmNlZCwgc2NoZW1hSWQpO1xuICAgIGlmIChfLmlzRW1wdHkoZXJyb3JzKSkge1xuICAgICAgcmV0dXJuIGNvZXJjZWQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBBcmd1bWVudFR5cGVFcnJvcihcbiAgICAgICdcXG5cXG4nICsgZm9ybWF0RXJyb3JzKGVycm9ycywgdmFsdWUsIHtzY2hlbWFJZH0pLFxuICAgICk7XG4gIH07XG59XG5cbi8qKlxuICogR2l2ZW4gYXJnIGBuYW1lYCwgYSBKU09OIHNjaGVtYSBgc3ViU2NoZW1hYCwgYW5kIG9wdGlvbnMsIHJldHVybiBhbiBhcmd1bWVudCBkZWZpbml0aW9uXG4gKiBhcyB1bmRlcnN0b29kIGJ5IGBhcmdwYXJzZWAuXG4gKiBAcGFyYW0ge0FwcGl1bUpTT05TY2hlbWF9IHN1YlNjaGVtYSAtIEpTT04gc2NoZW1hIGZvciB0aGUgb3B0aW9uXG4gKiBAcGFyYW0ge0FyZ1NwZWN9IGFyZ1NwZWMgLSBBcmd1bWVudCBzcGVjIHR1cGxlXG4gKiBAcGFyYW0ge1N1YlNjaGVtYVRvQXJnRGVmT3B0aW9uc30gW29wdHNdIC0gT3B0aW9uc1xuICogQHJldHVybnMge1tzdHJpbmdbXSwgaW1wb3J0KCdhcmdwYXJzZScpLkFyZ3VtZW50T3B0aW9uc119IFR1cGxlIG9mIGZsYWcgYW5kIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gc3ViU2NoZW1hVG9BcmdEZWYgKHN1YlNjaGVtYSwgYXJnU3BlYywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtvdmVycmlkZXMgPSB7fX0gPSBvcHRzO1xuICBsZXQge1xuICAgIHR5cGUsXG4gICAgYXBwaXVtQ2xpQWxpYXNlcyxcbiAgICBhcHBpdW1DbGlUcmFuc2Zvcm1lcixcbiAgICBhcHBpdW1DbGlEZXNjcmlwdGlvbixcbiAgICBkZXNjcmlwdGlvbixcbiAgICBlbnVtOiBlbnVtVmFsdWVzLFxuICB9ID0gc3ViU2NoZW1hO1xuXG4gIGNvbnN0IHtuYW1lLCBhcmcsIGRlc3R9ID0gYXJnU3BlYztcblxuICBjb25zdCBhbGlhc2VzID0gW1xuICAgIGFsaWFzVG9GbGFnKGFyZ1NwZWMpLFxuICAgIC4uLi8qKiBAdHlwZSB7c3RyaW5nW119ICovIChhcHBpdW1DbGlBbGlhc2VzID8/IFtdKS5tYXAoKGFsaWFzKSA9PlxuICAgICAgYWxpYXNUb0ZsYWcoYXJnU3BlYywgYWxpYXMpLFxuICAgICksXG4gIF07XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ2FyZ3BhcnNlJykuQXJndW1lbnRPcHRpb25zfSAqL1xuICBsZXQgYXJnT3B0cyA9IHtcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgaGVscDogYXBwaXVtQ2xpRGVzY3JpcHRpb24gPz8gZGVzY3JpcHRpb24sXG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYWxseSB3ZSB3aWxsIHByb3ZpZGUgYSBgdHlwZWAgdG8gYGFyZ3BhcnNlYCBhcyBhIGZ1bmN0aW9uIHdoaWNoXG4gICAqIHZhbGlkYXRlcyB1c2luZyBhanYgKHdoaWNoIGlzIG11Y2ggbW9yZSBmdWxsLWZlYXR1cmVkIHRoYW4gd2hhdCBgYXJncGFyc2VgXG4gICAqIGNhbiBvZmZlcikuIFRoZSBleGNlcHRpb24gaXMgYGJvb2xlYW5gLXR5cGUgb3B0aW9ucywgd2hpY2ggaGF2ZSBub1xuICAgKiBgYXJnVHlwZWAuXG4gICAqXG4gICAqIE5vdCBzdXJlIGlmIHRoaXMgdHlwZSBpcyBjb3JyZWN0LCBidXQgaXQncyBub3QgZG9pbmcgd2hhdCBJIHdhbnQuICBJIHdhbnRcbiAgICogdG8gc2F5IFwidGhpcyBpcyBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgc29tZXRoaW5nIG9mIHR5cGUgYFRgIHdoZXJlIGBUYCBpc1xuICAgKiBuZXZlciBhIGBQcm9taXNlYFwiLiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHN5bmMuXG4gICAqIEB0eXBlIHsoKHZhbHVlOiBzdHJpbmcpID0+IHVua25vd24pfHVuZGVmaW5lZH1cbiAgICovXG4gIGxldCBhcmdUeXBlRnVuY3Rpb247XG5cbiAgLy8gaGFuZGxlIHNwZWNpYWwgY2FzZXMgZm9yIHZhcmlvdXMgdHlwZXNcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgLy8gYm9vbGVhbnMgZG8gbm90IGhhdmUgYSB0eXBlIHBlciBgQXJndW1lbnRPcHRpb25zYCwganVzdCBhbiBcImFjdGlvblwiXG4gICAgY2FzZSBUWVBFTkFNRVMuQk9PTEVBTjoge1xuICAgICAgYXJnT3B0cy5hY3Rpb24gPSAnc3RvcmVfdHJ1ZSc7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIFRZUEVOQU1FUy5PQkpFQ1Q6IHtcbiAgICAgIGFyZ1R5cGVGdW5jdGlvbiA9IHRyYW5zZm9ybWVycy5qc29uO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gYXJyYXlzIGFyZSB0cmVhdGVkIGFzIENTVnMsIGJlY2F1c2UgYGFyZ3BhcnNlYCBkb2Vzbid0IGhhbmRsZSBhcnJheSBkYXRhLlxuICAgIGNhc2UgVFlQRU5BTUVTLkFSUkFZOiB7XG4gICAgICBhcmdUeXBlRnVuY3Rpb24gPSB0cmFuc2Zvcm1lcnMuY3N2O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gXCJudW1iZXJcIiB0eXBlIGlzIGNvZXJjZWQgdG8gZmxvYXQuIGBhcmdwYXJzZWAgZG9lcyB0aGlzIGZvciB1cyBpZiB3ZSB1c2UgYGZsb2F0YCB0eXBlLCBidXRcbiAgICAvLyB3ZSBkb24ndC5cbiAgICBjYXNlIFRZUEVOQU1FUy5OVU1CRVI6IHtcbiAgICAgIGFyZ1R5cGVGdW5jdGlvbiA9IGdldFNjaGVtYVZhbGlkYXRvcihhcmdTcGVjLCBwYXJzZUZsb2F0KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFwiaW50ZWdlclwiIGlzIGNvZXJjZWQgdG8gYW4gLi4gaW50ZWdlci4gIGFnYWluLCBgYXJncGFyc2VgIHdvdWxkIGRvIHRoaXMgZm9yIHVzIGlmIHdlIHVzZWQgYGludGAuXG4gICAgY2FzZSBUWVBFTkFNRVMuSU5URUdFUjoge1xuICAgICAgYXJnVHlwZUZ1bmN0aW9uID0gZ2V0U2NoZW1hVmFsaWRhdG9yKGFyZ1NwZWMsIF8ucGFyc2VJbnQpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gc3RyaW5ncyAobGlrZSBudW1iZXIgYW5kIGludGVnZXIpIGFyZSBzdWJqZWN0IHRvIGZ1cnRoZXIgdmFsaWRhdGlvblxuICAgIC8vIChlLmcuLCBtdXN0IHNhdGlzZnkgYSBtYXNrIG9yIHJlZ2V4IG9yIGV2ZW4gc29tZSBjdXN0b20gdmFsaWRhdGlvblxuICAgIC8vIGZ1bmN0aW9uKVxuICAgIGNhc2UgVFlQRU5BTUVTLlNUUklORzoge1xuICAgICAgYXJnVHlwZUZ1bmN0aW9uID0gZ2V0U2NoZW1hVmFsaWRhdG9yKGFyZ1NwZWMpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogdGhlcmUgbWF5IGJlIHNvbWUgd2F5IHRvIHJlc3RyaWN0IHRoaXMgYXQgdGhlIEFqdiBsZXZlbCAtLVxuICAgIC8vIHRoYXQgbWF5IGludm9sdmUgcGF0Y2hpbmcgdGhlIG1ldGFzY2hlbWEuXG4gICAgY2FzZSBUWVBFTkFNRVMuTlVMTDpcbiAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgZGVmYXVsdDoge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYFNjaGVtYSBwcm9wZXJ0eSBcIiR7YXJnfVwiOiBcXGAke3R5cGV9XFxgIHR5cGUgdW5rbm93biBvciBkaXNhbGxvd2VkYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gbWV0YXZhciBpcyB1c2VkIGluIGhlbHAgdGV4dC4gYGJvb2xlYW5gIGNhbm5vdCBoYXZlIGEgbWV0YXZhci0taXQgaXMgbm90XG4gIC8vIGRpc3BsYXllZC0tYW5kIGBhcmdwYXJzZWAgdGhyb3dzIGlmIHlvdSBnaXZlIGl0IG9uZS5cbiAgaWYgKHR5cGUgIT09IFRZUEVOQU1FUy5CT09MRUFOKSB7XG4gICAgYXJnT3B0cy5tZXRhdmFyID0gc2NyZWFtaW5nU25ha2VDYXNlKG5hbWUpO1xuICB9XG5cbiAgLy8gdGhlIHZhbGlkaXR5IG9mIFwiYXBwaXVtQ2xpVHJhbnNmb3JtZXJcIiBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gZGV0ZXJtaW5lZFxuICAvLyBieSBhanYgZHVyaW5nIHNjaGVtYSB2YWxpZGF0aW9uIGluIGBmaW5hbGl6ZVNjaGVtYSgpYC4gdGhlIGBhcnJheWAgJlxuICAvLyBgb2JqZWN0YCB0eXBlcyBoYXZlIGFscmVhZHkgYWRkZWQgYSBmb3JtYXR0ZXIgKHNlZSBhYm92ZSwgc28gd2UgZG9uJ3QgZG8gaXRcbiAgLy8gdHdpY2UpLlxuICBpZiAoXG4gICAgdHlwZSAhPT0gVFlQRU5BTUVTLkFSUkFZICYmXG4gICAgdHlwZSAhPT0gVFlQRU5BTUVTLk9CSkVDVCAmJlxuICAgIGFwcGl1bUNsaVRyYW5zZm9ybWVyXG4gICkge1xuICAgIGFyZ1R5cGVGdW5jdGlvbiA9IF8uZmxvdyhcbiAgICAgIGFyZ1R5cGVGdW5jdGlvbiA/PyBfLmlkZW50aXR5LFxuICAgICAgdHJhbnNmb3JtZXJzW2FwcGl1bUNsaVRyYW5zZm9ybWVyXSxcbiAgICApO1xuICB9XG5cbiAgaWYgKGFyZ1R5cGVGdW5jdGlvbikge1xuICAgIGFyZ09wdHMudHlwZSA9IGFyZ1R5cGVGdW5jdGlvbjtcbiAgfVxuXG4gIC8vIGNvbnZlcnQgSlNPTiBzY2hlbWEgYGVudW1gIHRvIGBjaG9pY2VzYC4gYGVudW1gIGNhbiBjb250YWluIGFueSBKU09OIHR5cGUsIGJ1dCBgYXJncGFyc2VgXG4gIC8vIGlzIGxpbWl0ZWQgdG8gYSBzaW5nbGUgdHlwZSBwZXIgYXJnIChJIHRoaW5rKS4gIHNvIGxldCdzIG1ha2UgZXZlcnl0aGluZyBhIHN0cmluZy5cbiAgLy8gYW5kIG1pZ2h0IGFzIHdlbGwgX3JlcXVpcmVfIHRoZSBgdHlwZTogc3RyaW5nYCB3aGlsZSB3ZSdyZSBhdCBpdC5cbiAgaWYgKGVudW1WYWx1ZXMgJiYgIV8uaXNFbXB0eShlbnVtVmFsdWVzKSkge1xuICAgIGlmICh0eXBlID09PSBUWVBFTkFNRVMuU1RSSU5HKSB7XG4gICAgICBhcmdPcHRzLmNob2ljZXMgPSBlbnVtVmFsdWVzLm1hcChTdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgUHJvYmxlbSB3aXRoIHNjaGVtYSBmb3IgJHthcmd9OyBcXGBlbnVtXFxgIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBcXGB0eXBlOiAnc3RyaW5nJ1xcYGAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIG92ZXJyaWRlcyBvdmVycmlkZSBhbnl0aGluZyB3ZSBjb21wdXRlZCBoZXJlLiAgdXN1YWxseSB0aGlzIGludm9sdmVzIFwiY3VzdG9tIHR5cGVzXCIsXG4gIC8vIHdoaWNoIGFyZSByZWFsbHkganVzdCB0cmFuc2Zvcm0gZnVuY3Rpb25zLlxuICBhcmdPcHRzID0gXy5tZXJnZShcbiAgICBhcmdPcHRzLFxuICAgIC8qKiBzaG91bGQgdGhlIG92ZXJyaWRlIGtleXMgY29ycmVzcG9uZCB0byB0aGUgcHJvcCBuYW1lIG9yIHRoZSBwcm9wIGRlc3Q/XG4gICAgICogdGhlIHByb3AgZGVzdCBpcyBjb21wdXRlZCBieSB7QGxpbmsgYWxpYXNUb0Rlc3R9LlxuICAgICAqL1xuICAgIG92ZXJyaWRlc1tkZXN0XSA/PyB7fSxcbiAgKTtcblxuICByZXR1cm4gW2FsaWFzZXMsIGFyZ09wdHNdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBmaW5hbGl6ZWQsIGZsYXR0ZW5lZCBzY2hlbWEgcmVwcmVzZW50YXRpb24gaW50b1xuICogQXJndW1lbnREZWZpbml0aW9ucyBmb3IgaGFuZG9mZiB0byBgYXJncGFyc2VgLlxuICpcbiAqIEBwYXJhbSB7VG9QYXJzZXJBcmdzT3B0aW9uc30gb3B0cyAtIE9wdGlvbnNcbiAqIEB0aHJvd3MgSWYgc2NoZW1hIGhhcyBub3QgYmVlbiBhZGRlZCB0byBhanYgKHZpYSBgZmluYWxpemVTY2hlbWEoKWApXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuLi9jbGkvYXJncycpLkFyZ3VtZW50RGVmaW5pdGlvbnN9IEEgbWFwIG9mIGFycnlhcyBvZlxuICogYWxpYXNlcyB0byBgYXJncGFyc2VgIGFyZ3VtZW50czsgZW1wdHkgaWYgbm8gc2NoZW1hIGZvdW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1BhcnNlckFyZ3MgKG9wdHMgPSB7fSkge1xuICBjb25zdCBmbGF0dGVuZWQgPSBmbGF0dGVuU2NoZW1hKCk7XG4gIHJldHVybiBuZXcgTWFwKFxuICAgIF8ubWFwKGZsYXR0ZW5lZCwgKHtzY2hlbWEsIGFyZ1NwZWN9KSA9PlxuICAgICAgc3ViU2NoZW1hVG9BcmdEZWYoc2NoZW1hLCBhcmdTcGVjLCBvcHRzKSxcbiAgICApLFxuICApO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB0b1BhcnNlckFyZ3N9XG4gKiBAdHlwZWRlZiB7U3ViU2NoZW1hVG9BcmdEZWZPcHRpb25zfSBUb1BhcnNlckFyZ3NPcHRpb25zXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgc3ViU2NoZW1hVG9BcmdEZWZ9LlxuICogQHR5cGVkZWYge09iamVjdH0gU3ViU2NoZW1hVG9BcmdEZWZPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ByZWZpeF0gLSBUaGUgcHJlZml4IHRvIHVzZSBmb3IgdGhlIGZsYWcsIGlmIGFueVxuICogQHByb3BlcnR5IHt7W2tleTogc3RyaW5nXTogaW1wb3J0KCdhcmdwYXJzZScpLkFyZ3VtZW50T3B0aW9uc319IFtvdmVycmlkZXNdIC0gQW4gb2JqZWN0IG9mIGtleS92YWx1ZSBwYWlycyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZXNcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYvZGlzdC90eXBlcycpLkZvcm1hdFZhbGlkYXRvcjxUPn0gRm9ybWF0VmFsaWRhdG9yPFQ+XG4gKi9cblxuLyoqXG4gKiBBIEpTT04gNyBzY2hlbWEgd2l0aCBvdXIgY3VzdG9tIGtleXdvcmRzLlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9rZXl3b3JkcycpLkFwcGl1bUpTT05TY2hlbWFLZXl3b3JkcyAmIGltcG9ydCgnanNvbi1zY2hlbWEnKS5KU09OU2NoZW1hN30gQXBwaXVtSlNPTlNjaGVtYVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9hcmctc3BlYycpLkFyZ1NwZWN9IEFyZ1NwZWNcbiAqL1xuIl0sImZpbGUiOiJsaWIvc2NoZW1hL2NsaS1hcmdzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|