@discordeno/rest 21.0.1-next.444fa0d → 21.0.1-next.4792ad2

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.
@@ -46,6 +46,12 @@ export function createRestManager(options) {
46
46
  token: options.token,
47
47
  version: options.version ?? DISCORD_API_VERSION,
48
48
  logger: options.logger ?? logger,
49
+ events: {
50
+ request: ()=>{},
51
+ response: ()=>{},
52
+ requestError: ()=>{},
53
+ ...options.events
54
+ },
49
55
  routes: createRoutes(),
50
56
  createBaseHeaders () {
51
57
  return {
@@ -304,13 +310,20 @@ export function createRestManager(options) {
304
310
  const authorizationScheme = payload.headers.authorization?.split(' ')[0];
305
311
  loggingHeaders.authorization = `${authorizationScheme} tokenhere`;
306
312
  }
313
+ const request = new Request(url, payload);
314
+ rest.events.request(request, {
315
+ body: options.requestBodyOptions?.body
316
+ });
307
317
  rest.logger.debug(`sending request to ${url}`, 'with payload:', {
308
318
  ...payload,
309
319
  headers: loggingHeaders
310
320
  });
311
- const response = await fetch(url, payload).catch(async (error)=>{
321
+ const response = await fetch(request).catch(async (error)=>{
312
322
  rest.logger.error(error);
313
- // Mark request and completed
323
+ rest.events.requestError(request, error, {
324
+ body: options.requestBodyOptions?.body
325
+ });
326
+ // Mark request as completed
314
327
  rest.invalidBucket.handleCompletedRequest(999, false);
315
328
  options.reject({
316
329
  ok: false,
@@ -320,7 +333,13 @@ export function createRestManager(options) {
320
333
  throw error;
321
334
  });
322
335
  rest.logger.debug(`request fetched from ${url} with status ${response.status} & ${response.statusText}`);
323
- // Mark request and completed
336
+ // Sometimes the Content-Type may be "application/json; charset=utf-8", for this reason, we need to check the start of the header
337
+ const body = await (response.headers.get('Content-Type')?.startsWith('application/json') ? response.json() : response.text()).catch(()=>null);
338
+ rest.events.response(request, response, {
339
+ requestBody: options.requestBodyOptions?.body,
340
+ responseBody: body
341
+ });
342
+ // Mark request as completed
324
343
  rest.invalidBucket.handleCompletedRequest(response.status, response.headers.get(RATE_LIMIT_SCOPE_HEADER) === 'shared');
325
344
  // Set the bucket id if it was available on the headers
326
345
  const bucketId = rest.processHeaders(rest.simplifyUrl(options.route, options.method), response.headers, payload.headers.authorization);
@@ -328,7 +347,6 @@ export function createRestManager(options) {
328
347
  if (response.status < 200 || response.status >= 400) {
329
348
  rest.logger.debug(`Request to ${url} failed.`);
330
349
  if (response.status !== 429) {
331
- const body = response.headers.get('Content-Type') === 'application/json' ? await response.json() : await response.text();
332
350
  options.reject({
333
351
  ok: false,
334
352
  status: response.status,
@@ -337,8 +355,6 @@ export function createRestManager(options) {
337
355
  });
338
356
  return;
339
357
  }
340
- // Consume the response body to avoid leaking memory
341
- await response.arrayBuffer();
342
358
  rest.logger.debug(`Request to ${url} was ratelimited.`);
343
359
  // Too many attempts, get rid of request from queue.
344
360
  if (options.retryCount >= rest.maxRetryCount) {
@@ -357,11 +373,11 @@ export function createRestManager(options) {
357
373
  if (resetAfter) await delay(Number(resetAfter) * 1000);
358
374
  return await options.retryRequest?.(options);
359
375
  }
360
- // Discord sometimes sends no response with no content.
376
+ // Discord sometimes sends a response with no content
361
377
  options.resolve({
362
378
  ok: true,
363
379
  status: response.status,
364
- body: response.status === 204 ? undefined : await response.text()
380
+ body: response.status === 204 ? undefined : body
365
381
  });
366
382
  },
367
383
  simplifyUrl (url, method) {
@@ -419,10 +435,18 @@ export function createRestManager(options) {
419
435
  options.headers ??= {};
420
436
  options.headers[rest.authorizationHeader] = rest.authorization;
421
437
  }
422
- const result = await fetch(`${rest.baseUrl}/v${rest.version}${route}`, rest.createRequestBody(method, options));
438
+ const request = new Request(`${rest.baseUrl}/v${rest.version}${route}`, rest.createRequestBody(method, options));
439
+ rest.events.request(request, {
440
+ body: options?.body
441
+ });
442
+ const result = await fetch(request);
443
+ // Sometimes the Content-Type may be "application/json; charset=utf-8", for this reason, we need to check the start of the header
444
+ const body = await (result.headers.get('Content-Type')?.startsWith('application/json') ? result.json() : result.text()).catch(()=>null);
445
+ rest.events.response(request, result, {
446
+ requestBody: options?.body,
447
+ responseBody: body
448
+ });
423
449
  if (!result.ok) {
424
- // Sometime the Content-Type may be "application/json; charset=utf-8", for this reason we need to check the start of the header
425
- const body = await (result.headers.get('Content-Type')?.startsWith('application/json') ? result.json() : result.text()).catch(()=>null);
426
450
  error.cause = Object.assign(Object.create(baseErrorPrototype), {
427
451
  ok: false,
428
452
  status: result.status,
@@ -430,7 +454,7 @@ export function createRestManager(options) {
430
454
  });
431
455
  throw error;
432
456
  }
433
- return result.status !== 204 ? await result.json() : undefined;
457
+ return result.status !== 204 ? typeof body === 'string' ? JSON.parse(body) : body : undefined;
434
458
  }
435
459
  return await new Promise(async (resolve, reject)=>{
436
460
  const payload = {
@@ -442,7 +466,7 @@ export function createRestManager(options) {
442
466
  await rest.processRequest(payload);
443
467
  },
444
468
  resolve: (data)=>{
445
- resolve(data.status !== 204 ? JSON.parse(data.body ?? '{}') : undefined);
469
+ resolve(data.status !== 204 ? typeof data.body === 'string' ? JSON.parse(data.body) : data.body : undefined);
446
470
  },
447
471
  reject: (reason)=>{
448
472
  let errorText;
@@ -1574,4 +1598,4 @@ var HttpResponseCode = /*#__PURE__*/ function(HttpResponseCode) {
1574
1598
  return HttpResponseCode;
1575
1599
  }(HttpResponseCode || {});
1576
1600
 
1577
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHsgdHlwZSBJbnNwZWN0T3B0aW9ucywgaW5zcGVjdCB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB0eXBlIHtcbiAgQmlnU3RyaW5nLFxuICBDYW1lbGl6ZSxcbiAgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIERpc2NvcmRBY3Rpdml0eUluc3RhbmNlLFxuICBEaXNjb3JkQXBwbGljYXRpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRCdWxrQmFuLFxuICBEaXNjb3JkQ2hhbm5lbCxcbiAgRGlzY29yZENvbm5lY3Rpb24sXG4gIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRW50aXRsZW1lbnQsXG4gIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgRGlzY29yZEd1aWxkLFxuICBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgRGlzY29yZEd1aWxkT25ib2FyZGluZyxcbiAgRGlzY29yZEd1aWxkUHJldmlldyxcbiAgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICBEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncyxcbiAgRGlzY29yZEluY2lkZW50c0RhdGEsXG4gIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZSxcbiAgRGlzY29yZEludml0ZSxcbiAgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICBEaXNjb3JkTG9iYnksXG4gIERpc2NvcmRMb2JieU1lbWJlcixcbiAgRGlzY29yZE1lbWJlcixcbiAgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICBEaXNjb3JkTWVzc2FnZSxcbiAgRGlzY29yZFBydW5lZENvdW50LFxuICBEaXNjb3JkUm9sZSxcbiAgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICBEaXNjb3JkU2t1LFxuICBEaXNjb3JkU291bmRib2FyZFNvdW5kLFxuICBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgRGlzY29yZFN0aWNrZXIsXG4gIERpc2NvcmRTdGlja2VyUGFjayxcbiAgRGlzY29yZFN1YnNjcmlwdGlvbixcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVXNlcixcbiAgRGlzY29yZFZhbml0eVVybCxcbiAgRGlzY29yZFZvaWNlUmVnaW9uLFxuICBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgRGlzY29yZFdlYmhvb2ssXG4gIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIERJU0NPUkRFTk9fVkVSU0lPTixcbiAgY2FsY3VsYXRlQml0cyxcbiAgY2FtZWxUb1NuYWtlQ2FzZSxcbiAgY2FtZWxpemUsXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaGFzUHJvcGVydHksXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICB1cmxUb0Jhc2U2NCxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCB9IGZyb20gJy4vaW52YWxpZEJ1Y2tldC5qcydcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSAnLi9xdWV1ZS5qcydcbmltcG9ydCB7IGNyZWF0ZVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucywgTWFrZVJlcXVlc3RPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1ZFUlNJT04gPSAxMFxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1VSTCA9ICdodHRwczovL2Rpc2NvcmQuY29tL2FwaSdcblxuZXhwb3J0IGNvbnN0IEFVRElUX0xPR19SRUFTT05fSEVBREVSID0gJ3gtYXVkaXQtbG9nLXJlYXNvbidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIgPSAneC1yYXRlbGltaXQtcmVtYWluaW5nJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlc2V0LWFmdGVyJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1nbG9iYWwnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWJ1Y2tldCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1saW1pdCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1zY29wZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3RNYW5hZ2VyKG9wdGlvbnM6IENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyk6IFJlc3RNYW5hZ2VyIHtcbiAgY29uc3QgYXBwbGljYXRpb25JZCA9IG9wdGlvbnMuYXBwbGljYXRpb25JZCA/IEJpZ0ludChvcHRpb25zLmFwcGxpY2F0aW9uSWQpIDogZ2V0Qm90SWRGcm9tVG9rZW4ob3B0aW9ucy50b2tlbilcblxuICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5wcm94eT8uYmFzZVVybCA/PyBESVNDT1JEX0FQSV9VUkxcbiAgLy8gRGlzY29yZCBlcnJvciBjYW4gZ2V0IG5lc3RlZCBhIGxvdCwgc28gd2UgdXNlIGEgY3VzdG9tIGluc3BlY3QgdG8gY2hhbmdlIHRoZSBkZXB0aCB0byBJbmZpbml0eVxuICBjb25zdCBiYXNlRXJyb3JQcm90b3R5cGUgPSB7XG4gICAgW2luc3BlY3QuY3VzdG9tXShfZGVwdGg6IG51bWJlciwgb3B0aW9uczogSW5zcGVjdE9wdGlvbnMsIF9pbnNwZWN0OiB0eXBlb2YgaW5zcGVjdCkge1xuICAgICAgcmV0dXJuIF9pbnNwZWN0KHRoaXMsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgZGVwdGg6IEluZmluaXR5LFxuICAgICAgICAvLyBTaW5jZSB3ZSBjYWxsIGluc3BlY3Qgb24gb3Vyc2VsZiwgd2UgbmVlZCB0byBkaXNhYmxlIHRoZSBjYWxscyB0byB0aGUgaW5zcGVjdC5jdXN0b20gc3ltYm9sIG9yIGVsc2UgaXQgd2lsbCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wLlxuICAgICAgICBjdXN0b21JbnNwZWN0OiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG5cbiAgICByb3V0ZXM6IGNyZWF0ZVJvdXRlcygpLFxuXG4gICAgY3JlYXRlQmFzZUhlYWRlcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGBEaXNjb3JkQm90IChodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vLCB2JHtESVNDT1JERU5PX1ZFUlNJT059KWAsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwsIGlkZW50aWZpZXIpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApXG5cbiAgICAgIGNvbnN0IGdsb2JhbCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoJ2dsb2JhbCcpXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGlmIChyYXRlbGltaXRlZCAmJiBub3cgPCByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JhbCAmJiBub3cgPCBnbG9iYWwucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlVG9rZW5RdWV1ZXMob2xkVG9rZW4sIG5ld1Rva2VuKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKCFyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlRoZSAncHJveHkudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCcgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCB3aGVuIHVzaW5nIGEgcmVzdCBwcm94eSBhbmQgbmVlZGVkIHRvIGNhbGwgJ3VwZGF0ZVRva2VuUXVldWVzJ1wiLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5cbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9LyR7cmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50fWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvbGRUb2tlbixcbiAgICAgICAgICAgIG5ld1Rva2VuLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0lkZW50aWZpZXIgPSBgQmVhcmVyICR7bmV3VG9rZW59YFxuXG4gICAgICAvLyBVcGRhdGUgYWxsIHRoZSBxdWV1ZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgcXVldWVdIG9mIHJlc3QucXVldWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnF1ZXVlcy5kZWxldGUoa2V5KVxuICAgICAgICBxdWV1ZS5pZGVudGlmaWVyID0gbmV3SWRlbnRpZmllclxuXG4gICAgICAgIGNvbnN0IG5ld0tleSA9IGAke25ld0lkZW50aWZpZXJ9JHtxdWV1ZS51cmx9YFxuICAgICAgICBjb25zdCBuZXdRdWV1ZSA9IHJlc3QucXVldWVzLmdldChuZXdLZXkpXG5cbiAgICAgICAgLy8gTWVyZ2UgdGhlIHF1ZXVlc1xuICAgICAgICBpZiAobmV3UXVldWUpIHtcbiAgICAgICAgICBuZXdRdWV1ZS53YWl0aW5nLnVuc2hpZnQoLi4ucXVldWUud2FpdGluZylcbiAgICAgICAgICBuZXdRdWV1ZS5wZW5kaW5nLnVuc2hpZnQoLi4ucXVldWUucGVuZGluZylcblxuICAgICAgICAgIHF1ZXVlLndhaXRpbmcgPSBbXVxuICAgICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBbXVxuXG4gICAgICAgICAgcXVldWUuY2xlYW51cCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KG5ld0tleSwgcXVldWUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCByYXRlbGltaXRQYXRoXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGgudXJsfWAsIHJhdGVsaW1pdFBhdGgpXG5cbiAgICAgICAgaWYgKHJhdGVsaW1pdFBhdGguYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0lkZW50aWZpZXJ9JHtyYXRlbGltaXRQYXRoLmJ1Y2tldElkfWAsIHJhdGVsaW1pdFBhdGgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9iajogYW55KTogYW55IHtcbiAgICAgIGlmIChvYmogPT09IG51bGwpIHJldHVybiBudWxsXG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgcmV0dXJuIG9iai5tYXAoKGl0ZW0pID0+IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KGl0ZW0pKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3T2JqOiBhbnkgPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldXG5cbiAgICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gc25ha2VfY2FzZSB3ZSBjYW4gYXNzdW1lIGl0IGlzIGFscmVhZHkgaW4gdGhlIGRpc2NvcmQgZm9ybWF0LlxuICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTb21lIGZhbHN5IHZhbHVlcyBzaG91bGQgYmUgYWxsb3dlZCBsaWtlIG51bGwgb3IgMFxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICBjYXNlICdwZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2FsbG93JzpcbiAgICAgICAgICAgICAgY2FzZSAnZGVueSc6XG4gICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRNZW1iZXJQZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICduYW1lTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLm5hbWVfbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVzY3JpcHRpb25Mb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdPYmpbY2FtZWxUb1NuYWtlQ2FzZShrZXkpXSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld09ialxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHJldHVybiBvYmoudG9TdHJpbmcoKVxuXG4gICAgICByZXR1cm4gb2JqXG4gICAgfSxcblxuICAgIGNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuY3JlYXRlQmFzZUhlYWRlcnMoKVxuXG4gICAgICBpZiAob3B0aW9ucz8udW5hdXRob3JpemVkICE9PSB0cnVlKSBoZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIC8vIElGIEEgUkVBU09OIElTIFBST1ZJREVEIEVOQ09ERSBJVCBJTiBIRUFERVJTXG4gICAgICBpZiAob3B0aW9ucz8ucmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVhZGVyc1tBVURJVF9MT0dfUkVBU09OX0hFQURFUl0gPSBlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucz8ucmVhc29uKVxuICAgICAgfVxuXG4gICAgICBsZXQgYm9keTogc3RyaW5nIHwgRm9ybURhdGEgfCB1bmRlZmluZWRcblxuICAgICAgLy8gVE9ETzogY2hlY2sgaWYgd2UgbmVlZCB0byBhZGQgc3BlY2lmaWMgY2hlY2sgZm9yIEdFVCBtZXRob2RcbiAgICAgIC8vIFNpbmNlIEdFVCBkb2VzIG5vdCBhbGxvdyBib2RpZXNcblxuICAgICAgLy8gSGF2ZSB0byBjaGVjayBmb3IgYXR0YWNobWVudHMgZmlyc3QsIHNpbmNlIGJvZHkgdGhlbiBoYXMgdG8gYmUgc2VuZCBpbiBhIGRpZmZlcmVudCB3YXkuXG4gICAgICBpZiAob3B0aW9ucz8uZmlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmZpbGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoYGZpbGVzWyR7aX1dYCwgb3B0aW9ucy5maWxlc1tpXS5ibG9iLCBvcHRpb25zLmZpbGVzW2ldLm5hbWUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYXZlIHRvIHVzZSBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQgb3IgZWxzZSBKU09OLnN0cmluZ2lmeSBtYXkgdGhyb3cgYW4gZXJyb3IgZm9yIHRoZSBwcmVzZW5jZSBvZiBCaWdJbnQocykgaW4gdGhlIGpzb25cbiAgICAgICAgZm9ybS5hcHBlbmQoJ3BheWxvYWRfanNvbicsIEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHsgLi4ub3B0aW9ucy5ib2R5LCBmaWxlczogdW5kZWZpbmVkIH0pKSlcblxuICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIGJvZHkgPSBmb3JtXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgJiYgb3B0aW9ucy5oZWFkZXJzICYmIG9wdGlvbnMuaGVhZGVyc1snY29udGVudC10eXBlJ10gPT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7XG4gICAgICAgIC8vIE9BdXRoMiBib2R5IGhhbmRsaW5nXG4gICAgICAgIGNvbnN0IGZvcm1Cb2R5OiBzdHJpbmdbXSA9IFtdXG5cbiAgICAgICAgY29uc3QgZGlzY29yZEJvZHkgPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpXG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGRpc2NvcmRCb2R5KSB7XG4gICAgICAgICAgZm9ybUJvZHkucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc2NvcmRCb2R5W3Byb3BdKX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgYm9keSA9IGZvcm1Cb2R5LmpvaW4oJyYnKVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgYm9keSA9IG9wdGlvbnMuYm9keVxuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSlcbiAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGBhcHBsaWNhdGlvbi9qc29uYFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNPTUVUSU1FUyBTUEVDSUFMIEhFQURFUlMgKEUuRy4gQ1VTVE9NIEFVVEhPUklaQVRJT04pIE5FRUQgVE8gQkUgVVNFRFxuICAgICAgaWYgKG9wdGlvbnM/LmhlYWRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBvcHRpb25zLmhlYWRlcnMpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBmb3Igb2YgbG9vcC4gJHtcbiAgICAgICAgLy8gICB2YWx1ZS5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgICAvLyB9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgLy8gSWYgdGhlIHRpbWUgaGFzIG5vdCByZWFjaGVkIGNhbmNlbFxuICAgICAgICBpZiAodmFsdWUucmVzZXRUaW1lc3RhbXAgPiBub3cpIGNvbnRpbnVlXG5cbiAgICAgICAgLy8gUmF0ZSBsaW1pdCBpcyBvdmVyLCBkZWxldGUgdGhlIHJhdGUgbGltaXRlclxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZGVsZXRlKGtleSlcbiAgICAgICAgLy8gSWYgaXQgd2FzIGdsb2JhbCwgYWxzbyBtYXJrIHRoZSBnbG9iYWwgdmFsdWUgYXMgZmFsc2VcbiAgICAgICAgaWYgKGtleSA9PT0gJ2dsb2JhbCcpIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIEFMTCBQQVRIUyBBUkUgQ0xFQVJFRCBDQU4gQ0FOQ0VMIE9VVCFcbiAgICAgIGlmIChyZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSB0cnVlXG4gICAgICAgIC8vIFJFQ0hFQ0sgSU4gMSBTRUNPTkRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZygnW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBzZXRUaW1lb3V0LicpXG4gICAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICAgIH0sIDEwMDApXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKiBQcm9jZXNzZXMgdGhlIHJhdGUgbGltaXQgaGVhZGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBpdCBuZWVkcyB0byBiZSByYXRlIGxpbWl0ZWQgYW5kIHJldHVybnMgdGhlIGJ1Y2tldCBpZCBpZiBhdmFpbGFibGUgKi9cbiAgICBwcm9jZXNzSGVhZGVycyh1cmwsIGhlYWRlcnMsIGlkZW50aWZpZXIpIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEdFVCBBTEwgTkVDRVNTQVJZIEhFQURFUlNcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUilcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUilcbiAgICAgIC8vIHVuZGVmaW5lZCBvdmVycmlkZSBudWxsIG5lZWRlZCBmb3IgdHlwaW5nc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0xJTUlUX0hFQURFUilcblxuICAgICAgLy8gSWYgd2UgZGlkbid0IHJlY2VpdmVkIHRoZSBpZGVudGlmaWVyLCBmYWxsYmFjayB0byB0aGUgYm90IHRva2VuXG4gICAgICBpZGVudGlmaWVyID8/PSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIHJlc3QucXVldWVzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApPy5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHtcbiAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcgPyBOdW1iZXIocmVtYWluaW5nKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW50ZXJ2YWw6IHJldHJ5QWZ0ZXIgPyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IGxpbWl0ID8gTnVtYmVyKGxpbWl0KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIFVSTCBBUyBMSU1JVEVELCBJTVBPUlRBTlQgRk9SIE5FVyBSRVFVRVNUUyBCWSBVU0VSIFdJVEhPVVQgQlVDS0VUXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gLCB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTQVZFIFRIRSBCVUNLRVQgQVMgTElNSVRFRCBTSU5DRSBESUZGRVJFTlQgVVJMUyBNQVkgU0hBUkUgQSBCVUNLRVRcbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7YnVja2V0SWR9YCwge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgR0xPQkFMIExJTUlULCBNQVJLIElUIFJBVEUgTElNSVRFRCBHTE9CQUxMWVxuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gTnVtYmVyKGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpKSAqIDEwMDBcbiAgICAgICAgY29uc3QgZ2xvYmFsUmVzZXQgPSBEYXRlLm5vdygpICsgcmV0cnlBZnRlclxuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCA9IEdsb2JhbGx5IFJhdGUgTGltaXRlZF0gVVJMOiAke3VybH0gfCBHbG9iYWwgUmVzdDogJHtnbG9iYWxSZXNldH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSB0cnVlXG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICAgIH0sIHJldHJ5QWZ0ZXIpXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCgnZ2xvYmFsJywge1xuICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoaWRlbnRpZmllciwge1xuICAgICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJhdGVMaW1pdGVkICYmICFyZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhdGVMaW1pdGVkID8gYnVja2V0SWQgOiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtvcHRpb25zLnJvdXRlfWBcbiAgICAgIGNvbnN0IHBheWxvYWQgPSByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG9wdGlvbnMubWV0aG9kLCBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucylcblxuICAgICAgY29uc3QgbG9nZ2luZ0hlYWRlcnMgPSB7IC4uLnBheWxvYWQuaGVhZGVycyB9XG5cbiAgICAgIGlmIChwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgICBjb25zdCBhdXRob3JpemF0aW9uU2NoZW1lID0gcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24/LnNwbGl0KCcgJylbMF1cbiAgICAgICAgbG9nZ2luZ0hlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGAke2F1dGhvcml6YXRpb25TY2hlbWV9IHRva2VuaGVyZWBcbiAgICAgIH1cblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBwYXlsb2FkKS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYW5kIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMocmVzdC5zaW1wbGlmeVVybChvcHRpb25zLnJvdXRlLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMsIHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKVxuXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZFxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgSHR0cFJlc3BvbnNlQ29kZS5TdWNjZXNzIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSBIdHRwUmVzcG9uc2VDb2RlLkVycm9yKSB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQuYClcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBIdHRwUmVzcG9uc2VDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgPT09ICdhcHBsaWNhdGlvbi9qc29uJyA/ICgoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBvYmplY3QpIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpXG5cbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7IG9rOiBmYWxzZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsIGJvZHkgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnN1bWUgdGhlIHJlc3BvbnNlIGJvZHkgdG8gYXZvaWQgbGVha2luZyBtZW1vcnlcbiAgICAgICAgYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKVxuXG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZWxpbWl0ZWQuYClcbiAgICAgICAgLy8gVG9vIG1hbnkgYXR0ZW1wdHMsIGdldCByaWQgb2YgcmVxdWVzdCBmcm9tIHF1ZXVlLlxuICAgICAgICBpZiAob3B0aW9ucy5yZXRyeUNvdW50ID49IHJlc3QubWF4UmV0cnlDb3VudCkge1xuICAgICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBleGNlZWRlZCB0aGUgbWF4aW11bSBhbGxvd2VkIHJldHJpZXMuYCwgJ3dpdGggcGF5bG9hZDonLCBwYXlsb2FkKVxuICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgZXJyb3I6ICdUaGUgcmVxdWVzdCB3YXMgcmF0ZSBsaW1pdGVkIGFuZCBpdCBtYXhlZCBvdXQgdGhlIHJldHJpZXMgbGltaXQuJyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgICAgIGNvbnN0IHJlc2V0QWZ0ZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgICAgaWYgKHJlc2V0QWZ0ZXIpIGF3YWl0IGRlbGF5KE51bWJlcihyZXNldEFmdGVyKSAqIDEwMDApXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50LlxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuXG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbikge1xuICAgICAgICAgIG9wdGlvbnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke3JvdXRlfWAsIHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIC8vIFNvbWV0aW1lIHRoZSBDb250ZW50LVR5cGUgbWF5IGJlIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLCBmb3IgdGhpcyByZWFzb24gd2UgbmVlZCB0byBjaGVjayB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlclxuICAgICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCAocmVzdWx0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uc3RhcnRzV2l0aCgnYXBwbGljYXRpb24vanNvbicpID8gcmVzdWx0Lmpzb24oKSA6IHJlc3VsdC50ZXh0KCkpLmNhdGNoKCgpID0+IG51bGwpXG5cbiAgICAgICAgICBlcnJvci5jYXVzZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShiYXNlRXJyb3JQcm90b3R5cGUpLCB7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgIT09IDIwNCA/IGF3YWl0IHJlc3VsdC5qc29uKCkgOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICByZXF1ZXN0Qm9keU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIChwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyBKU09OLnBhcnNlKGRhdGEuYm9keSA/PyAne30nKSA6IHVuZGVmaW5lZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlamVjdDogKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yVGV4dDogc3RyaW5nXG5cbiAgICAgICAgICAgIHN3aXRjaCAocmVhc29uLnN0YXR1cykge1xuICAgICAgICAgICAgICBjYXNlIDQwMDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIlRoZSBvcHRpb25zIHdhcyBpbXByb3Blcmx5IGZvcm1hdHRlZCwgb3IgdGhlIHNlcnZlciBjb3VsZG4ndCB1bmRlcnN0YW5kIGl0LlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBBdXRob3JpemF0aW9uIGhlYWRlciB3YXMgbWlzc2luZyBvciBpbnZhbGlkLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEF1dGhvcml6YXRpb24gdG9rZW4geW91IHBhc3NlZCBkaWQgbm90IGhhdmUgcGVybWlzc2lvbiB0byB0aGUgcmVzb3VyY2UuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiVGhlIHJlc291cmNlIGF0IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgZG9lc24ndCBleGlzdC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDA1OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgSFRUUCBtZXRob2QgdXNlZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDI5OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiWW91J3JlIGJlaW5nIHJhdGVsaW1pdGVkLlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA1MDI6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZXJlIHdhcyBub3QgYSBnYXRld2F5IGF2YWlsYWJsZSB0byBwcm9jZXNzIHlvdXIgb3B0aW9ucy4gV2FpdCBhIGJpdCBhbmQgcmV0cnkuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gcmVhc29uLnN0YXR1c1RleHQgPz8gJ1Vua25vd24gZXJyb3InXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgWyR7cmVhc29uLnN0YXR1c31dICR7ZXJyb3JUZXh0fWBcblxuICAgICAgICAgICAgLy8gSWYgZGlzY29yZCBzZW50IHVzIEpTT04sIGl0IGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIGFuIGVycm9yIG1lc3NhZ2UgZnJvbSB3aGljaCB3ZSBjYW4gZ2V0IGFuZCBhZGQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IgdG8gdGhlIGVycm9yIG1lc3NhZ2UsIHRoZSBmdWxsIGJvZHkgd2lsbCBiZSBpbiB0aGUgZXJyb3IuY2F1c2VcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3JlZmVyZW5jZSNlcnJvci1tZXNzYWdlc1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWFzb24uYm9keSA9PT0gJ29iamVjdCcgJiYgaGFzUHJvcGVydHkocmVhc29uLmJvZHksICdjb2RlJykgJiYgaGFzUHJvcGVydHkocmVhc29uLmJvZHksICdtZXNzYWdlJykpIHtcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBgXFxuRGlzY29yZCBlcnJvcjogWyR7cmVhc29uLmJvZHkuY29kZX1dICR7cmVhc29uLmJvZHkubWVzc2FnZX1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGJhc2VFcnJvclByb3RvdHlwZSksIHJlYXNvbilcbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJ1blRocm91Z2hRdWV1ZTogb3B0aW9ucz8ucnVuVGhyb3VnaFF1ZXVlLFxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnR0VUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgcG9zdDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BPU1QnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwYXRjaDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgcHV0PFQgPSB2b2lkPih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQVVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb25zLCBvcmRlcmVkID0gZmFsc2UpIHtcbiAgICAgIGlmICghb3JkZXJlZCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICByZWFjdGlvbnMubWFwKGFzeW5jIChyZWFjdGlvbikgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcmVhY3Rpb24gb2YgcmVhY3Rpb25zKSB7XG4gICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZERtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBdXRvbW9kUnVsZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUNoYW5uZWwoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUVtb2ppKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUFwcGxpY2F0aW9uRW1vamkoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamlzKHJlc3QuYXBwbGljYXRpb25JZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgIGZvcm0uYXBwZW5kKCdmaWxlJywgb3B0aW9ucy5maWxlLmJsb2IsIG9wdGlvbnMuZmlsZS5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBvcHRpb25zLmRlc2NyaXB0aW9uKVxuICAgICAgZm9ybS5hcHBlbmQoJ3RhZ3MnLCBvcHRpb25zLnRhZ3MpXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSwgeyBib2R5OiBmb3JtLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVGb3J1bVRocmVhZChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9ydW0oY2hhbm5lbElkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcywgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUludml0ZShjaGFubmVsSWQsIGJvZHkgPSB7fSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRJbnZpdGU+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlUm9sZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTdGFnZUluc3RhbmNlKGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2VzKCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVdlYmhvb2soY2hhbm5lbElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICBhdmF0YXI6IG9wdGlvbnMuYXZhdGFyID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucy5hdmF0YXIpIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRW1vamkoZ3VpbGRJZCwgaWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXBwbGljYXRpb25FbW9qaShpZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnZpdGUoaW52aXRlQ29kZSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZHMsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmJ1bGsoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VJZHMuc2xpY2UoMCwgMTAwKS5tYXAoKGlkKSA9PiBpZC50b1N0cmluZygpKSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPd25SZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0FsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmFsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0Vtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5lbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSb2xlKGd1aWxkSWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVVzZXJSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgdXNlcklkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy51c2VyKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9vayh3ZWJob29rSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgY29tbWFuZElkLCBiZWFyZXJUb2tlbiwgcGVybWlzc2lvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGVhZGVyczogeyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCB9LFxuICAgICAgICB9LFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdFByb2ZpbGUob3B0aW9ucykge1xuICAgICAgY29uc3QgYXZhdGFyID0gb3B0aW9ucz8uYm90QXZhdGFyVVJMID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucz8uYm90QXZhdGFyVVJMKSA6IG9wdGlvbnM/LmJvdEF2YXRhclVSTFxuICAgICAgY29uc3QgYmFubmVyID0gb3B0aW9ucz8uYm90QmFubmVyVVJMID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucz8uYm90QmFubmVyVVJMKSA6IG9wdGlvbnM/LmJvdEJhbm5lclVSTFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMuY3VycmVudFVzZXIoKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWU/LnRyaW0oKSxcbiAgICAgICAgICBhdmF0YXIsXG4gICAgICAgICAgYmFubmVyLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWwoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyhjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgYm9keS5pZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUG9zaXRpb25zKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEVtb2ppKGd1aWxkSWQsIGlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uRW1vamkoaWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGlkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBib2R5OiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHJlcXVlc3RUb1NwZWFrVGltZXN0YW1wOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wXG4gICAgICAgICAgICA/IG5ldyBEYXRlKG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGUoZ3VpbGRJZCwgcm9sZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlUG9zaXRpb25zKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCB0b3BpYywgcmVhc29uPzogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyBib2R5OiB7IHRvcGljIH0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgb3B0aW9ucy51c2VySWQpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2sod2ViaG9va0lkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2VsY29tZVNjcmVlbihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdpZGdldFNldHRpbmdzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4ZWN1dGVXZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9sbG93QW5ub3VuY2VtZW50KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9sbG93KHNvdXJjZUNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHdlYmhvb2tDaGFubmVsSWQ6IHRhcmdldENoYW5uZWxJZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QWN0aXZlVGhyZWFkcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBY3RpdmVUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFjdGl2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbihndWlsZElkLCBjb21tYW5kSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXT4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9ucyhvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuYXBwbGljYXRpb24oKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uSW5mbyhib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8odG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5jdXJyZW50QXV0aG9yaXphdGlvbigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhjaGFuZ2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYm9keS5ncmFudFR5cGUgPT09ICdjbGllbnRfY3JlZGVudGlhbHMnKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLmJvZHkuc2NvcGUgPSBib2R5LnNjb3BlLmpvaW4oJyAnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBY2Nlc3NUb2tlblJlc3BvbnNlPihyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5FeGNoYW5nZSgpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgcmV2b2tlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuUmV2b2tlKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdWRpdExvZyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1ZGl0TG9nPihyZXN0LnJvdXRlcy5ndWlsZHMuYXVkaXRsb2dzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5yZWdpb25zKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW5zKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsSW52aXRlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVscyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWxbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsV2ViaG9va3MoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RG1DaGFubmVsKHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5OiB7IHJlY2lwaWVudElkOiB1c2VySWQgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdyb3VwRG1DaGFubmVsKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaShlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppW10+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamlzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRFbW9qaVtdIH0+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamlzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHYXRld2F5Qm90KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRHYXRld2F5Qm90PihyZXN0LnJvdXRlcy5nYXRld2F5Qm90KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGQoZ3VpbGRJZCwgb3B0aW9ucyA9IHsgY291bnRzOiB0cnVlIH0pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkLCBvcHRpb25zLmNvdW50cykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkcyh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgY29uc3QgbWFrZVJlcXVlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgfCB1bmRlZmluZWQgPSB0b2tlblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PFBhcnRpYWw8RGlzY29yZEd1aWxkPltdPihyZXN0LnJvdXRlcy5ndWlsZHMudXNlckd1aWxkcyhvcHRpb25zKSwgbWFrZVJlcXVlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFjaz4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2tzKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsUGlucyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldChyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGlucyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQaW5uZWRNZXNzYWdlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5waW5zKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmpvaW5lZChjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcnVuZUNvdW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUHJ1bmVkQ291bnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5wcnVuZShndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnB1YmxpYyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZShndWlsZElkLCByb2xlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3duVm9pY2VTdGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuZ2V0VXNlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRVc2VyKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQ29ubmVjdGlvbnModG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ29ubmVjdGlvbltdPihyZXN0LnJvdXRlcy5vYXV0aDIuY29ubmVjdGlvbnMoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHZvaWQgfCBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuLCBwYXJhbXMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmRhdGE/LmZpbGVzLFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kTWVzc2FnZShjaGFubmVsSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFsbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQb2xsQW5zd2VyVm90ZXJzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy52b3RlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlbmRQb2xsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy5leHBpcmUoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYnVsa0Jhbk1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRCdWxrQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5idWxrQmFuKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90TWVtYmVyKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudE1lbWJlcihndWlsZElkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuY3VycmVudE1lbWJlcihndWlsZElkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBY3Rpdml0eUluc3RhbmNlPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkT25ib2FyZGluZyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEluY2lkZW50c0RhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbmNpZGVudEFjdGlvbnMoZ3VpbGRJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkR3VpbGRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U2t1cyhhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNrdVtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc2t1cyhhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uW10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb24+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFNvdW5kYm9hcmRTb3VuZChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLnNlbmRTb3VuZChjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RGVmYXVsdFNvdW5kYm9hcmRTb3VuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmxpc3REZWZhdWx0KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RHdWlsZFNvdW5kYm9hcmRTb3VuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRTb3VuZGJvYXJkU291bmRbXSB9PihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0QXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUxvYmJ5KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5jcmVhdGUoKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TG9iYnkobG9iYnlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUxvYmJ5KGxvYmJ5SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUxvYmJ5KGxvYmJ5SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5sb2JieShsb2JieUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkTWVtYmVyVG9Mb2JieShsb2JieUlkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkTG9iYnlNZW1iZXI+KHJlc3Qucm91dGVzLmxvYmJ5Lm1lbWJlcihsb2JieUlkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVNZW1iZXJGcm9tTG9iYnkobG9iYnlJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubWVtYmVyKGxvYmJ5SWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5sZWF2ZShsb2JieUlkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpbmtDaGFubmVsVG9Mb2JieShsb2JieUlkLCBiZWFyZXJUb2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5saW5rKGxvYmJ5SWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5saW5rQ2hhbm5lbFRvTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubGluayhsb2JieUlkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkJ1ZmZlciIsImluc3BlY3QiLCJESVNDT1JERU5PX1ZFUlNJT04iLCJjYWxjdWxhdGVCaXRzIiwiY2FtZWxUb1NuYWtlQ2FzZSIsImNhbWVsaXplIiwiZGVsYXkiLCJnZXRCb3RJZEZyb21Ub2tlbiIsImhhc1Byb3BlcnR5IiwibG9nZ2VyIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwidXJsVG9CYXNlNjQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsIlF1ZXVlIiwiY3JlYXRlUm91dGVzIiwiRElTQ09SRF9BUElfVkVSU0lPTiIsIkRJU0NPUkRfQVBJX1VSTCIsIkFVRElUX0xPR19SRUFTT05fSEVBREVSIiwiUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSIiwiUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfU0NPUEVfSEVBREVSIiwiY3JlYXRlUmVzdE1hbmFnZXIiLCJvcHRpb25zIiwiYXBwbGljYXRpb25JZCIsIkJpZ0ludCIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwiYmFzZUVycm9yUHJvdG90eXBlIiwiY3VzdG9tIiwiX2RlcHRoIiwiX2luc3BlY3QiLCJkZXB0aCIsIkluZmluaXR5IiwiY3VzdG9tSW5zcGVjdCIsInJlc3QiLCJhdXRob3JpemF0aW9uIiwiYXV0aG9yaXphdGlvbkhlYWRlciIsImRlbGV0ZVF1ZXVlRGVsYXkiLCJnbG9iYWxseVJhdGVMaW1pdGVkIiwiaW52YWxpZEJ1Y2tldCIsImlzUHJveGllZCIsInN0YXJ0c1dpdGgiLCJ1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50IiwibWF4UmV0cnlDb3VudCIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsInZlcnNpb24iLCJyb3V0ZXMiLCJjcmVhdGVCYXNlSGVhZGVycyIsImNoZWNrUmF0ZUxpbWl0cyIsInVybCIsImlkZW50aWZpZXIiLCJyYXRlbGltaXRlZCIsImdldCIsImdsb2JhbCIsIm5vdyIsIkRhdGUiLCJyZXNldFRpbWVzdGFtcCIsInVwZGF0ZVRva2VuUXVldWVzIiwib2xkVG9rZW4iLCJuZXdUb2tlbiIsIkVycm9yIiwiaGVhZGVycyIsInVuZGVmaW5lZCIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXdJZGVudGlmaWVyIiwia2V5IiwicXVldWUiLCJlbnRyaWVzIiwiZGVsZXRlIiwibmV3S2V5IiwibmV3UXVldWUiLCJ3YWl0aW5nIiwidW5zaGlmdCIsInBlbmRpbmciLCJjbGVhbnVwIiwic2V0IiwicmF0ZWxpbWl0UGF0aCIsImJ1Y2tldElkIiwiY2hhbmdlVG9EaXNjb3JkRm9ybWF0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIm5ld09iaiIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsImluY2x1ZGVzIiwiZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMiLCJuYW1lX2xvY2FsaXphdGlvbnMiLCJkZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zIiwidG9TdHJpbmciLCJjcmVhdGVSZXF1ZXN0Qm9keSIsInVuYXV0aG9yaXplZCIsInJlYXNvbiIsImVuY29kZVVSSUNvbXBvbmVudCIsImZpbGVzIiwiZm9ybSIsIkZvcm1EYXRhIiwiaSIsImxlbmd0aCIsImFwcGVuZCIsImJsb2IiLCJuYW1lIiwiZm9ybUJvZHkiLCJkaXNjb3JkQm9keSIsInByb3AiLCJwdXNoIiwiam9pbiIsImFzc2lnbiIsInByb2Nlc3NSYXRlTGltaXRlZFBhdGhzIiwic2l6ZSIsInNldFRpbWVvdXQiLCJwcm9jZXNzSGVhZGVycyIsInJhdGVMaW1pdGVkIiwicmVtYWluaW5nIiwicmV0cnlBZnRlciIsInJlc2V0IiwiTnVtYmVyIiwibGltaXQiLCJoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0IiwiaW50ZXJ2YWwiLCJtYXgiLCJnbG9iYWxSZXNldCIsInNlbmRSZXF1ZXN0Iiwicm91dGUiLCJwYXlsb2FkIiwicmVxdWVzdEJvZHlPcHRpb25zIiwibG9nZ2luZ0hlYWRlcnMiLCJhdXRob3JpemF0aW9uU2NoZW1lIiwic3BsaXQiLCJkZWJ1ZyIsInJlc3BvbnNlIiwiY2F0Y2giLCJlcnJvciIsInJlamVjdCIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInNpbXBsaWZ5VXJsIiwianNvbiIsInRleHQiLCJhcnJheUJ1ZmZlciIsInJldHJ5Q291bnQiLCJyZXNldEFmdGVyIiwicmV0cnlSZXF1ZXN0IiwicmVzb2x2ZSIsInBhcnRzIiwic2Vjb25kTGFzdFBhcnQiLCJzcGxpY2UiLCJwcm9jZXNzUmVxdWVzdCIsInJlcXVlc3QiLCJydW5UaHJvdWdoUXVldWUiLCJxdWV1ZUlkZW50aWZpZXIiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwicmVzdWx0IiwiY2F1c2UiLCJjcmVhdGUiLCJQcm9taXNlIiwiZGF0YSIsInBhcnNlIiwiZXJyb3JUZXh0IiwibWVzc2FnZSIsImNvZGUiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJhZGRSZWFjdGlvbiIsImNoYW5uZWxJZCIsIm1lc3NhZ2VJZCIsInJlYWN0aW9uIiwiY2hhbm5lbHMiLCJyZWFjdGlvbnMiLCJib3QiLCJhZGRSZWFjdGlvbnMiLCJvcmRlcmVkIiwiYWxsIiwiYWRkUm9sZSIsImd1aWxkSWQiLCJ1c2VySWQiLCJyb2xlSWQiLCJndWlsZHMiLCJyb2xlcyIsIm1lbWJlciIsImFkZFRocmVhZE1lbWJlciIsInRocmVhZHMiLCJ1c2VyIiwiYWRkRG1SZWNpcGllbnQiLCJkbVJlY2lwaWVudCIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiYXV0b21vZCIsInJ1bGVzIiwiY3JlYXRlQ2hhbm5lbCIsImNyZWF0ZUVtb2ppIiwiZW1vamlzIiwiY3JlYXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamlzIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwicmVzdE9wdGlvbnMiLCJiZWFyZXJUb2tlbiIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJmaWxlIiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwic3RpY2tlcnMiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwidGVtcGxhdGVzIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJmb3J1bSIsImNyZWF0ZUludml0ZSIsImludml0ZXMiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudHMiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwic3RhZ2VzIiwiY3JlYXRlV2ViaG9vayIsIndlYmhvb2tzIiwiYXZhdGFyIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJydWxlSWQiLCJydWxlIiwiZGVsZXRlQ2hhbm5lbCIsImNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwib3ZlcndyaXRlSWQiLCJvdmVyd3JpdGUiLCJkZWxldGVFbW9qaSIsImlkIiwiZW1vamkiLCJkZWxldGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsInJlc3BvbnNlcyIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNvbW1hbmRJZCIsImNvbW1hbmQiLCJkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsIm9uZSIsImRlbGV0ZUd1aWxkU3RpY2tlciIsInN0aWNrZXJJZCIsInN0aWNrZXIiLCJkZWxldGVHdWlsZFRlbXBsYXRlIiwidGVtcGxhdGVDb2RlIiwiZ3VpbGQiLCJkZWxldGVJbnRlZ3JhdGlvbiIsImludGVncmF0aW9uSWQiLCJpbnRlZ3JhdGlvbiIsImRlbGV0ZUludml0ZSIsImludml0ZUNvZGUiLCJpbnZpdGUiLCJkZWxldGVNZXNzYWdlIiwiZGVsZXRlTWVzc2FnZXMiLCJtZXNzYWdlSWRzIiwiYnVsayIsIm1lc3NhZ2VzIiwic2xpY2UiLCJkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJvcmlnaW5hbCIsImRlbGV0ZU93blJlYWN0aW9uIiwiZGVsZXRlUmVhY3Rpb25zQWxsIiwiZGVsZXRlUmVhY3Rpb25zRW1vamkiLCJkZWxldGVSb2xlIiwiZGVsZXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudElkIiwiZXZlbnQiLCJkZWxldGVTdGFnZUluc3RhbmNlIiwic3RhZ2UiLCJkZWxldGVVc2VyUmVhY3Rpb24iLCJkZWxldGVXZWJob29rIiwid2ViaG9va0lkIiwiZGVsZXRlV2ViaG9va01lc3NhZ2UiLCJkZWxldGVXZWJob29rV2l0aFRva2VuIiwid2ViaG9vayIsImVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbiIsImVkaXRBdXRvbW9kUnVsZSIsImVkaXRCb3RQcm9maWxlIiwiYm90QXZhdGFyVVJMIiwiYmFubmVyIiwiYm90QmFubmVyVVJMIiwiY3VycmVudFVzZXIiLCJ1c2VybmFtZSIsInRyaW0iLCJlZGl0Q2hhbm5lbCIsImVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyIsImVkaXRDaGFubmVsUG9zaXRpb25zIiwiZWRpdEVtb2ppIiwiZWRpdEFwcGxpY2F0aW9uRW1vamkiLCJlZGl0Rm9sbG93dXBNZXNzYWdlIiwiZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZCIsImVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZFN0aWNrZXIiLCJlZGl0R3VpbGRUZW1wbGF0ZSIsImVkaXRNZXNzYWdlIiwiZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImVkaXRPd25Wb2ljZVN0YXRlIiwidm9pY2UiLCJyZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCIsInRvSVNPU3RyaW5nIiwiZWRpdFNjaGVkdWxlZEV2ZW50IiwiZWRpdFJvbGUiLCJlZGl0Um9sZVBvc2l0aW9ucyIsImVkaXRTdGFnZUluc3RhbmNlIiwidG9waWMiLCJlZGl0VXNlclZvaWNlU3RhdGUiLCJlZGl0V2ViaG9vayIsImVkaXRXZWJob29rTWVzc2FnZSIsImVkaXRXZWJob29rV2l0aFRva2VuIiwiZWRpdFdlbGNvbWVTY3JlZW4iLCJ3ZWxjb21lIiwiZWRpdFdpZGdldFNldHRpbmdzIiwid2lkZ2V0IiwiZXhlY3V0ZVdlYmhvb2siLCJmb2xsb3dBbm5vdW5jZW1lbnQiLCJzb3VyY2VDaGFubmVsSWQiLCJ0YXJnZXRDaGFubmVsSWQiLCJmb2xsb3ciLCJ3ZWJob29rQ2hhbm5lbElkIiwiZ2V0QWN0aXZlVGhyZWFkcyIsImFjdGl2ZSIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24iLCJhY2Nlc3NUb2tlbiIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwiZ2V0QXBwbGljYXRpb25JbmZvIiwib2F1dGgyIiwiYXBwbGljYXRpb24iLCJlZGl0QXBwbGljYXRpb25JbmZvIiwiZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyIsImN1cnJlbnRBdXRob3JpemF0aW9uIiwiZXhjaGFuZ2VUb2tlbiIsImNsaWVudElkIiwiY2xpZW50U2VjcmV0IiwiYmFzaWNDcmVkZW50aWFscyIsImZyb20iLCJncmFudFR5cGUiLCJzY29wZSIsInRva2VuRXhjaGFuZ2UiLCJyZXZva2VUb2tlbiIsInRva2VuUmV2b2tlIiwiZ2V0QXVkaXRMb2ciLCJhdWRpdGxvZ3MiLCJnZXRBdXRvbW9kUnVsZSIsImdldEF1dG9tb2RSdWxlcyIsImdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucyIsInJlZ2lvbnMiLCJnZXRCYW4iLCJtZW1iZXJzIiwiYmFuIiwiZ2V0QmFucyIsImJhbnMiLCJnZXRDaGFubmVsIiwiZ2V0Q2hhbm5lbEludml0ZXMiLCJnZXRDaGFubmVscyIsImdldENoYW5uZWxXZWJob29rcyIsImdldERtQ2hhbm5lbCIsImRtIiwicmVjaXBpZW50SWQiLCJnZXRHcm91cERtQ2hhbm5lbCIsImdldEVtb2ppIiwiZW1vamlJZCIsImdldEFwcGxpY2F0aW9uRW1vamkiLCJnZXRFbW9qaXMiLCJnZXRBcHBsaWNhdGlvbkVtb2ppcyIsImdldEZvbGxvd3VwTWVzc2FnZSIsImdldEdhdGV3YXlCb3QiLCJnYXRld2F5Qm90IiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkIiwiY291bnRzIiwiZ2V0R3VpbGRzIiwibWFrZVJlcXVlc3RPcHRpb25zIiwidXNlckd1aWxkcyIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGRQcmV2aWV3IiwicHJldmlldyIsImdldEd1aWxkVGVtcGxhdGUiLCJnZXRHdWlsZFRlbXBsYXRlcyIsImdldEd1aWxkV2ViaG9va3MiLCJnZXRJbnRlZ3JhdGlvbnMiLCJpbnRlZ3JhdGlvbnMiLCJnZXRJbnZpdGUiLCJnZXRJbnZpdGVzIiwiZ2V0TWVzc2FnZSIsImdldE1lc3NhZ2VzIiwiZ2V0U3RpY2tlclBhY2siLCJzdGlja2VyUGFja0lkIiwic3RpY2tlclBhY2siLCJnZXRTdGlja2VyUGFja3MiLCJzdGlja2VyUGFja3MiLCJnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJnZXRDaGFubmVsUGlucyIsIm1lc3NhZ2VQaW5zIiwiZ2V0UGlubmVkTWVzc2FnZXMiLCJwaW5zIiwiZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyIsInByaXZhdGUiLCJnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzIiwiam9pbmVkIiwiZ2V0UHJ1bmVDb3VudCIsInBydW5lIiwiZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzIiwicHVibGljIiwiZ2V0Um9sZXMiLCJnZXRSb2xlIiwiZ2V0U2NoZWR1bGVkRXZlbnQiLCJ3aXRoVXNlckNvdW50IiwiZ2V0U2NoZWR1bGVkRXZlbnRzIiwiZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyIsInVzZXJzIiwiZ2V0U2Vzc2lvbkluZm8iLCJnZXRTdGFnZUluc3RhbmNlIiwiZ2V0T3duVm9pY2VTdGF0ZSIsImdldFVzZXJWb2ljZVN0YXRlIiwiZ2V0U3RpY2tlciIsImdldEd1aWxkU3RpY2tlciIsImdldEd1aWxkU3RpY2tlcnMiLCJnZXRUaHJlYWRNZW1iZXIiLCJnZXRVc2VyIiwiZ2V0VGhyZWFkTWVtYmVycyIsImdldFJlYWN0aW9ucyIsImdldEN1cnJlbnRVc2VyIiwiZ2V0VXNlckNvbm5lY3Rpb25zIiwiY29ubmVjdGlvbnMiLCJnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsInJvbGVDb25uZWN0aW9ucyIsImdldFZhbml0eVVybCIsInZhbml0eSIsImdldFZvaWNlUmVnaW9ucyIsImdldFdlYmhvb2siLCJnZXRXZWJob29rTWVzc2FnZSIsImdldFdlYmhvb2tXaXRoVG9rZW4iLCJnZXRXZWxjb21lU2NyZWVuIiwiZ2V0V2lkZ2V0Iiwid2lkZ2V0SnNvbiIsImdldFdpZGdldFNldHRpbmdzIiwiam9pblRocmVhZCIsIm1lIiwibGVhdmVHdWlsZCIsImxlYXZlIiwibGVhdmVUaHJlYWQiLCJwdWJsaXNoTWVzc2FnZSIsImNyb3NzcG9zdCIsInJlbW92ZVJvbGUiLCJyZW1vdmVUaHJlYWRNZW1iZXIiLCJyZW1vdmVEbVJlY2lwaWVudCIsInNlbmRGb2xsb3d1cE1lc3NhZ2UiLCJzZW5kSW50ZXJhY3Rpb25SZXNwb25zZSIsImludGVyYWN0aW9uSWQiLCJwYXJhbXMiLCJjYWxsYmFjayIsInNlbmRNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRoTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UiLCJnZXRQb2xsQW5zd2VyVm90ZXJzIiwiYW5zd2VySWQiLCJwb2xscyIsInZvdGVzIiwiZW5kUG9sbCIsImV4cGlyZSIsInN5bmNHdWlsZFRlbXBsYXRlIiwiYmFuTWVtYmVyIiwiYnVsa0Jhbk1lbWJlcnMiLCJidWxrQmFuIiwiZWRpdEJvdE1lbWJlciIsImVkaXRNZW1iZXIiLCJnZXRNZW1iZXIiLCJnZXRDdXJyZW50TWVtYmVyIiwiY3VycmVudE1lbWJlciIsImdldE1lbWJlcnMiLCJnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJpbnN0YW5jZUlkIiwiYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwia2lja01lbWJlciIsInBpbk1lc3NhZ2UiLCJtZXNzYWdlUGluIiwicHJ1bmVNZW1iZXJzIiwic2VhcmNoTWVtYmVycyIsInF1ZXJ5Iiwic2VhcmNoIiwiZ2V0R3VpbGRPbmJvYXJkaW5nIiwib25ib2FyZGluZyIsImVkaXRHdWlsZE9uYm9hcmRpbmciLCJtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyIsImluY2lkZW50QWN0aW9ucyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInR5cGluZyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJhZGRHdWlsZE1lbWJlciIsImNyZWF0ZVRlc3RFbnRpdGxlbWVudCIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImxpc3RFbnRpdGxlbWVudHMiLCJnZXRFbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJlbnRpdGxlbWVudCIsImRlbGV0ZVRlc3RFbnRpdGxlbWVudCIsImNvbnN1bWVFbnRpdGxlbWVudCIsImxpc3RTa3VzIiwic2t1cyIsImxpc3RTdWJzY3JpcHRpb25zIiwic2t1SWQiLCJzdWJzY3JpcHRpb25zIiwiZ2V0U3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uSWQiLCJzdWJzY3JpcHRpb24iLCJzZW5kU291bmRib2FyZFNvdW5kIiwic291bmRib2FyZCIsInNlbmRTb3VuZCIsImxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcyIsImxpc3REZWZhdWx0IiwibGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyIsImd1aWxkU291bmRzIiwiZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQiLCJzb3VuZElkIiwiZ3VpbGRTb3VuZCIsImNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQiLCJkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImxpc3RBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyIsImFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YSIsInVwZGF0ZUFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwiY3JlYXRlTG9iYnkiLCJsb2JieSIsImdldExvYmJ5IiwibG9iYnlJZCIsIm1vZGlmeUxvYmJ5IiwiZGVsZXRlTG9iYnkiLCJhZGRNZW1iZXJUb0xvYmJ5IiwicmVtb3ZlTWVtYmVyRnJvbUxvYmJ5IiwibGVhdmVMb2JieSIsImxpbmtDaGFubmVsVG9Mb2JieSIsImxpbmsiLCJ1bmxpbmtDaGFubmVsVG9Mb2JieSIsInByZWZlclNuYWtlQ2FzZSIsImVuYWJsZWQiLCJjYW1lbGl6ZXIiLCJ4IiwiSHR0cFJlc3BvbnNlQ29kZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFBTSxRQUFRLGNBQWE7QUFDcEMsU0FBOEJDLE9BQU8sUUFBUSxZQUFXO0FBMkR4RCxTQUNFQyxrQkFBa0IsRUFDbEJDLGFBQWEsRUFDYkMsZ0JBQWdCLEVBQ2hCQyxRQUFRLEVBQ1JDLEtBQUssRUFDTEMsaUJBQWlCLEVBQ2pCQyxXQUFXLEVBQ1hDLE1BQU0sRUFDTkMscUJBQXFCLEVBQ3JCQyxXQUFXLFFBQ04sb0JBQW1C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
1601
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHsgdHlwZSBJbnNwZWN0T3B0aW9ucywgaW5zcGVjdCB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB0eXBlIHtcbiAgQmlnU3RyaW5nLFxuICBDYW1lbGl6ZSxcbiAgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIERpc2NvcmRBY3Rpdml0eUluc3RhbmNlLFxuICBEaXNjb3JkQXBwbGljYXRpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRCdWxrQmFuLFxuICBEaXNjb3JkQ2hhbm5lbCxcbiAgRGlzY29yZENvbm5lY3Rpb24sXG4gIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRW50aXRsZW1lbnQsXG4gIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgRGlzY29yZEd1aWxkLFxuICBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgRGlzY29yZEd1aWxkT25ib2FyZGluZyxcbiAgRGlzY29yZEd1aWxkUHJldmlldyxcbiAgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICBEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncyxcbiAgRGlzY29yZEluY2lkZW50c0RhdGEsXG4gIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZSxcbiAgRGlzY29yZEludml0ZSxcbiAgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICBEaXNjb3JkTG9iYnksXG4gIERpc2NvcmRMb2JieU1lbWJlcixcbiAgRGlzY29yZE1lbWJlcixcbiAgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICBEaXNjb3JkTWVzc2FnZSxcbiAgRGlzY29yZFBydW5lZENvdW50LFxuICBEaXNjb3JkUm9sZSxcbiAgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICBEaXNjb3JkU2t1LFxuICBEaXNjb3JkU291bmRib2FyZFNvdW5kLFxuICBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgRGlzY29yZFN0aWNrZXIsXG4gIERpc2NvcmRTdGlja2VyUGFjayxcbiAgRGlzY29yZFN1YnNjcmlwdGlvbixcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVXNlcixcbiAgRGlzY29yZFZhbml0eVVybCxcbiAgRGlzY29yZFZvaWNlUmVnaW9uLFxuICBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgRGlzY29yZFdlYmhvb2ssXG4gIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIERJU0NPUkRFTk9fVkVSU0lPTixcbiAgY2FsY3VsYXRlQml0cyxcbiAgY2FtZWxUb1NuYWtlQ2FzZSxcbiAgY2FtZWxpemUsXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaGFzUHJvcGVydHksXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICB1cmxUb0Jhc2U2NCxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCB9IGZyb20gJy4vaW52YWxpZEJ1Y2tldC5qcydcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSAnLi9xdWV1ZS5qcydcbmltcG9ydCB7IGNyZWF0ZVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucywgTWFrZVJlcXVlc3RPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1ZFUlNJT04gPSAxMFxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1VSTCA9ICdodHRwczovL2Rpc2NvcmQuY29tL2FwaSdcblxuZXhwb3J0IGNvbnN0IEFVRElUX0xPR19SRUFTT05fSEVBREVSID0gJ3gtYXVkaXQtbG9nLXJlYXNvbidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIgPSAneC1yYXRlbGltaXQtcmVtYWluaW5nJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlc2V0LWFmdGVyJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1nbG9iYWwnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWJ1Y2tldCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1saW1pdCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1zY29wZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3RNYW5hZ2VyKG9wdGlvbnM6IENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyk6IFJlc3RNYW5hZ2VyIHtcbiAgY29uc3QgYXBwbGljYXRpb25JZCA9IG9wdGlvbnMuYXBwbGljYXRpb25JZCA/IEJpZ0ludChvcHRpb25zLmFwcGxpY2F0aW9uSWQpIDogZ2V0Qm90SWRGcm9tVG9rZW4ob3B0aW9ucy50b2tlbilcblxuICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5wcm94eT8uYmFzZVVybCA/PyBESVNDT1JEX0FQSV9VUkxcbiAgLy8gRGlzY29yZCBlcnJvciBjYW4gZ2V0IG5lc3RlZCBhIGxvdCwgc28gd2UgdXNlIGEgY3VzdG9tIGluc3BlY3QgdG8gY2hhbmdlIHRoZSBkZXB0aCB0byBJbmZpbml0eVxuICBjb25zdCBiYXNlRXJyb3JQcm90b3R5cGUgPSB7XG4gICAgW2luc3BlY3QuY3VzdG9tXShfZGVwdGg6IG51bWJlciwgb3B0aW9uczogSW5zcGVjdE9wdGlvbnMsIF9pbnNwZWN0OiB0eXBlb2YgaW5zcGVjdCkge1xuICAgICAgcmV0dXJuIF9pbnNwZWN0KHRoaXMsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgZGVwdGg6IEluZmluaXR5LFxuICAgICAgICAvLyBTaW5jZSB3ZSBjYWxsIGluc3BlY3Qgb24gb3Vyc2VsZiwgd2UgbmVlZCB0byBkaXNhYmxlIHRoZSBjYWxscyB0byB0aGUgaW5zcGVjdC5jdXN0b20gc3ltYm9sIG9yIGVsc2UgaXQgd2lsbCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wLlxuICAgICAgICBjdXN0b21JbnNwZWN0OiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG4gICAgZXZlbnRzOiB7XG4gICAgICByZXF1ZXN0OiAoKSA9PiB7fSxcbiAgICAgIHJlc3BvbnNlOiAoKSA9PiB7fSxcbiAgICAgIHJlcXVlc3RFcnJvcjogKCkgPT4ge30sXG4gICAgICAuLi5vcHRpb25zLmV2ZW50cyxcbiAgICB9LFxuXG4gICAgcm91dGVzOiBjcmVhdGVSb3V0ZXMoKSxcblxuICAgIGNyZWF0ZUJhc2VIZWFkZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3VzZXItYWdlbnQnOiBgRGlzY29yZEJvdCAoaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmRlbm8vZGlzY29yZGVubywgdiR7RElTQ09SREVOT19WRVJTSU9OfSlgLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGVja1JhdGVMaW1pdHModXJsLCBpZGVudGlmaWVyKSB7XG4gICAgICBjb25zdCByYXRlbGltaXRlZCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gKVxuXG4gICAgICBjb25zdCBnbG9iYWwgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KCdnbG9iYWwnKVxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBpZiAocmF0ZWxpbWl0ZWQgJiYgbm93IDwgcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWwgJiYgbm93IDwgZ2xvYmFsLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZVRva2VuUXVldWVzKG9sZFRva2VuLCBuZXdUb2tlbikge1xuICAgICAgaWYgKHJlc3QuaXNQcm94aWVkKSB7XG4gICAgICAgIGlmICghcmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJUaGUgJ3Byb3h5LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQnIG9wdGlvbiBuZWVkcyB0byBiZSBzZXQgd2hlbiB1c2luZyBhIHJlc3QgcHJveHkgYW5kIG5lZWRlZCB0byBjYWxsICd1cGRhdGVUb2tlblF1ZXVlcydcIixcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuXG4gICAgICAgIGlmIChyZXN0LmF1dGhvcml6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgZmV0Y2goYCR7cmVzdC5iYXNlVXJsfS8ke3Jlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludH1gLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgb2xkVG9rZW4sXG4gICAgICAgICAgICBuZXdUb2tlbixcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdJZGVudGlmaWVyID0gYEJlYXJlciAke25ld1Rva2VufWBcblxuICAgICAgLy8gVXBkYXRlIGFsbCB0aGUgcXVldWVzXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHF1ZXVlXSBvZiByZXN0LnF1ZXVlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5xdWV1ZXMuZGVsZXRlKGtleSlcbiAgICAgICAgcXVldWUuaWRlbnRpZmllciA9IG5ld0lkZW50aWZpZXJcblxuICAgICAgICBjb25zdCBuZXdLZXkgPSBgJHtuZXdJZGVudGlmaWVyfSR7cXVldWUudXJsfWBcbiAgICAgICAgY29uc3QgbmV3UXVldWUgPSByZXN0LnF1ZXVlcy5nZXQobmV3S2V5KVxuXG4gICAgICAgIC8vIE1lcmdlIHRoZSBxdWV1ZXNcbiAgICAgICAgaWYgKG5ld1F1ZXVlKSB7XG4gICAgICAgICAgbmV3UXVldWUud2FpdGluZy51bnNoaWZ0KC4uLnF1ZXVlLndhaXRpbmcpXG4gICAgICAgICAgbmV3UXVldWUucGVuZGluZy51bnNoaWZ0KC4uLnF1ZXVlLnBlbmRpbmcpXG5cbiAgICAgICAgICBxdWV1ZS53YWl0aW5nID0gW11cbiAgICAgICAgICBxdWV1ZS5wZW5kaW5nID0gW11cblxuICAgICAgICAgIHF1ZXVlLmNsZWFudXAoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3QucXVldWVzLnNldChuZXdLZXksIHF1ZXVlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgcmF0ZWxpbWl0UGF0aF0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0lkZW50aWZpZXJ9JHtyYXRlbGltaXRQYXRoLnVybH1gLCByYXRlbGltaXRQYXRoKVxuXG4gICAgICAgIGlmIChyYXRlbGltaXRQYXRoLmJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC5idWNrZXRJZH1gLCByYXRlbGltaXRQYXRoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmo6IGFueSk6IGFueSB7XG4gICAgICBpZiAob2JqID09PSBudWxsKSByZXR1cm4gbnVsbFxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChpdGVtKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld09iajogYW55ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XVxuXG4gICAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBhbHJlYWR5IGluIHNuYWtlX2Nhc2Ugd2UgY2FuIGFzc3VtZSBpdCBpcyBhbHJlYWR5IGluIHRoZSBkaXNjb3JkIGZvcm1hdC5cbiAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfJykpIHtcbiAgICAgICAgICAgIG5ld09ialtrZXldID0gdmFsdWVcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU29tZSBmYWxzeSB2YWx1ZXMgc2hvdWxkIGJlIGFsbG93ZWQgbGlrZSBudWxsIG9yIDBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgY2FzZSAncGVybWlzc2lvbnMnOlxuICAgICAgICAgICAgICBjYXNlICdhbGxvdyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2RlbnknOlxuICAgICAgICAgICAgICAgIG5ld09ialtrZXldID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZWZhdWx0TWVtYmVyUGVybWlzc2lvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnbmFtZUxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5uYW1lX2xvY2FsaXphdGlvbnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2Rlc2NyaXB0aW9uTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3T2JqW2NhbWVsVG9TbmFrZUNhc2Uoa2V5KV0gPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh2YWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdPYmpcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdiaWdpbnQnKSByZXR1cm4gb2JqLnRvU3RyaW5nKClcblxuICAgICAgcmV0dXJuIG9ialxuICAgIH0sXG5cbiAgICBjcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmNyZWF0ZUJhc2VIZWFkZXJzKClcblxuICAgICAgaWYgKG9wdGlvbnM/LnVuYXV0aG9yaXplZCAhPT0gdHJ1ZSkgaGVhZGVycy5hdXRob3JpemF0aW9uID0gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICAvLyBJRiBBIFJFQVNPTiBJUyBQUk9WSURFRCBFTkNPREUgSVQgSU4gSEVBREVSU1xuICAgICAgaWYgKG9wdGlvbnM/LnJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhlYWRlcnNbQVVESVRfTE9HX1JFQVNPTl9IRUFERVJdID0gZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnM/LnJlYXNvbilcbiAgICAgIH1cblxuICAgICAgbGV0IGJvZHk6IHN0cmluZyB8IEZvcm1EYXRhIHwgdW5kZWZpbmVkXG5cbiAgICAgIC8vIFRPRE86IGNoZWNrIGlmIHdlIG5lZWQgdG8gYWRkIHNwZWNpZmljIGNoZWNrIGZvciBHRVQgbWV0aG9kXG4gICAgICAvLyBTaW5jZSBHRVQgZG9lcyBub3QgYWxsb3cgYm9kaWVzXG5cbiAgICAgIC8vIEhhdmUgdG8gY2hlY2sgZm9yIGF0dGFjaG1lbnRzIGZpcnN0LCBzaW5jZSBib2R5IHRoZW4gaGFzIHRvIGJlIHNlbmQgaW4gYSBkaWZmZXJlbnQgd2F5LlxuICAgICAgaWYgKG9wdGlvbnM/LmZpbGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5maWxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGBmaWxlc1ske2l9XWAsIG9wdGlvbnMuZmlsZXNbaV0uYmxvYiwgb3B0aW9ucy5maWxlc1tpXS5uYW1lKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGF2ZSB0byB1c2UgY2hhbmdlVG9EaXNjb3JkRm9ybWF0IG9yIGVsc2UgSlNPTi5zdHJpbmdpZnkgbWF5IHRocm93IGFuIGVycm9yIGZvciB0aGUgcHJlc2VuY2Ugb2YgQmlnSW50KHMpIGluIHRoZSBqc29uXG4gICAgICAgIGZvcm0uYXBwZW5kKCdwYXlsb2FkX2pzb24nLCBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh7IC4uLm9wdGlvbnMuYm9keSwgZmlsZXM6IHVuZGVmaW5lZCB9KSkpXG5cbiAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICBib2R5ID0gZm9ybVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICYmIG9wdGlvbnMuaGVhZGVycyAmJiBvcHRpb25zLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID09PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykge1xuICAgICAgICAvLyBPQXV0aDIgYm9keSBoYW5kbGluZ1xuICAgICAgICBjb25zdCBmb3JtQm9keTogc3RyaW5nW10gPSBbXVxuXG4gICAgICAgIGNvbnN0IGRpc2NvcmRCb2R5ID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KVxuXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBkaXNjb3JkQm9keSkge1xuICAgICAgICAgIGZvcm1Cb2R5LnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHByb3ApfT0ke2VuY29kZVVSSUNvbXBvbmVudChkaXNjb3JkQm9keVtwcm9wXSl9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkgPSBmb3JtQm9keS5qb2luKCcmJylcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgIGJvZHkgPSBvcHRpb25zLmJvZHlcbiAgICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSkpXG4gICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBgYXBwbGljYXRpb24vanNvbmBcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTT01FVElNRVMgU1BFQ0lBTCBIRUFERVJTIChFLkcuIENVU1RPTSBBVVRIT1JJWkFUSU9OKSBORUVEIFRPIEJFIFVTRURcbiAgICAgIGlmIChvcHRpb25zPy5oZWFkZXJzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oaGVhZGVycywgb3B0aW9ucy5oZWFkZXJzKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBtZXRob2QsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKCkge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgZm9yIG9mIGxvb3AuICR7XG4gICAgICAgIC8vICAgdmFsdWUucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgICAgLy8gfWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIC8vIElmIHRoZSB0aW1lIGhhcyBub3QgcmVhY2hlZCBjYW5jZWxcbiAgICAgICAgaWYgKHZhbHVlLnJlc2V0VGltZXN0YW1wID4gbm93KSBjb250aW51ZVxuXG4gICAgICAgIC8vIFJhdGUgbGltaXQgaXMgb3ZlciwgZGVsZXRlIHRoZSByYXRlIGxpbWl0ZXJcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmRlbGV0ZShrZXkpXG4gICAgICAgIC8vIElmIGl0IHdhcyBnbG9iYWwsIGFsc28gbWFyayB0aGUgZ2xvYmFsIHZhbHVlIGFzIGZhbHNlXG4gICAgICAgIGlmIChrZXkgPT09ICdnbG9iYWwnKSByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBBTEwgUEFUSFMgQVJFIENMRUFSRUQgQ0FOIENBTkNFTCBPVVQhXG4gICAgICBpZiAocmVzdC5yYXRlTGltaXRlZFBhdGhzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gdHJ1ZVxuICAgICAgICAvLyBSRUNIRUNLIElOIDEgU0VDT05EXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHJlc3QuZGVidWcoJ1tSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgc2V0VGltZW91dC4nKVxuICAgICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgICB9LCAxMDAwKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKiogUHJvY2Vzc2VzIHRoZSByYXRlIGxpbWl0IGhlYWRlcnMgYW5kIGRldGVybWluZXMgaWYgaXQgbmVlZHMgdG8gYmUgcmF0ZSBsaW1pdGVkIGFuZCByZXR1cm5zIHRoZSBidWNrZXQgaWQgaWYgYXZhaWxhYmxlICovXG4gICAgcHJvY2Vzc0hlYWRlcnModXJsLCBoZWFkZXJzLCBpZGVudGlmaWVyKSB7XG4gICAgICBsZXQgcmF0ZUxpbWl0ZWQgPSBmYWxzZVxuXG4gICAgICAvLyBHRVQgQUxMIE5FQ0VTU0FSWSBIRUFERVJTXG4gICAgICBjb25zdCByZW1haW5pbmcgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIpXG4gICAgICBjb25zdCByZXRyeUFmdGVyID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIpXG4gICAgICBjb25zdCByZXNldCA9IERhdGUubm93KCkgKyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwXG4gICAgICBjb25zdCBnbG9iYWwgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIpXG4gICAgICAvLyB1bmRlZmluZWQgb3ZlcnJpZGUgbnVsbCBuZWVkZWQgZm9yIHR5cGluZ3NcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSKSA/PyB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGxpbWl0ID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9MSU1JVF9IRUFERVIpXG5cbiAgICAgIC8vIElmIHdlIGRpZG4ndCByZWNlaXZlZCB0aGUgaWRlbnRpZmllciwgZmFsbGJhY2sgdG8gdGhlIGJvdCB0b2tlblxuICAgICAgaWRlbnRpZmllciA/Pz0gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICByZXN0LnF1ZXVlcy5nZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gKT8uaGFuZGxlQ29tcGxldGVkUmVxdWVzdCh7XG4gICAgICAgIHJlbWFpbmluZzogcmVtYWluaW5nID8gTnVtYmVyKHJlbWFpbmluZykgOiB1bmRlZmluZWQsXG4gICAgICAgIGludGVydmFsOiByZXRyeUFmdGVyID8gTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4OiBsaW1pdCA/IE51bWJlcihsaW1pdCkgOiB1bmRlZmluZWQsXG4gICAgICB9KVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgUkFURSBMSU1JVCwgTUFSSyBJVCBBUyBSQVRFIExJTUlURURcbiAgICAgIGlmIChyZW1haW5pbmcgPT09ICcwJykge1xuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICAvLyBTQVZFIFRIRSBVUkwgQVMgTElNSVRFRCwgSU1QT1JUQU5UIEZPUiBORVcgUkVRVUVTVFMgQlkgVVNFUiBXSVRIT1VUIEJVQ0tFVFxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgQlVDS0VUIEFTIExJTUlURUQgU0lOQ0UgRElGRkVSRU5UIFVSTFMgTUFZIFNIQVJFIEEgQlVDS0VUXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke2J1Y2tldElkfWAsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIEdMT0JBTCBMSU1JVCwgTUFSSyBJVCBSQVRFIExJTUlURUQgR0xPQkFMTFlcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IE51bWJlcihoZWFkZXJzLmdldCgncmV0cnktYWZ0ZXInKSkgKiAxMDAwXG4gICAgICAgIGNvbnN0IGdsb2JhbFJlc2V0ID0gRGF0ZS5ub3coKSArIHJldHJ5QWZ0ZXJcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgPSBHbG9iYWxseSBSYXRlIExpbWl0ZWRdIFVSTDogJHt1cmx9IHwgR2xvYmFsIFJlc3Q6ICR7Z2xvYmFsUmVzZXR9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gdHJ1ZVxuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgICB9LCByZXRyeUFmdGVyKVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoJ2dsb2JhbCcsIHtcbiAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGlkZW50aWZpZXIsIHtcbiAgICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyYXRlTGltaXRlZCAmJiAhcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocykge1xuICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByYXRlTGltaXRlZCA/IGJ1Y2tldElkIDogdW5kZWZpbmVkXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7b3B0aW9ucy5yb3V0ZX1gXG4gICAgICBjb25zdCBwYXlsb2FkID0gcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShvcHRpb25zLm1ldGhvZCwgb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnMpXG5cbiAgICAgIGNvbnN0IGxvZ2dpbmdIZWFkZXJzID0geyAuLi5wYXlsb2FkLmhlYWRlcnMgfVxuXG4gICAgICBpZiAocGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgY29uc3QgYXV0aG9yaXphdGlvblNjaGVtZSA9IHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uPy5zcGxpdCgnICcpWzBdXG4gICAgICAgIGxvZ2dpbmdIZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9uU2NoZW1lfSB0b2tlbmhlcmVgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHBheWxvYWQpXG4gICAgICByZXN0LmV2ZW50cy5yZXF1ZXN0KHJlcXVlc3QsIHtcbiAgICAgICAgYm9keTogb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnM/LmJvZHksXG4gICAgICB9KVxuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIHJlc3QuZXZlbnRzLnJlcXVlc3RFcnJvcihyZXF1ZXN0LCBlcnJvciwgeyBib2R5OiBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucz8uYm9keSB9KVxuICAgICAgICAvLyBNYXJrIHJlcXVlc3QgYXMgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBTb21ldGltZXMgdGhlIENvbnRlbnQtVHlwZSBtYXkgYmUgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsIGZvciB0aGlzIHJlYXNvbiwgd2UgbmVlZCB0byBjaGVjayB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlclxuICAgICAgY29uc3QgYm9keSA9IGF3YWl0IChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSA/IHJlc3BvbnNlLmpzb24oKSA6IHJlc3BvbnNlLnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbClcblxuICAgICAgcmVzdC5ldmVudHMucmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UsIHtcbiAgICAgICAgcmVxdWVzdEJvZHk6IG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zPy5ib2R5LFxuICAgICAgICByZXNwb25zZUJvZHk6IGJvZHksXG4gICAgICB9KVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYXMgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pXG5cbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgb3B0aW9ucy5yZWplY3QoeyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LCBib2R5IH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gd2FzIHJhdGVsaW1pdGVkLmApXG4gICAgICAgIC8vIFRvbyBtYW55IGF0dGVtcHRzLCBnZXQgcmlkIG9mIHJlcXVlc3QgZnJvbSBxdWV1ZS5cbiAgICAgICAgaWYgKG9wdGlvbnMucmV0cnlDb3VudCA+PSByZXN0Lm1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZXhjZWVkZWQgdGhlIG1heGltdW0gYWxsb3dlZCByZXRyaWVzLmAsICd3aXRoIHBheWxvYWQ6JywgcGF5bG9hZClcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKGBbUkVTVCAtIFJldHJpZXNNYXhlZF0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gKVxuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGVycm9yOiAnVGhlIHJlcXVlc3Qgd2FzIHJhdGUgbGltaXRlZCBhbmQgaXQgbWF4ZWQgb3V0IHRoZSByZXRyaWVzIGxpbWl0LicsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5yZXRyeUNvdW50ICs9IDFcblxuICAgICAgICBjb25zdCByZXNldEFmdGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIpXG4gICAgICAgIGlmIChyZXNldEFmdGVyKSBhd2FpdCBkZWxheShOdW1iZXIocmVzZXRBZnRlcikgKiAxMDAwKVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBvcHRpb25zLnJldHJ5UmVxdWVzdD8uKG9wdGlvbnMpXG4gICAgICB9XG5cbiAgICAgIC8vIERpc2NvcmQgc29tZXRpbWVzIHNlbmRzIGEgcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50XG4gICAgICBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IHJlc3BvbnNlLnN0YXR1cyA9PT0gSHR0cFJlc3BvbnNlQ29kZS5Ob0NvbnRlbnQgPyB1bmRlZmluZWQgOiBib2R5IH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuXG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbikge1xuICAgICAgICAgIG9wdGlvbnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtyb3V0ZX1gLCByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykpXG4gICAgICAgIHJlc3QuZXZlbnRzLnJlcXVlc3QocmVxdWVzdCwge1xuICAgICAgICAgIGJvZHk6IG9wdGlvbnM/LmJvZHksXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2gocmVxdWVzdClcblxuICAgICAgICAvLyBTb21ldGltZXMgdGhlIENvbnRlbnQtVHlwZSBtYXkgYmUgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsIGZvciB0aGlzIHJlYXNvbiwgd2UgbmVlZCB0byBjaGVjayB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgKHJlc3VsdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSA/IHJlc3VsdC5qc29uKCkgOiByZXN1bHQudGV4dCgpKS5jYXRjaCgoKSA9PiBudWxsKVxuXG4gICAgICAgIHJlc3QuZXZlbnRzLnJlc3BvbnNlKHJlcXVlc3QsIHJlc3VsdCwge1xuICAgICAgICAgIHJlcXVlc3RCb2R5OiBvcHRpb25zPy5ib2R5LFxuICAgICAgICAgIHJlc3BvbnNlQm9keTogYm9keSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIGVycm9yLmNhdXNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGJhc2VFcnJvclByb3RvdHlwZSksIHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyAhPT0gMjA0ID8gKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoYm9keSkgOiBib2R5KSA6IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgcm91dGUsXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIHJlcXVlc3RCb2R5T3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgKHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YS5zdGF0dXMgIT09IDIwNCA/ICh0eXBlb2YgZGF0YS5ib2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoZGF0YS5ib2R5KSA6IGRhdGEuYm9keSkgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBlcnJvclRleHQ6IHN0cmluZ1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHJlYXNvbi5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgY2FzZSA0MDA6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJUaGUgb3B0aW9ucyB3YXMgaW1wcm9wZXJseSBmb3JtYXR0ZWQsIG9yIHRoZSBzZXJ2ZXIgY291bGRuJ3QgdW5kZXJzdGFuZCBpdC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgd2FzIG1pc3Npbmcgb3IgaW52YWxpZC4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBBdXRob3JpemF0aW9uIHRva2VuIHlvdSBwYXNzZWQgZGlkIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gdGhlIHJlc291cmNlLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIlRoZSByZXNvdXJjZSBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGRvZXNuJ3QgZXhpc3QuXCJcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwNTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEhUVFAgbWV0aG9kIHVzZWQgaXMgbm90IHZhbGlkIGZvciB0aGUgbG9jYXRpb24gc3BlY2lmaWVkLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQyOTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIllvdSdyZSBiZWluZyByYXRlbGltaXRlZC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNTAyOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGVyZSB3YXMgbm90IGEgZ2F0ZXdheSBhdmFpbGFibGUgdG8gcHJvY2VzcyB5b3VyIG9wdGlvbnMuIFdhaXQgYSBiaXQgYW5kIHJldHJ5LidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IHJlYXNvbi5zdGF0dXNUZXh0ID8/ICdVbmtub3duIGVycm9yJ1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFske3JlYXNvbi5zdGF0dXN9XSAke2Vycm9yVGV4dH1gXG5cbiAgICAgICAgICAgIC8vIElmIGRpc2NvcmQgc2VudCB1cyBKU09OLCBpdCBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhbiBlcnJvciBtZXNzYWdlIGZyb20gd2hpY2ggd2UgY2FuIGdldCBhbmQgYWRkIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yIHRvIHRoZSBlcnJvciBtZXNzYWdlLCB0aGUgZnVsbCBib2R5IHdpbGwgYmUgaW4gdGhlIGVycm9yLmNhdXNlXG4gICAgICAgICAgICAvLyBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZWZlcmVuY2UjZXJyb3ItbWVzc2FnZXNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVhc29uLmJvZHkgPT09ICdvYmplY3QnICYmIGhhc1Byb3BlcnR5KHJlYXNvbi5ib2R5LCAnY29kZScpICYmIGhhc1Byb3BlcnR5KHJlYXNvbi5ib2R5LCAnbWVzc2FnZScpKSB7XG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgKz0gYFxcbkRpc2NvcmQgZXJyb3I6IFske3JlYXNvbi5ib2R5LmNvZGV9XSAke3JlYXNvbi5ib2R5Lm1lc3NhZ2V9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5jYXVzZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShiYXNlRXJyb3JQcm90b3R5cGUpLCByZWFzb24pXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBcHBsaWNhdGlvbkVtb2ppKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGJvZHksIGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICBmb3JtLmFwcGVuZCgnZmlsZScsIG9wdGlvbnMuZmlsZS5ibG9iLCBvcHRpb25zLmZpbGUubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCduYW1lJywgb3B0aW9ucy5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ2Rlc2NyaXB0aW9uJywgb3B0aW9ucy5kZXNjcmlwdGlvbilcbiAgICAgIGZvcm0uYXBwZW5kKCd0YWdzJywgb3B0aW9ucy50YWdzKVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCksIHsgYm9keTogZm9ybSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRm9ydW1UaHJlYWQoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvcnVtKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVJbnZpdGUoY2hhbm5lbElkLCBib2R5ID0ge30sIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkSW52aXRlPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVJvbGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU3RhZ2VJbnN0YW5jZShib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlcygpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVXZWJob29rKGNoYW5uZWxJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgYXZhdGFyOiBvcHRpb25zLmF2YXRhciA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnMuYXZhdGFyKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbChjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUVtb2ppKGd1aWxkSWQsIGlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUFwcGxpY2F0aW9uRW1vamkoaWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgYm9keTogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3duVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICByZXF1ZXN0VG9TcGVha1RpbWVzdGFtcDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcFxuICAgICAgICAgICAgPyBuZXcgRGF0ZShvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlKGd1aWxkSWQsIHJvbGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgdG9waWMsIHJlYXNvbj86IHN0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgYm9keTogeyB0b3BpYyB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIG9wdGlvbnMudXNlcklkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXaWRnZXRTZXR0aW5ncyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB3ZWJob29rQ2hhbm5lbElkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkluZm8oYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbigpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuY3VycmVudEF1dGhvcml6YXRpb24oKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHkuZ3JhbnRUeXBlID09PSAnY2xpZW50X2NyZWRlbnRpYWxzJykge1xuICAgICAgICByZXN0T3B0aW9ucy5ib2R5LnNjb3BlID0gYm9keS5zY29wZS5qb2luKCcgJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4ocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuRXhjaGFuZ2UoKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHJldm9rZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlblJldm9rZSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keTogeyByZWNpcGllbnRJZDogdXNlcklkIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHcm91cERtQ2hhbm5lbChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamkoZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkRW1vamlbXSB9PihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0R2F0ZXdheUJvdD4ocmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMgPSB7IGNvdW50czogdHJ1ZSB9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCwgb3B0aW9ucy5jb3VudHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZHModG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG1ha2VSZXF1ZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkID0gdG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxQYXJ0aWFsPERpc2NvcmRHdWlsZD5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnVzZXJHdWlsZHMob3B0aW9ucyksIG1ha2VSZXF1ZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRQcmV2aWV3KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRQcmV2aWV3PihyZXN0LnJvdXRlcy5ndWlsZHMucHJldmlldyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlW10+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFdlYmhvb2tzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5ndWlsZHMud2ViaG9va3MoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludGVncmF0aW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludGVncmF0aW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2s+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrW10+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrcygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFBpbnMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbnMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UGlubmVkTWVzc2FnZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGlucyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnByaXZhdGUoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5qb2luZWQoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJ1bmVDb3VudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBydW5lZENvdW50PihyZXN0LnJvdXRlcy5ndWlsZHMucHJ1bmUoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wdWJsaWMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGUoZ3VpbGRJZCwgcm9sZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnRbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50VXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PEFycmF5PHsgdXNlcjogRGlzY29yZFVzZXI7IG1lbWJlcj86IERpc2NvcmRNZW1iZXIgfT4+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMudXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNlc3Npb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R2F0ZXdheUJvdCgpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE93blZvaWNlU3RhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmdldFVzZXIoY2hhbm5lbElkLCB1c2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50VXNlcih0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckNvbm5lY3Rpb25zKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENvbm5lY3Rpb25bXT4ocmVzdC5yb3V0ZXMub2F1dGgyLmNvbm5lY3Rpb25zKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFuaXR5VXJsKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVmFuaXR5VXJsPihyZXN0LnJvdXRlcy5ndWlsZHMudmFuaXR5KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWb2ljZVJlZ2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMucmVnaW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9vayh3ZWJob29rSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWxjb21lU2NyZWVuKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0PihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0SnNvbihndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5sZWF2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVUaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHB1Ymxpc2hNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5jcm9zc3Bvc3QoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZURtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayhyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEludGVyYWN0aW9uUmVzcG9uc2UoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx2b2lkIHwgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5jYWxsYmFjayhpbnRlcmFjdGlvbklkLCB0b2tlbiwgcGFyYW1zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQWN0aXZpdHlJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBraWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwaW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VQaW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHsgcHJ1bmVkOiBudW1iZXIgfCBudWxsIH0+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnBydW5lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZWFyY2hNZW1iZXJzKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnNlYXJjaChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkT25ib2FyZGluZyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRJbmNpZGVudHNEYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW5jaWRlbnRBY3Rpb25zKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5iYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bnBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3IoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMudHlwaW5nKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZEd1aWxkTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RFbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudFtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFNrdXMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTa3VbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnNrdXMoYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbltdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRTb3VuZGJvYXJkU291bmQoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuc291bmRib2FyZC5zZW5kU291bmQoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmRbXT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5saXN0RGVmYXVsdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkU291bmRib2FyZFNvdW5kW10gfT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YShhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVMb2JieShvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkuY3JlYXRlKCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldExvYmJ5KGxvYmJ5SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlMb2JieShsb2JieUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVMb2JieShsb2JieUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZE1lbWJlclRvTG9iYnkobG9iYnlJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZExvYmJ5TWVtYmVyPihyZXN0LnJvdXRlcy5sb2JieS5tZW1iZXIobG9iYnlJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlTWVtYmVyRnJvbUxvYmJ5KGxvYmJ5SWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmxvYmJ5Lm1lbWJlcihsb2JieUlkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUxvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubGVhdmUobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaW5rQ2hhbm5lbFRvTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubGluayhsb2JieUlkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVubGlua0NoYW5uZWxUb0xvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxpbmsobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBwcmVmZXJTbmFrZUNhc2UoZW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2FtZWxpemVyID0gZW5hYmxlZCA/ICh4OiBhbnkpID0+IHggOiBjYW1lbGl6ZVxuXG4gICAgICByZXN0LmdldCA9IGFzeW5jICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBvc3QgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QuZGVsZXRlID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wYXRjaCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucHV0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0XG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiByZXN0XG59XG5cbmVudW0gSHR0cFJlc3BvbnNlQ29kZSB7XG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvZGVyIHRvIGNvbnNpZGVyIHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWwuICovXG4gIFN1Y2Nlc3MgPSAyMDAsXG4gIC8qKiBSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGJ1dCBEaXNjb3JkIHJldHVybmVkIGFuIGVtcHR5IGJvZHkuICovXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9yZGVyIHRvIGNvbnNpZGVyIHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuICovXG4gIEVycm9yID0gNDAwLFxuICAvKiogVGhpcyByZXF1ZXN0IGdvdCByYXRlIGxpbWl0ZWQuICovXG4gIFRvb01hbnlSZXF1ZXN0cyA9IDQyOSxcbn1cbiJdLCJuYW1lcyI6WyJCdWZmZXIiLCJpbnNwZWN0IiwiRElTQ09SREVOT19WRVJTSU9OIiwiY2FsY3VsYXRlQml0cyIsImNhbWVsVG9TbmFrZUNhc2UiLCJjYW1lbGl6ZSIsImRlbGF5IiwiZ2V0Qm90SWRGcm9tVG9rZW4iLCJoYXNQcm9wZXJ0eSIsImxvZ2dlciIsInByb2Nlc3NSZWFjdGlvblN0cmluZyIsInVybFRvQmFzZTY0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJRdWV1ZSIsImNyZWF0ZVJvdXRlcyIsIkRJU0NPUkRfQVBJX1ZFUlNJT04iLCJESVNDT1JEX0FQSV9VUkwiLCJBVURJVF9MT0dfUkVBU09OX0hFQURFUiIsIlJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiIsIlJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSIiwiUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSIiwiUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSIiwiUkFURV9MSU1JVF9MSU1JVF9IRUFERVIiLCJSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwib3B0aW9ucyIsImFwcGxpY2F0aW9uSWQiLCJCaWdJbnQiLCJ0b2tlbiIsImJhc2VVcmwiLCJwcm94eSIsImJhc2VFcnJvclByb3RvdHlwZSIsImN1c3RvbSIsIl9kZXB0aCIsIl9pbnNwZWN0IiwiZGVwdGgiLCJJbmZpbml0eSIsImN1c3RvbUluc3BlY3QiLCJyZXN0IiwiYXV0aG9yaXphdGlvbiIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJkZWxldGVRdWV1ZURlbGF5IiwiZ2xvYmFsbHlSYXRlTGltaXRlZCIsImludmFsaWRCdWNrZXQiLCJpc1Byb3hpZWQiLCJzdGFydHNXaXRoIiwidXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCIsIm1heFJldHJ5Q291bnQiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJ2ZXJzaW9uIiwiZXZlbnRzIiwicmVxdWVzdCIsInJlc3BvbnNlIiwicmVxdWVzdEVycm9yIiwicm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJpZGVudGlmaWVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJ1cGRhdGVUb2tlblF1ZXVlcyIsIm9sZFRva2VuIiwibmV3VG9rZW4iLCJFcnJvciIsImhlYWRlcnMiLCJ1bmRlZmluZWQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmV3SWRlbnRpZmllciIsImtleSIsInF1ZXVlIiwiZW50cmllcyIsImRlbGV0ZSIsIm5ld0tleSIsIm5ld1F1ZXVlIiwid2FpdGluZyIsInVuc2hpZnQiLCJwZW5kaW5nIiwiY2xlYW51cCIsInNldCIsInJhdGVsaW1pdFBhdGgiLCJidWNrZXRJZCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJpbmNsdWRlcyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsInRvU3RyaW5nIiwiY3JlYXRlUmVxdWVzdEJvZHkiLCJ1bmF1dGhvcml6ZWQiLCJyZWFzb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImkiLCJsZW5ndGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsImZvcm1Cb2R5IiwiZGlzY29yZEJvZHkiLCJwcm9wIiwicHVzaCIsImpvaW4iLCJhc3NpZ24iLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsInNpemUiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0hlYWRlcnMiLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImxpbWl0IiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImludGVydmFsIiwibWF4IiwiZ2xvYmFsUmVzZXQiLCJzZW5kUmVxdWVzdCIsInJvdXRlIiwicGF5bG9hZCIsInJlcXVlc3RCb2R5T3B0aW9ucyIsImxvZ2dpbmdIZWFkZXJzIiwiYXV0aG9yaXphdGlvblNjaGVtZSIsInNwbGl0IiwiUmVxdWVzdCIsImRlYnVnIiwiY2F0Y2giLCJlcnJvciIsInJlamVjdCIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsImpzb24iLCJ0ZXh0IiwicmVxdWVzdEJvZHkiLCJyZXNwb25zZUJvZHkiLCJzaW1wbGlmeVVybCIsInJldHJ5Q291bnQiLCJyZXNldEFmdGVyIiwicmV0cnlSZXF1ZXN0IiwicmVzb2x2ZSIsInBhcnRzIiwic2Vjb25kTGFzdFBhcnQiLCJzcGxpY2UiLCJwcm9jZXNzUmVxdWVzdCIsInJ1blRocm91Z2hRdWV1ZSIsInF1ZXVlSWRlbnRpZmllciIsIm1ha2VSZXF1ZXN0IiwiYnVja2V0UXVldWUiLCJyZXN1bHQiLCJjYXVzZSIsImNyZWF0ZSIsInBhcnNlIiwiUHJvbWlzZSIsImRhdGEiLCJlcnJvclRleHQiLCJtZXNzYWdlIiwiY29kZSIsInBvc3QiLCJwYXRjaCIsInB1dCIsImFkZFJlYWN0aW9uIiwiY2hhbm5lbElkIiwibWVzc2FnZUlkIiwicmVhY3Rpb24iLCJjaGFubmVscyIsInJlYWN0aW9ucyIsImJvdCIsImFkZFJlYWN0aW9ucyIsIm9yZGVyZWQiLCJhbGwiLCJhZGRSb2xlIiwiZ3VpbGRJZCIsInVzZXJJZCIsInJvbGVJZCIsImd1aWxkcyIsInJvbGVzIiwibWVtYmVyIiwiYWRkVGhyZWFkTWVtYmVyIiwidGhyZWFkcyIsInVzZXIiLCJhZGREbVJlY2lwaWVudCIsImRtUmVjaXBpZW50IiwiY3JlYXRlQXV0b21vZFJ1bGUiLCJhdXRvbW9kIiwicnVsZXMiLCJjcmVhdGVDaGFubmVsIiwiY3JlYXRlRW1vamkiLCJlbW9qaXMiLCJjcmVhdGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaXMiLCJjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJyZXN0T3B0aW9ucyIsImJlYXJlclRva2VuIiwiaW50ZXJhY3Rpb25zIiwiY29tbWFuZHMiLCJjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImNyZWF0ZUd1aWxkU3RpY2tlciIsImZpbGUiLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJzdGlja2VycyIsImNyZWF0ZUd1aWxkVGVtcGxhdGUiLCJ0ZW1wbGF0ZXMiLCJjcmVhdGVGb3J1bVRocmVhZCIsImZvcnVtIiwiY3JlYXRlSW52aXRlIiwiaW52aXRlcyIsImNyZWF0ZVJvbGUiLCJjcmVhdGVTY2hlZHVsZWRFdmVudCIsImNyZWF0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZXMiLCJjcmVhdGVXZWJob29rIiwid2ViaG9va3MiLCJhdmF0YXIiLCJkZWxldGVBdXRvbW9kUnVsZSIsInJ1bGVJZCIsInJ1bGUiLCJkZWxldGVDaGFubmVsIiwiY2hhbm5lbCIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJvdmVyd3JpdGVJZCIsIm92ZXJ3cml0ZSIsImRlbGV0ZUVtb2ppIiwiaWQiLCJlbW9qaSIsImRlbGV0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppIiwiZGVsZXRlRm9sbG93dXBNZXNzYWdlIiwicmVzcG9uc2VzIiwiZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY29tbWFuZElkIiwiY29tbWFuZCIsImRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwib25lIiwiZGVsZXRlR3VpbGRTdGlja2VyIiwic3RpY2tlcklkIiwic3RpY2tlciIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvZGUiLCJndWlsZCIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJzbGljZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0QXBwbGljYXRpb25FbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldENoYW5uZWxQaW5zIiwibWVzc2FnZVBpbnMiLCJnZXRQaW5uZWRNZXNzYWdlcyIsInBpbnMiLCJnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzIiwicHJpdmF0ZSIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJqb2luZWQiLCJnZXRQcnVuZUNvdW50IiwicHJ1bmUiLCJnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMiLCJwdWJsaWMiLCJnZXRSb2xlcyIsImdldFJvbGUiLCJnZXRTY2hlZHVsZWRFdmVudCIsIndpdGhVc2VyQ291bnQiLCJnZXRTY2hlZHVsZWRFdmVudHMiLCJnZXRTY2hlZHVsZWRFdmVudFVzZXJzIiwidXNlcnMiLCJnZXRTZXNzaW9uSW5mbyIsImdldFN0YWdlSW5zdGFuY2UiLCJnZXRPd25Wb2ljZVN0YXRlIiwiZ2V0VXNlclZvaWNlU3RhdGUiLCJnZXRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VycyIsImdldFRocmVhZE1lbWJlciIsImdldFVzZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0Q3VycmVudFVzZXIiLCJnZXRVc2VyQ29ubmVjdGlvbnMiLCJjb25uZWN0aW9ucyIsImdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwicm9sZUNvbm5lY3Rpb25zIiwiZ2V0VmFuaXR5VXJsIiwidmFuaXR5IiwiZ2V0Vm9pY2VSZWdpb25zIiwiZ2V0V2ViaG9vayIsImdldFdlYmhvb2tNZXNzYWdlIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImdldFdlbGNvbWVTY3JlZW4iLCJnZXRXaWRnZXQiLCJ3aWRnZXRKc29uIiwiZ2V0V2lkZ2V0U2V0dGluZ3MiLCJqb2luVGhyZWFkIiwibWUiLCJsZWF2ZUd1aWxkIiwibGVhdmUiLCJsZWF2ZVRocmVhZCIsInB1Ymxpc2hNZXNzYWdlIiwiY3Jvc3Nwb3N0IiwicmVtb3ZlUm9sZSIsInJlbW92ZVRocmVhZE1lbWJlciIsInJlbW92ZURtUmVjaXBpZW50Iiwic2VuZEZvbGxvd3VwTWVzc2FnZSIsInNlbmRJbnRlcmFjdGlvblJlc3BvbnNlIiwiaW50ZXJhY3Rpb25JZCIsInBhcmFtcyIsImNhbGxiYWNrIiwic2VuZE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSIsImdldFBvbGxBbnN3ZXJWb3RlcnMiLCJhbnN3ZXJJZCIsInBvbGxzIiwidm90ZXMiLCJlbmRQb2xsIiwiZXhwaXJlIiwic3luY0d1aWxkVGVtcGxhdGUiLCJiYW5NZW1iZXIiLCJidWxrQmFuTWVtYmVycyIsImJ1bGtCYW4iLCJlZGl0Qm90TWVtYmVyIiwiZWRpdE1lbWJlciIsImdldE1lbWJlciIsImdldEN1cnJlbnRNZW1iZXIiLCJjdXJyZW50TWVtYmVyIiwiZ2V0TWVtYmVycyIsImdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImluc3RhbmNlSWQiLCJhcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJraWNrTWVtYmVyIiwicGluTWVzc2FnZSIsIm1lc3NhZ2VQaW4iLCJwcnVuZU1lbWJlcnMiLCJzZWFyY2hNZW1iZXJzIiwicXVlcnkiLCJzZWFyY2giLCJnZXRHdWlsZE9uYm9hcmRpbmciLCJvbmJvYXJkaW5nIiwiZWRpdEd1aWxkT25ib2FyZGluZyIsIm1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zIiwiaW5jaWRlbnRBY3Rpb25zIiwidW5iYW5NZW1iZXIiLCJ1bnBpbk1lc3NhZ2UiLCJ0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yIiwidHlwaW5nIiwidXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsInVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsImFkZEd1aWxkTWVtYmVyIiwiY3JlYXRlVGVzdEVudGl0bGVtZW50IiwibW9uZXRpemF0aW9uIiwiZW50aXRsZW1lbnRzIiwibGlzdEVudGl0bGVtZW50cyIsImdldEVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImVudGl0bGVtZW50IiwiZGVsZXRlVGVzdEVudGl0bGVtZW50IiwiY29uc3VtZUVudGl0bGVtZW50IiwibGlzdFNrdXMiLCJza3VzIiwibGlzdFN1YnNjcmlwdGlvbnMiLCJza3VJZCIsInN1YnNjcmlwdGlvbnMiLCJnZXRTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb25JZCIsInN1YnNjcmlwdGlvbiIsInNlbmRTb3VuZGJvYXJkU291bmQiLCJzb3VuZGJvYXJkIiwic2VuZFNvdW5kIiwibGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzIiwibGlzdERlZmF1bHQiLCJsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzIiwiZ3VpbGRTb3VuZHMiLCJnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZCIsInNvdW5kSWQiLCJndWlsZFNvdW5kIiwiY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQiLCJtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwiYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhIiwidXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMiLCJjcmVhdGVMb2JieSIsImxvYmJ5IiwiZ2V0TG9iYnkiLCJsb2JieUlkIiwibW9kaWZ5TG9iYnkiLCJkZWxldGVMb2JieSIsImFkZE1lbWJlclRvTG9iYnkiLCJyZW1vdmVNZW1iZXJGcm9tTG9iYnkiLCJsZWF2ZUxvYmJ5IiwibGlua0NoYW5uZWxUb0xvYmJ5IiwibGluayIsInVubGlua0NoYW5uZWxUb0xvYmJ5IiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxNQUFNLFFBQVEsY0FBYTtBQUNwQyxTQUE4QkMsT0FBTyxRQUFRLFlBQVc7QUEyRHhELFNBQ0VDLGtCQUFrQixFQUNsQkMsYUFBYSxFQUNiQyxnQkFBZ0IsRUFDaEJDLFFBQVEsRUFDUkMsS0FBSyxFQUNMQyxpQkFBaUIsRUFDakJDLFdBQVcsRUFDWEMsTUFBTSxFQUNOQyxxQkFBcUIsRUFDckJDLFdBQVcs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