appium 2.0.0-beta.23 → 2.0.0-beta.24

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.
@@ -26,11 +26,11 @@ describe('parser', function () {
26
26
  p = await (0, _parser.getParser)(true);
27
27
  });
28
28
  it('should accept only server and driver subcommands', function () {
29
- p.parse_args([]);
30
- p.parse_args(['server']);
31
- p.parse_args(['driver', 'list']);
32
- (() => p.parse_args(['foo'])).should.throw();
33
- (() => p.parse_args(['foo --bar'])).should.throw();
29
+ p.parseArgs([]);
30
+ p.parseArgs(['server']);
31
+ p.parseArgs(['driver', 'list']);
32
+ (() => p.parseArgs(['foo'])).should.throw();
33
+ (() => p.parseArgs(['foo --bar'])).should.throw();
34
34
  });
35
35
  });
36
36
  describe('Server Parser', function () {
@@ -39,12 +39,12 @@ describe('parser', function () {
39
39
  p = await (0, _parser.getParser)(true);
40
40
  });
41
41
  it('should return an arg parser', function () {
42
- should.exist(p.parse_args);
43
- p.parse_args([]).should.have.property('port');
42
+ should.exist(p.parseArgs);
43
+ p.parseArgs([]).should.have.property('port');
44
44
  });
45
45
  it('should default to the server subcommand', function () {
46
- p.parse_args([]).subcommand.should.eql('server');
47
- p.parse_args([]).should.eql(p.parse_args(['server']));
46
+ p.parseArgs([]).subcommand.should.eql('server');
47
+ p.parseArgs([]).should.eql(p.parseArgs(['server']));
48
48
  });
49
49
  it('should keep the raw server flags array', function () {
50
50
  should.exist(p.rawArgs);
@@ -57,27 +57,27 @@ describe('parser', function () {
57
57
  describe('invalid arguments', function () {
58
58
  it('should throw an error with unknown argument', function () {
59
59
  (() => {
60
- p.parse_args(['--apple']);
60
+ p.parseArgs(['--apple']);
61
61
  }).should.throw(/unrecognized arguments: --apple/i);
62
62
  });
63
63
  it('should throw an error for an invalid value ("hostname")', function () {
64
64
  (() => {
65
- p.parse_args(['--address', '-42']);
65
+ p.parseArgs(['--address', '-42']);
66
66
  }).should.throw(/must match format "hostname"/i);
67
67
  });
68
68
  it('should throw an error for an invalid value ("uri")', function () {
69
69
  (() => {
70
- p.parse_args(['--webhook', 'blub']);
70
+ p.parseArgs(['--webhook', 'blub']);
71
71
  }).should.throw(/must match format "uri"/i);
72
72
  });
73
73
  it('should throw an error for an invalid value (using "enum")', function () {
74
74
  (() => {
75
- p.parse_args(['--log-level', '-42']);
75
+ p.parseArgs(['--log-level', '-42']);
76
76
  }).should.throw(/must be equal to one of the allowed values/i);
77
77
  });
78
78
  it('should throw an error for incorrectly formatted arg (matching "dest")', function () {
79
79
  (() => {
80
- p.parse_args(['--loglevel', '-42']);
80
+ p.parseArgs(['--loglevel', '-42']);
81
81
  }).should.throw(/unrecognized arguments: --loglevel/i);
82
82
  });
83
83
  });
@@ -85,57 +85,57 @@ describe('parser', function () {
85
85
  let defaultCapabilities = {
86
86
  a: 'b'
87
87
  };
88
- let args = p.parse_args(['--default-capabilities', JSON.stringify(defaultCapabilities)]);
88
+ let args = p.parseArgs(['--default-capabilities', JSON.stringify(defaultCapabilities)]);
89
89
  args.defaultCapabilities.should.eql(defaultCapabilities);
90
90
  });
91
91
  it('should parse default capabilities correctly from a file', function () {
92
92
  let defaultCapabilities = {
93
93
  a: 'b'
94
94
  };
95
- let args = p.parse_args(['--default-capabilities', CAPS_FIXTURE]);
95
+ let args = p.parseArgs(['--default-capabilities', CAPS_FIXTURE]);
96
96
  args.defaultCapabilities.should.eql(defaultCapabilities);
97
97
  });
98
98
  it('should throw an error with invalid arg to default capabilities', function () {
99
99
  (() => {
100
- p.parse_args(['-dc', '42']);
100
+ p.parseArgs(['-dc', '42']);
101
101
  }).should.throw();
102
102
  (() => {
103
- p.parse_args(['-dc', 'false']);
103
+ p.parseArgs(['-dc', 'false']);
104
104
  }).should.throw();
105
105
  (() => {
106
- p.parse_args(['-dc', 'null']);
106
+ p.parseArgs(['-dc', 'null']);
107
107
  }).should.throw();
108
108
  (() => {
109
- p.parse_args(['-dc', 'does/not/exist.json']);
109
+ p.parseArgs(['-dc', 'does/not/exist.json']);
110
110
  }).should.throw();
111
111
  });
112
112
  it('should parse --allow-insecure correctly', function () {
113
- p.parse_args([]).should.have.property('allowInsecure', undefined);
114
- p.parse_args(['--allow-insecure', '']).allowInsecure.should.eql([]);
115
- p.parse_args(['--allow-insecure', 'foo']).allowInsecure.should.eql(['foo']);
116
- p.parse_args(['--allow-insecure', 'foo,bar']).allowInsecure.should.eql(['foo', 'bar']);
117
- p.parse_args(['--allow-insecure', 'foo ,bar']).allowInsecure.should.eql(['foo', 'bar']);
113
+ p.parseArgs([]).should.not.have.property('allowInsecure');
114
+ p.parseArgs(['--allow-insecure', '']).allowInsecure.should.eql([]);
115
+ p.parseArgs(['--allow-insecure', 'foo']).allowInsecure.should.eql(['foo']);
116
+ p.parseArgs(['--allow-insecure', 'foo,bar']).allowInsecure.should.eql(['foo', 'bar']);
117
+ p.parseArgs(['--allow-insecure', 'foo ,bar']).allowInsecure.should.eql(['foo', 'bar']);
118
118
  });
119
119
  it('should parse --deny-insecure correctly', function () {
120
- p.parse_args([]).should.have.property('denyInsecure', undefined);
121
- p.parse_args(['--deny-insecure', '']).denyInsecure.should.eql([]);
122
- p.parse_args(['--deny-insecure', 'foo']).denyInsecure.should.eql(['foo']);
123
- p.parse_args(['--deny-insecure', 'foo,bar']).denyInsecure.should.eql(['foo', 'bar']);
124
- p.parse_args(['--deny-insecure', 'foo ,bar']).denyInsecure.should.eql(['foo', 'bar']);
120
+ p.parseArgs([]).should.not.have.property('denyInsecure');
121
+ p.parseArgs(['--deny-insecure', '']).denyInsecure.should.eql([]);
122
+ p.parseArgs(['--deny-insecure', 'foo']).denyInsecure.should.eql(['foo']);
123
+ p.parseArgs(['--deny-insecure', 'foo,bar']).denyInsecure.should.eql(['foo', 'bar']);
124
+ p.parseArgs(['--deny-insecure', 'foo ,bar']).denyInsecure.should.eql(['foo', 'bar']);
125
125
  });
126
126
  it('should parse --allow-insecure & --deny-insecure from files', function () {
127
- const parsed = p.parse_args(['--allow-insecure', ALLOW_FIXTURE, '--deny-insecure', DENY_FIXTURE]);
127
+ const parsed = p.parseArgs(['--allow-insecure', ALLOW_FIXTURE, '--deny-insecure', DENY_FIXTURE]);
128
128
  parsed.allowInsecure.should.eql(['feature1', 'feature2', 'feature3']);
129
129
  parsed.denyInsecure.should.eql(['nofeature1', 'nofeature2', 'nofeature3']);
130
130
  });
131
131
  it('should allow a string for --use-drivers', function () {
132
- p.parse_args(['--use-drivers', 'fake']).useDrivers.should.eql(['fake']);
132
+ p.parseArgs(['--use-drivers', 'fake']).useDrivers.should.eql(['fake']);
133
133
  });
134
134
  it('should allow multiple --use-drivers', function () {
135
- p.parse_args(['--use-drivers', 'fake,phony']).useDrivers.should.eql(['fake', 'phony']);
135
+ p.parseArgs(['--use-drivers', 'fake,phony']).useDrivers.should.eql(['fake', 'phony']);
136
136
  });
137
137
  it('should respect --relaxed-security', function () {
138
- p.parse_args(['--relaxed-security']).should.have.property('relaxedSecurityEnabled', true);
138
+ p.parseArgs(['--relaxed-security']).should.have.property('relaxedSecurityEnabled', true);
139
139
  });
140
140
  });
141
141
  describe('extension arguments', function () {
@@ -155,12 +155,17 @@ describe('parser', function () {
155
155
  sillyWebServerHost: 'hey'
156
156
  }
157
157
  };
158
- const args = p.parse_args(['--driver-fake-silly-web-server-port', fakeDriverArgs.fake.sillyWebServerPort, '--driver-fake-silly-web-server-host', fakeDriverArgs.fake.sillyWebServerHost]);
158
+ const args = p.parseArgs(['--driver-fake-silly-web-server-port', fakeDriverArgs.fake.sillyWebServerPort, '--driver-fake-silly-web-server-host', fakeDriverArgs.fake.sillyWebServerHost]);
159
159
  args.driver.fake.should.eql(config.driver.fake);
160
160
  });
161
+ it('should not yet apply defaults', function () {
162
+ const args = p.parseArgs([]);
163
+ args.should.not.have.property('driver');
164
+ });
161
165
  it('should nicely handle extensions w/ dashes in them', async function () {
162
166
  schema.resetSchema();
163
167
  schema.registerSchema('plugin', 'crypto-fiend', {
168
+ type: 'object',
164
169
  properties: {
165
170
  elite: {
166
171
  type: 'boolean'
@@ -169,29 +174,29 @@ describe('parser', function () {
169
174
  });
170
175
  schema.finalizeSchema();
171
176
  p = await (0, _parser.getParser)(true);
172
- const args = p.parse_args(['--plugin-crypto-fiend-elite']);
177
+ const args = p.parseArgs(['--plugin-crypto-fiend-elite']);
173
178
  args.should.have.nested.property('plugin.crypto-fiend.elite', true);
174
179
  });
175
180
  describe('when user supplies invalid args', function () {
176
181
  it('should error out', function () {
177
- (() => p.parse_args(['--driver-fake-silly-web-server-port', 'foo'])).should.throw(/must be integer/i);
182
+ (() => p.parseArgs(['--driver-fake-silly-web-server-port', 'foo'])).should.throw(/must be integer/i);
178
183
  });
179
184
  });
180
185
  it('should not support --driver-args', function () {
181
- (() => p.parse_args(['--driver-args', '/some/file.json'])).should.throw(/unrecognized arguments/i);
186
+ (() => p.parseArgs(['--driver-args', '/some/file.json'])).should.throw(/unrecognized arguments/i);
182
187
  });
183
188
  it('should not support --plugin-args', function () {
184
- (() => p.parse_args(['--plugin-args', '/some/file.json'])).should.throw(/unrecognized arguments/i);
189
+ (() => p.parseArgs(['--plugin-args', '/some/file.json'])).should.throw(/unrecognized arguments/i);
185
190
  });
186
191
  });
187
192
  });
188
193
  describe('Driver Parser', function () {
189
194
  it('should not allow random sub-subcommands', function () {
190
- (() => p.parse_args(['driver', 'foo'])).should.throw();
195
+ (() => p.parseArgs(['driver', 'foo'])).should.throw();
191
196
  });
192
197
  describe('list', function () {
193
198
  it('should allow an empty argument list', function () {
194
- const args = p.parse_args(['driver', 'list']);
199
+ const args = p.parseArgs(['driver', 'list']);
195
200
  args.subcommand.should.eql('driver');
196
201
  args.driverCommand.should.eql('list');
197
202
  args.showInstalled.should.eql(false);
@@ -199,24 +204,24 @@ describe('parser', function () {
199
204
  args.json.should.eql(false);
200
205
  });
201
206
  it('should allow json format', function () {
202
- const args = p.parse_args(['driver', 'list', '--json']);
207
+ const args = p.parseArgs(['driver', 'list', '--json']);
203
208
  args.json.should.eql(true);
204
209
  });
205
210
  it('should allow --installed', function () {
206
- const args = p.parse_args(['driver', 'list', '--installed']);
211
+ const args = p.parseArgs(['driver', 'list', '--installed']);
207
212
  args.showInstalled.should.eql(true);
208
213
  });
209
214
  it('should allow --updates', function () {
210
- const args = p.parse_args(['driver', 'list', '--updates']);
215
+ const args = p.parseArgs(['driver', 'list', '--updates']);
211
216
  args.showUpdates.should.eql(true);
212
217
  });
213
218
  });
214
219
  describe('install', function () {
215
220
  it('should not allow an empty argument list', function () {
216
- (() => p.parse_args(['driver', 'install'])).should.throw();
221
+ (() => p.parseArgs(['driver', 'install'])).should.throw();
217
222
  });
218
223
  it('should take a driver name to install', function () {
219
- const args = p.parse_args(['driver', 'install', 'foobar']);
224
+ const args = p.parseArgs(['driver', 'install', 'foobar']);
220
225
  args.subcommand.should.eql('driver');
221
226
  args.driverCommand.should.eql('install');
222
227
  args.driver.should.eql('foobar');
@@ -224,60 +229,60 @@ describe('parser', function () {
224
229
  args.json.should.eql(false);
225
230
  });
226
231
  it('should allow json format', function () {
227
- const args = p.parse_args(['driver', 'install', 'foobar', '--json']);
232
+ const args = p.parseArgs(['driver', 'install', 'foobar', '--json']);
228
233
  args.json.should.eql(true);
229
234
  });
230
235
  it('should allow --source', function () {
231
236
  for (const source of _extensionConfig.INSTALL_TYPES) {
232
- const args = p.parse_args(['driver', 'install', 'foobar', '--source', source]);
237
+ const args = p.parseArgs(['driver', 'install', 'foobar', '--source', source]);
233
238
  args.installType.should.eql(source);
234
239
  }
235
240
  });
236
241
  it('should not allow unknown --source', function () {
237
- (() => p.parse_args(['driver', 'install', 'fobar', '--source', 'blah'])).should.throw();
242
+ (() => p.parseArgs(['driver', 'install', 'fobar', '--source', 'blah'])).should.throw();
238
243
  });
239
244
  });
240
245
  describe('uninstall', function () {
241
246
  it('should not allow an empty argument list', function () {
242
- (() => p.parse_args(['driver', 'uninstall'])).should.throw();
247
+ (() => p.parseArgs(['driver', 'uninstall'])).should.throw();
243
248
  });
244
249
  it('should take a driver name to uninstall', function () {
245
- const args = p.parse_args(['driver', 'uninstall', 'foobar']);
250
+ const args = p.parseArgs(['driver', 'uninstall', 'foobar']);
246
251
  args.subcommand.should.eql('driver');
247
252
  args.driverCommand.should.eql('uninstall');
248
253
  args.driver.should.eql('foobar');
249
254
  args.json.should.eql(false);
250
255
  });
251
256
  it('should allow json format', function () {
252
- const args = p.parse_args(['driver', 'uninstall', 'foobar', '--json']);
257
+ const args = p.parseArgs(['driver', 'uninstall', 'foobar', '--json']);
253
258
  args.json.should.eql(true);
254
259
  });
255
260
  });
256
261
  describe('update', function () {
257
262
  it('should not allow an empty argument list', function () {
258
- (() => p.parse_args(['driver', 'update'])).should.throw();
263
+ (() => p.parseArgs(['driver', 'update'])).should.throw();
259
264
  });
260
265
  it('should take a driver name to update', function () {
261
- const args = p.parse_args(['driver', 'update', 'foobar']);
266
+ const args = p.parseArgs(['driver', 'update', 'foobar']);
262
267
  args.subcommand.should.eql('driver');
263
268
  args.driverCommand.should.eql('update');
264
269
  args.driver.should.eql('foobar');
265
270
  args.json.should.eql(false);
266
271
  });
267
272
  it('should allow json format', function () {
268
- const args = p.parse_args(['driver', 'update', 'foobar', '--json']);
273
+ const args = p.parseArgs(['driver', 'update', 'foobar', '--json']);
269
274
  args.json.should.eql(true);
270
275
  });
271
276
  });
272
277
  describe('run', function () {
273
278
  it('should not allow an empty driver argument list', function () {
274
- (() => p.parse_args(['driver', 'run'])).should.throw();
279
+ (() => p.parseArgs(['driver', 'run'])).should.throw();
275
280
  });
276
281
  it('should not allow no driver scriptName', function () {
277
- (() => p.parse_args(['driver', 'run', 'foo'])).should.throw();
282
+ (() => p.parseArgs(['driver', 'run', 'foo'])).should.throw();
278
283
  });
279
284
  it('should take a driverName and scriptName to run', function () {
280
- const args = p.parse_args(['driver', 'run', 'foo', 'bar']);
285
+ const args = p.parseArgs(['driver', 'run', 'foo', 'bar']);
281
286
  args.subcommand.should.eql('driver');
282
287
  args.driverCommand.should.eql('run');
283
288
  args.driver.should.eql('foo');
@@ -285,17 +290,17 @@ describe('parser', function () {
285
290
  args.json.should.eql(false);
286
291
  });
287
292
  it('should allow json format for driver', function () {
288
- const args = p.parse_args(['driver', 'run', 'foo', 'bar', '--json']);
293
+ const args = p.parseArgs(['driver', 'run', 'foo', 'bar', '--json']);
289
294
  args.json.should.eql(true);
290
295
  });
291
296
  it('should not allow an empty plugin argument list', function () {
292
- (() => p.parse_args(['plugin', 'run'])).should.throw();
297
+ (() => p.parseArgs(['plugin', 'run'])).should.throw();
293
298
  });
294
299
  it('should not allow no plugin scriptName', function () {
295
- (() => p.parse_args(['plugin', 'run', 'foo'])).should.throw();
300
+ (() => p.parseArgs(['plugin', 'run', 'foo'])).should.throw();
296
301
  });
297
302
  it('should take a pluginName and scriptName to run', function () {
298
- const args = p.parse_args(['plugin', 'run', 'foo', 'bar']);
303
+ const args = p.parseArgs(['plugin', 'run', 'foo', 'bar']);
299
304
  args.subcommand.should.eql('plugin');
300
305
  args.pluginCommand.should.eql('run');
301
306
  args.plugin.should.eql('foo');
@@ -303,7 +308,7 @@ describe('parser', function () {
303
308
  args.json.should.eql(false);
304
309
  });
305
310
  it('should allow json format for plugin', function () {
306
- const args = p.parse_args(['plugin', 'run', 'foo', 'bar', '--json']);
311
+ const args = p.parseArgs(['plugin', 'run', 'foo', 'bar', '--json']);
307
312
  args.json.should.eql(true);
308
313
  });
309
314
  });
@@ -311,4 +316,4 @@ describe('parser', function () {
311
316
  });require('source-map-support').install();
312
317
 
313
318
 
314
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvcGFyc2VyLXNwZWNzLmpzIl0sIm5hbWVzIjpbIkFMTE9XX0ZJWFRVUkUiLCJERU5ZX0ZJWFRVUkUiLCJDQVBTX0ZJWFRVUkUiLCJkZXNjcmliZSIsInAiLCJiZWZvcmVFYWNoIiwiaXQiLCJwYXJzZV9hcmdzIiwic2hvdWxkIiwidGhyb3ciLCJleGlzdCIsImhhdmUiLCJwcm9wZXJ0eSIsInN1YmNvbW1hbmQiLCJlcWwiLCJyYXdBcmdzIiwiYXJnIiwiZGVmYXVsdENhcGFiaWxpdGllcyIsImEiLCJhcmdzIiwiSlNPTiIsInN0cmluZ2lmeSIsInVuZGVmaW5lZCIsImFsbG93SW5zZWN1cmUiLCJkZW55SW5zZWN1cmUiLCJwYXJzZWQiLCJ1c2VEcml2ZXJzIiwic2NoZW1hIiwicmVzZXRTY2hlbWEiLCJyZWdpc3RlclNjaGVtYSIsInJlcXVpcmUiLCJkZWZhdWx0IiwiZmluYWxpemVTY2hlbWEiLCJjb25maWciLCJmYWtlRHJpdmVyQXJncyIsImZha2UiLCJzaWxseVdlYlNlcnZlclBvcnQiLCJzaWxseVdlYlNlcnZlckhvc3QiLCJkcml2ZXIiLCJwcm9wZXJ0aWVzIiwiZWxpdGUiLCJ0eXBlIiwibmVzdGVkIiwiZHJpdmVyQ29tbWFuZCIsInNob3dJbnN0YWxsZWQiLCJzaG93VXBkYXRlcyIsImpzb24iLCJub3QiLCJpbnN0YWxsVHlwZSIsInNvdXJjZSIsIklOU1RBTExfVFlQRVMiLCJzY3JpcHROYW1lIiwicGx1Z2luQ29tbWFuZCIsInBsdWdpbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFHQSxNQUFNQSxhQUFhLEdBQUcsNkJBQWUsZ0JBQWYsQ0FBdEI7QUFDQSxNQUFNQyxZQUFZLEdBQUcsNkJBQWUsZUFBZixDQUFyQjtBQUNBLE1BQU1DLFlBQVksR0FBRyw2QkFBZSxXQUFmLENBQXJCO0FBRUFDLFFBQVEsQ0FBQyxRQUFELEVBQVcsWUFBWTtBQUM3QixNQUFJQyxDQUFKO0FBRUFELEVB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bkIsQ0FBdUIsS0FBdkI7QUFDQUssUUFBQUEsSUFBSSxDQUFDZ0MsVUFBTCxDQUFnQjNDLE1BQWhCLENBQXVCTSxHQUF2QixDQUEyQixLQUEzQjtBQUNBSyxRQUFBQSxJQUFJLENBQUMyQixJQUFMLENBQVV0QyxNQUFWLENBQWlCTSxHQUFqQixDQUFxQixLQUFyQjtBQUNELE9BUEMsQ0FBRjtBQVFBUixNQUFBQSxFQUFFLENBQUMscUNBQUQsRUFBd0MsWUFBWTtBQUNwRCxjQUFNYSxJQUFJLEdBQUdmLENBQUMsQ0FBQ0csVUFBRixDQUFhLENBQUMsUUFBRCxFQUFXLEtBQVgsRUFBa0IsS0FBbEIsRUFBeUIsS0FBekIsRUFBZ0MsUUFBaEMsQ0FBYixDQUFiO0FBQ0FZLFFBQUFBLElBQUksQ0FBQzJCLElBQUwsQ0FBVXRDLE1BQVYsQ0FBaUJNLEdBQWpCLENBQXFCLElBQXJCO0FBQ0QsT0FIQyxDQUFGO0FBSUQsS0FyQ08sQ0FBUjtBQXNDRCxHQTFITyxDQUFSO0FBMkhELENBN1NPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bW9jaGFcblxuaW1wb3J0IHsgZ2V0UGFyc2VyIH0gZnJvbSAnLi4vbGliL2NsaS9wYXJzZXInO1xuaW1wb3J0IHsgSU5TVEFMTF9UWVBFUyB9IGZyb20gJy4uL2xpYi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCAqIGFzIHNjaGVtYSBmcm9tICcuLi9saWIvc2NoZW1hL3NjaGVtYSc7XG5pbXBvcnQgeyByZWFkQ29uZmlnRmlsZSB9IGZyb20gJy4uL2xpYi9jb25maWctZmlsZSc7XG5pbXBvcnQgeyByZXNvbHZlRml4dHVyZSB9IGZyb20gJy4vaGVscGVycyc7XG5cbi8vIHRoZXNlIHBhdGhzIHNob3VsZCBub3QgbWFrZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuY29uc3QgQUxMT1dfRklYVFVSRSA9IHJlc29sdmVGaXh0dXJlKCdhbGxvdy1mZWF0LnR4dCcpO1xuY29uc3QgREVOWV9GSVhUVVJFID0gcmVzb2x2ZUZpeHR1cmUoJ2RlbnktZmVhdC50eHQnKTtcbmNvbnN0IENBUFNfRklYVFVSRSA9IHJlc29sdmVGaXh0dXJlKCdjYXBzLmpzb24nKTtcblxuZGVzY3JpYmUoJ3BhcnNlcicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHA7XG5cbiAgZGVzY3JpYmUoJ01haW4gUGFyc2VyJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgcCA9IGF3YWl0IGdldFBhcnNlcih0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IG9ubHkgc2VydmVyIGFuZCBkcml2ZXIgc3ViY29tbWFuZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBwLnBhcnNlX2FyZ3MoW10pO1xuICAgICAgcC5wYXJzZV9hcmdzKFsnc2VydmVyJ10pO1xuICAgICAgcC5wYXJzZV9hcmdzKFsnZHJpdmVyJywgJ2xpc3QnXSk7XG4gICAgICAoKCkgPT4gcC5wYXJzZV9hcmdzKFsnZm9vJ10pKS5zaG91bGQudGhyb3coKTtcbiAgICAgICgoKSA9PiBwLnBhcnNlX2FyZ3MoWydmb28gLS1iYXInXSkpLnNob3VsZC50aHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2VydmVyIFBhcnNlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnQXBwaXVtIGFyZ3VtZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBwID0gYXdhaXQgZ2V0UGFyc2VyKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFyZyBwYXJzZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNob3VsZC5leGlzdChwLnBhcnNlX2FyZ3MpO1xuICAgICAgICBwLnBhcnNlX2FyZ3MoW10pLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwb3J0Jyk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgZGVmYXVsdCB0byB0aGUgc2VydmVyIHN1YmNvbW1hbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHAucGFyc2VfYXJncyhbXSkuc3ViY29tbWFuZC5zaG91bGQuZXFsKCdzZXJ2ZXInKTtcbiAgICAgICAgcC5wYXJzZV9hcmdzKFtdKS5zaG91bGQuZXFsKHAucGFyc2VfYXJncyhbJ3NlcnZlciddKSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQga2VlcCB0aGUgcmF3IHNlcnZlciBmbGFncyBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHAucmF3QXJncyk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgaGF2ZSBoZWxwIGZvciBldmVyeSBhcmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAobGV0IGFyZyBvZiBwLnJhd0FyZ3MpIHtcbiAgICAgICAgICBhcmdbMV0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2hlbHAnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgaG93IGJlc3QgdG8gc3VwcHJlc3MgY29sb3IgaW4gZXJyb3IgbWVzc2FnZVxuICAgICAgZGVzY3JpYmUoJ2ludmFsaWQgYXJndW1lbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdpdGggdW5rbm93biBhcmd1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAoKCkgPT4ge3AucGFyc2VfYXJncyhbJy0tYXBwbGUnXSk7fSkuc2hvdWxkLnRocm93KC91bnJlY29nbml6ZWQgYXJndW1lbnRzOiAtLWFwcGxlL2kpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBhbiBpbnZhbGlkIHZhbHVlIChcImhvc3RuYW1lXCIpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiB7cC5wYXJzZV9hcmdzKFsnLS1hZGRyZXNzJywgJy00MiddKTt9KS5zaG91bGQudGhyb3coL211c3QgbWF0Y2ggZm9ybWF0IFwiaG9zdG5hbWVcIi9pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgYW4gaW52YWxpZCB2YWx1ZSAoXCJ1cmlcIiknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IHtwLnBhcnNlX2FyZ3MoWyctLXdlYmhvb2snLCAnYmx1YiddKTt9KS5zaG91bGQudGhyb3coL211c3QgbWF0Y2ggZm9ybWF0IFwidXJpXCIvaSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIGFuIGludmFsaWQgdmFsdWUgKHVzaW5nIFwiZW51bVwiKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAoKCkgPT4ge3AucGFyc2VfYXJncyhbJy0tbG9nLWxldmVsJywgJy00MiddKTt9KS5zaG91bGQudGhyb3coL211c3QgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlcy9pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgaW5jb3JyZWN0bHkgZm9ybWF0dGVkIGFyZyAobWF0Y2hpbmcgXCJkZXN0XCIpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiB7cC5wYXJzZV9hcmdzKFsnLS1sb2dsZXZlbCcsICctNDInXSk7fSkuc2hvdWxkLnRocm93KC91bnJlY29nbml6ZWQgYXJndW1lbnRzOiAtLWxvZ2xldmVsL2kpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBhcnNlIGRlZmF1bHQgY2FwYWJpbGl0aWVzIGNvcnJlY3RseSBmcm9tIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgZGVmYXVsdENhcGFiaWxpdGllcyA9IHthOiAnYid9O1xuICAgICAgICBsZXQgYXJncyA9IHAucGFyc2VfYXJncyhbJy0tZGVmYXVsdC1jYXBhYmlsaXRpZXMnLCBKU09OLnN0cmluZ2lmeShkZWZhdWx0Q2FwYWJpbGl0aWVzKV0pO1xuICAgICAgICBhcmdzLmRlZmF1bHRDYXBhYmlsaXRpZXMuc2hvdWxkLmVxbChkZWZhdWx0Q2FwYWJpbGl0aWVzKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBhcnNlIGRlZmF1bHQgY2FwYWJpbGl0aWVzIGNvcnJlY3RseSBmcm9tIGEgZmlsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRDYXBhYmlsaXRpZXMgPSB7YTogJ2InfTtcbiAgICAgICAgbGV0IGFyZ3MgPSBwLnBhcnNlX2FyZ3MoWyctLWRlZmF1bHQtY2FwYWJpbGl0aWVzJywgQ0FQU19GSVhUVVJFXSk7XG4gICAgICAgIGFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcy5zaG91bGQuZXFsKGRlZmF1bHRDYXBhYmlsaXRpZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2l0aCBpbnZhbGlkIGFyZyB0byBkZWZhdWx0IGNhcGFiaWxpdGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHtwLnBhcnNlX2FyZ3MoWyctZGMnLCAnNDInXSk7fSkuc2hvdWxkLnRocm93KCk7XG4gICAgICAgICgoKSA9PiB7cC5wYXJzZV9hcmdzKFsnLWRjJywgJ2ZhbHNlJ10pO30pLnNob3VsZC50aHJvdygpO1xuICAgICAgICAoKCkgPT4ge3AucGFyc2VfYXJncyhbJy1kYycsICdudWxsJ10pO30pLnNob3VsZC50aHJvdygpO1xuICAgICAgICAoKCkgPT4ge3AucGFyc2VfYXJncyhbJy1kYycsICdkb2VzL25vdC9leGlzdC5qc29uJ10pO30pLnNob3VsZC50aHJvdygpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcGFyc2UgLS1hbGxvdy1pbnNlY3VyZSBjb3JyZWN0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHAucGFyc2VfYXJncyhbXSkuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2FsbG93SW5zZWN1cmUnLCB1bmRlZmluZWQpO1xuICAgICAgICBwLnBhcnNlX2FyZ3MoWyctLWFsbG93LWluc2VjdXJlJywgJyddKS5hbGxvd0luc2VjdXJlLnNob3VsZC5lcWwoW10pO1xuICAgICAgICBwLnBhcnNlX2FyZ3MoWyctLWFsbG93LWluc2VjdXJlJywgJ2ZvbyddKS5hbGxvd0luc2VjdXJlLnNob3VsZC5lcWwoWydmb28nXSk7XG4gICAgICAgIHAucGFyc2VfYXJncyhbJy0tYWxsb3ctaW5zZWN1cmUnLCAnZm9vLGJhciddKS5hbGxvd0luc2VjdXJlLnNob3VsZC5lcWwoWydmb28nLCAnYmFyJ10pO1xuICAgICAgICBwLnBhcnNlX2FyZ3MoWyctLWFsbG93LWluc2VjdXJlJywgJ2ZvbyAsYmFyJ10pLmFsbG93SW5zZWN1cmUuc2hvdWxkLmVxbChbJ2ZvbycsICdiYXInXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXJzZSAtLWRlbnktaW5zZWN1cmUgY29ycmVjdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBwLnBhcnNlX2FyZ3MoW10pLnNob3VsZC5oYXZlLnByb3BlcnR5KCdkZW55SW5zZWN1cmUnLCB1bmRlZmluZWQpO1xuICAgICAgICBwLnBhcnNlX2FyZ3MoWyctLWRlbnktaW5zZWN1cmUnLCAnJ10pLmRlbnlJbnNlY3VyZS5zaG91bGQuZXFsKFtdKTtcbiAgICAgICAgcC5wYXJzZV9hcmdzKFsnLS1kZW55LWluc2VjdXJlJywgJ2ZvbyddKS5kZW55SW5zZWN1cmUuc2hvdWxkLmVxbChbJ2ZvbyddKTtcbiAgICAgICAgcC5wYXJzZV9hcmdzKFsnLS1kZW55LWluc2VjdXJlJywgJ2ZvbyxiYXInXSkuZGVueUluc2VjdXJlLnNob3VsZC5lcWwoWydmb28nLCAnYmFyJ10pO1xuICAgICAgICBwLnBhcnNlX2FyZ3MoWyctLWRlbnktaW5zZWN1cmUnLCAnZm9vICxiYXInXSkuZGVueUluc2VjdXJlLnNob3VsZC5lcWwoWydmb28nLCAnYmFyJ10pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcGFyc2UgLS1hbGxvdy1pbnNlY3VyZSAmIC0tZGVueS1pbnNlY3VyZSBmcm9tIGZpbGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwLnBhcnNlX2FyZ3MoW1xuICAgICAgICAgICctLWFsbG93LWluc2VjdXJlJywgQUxMT1dfRklYVFVSRSwgJy0tZGVueS1pbnNlY3VyZScsIERFTllfRklYVFVSRVxuICAgICAgICBdKTtcbiAgICAgICAgcGFyc2VkLmFsbG93SW5zZWN1cmUuc2hvdWxkLmVxbChbJ2ZlYXR1cmUxJywgJ2ZlYXR1cmUyJywgJ2ZlYXR1cmUzJ10pO1xuICAgICAgICBwYXJzZWQuZGVueUluc2VjdXJlLnNob3VsZC5lcWwoWydub2ZlYXR1cmUxJywgJ25vZmVhdHVyZTInLCAnbm9mZWF0dXJlMyddKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGFsbG93IGEgc3RyaW5nIGZvciAtLXVzZS1kcml2ZXJzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBwLnBhcnNlX2FyZ3MoWyctLXVzZS1kcml2ZXJzJywgJ2Zha2UnXSkudXNlRHJpdmVycy5zaG91bGQuZXFsKFsnZmFrZSddKTtcbiAgICAgIH0pO1xuXG5cbiAgICAgIGl0KCdzaG91bGQgYWxsb3cgbXVsdGlwbGUgLS11c2UtZHJpdmVycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcC5wYXJzZV9hcmdzKFsnLS11c2UtZHJpdmVycycsICdmYWtlLHBob255J10pLnVzZURyaXZlcnMuc2hvdWxkLmVxbChbJ2Zha2UnLCAncGhvbnknXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXNwZWN0IC0tcmVsYXhlZC1zZWN1cml0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcC5wYXJzZV9hcmdzKFsnLS1yZWxheGVkLXNlY3VyaXR5J10pLnNob3VsZC5oYXZlLnByb3BlcnR5KCdyZWxheGVkU2VjdXJpdHlFbmFibGVkJywgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdleHRlbnNpb24gYXJndW1lbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjaGVtYS5yZXNldFNjaGVtYSgpO1xuICAgICAgICAvLyB3ZSBoYXZlIHRvIHJlcXVpcmUoKSBoZXJlIGJlY2F1c2UgYmFiZWwgd2lsbCBub3QgY29tcGlsZSBzdHVmZiBpbiBub2RlX21vZHVsZXNcbiAgICAgICAgLy8gKGV2ZW4gaWYgaXQncyBpbiB0aGUgbW9ub3JlcG87IHRoZXJlIG1heSBiZSBhIHdheSBhcm91bmQgdGhpcylcbiAgICAgICAgLy8gYW55d2F5LCBpZiB3ZSBkbyB0aGF0LCB3ZSBuZWVkIHRvIHVzZSB0aGUgYGRlZmF1bHRgIHByb3AuXG4gICAgICAgIHNjaGVtYS5yZWdpc3RlclNjaGVtYSgnZHJpdmVyJywgJ2Zha2UnLCByZXF1aXJlKCdAYXBwaXVtL2Zha2UtZHJpdmVyL2J1aWxkL2xpYi9mYWtlLWRyaXZlci1zY2hlbWEnKS5kZWZhdWx0KTtcbiAgICAgICAgc2NoZW1hLmZpbmFsaXplU2NoZW1hKCk7XG4gICAgICAgIHAgPSBhd2FpdCBnZXRQYXJzZXIodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXJzZSBkcml2ZXIgYXJncyBjb3JyZWN0bHkgZnJvbSBhIHN0cmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gdGhpcyB0ZXN0IHJlYWRzIHRoZSBhY3R1YWwgc2NoZW1hIHByb3ZpZGVkIGJ5IHRoZSBmYWtlIGRyaXZlci5cbiAgICAgICAgLy8gdGhlIGNvbmZpZyBmaWxlIGNvcnJlc3BvbmRzIHRvIHRoYXQgc2NoZW1hLlxuICAgICAgICAvLyB0aGUgY29tbWFuZC1saW5lIGZsYWdzIGFyZSBkZXJpdmVkIGFsc28gZnJvbSB0aGUgc2NoZW1hLlxuICAgICAgICAvLyB0aGUgcmVzdWx0IHNob3VsZCBiZSB0aGF0IHRoZSBwYXJzZWQgYXJncyBzaG91bGQgbWF0Y2ggdGhlIGNvbmZpZyBmaWxlLlxuICAgICAgICBjb25zdCB7Y29uZmlnfSA9IGF3YWl0IHJlYWRDb25maWdGaWxlKHJlc29sdmVGaXh0dXJlKCdjb25maWcnLCAnZHJpdmVyLWZha2UuY29uZmlnLmpzb24nKSk7XG4gICAgICAgIGNvbnN0IGZha2VEcml2ZXJBcmdzID0ge2Zha2U6IHtzaWxseVdlYlNlcnZlclBvcnQ6IDEyMzQsIHNpbGx5V2ViU2VydmVySG9zdDogJ2hleSd9fTtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VfYXJncyhbXG4gICAgICAgICAgJy0tZHJpdmVyLWZha2Utc2lsbHktd2ViLXNlcnZlci1wb3J0JyxcbiAgICAgICAgICBmYWtlRHJpdmVyQXJncy5mYWtlLnNpbGx5V2ViU2VydmVyUG9ydCxcbiAgICAgICAgICAnLS1kcml2ZXItZmFrZS1zaWxseS13ZWItc2VydmVyLWhvc3QnLFxuICAgICAgICAgIGZha2VEcml2ZXJBcmdzLmZha2Uuc2lsbHlXZWJTZXJ2ZXJIb3N0XG4gICAgICAgIF0pO1xuXG4gICAgICAgIGFyZ3MuZHJpdmVyLmZha2Uuc2hvdWxkLmVxbChjb25maWcuZHJpdmVyLmZha2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbmljZWx5IGhhbmRsZSBleHRlbnNpb25zIHcvIGRhc2hlcyBpbiB0aGVtJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzY2hlbWEucmVzZXRTY2hlbWEoKTtcbiAgICAgICAgc2NoZW1hLnJlZ2lzdGVyU2NoZW1hKCdwbHVnaW4nLCAnY3J5cHRvLWZpZW5kJywge3Byb3BlcnRpZXM6IHtlbGl0ZToge3R5cGU6ICdib29sZWFuJ319fSk7XG4gICAgICAgIHNjaGVtYS5maW5hbGl6ZVNjaGVtYSgpO1xuICAgICAgICBwID0gYXdhaXQgZ2V0UGFyc2VyKHRydWUpO1xuICAgICAgICAvLyBjb25zdCBmYWtlUGx1Z2luQXJncyA9IHsneHh4LWNyeXB0MC1maWVuZC14eHgnOiB7ZWxpdGU6IHRydWV9fTtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VfYXJncyhbXG4gICAgICAgICAgJy0tcGx1Z2luLWNyeXB0by1maWVuZC1lbGl0ZSdcbiAgICAgICAgXSk7XG5cbiAgICAgICAgYXJncy5zaG91bGQuaGF2ZS5uZXN0ZWQucHJvcGVydHkoJ3BsdWdpbi5jcnlwdG8tZmllbmQuZWxpdGUnLCB0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiB1c2VyIHN1cHBsaWVzIGludmFsaWQgYXJncycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBlcnJvciBvdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IHAucGFyc2VfYXJncyhbJy0tZHJpdmVyLWZha2Utc2lsbHktd2ViLXNlcnZlci1wb3J0JywgJ2ZvbyddKSkuc2hvdWxkLnRocm93KC9tdXN0IGJlIGludGVnZXIvaSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbm90IHN1cHBvcnQgLS1kcml2ZXItYXJncycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHAucGFyc2VfYXJncyhbJy0tZHJpdmVyLWFyZ3MnLCAnL3NvbWUvZmlsZS5qc29uJ10pKS5zaG91bGQudGhyb3coL3VucmVjb2duaXplZCBhcmd1bWVudHMvaSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBub3Qgc3VwcG9ydCAtLXBsdWdpbi1hcmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gcC5wYXJzZV9hcmdzKFsnLS1wbHVnaW4tYXJncycsICcvc29tZS9maWxlLmpzb24nXSkpLnNob3VsZC50aHJvdygvdW5yZWNvZ25pemVkIGFyZ3VtZW50cy9pKTtcbiAgICAgIH0pO1xuXG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdEcml2ZXIgUGFyc2VyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgbm90IGFsbG93IHJhbmRvbSBzdWItc3ViY29tbWFuZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gcC5wYXJzZV9hcmdzKFsnZHJpdmVyJywgJ2ZvbyddKSkuc2hvdWxkLnRocm93KCk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ2xpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIGFsbG93IGFuIGVtcHR5IGFyZ3VtZW50IGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwLnBhcnNlX2FyZ3MoWydkcml2ZXInLCAnbGlzdCddKTtcbiAgICAgICAgYXJncy5zdWJjb21tYW5kLnNob3VsZC5lcWwoJ2RyaXZlcicpO1xuICAgICAgICBhcmdzLmRyaXZlckNvbW1hbmQuc2hvdWxkLmVxbCgnbGlzdCcpO1xuICAgICAgICBhcmdzLnNob3dJbnN0YWxsZWQuc2hvdWxkLmVxbChmYWxzZSk7XG4gICAgICAgIGFyZ3Muc2hvd1VwZGF0ZXMuc2hvdWxkLmVxbChmYWxzZSk7XG4gICAgICAgIGFyZ3MuanNvbi5zaG91bGQuZXFsKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBqc29uIGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VfYXJncyhbJ2RyaXZlcicsICdsaXN0JywgJy0tanNvbiddKTtcbiAgICAgICAgYXJncy5qc29uLnNob3VsZC5lcWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgYWxsb3cgLS1pbnN0YWxsZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwLnBhcnNlX2FyZ3MoWydkcml2ZXInLCAnbGlzdCcsICctLWluc3RhbGxlZCddKTtcbiAgICAgICAgYXJncy5zaG93SW5zdGFsbGVkLnNob3VsZC5lcWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgYWxsb3cgLS11cGRhdGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gcC5wYXJzZV9hcmdzKFsnZHJpdmVyJywgJ2xpc3QnLCAnLS11cGRhdGVzJ10pO1xuICAgICAgICBhcmdzLnNob3dVcGRhdGVzLnNob3VsZC5lcWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnaW5zdGFsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IGFuIGVtcHR5IGFyZ3VtZW50IGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBwLnBhcnNlX2FyZ3MoWydkcml2ZXInLCAnaW5zdGFsbCddKSkuc2hvdWxkLnRocm93KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgdGFrZSBhIGRyaXZlciBuYW1lIHRvIGluc3RhbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwLnBhcnNlX2FyZ3MoWydkcml2ZXInLCAnaW5zdGFsbCcsICdmb29iYXInXSk7XG4gICAgICAgIGFyZ3Muc3ViY29tbWFuZC5zaG91bGQuZXFsKCdkcml2ZXInKTtcbiAgICAgICAgYXJncy5kcml2ZXJDb21tYW5kLnNob3VsZC5lcWwoJ2luc3RhbGwnKTtcbiAgICAgICAgYXJncy5kcml2ZXIuc2hvdWxkLmVxbCgnZm9vYmFyJyk7XG4gICAgICAgIHNob3VsZC5ub3QuZXhpc3QoYXJncy5pbnN0YWxsVHlwZSk7XG4gICAgICAgIGFyZ3MuanNvbi5zaG91bGQuZXFsKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBqc29uIGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VfYXJncyhbJ2RyaXZlcicsICdpbnN0YWxsJywgJ2Zvb2JhcicsICctLWpzb24nXSk7XG4gICAgICAgIGFyZ3MuanNvbi5zaG91bGQuZXFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGFsbG93IC0tc291cmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBJTlNUQUxMX1RZUEVTKSB7XG4gICAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VfYXJncyhbJ2RyaXZlcicsICdpbnN0YWxsJywgJ2Zvb2JhcicsICctLXNvdXJjZScsIHNvdXJjZV0pO1xuICAgICAgICAgIGFyZ3MuaW5zdGFsbFR5cGUuc2hvdWxkLmVxbChzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IHVua25vd24gLS1zb3VyY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBwLnBhcnNlX2FyZ3MoWydkcml2ZXInLCAnaW5zdGFsbCcsICdmb2JhcicsICctLXNvdXJjZScsICdibGFoJ10pKS5zaG91bGQudGhyb3coKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCd1bmluc3RhbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIG5vdCBhbGxvdyBhbiBlbXB0eSBhcmd1bWVudCBsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gcC5wYXJzZV9hcmdzKFsnZHJpdmVyJywgJ3VuaW5zdGFsbCddKSkuc2hvdWxkLnRocm93KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgdGFrZSBhIGRyaXZlciBuYW1lIHRvIHVuaW5zdGFsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VfYXJncyhbJ2RyaXZlcicsICd1bmluc3RhbGwnLCAnZm9vYmFyJ10pO1xuICAgICAgICBhcmdzLnN1YmNvbW1hbmQuc2hvdWxkLmVxbCgnZHJpdmVyJyk7XG4gICAgICAgIGFyZ3MuZHJpdmVyQ29tbWFuZC5zaG91bGQuZXFsKCd1bmluc3RhbGwnKTtcbiAgICAgICAgYXJncy5kcml2ZXIuc2hvdWxkLmVxbCgnZm9vYmFyJyk7XG4gICAgICAgIGFyZ3MuanNvbi5zaG91bGQuZXFsKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBqc29uIGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VfYXJncyhbJ2RyaXZlcicsICd1bmluc3RhbGwnLCAnZm9vYmFyJywgJy0tanNvbiddKTtcbiAgICAgICAgYXJncy5qc29uLnNob3VsZC5lcWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgndXBkYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgYW4gZW1wdHkgYXJndW1lbnQgbGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHAucGFyc2VfYXJncyhbJ2RyaXZlcicsICd1cGRhdGUnXSkpLnNob3VsZC50aHJvdygpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRha2UgYSBkcml2ZXIgbmFtZSB0byB1cGRhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwLnBhcnNlX2FyZ3MoWydkcml2ZXInLCAndXBkYXRlJywgJ2Zvb2JhciddKTtcbiAgICAgICAgYXJncy5zdWJjb21tYW5kLnNob3VsZC5lcWwoJ2RyaXZlcicpO1xuICAgICAgICBhcmdzLmRyaXZlckNvbW1hbmQuc2hvdWxkLmVxbCgndXBkYXRlJyk7XG4gICAgICAgIGFyZ3MuZHJpdmVyLnNob3VsZC5lcWwoJ2Zvb2JhcicpO1xuICAgICAgICBhcmdzLmpzb24uc2hvdWxkLmVxbChmYWxzZSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgYWxsb3cganNvbiBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwLnBhcnNlX2FyZ3MoWydkcml2ZXInLCAndXBkYXRlJywgJ2Zvb2JhcicsICctLWpzb24nXSk7XG4gICAgICAgIGFyZ3MuanNvbi5zaG91bGQuZXFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ3J1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IGFuIGVtcHR5IGRyaXZlciBhcmd1bWVudCBsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gcC5wYXJzZV9hcmdzKFsnZHJpdmVyJywgJ3J1biddKSkuc2hvdWxkLnRocm93KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IG5vIGRyaXZlciBzY3JpcHROYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gcC5wYXJzZV9hcmdzKFsnZHJpdmVyJywgJ3J1bicsICdmb28nXSkpLnNob3VsZC50aHJvdygpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRha2UgYSBkcml2ZXJOYW1lIGFuZCBzY3JpcHROYW1lIHRvIHJ1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VfYXJncyhbJ2RyaXZlcicsICdydW4nLCAnZm9vJywgJ2JhciddKTtcbiAgICAgICAgYXJncy5zdWJjb21tYW5kLnNob3VsZC5lcWwoJ2RyaXZlcicpO1xuICAgICAgICBhcmdzLmRyaXZlckNvbW1hbmQuc2hvdWxkLmVxbCgncnVuJyk7XG4gICAgICAgIGFyZ3MuZHJpdmVyLnNob3VsZC5lcWwoJ2ZvbycpO1xuICAgICAgICBhcmdzLnNjcmlwdE5hbWUuc2hvdWxkLmVxbCgnYmFyJyk7XG4gICAgICAgIGFyZ3MuanNvbi5zaG91bGQuZXFsKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBqc29uIGZvcm1hdCBmb3IgZHJpdmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gcC5wYXJzZV9hcmdzKFsnZHJpdmVyJywgJ3J1bicsICdmb28nLCAnYmFyJywgJy0tanNvbiddKTtcbiAgICAgICAgYXJncy5qc29uLnNob3VsZC5lcWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IGFuIGVtcHR5IHBsdWdpbiBhcmd1bWVudCBsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gcC5wYXJzZV9hcmdzKFsncGx1Z2luJywgJ3J1biddKSkuc2hvdWxkLnRocm93KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IG5vIHBsdWdpbiBzY3JpcHROYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gcC5wYXJzZV9hcmdzKFsncGx1Z2luJywgJ3J1bicsICdmb28nXSkpLnNob3VsZC50aHJvdygpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRha2UgYSBwbHVnaW5OYW1lIGFuZCBzY3JpcHROYW1lIHRvIHJ1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VfYXJncyhbJ3BsdWdpbicsICdydW4nLCAnZm9vJywgJ2JhciddKTtcbiAgICAgICAgYXJncy5zdWJjb21tYW5kLnNob3VsZC5lcWwoJ3BsdWdpbicpO1xuICAgICAgICBhcmdzLnBsdWdpbkNvbW1hbmQuc2hvdWxkLmVxbCgncnVuJyk7XG4gICAgICAgIGFyZ3MucGx1Z2luLnNob3VsZC5lcWwoJ2ZvbycpO1xuICAgICAgICBhcmdzLnNjcmlwdE5hbWUuc2hvdWxkLmVxbCgnYmFyJyk7XG4gICAgICAgIGFyZ3MuanNvbi5zaG91bGQuZXFsKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBqc29uIGZvcm1hdCBmb3IgcGx1Z2luJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gcC5wYXJzZV9hcmdzKFsncGx1Z2luJywgJ3J1bicsICdmb28nLCAnYmFyJywgJy0tanNvbiddKTtcbiAgICAgICAgYXJncy5qc29uLnNob3VsZC5lcWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoidGVzdC9wYXJzZXItc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
319
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvcGFyc2VyLXNwZWNzLmpzIl0sIm5hbWVzIjpbIkFMTE9XX0ZJWFRVUkUiLCJERU5ZX0ZJWFRVUkUiLCJDQVBTX0ZJWFRVUkUiLCJkZXNjcmliZSIsInAiLCJiZWZvcmVFYWNoIiwiaXQiLCJwYXJzZUFyZ3MiLCJzaG91bGQiLCJ0aHJvdyIsImV4aXN0IiwiaGF2ZSIsInByb3BlcnR5Iiwic3ViY29tbWFuZCIsImVxbCIsInJhd0FyZ3MiLCJhcmciLCJkZWZhdWx0Q2FwYWJpbGl0aWVzIiwiYSIsImFyZ3MiLCJKU09OIiwic3RyaW5naWZ5Iiwibm90IiwiYWxsb3dJbnNlY3VyZSIsImRlbnlJbnNlY3VyZSIsInBhcnNlZCIsInVzZURyaXZlcnMiLCJzY2hlbWEiLCJyZXNldFNjaGVtYSIsInJlZ2lzdGVyU2NoZW1hIiwicmVxdWlyZSIsImRlZmF1bHQiLCJmaW5hbGl6ZVNjaGVtYSIsImNvbmZpZyIsImZha2VEcml2ZXJBcmdzIiwiZmFrZSIsInNpbGx5V2ViU2VydmVyUG9ydCIsInNpbGx5V2ViU2VydmVySG9zdCIsImRyaXZlciIsInR5cGUiLCJwcm9wZXJ0aWVzIiwiZWxpdGUiLCJuZXN0ZWQiLCJkcml2ZXJDb21tYW5kIiwic2hvd0luc3RhbGxlZCIsInNob3dVcGRhdGVzIiwianNvbiIsImluc3RhbGxUeXBlIiwic291cmNlIiwiSU5TVEFMTF9UWVBFUyIsInNjcmlwdE5hbWUiLCJwbHVnaW5Db21tYW5kIiwicGx1Z2luIl0sIm1hcHBpbmdzIjoiOzs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUdBLE1BQU1BLGFBQWEsR0FBRyw2QkFBZSxnQkFBZixDQUF0QjtBQUNBLE1BQU1DLFlBQVksR0FBRyw2QkFBZSxlQUFmLENBQXJCO0FBQ0EsTUFBTUMsWUFBWSxHQUFHLDZCQUFlLFdBQWYsQ0FBckI7QUFFQUMsUUFBUSxDQUFDLFFBQUQsRUFBVyxZQUFZO0FBQzdCLE1BQUlDLENBQUo7QUFFQUQsRUFBQUEsUUFBUSxDQUFD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QixDQUFaLENBQWI7QUFDQVksUUFBQUEsSUFBSSxDQUFDTixVQUFMLENBQWdCTCxNQUFoQixDQUF1Qk0sR0FBdkIsQ0FBMkIsUUFBM0I7QUFDQUssUUFBQUEsSUFBSSxDQUFDZ0MsYUFBTCxDQUFtQjNDLE1BQW5CLENBQTBCTSxHQUExQixDQUE4QixLQUE5QjtBQUNBSyxRQUFBQSxJQUFJLENBQUNpQyxNQUFMLENBQVk1QyxNQUFaLENBQW1CTSxHQUFuQixDQUF1QixLQUF2QjtBQUNBSyxRQUFBQSxJQUFJLENBQUMrQixVQUFMLENBQWdCMUMsTUFBaEIsQ0FBdUJNLEdBQXZCLENBQTJCLEtBQTNCO0FBQ0FLLFFBQUFBLElBQUksQ0FBQzJCLElBQUwsQ0FBVXRDLE1BQVYsQ0FBaUJNLEdBQWpCLENBQXFCLEtBQXJCO0FBQ0QsT0FQQyxDQUFGO0FBUUFSLE1BQUFBLEVBQUUsQ0FBQyxxQ0FBRCxFQUF3QyxZQUFZO0FBQ3BELGNBQU1hLElBQUksR0FBR2YsQ0FBQyxDQUFDRyxTQUFGLENBQVksQ0FBQyxRQUFELEVBQVcsS0FBWCxFQUFrQixLQUFsQixFQUF5QixLQUF6QixFQUFnQyxRQUFoQyxDQUFaLENBQWI7QUFDQVksUUFBQUEsSUFBSSxDQUFDMkIsSUFBTCxDQUFVdEMsTUFBVixDQUFpQk0sR0FBakIsQ0FBcUIsSUFBckI7QUFDRCxPQUhDLENBQUY7QUFJRCxLQXJDTyxDQUFSO0FBc0NELEdBMUhPLENBQVI7QUEySEQsQ0FqVE8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptb2NoYVxuXG5pbXBvcnQgeyBnZXRQYXJzZXIgfSBmcm9tICcuLi9saWIvY2xpL3BhcnNlcic7XG5pbXBvcnQgeyBJTlNUQUxMX1RZUEVTIH0gZnJvbSAnLi4vbGliL2V4dGVuc2lvbi1jb25maWcnO1xuaW1wb3J0ICogYXMgc2NoZW1hIGZyb20gJy4uL2xpYi9zY2hlbWEvc2NoZW1hJztcbmltcG9ydCB7IHJlYWRDb25maWdGaWxlIH0gZnJvbSAnLi4vbGliL2NvbmZpZy1maWxlJztcbmltcG9ydCB7IHJlc29sdmVGaXh0dXJlIH0gZnJvbSAnLi9oZWxwZXJzJztcblxuLy8gdGhlc2UgcGF0aHMgc2hvdWxkIG5vdCBtYWtlIGFzc3VtcHRpb25zIGFib3V0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XG5jb25zdCBBTExPV19GSVhUVVJFID0gcmVzb2x2ZUZpeHR1cmUoJ2FsbG93LWZlYXQudHh0Jyk7XG5jb25zdCBERU5ZX0ZJWFRVUkUgPSByZXNvbHZlRml4dHVyZSgnZGVueS1mZWF0LnR4dCcpO1xuY29uc3QgQ0FQU19GSVhUVVJFID0gcmVzb2x2ZUZpeHR1cmUoJ2NhcHMuanNvbicpO1xuXG5kZXNjcmliZSgncGFyc2VyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgcDtcblxuICBkZXNjcmliZSgnTWFpbiBQYXJzZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBwID0gYXdhaXQgZ2V0UGFyc2VyKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgb25seSBzZXJ2ZXIgYW5kIGRyaXZlciBzdWJjb21tYW5kcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHAucGFyc2VBcmdzKFtdKTtcbiAgICAgIHAucGFyc2VBcmdzKFsnc2VydmVyJ10pO1xuICAgICAgcC5wYXJzZUFyZ3MoWydkcml2ZXInLCAnbGlzdCddKTtcbiAgICAgICgoKSA9PiBwLnBhcnNlQXJncyhbJ2ZvbyddKSkuc2hvdWxkLnRocm93KCk7XG4gICAgICAoKCkgPT4gcC5wYXJzZUFyZ3MoWydmb28gLS1iYXInXSkpLnNob3VsZC50aHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2VydmVyIFBhcnNlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnQXBwaXVtIGFyZ3VtZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBwID0gYXdhaXQgZ2V0UGFyc2VyKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFyZyBwYXJzZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNob3VsZC5leGlzdChwLnBhcnNlQXJncyk7XG4gICAgICAgIHAucGFyc2VBcmdzKFtdKS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncG9ydCcpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGRlZmF1bHQgdG8gdGhlIHNlcnZlciBzdWJjb21tYW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBwLnBhcnNlQXJncyhbXSkuc3ViY29tbWFuZC5zaG91bGQuZXFsKCdzZXJ2ZXInKTtcbiAgICAgICAgcC5wYXJzZUFyZ3MoW10pLnNob3VsZC5lcWwocC5wYXJzZUFyZ3MoWydzZXJ2ZXInXSkpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGtlZXAgdGhlIHJhdyBzZXJ2ZXIgZmxhZ3MgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNob3VsZC5leGlzdChwLnJhd0FyZ3MpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGhhdmUgaGVscCBmb3IgZXZlcnkgYXJnJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGxldCBhcmcgb2YgcC5yYXdBcmdzKSB7XG4gICAgICAgICAgYXJnWzFdLnNob3VsZC5oYXZlLnByb3BlcnR5KCdoZWxwJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBUT0RPOiBmaWd1cmUgb3V0IGhvdyBiZXN0IHRvIHN1cHByZXNzIGNvbG9yIGluIGVycm9yIG1lc3NhZ2VcbiAgICAgIGRlc2NyaWJlKCdpbnZhbGlkIGFyZ3VtZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aXRoIHVua25vd24gYXJndW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IHtwLnBhcnNlQXJncyhbJy0tYXBwbGUnXSk7fSkuc2hvdWxkLnRocm93KC91bnJlY29nbml6ZWQgYXJndW1lbnRzOiAtLWFwcGxlL2kpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBhbiBpbnZhbGlkIHZhbHVlIChcImhvc3RuYW1lXCIpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiB7cC5wYXJzZUFyZ3MoWyctLWFkZHJlc3MnLCAnLTQyJ10pO30pLnNob3VsZC50aHJvdygvbXVzdCBtYXRjaCBmb3JtYXQgXCJob3N0bmFtZVwiL2kpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBhbiBpbnZhbGlkIHZhbHVlIChcInVyaVwiKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAoKCkgPT4ge3AucGFyc2VBcmdzKFsnLS13ZWJob29rJywgJ2JsdWInXSk7fSkuc2hvdWxkLnRocm93KC9tdXN0IG1hdGNoIGZvcm1hdCBcInVyaVwiL2kpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBhbiBpbnZhbGlkIHZhbHVlICh1c2luZyBcImVudW1cIiknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IHtwLnBhcnNlQXJncyhbJy0tbG9nLWxldmVsJywgJy00MiddKTt9KS5zaG91bGQudGhyb3coL211c3QgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlcy9pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgaW5jb3JyZWN0bHkgZm9ybWF0dGVkIGFyZyAobWF0Y2hpbmcgXCJkZXN0XCIpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiB7cC5wYXJzZUFyZ3MoWyctLWxvZ2xldmVsJywgJy00MiddKTt9KS5zaG91bGQudGhyb3coL3VucmVjb2duaXplZCBhcmd1bWVudHM6IC0tbG9nbGV2ZWwvaSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcGFyc2UgZGVmYXVsdCBjYXBhYmlsaXRpZXMgY29ycmVjdGx5IGZyb20gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBkZWZhdWx0Q2FwYWJpbGl0aWVzID0ge2E6ICdiJ307XG4gICAgICAgIGxldCBhcmdzID0gcC5wYXJzZUFyZ3MoWyctLWRlZmF1bHQtY2FwYWJpbGl0aWVzJywgSlNPTi5zdHJpbmdpZnkoZGVmYXVsdENhcGFiaWxpdGllcyldKTtcbiAgICAgICAgYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzLnNob3VsZC5lcWwoZGVmYXVsdENhcGFiaWxpdGllcyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXJzZSBkZWZhdWx0IGNhcGFiaWxpdGllcyBjb3JyZWN0bHkgZnJvbSBhIGZpbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBkZWZhdWx0Q2FwYWJpbGl0aWVzID0ge2E6ICdiJ307XG4gICAgICAgIGxldCBhcmdzID0gcC5wYXJzZUFyZ3MoWyctLWRlZmF1bHQtY2FwYWJpbGl0aWVzJywgQ0FQU19GSVhUVVJFXSk7XG4gICAgICAgIGFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcy5zaG91bGQuZXFsKGRlZmF1bHRDYXBhYmlsaXRpZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2l0aCBpbnZhbGlkIGFyZyB0byBkZWZhdWx0IGNhcGFiaWxpdGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHtwLnBhcnNlQXJncyhbJy1kYycsICc0MiddKTt9KS5zaG91bGQudGhyb3coKTtcbiAgICAgICAgKCgpID0+IHtwLnBhcnNlQXJncyhbJy1kYycsICdmYWxzZSddKTt9KS5zaG91bGQudGhyb3coKTtcbiAgICAgICAgKCgpID0+IHtwLnBhcnNlQXJncyhbJy1kYycsICdudWxsJ10pO30pLnNob3VsZC50aHJvdygpO1xuICAgICAgICAoKCkgPT4ge3AucGFyc2VBcmdzKFsnLWRjJywgJ2RvZXMvbm90L2V4aXN0Lmpzb24nXSk7fSkuc2hvdWxkLnRocm93KCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXJzZSAtLWFsbG93LWluc2VjdXJlIGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcC5wYXJzZUFyZ3MoW10pLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnYWxsb3dJbnNlY3VyZScpO1xuICAgICAgICBwLnBhcnNlQXJncyhbJy0tYWxsb3ctaW5zZWN1cmUnLCAnJ10pLmFsbG93SW5zZWN1cmUuc2hvdWxkLmVxbChbXSk7XG4gICAgICAgIHAucGFyc2VBcmdzKFsnLS1hbGxvdy1pbnNlY3VyZScsICdmb28nXSkuYWxsb3dJbnNlY3VyZS5zaG91bGQuZXFsKFsnZm9vJ10pO1xuICAgICAgICBwLnBhcnNlQXJncyhbJy0tYWxsb3ctaW5zZWN1cmUnLCAnZm9vLGJhciddKS5hbGxvd0luc2VjdXJlLnNob3VsZC5lcWwoWydmb28nLCAnYmFyJ10pO1xuICAgICAgICBwLnBhcnNlQXJncyhbJy0tYWxsb3ctaW5zZWN1cmUnLCAnZm9vICxiYXInXSkuYWxsb3dJbnNlY3VyZS5zaG91bGQuZXFsKFsnZm9vJywgJ2JhciddKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHBhcnNlIC0tZGVueS1pbnNlY3VyZSBjb3JyZWN0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHAucGFyc2VBcmdzKFtdKS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2RlbnlJbnNlY3VyZScpO1xuICAgICAgICBwLnBhcnNlQXJncyhbJy0tZGVueS1pbnNlY3VyZScsICcnXSkuZGVueUluc2VjdXJlLnNob3VsZC5lcWwoW10pO1xuICAgICAgICBwLnBhcnNlQXJncyhbJy0tZGVueS1pbnNlY3VyZScsICdmb28nXSkuZGVueUluc2VjdXJlLnNob3VsZC5lcWwoWydmb28nXSk7XG4gICAgICAgIHAucGFyc2VBcmdzKFsnLS1kZW55LWluc2VjdXJlJywgJ2ZvbyxiYXInXSkuZGVueUluc2VjdXJlLnNob3VsZC5lcWwoWydmb28nLCAnYmFyJ10pO1xuICAgICAgICBwLnBhcnNlQXJncyhbJy0tZGVueS1pbnNlY3VyZScsICdmb28gLGJhciddKS5kZW55SW5zZWN1cmUuc2hvdWxkLmVxbChbJ2ZvbycsICdiYXInXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXJzZSAtLWFsbG93LWluc2VjdXJlICYgLS1kZW55LWluc2VjdXJlIGZyb20gZmlsZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHAucGFyc2VBcmdzKFtcbiAgICAgICAgICAnLS1hbGxvdy1pbnNlY3VyZScsIEFMTE9XX0ZJWFRVUkUsICctLWRlbnktaW5zZWN1cmUnLCBERU5ZX0ZJWFRVUkVcbiAgICAgICAgXSk7XG4gICAgICAgIHBhcnNlZC5hbGxvd0luc2VjdXJlLnNob3VsZC5lcWwoWydmZWF0dXJlMScsICdmZWF0dXJlMicsICdmZWF0dXJlMyddKTtcbiAgICAgICAgcGFyc2VkLmRlbnlJbnNlY3VyZS5zaG91bGQuZXFsKFsnbm9mZWF0dXJlMScsICdub2ZlYXR1cmUyJywgJ25vZmVhdHVyZTMnXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBhIHN0cmluZyBmb3IgLS11c2UtZHJpdmVycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcC5wYXJzZUFyZ3MoWyctLXVzZS1kcml2ZXJzJywgJ2Zha2UnXSkudXNlRHJpdmVycy5zaG91bGQuZXFsKFsnZmFrZSddKTtcbiAgICAgIH0pO1xuXG5cbiAgICAgIGl0KCdzaG91bGQgYWxsb3cgbXVsdGlwbGUgLS11c2UtZHJpdmVycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcC5wYXJzZUFyZ3MoWyctLXVzZS1kcml2ZXJzJywgJ2Zha2UscGhvbnknXSkudXNlRHJpdmVycy5zaG91bGQuZXFsKFsnZmFrZScsICdwaG9ueSddKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlc3BlY3QgLS1yZWxheGVkLXNlY3VyaXR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBwLnBhcnNlQXJncyhbJy0tcmVsYXhlZC1zZWN1cml0eSddKS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncmVsYXhlZFNlY3VyaXR5RW5hYmxlZCcsIHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXh0ZW5zaW9uIGFyZ3VtZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzY2hlbWEucmVzZXRTY2hlbWEoKTtcbiAgICAgICAgLy8gd2UgaGF2ZSB0byByZXF1aXJlKCkgaGVyZSBiZWNhdXNlIGJhYmVsIHdpbGwgbm90IGNvbXBpbGUgc3R1ZmYgaW4gbm9kZV9tb2R1bGVzXG4gICAgICAgIC8vIChldmVuIGlmIGl0J3MgaW4gdGhlIG1vbm9yZXBvOyB0aGVyZSBtYXkgYmUgYSB3YXkgYXJvdW5kIHRoaXMpXG4gICAgICAgIC8vIGFueXdheSwgaWYgd2UgZG8gdGhhdCwgd2UgbmVlZCB0byB1c2UgdGhlIGBkZWZhdWx0YCBwcm9wLlxuICAgICAgICBzY2hlbWEucmVnaXN0ZXJTY2hlbWEoJ2RyaXZlcicsICdmYWtlJywgcmVxdWlyZSgnQGFwcGl1bS9mYWtlLWRyaXZlci9idWlsZC9saWIvZmFrZS1kcml2ZXItc2NoZW1hJykuZGVmYXVsdCk7XG4gICAgICAgIHNjaGVtYS5maW5hbGl6ZVNjaGVtYSgpO1xuICAgICAgICBwID0gYXdhaXQgZ2V0UGFyc2VyKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcGFyc2UgZHJpdmVyIGFyZ3MgY29ycmVjdGx5IGZyb20gYSBzdHJpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIHRoaXMgdGVzdCByZWFkcyB0aGUgYWN0dWFsIHNjaGVtYSBwcm92aWRlZCBieSB0aGUgZmFrZSBkcml2ZXIuXG4gICAgICAgIC8vIHRoZSBjb25maWcgZmlsZSBjb3JyZXNwb25kcyB0byB0aGF0IHNjaGVtYS5cbiAgICAgICAgLy8gdGhlIGNvbW1hbmQtbGluZSBmbGFncyBhcmUgZGVyaXZlZCBhbHNvIGZyb20gdGhlIHNjaGVtYS5cbiAgICAgICAgLy8gdGhlIHJlc3VsdCBzaG91bGQgYmUgdGhhdCB0aGUgcGFyc2VkIGFyZ3Mgc2hvdWxkIG1hdGNoIHRoZSBjb25maWcgZmlsZS5cbiAgICAgICAgY29uc3Qge2NvbmZpZ30gPSBhd2FpdCByZWFkQ29uZmlnRmlsZShyZXNvbHZlRml4dHVyZSgnY29uZmlnJywgJ2RyaXZlci1mYWtlLmNvbmZpZy5qc29uJykpO1xuICAgICAgICBjb25zdCBmYWtlRHJpdmVyQXJncyA9IHtmYWtlOiB7c2lsbHlXZWJTZXJ2ZXJQb3J0OiAxMjM0LCBzaWxseVdlYlNlcnZlckhvc3Q6ICdoZXknfX07XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwLnBhcnNlQXJncyhbXG4gICAgICAgICAgJy0tZHJpdmVyLWZha2Utc2lsbHktd2ViLXNlcnZlci1wb3J0JyxcbiAgICAgICAgICBmYWtlRHJpdmVyQXJncy5mYWtlLnNpbGx5V2ViU2VydmVyUG9ydCxcbiAgICAgICAgICAnLS1kcml2ZXItZmFrZS1zaWxseS13ZWItc2VydmVyLWhvc3QnLFxuICAgICAgICAgIGZha2VEcml2ZXJBcmdzLmZha2Uuc2lsbHlXZWJTZXJ2ZXJIb3N0XG4gICAgICAgIF0pO1xuXG4gICAgICAgIGFyZ3MuZHJpdmVyLmZha2Uuc2hvdWxkLmVxbChjb25maWcuZHJpdmVyLmZha2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbm90IHlldCBhcHBseSBkZWZhdWx0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VBcmdzKFtdKTtcbiAgICAgICAgYXJncy5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2RyaXZlcicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbmljZWx5IGhhbmRsZSBleHRlbnNpb25zIHcvIGRhc2hlcyBpbiB0aGVtJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzY2hlbWEucmVzZXRTY2hlbWEoKTtcbiAgICAgICAgc2NoZW1hLnJlZ2lzdGVyU2NoZW1hKCdwbHVnaW4nLCAnY3J5cHRvLWZpZW5kJywge3R5cGU6ICdvYmplY3QnLCBwcm9wZXJ0aWVzOiB7ZWxpdGU6IHt0eXBlOiAnYm9vbGVhbid9fX0pO1xuICAgICAgICBzY2hlbWEuZmluYWxpemVTY2hlbWEoKTtcbiAgICAgICAgcCA9IGF3YWl0IGdldFBhcnNlcih0cnVlKTtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VBcmdzKFtcbiAgICAgICAgICAnLS1wbHVnaW4tY3J5cHRvLWZpZW5kLWVsaXRlJ1xuICAgICAgICBdKTtcblxuICAgICAgICBhcmdzLnNob3VsZC5oYXZlLm5lc3RlZC5wcm9wZXJ0eSgncGx1Z2luLmNyeXB0by1maWVuZC5lbGl0ZScsIHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHVzZXIgc3VwcGxpZXMgaW52YWxpZCBhcmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGVycm9yIG91dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAoKCkgPT4gcC5wYXJzZUFyZ3MoWyctLWRyaXZlci1mYWtlLXNpbGx5LXdlYi1zZXJ2ZXItcG9ydCcsICdmb28nXSkpLnNob3VsZC50aHJvdygvbXVzdCBiZSBpbnRlZ2VyL2kpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIG5vdCBzdXBwb3J0IC0tZHJpdmVyLWFyZ3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBwLnBhcnNlQXJncyhbJy0tZHJpdmVyLWFyZ3MnLCAnL3NvbWUvZmlsZS5qc29uJ10pKS5zaG91bGQudGhyb3coL3VucmVjb2duaXplZCBhcmd1bWVudHMvaSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBub3Qgc3VwcG9ydCAtLXBsdWdpbi1hcmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gcC5wYXJzZUFyZ3MoWyctLXBsdWdpbi1hcmdzJywgJy9zb21lL2ZpbGUuanNvbiddKSkuc2hvdWxkLnRocm93KC91bnJlY29nbml6ZWQgYXJndW1lbnRzL2kpO1xuICAgICAgfSk7XG5cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0RyaXZlciBQYXJzZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgcmFuZG9tIHN1Yi1zdWJjb21tYW5kcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgoKSA9PiBwLnBhcnNlQXJncyhbJ2RyaXZlcicsICdmb28nXSkpLnNob3VsZC50aHJvdygpO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBhbiBlbXB0eSBhcmd1bWVudCBsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gcC5wYXJzZUFyZ3MoWydkcml2ZXInLCAnbGlzdCddKTtcbiAgICAgICAgYXJncy5zdWJjb21tYW5kLnNob3VsZC5lcWwoJ2RyaXZlcicpO1xuICAgICAgICBhcmdzLmRyaXZlckNvbW1hbmQuc2hvdWxkLmVxbCgnbGlzdCcpO1xuICAgICAgICBhcmdzLnNob3dJbnN0YWxsZWQuc2hvdWxkLmVxbChmYWxzZSk7XG4gICAgICAgIGFyZ3Muc2hvd1VwZGF0ZXMuc2hvdWxkLmVxbChmYWxzZSk7XG4gICAgICAgIGFyZ3MuanNvbi5zaG91bGQuZXFsKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBqc29uIGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VBcmdzKFsnZHJpdmVyJywgJ2xpc3QnLCAnLS1qc29uJ10pO1xuICAgICAgICBhcmdzLmpzb24uc2hvdWxkLmVxbCh0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyAtLWluc3RhbGxlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VBcmdzKFsnZHJpdmVyJywgJ2xpc3QnLCAnLS1pbnN0YWxsZWQnXSk7XG4gICAgICAgIGFyZ3Muc2hvd0luc3RhbGxlZC5zaG91bGQuZXFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGFsbG93IC0tdXBkYXRlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VBcmdzKFsnZHJpdmVyJywgJ2xpc3QnLCAnLS11cGRhdGVzJ10pO1xuICAgICAgICBhcmdzLnNob3dVcGRhdGVzLnNob3VsZC5lcWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnaW5zdGFsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IGFuIGVtcHR5IGFyZ3VtZW50IGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBwLnBhcnNlQXJncyhbJ2RyaXZlcicsICdpbnN0YWxsJ10pKS5zaG91bGQudGhyb3coKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCB0YWtlIGEgZHJpdmVyIG5hbWUgdG8gaW5zdGFsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VBcmdzKFsnZHJpdmVyJywgJ2luc3RhbGwnLCAnZm9vYmFyJ10pO1xuICAgICAgICBhcmdzLnN1YmNvbW1hbmQuc2hvdWxkLmVxbCgnZHJpdmVyJyk7XG4gICAgICAgIGFyZ3MuZHJpdmVyQ29tbWFuZC5zaG91bGQuZXFsKCdpbnN0YWxsJyk7XG4gICAgICAgIGFyZ3MuZHJpdmVyLnNob3VsZC5lcWwoJ2Zvb2JhcicpO1xuICAgICAgICBzaG91bGQubm90LmV4aXN0KGFyZ3MuaW5zdGFsbFR5cGUpO1xuICAgICAgICBhcmdzLmpzb24uc2hvdWxkLmVxbChmYWxzZSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgYWxsb3cganNvbiBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwLnBhcnNlQXJncyhbJ2RyaXZlcicsICdpbnN0YWxsJywgJ2Zvb2JhcicsICctLWpzb24nXSk7XG4gICAgICAgIGFyZ3MuanNvbi5zaG91bGQuZXFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGFsbG93IC0tc291cmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBJTlNUQUxMX1RZUEVTKSB7XG4gICAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VBcmdzKFsnZHJpdmVyJywgJ2luc3RhbGwnLCAnZm9vYmFyJywgJy0tc291cmNlJywgc291cmNlXSk7XG4gICAgICAgICAgYXJncy5pbnN0YWxsVHlwZS5zaG91bGQuZXFsKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgdW5rbm93biAtLXNvdXJjZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHAucGFyc2VBcmdzKFsnZHJpdmVyJywgJ2luc3RhbGwnLCAnZm9iYXInLCAnLS1zb3VyY2UnLCAnYmxhaCddKSkuc2hvdWxkLnRocm93KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgndW5pbnN0YWxsJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgYW4gZW1wdHkgYXJndW1lbnQgbGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHAucGFyc2VBcmdzKFsnZHJpdmVyJywgJ3VuaW5zdGFsbCddKSkuc2hvdWxkLnRocm93KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgdGFrZSBhIGRyaXZlciBuYW1lIHRvIHVuaW5zdGFsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VBcmdzKFsnZHJpdmVyJywgJ3VuaW5zdGFsbCcsICdmb29iYXInXSk7XG4gICAgICAgIGFyZ3Muc3ViY29tbWFuZC5zaG91bGQuZXFsKCdkcml2ZXInKTtcbiAgICAgICAgYXJncy5kcml2ZXJDb21tYW5kLnNob3VsZC5lcWwoJ3VuaW5zdGFsbCcpO1xuICAgICAgICBhcmdzLmRyaXZlci5zaG91bGQuZXFsKCdmb29iYXInKTtcbiAgICAgICAgYXJncy5qc29uLnNob3VsZC5lcWwoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGFsbG93IGpzb24gZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gcC5wYXJzZUFyZ3MoWydkcml2ZXInLCAndW5pbnN0YWxsJywgJ2Zvb2JhcicsICctLWpzb24nXSk7XG4gICAgICAgIGFyZ3MuanNvbi5zaG91bGQuZXFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ3VwZGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IGFuIGVtcHR5IGFyZ3VtZW50IGxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBwLnBhcnNlQXJncyhbJ2RyaXZlcicsICd1cGRhdGUnXSkpLnNob3VsZC50aHJvdygpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRha2UgYSBkcml2ZXIgbmFtZSB0byB1cGRhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwLnBhcnNlQXJncyhbJ2RyaXZlcicsICd1cGRhdGUnLCAnZm9vYmFyJ10pO1xuICAgICAgICBhcmdzLnN1YmNvbW1hbmQuc2hvdWxkLmVxbCgnZHJpdmVyJyk7XG4gICAgICAgIGFyZ3MuZHJpdmVyQ29tbWFuZC5zaG91bGQuZXFsKCd1cGRhdGUnKTtcbiAgICAgICAgYXJncy5kcml2ZXIuc2hvdWxkLmVxbCgnZm9vYmFyJyk7XG4gICAgICAgIGFyZ3MuanNvbi5zaG91bGQuZXFsKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBqc29uIGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VBcmdzKFsnZHJpdmVyJywgJ3VwZGF0ZScsICdmb29iYXInLCAnLS1qc29uJ10pO1xuICAgICAgICBhcmdzLmpzb24uc2hvdWxkLmVxbCh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdydW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIG5vdCBhbGxvdyBhbiBlbXB0eSBkcml2ZXIgYXJndW1lbnQgbGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHAucGFyc2VBcmdzKFsnZHJpdmVyJywgJ3J1biddKSkuc2hvdWxkLnRocm93KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IG5vIGRyaXZlciBzY3JpcHROYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gcC5wYXJzZUFyZ3MoWydkcml2ZXInLCAncnVuJywgJ2ZvbyddKSkuc2hvdWxkLnRocm93KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgdGFrZSBhIGRyaXZlck5hbWUgYW5kIHNjcmlwdE5hbWUgdG8gcnVuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gcC5wYXJzZUFyZ3MoWydkcml2ZXInLCAncnVuJywgJ2ZvbycsICdiYXInXSk7XG4gICAgICAgIGFyZ3Muc3ViY29tbWFuZC5zaG91bGQuZXFsKCdkcml2ZXInKTtcbiAgICAgICAgYXJncy5kcml2ZXJDb21tYW5kLnNob3VsZC5lcWwoJ3J1bicpO1xuICAgICAgICBhcmdzLmRyaXZlci5zaG91bGQuZXFsKCdmb28nKTtcbiAgICAgICAgYXJncy5zY3JpcHROYW1lLnNob3VsZC5lcWwoJ2JhcicpO1xuICAgICAgICBhcmdzLmpzb24uc2hvdWxkLmVxbChmYWxzZSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgYWxsb3cganNvbiBmb3JtYXQgZm9yIGRyaXZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHAucGFyc2VBcmdzKFsnZHJpdmVyJywgJ3J1bicsICdmb28nLCAnYmFyJywgJy0tanNvbiddKTtcbiAgICAgICAgYXJncy5qc29uLnNob3VsZC5lcWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgbm90IGFsbG93IGFuIGVtcHR5IHBsdWdpbiBhcmd1bWVudCBsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gcC5wYXJzZUFyZ3MoWydwbHVnaW4nLCAncnVuJ10pKS5zaG91bGQudGhyb3coKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgbm8gcGx1Z2luIHNjcmlwdE5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBwLnBhcnNlQXJncyhbJ3BsdWdpbicsICdydW4nLCAnZm9vJ10pKS5zaG91bGQudGhyb3coKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCB0YWtlIGEgcGx1Z2luTmFtZSBhbmQgc2NyaXB0TmFtZSB0byBydW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBwLnBhcnNlQXJncyhbJ3BsdWdpbicsICdydW4nLCAnZm9vJywgJ2JhciddKTtcbiAgICAgICAgYXJncy5zdWJjb21tYW5kLnNob3VsZC5lcWwoJ3BsdWdpbicpO1xuICAgICAgICBhcmdzLnBsdWdpbkNvbW1hbmQuc2hvdWxkLmVxbCgncnVuJyk7XG4gICAgICAgIGFyZ3MucGx1Z2luLnNob3VsZC5lcWwoJ2ZvbycpO1xuICAgICAgICBhcmdzLnNjcmlwdE5hbWUuc2hvdWxkLmVxbCgnYmFyJyk7XG4gICAgICAgIGFyZ3MuanNvbi5zaG91bGQuZXFsKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBqc29uIGZvcm1hdCBmb3IgcGx1Z2luJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBhcmdzID0gcC5wYXJzZUFyZ3MoWydwbHVnaW4nLCAncnVuJywgJ2ZvbycsICdiYXInLCAnLS1qc29uJ10pO1xuICAgICAgICBhcmdzLmpzb24uc2hvdWxkLmVxbCh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L3BhcnNlci1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9